@sabstravtech/obtservices 0.0.3 → 0.0.19020100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/fetchers.d.ts +1 -0
- package/angular/lib/vendor/classes/helpers.d.ts +6 -3
- package/angular/lib/vendor/fetchers/conferma-office.fetcher.d.ts +6 -0
- package/angular/lib/vendor/fetchers/search-irl-stations.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/search.service.d.ts +5 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +268 -6
- package/angular/obtservices.module.d.ts +1 -1
- package/angular/sabstravtech-obtservices-angular.d.ts +6 -5
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/base/fetchers.d.ts +2 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +4 -0
- package/base/lib/vendor/classes/bookable-basket.d.ts +1 -1
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +6 -1
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +21 -5
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +22 -75
- package/base/lib/vendor/classes/helpers.d.ts +3 -0
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +21 -10
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/fetchers/conferma-office.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/irl-quote-fetcher.d.ts +1 -1
- package/base/lib/vendor/fetchers/search-irl-stations.fetcher.d.ts +20 -0
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +1 -1
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +4 -35
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +4 -40
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +9 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +3 -1
- package/base/lib/vendor/interfaces/flight-filters.interface.d.ts +21 -25
- package/base/lib/vendor/interfaces/hotel-recent-search-args.interface.d.ts +23 -0
- package/base/lib/vendor/interfaces/value-display.d.ts +2 -2
- package/base/lib/vendor/models/traveller.object.d.ts +7 -0
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +1 -1
- package/base/lib/vendor/services/search.service.d.ts +10 -3
- package/base/lib/vendor/types/graphql.types.d.ts +253 -6
- package/base/lib/vendor/types/types.d.ts +11 -2
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.js +200 -64
- package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +1632 -1085
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
- package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
- package/esm2015/angular/fetchers.js +2 -1
- package/esm2015/angular/lib/vendor/classes/helpers.js +25 -4
- package/esm2015/angular/lib/vendor/fetchers/conferma-office.fetcher.js +22 -0
- package/esm2015/angular/lib/vendor/fetchers/search-irl-stations.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/search.service.js +35 -29
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +174 -6
- package/esm2015/angular/obtservices.module.js +3 -3
- package/esm2015/angular/sabstravtech-obtservices-angular.js +7 -6
- package/esm2015/base/fetchers.js +3 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +49 -2
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +2 -2
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +95 -15
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +262 -52
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +439 -713
- package/esm2015/base/lib/vendor/classes/helpers.js +239 -24
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +74 -70
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +153 -118
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +58 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +6 -3
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/fetchers/conferma-office.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/irl-quote-fetcher.js +2 -2
- package/esm2015/base/lib/vendor/fetchers/search-irl-stations.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +43 -2
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/flight-filters.interface.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/hotel-recent-search-args.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/value-display.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +8 -1
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +3 -2
- package/esm2015/base/lib/vendor/services/search.service.js +67 -12
- package/esm2015/base/lib/vendor/types/graphql.types.js +13 -2
- package/esm2015/base/lib/vendor/types/types.js +1 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +238 -16
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +1561 -1045
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,15 +1,58 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
4
|
-
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
5
5
|
import { FareType, FlightPassengerType, ServiceType } from '../types/graphql.types';
|
|
6
6
|
import { FlightDirectionEnum, EurostarClassEnum } from '../types/types';
|
|
7
7
|
import { EurostarSearchType } from './eurostar-search-type.enum';
|
|
8
8
|
import { TimeWindow } from './flight-enterprise-search';
|
|
9
|
+
const DEFAULT_FILTERS = Object.freeze({
|
|
10
|
+
stops: {},
|
|
11
|
+
mustInclude: {},
|
|
12
|
+
classes: {},
|
|
13
|
+
airlines: {},
|
|
14
|
+
travelPolicy: {},
|
|
15
|
+
depatureAirport: {},
|
|
16
|
+
depatureReturnAirport: {},
|
|
17
|
+
arrivalAirport: {},
|
|
18
|
+
arrivalReturnAirport: {},
|
|
19
|
+
baggage: {},
|
|
20
|
+
fareTypes: {},
|
|
21
|
+
price: {
|
|
22
|
+
min: Number.MAX_SAFE_INTEGER,
|
|
23
|
+
max: Number.MIN_SAFE_INTEGER
|
|
24
|
+
},
|
|
25
|
+
duration: {
|
|
26
|
+
min: Number.MAX_SAFE_INTEGER,
|
|
27
|
+
max: Number.MIN_SAFE_INTEGER
|
|
28
|
+
},
|
|
29
|
+
returnDuration: {
|
|
30
|
+
min: Number.MAX_SAFE_INTEGER,
|
|
31
|
+
max: Number.MIN_SAFE_INTEGER
|
|
32
|
+
},
|
|
33
|
+
departureTime: {
|
|
34
|
+
min: 0,
|
|
35
|
+
max: 2359
|
|
36
|
+
},
|
|
37
|
+
arrivalTime: {
|
|
38
|
+
min: 0,
|
|
39
|
+
max: 2359
|
|
40
|
+
},
|
|
41
|
+
returnDepartureTime: {
|
|
42
|
+
min: 0,
|
|
43
|
+
max: 2359
|
|
44
|
+
},
|
|
45
|
+
returnArrivalTime: {
|
|
46
|
+
min: 0,
|
|
47
|
+
max: 2359
|
|
48
|
+
},
|
|
49
|
+
flightNumber: ''
|
|
50
|
+
});
|
|
9
51
|
export var SortTypesEurostar;
|
|
10
52
|
(function (SortTypesEurostar) {
|
|
11
53
|
SortTypesEurostar["CheapestFirst"] = "C";
|
|
12
54
|
SortTypesEurostar["EarliestFirst"] = "E";
|
|
55
|
+
SortTypesEurostar["LatestFirst"] = "L";
|
|
13
56
|
})(SortTypesEurostar || (SortTypesEurostar = {}));
|
|
14
57
|
export var SortMethod;
|
|
15
58
|
(function (SortMethod) {
|
|
@@ -21,6 +64,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
21
64
|
super(storageService, (results1) => {
|
|
22
65
|
this.resultQuery = this.getSearchQuery();
|
|
23
66
|
delete this.resultQuery.withGrouped;
|
|
67
|
+
this.filters.next(this.helpers.createFlightFilters(results1.journeys, DEFAULT_FILTERS));
|
|
24
68
|
if (results1 && this.searchService.isFlightsGrouped()) {
|
|
25
69
|
const returndata = (results1.journeys || []).reduce((acc, result) => {
|
|
26
70
|
if (result.outboundFlights.length) {
|
|
@@ -77,6 +121,13 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
77
121
|
icon: 'ico-calendar',
|
|
78
122
|
dir: true,
|
|
79
123
|
code: SortTypesEurostar.EarliestFirst
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
title: 'Time (Descending)',
|
|
127
|
+
method: SortMethod.sortByDate,
|
|
128
|
+
icon: 'ico-calendar',
|
|
129
|
+
dir: true,
|
|
130
|
+
code: SortTypesEurostar.LatestFirst
|
|
80
131
|
}
|
|
81
132
|
];
|
|
82
133
|
this._fareTypeArray = [
|
|
@@ -100,13 +151,15 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
100
151
|
};
|
|
101
152
|
this.searchTypes = [
|
|
102
153
|
{ value: EurostarSearchType.return, display: 'Return' },
|
|
103
|
-
{ value: EurostarSearchType.oneWay, display: 'One-way' }
|
|
154
|
+
{ value: EurostarSearchType.oneWay, display: 'One-way' }
|
|
104
155
|
];
|
|
105
156
|
this.flightsToGroup = {};
|
|
106
157
|
this.grouped = null;
|
|
107
158
|
this.travellers = null;
|
|
108
159
|
this.resultsSessionName = EurostarEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
160
|
+
this.multiResultsSessionName = EurostarEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
109
161
|
this._displayAddHotel = false;
|
|
162
|
+
this.filters = new BehaviorSubject(DEFAULT_FILTERS);
|
|
110
163
|
this._multiDestination = [];
|
|
111
164
|
this.minToHour = (dur) => `${Math.floor(dur / 60)}h ${dur % 60}m`;
|
|
112
165
|
const data = storageService.getSessionItem(EurostarEnterpriseSearch.STORAGE_SESSION_PARAMS) || {
|
|
@@ -147,6 +200,10 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
147
200
|
this.fullResults = this.helpers.clone(results.results);
|
|
148
201
|
this.flightsToGroup = results.groupData || {};
|
|
149
202
|
this.resultQuery = results.query;
|
|
203
|
+
const isFlightsGrouped = this.searchService.isFlightsGrouped();
|
|
204
|
+
if (!isFlightsGrouped) {
|
|
205
|
+
this._cheapestResultPrice = this.updateLowestPrice(results.results);
|
|
206
|
+
}
|
|
150
207
|
this.results.next(results.results || []);
|
|
151
208
|
this._isValid();
|
|
152
209
|
this.negotiated =
|
|
@@ -537,13 +594,102 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
537
594
|
tempParams: this.tempParams,
|
|
538
595
|
originalUserSearch: this.originalUserSearch
|
|
539
596
|
});
|
|
597
|
+
const query = this.getSearchQuery();
|
|
598
|
+
this.searchService.saveRecentSearch(this.getRecentSearchQuery(query));
|
|
540
599
|
return this._startSearch(this.eurostarFetcher.fetchList(this.getSearchQuery()));
|
|
541
600
|
}
|
|
542
601
|
else {
|
|
543
602
|
return Promise.resolve(false);
|
|
544
603
|
}
|
|
545
604
|
}
|
|
546
|
-
|
|
605
|
+
getRecentSearchQuery(query) {
|
|
606
|
+
return {
|
|
607
|
+
serviceType: ServiceType.Eurostar,
|
|
608
|
+
searchArgs: query,
|
|
609
|
+
travelDate: this.outBoundDate.format(),
|
|
610
|
+
travellers: this.helpers.getTravellersId(this.travellers)
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
startRecentSearch(recentSearch) {
|
|
614
|
+
if (recentSearch.searchArgs.outboundDate) {
|
|
615
|
+
this.outBoundDate = this.convertRecentSearchDateTime(recentSearch.searchArgs.outboundDate, recentSearch.searchArgs.outboundDepartureTimeWindow);
|
|
616
|
+
}
|
|
617
|
+
if (recentSearch.searchArgs.returnDate) {
|
|
618
|
+
this.inboundDate = this.convertRecentSearchDateTime(recentSearch.searchArgs.returnDate, recentSearch.searchArgs.returnDepartureTimeWindow);
|
|
619
|
+
}
|
|
620
|
+
this.fareType = recentSearch.searchArgs.fareType;
|
|
621
|
+
this.maxConnections = recentSearch.searchArgs.maxConnections;
|
|
622
|
+
if (recentSearch.searchArgs.outboundCabinClass) {
|
|
623
|
+
this.cabinClass = recentSearch.searchArgs.outboundCabinClass[0];
|
|
624
|
+
}
|
|
625
|
+
if (recentSearch.searchArgs.returnCabinClass) {
|
|
626
|
+
this.returnCabinClass = recentSearch.searchArgs.returnCabinClass[0];
|
|
627
|
+
}
|
|
628
|
+
this.includeNearbyAirports = recentSearch.searchArgs.includeNearbyAirports;
|
|
629
|
+
this.chosenSearchType = recentSearch.searchArgs.returnTrip
|
|
630
|
+
? EurostarSearchType.return
|
|
631
|
+
: EurostarSearchType.oneWay;
|
|
632
|
+
if (recentSearch.searchArgs.outboundDepartureTimeWindow) {
|
|
633
|
+
this.outTimeCriteria = TimeWindow.Depart;
|
|
634
|
+
}
|
|
635
|
+
else if (recentSearch.searchArgs.outboundArrivalTimeWindow) {
|
|
636
|
+
this.outTimeCriteria = TimeWindow.Arrive;
|
|
637
|
+
}
|
|
638
|
+
else {
|
|
639
|
+
this.outTimeCriteria = TimeWindow.Anytime;
|
|
640
|
+
}
|
|
641
|
+
if (recentSearch.searchArgs.returnDepartureTimeWindow) {
|
|
642
|
+
this.inTimeCriteria = TimeWindow.Depart;
|
|
643
|
+
}
|
|
644
|
+
else if (recentSearch.searchArgs.returnArrivalTimeWindow) {
|
|
645
|
+
this.inTimeCriteria = TimeWindow.Arrive;
|
|
646
|
+
}
|
|
647
|
+
else {
|
|
648
|
+
this.inTimeCriteria = TimeWindow.Anytime;
|
|
649
|
+
}
|
|
650
|
+
combineLatest([
|
|
651
|
+
this.searchService.getAirportByCode(recentSearch.searchArgs.originAirport),
|
|
652
|
+
this.searchService.getAirportByCode(recentSearch.searchArgs.destinationAirport)
|
|
653
|
+
]).subscribe(([departLocation, arriveLocation]) => {
|
|
654
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
655
|
+
if (departLocation && arriveLocation) {
|
|
656
|
+
this.departLocation = {
|
|
657
|
+
destination: departLocation.iataMatch.name,
|
|
658
|
+
gateway: departLocation.iataMatch.iata,
|
|
659
|
+
terminals: this.searchService.processTerminals(departLocation.iataMatch.terminals),
|
|
660
|
+
country: (_b = (_a = departLocation.iataMatch) === null || _a === void 0 ? void 0 : _a.locationDetails) === null || _b === void 0 ? void 0 : _b.country,
|
|
661
|
+
postcode: (_d = (_c = departLocation.iataMatch) === null || _c === void 0 ? void 0 : _c.locationDetails) === null || _d === void 0 ? void 0 : _d.postcode,
|
|
662
|
+
countryCode: (_f = (_e = departLocation.iataMatch) === null || _e === void 0 ? void 0 : _e.locationDetails) === null || _f === void 0 ? void 0 : _f.countryCode
|
|
663
|
+
};
|
|
664
|
+
this.arriveLocation = {
|
|
665
|
+
destination: arriveLocation.iataMatch.name,
|
|
666
|
+
gateway: arriveLocation.iataMatch.iata,
|
|
667
|
+
terminals: this.searchService.processTerminals(arriveLocation.iataMatch.terminals),
|
|
668
|
+
country: (_h = (_g = arriveLocation.iataMatch) === null || _g === void 0 ? void 0 : _g.locationDetails) === null || _h === void 0 ? void 0 : _h.country,
|
|
669
|
+
postcode: (_k = (_j = arriveLocation.iataMatch) === null || _j === void 0 ? void 0 : _j.locationDetails) === null || _k === void 0 ? void 0 : _k.postcode,
|
|
670
|
+
countryCode: (_m = (_l = arriveLocation.iataMatch) === null || _l === void 0 ? void 0 : _l.locationDetails) === null || _m === void 0 ? void 0 : _m.countryCode
|
|
671
|
+
};
|
|
672
|
+
if (recentSearch.searchArgs.preferredCarriers) {
|
|
673
|
+
let preferredCarriers = [];
|
|
674
|
+
recentSearch.searchArgs.preferredCarriers.map((preferredCarry) => {
|
|
675
|
+
this.searchService
|
|
676
|
+
.getAirlinesList(preferredCarry)
|
|
677
|
+
.subscribe((items) => {
|
|
678
|
+
items.map((item) => {
|
|
679
|
+
if (item.code === preferredCarry) {
|
|
680
|
+
preferredCarriers.push(item);
|
|
681
|
+
}
|
|
682
|
+
});
|
|
683
|
+
this.preferredCarriers = preferredCarriers;
|
|
684
|
+
this.searchService.startSearches();
|
|
685
|
+
});
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
this.searchService.startSearches();
|
|
689
|
+
}
|
|
690
|
+
});
|
|
691
|
+
this.searchService.startSearches();
|
|
692
|
+
}
|
|
547
693
|
makeDepartureTimeWindow(dateTime, window) {
|
|
548
694
|
return window === TimeWindow.Depart
|
|
549
695
|
? this.helpers.makeTimeWindow(dateTime, -2, 2)
|
|
@@ -555,6 +701,17 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
555
701
|
}
|
|
556
702
|
return this.helpers.makeTimeWindow(dateTime, -2, 2);
|
|
557
703
|
}
|
|
704
|
+
convertRecentSearchDateTime(date, timeWindow) {
|
|
705
|
+
if (timeWindow) {
|
|
706
|
+
const flightTime = timeWindow.split('-');
|
|
707
|
+
let timeAndDate = moment(date).add(moment.duration(this.helpers.hhmmToTime(flightTime[0])));
|
|
708
|
+
// add 2 hour
|
|
709
|
+
return timeAndDate.clone().add(2, 'hour');
|
|
710
|
+
}
|
|
711
|
+
else {
|
|
712
|
+
return moment(date);
|
|
713
|
+
}
|
|
714
|
+
}
|
|
558
715
|
getSearchQuery() {
|
|
559
716
|
return this.helpers.removeNulls(Object.assign({}, {
|
|
560
717
|
originAirport: this._originAirport,
|
|
@@ -636,6 +793,52 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
636
793
|
}
|
|
637
794
|
this.results.next(results);
|
|
638
795
|
}
|
|
796
|
+
sortResultsFlightJourneys(sortMethodValue, inbound = false, givenResults) {
|
|
797
|
+
let results = this.helpers.clone(givenResults);
|
|
798
|
+
switch (sortMethodValue) {
|
|
799
|
+
case SortTypesEurostar.CheapestFirst:
|
|
800
|
+
results = this.sortByPriceFlight(results);
|
|
801
|
+
break;
|
|
802
|
+
case SortTypesEurostar.EarliestFirst:
|
|
803
|
+
results = this.sortByDateFlight(results, inbound);
|
|
804
|
+
break;
|
|
805
|
+
case SortTypesEurostar.LatestFirst:
|
|
806
|
+
results = this.sortByDateFlightDecending(results, inbound);
|
|
807
|
+
break;
|
|
808
|
+
default:
|
|
809
|
+
console.error(`+++ Unknown sorting method: ${sortMethodValue} +++`);
|
|
810
|
+
}
|
|
811
|
+
return results;
|
|
812
|
+
}
|
|
813
|
+
sortByPriceFlight(results) {
|
|
814
|
+
return results.sort((a, b) => {
|
|
815
|
+
return Number(a.total.price) - Number(b.total.price);
|
|
816
|
+
});
|
|
817
|
+
}
|
|
818
|
+
sortByDateFlight(results, inbound) {
|
|
819
|
+
return results.sort((a, b) => {
|
|
820
|
+
if (inbound) {
|
|
821
|
+
return (moment(a.inboundFlights[0].dateTimeDeparting).unix() -
|
|
822
|
+
moment(b.inboundFlights[0].dateTimeDeparting).unix());
|
|
823
|
+
}
|
|
824
|
+
else {
|
|
825
|
+
return (moment(a.outboundFlights[0].dateTimeDeparting).unix() -
|
|
826
|
+
moment(b.outboundFlights[0].dateTimeDeparting).unix());
|
|
827
|
+
}
|
|
828
|
+
});
|
|
829
|
+
}
|
|
830
|
+
sortByDateFlightDecending(results, inbound) {
|
|
831
|
+
return results.sort((a, b) => {
|
|
832
|
+
if (inbound) {
|
|
833
|
+
return (moment(b.inboundFlights[0].dateTimeDeparting).unix() -
|
|
834
|
+
moment(a.inboundFlights[0].dateTimeDeparting).unix());
|
|
835
|
+
}
|
|
836
|
+
else {
|
|
837
|
+
return (moment(b.outboundFlights[0].dateTimeDeparting).unix() -
|
|
838
|
+
moment(a.outboundFlights[0].dateTimeDeparting).unix());
|
|
839
|
+
}
|
|
840
|
+
});
|
|
841
|
+
}
|
|
639
842
|
/**
|
|
640
843
|
* Sort results by departure time
|
|
641
844
|
*
|
|
@@ -724,6 +927,46 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
724
927
|
}
|
|
725
928
|
return num.toString().padStart(2, '0');
|
|
726
929
|
}
|
|
930
|
+
/**
|
|
931
|
+
* @description - apply all filters to results
|
|
932
|
+
* @param filters
|
|
933
|
+
* @param inbound
|
|
934
|
+
* @param results
|
|
935
|
+
* @returns
|
|
936
|
+
*/
|
|
937
|
+
applyFilters(filters, inbound = false) {
|
|
938
|
+
// let newResults = this.helpers.clone(results);
|
|
939
|
+
// if (inbound) {
|
|
940
|
+
// newResults = this.filterByReturnDepartureTime(
|
|
941
|
+
// filters.minReturnDepartureTime,
|
|
942
|
+
// filters.maxReturnDepartureTime,
|
|
943
|
+
// newResults
|
|
944
|
+
// );
|
|
945
|
+
// newResults = this.filterByReturnArrivalTime(
|
|
946
|
+
// filters.minReturnArrivalTime,
|
|
947
|
+
// filters.maxReturnArrivalTime,
|
|
948
|
+
// newResults
|
|
949
|
+
// );
|
|
950
|
+
// }
|
|
951
|
+
// // Global (apply to both inbound and outbound results) filters
|
|
952
|
+
// newResults = this.filterByDepartureTime(
|
|
953
|
+
// filters.minDepartureTime,
|
|
954
|
+
// filters.maxDepartureTime,
|
|
955
|
+
// newResults
|
|
956
|
+
// );
|
|
957
|
+
// newResults = this.filterByArrivalTime(
|
|
958
|
+
// filters.minArrivalTime,
|
|
959
|
+
// filters.maxArrivalTime,
|
|
960
|
+
// newResults
|
|
961
|
+
// );
|
|
962
|
+
// newResults = this.filterResultsByStops(filters.stops, newResults);
|
|
963
|
+
// newResults = this.filterByPrice(
|
|
964
|
+
// filters.minPrice,
|
|
965
|
+
// filters.maxPrice,
|
|
966
|
+
// newResults
|
|
967
|
+
// );
|
|
968
|
+
// return newResults;
|
|
969
|
+
}
|
|
727
970
|
filterByDuration(minDuration, maxDuration, results, isReturn = false) {
|
|
728
971
|
results = results.filter((result) => {
|
|
729
972
|
var _a;
|
|
@@ -910,39 +1153,6 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
910
1153
|
}
|
|
911
1154
|
return results;
|
|
912
1155
|
}
|
|
913
|
-
createFilters(results = []) {
|
|
914
|
-
const minPrice = this.getMinPrice(results);
|
|
915
|
-
const maxPrice = this.getMaxPrice(results);
|
|
916
|
-
const newFilters = {
|
|
917
|
-
stops: this.getAllStops(results),
|
|
918
|
-
mustInclude: [],
|
|
919
|
-
classes: this.getAllClasses(results),
|
|
920
|
-
airlines: this.getAllAirlines(results),
|
|
921
|
-
travelPolicy: [],
|
|
922
|
-
depatureAirport: this.getAllDepartureAirports(results),
|
|
923
|
-
arrivalAirport: this.getAllArrivalAirports(results),
|
|
924
|
-
minPrice,
|
|
925
|
-
maxPrice,
|
|
926
|
-
depatureReturnAirport: this.getAllDepartureAirports(results, true),
|
|
927
|
-
arrivalReturnAirport: this.getAllArrivalAirports(results, true),
|
|
928
|
-
baggage: this.getBaggage(results),
|
|
929
|
-
fareTypes: [],
|
|
930
|
-
minDuration: this.getMinDuration(results),
|
|
931
|
-
maxDuration: this.getMaxDuration(results),
|
|
932
|
-
minReturnDuration: this.getMinDuration(results, true),
|
|
933
|
-
maxReturnDuration: this.getMaxDuration(results, true),
|
|
934
|
-
minDepartureTime: this.getMinDepartureTime(results),
|
|
935
|
-
maxDepartureTime: this.getMaxDepartureTime(results),
|
|
936
|
-
minArrivalTime: this.getMinArrivalTime(results),
|
|
937
|
-
maxArrivalTime: this.getMaxArrivalTime(results),
|
|
938
|
-
minReturnDepartureTime: this.getMinReturnDepartureTime(results),
|
|
939
|
-
maxReturnDepartureTime: this.getMaxReturnDepartureTime(results),
|
|
940
|
-
maxReturnArrivalTime: this.getMaxReturnArrivalTime(results),
|
|
941
|
-
minReturnArrivalTime: this.getMinReturnArrivalTime(results),
|
|
942
|
-
flightNumber: ''
|
|
943
|
-
};
|
|
944
|
-
return newFilters;
|
|
945
|
-
}
|
|
946
1156
|
getMinDuration(results, isReturn = false) {
|
|
947
1157
|
let min = 0;
|
|
948
1158
|
results.forEach((result) => {
|
|
@@ -1285,9 +1495,7 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1285
1495
|
outboundFlights: [
|
|
1286
1496
|
this.makeSchemaFlights(this.selectedEurostarFare.fare, 'outbound', 0)
|
|
1287
1497
|
],
|
|
1288
|
-
inboundFlights: [
|
|
1289
|
-
this.makeSchemaFlights(fare.fare, 'inbound', 0)
|
|
1290
|
-
],
|
|
1498
|
+
inboundFlights: [this.makeSchemaFlights(fare.fare, 'inbound', 0)],
|
|
1291
1499
|
journeyType: 'roundtrip'
|
|
1292
1500
|
}, selectedEurostar.dateDeparture, this.selectedGroupEurostar.dateArrival);
|
|
1293
1501
|
this.results.next(this.fullResults);
|
|
@@ -1295,17 +1503,17 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1295
1503
|
});
|
|
1296
1504
|
}
|
|
1297
1505
|
updateLowestPrice(results) {
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1506
|
+
if (!results.length)
|
|
1507
|
+
return;
|
|
1508
|
+
const result = results[0];
|
|
1509
|
+
const journeys = result.journeys;
|
|
1510
|
+
const currency = journeys[0].total.currency;
|
|
1511
|
+
return journeys.reduce((cheapestPrice, result) => {
|
|
1512
|
+
const price = result.total.price;
|
|
1513
|
+
if (cheapestPrice.amount > price)
|
|
1514
|
+
cheapestPrice.amount = price;
|
|
1515
|
+
return cheapestPrice;
|
|
1516
|
+
}, { amount: Number.MAX_SAFE_INTEGER, currencyCode: currency });
|
|
1309
1517
|
}
|
|
1310
1518
|
doBooking(intBasket, selectedFlight, schemaDetails, outboundDate, inboundDate) {
|
|
1311
1519
|
const { sourceId, co2PerItem, co2PerPassenger, total } = selectedFlight;
|
|
@@ -1424,7 +1632,9 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1424
1632
|
if (basket) {
|
|
1425
1633
|
const { sourceId, co2PerItem, co2PerPassenger, total } = eurostarQuote;
|
|
1426
1634
|
const outboundDate = moment(eurostarQuote.outboundFlights[0].dateTimeDeparting);
|
|
1427
|
-
const inboundDate = eurostarQuote.inboundFlights.length
|
|
1635
|
+
const inboundDate = eurostarQuote.inboundFlights.length
|
|
1636
|
+
? moment(eurostarQuote.inboundFlights[0].dateTimeDeparting)
|
|
1637
|
+
: null;
|
|
1428
1638
|
const schemaDetails = {
|
|
1429
1639
|
outboundFlights: [
|
|
1430
1640
|
...eurostarQuote.outboundFlights.map((flight, segmentIndex) => this.makeSchemaFlights(flight, 'outbound', 0, segmentIndex))
|
|
@@ -1459,4 +1669,4 @@ export class EurostarEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1459
1669
|
}
|
|
1460
1670
|
EurostarEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_eurostar';
|
|
1461
1671
|
EurostarEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_eurostar';
|
|
1462
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXZDLE9BQU8sRUFLTCxRQUFRLEVBTVIsbUJBQW1CLEVBRW5CLFdBQVcsRUFDWixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFLTCxtQkFBbUIsRUFRbkIsaUJBQWlCLEVBRWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFPeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFjakUsT0FBTyxFQUdMLFVBQVUsRUFDWCxNQUFNLDRCQUE0QixDQUFDO0FBYXBDLE1BQU0sQ0FBTixJQUFZLGlCQUdYO0FBSEQsV0FBWSxpQkFBaUI7SUFDM0Isd0NBQW1CLENBQUE7SUFDbkIsd0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFHNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxVQUdYO0FBSEQsV0FBWSxVQUFVO0lBQ3BCLHlDQUEyQixDQUFBO0lBQzNCLHVDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFIVyxVQUFVLEtBQVYsVUFBVSxRQUdyQjtBQXdCRCxNQUFNLE9BQU8sd0JBQ1gsU0FBUSxvQkFJUDtJQThaRCxZQUNVLGVBQStDLEVBQy9DLE9BQTJCLEVBQ25DLFdBQWlDLEVBQ3pCLGFBQStDLEVBQ3ZELGNBQWtDLEVBQzFCLGFBQStDO1FBRXZELEtBQUssQ0FDSCxjQUFj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QyxhQUFhLENBQUMsV0FBVyxDQUNuQyxPQUFPLEVBQ1AsU0FBUyxFQUNULElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7YUFDSDtZQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztRQUNwRSxDQUFDO0tBQUE7O0FBeDlEZSwrQ0FBc0IsR0FBRyxpQkFBaUIsQ0FBQztBQUMzQyxnREFBdUIsR0FBRyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7IEZsaWdodEZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZVR5cGUsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBGbGlnaHRGYXJlVG90YWwsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGVcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBFdXJvc3RhclF1b3RlUmVzdWx0LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIEZsaWdodERpcmVjdGlvbkVudW0sXHJcbiAgR3JvdXBlZEZsaWdodHMsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5V2l0aFNlbGVjdGVkLFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBFdXJvc3Rhckdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICBFdXJvc3RhclJlc3VsdHMsXHJcbiAgRXVyb3N0YXJJdGVtLFxyXG4gIEV1cm9zdGFyRmFyZSxcclxuICBFdXJvc3RhckNsYXNzRW51bSxcclxuICBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXlcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRnVsbFVzZXJEZXRhaWxzLFxyXG4gIFVzZXJTZXJ2aWNlSW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IEV1cm9zdGFyU2VhcmNoVHlwZSB9IGZyb20gJy4vZXVyb3N0YXItc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcixcclxuICBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9ldXJvc3Rhci1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBFdXJvc3RhckVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgRXVyb3N0YXJUZW1wUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEdyb3VwcyxcclxuICBGbGlnaHRPcGVyYXRvcixcclxuICBUaW1lV2luZG93XHJcbn0gZnJvbSAnLi9mbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5leHBvcnQgaW50ZXJmYWNlIEFsbG93ZWRDbGFzc0V1cm9zdGFyIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogRXVyb3N0YXJDbGFzc0VudW0gfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBBbGxvd2VkQ2xhc3Nlc0V1cm9zdGFyID0gQWxsb3dlZENsYXNzRXVyb3N0YXJbXTtcclxuXHJcbmV4cG9ydCB0eXBlIEV1cm9zdGFyU3RhdGlvbiA9IHtcclxuICBnYXRld2F5OiBzdHJpbmc7XHJcbiAgZGVzdGluYXRpb246IHN0cmluZztcclxufTtcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0V1cm9zdGFyIHtcclxuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxyXG4gIEVhcmxpZXN0Rmlyc3QgPSAnRSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU29ydE1ldGhvZCB7XHJcbiAgc29ydEJ5UHJpY2UgPSAnc29ydEJ5UHJpY2UnLFxyXG4gIHNvcnRCeURhdGUgPSAnc29ydEJ5RGF0ZSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0VHlwZUV1cm9zdGFyIHtcclxuICAvKiogVGl0bGUgZGlzcGxheWVkIG9uIGRyb3Bkb3duICovXHJcbiAgdGl0bGU6IHN0cmluZztcclxuICAvKiogTWV0aG9kIG5hbWUgdXNlZCBieSBjb21wb25lbnQgdG8gc29ydCByZXN1bHRzICovXHJcbiAgbWV0aG9kOiBTb3J0TWV0aG9kO1xyXG4gIC8qKiBJY29uIGRpc3BsYXllZCBvbiBkcm9wIGRvd24gKi9cclxuICBpY29uOiBzdHJpbmc7XHJcbiAgLyoqIFNvcnRpbmcgZGlyZWN0aW9uIHRydWUgZm9yIGFzYywgZmFsc2UgZm9yIGRzYyAqL1xyXG4gIGRpcjogYm9vbGVhbjtcclxuICAvLyB0aGlzIGlzIHdoYXQgd2Ugd2lsbCB1c2UgdG8gc29ydFxyXG4gIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBFdXJvc3Rhckdyb3VwcyA9ICdTdGFuZGFyZCcgfCAnU3RhbmRhcmRQcmVtaWVyJyB8ICdCdXNpbmVzc1ByZW1pZXInO1xyXG5cclxuaW50ZXJmYWNlIEV1cm9zdGFyU2Vzc2lvblR5cGUge1xyXG4gIHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cERhdGE6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW10gfTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2g8U0VfUSBleHRlbmRzIEV1cm9zdGFyUXVvdGVGZXRjaGVyVHlwZT5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gIEV1cm9zdGFyVGVtcFBhcmFtcyxcclxuICBFdXJvc3RhclF1b3RlUmVzdWx0LFxyXG4gIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSB7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2V1cm9zdGFyJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19ldXJvc3Rhcic7XHJcblxyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkV1cm9zdGFyO1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXNFdXJvc3Rhcj4gPVxyXG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlc0V1cm9zdGFyPihbXSk7XHJcbiAgdGltZUNyaXRlcmlhT3B0aW9uczogQmVoYXZpb3JTdWJqZWN0PFRpbWVXaW5kb3dbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxyXG4gICAgVGltZVdpbmRvd1tdXHJcbiAgPihbXSk7XHJcbiAgZmxpZ2h0T3BlcmF0b3JzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0T3BlcmF0b3JbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxyXG4gICAgRmxpZ2h0T3BlcmF0b3JbXVxyXG4gID4oW10pO1xyXG5cclxuICBwcml2YXRlIF9uZWdvdGlhdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbmVhcmJ5X2FpcnBvcnRzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XHJcbiAgcHJpdmF0ZSBfc29ydEFycmF5OiBTb3J0VHlwZUV1cm9zdGFyW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnUHJpY2UnLFxyXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2Quc29ydEJ5UHJpY2UsXHJcbiAgICAgIGljb246ICdpY28tZG9sbGFyJyxcclxuICAgICAgZGlyOiB0cnVlLFxyXG4gICAgICBjb2RlOiBTb3J0VHlwZXNFdXJvc3Rhci5DaGVhcGVzdEZpcnN0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1RpbWUnLFxyXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2Quc29ydEJ5RGF0ZSxcclxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcicsXHJcbiAgICAgIGRpcjogdHJ1ZSxcclxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuRWFybGllc3RGaXJzdFxyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX2ZhcmVUeXBlQXJyYXk6IFZhbHVlRGlzcGxheVtdID0gW1xyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuRmxleGlibGUsIGRpc3BsYXk6ICdGbGV4aWJsZScgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxlaXN1cmUsIGRpc3BsYXk6ICdMZWlzdXJlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTmVnb3RpYXRlZCwgZGlzcGxheTogJ05lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Ob25OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTm9uLU5lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuU2VsZWN0QW5kUHJvLCBkaXNwbGF5OiAnU2VsZWN0ICYgUHJvJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1PdXRCb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtaW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUeXBlczogVmFsdWVEaXNwbGF5W10gPSBbXHJcbiAgICB7dmFsdWU6IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4sIGRpc3BsYXk6ICdSZXR1cm4nfSxcclxuICAgIHt2YWx1ZTogRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheSwgZGlzcGxheTogJ09uZS13YXknfSxcclxuICBdXHJcblxyXG4gIHByaXZhdGUgX291dERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfb3V0VGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2luRGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9pblRpbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9kZXN0aW5hdGlvbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9vcmlnaW5BaXJwb3J0OiBhbnk7XHJcbiAgcHJpdmF0ZSBfcGFzc2VuZ2VyczogYW55O1xyXG4gIHByaXZhdGUgZ3JvdXBlZE9iamVjdDogRmxpZ2h0SXRpbmVyYXJ5V2l0aFNlbGVjdGVkW107XHJcbiAgcHJvdGVjdGVkIGZsaWdodHNUb0dyb3VwOiB7IFtrZXk6IG51bWJlcl06IG51bWJlcltdIH0gPSB7fTtcclxuICBwcm90ZWN0ZWQgcmVzdWx0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xyXG4gIHByb3RlY3RlZCBncm91cGVkOiBHcm91cGVkRmxpZ2h0cyA9IG51bGw7XHJcbiAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBudWxsO1xyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHNlbGVjdGVkR3JvdXBGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhTZWxlY3RlZDtcclxuICBwcml2YXRlIF9kaXNwbGF5QWRkSG90ZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGdldCBkaXNwbGF5QWRkSG90ZWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheUFkZEhvdGVsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkaXNwbGF5QWRkSG90ZWwobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNwbGF5QWRkSG90ZWwgPSBuZXdWYWw7XHJcbiAgfVxyXG4gIHNlbGVjdGVkR3JvdXBFdXJvc3RhcjogRXVyb3N0YXJJdGVtO1xyXG4gIHNlbGVjdGVkRXVyb3N0YXJGYXJlOiBFdXJvc3RhckZhcmU7XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCkge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDk2KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHJlZmVycmVkQ2FycmllcnMoKTogT0JUQWlybGluZXNEZXRhaWxzW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcHJlZmVycmVkQ2FycmllcnModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IxKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjEodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IyKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjIodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IzKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3I0KCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvcGVyYXRvcjQodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9taW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9taW5EYXRlIHx8IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoKSk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydExvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydExvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gJyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcXVlcnlPcmlnaW5BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vcmlnaW5BaXJwb3J0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeURlc3RpbmF0aW9uQWlwb3J0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnREYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX291dERhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnRUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0VGltZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0VGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgdGhpcy5fb3V0RGF0ZSxcclxuICAgICAgdGhpcy5fb3V0VGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3V0Qm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG91dEJvdW5kRGF0ZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdmFsdWUgPSBtb21lbnQodmFsdWUpO1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMubWluaW11bUluQm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiB2YWx1ZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiB2YWx1ZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSAmJlxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIodGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSkuYWRkKDEsICdkYXknKTtcclxuICAgIH1cclxuICAgIHRoaXMuX291dERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgdGhpcy5fb3V0VGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZXR1cm5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcmV0dXJuRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5faW5EYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2luRGF0ZSwgdGhpcy5faW5UaW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlVGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luVGltZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlVGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpbmJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGluYm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSk7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgdGhpcy5faW5UaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFycml2ZUxvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFycml2ZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCByZXR1cm5DYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcztcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5DYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IEV1cm9zdGFyU2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBFdXJvc3RhclNlYXJjaFR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1JldHVybigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybjtcclxuICB9XHJcblxyXG4gIGdldCBvdXRUaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRUaW1lQ3JpdGVyaWEodmFsdWU6IFRpbWVXaW5kb3cpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpblRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5UaW1lQ3JpdGVyaWEodmFsdWU6IFRpbWVXaW5kb3cpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBnZXQgbWF4Q29ubmVjdGlvbnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgbWF4Q29ubmVjdGlvbnModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tdWx0aURlc3RpbmF0aW9uOiBEZXN0aW5hdGlvbkVudHJ5W10gPSBbXTtcclxuICBnZXQgbXVsdGlEZXN0aW5hdGlvbigpOiBJTXVsdGlEZXN0aW5hdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBtdWx0aURlc3RpbmF0aW9uKHZhbHVlQXJyYXk6IElNdWx0aURlc3RpbmF0aW9uW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uID0gdmFsdWVBcnJheTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBTb3J0VHlwZUV1cm9zdGFyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZXNWYWx1ZXMoKTogVmFsdWVEaXNwbGF5W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZhcmVUeXBlQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyZVR5cGUoKTogRmFyZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBmYXJlVHlwZSh2YWx1ZTogRmFyZVR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5lZ290aWF0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVnb3RpYXRlZDtcclxuICB9XHJcblxyXG4gIHNldCBuZWdvdGlhdGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9uZWdvdGlhdGVkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5jbHVkZU5lYXJieUFpcnBvcnRzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5jbHVkZU5lYXJieUFpcnBvcnRzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gdmFsdWU7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBldXJvc3RhckZldGNoZXI6IEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcjxTRV9RPixcclxuICAgIHByaXZhdGUgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihcclxuICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcblxyXG4gICAgICAocmVzdWx0czE6IEV1cm9zdGFyUXVvdGVSZXN1bHQpOiBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucmVzdWx0UXVlcnkud2l0aEdyb3VwZWQ7XHJcbiAgICAgICAgaWYocmVzdWx0czEgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSl7XHJcbiAgICAgICAgICBjb25zdCByZXR1cm5kYXRhID0gKHJlc3VsdHMxLmpvdXJuZXlzIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChhY2M6IEV1cm9zdGFyUmVzdWx0cywgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnkpOiBFdXJvc3RhclJlc3VsdHMgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXVyb1Jlc3VsdCA9IHRoaXMuZm9ybWF0RXVyb3N0YXJSZXN1bHRzKFxyXG4gICAgICAgICAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICByZXN1bHQudG90YWxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlclBhc3NlbmdlciA9IHJlc3VsdC5jbzJQZXJQYXNzZW5nZXI7XHJcbiAgICAgICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcclxuICAgICAgICAgICAgICAgIGV1cm9SZXN1bHQuc291cmNlSWQgPSByZXN1bHQuc291cmNlSWQ7XHJcbiAgICAgICAgICAgICAgICBldXJvUmVzdWx0LnRvdGFsID0gcmVzdWx0LnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKHJlc3VsdC5vdXRib3VuZFRvdGFsRHVyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAhYWNjLm91dGJvdW5kLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW06IEV1cm9zdGFySXRlbSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZURlcGFydHVyZSA9PT0gZXVyb1Jlc3VsdC5kYXRlRGVwYXJ0dXJlXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBhY2Mub3V0Ym91bmQucHVzaChldXJvUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldXJvUmVzdWx0ID0gdGhpcy5mb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICAgICAgcmVzdWx0LnRvdGFsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZXVyb1Jlc3VsdC5jbzJQZXJQYXNzZW5nZXIgPSByZXN1bHQuY28yUGVyUGFzc2VuZ2VyO1xyXG4gICAgICAgICAgICAgICAgZXVyb1Jlc3VsdC5jbzJQZXJJdGVtID0gcmVzdWx0LmNvMlBlckl0ZW07XHJcbiAgICAgICAgICAgICAgICBldXJvUmVzdWx0LnNvdXJjZUlkID0gcmVzdWx0LnNvdXJjZUlkO1xyXG4gICAgICAgICAgICAgICAgZXVyb1Jlc3VsdC50b3RhbCA9IHJlc3VsdC50b3RhbDtcclxuICAgICAgICAgICAgICAgIGV1cm9SZXN1bHQuZHVyYXRpb24gPSB0aGlzLm1pblRvSG91cihyZXN1bHQuaW5ib3VuZFRvdGFsRHVyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAhYWNjLmluYm91bmQuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbTogRXVyb3N0YXJJdGVtKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlRGVwYXJ0dXJlID09PSBldXJvUmVzdWx0LmRhdGVEZXBhcnR1cmVcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFjYy5pbmJvdW5kLnB1c2goZXVyb1Jlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIH0sIHsgb3V0Ym91bmQ6IFtdLCBpbmJvdW5kOiBbXSB9IGFzIEV1cm9zdGFyUmVzdWx0cyk7XHJcbiAgICAgICAgICByZXR1cm4gW3JldHVybmRhdGFdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0czEgPyBbcmVzdWx0czFdIDogW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IEV1cm9zdGFyVGVtcFBhcmFtcztcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBFdXJvc3RhclRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBFdXJvc3RhclRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBFdXJvc3RhclRlbXBQYXJhbXNcclxuICAgICAgfTtcclxuICAgIC8vIGRhdGEudGVtcFBhcmFtcy5hZHVsdHMgPSAxO1xyXG4gICAgLy8gZGF0YS50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPSBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gc2VhcmNoU2VydmljZS5tYWtlRXVyb3N0YXJRdWVyeShkYXRhLnRlbXBQYXJhbXMpO1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHF1ZXJ5KTtcclxuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuRXVyb3N0YXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKCh1c2VyOiBGdWxsVXNlckRldGFpbHMpID0+IHtcclxuICAgICAgdGhpcy50aW1lQ3JpdGVyaWFPcHRpb25zLm5leHQoW1xyXG4gICAgICAgIFRpbWVXaW5kb3cuQW55dGltZSxcclxuICAgICAgICBUaW1lV2luZG93LkFycml2ZSxcclxuICAgICAgICBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICBdKTsgLy8gVE9ETyB1cGRhdGUgd2l0aCBhbnkgVUZzXHJcbiAgICAgIHRoaXMudXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICBjb25zdCByZXN1bHRzOiBFdXJvc3RhclNlc3Npb25UeXBlID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICApIHx8IHtcclxuICAgICAgcmVzdWx0czogW10sXHJcbiAgICAgIGdyb3VwRGF0YToge30sXHJcbiAgICAgIGdyb3VwZWQ6IFtdLFxyXG4gICAgICBxdWVyeToge30gYXMgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcclxuICAgIH07XHJcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMucmVzdWx0cyk7XHJcbiAgICB0aGlzLmZsaWdodHNUb0dyb3VwID0gcmVzdWx0cy5ncm91cERhdGEgfHwge307XHJcbiAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gcmVzdWx0cy5xdWVyeTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMucmVzdWx0cyB8fCAoW10gYXMgRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5KSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB0aGlzLm5lZ290aWF0ZWQgPVxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPT09IEZhcmVUeXBlLk5lZ290aWF0ZWQgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG4gIGZvcm1hdEV1cm9zdGFyUmVzdWx0cyhcclxuICAgIHJlc3VsdHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgIHRvdGFsOiBGbGlnaHRGYXJlVG90YWxcclxuICApOiBFdXJvc3Rhckl0ZW0ge1xyXG4gICAgY29uc3QgcmV0dXJuT2JqZWN0OiBFdXJvc3Rhckl0ZW0gPSB7XHJcbiAgICAgIGRhdGVBcnJpdmFsOiBudWxsLFxyXG4gICAgICBkYXRlRGVwYXJ0dXJlOiBudWxsLFxyXG4gICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgdGltZUFycml2YWw6IG51bGwsXHJcbiAgICAgIHRpbWVEZXBhcnR1cmU6IG51bGwsXHJcbiAgICAgIGNvMlBlckl0ZW06IDAsXHJcbiAgICAgIGNvMlBlclBhc3NlbmdlcjogMCxcclxuICAgICAgc291cmNlSWQ6IG51bGwsXHJcbiAgICAgIHRvdGFsOiBudWxsLFxyXG4gICAgICB1aWQ6IG51bGwsXHJcblxyXG4gICAgICBidXNpbmVzc1ByZW1pZXJGYXJlOiB7XHJcbiAgICAgICAgY2xhc3M6IG51bGwsXHJcbiAgICAgICAgZmFyZTogbnVsbCxcclxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgIHByaWNlOiBOYU4sXHJcbiAgICAgICAgY3VycmVuY3k6ICdHQlAnXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YW5kYXJkRmFyZToge1xyXG4gICAgICAgIGNsYXNzOiBudWxsLFxyXG4gICAgICAgIGZhcmU6IG51bGwsXHJcbiAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgICBwcmljZTogTmFOLFxyXG4gICAgICAgIGN1cnJlbmN5OiAnR0JQJ1xyXG4gICAgICB9LFxyXG4gICAgICBzdGFuZGFyZFByZW1pZXJGYXJlOiB7XHJcbiAgICAgICAgY2xhc3M6IG51bGwsXHJcbiAgICAgICAgZmFyZTogbnVsbCxcclxuICAgICAgICBpc0Rpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgIHByaWNlOiBOYU4sXHJcbiAgICAgICAgY3VycmVuY3k6ICdHQlAnXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyByZXR1cm5PYmplY3QuZHVyYXRpb24gPSByZXN1bHRzLm91dGJvdW5kVG90YWxEdXJhdGlvbjtcclxuICAgIHJlc3VsdHMuZm9yRWFjaCgoZmxpZ2h0LCBpbmRleCkgPT4ge1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0ZUFycml2YWwgPSBmbGlnaHQuZGF0ZVRpbWVBcnJpdmluZztcclxuICAgICAgcmV0dXJuT2JqZWN0LmRhdGVEZXBhcnR1cmUgPSBmbGlnaHQuZGF0ZVRpbWVEZXBhcnRpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKGZsaWdodC50b3RhbER1cmF0aW9uKTtcclxuICAgICAgcmV0dXJuT2JqZWN0LnRpbWVBcnJpdmFsID0gbW9tZW50KGZsaWdodC5kYXRlVGltZUFycml2aW5nKS5mb3JtYXQoXHJcbiAgICAgICAgJ0hIOm1tJ1xyXG4gICAgICApO1xyXG4gICAgICByZXR1cm5PYmplY3QudGltZURlcGFydHVyZSA9IG1vbWVudChmbGlnaHQuZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdChcclxuICAgICAgICAnSEg6bW0nXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybk9iamVjdC51aWQgPSBpbmRleDtcclxuICAgICAgc3dpdGNoIChmbGlnaHQuZmFyZUluZm8udGl0bGUpIHtcclxuICAgICAgICBjYXNlIEV1cm9zdGFyQ2xhc3NFbnVtLlNUQU5EQVJEOlxyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmZhcmUgPSBmbGlnaHQ7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRGYXJlLmNsYXNzID0gZmxpZ2h0LmNhYmluQ2xhc3M7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEV1cm9zdGFyQ2xhc3NFbnVtLlNUQU5EQVJEX1BSRU1JRVI6XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5mYXJlID0gZmxpZ2h0O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgPSB0b3RhbC5wcmljZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLmN1cnJlbmN5ID0gdG90YWwuY3VycmVuY3k7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFdXJvc3RhckNsYXNzRW51bS5CVVNJTkVTU19QUkVNSUVSOlxyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuZmFyZSA9IGZsaWdodDtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5jdXJyZW5jeSA9IHRvdGFsLmN1cnJlbmN5O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuY2xhc3MgPSBmbGlnaHQuY2FiaW5DbGFzcztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnbmV3IGNsYXNzIHRvIGJlIGltcGxlbWVudGVkOiAnLCBmbGlnaHQuZmFyZUluZm8udGl0bGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5PYmplY3Q7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeShjaGVja0lzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KCkpO1xyXG4gICAgaWYgKGNoZWNrSXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB0aGlzLnJlc2V0UXVlcnkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAoIXRoaXMuX29yaWdpbkFpcnBvcnQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHV0cmUgbG9jYXRpb24nKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBhZGQgaW4gYSBhcnJpdmFsIGRlc3RpbmF0aW9uJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcihtb21lbnQoKSkpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgJiZcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID09PSB0aGlzLl9vcmlnaW5BaXJwb3J0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnT3JpZ2luIGFuZCBkZXN0aW5hdGlvbiBzdGF0aW9uIGNhbm5vdCBiZSB0aGUgc2FtZSdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzUmV0dXJuKSB7XHJcbiAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzU2FtZU9yQWZ0ZXIoXHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnUmV0dXJuIGRhdGUgbXVzdCBiZSBhZnRlciB0aGUgZGVwYXJ0dXJlIGRhdGUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcclxuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoeyAuLi50aGlzLnRlbXBQYXJhbXMgfSk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgICAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKFxyXG4gICAgICAgIHRoaXMuZXVyb3N0YXJGZXRjaGVyLmZldGNoTGlzdCh0aGlzLmdldFNlYXJjaFF1ZXJ5KCkpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQgeyB9XHJcblxyXG4gIHByaXZhdGUgbWFrZURlcGFydHVyZVRpbWVXaW5kb3coXHJcbiAgICBkYXRlVGltZTogbW9tZW50Lk1vbWVudCxcclxuICAgIHdpbmRvdzogVGltZVdpbmRvd1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3dcclxuICApOiBzdHJpbmcge1xyXG4gICAgaWYgKHdpbmRvdyAhPT0gVGltZVdpbmRvdy5BcnJpdmUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUXVlcnkoKTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydDogdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0LFxyXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShcclxuICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3c6IHRoaXMubWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxyXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcclxuICAgICAgICAgIG91dGJvdW5kQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NdXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxyXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyxcclxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcclxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKFxyXG4gICAgICAgICAgICAoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxyXG4gICAgICAgICAgICAgIGNhcnJpZXI/LmNvZGUgPyBjYXJyaWVyLmNvZGUgOiBudWxsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcclxuICAgICAgICAgIHdpdGhHcm91cGVkOiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLmlzUmV0dXJuXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgcmV0dXJuRGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUoXHJcbiAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHJldHVybkRlcGFydHVyZVRpbWVXaW5kb3c6IHRoaXMubWFrZURlcGFydHVyZVRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxyXG4gICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxyXG4gICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICByZXR1cm5DYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc1xyXG4gICAgICAgICAgICAgID8gW3RoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXVxyXG4gICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7fVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUcmF2ZWxsZXJzKCkge1xyXG4gICAgY29uc3QgdHJhdmVsbGVyczogRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0W10gPSBbXTtcclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmFkdWx0czsgbG9vcCArPSAxKSB7XHJcbiAgICAgIHRyYXZlbGxlcnMucHVzaCh7IHR5cGU6IEZsaWdodFBhc3NlbmdlclR5cGUuQWR1bHQgfSk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBsb29wID0gMDsgbG9vcCA8IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjsgbG9vcCArPSAxKSB7XHJcbiAgICAgIHRyYXZlbGxlcnMucHVzaCh7IHR5cGU6IEZsaWdodFBhc3NlbmdlclR5cGUuQ2hpbGQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGFzc2VuZ2VycyA9IHRyYXZlbGxlcnM7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoKSB7XHJcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQW55JyxcclxuICAgICAgICB0eXBlOiBFdXJvc3RhckNsYXNzRW51bS5BTllcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdGFuZGFyZCAoc2VtaSBmbGV4aWJsZSknLFxyXG4gICAgICAgIHR5cGU6IEV1cm9zdGFyQ2xhc3NFbnVtLlNUQU5EQVJEXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3RhbmRhcmQgcHJlbWllciAoc2VtaSBmbGV4aWJsZSknLFxyXG4gICAgICAgIHR5cGU6IEV1cm9zdGFyQ2xhc3NFbnVtLlNUQU5EQVJEX1BSRU1JRVJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdCdXNpbmVzcyBwcmVtaWVyIChmdWxseSBmbGV4aWJsZSknLFxyXG4gICAgICAgIHR5cGU6IEV1cm9zdGFyQ2xhc3NFbnVtLkJVU0lORVNTX1BSRU1JRVJcclxuICAgICAgfVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzb3J0IHRoZSBmbGlnaHQgcmVzdWx0c1xyXG4gICAqIEB0b2RvIC0gRmlsbCBvdXQgUHJlZmVycmVkIGFuZCBDbzIgc29ydGluZyB3aGVuIHdlIGhhdmUgdGhhdCBkYXRhXHJcbiAgICovXHJcbiAgcHVibGljIHNvcnRSZXN1bHRzKFxyXG4gICAgc29ydE1ldGhvZFZhbHVlOiBTb3J0VHlwZXNFdXJvc3RhcixcclxuICAgIGdpdmVuUmVzdWx0cz86IEV1cm9zdGFyUmVzdWx0c1tdXHJcbiAgKTogdm9pZCB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgZ2l2ZW5SZXN1bHRzXHJcbiAgICAgICAgPyBnaXZlblJlc3VsdHNcclxuICAgICAgICA6IDxFdXJvc3RhclJlc3VsdHNbXT4oPHVua25vd24+dGhpcy5mdWxsUmVzdWx0cylcclxuICAgICk7XHJcblxyXG4gICAgc3dpdGNoIChzb3J0TWV0aG9kVmFsdWUpIHtcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5DaGVhcGVzdEZpcnN0OlxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeVByaWNlKHJlc3VsdHMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkVhcmxpZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZShyZXN1bHRzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKGArKysgVW5rbm93biBzb3J0aW5nIG1ldGhvZDogJHtzb3J0TWV0aG9kVmFsdWV9ICsrK2ApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCByZXN1bHRzIGJ5IGRlcGFydHVyZSB0aW1lXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V1cm9zdGFyUmVzdWx0c1tdfSByZXN1bHRzXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgRXVyb3N0YXJJbmZvXHJcbiAgICovXHJcbiAgc29ydEJ5RGF0ZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSk6IEV1cm9zdGFyUmVzdWx0c1tdIHtcclxuICAgIGNvbnN0IGJ5RGF0ZSA9IChhOiBFdXJvc3Rhckl0ZW0sIGI6IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIG1vbWVudChhLnRpbWVEZXBhcnR1cmUsICdISDptbScpLnVuaXgoKSAtXHJcbiAgICAgICAgbW9tZW50KGIudGltZURlcGFydHVyZSwgJ0hIOm1tJykudW5peCgpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSB7XHJcbiAgICAgIG91dGJvdW5kOiByZXN1bHRzWzBdLm91dGJvdW5kLnNvcnQoYnlEYXRlKSxcclxuICAgICAgaW5ib3VuZDogcmVzdWx0c1swXS5pbmJvdW5kLnNvcnQoYnlEYXRlKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBbc29ydGVkUmVzdWx0c107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IHJlc3VsdHMgYnkgcHJpY2VcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXVyb3N0YXJSZXN1bHRzW119IHJlc3VsdHNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBFdXJvc3RhckluZm9cclxuICAgKi9cclxuICBzb3J0QnlQcmljZShyZXN1bHRzOiBFdXJvc3RhclJlc3VsdHNbXSwgZGlyPzogYm9vbGVhbik6IEV1cm9zdGFyUmVzdWx0c1tdIHtcclxuICAgIGNvbnN0IGJ5UHJpY2UgPSAoYTogRXVyb3N0YXJJdGVtLCBiOiBFdXJvc3Rhckl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgYVByaWNlID1cclxuICAgICAgICArYS5zdGFuZGFyZEZhcmUucHJpY2UgfHxcclxuICAgICAgICArYS5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8XHJcbiAgICAgICAgK2EuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZTtcclxuICAgICAgY29uc3QgYlByaWNlID1cclxuICAgICAgICArYi5zdGFuZGFyZEZhcmUucHJpY2UgfHxcclxuICAgICAgICArYi5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlIHx8XHJcbiAgICAgICAgK2IuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZTtcclxuICAgICAgaWYgKGRpcikge1xyXG4gICAgICAgIHJldHVybiBiUHJpY2UgLSBhUHJpY2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFQcmljZSAtIGJQcmljZTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IHtcclxuICAgICAgb3V0Ym91bmQ6IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieVByaWNlKSxcclxuICAgICAgaW5ib3VuZDogcmVzdWx0c1swXS5pbmJvdW5kLnNvcnQoYnlQcmljZSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gW3NvcnRlZFJlc3VsdHNdO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICAvLyBUT0RPIGZsaWdodHMgaGF2ZW4ndCBiZWVuIGRvbmUgeWV0LlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxCYWdnYWdlKHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcclxuICAgIGxldCB0b3RhbCA9IDA7XHJcblxyXG4gICAgY29uc3QgcGFyc2VkQWRkaXRpb25hbCA9IEpTT04ucGFyc2UocmVzdWx0LmFkZGl0aW9uYWwpO1xyXG4gICAgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMpIHtcclxuICAgICAgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0OiBhbnkpID0+IHtcclxuICAgICAgICBmbGlnaHQuYmFnZ2FnZS5mb3JFYWNoKChiYWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGJhZy5hbGxvd2FuY2UgJiYgYmFnLmFsbG93YW5jZSA+IHRvdGFsKSB7XHJcbiAgICAgICAgICAgIHRvdGFsID0gYmFnLmFsbG93YW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZS5mb3JFYWNoKChiYWdnYWdlQWxsb3c6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSAmJlxyXG4gICAgICAgICAgTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSkgPiB0b3RhbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdG90YWwgPSBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdpdmUgdGhlIGNvcnJlY3QgZm9ybWF0IGZvciB0cmFuc2ZlcmluZyBtaW51ZXRlcyBvbiB0aGUgc2xpZGVyc1xyXG4gICAqIEBwYXJhbSBtaW4gLSB0aGUgbWluIGluIDEwMHRoJ3MgdG8gdHJhbnNmb3JtIG9udG8gNjB0aCdzXHJcbiAgICovXHJcbiAgdHJhbnNmb3JtTWluKG1pbjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBudW0gPSAoTnVtYmVyKG1pbikgKiA2MCkgLyAxMDA7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnKysrIE51bSBDb3B5OiAnLCBfLmNsb25lKG51bSksICcgKysrJyk7XHJcbiAgICBpZiAobnVtICUgMSA8IDAuNSkge1xyXG4gICAgICBudW0gPSBNYXRoLmZsb29yKG51bSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBudW0gPSBNYXRoLmNlaWwobnVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVtLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5RHVyYXRpb24oXHJcbiAgICBtaW5EdXJhdGlvbjogbnVtYmVyLFxyXG4gICAgbWF4RHVyYXRpb246IG51bWJlcixcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdLFxyXG4gICAgaXNSZXR1cm4gPSBmYWxzZVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBkdXIgPSAwO1xyXG4gICAgICBpZiAoIWlzUmV0dXJuKSB7XHJcbiAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5mb3JFYWNoKChvdXQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIGR1ciArPSBvdXQudG90YWxEdXJhdGlvbjtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoICYmIGlzUmV0dXJuKSB7XHJcbiAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLmZvckVhY2goKGluYjogRmxpZ2h0Sm91cm5leSkgPT4ge1xyXG4gICAgICAgICAgZHVyICs9IGluYi50b3RhbER1cmF0aW9uO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZHVyID49IG1pbkR1cmF0aW9uICYmIGR1ciA8PSBtYXhEdXJhdGlvbjtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlEZXBhcnR1cmVUaW1lKFxyXG4gICAgbWluRGVwOiBudW1iZXIsXHJcbiAgICBtYXhEZXA6IG51bWJlcixcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgZGVwYXJ0dXJlVGltZSA9IE51bWJlcihcclxuICAgICAgICBtb21lbnQocmVzdWx0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykuZm9ybWF0KCdISG1tJylcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbmV3TnVtU3RyaW5nMSA9IE51bWJlcihcclxuICAgICAgICBNYXRoLmZsb29yKE51bWJlcihtaW5EZXAgLyAxMDApKS50b1N0cmluZygpICtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybU1pbihNYXRoLmNlaWwoTnVtYmVyKG1pbkRlcCAlIDEwMCkpKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBuZXdOdW1TdHJpbmcyID0gTnVtYmVyKFxyXG4gICAgICAgIE1hdGguZmxvb3IoTnVtYmVyKG1heERlcCAvIDEwMCkpLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtTWluKE1hdGguY2VpbChOdW1iZXIobWF4RGVwICUgMTAwKSkpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZGVwYXJ0dXJlVGltZSA+PSBuZXdOdW1TdHJpbmcxICYmIGRlcGFydHVyZVRpbWUgPD0gbmV3TnVtU3RyaW5nMjtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlSZXR1cm5EZXBhcnR1cmVUaW1lKFxyXG4gICAgbWluRGVwOiBudW1iZXIsXHJcbiAgICBtYXhEZXA6IG51bWJlcixcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgaWYgKCFtaW5EZXAgJiYgIW1heERlcCkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdOdW1TdHJpbmcxID0gTnVtYmVyKFxyXG4gICAgICBNYXRoLmZsb29yKE51bWJlcihtaW5EZXAgLyAxMDApKS50b1N0cmluZygpICtcclxuICAgICAgdGhpcy50cmFuc2Zvcm1NaW4oTWF0aC5jZWlsKE51bWJlcihtaW5EZXAgJSAxMDApKSlcclxuICAgICk7XHJcbiAgICBjb25zdCBuZXdOdW1TdHJpbmcyID0gTnVtYmVyKFxyXG4gICAgICBNYXRoLmZsb29yKE51bWJlcihtYXhEZXAgLyAxMDApKS50b1N0cmluZygpICtcclxuICAgICAgdGhpcy50cmFuc2Zvcm1NaW4oTWF0aC5jZWlsKE51bWJlcihtYXhEZXAgJSAxMDApKSlcclxuICAgICk7XHJcblxyXG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKCFyZXN1bHQuaW5ib3VuZEZsaWdodHMgfHwgIXJlc3VsdC5pbmJvdW5kRmxpZ2h0c1swXSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkZXBhcnR1cmVUaW1lID0gTnVtYmVyKFxyXG4gICAgICAgIG1vbWVudChyZXN1bHQuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBkZXBhcnR1cmVUaW1lID49IG5ld051bVN0cmluZzEgJiYgZGVwYXJ0dXJlVGltZSA8PSBuZXdOdW1TdHJpbmcyO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeVJldHVybkFycml2YWxUaW1lKFxyXG4gICAgbWluQXJyOiBudW1iZXIsXHJcbiAgICBtYXhBcnI6IG51bWJlcixcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgaWYgKCFtaW5BcnIgJiYgIW1heEFycikge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdOdW1TdHJpbmcxID0gTnVtYmVyKFxyXG4gICAgICBNYXRoLmZsb29yKE51bWJlcihtaW5BcnIgLyAxMDApKS50b1N0cmluZygpICtcclxuICAgICAgdGhpcy50cmFuc2Zvcm1NaW4oTWF0aC5jZWlsKE51bWJlcihtaW5BcnIgJSAxMDApKSlcclxuICAgICk7XHJcbiAgICBjb25zdCBuZXdOdW1TdHJpbmcyID0gTnVtYmVyKFxyXG4gICAgICBNYXRoLmZsb29yKE51bWJlcihtYXhBcnIgLyAxMDApKS50b1N0cmluZygpICtcclxuICAgICAgdGhpcy50cmFuc2Zvcm1NaW4oTWF0aC5jZWlsKE51bWJlcihtYXhBcnIgJSAxMDApKSlcclxuICAgICk7XHJcblxyXG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKCFyZXN1bHQuaW5ib3VuZEZsaWdodHMgfHwgIXJlc3VsdC5pbmJvdW5kRmxpZ2h0c1swXSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBhcnJpdmFsVGltZSA9IE51bWJlcihcclxuICAgICAgICBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQuaW5ib3VuZEZsaWdodHNbcmVzdWx0LmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgIC5kYXRlVGltZUFycml2aW5nXHJcbiAgICAgICAgKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCByZXRWYWwgPVxyXG4gICAgICAgIGFycml2YWxUaW1lID49IG5ld051bVN0cmluZzEgJiYgYXJyaXZhbFRpbWUgPD0gbmV3TnVtU3RyaW5nMjtcclxuXHJcbiAgICAgIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAgICAgLy8gaWYgKCFyZXRWYWwpIHtcclxuICAgICAgLy8gICBjb25zb2xlLndhcm4oYCsrKyBGaWx0ZXJpbmcgT3V0OiAke2Fycml2YWxUaW1lfSArKytgKTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgcmV0dXJuIHJldFZhbDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlBcnJpdmFsVGltZShcclxuICAgIG1pbkFycjogbnVtYmVyLFxyXG4gICAgbWF4QXJyOiBudW1iZXIsXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGNvbnN0IG5ld051bVN0cmluZzEgPSBOdW1iZXIoXHJcbiAgICAgIE1hdGguZmxvb3IoTnVtYmVyKG1pbkFyciAvIDEwMCkpLnRvU3RyaW5nKCkgK1xyXG4gICAgICB0aGlzLnRyYW5zZm9ybU1pbihNYXRoLmNlaWwoTnVtYmVyKG1pbkFyciAlIDEwMCkpKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IG5ld051bVN0cmluZzIgPSBOdW1iZXIoXHJcbiAgICAgIE1hdGguZmxvb3IoTnVtYmVyKG1heEFyciAvIDEwMCkpLnRvU3RyaW5nKCkgK1xyXG4gICAgICB0aGlzLnRyYW5zZm9ybU1pbihNYXRoLmNlaWwoTnVtYmVyKG1heEFyciAlIDEwMCkpKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBhcnJpdmFsVGltZSA9IE51bWJlcihcclxuICAgICAgICBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzW3Jlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgLmRhdGVUaW1lQXJyaXZpbmdcclxuICAgICAgICApLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gYXJyaXZhbFRpbWUgPj0gbmV3TnVtU3RyaW5nMSAmJiBhcnJpdmFsVGltZSA8PSBuZXdOdW1TdHJpbmcyO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUJhZ2dhZ2UoXHJcbiAgICBiYWdnYWdlRmlsdGVyczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gYmFnZ2FnZUZpbHRlcnMuZmlsdGVyKCh4KSA9PiB4LnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQ/Lmxlbmd0aCA+PSAxICYmIHNlbGVjdGVkLmxlbmd0aCAhPT0gYmFnZ2FnZUZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHRvdGFsQmFncyA9IHRoaXMuZ2V0VG90YWxCYWdnYWdlKHJlc3VsdCk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGVkLmZpbmQoKHgpID0+IHgudmFsdWUgPT09IHRvdGFsQmFncyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciBkZXRlcm1lbmluZyBiYWdnYWdlOiAke2Vycm9yfSArKysnKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlQcmljZShcclxuICAgIG1pblByaWNlOiBudW1iZXIsXHJcbiAgICBtYXhQcmljZTogbnVtYmVyLFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhgKysrIFByaWNlOiAke3Jlc3VsdC50b3RhbC5wcmljZX0gaXMgYmV0d2VlbjogJHttaW5QcmljZX0gYW5kICR7bWF4UHJpY2V9OiAke3Jlc3VsdC50b3RhbC5wcmljZSA+PSBtaW5QcmljZSAmJiByZXN1bHQudG90YWwucHJpY2UgPD0gbWF4UHJpY2V9ICsrK2ApXHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0LnRvdGFsLnByaWNlID49IG1pblByaWNlICYmIHJlc3VsdC50b3RhbC5wcmljZSA8PSBtYXhQcmljZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZmlsdGVyIHRoZSByZXN1bHRzIGJ5IHRoZSBudW1iZXIgb2Ygc3RvcHNcclxuICAgKiBAcGFyYW0gc3RvcEZpbHRlcnMgLSB0aGUgc2VsZWN0ZWQgc3RvcHNcclxuICAgKiBAcGFyYW0gZnVsbFJlc3VsdHMgLSBhbGwgb2Ygb3VyIHJlc3VsdHMgc28gZmFyXHJcbiAgICovXHJcbiAgZmlsdGVyUmVzdWx0c0J5U3RvcHMoXHJcbiAgICBzdG9wRmlsdGVyczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBmdWxsUmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHN0b3BGaWx0ZXJzLmZpbHRlcigoeCkgPT4geC5zZWxlY3RlZCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkPy5sZW5ndGggPj0gMSAmJiBzZWxlY3RlZC5sZW5ndGggIT09IHN0b3BGaWx0ZXJzLmxlbmd0aCkge1xyXG4gICAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdG90YWxTdG9wcyA9IHJlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICAgICAgY29uc3QgaGF2ZVN0b3AgPSBzZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgKHNlbGVjdGVkMTogU2VsZWN0RmlsdGVyKSA9PiBzZWxlY3RlZDEudmFsdWUgPT09IHRvdGFsU3RvcHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gaGF2ZVN0b3A7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdWxsUmVzdWx0cztcclxuICB9XHJcblxyXG4gIGZpbHRlclJlc3VsdHNCeUFpcmxpbmUoXHJcbiAgICBhaXJsaW5lRmlsdGVyczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gYWlybGluZUZpbHRlcnMuZmlsdGVyKCh4KSA9PiB4LnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQ/Lmxlbmd0aCA+PSAxICYmIHNlbGVjdGVkLmxlbmd0aCAhPT0gYWlybGluZUZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkLmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC52YWx1ZSA9PT0gcmVzdWx0Lm91dGJvdW5kRmxpZ2h0c1swXS5vcGVyYXRpbmdDYXJyaWVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJSZXN1bHRzQnlDbGFzcyhcclxuICAgIGNsYXNzRmlsdGVyczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gY2xhc3NGaWx0ZXJzLmZpbHRlcigoeCkgPT4geC5zZWxlY3RlZCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkPy5sZW5ndGggPj0gMSAmJiBzZWxlY3RlZC5sZW5ndGggIT09IGNsYXNzRmlsdGVycy5sZW5ndGgpIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAgICh4KSA9PiB4LnZhbHVlID09PSByZXN1bHQub3V0Ym91bmRGbGlnaHRzWzBdLmNhYmluQ2xhc3NcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5RGVwYXJ0dXJlQWlycG9ydChcclxuICAgIGRlcGFydHVyZUFpcnBvcnRzOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBkZXBhcnR1cmVBaXJwb3J0cy5maWx0ZXIoKHgpID0+IHguc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZD8ubGVuZ3RoID49IDEgJiYgc2VsZWN0ZWQubGVuZ3RoICE9PSBkZXBhcnR1cmVBaXJwb3J0cy5sZW5ndGgpIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAgICh4KSA9PiB4LnZhbHVlID09PSByZXN1bHQub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnRcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5QXJyaXZhbEFpcnBvcnQoXHJcbiAgICBhcnJpdmFsQWlycG9ydHM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IGFycml2YWxBaXJwb3J0cy5maWx0ZXIoKHgpID0+IHguc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZD8ubGVuZ3RoID49IDEgJiYgc2VsZWN0ZWQubGVuZ3RoICE9PSBhcnJpdmFsQWlycG9ydHMubGVuZ3RoKSB7XHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25BaXJwb3J0ID1cclxuICAgICAgICAgIHJlc3VsdC5vdXRib3VuZEZsaWdodHNbcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAuZGVzdGluYXRpb25BaXJwb3J0O1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RlZC5maW5kKCh4KSA9PiB4LnZhbHVlID09PSBkZXN0aW5hdGlvbkFpcnBvcnQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5RGVwYXJ0dXJlUmV0dXJuQWlycG9ydChcclxuICAgIGRlcGFydHVyZUFpcnBvcnRzOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBkZXBhcnR1cmVBaXJwb3J0cy5maWx0ZXIoKHgpID0+IHguc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZD8ubGVuZ3RoID49IDEgJiYgc2VsZWN0ZWQubGVuZ3RoICE9PSBkZXBhcnR1cmVBaXJwb3J0cy5sZW5ndGgpIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdC5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHgudmFsdWUgPT09IHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUFycml2YWxSZXR1cm5BaXJwb3J0KFxyXG4gICAgYXJyaXZhbEFpcnBvcnRzOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBhcnJpdmFsQWlycG9ydHMuZmlsdGVyKCh4KSA9PiB4LnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQ/Lmxlbmd0aCA+PSAxICYmIHNlbGVjdGVkLmxlbmd0aCAhPT0gYXJyaXZhbEFpcnBvcnRzLmxlbmd0aCkge1xyXG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzdWx0LmluYm91bmRGbGlnaHRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25BaXJwb3J0ID1cclxuICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1tyZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgLmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQuZmluZCgoeCkgPT4geC52YWx1ZSA9PT0gZGVzdGluYXRpb25BaXJwb3J0KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGaWx0ZXJzKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdID0gW10pOiBGbGlnaHRGaWx0ZXJzIHtcclxuICAgIGNvbnN0IG1pblByaWNlID0gdGhpcy5nZXRNaW5QcmljZShyZXN1bHRzKTtcclxuICAgIGNvbnN0IG1heFByaWNlID0gdGhpcy5nZXRNYXhQcmljZShyZXN1bHRzKTtcclxuXHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzID0ge1xyXG4gICAgICBzdG9wczogdGhpcy5nZXRBbGxTdG9wcyhyZXN1bHRzKSxcclxuICAgICAgbXVzdEluY2x1ZGU6IFtdLFxyXG4gICAgICBjbGFzc2VzOiB0aGlzLmdldEFsbENsYXNzZXMocmVzdWx0cyksXHJcbiAgICAgIGFpcmxpbmVzOiB0aGlzLmdldEFsbEFpcmxpbmVzKHJlc3VsdHMpLFxyXG4gICAgICB0cmF2ZWxQb2xpY3k6IFtdLFxyXG4gICAgICBkZXBhdHVyZUFpcnBvcnQ6IHRoaXMuZ2V0QWxsRGVwYXJ0dXJlQWlycG9ydHMocmVzdWx0cyksXHJcbiAgICAgIGFycml2YWxBaXJwb3J0OiB0aGlzLmdldEFsbEFycml2YWxBaXJwb3J0cyhyZXN1bHRzKSxcclxuICAgICAgbWluUHJpY2UsXHJcbiAgICAgIG1heFByaWNlLFxyXG4gICAgICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IHRoaXMuZ2V0QWxsRGVwYXJ0dXJlQWlycG9ydHMocmVzdWx0cywgdHJ1ZSksXHJcbiAgICAgIGFycml2YWxSZXR1cm5BaXJwb3J0OiB0aGlzLmdldEFsbEFycml2YWxBaXJwb3J0cyhyZXN1bHRzLCB0cnVlKSxcclxuICAgICAgYmFnZ2FnZTogdGhpcy5nZXRCYWdnYWdlKHJlc3VsdHMpLFxyXG4gICAgICBmYXJlVHlwZXM6IFtdLFxyXG4gICAgICBtaW5EdXJhdGlvbjogdGhpcy5nZXRNaW5EdXJhdGlvbihyZXN1bHRzKSxcclxuICAgICAgbWF4RHVyYXRpb246IHRoaXMuZ2V0TWF4RHVyYXRpb24ocmVzdWx0cyksXHJcbiAgICAgIG1pblJldHVybkR1cmF0aW9uOiB0aGlzLmdldE1pbkR1cmF0aW9uKHJlc3VsdHMsIHRydWUpLFxyXG4gICAgICBtYXhSZXR1cm5EdXJhdGlvbjogdGhpcy5nZXRNYXhEdXJhdGlvbihyZXN1bHRzLCB0cnVlKSxcclxuICAgICAgbWluRGVwYXJ0dXJlVGltZTogdGhpcy5nZXRNaW5EZXBhcnR1cmVUaW1lKHJlc3VsdHMpLFxyXG4gICAgICBtYXhEZXBhcnR1cmVUaW1lOiB0aGlzLmdldE1heERlcGFydHVyZVRpbWUocmVzdWx0cyksXHJcbiAgICAgIG1pbkFycml2YWxUaW1lOiB0aGlzLmdldE1pbkFycml2YWxUaW1lKHJlc3VsdHMpLFxyXG4gICAgICBtYXhBcnJpdmFsVGltZTogdGhpcy5nZXRNYXhBcnJpdmFsVGltZShyZXN1bHRzKSxcclxuICAgICAgbWluUmV0dXJuRGVwYXJ0dXJlVGltZTogdGhpcy5nZXRNaW5SZXR1cm5EZXBhcnR1cmVUaW1lKHJlc3VsdHMpLFxyXG4gICAgICBtYXhSZXR1cm5EZXBhcnR1cmVUaW1lOiB0aGlzLmdldE1heFJldHVybkRlcGFydHVyZVRpbWUocmVzdWx0cyksXHJcbiAgICAgIG1heFJldHVybkFycml2YWxUaW1lOiB0aGlzLmdldE1heFJldHVybkFycml2YWxUaW1lKHJlc3VsdHMpLFxyXG4gICAgICBtaW5SZXR1cm5BcnJpdmFsVGltZTogdGhpcy5nZXRNaW5SZXR1cm5BcnJpdmFsVGltZShyZXN1bHRzKSxcclxuICAgICAgZmxpZ2h0TnVtYmVyOiAnJ1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3RmlsdGVycztcclxuICB9XHJcblxyXG4gIGdldE1pbkR1cmF0aW9uKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdLCBpc1JldHVybiA9IGZhbHNlKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW4gPSAwO1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBkdXIgPSAwO1xyXG5cclxuICAgICAgaWYgKCFpc1JldHVybikge1xyXG4gICAgICAgIHJlc3VsdC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgob3V0OiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICBkdXIgKz0gb3V0LnRvdGFsRHVyYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyZXN1bHQuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiBpc1JldHVybikge1xyXG4gICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0cy5mb3JFYWNoKChpbmI6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIGR1ciArPSBpbmIudG90YWxEdXJhdGlvbjtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFtaW4gfHwgZHVyIDwgbWluKSB7XHJcbiAgICAgICAgbWluID0gZHVyO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4RHVyYXRpb24ocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10sIGlzUmV0dXJuID0gZmFsc2UpOiBudW1iZXIge1xyXG4gICAgbGV0IG1heCA9IDA7XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IGR1ciA9IDA7XHJcbiAgICAgIGlmICghaXNSZXR1cm4pIHtcclxuICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKG91dDogRmxpZ2h0Sm91cm5leSkgPT4ge1xyXG4gICAgICAgICAgZHVyICs9IG91dC50b3RhbER1cmF0aW9uO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzPy5sZW5ndGggJiYgaXNSZXR1cm4pIHtcclxuICAgICAgICByZXN1bHQuaW5ib3VuZEZsaWdodHMuZm9yRWFjaCgoaW5iOiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICBkdXIgKz0gaW5iLnRvdGFsRHVyYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghbWF4IHx8IGR1ciA+IG1heCkge1xyXG4gICAgICAgIG1heCA9IGR1cjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcblxyXG4gIGdldE1pbkFycml2YWxUaW1lKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW46IG51bWJlcjtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgbWluRGVwVGltZSA9IE51bWJlcihcclxuICAgICAgICBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzW3Jlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgLmRhdGVUaW1lQXJyaXZpbmdcclxuICAgICAgICApLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICk7XHJcbiAgICAgIG1pbkRlcFRpbWUgPSBNYXRoLmZsb29yKG1pbkRlcFRpbWUgLyAxMDApICogMTAwO1xyXG4gICAgICBpZiAoIW1pbiB8fCBtaW5EZXBUaW1lIDwgbWluKSB7XHJcbiAgICAgICAgbWluID0gbWluRGVwVGltZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1pbjtcclxuICB9XHJcblxyXG4gIGdldE1pblJldHVybkFycml2YWxUaW1lKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW46IG51bWJlcjtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzICYmIHJlc3VsdC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgbWluRGVwVGltZSA9IE51bWJlcihcclxuICAgICAgICAgIG1vbWVudChcclxuICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzW3Jlc3VsdC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgIC5kYXRlVGltZUFycml2aW5nXHJcbiAgICAgICAgICApLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtaW5EZXBUaW1lID0gTWF0aC5mbG9vcihtaW5EZXBUaW1lIC8gMTAwKSAqIDEwMDtcclxuICAgICAgICBpZiAoIW1pbiB8fCBtaW5EZXBUaW1lIDwgbWluKSB7XHJcbiAgICAgICAgICBtaW4gPSBtaW5EZXBUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1pbjtcclxuICB9XHJcblxyXG4gIGdldE1heFJldHVybkFycml2YWxUaW1lKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtYXg6IG51bWJlcjtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzICYmIHJlc3VsdC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgbWF4RGVwVGltZSA9IE51bWJlcihcclxuICAgICAgICAgIG1vbWVudChcclxuICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzW3Jlc3VsdC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgIC5kYXRlVGltZUFycml2aW5nXHJcbiAgICAgICAgICApLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtYXhEZXBUaW1lID0gTWF0aC5jZWlsKG1heERlcFRpbWUgLyAxMDApICogMTAwO1xyXG4gICAgICAgIGlmICghbWF4IHx8IG1heERlcFRpbWUgPiBtYXgpIHtcclxuICAgICAgICAgIG1heCA9IG1heERlcFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4QXJyaXZhbFRpbWUocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1heDogbnVtYmVyO1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBtYXhEZXBUaW1lID0gTnVtYmVyKFxyXG4gICAgICAgIG1vbWVudChcclxuICAgICAgICAgIHJlc3VsdC5vdXRib3VuZEZsaWdodHNbcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICkuZm9ybWF0KCdISG1tJylcclxuICAgICAgKTtcclxuXHJcbiAgICAgIG1heERlcFRpbWUgPSBNYXRoLmNlaWwobWF4RGVwVGltZSAvIDEwMCkgKiAxMDA7XHJcbiAgICAgIGlmICghbWF4IHx8IG1heERlcFRpbWUgPiBtYXgpIHtcclxuICAgICAgICBtYXggPSBtYXhEZXBUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBtYXg7XHJcbiAgfVxyXG5cclxuICBnZXRNaW5EZXBhcnR1cmVUaW1lKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW46IG51bWJlcjtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgbWluRGVwVGltZSA9IE51bWJlcihcclxuICAgICAgICBtb21lbnQocmVzdWx0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykuZm9ybWF0KCdISG1tJylcclxuICAgICAgKTtcclxuICAgICAgbWluRGVwVGltZSA9IE1hdGguZmxvb3IobWluRGVwVGltZSAvIDEwMCkgKiAxMDA7XHJcbiAgICAgIGlmICghbWluIHx8IG1pbkRlcFRpbWUgPCBtaW4pIHtcclxuICAgICAgICBtaW4gPSBtaW5EZXBUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluUmV0dXJuRGVwYXJ0dXJlVGltZShyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluOiBudW1iZXI7XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQuaW5ib3VuZEZsaWdodHNbMF0pIHtcclxuICAgICAgICBsZXQgbWluRGVwVGltZSA9IE51bWJlcihcclxuICAgICAgICAgIG1vbWVudChyZXN1bHQuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtaW5EZXBUaW1lID0gTWF0aC5mbG9vcihtaW5EZXBUaW1lIC8gMTAwKSAqIDEwMDtcclxuICAgICAgICBpZiAoIW1pbiB8fCBtaW5EZXBUaW1lIDwgbWluKSB7XHJcbiAgICAgICAgICBtaW4gPSBtaW5EZXBUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1pbjtcclxuICB9XHJcblxyXG4gIGdldE1heFJldHVybkRlcGFydHVyZVRpbWUocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1heDogbnVtYmVyO1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQuaW5ib3VuZEZsaWdodHMgJiYgcmVzdWx0LmluYm91bmRGbGlnaHRzWzBdKSB7XHJcbiAgICAgICAgbGV0IG1heERlcFRpbWUgPSBOdW1iZXIoXHJcbiAgICAgICAgICBtb21lbnQocmVzdWx0LmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIG1heERlcFRpbWUgPSBNYXRoLmNlaWwobWF4RGVwVGltZSAvIDEwMCkgKiAxMDA7XHJcblxyXG4gICAgICAgIGlmICghbWF4IHx8IG1heERlcFRpbWUgPiBtYXgpIHtcclxuICAgICAgICAgIG1heCA9IG1heERlcFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4RGVwYXJ0dXJlVGltZShyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4OiBudW1iZXI7XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IG1heERlcFRpbWUgPSBOdW1iZXIoXHJcbiAgICAgICAgbW9tZW50KHJlc3VsdC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBtYXhEZXBUaW1lID0gTWF0aC5jZWlsKG1heERlcFRpbWUgLyAxMDApICogMTAwO1xyXG5cclxuICAgICAgaWYgKCFtYXggfHwgbWF4RGVwVGltZSA+IG1heCkge1xyXG4gICAgICAgIG1heCA9IG1heERlcFRpbWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtYXg7XHJcbiAgfVxyXG5cclxuICBnZXRCYWdnYWdlKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogU2VsZWN0RmlsdGVyW10ge1xyXG4gICAgY29uc3QgYmFnZ2FnZTogYW55ID0ge307XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwYXJzZWRBZGRpdGlvbmFsID0gSlNPTi5wYXJzZShyZXN1bHQuYWRkaXRpb25hbCk7XHJcblxyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcblxyXG4gICAgICAgIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzKSB7XHJcbiAgICAgICAgICBwYXJzZWRBZGRpdGlvbmFsLm91dGJvdW5kRmxpZ2h0cy5mb3JFYWNoKChmbGlnaHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBmbGlnaHQuYmFnZ2FnZS5mb3JFYWNoKChiYWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChiYWcuYWxsb3dhbmNlICYmIGJhZy5hbGxvd2FuY2UgPiB0b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgdG90YWwgPSBiYWcuYWxsb3dhbmNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKSB7XHJcbiAgICAgICAgICBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZm9yRWFjaCgoYmFnZ2FnZUFsbG93OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSAmJlxyXG4gICAgICAgICAgICAgIE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpID4gdG90YWxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdG90YWwgPSBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBiYWdnYWdlW3RvdGFsXSA9IHtcclxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgIHZhbHVlOiB0b3RhbCxcclxuICAgICAgICAgIGRpc3BsYXk6IGAke3RvdGFsfSBiYWcke3RvdGFsICE9PSAxID8gJ3MnIDogJyd9YFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIHBhcnNpbmcgYWRkaXRpb25hbCBmbGlnaHQgZGF0YTogJHtlcnJvcn0gKysrYCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGJhZ2dhZ2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluUHJpY2UocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pblByaWNlOiBudW1iZXI7XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKCFtaW5QcmljZSB8fCByZXN1bHQudG90YWwucHJpY2UgPCBtaW5QcmljZSkge1xyXG4gICAgICAgIG1pblByaWNlID0gcmVzdWx0LnRvdGFsLnByaWNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbWluUHJpY2U7XHJcbiAgfVxyXG5cclxuICBnZXRNYXhQcmljZShyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4UHJpY2U6IGFueTtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAoIW1heFByaWNlIHx8IHJlc3VsdC50b3RhbC5wcmljZSA+IG1heFByaWNlKSB7XHJcbiAgICAgICAgbWF4UHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtYXhQcmljZTtcclxuICB9XHJcblxyXG4gIGdldEFsbFN0b3BzKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogU2VsZWN0RmlsdGVyW10ge1xyXG4gICAgY29uc3QgYWxsU3RvcHM6IGFueSA9IHt9O1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRvdGFsU3RvcHMgPSByZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDE7IC8vIG1pZ2h0IGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhpc1xyXG4gICAgICBhbGxTdG9wc1t0b3RhbFN0b3BzXSA9IHtcclxuICAgICAgICB2YWx1ZTogdG90YWxTdG9wcyxcclxuICAgICAgICBkaXNwbGF5OiBgJHt0b3RhbFN0b3BzfSBzdG9wYCArICh0b3RhbFN0b3BzICE9PSAxID8gJ3MnIDogJycpLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoYWxsU3RvcHMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQ2xhc3NlcyhyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IFNlbGVjdEZpbHRlcltdIHtcclxuICAgIGNvbnN0IGFsbENsYXNzZXM6IGFueSA9IFtdO1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHJlc3VsdC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgob3V0RmxpZ2h0OiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgYWxsQ2xhc3Nlc1tvdXRGbGlnaHQuY2FiaW5DbGFzc10gPSB7XHJcbiAgICAgICAgICB2YWx1ZTogb3V0RmxpZ2h0LmNhYmluQ2xhc3MsXHJcbiAgICAgICAgICBkaXNwbGF5OiBvdXRGbGlnaHQuY2FiaW5DbGFzcyxcclxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgIH0gYXMgU2VsZWN0RmlsdGVyO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChyZXN1bHQuaW5ib3VuZEZsaWdodHMpIHtcclxuICAgICAgICByZXN1bHQuaW5ib3VuZEZsaWdodHMuZm9yRWFjaCgoaW5GbGlnaHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIGFsbENsYXNzZXNbaW5GbGlnaHQuY2FiaW5DbGFzc10gPSB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBpbkZsaWdodC5jYWJpbkNsYXNzLFxyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbkZsaWdodC5jYWJpbkNsYXNzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgIH0gYXMgU2VsZWN0RmlsdGVyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhhbGxDbGFzc2VzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNyZWF0ZSBzZWxlY3QgZmlsdGVycyBmb3IgYWxsIHVuaXF1ZSBkZXBhcnR1cmUgYWlycG9ydHMgcmV0dXJuZWQgaW4gdGhlIHNlYXJjaFxyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gdGhlIGZsaWdodCByZXN1bHRzXHJcbiAgICovXHJcbiAgZ2V0QWxsRGVwYXJ0dXJlQWlycG9ydHMoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQgPSBmYWxzZVxyXG4gICk6IFNlbGVjdEZpbHRlcltdIHtcclxuICAgIGNvbnN0IGFsbEFpcnBvcnRzOiBhbnkgPSB7fTtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggJiYgIWluYm91bmQpIHtcclxuICAgICAgICBhbGxBaXJwb3J0c1tyZXN1bHQub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnRdID0ge1xyXG4gICAgICAgICAgdmFsdWU6IHJlc3VsdC5vdXRib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgIGRpc3BsYXk6IHJlc3VsdC5vdXRib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydE5hbWUsXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzPy5sZW5ndGggJiYgaW5ib3VuZCkge1xyXG4gICAgICAgIGFsbEFpcnBvcnRzW3Jlc3VsdC5pbmJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0XSA9IHtcclxuICAgICAgICAgIHZhbHVlOiByZXN1bHQuaW5ib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgIGRpc3BsYXk6IHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0TmFtZSxcclxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGFsbEFpcnBvcnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNyZWF0ZSBzZWxlY3QgZmlsdGVycyBmb3IgYWxsIHVuaXF1ZSBkZXBhcnR1cmUgYWlycG9ydHMgcmV0dXJuZWQgaW4gdGhlIHNlYXJjaFxyXG4gICAqIEBwYXJhbSByZXN1bHRzIC0gdGhlIGZsaWdodCByZXN1bHRzXHJcbiAgICovXHJcbiAgZ2V0QWxsQXJyaXZhbEFpcnBvcnRzKFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBpbmJvdW5kID0gZmFsc2VcclxuICApOiBTZWxlY3RGaWx0ZXJbXSB7XHJcbiAgICBjb25zdCBhbGxBaXJwb3J0czogYW55ID0ge307XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoICYmICFpbmJvdW5kKSB7XHJcbiAgICAgICAgYWxsQWlycG9ydHNbXHJcbiAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgIF0uZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgICAgXSA9IHtcclxuICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzW3Jlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAuZGVzdGluYXRpb25BaXJwb3J0LFxyXG4gICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgICAgLmRlc3RpbmF0aW9uQWlycG9ydE5hbWUsXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzPy5sZW5ndGggJiYgaW5ib3VuZCkge1xyXG4gICAgICAgIGFsbEFpcnBvcnRzW1xyXG4gICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICByZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgXS5kZXN0aW5hdGlvbkFpcnBvcnRcclxuICAgICAgICBdID0ge1xyXG4gICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1tyZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAuZGVzdGluYXRpb25BaXJwb3J0LFxyXG4gICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzW3Jlc3VsdC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgIC5kZXN0aW5hdGlvbkFpcnBvcnROYW1lLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoYWxsQWlycG9ydHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gY3JlYXRlIHNlbGVjdCBmaWx0ZXJzIGZvciBhbGwgdW5pcXVlIGFpcmxpbmVzIHJldHVybmVkIGluIHRoZSBzZWFyY2hcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIHRoZSBmbGlnaHQgcmVzdWx0c1xyXG4gICAqL1xyXG4gIGdldEFsbEFpcmxpbmVzKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogU2VsZWN0RmlsdGVyW10ge1xyXG4gICAgY29uc3QgYWxsQWlybGluZXM6IGFueSA9IHt9O1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0OiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5mb3JFYWNoKChvdXRGbGlnaHQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICBhbGxBaXJsaW5lc1tvdXRGbGlnaHQub3BlcmF0aW5nQ2Fycmllcl0gPSB7XHJcbiAgICAgICAgICB2YWx1ZTogb3V0RmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXIsXHJcbiAgICAgICAgICBkaXNwbGF5OiBvdXRGbGlnaHQub3BlcmF0aW5nQ2Fycmllck5hbWUsXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9IGFzIFNlbGVjdEZpbHRlcjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzKSB7XHJcbiAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLmZvckVhY2goKGluRmxpZ2h0OiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICBhbGxBaXJsaW5lc1tpbkZsaWdodC5vcGVyYXRpbmdDYXJyaWVyXSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IGluRmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXIsXHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGluRmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXJOYW1lLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgIH0gYXMgU2VsZWN0RmlsdGVyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhhbGxBaXJsaW5lcyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZWxlY3RHcm91cGVkRXVyb3N0YXIoXHJcbiAgICBzZWxlY3RlZEV1cm9zdGFyOiBFdXJvc3Rhckl0ZW0sXHJcbiAgICBmYXJlOiBFdXJvc3RhckZhcmUsXHJcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW1cclxuICApIHtcclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXkgJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kb0Jvb2tpbmcoXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3V0Ym91bmRGbGlnaHRzOlxyXG4gICAgICAgICAgICBbdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmYXJlLmZhcmUsICdvdXRib3VuZCcsIDApXSxcclxuICAgICAgICAgIGluYm91bmRGbGlnaHRzOiBbXSxcclxuICAgICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VsZWN0ZWRFdXJvc3Rhci5kYXRlRGVwYXJ0dXJlXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIgPSBzZWxlY3RlZEV1cm9zdGFyO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRXVyb3N0YXJGYXJlID0gZmFyZTtcclxuICAgICAgY29uc3QgaW5kZXggPSBzZWxlY3RlZEV1cm9zdGFyLnVpZDtcclxuXHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgICh0aGlzLmZ1bGxSZXN1bHRzIGFzIEV1cm9zdGFyUmVzdWx0c1tdKS5tYXAoKHJlc3VsdDpFdXJvc3RhclJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG91dGJvdW5kID0gcmVzdWx0Lm91dGJvdW5kLmZpbHRlcigoaXRlbTpFdXJvc3Rhckl0ZW0sIGdyb3VwSW5kZXgpID0+IGluZGV4ID09PSBncm91cEluZGV4KTtcclxuICAgICAgICAgIHJldHVybiB7IGluYm91bmQ6IHJlc3VsdC5pbmJvdW5kLCBvdXRib3VuZCB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXJcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRvQm9va2luZyhcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgc2VsZWN0ZWRFdXJvc3RhcixcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyh0aGlzLnNlbGVjdGVkRXVyb3N0YXJGYXJlLmZhcmUsICdvdXRib3VuZCcsIDApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmYXJlLmZhcmUsICdpbmJvdW5kJywgMClcclxuXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLmRhdGVEZXBhcnR1cmUsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRXVyb3N0YXIuZGF0ZUFycml2YWxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEV1cm9zdGFyUmVzdWx0c1tdKTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBhZGQgaW4gb25jZSBmaWxnaHQgcmVzdWx0IGlzIHVwZGF0ZWQvLy9cclxuICAgIC8vIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PEZsaWdodFF1b3RlUmVzdWx0QXJyYXk+KHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lKSB8fCBbXSBhcyBGbGlnaHRRdW90ZVJlc3VsdEFycmF5O1xyXG4gICAgLy8gaWYoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAvLyB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlLmN1cnJlbmN5Q29kZSA9IHJlc3VsdHNbMF0udG90YWwuY3VycmVuY3k7XHJcbiAgICAvLyByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xyXG4gICAgLy8gICBjb25zdCBwcmljZSA9IHJlc3VsdC50b3RhbC5wcmljZTtcclxuICAgIC8vICAgaWYoIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UuYW1vdW50ID4gcHJpY2UgfHwgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UuYW1vdW50ID09PSBudWxsKXtcclxuICAgIC8vICAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KVxyXG4gIH1cclxuXHJcbiAgZG9Cb29raW5nKFxyXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBFdXJvc3Rhckl0ZW0sXHJcbiAgICBzY2hlbWFEZXRhaWxzOiBhbnksXHJcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcclxuICAgIGluYm91bmREYXRlPzogc3RyaW5nXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBzZWxlY3RlZEZsaWdodDtcclxuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xyXG4gICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICBiYXNrZXQ6IGludEJhc2tldC5pZCxcclxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXHJcbiAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICBwcmljZTogdG90YWwucHJpY2UsXHJcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxyXG4gICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICBvdXRib3VuZERhdGVcclxuICAgIH07XHJcbiAgICBpZiAoaW5ib3VuZERhdGUpIHtcclxuICAgICAgYm9va2luZy5pbmJvdW5kRGF0ZSA9IGluYm91bmREYXRlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICBib29raW5nLFxyXG4gICAgICBpbnRCYXNrZXQsXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0Sm91cm5leSxcclxuICAgIGZsaWdodEdyb3VwOiAnb3V0Ym91bmQnIHwgJ2luYm91bmQnLFxyXG4gICAgZ3JvdXBJbmRleDogbnVtYmVyLFxyXG4gICAgc2VnbWVudEluZGV4PzogbnVtYmVyXHJcbiAgKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNhYmluQ2xhc3M6IHNlbGVjdGVkRmxpZ2h0LmNhYmluQ2xhc3MsXHJcbiAgICAgIGRhdGVUaW1lQXJyaXZpbmc6IHNlbGVjdGVkRmxpZ2h0LmRhdGVUaW1lQXJyaXZpbmcsXHJcbiAgICAgIGRhdGVUaW1lQXJyaXZpbmdVVEM6IHNlbGVjdGVkRmxpZ2h0LmRhdGVUaW1lQXJyaXZpbmdVVEMsXHJcbiAgICAgIGRhdGVUaW1lRGVwYXJ0aW5nOiBzZWxlY3RlZEZsaWdodC5kYXRlVGltZURlcGFydGluZyxcclxuICAgICAgZGF0ZVRpbWVEZXBhcnRpbmdVVEM6IHNlbGVjdGVkRmxpZ2h0LmRhdGVUaW1lRGVwYXJ0aW5nVVRDLFxyXG4gICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHNlbGVjdGVkRmxpZ2h0LmRlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgam91cm5leUluZm86IHtcclxuICAgICAgICBmbGlnaHRHcm91cCxcclxuICAgICAgICBncm91cEluZGV4LFxyXG4gICAgICAgIHNlZ21lbnRJbmRleFxyXG4gICAgICB9LFxyXG4gICAgICBtYXJrZXRpbmdDYXJyaWVyOiBzZWxlY3RlZEZsaWdodC5tYXJrZXRpbmdDYXJyaWVyLFxyXG4gICAgICBtYXJrZXRpbmdGbGlnaHROdW1iZXI6IHNlbGVjdGVkRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlcixcclxuICAgICAgb3BlcmF0aW5nQ2Fycmllcjogc2VsZWN0ZWRGbGlnaHQub3BlcmF0aW5nQ2FycmllcixcclxuICAgICAgb3BlcmF0aW5nRmxpZ2h0TnVtYmVyOiBzZWxlY3RlZEZsaWdodC5vcGVyYXRpbmdGbGlnaHROdW1iZXIsXHJcbiAgICAgIG9yaWdpbkFpcnBvcnQ6IHNlbGVjdGVkRmxpZ2h0Lm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgIHRvdGFsRHVyYXRpb246IHNlbGVjdGVkRmxpZ2h0LnRvdGFsRHVyYXRpb24sXHJcbiAgICAgIGZhcmVUeXBlOiBzZWxlY3RlZEZsaWdodC5mYXJlSW5mby50aXRsZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlR3JvdXBlZEl0ZW0oXHJcbiAgICByZXR1cm5PYmplY3Q6IEV1cm9zdGFyR3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgc291cmNlOiBzdHJpbmcsXHJcbiAgICBvdXRib3VuZEZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgIG91dGJvdW5kVG90YWxEdXJhdGlvbjogbnVtYmVyLFxyXG4gICAgaW5ib3VuZEZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcclxuICAgIGluYm91bmRUb3RhbER1cmF0aW9uOiBudW1iZXJcclxuICApIHtcclxuICAgIGlmIChvdXRib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmRlcGFydERhdGVUaW1lKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0ID0gb3V0Ym91bmRGbGlnaHRzWzBdO1xyXG4gICAgICBjb25zdCBsYXN0ID0gb3V0Ym91bmRGbGlnaHRzW291dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnQgPSBmaXJzdC5vcmlnaW5BaXJwb3J0O1xyXG4gICAgICByZXR1cm5PYmplY3Qub3JpZ2luQWlycG9ydE5hbWUgPSBmaXJzdC5vcmlnaW5BaXJwb3J0TmFtZTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydCA9IGxhc3QuZGVzdGluYXRpb25BaXJwb3J0O1xyXG4gICAgICByZXR1cm5PYmplY3QuZGVzdGluYXRpb25BaXJwb3J0TmFtZSA9IGxhc3QuZGVzdGluYXRpb25BaXJwb3J0TmFtZTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlcGFydERhdGVUaW1lID0gZmlyc3QuZGF0ZVRpbWVEZXBhcnRpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5hcnJpdmFsRGF0ZVRpbWUgPSBsYXN0LmRhdGVUaW1lQXJyaXZpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZFRvdGFsRHVyYXRpb24gPSBvdXRib3VuZFRvdGFsRHVyYXRpb247XHJcbiAgICAgIHJldHVybk9iamVjdC5kYXRhU291cmNlID0gc291cmNlO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3BlcmF0b3IgPSBmaXJzdC5vcGVyYXRpbmdDYXJyaWVyO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3BlcmF0b3JGdWxsID0gZmlyc3Qub3BlcmF0aW5nQ2Fycmllck5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRsZWdzQ291bnQgPSBvdXRib3VuZEZsaWdodHMubGVuZ3RoO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVncyA9IG91dGJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGJvdW5kRmxpZ2h0TnVtYmVyID1cclxuICAgICAgICB0aGlzLmhlbHBlcnMuam9pbkZyb21BdHRyaWJ1dGU8RmxpZ2h0Sm91cm5leT4oXHJcbiAgICAgICAgICAnLScsXHJcbiAgICAgICAgICAnb3BlcmF0aW5nRmxpZ2h0TnVtYmVyJyxcclxuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0c1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm5PYmplY3QuaXNSZXR1cm4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXlcclxuICApOiBFdXJvc3RhclNlc3Npb25UeXBlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3VsdHM6IGRhdGEsXHJcbiAgICAgIGdyb3VwRGF0YTogdGhpcy5mbGlnaHRzVG9Hcm91cCxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5ncm91cGVkLFxyXG4gICAgICBxdWVyeTogdGhpcy5yZXN1bHRRdWVyeVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldE1pbkZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWluID4gZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtaW4gPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1pbjtcclxuICB9XHJcblxyXG4gIGdldE1heEZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtYXggPSAwO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtYXggPCBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1heCA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuXHJcbiAgaXNPdmVyTmlnaHQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvdXR3YXJkRGF5ID0gdGhpcy5vdXRCb3VuZERhdGUuZGF0ZSgpO1xyXG4gICAgY29uc3QgcmV0dXJuRGF5ID0gdGhpcy5pbmJvdW5kRGF0ZS5kYXRlKCk7XHJcbiAgICBpZiAocmV0dXJuRGF5IC0gb3V0d2FyZERheSA+PSAxKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbWluVG9Ib3VyID0gKGR1cjogbnVtYmVyKTogc3RyaW5nID0+IGAke01hdGguZmxvb3IoZHVyIC8gNjApfWggJHtkdXIgJSA2MH1tYDtcclxuXHJcbiAgYXN5bmMgYWRkRXVyb3N0YXJKb3VybmV5c1RvQmFza2V0KFxyXG4gICAgZXVyb3N0YXJRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoZXVyb3N0YXJRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG5cclxuICAgICAgY29uc3QgeyBzb3VyY2VJZCwgY28yUGVySXRlbSwgY28yUGVyUGFzc2VuZ2VyLCB0b3RhbCB9ID0gZXVyb3N0YXJRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoZXVyb3N0YXJRdW90ZS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xyXG4gICAgICBjb25zdCBpbmJvdW5kRGF0ZTogYW55ID0gZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggPyBtb21lbnQoZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykgOiBudWxsO1xyXG5cclxuICAgICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHtcclxuICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmV1cm9zdGFyUXVvdGUub3V0Ym91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdvdXRib3VuZCcsIDAsIHNlZ21lbnRJbmRleClcclxuICAgICAgICAgICldLFxyXG4gICAgICAgIGluYm91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5ldXJvc3RhclF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdpbmJvdW5kJywgMCwgc2VnbWVudEluZGV4KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XHJcbiAgICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcclxuICAgICAgICBiYXNrZXQ6IGludEJhc2tldC5pZCxcclxuICAgICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcclxuICAgICAgICBjbzJQZXJJdGVtLFxyXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcclxuICAgICAgICBwcmljZTogdG90YWwucHJpY2UsXHJcbiAgICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXHJcbiAgICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICBvdXRib3VuZERhdGU6IG91dGJvdW5kRGF0ZS5mb3JtYXQoKVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoaW5ib3VuZERhdGUpIHtcclxuICAgICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGUuZm9ybWF0KCk7XHJcbiAgICAgICAgc2NoZW1hRGV0YWlscy5qb3VybmV5VHlwZSA9ICdyb3VuZHRyaXAnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIGJvb2tpbmcsXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpOyAvLyBUT0RPIHNob3VsZCB0aGlzIHRocm93IGFuIGVycm9yP1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
1672
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl0RCxPQUFPLEVBS0wsUUFBUSxFQU1SLG1CQUFtQixFQUVuQixXQUFXLEVBRVosTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBS0wsbUJBQW1CLEVBUW5CLGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBT3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBY2pFLE9BQU8sRUFHTCxVQUFVLEVBQ1gsTUFBTSw0QkFBNEIsQ0FBQztBQU1wQyxNQUFNLGVBQWUsR0FBa0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNuRCxLQUFLLEVBQUUsRUFBRTtJQUNULFdBQVcsRUFBRSxFQUFFO0lBQ2YsT0FBTyxFQUFFLEVBQUU7SUFDWCxRQUFRLEVBQUUsRUFBRTtJQUNaLFlBQVksRUFBRSxFQUFFO0lBQ2hCLGVBQWUsRUFBRSxFQUFFO0lBQ25CLHFCQUFxQixFQUFFLEVBQUU7SUFDekIsY0FBYyxFQUFFLEVBQUU7SUFDbEIsb0JBQW9CLEVBQUUsRUFBRTtJQUN4QixPQUFPLEVBQUUsRUFBRTtJQUNYLFNBQVMsRUFBRSxFQUFFO0lBQ2IsS0FBSyxFQUFFO1FBQ0wsR0FBRyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7UUFDNUIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7S0FD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V0FBVyxDQUFDO2lCQUN6QztnQkFFRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUNuQyxPQUFPLEVBQ1AsU0FBUyxFQUNULElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7YUFDSDtZQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztRQUNwRSxDQUFDO0tBQUE7O0FBcnNFZSwrQ0FBc0IsR0FBRyxpQkFBaUIsQ0FBQztBQUMzQyxnREFBdUIsR0FBRyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7IEZsaWdodEZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZVR5cGUsXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBGbGlnaHRGYXJlVG90YWwsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRXVyb3N0YXJRdW90ZVJlc3VsdCxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIE9CVEFpcmxpbmVzRGV0YWlscyxcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIEdyb3VwZWRGbGlnaHRzLFxyXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhTZWxlY3RlZCxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgRXVyb3N0YXJHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgRXVyb3N0YXJSZXN1bHRzLFxyXG4gIEV1cm9zdGFySXRlbSxcclxuICBFdXJvc3RhckZhcmUsXHJcbiAgRXVyb3N0YXJDbGFzc0VudW0sXHJcbiAgRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5XHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEZ1bGxVc2VyRGV0YWlscyxcclxuICBVc2VyU2VydmljZUludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBFdXJvc3RhclNlYXJjaFR5cGUgfSBmcm9tICcuL2V1cm9zdGFyLXNlYXJjaC10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBJTXVsdGlEZXN0aW5hdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LW11bHRpLWRlc3RpbmF0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlRXVyb3N0YXJRdW90ZUZldGNoZXIsXHJcbiAgRXVyb3N0YXJRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZXVyb3N0YXItcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIEV1cm9zdGFyVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWV1cm9zdGFyLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBGbGlnaHRHcm91cHMsXHJcbiAgRmxpZ2h0T3BlcmF0b3IsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4vZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuZXhwb3J0IGludGVyZmFjZSBBbGxvd2VkQ2xhc3NFdXJvc3RhciB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IEV1cm9zdGFyQ2xhc3NFbnVtIHwgbnVsbDtcclxufVxyXG5cclxuY29uc3QgREVGQVVMVF9GSUxURVJTOiBGbGlnaHRGaWx0ZXJzID0gT2JqZWN0LmZyZWV6ZSh7XHJcbiAgc3RvcHM6IHt9LFxyXG4gIG11c3RJbmNsdWRlOiB7fSxcclxuICBjbGFzc2VzOiB7fSxcclxuICBhaXJsaW5lczoge30sXHJcbiAgdHJhdmVsUG9saWN5OiB7fSxcclxuICBkZXBhdHVyZUFpcnBvcnQ6IHt9LFxyXG4gIGRlcGF0dXJlUmV0dXJuQWlycG9ydDoge30sXHJcbiAgYXJyaXZhbEFpcnBvcnQ6IHt9LFxyXG4gIGFycml2YWxSZXR1cm5BaXJwb3J0OiB7fSxcclxuICBiYWdnYWdlOiB7fSxcclxuICBmYXJlVHlwZXM6IHt9LFxyXG4gIHByaWNlOiB7XHJcbiAgICBtaW46IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxyXG4gICAgbWF4OiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxyXG4gIH0sXHJcbiAgZHVyYXRpb246IHtcclxuICAgIG1pbjogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICBtYXg6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXHJcbiAgfSxcclxuICByZXR1cm5EdXJhdGlvbjoge1xyXG4gICAgbWluOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuICAgIG1heDogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcclxuICB9LFxyXG4gIGRlcGFydHVyZVRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcbiAgYXJyaXZhbFRpbWU6IHtcclxuICAgIG1pbjogMCxcclxuICAgIG1heDogMjM1OVxyXG4gIH0sXHJcbiAgcmV0dXJuRGVwYXJ0dXJlVGltZToge1xyXG4gICAgbWluOiAwLFxyXG4gICAgbWF4OiAyMzU5XHJcbiAgfSxcclxuICByZXR1cm5BcnJpdmFsVGltZToge1xyXG4gICAgbWluOiAwLFxyXG4gICAgbWF4OiAyMzU5XHJcbiAgfSxcclxuXHJcbiAgZmxpZ2h0TnVtYmVyOiAnJ1xyXG59KSBhcyBGbGlnaHRGaWx0ZXJzO1xyXG5cclxuZXhwb3J0IHR5cGUgQWxsb3dlZENsYXNzZXNFdXJvc3RhciA9IEFsbG93ZWRDbGFzc0V1cm9zdGFyW107XHJcblxyXG5leHBvcnQgdHlwZSBFdXJvc3RhclN0YXRpb24gPSB7XHJcbiAgZ2F0ZXdheTogc3RyaW5nO1xyXG4gIGRlc3RpbmF0aW9uOiBzdHJpbmc7XHJcbn07XHJcblxyXG5leHBvcnQgZW51bSBTb3J0VHlwZXNFdXJvc3RhciB7XHJcbiAgQ2hlYXBlc3RGaXJzdCA9ICdDJyxcclxuICBFYXJsaWVzdEZpcnN0ID0gJ0UnLFxyXG4gIExhdGVzdEZpcnN0ID0gJ0wnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRNZXRob2Qge1xyXG4gIHNvcnRCeVByaWNlID0gJ3NvcnRCeVByaWNlJyxcclxuICBzb3J0QnlEYXRlID0gJ3NvcnRCeURhdGUnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU29ydFR5cGVFdXJvc3RhciB7XHJcbiAgLyoqIFRpdGxlIGRpc3BsYXllZCBvbiBkcm9wZG93biAqL1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgLyoqIE1ldGhvZCBuYW1lIHVzZWQgYnkgY29tcG9uZW50IHRvIHNvcnQgcmVzdWx0cyAqL1xyXG4gIG1ldGhvZDogU29ydE1ldGhvZDtcclxuICAvKiogSWNvbiBkaXNwbGF5ZWQgb24gZHJvcCBkb3duICovXHJcbiAgaWNvbjogc3RyaW5nO1xyXG4gIC8qKiBTb3J0aW5nIGRpcmVjdGlvbiB0cnVlIGZvciBhc2MsIGZhbHNlIGZvciBkc2MgKi9cclxuICBkaXI6IGJvb2xlYW47XHJcbiAgLy8gdGhpcyBpcyB3aGF0IHdlIHdpbGwgdXNlIHRvIHNvcnRcclxuICBjb2RlOiBTb3J0VHlwZXNFdXJvc3RhcjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXVyb3N0YXJHcm91cHMgPSAnU3RhbmRhcmQnIHwgJ1N0YW5kYXJkUHJlbWllcicgfCAnQnVzaW5lc3NQcmVtaWVyJztcclxuXHJcbmludGVyZmFjZSBFdXJvc3RhclNlc3Npb25UeXBlIHtcclxuICByZXN1bHRzOiBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXk7XHJcbiAgZ3JvdXBEYXRhOiB7IFtrZXk6IG51bWJlcl06IG51bWJlcltdIH07XHJcbiAgZ3JvdXBlZDogR3JvdXBlZEZsaWdodHM7XHJcbiAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoPFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGU+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIEV1cm9zdGFyVGVtcFBhcmFtcyxcclxuICAgIEV1cm9zdGFyUXVvdGVSZXN1bHQsXHJcbiAgICBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9ldXJvc3Rhcic7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZXVyb3N0YXInO1xyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5FdXJvc3RhcjtcclxuXHJcbiAgYXZhbGlhYmxlQ2xhc3NlczogQmVoYXZpb3JTdWJqZWN0PEFsbG93ZWRDbGFzc2VzRXVyb3N0YXI+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXNFdXJvc3Rhcj4oW10pO1xyXG4gIHRpbWVDcml0ZXJpYU9wdGlvbnM6IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRpbWVXaW5kb3dbXVxyXG4gID4oW10pO1xyXG4gIGZsaWdodE9wZXJhdG9yczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodE9wZXJhdG9yW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIEZsaWdodE9wZXJhdG9yW11cclxuICA+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSBfbmVnb3RpYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX25lYXJieV9haXJwb3J0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogU29ydFR5cGVFdXJvc3RhcltdID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1ByaWNlJyxcclxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxyXG4gICAgICBpY29uOiAnaWNvLWRvbGxhcicsXHJcbiAgICAgIGRpcjogdHJ1ZSxcclxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuQ2hlYXBlc3RGaXJzdFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdUaW1lJyxcclxuICAgICAgbWV0aG9kOiBTb3J0TWV0aG9kLnNvcnRCeURhdGUsXHJcbiAgICAgIGljb246ICdpY28tY2FsZW5kYXInLFxyXG4gICAgICBkaXI6IHRydWUsXHJcbiAgICAgIGNvZGU6IFNvcnRUeXBlc0V1cm9zdGFyLkVhcmxpZXN0Rmlyc3RcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZSAoRGVzY2VuZGluZyknLFxyXG4gICAgICBtZXRob2Q6IFNvcnRNZXRob2Quc29ydEJ5RGF0ZSxcclxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcicsXHJcbiAgICAgIGRpcjogdHJ1ZSxcclxuICAgICAgY29kZTogU29ydFR5cGVzRXVyb3N0YXIuTGF0ZXN0Rmlyc3RcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBwcml2YXRlIF9mYXJlVHlwZUFycmF5OiBWYWx1ZURpc3BsYXlbXSA9IFtcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkZsZXhpYmxlLCBkaXNwbGF5OiAnRmxleGlibGUnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5MZWlzdXJlLCBkaXNwbGF5OiAnTGVpc3VyZScgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxvd2VzdCwgZGlzcGxheTogJ0xvd2VzdCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOZWdvdGlhdGVkJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTm9uTmVnb3RpYXRlZCwgZGlzcGxheTogJ05vbi1OZWdvdGlhdGVkJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuUmVxdWVzdEZhcmVSdWxlcywgZGlzcGxheTogJ1JlcXVlc3QgRmFyZSBSdWxlcycgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlNlbGVjdEFuZFBybywgZGlzcGxheTogJ1NlbGVjdCAmIFBybycgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBtaW5pbXVtT3V0Qm91bmREYXRlID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG5cclxuICBwdWJsaWMgbWluaW11bUluQm91bmREYXRlID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXM6IFZhbHVlRGlzcGxheVtdID0gW1xyXG4gICAgeyB2YWx1ZTogRXVyb3N0YXJTZWFyY2hUeXBlLnJldHVybiwgZGlzcGxheTogJ1JldHVybicgfSxcclxuICAgIHsgdmFsdWU6IEV1cm9zdGFyU2VhcmNoVHlwZS5vbmVXYXksIGRpc3BsYXk6ICdPbmUtd2F5JyB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfb3V0RGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2luVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9wYXNzZW5nZXJzOiBhbnk7XHJcbiAgcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBGbGlnaHRJdGluZXJhcnlXaXRoU2VsZWN0ZWRbXTtcclxuICBwcm90ZWN0ZWQgZmxpZ2h0c1RvR3JvdXA6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW10gfSA9IHt9O1xyXG4gIHByb3RlY3RlZCByZXN1bHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbiAgcHJvdGVjdGVkIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzID0gbnVsbDtcclxuICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBFdXJvc3RhckVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBzZWxlY3RlZEdyb3VwRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoU2VsZWN0ZWQ7XHJcbiAgcHJpdmF0ZSBfZGlzcGxheUFkZEhvdGVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIERFRkFVTFRfRklMVEVSU1xyXG4gICk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlzcGxheUFkZEhvdGVsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlBZGRIb3RlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGlzcGxheUFkZEhvdGVsKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzcGxheUFkZEhvdGVsID0gbmV3VmFsO1xyXG4gIH1cclxuICBzZWxlY3RlZEdyb3VwRXVyb3N0YXI6IEV1cm9zdGFySXRlbTtcclxuICBzZWxlY3RlZEV1cm9zdGFyRmFyZTogRXVyb3N0YXJGYXJlO1xyXG5cclxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg5NilcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHByZWZlcnJlZENhcnJpZXJzKCk6IE9CVEFpcmxpbmVzRGV0YWlsc1tdIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHByZWZlcnJlZENhcnJpZXJzKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHNbXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMSgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1swXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IxKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1swXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMigpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IyKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMygpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IzKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yNCgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1szXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3I0KHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1szXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5fbWluRGF0ZSB8fCB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY2hpbGRyZW4odmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnRMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRMb2NhdGlvbih2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbiA9IHZhbHVlO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5T3JpZ2luQWlwb3J0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3JpZ2luQWlycG9ydDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcXVlcnlEZXN0aW5hdGlvbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0RGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9vdXREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnREYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9vdXREYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgdGhpcy5fb3V0RGF0ZSxcclxuICAgICAgdGhpcy5fb3V0VGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0VGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dFRpbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydFRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fb3V0VGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG91dEJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvdXRCb3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICB0aGlzLm1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcclxuICAgICAgeWVhcjogdmFsdWUueWVhcigpLFxyXG4gICAgICBtb250aDogdmFsdWUubW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogdmFsdWUuZGF0ZSgpXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSAmJlxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc0FmdGVyKHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUpLmFkZCgxLCAnZGF5Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9vdXREYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcclxuICAgIHRoaXMuX291dFRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmV0dXJuRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9pbkRhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJldHVybkRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFycml2ZVRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9pblRpbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFycml2ZVRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5faW5UaW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2luRGF0ZSwgdGhpcy5faW5UaW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaW5ib3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBpbmJvdW5kRGF0ZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdmFsdWUgPSBtb21lbnQodmFsdWUpO1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5faW5EYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcclxuICAgIHRoaXMuX2luVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVMb2NhdGlvbih2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbiA9IHZhbHVlO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gJyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FiaW5DbGFzcygpOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmV0dXJuQ2FiaW5DbGFzcygpOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuQ2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoVHlwZSgpOiBFdXJvc3RhclNlYXJjaFR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblNlYXJjaFR5cGUodHlwZTogRXVyb3N0YXJTZWFyY2hUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEV1cm9zdGFyU2VhcmNoVHlwZS5yZXR1cm47XHJcbiAgfVxyXG5cclxuICBnZXQgb3V0VGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0VGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5UaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluVGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgZ2V0IG1heENvbm5lY3Rpb25zKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1heENvbm5lY3Rpb25zKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbXVsdGlEZXN0aW5hdGlvbjogRGVzdGluYXRpb25FbnRyeVtdID0gW107XHJcbiAgZ2V0IG11bHRpRGVzdGluYXRpb24oKTogSU11bHRpRGVzdGluYXRpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgbXVsdGlEZXN0aW5hdGlvbih2YWx1ZUFycmF5OiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbiA9IHZhbHVlQXJyYXk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkobXVsdGlEZXN0aW5hdGlvbjogSU11bHRpRGVzdGluYXRpb25bXSkge1xyXG4gICAgY29uc3QgbmV3TXVsdGlEZXN0aW5hdGlvbiA9IHRoaXMuaGVscGVycy5jbG9uZShtdWx0aURlc3RpbmF0aW9uKTtcclxuICAgIHJldHVybiBuZXdNdWx0aURlc3RpbmF0aW9uLnJlZHVjZShcclxuICAgICAgKGRlc3RpbmF0aW9uQXJyYXk6IERlc3RpbmF0aW9uRW50cnlbXSwgaXRlbTogSU11bHRpRGVzdGluYXRpb24pID0+IHtcclxuICAgICAgICBjb25zdCBkZXN0aW5hdGlvbk9iamVjdCA9IHt9IGFzIERlc3RpbmF0aW9uRW50cnk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3Qub3JpZyA9IGl0ZW0ub3JpZy5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRlc3QgPSBpdGVtLmRlc3QuZ2F0ZXdheTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kYXRlID0gdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICBkZXN0aW5hdGlvbkFycmF5LnB1c2goZGVzdGluYXRpb25PYmplY3QpO1xyXG4gICAgICAgIHJldHVybiBkZXN0aW5hdGlvbkFycmF5O1xyXG4gICAgICB9LFxyXG4gICAgICBbXSBhcyBEZXN0aW5hdGlvbkVudHJ5W11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgb25seVxyXG4gIGdldCBzb3J0RHJvcGRvd25WYWx1ZXMoKTogU29ydFR5cGVFdXJvc3RhcltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9mYXJlVHlwZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZhcmVUeXBlKCk6IEZhcmVUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgZmFyZVR5cGUodmFsdWU6IEZhcmVUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBuZWdvdGlhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX25lZ290aWF0ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgbmVnb3RpYXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbmVnb3RpYXRlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHZhbHVlO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZXVyb3N0YXJGZXRjaGVyOiBCYXNlRXVyb3N0YXJRdW90ZUZldGNoZXI8U0VfUT4sXHJcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG4gICkge1xyXG4gICAgc3VwZXIoXHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAocmVzdWx0czE6IEV1cm9zdGFyUXVvdGVSZXN1bHQpOiBFdXJvc3RhclF1b3RlUmVzdWx0QXJyYXkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucmVzdWx0UXVlcnkud2l0aEdyb3VwZWQ7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLm5leHQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhyZXN1bHRzMS5qb3VybmV5cywgREVGQVVMVF9GSUxURVJTKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMxICYmIHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgICAgIGNvbnN0IHJldHVybmRhdGEgPSAocmVzdWx0czEuam91cm5leXMgfHwgW10pLnJlZHVjZShcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIGFjYzogRXVyb3N0YXJSZXN1bHRzLFxyXG4gICAgICAgICAgICAgIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICAgICAgICAgICk6IEV1cm9zdGFyUmVzdWx0cyA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldXJvUmVzdWx0ID0gdGhpcy5mb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC50b3RhbFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGV1cm9SZXN1bHQuY28yUGVyUGFzc2VuZ2VyID0gcmVzdWx0LmNvMlBlclBhc3NlbmdlcjtcclxuICAgICAgICAgICAgICAgIGV1cm9SZXN1bHQuY28yUGVySXRlbSA9IHJlc3VsdC5jbzJQZXJJdGVtO1xyXG4gICAgICAgICAgICAgICAgZXVyb1Jlc3VsdC5zb3VyY2VJZCA9IHJlc3VsdC5zb3VyY2VJZDtcclxuICAgICAgICAgICAgICAgIGV1cm9SZXN1bHQudG90YWwgPSByZXN1bHQudG90YWw7XHJcbiAgICAgICAgICAgICAgICBldXJvUmVzdWx0LmR1cmF0aW9uID0gdGhpcy5taW5Ub0hvdXIoXHJcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICFhY2Mub3V0Ym91bmQuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbTogRXVyb3N0YXJJdGVtKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRlRGVwYXJ0dXJlID09PSBldXJvUmVzdWx0LmRhdGVEZXBhcnR1cmVcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFjYy5vdXRib3VuZC5wdXNoKGV1cm9SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV1cm9SZXN1bHQgPSB0aGlzLmZvcm1hdEV1cm9zdGFyUmVzdWx0cyhcclxuICAgICAgICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICByZXN1bHQudG90YWxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlclBhc3NlbmdlciA9IHJlc3VsdC5jbzJQZXJQYXNzZW5nZXI7XHJcbiAgICAgICAgICAgICAgICBldXJvUmVzdWx0LmNvMlBlckl0ZW0gPSByZXN1bHQuY28yUGVySXRlbTtcclxuICAgICAgICAgICAgICAgIGV1cm9SZXN1bHQuc291cmNlSWQgPSByZXN1bHQuc291cmNlSWQ7XHJcbiAgICAgICAgICAgICAgICBldXJvUmVzdWx0LnRvdGFsID0gcmVzdWx0LnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgZXVyb1Jlc3VsdC5kdXJhdGlvbiA9IHRoaXMubWluVG9Ib3VyKFxyXG4gICAgICAgICAgICAgICAgICByZXN1bHQuaW5ib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICFhY2MuaW5ib3VuZC5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIChpdGVtOiBFdXJvc3Rhckl0ZW0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGVEZXBhcnR1cmUgPT09IGV1cm9SZXN1bHQuZGF0ZURlcGFydHVyZVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgYWNjLmluYm91bmQucHVzaChldXJvUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgeyBvdXRib3VuZDogW10sIGluYm91bmQ6IFtdIH0gYXMgRXVyb3N0YXJSZXN1bHRzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIFtyZXR1cm5kYXRhXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMxID8gW3Jlc3VsdHMxXSA6IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IEV1cm9zdGFyVGVtcFBhcmFtcztcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBFdXJvc3RhclRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgRXVyb3N0YXJUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIEV1cm9zdGFyVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuICAgIC8vIGRhdGEudGVtcFBhcmFtcy5hZHVsdHMgPSAxO1xyXG4gICAgLy8gZGF0YS50ZW1wUGFyYW1zLmNhYmluQ2xhc3MgPSBbRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215XTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gc2VhcmNoU2VydmljZS5tYWtlRXVyb3N0YXJRdWVyeShkYXRhLnRlbXBQYXJhbXMpO1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHF1ZXJ5KTtcclxuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuRXVyb3N0YXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKCh1c2VyOiBGdWxsVXNlckRldGFpbHMpID0+IHtcclxuICAgICAgdGhpcy50aW1lQ3JpdGVyaWFPcHRpb25zLm5leHQoW1xyXG4gICAgICAgIFRpbWVXaW5kb3cuQW55dGltZSxcclxuICAgICAgICBUaW1lV2luZG93LkFycml2ZSxcclxuICAgICAgICBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICBdKTsgLy8gVE9ETyB1cGRhdGUgd2l0aCBhbnkgVUZzXHJcbiAgICAgIHRoaXMudXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICBjb25zdCByZXN1bHRzOiBFdXJvc3RhclNlc3Npb25UeXBlID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICApIHx8IHtcclxuICAgICAgcmVzdWx0czogW10sXHJcbiAgICAgIGdyb3VwRGF0YToge30sXHJcbiAgICAgIGdyb3VwZWQ6IFtdLFxyXG4gICAgICBxdWVyeToge30gYXMgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcclxuICAgIH07XHJcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMucmVzdWx0cyk7XHJcbiAgICB0aGlzLmZsaWdodHNUb0dyb3VwID0gcmVzdWx0cy5ncm91cERhdGEgfHwge307XHJcbiAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gcmVzdWx0cy5xdWVyeTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgaWYgKCFpc0ZsaWdodHNHcm91cGVkKSB7XHJcbiAgICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMucmVzdWx0cyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzLnJlc3VsdHMgfHwgKFtdIGFzIEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgdGhpcy5uZWdvdGlhdGVkID1cclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID09PSBGYXJlVHlwZS5OZWdvdGlhdGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuICBmb3JtYXRFdXJvc3RhclJlc3VsdHMoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRKb3VybmV5W10sXHJcbiAgICB0b3RhbDogRmxpZ2h0RmFyZVRvdGFsXHJcbiAgKTogRXVyb3N0YXJJdGVtIHtcclxuICAgIGNvbnN0IHJldHVybk9iamVjdDogRXVyb3N0YXJJdGVtID0ge1xyXG4gICAgICBkYXRlQXJyaXZhbDogbnVsbCxcclxuICAgICAgZGF0ZURlcGFydHVyZTogbnVsbCxcclxuICAgICAgZHVyYXRpb246IG51bGwsXHJcbiAgICAgIHRpbWVBcnJpdmFsOiBudWxsLFxyXG4gICAgICB0aW1lRGVwYXJ0dXJlOiBudWxsLFxyXG4gICAgICBjbzJQZXJJdGVtOiAwLFxyXG4gICAgICBjbzJQZXJQYXNzZW5nZXI6IDAsXHJcbiAgICAgIHNvdXJjZUlkOiBudWxsLFxyXG4gICAgICB0b3RhbDogbnVsbCxcclxuICAgICAgdWlkOiBudWxsLFxyXG5cclxuICAgICAgYnVzaW5lc3NQcmVtaWVyRmFyZToge1xyXG4gICAgICAgIGNsYXNzOiBudWxsLFxyXG4gICAgICAgIGZhcmU6IG51bGwsXHJcbiAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgICBwcmljZTogTmFOLFxyXG4gICAgICAgIGN1cnJlbmN5OiAnR0JQJ1xyXG4gICAgICB9LFxyXG4gICAgICBzdGFuZGFyZEZhcmU6IHtcclxuICAgICAgICBjbGFzczogbnVsbCxcclxuICAgICAgICBmYXJlOiBudWxsLFxyXG4gICAgICAgIGlzRGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgcHJpY2U6IE5hTixcclxuICAgICAgICBjdXJyZW5jeTogJ0dCUCdcclxuICAgICAgfSxcclxuICAgICAgc3RhbmRhcmRQcmVtaWVyRmFyZToge1xyXG4gICAgICAgIGNsYXNzOiBudWxsLFxyXG4gICAgICAgIGZhcmU6IG51bGwsXHJcbiAgICAgICAgaXNEaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgICBwcmljZTogTmFOLFxyXG4gICAgICAgIGN1cnJlbmN5OiAnR0JQJ1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy8gcmV0dXJuT2JqZWN0LmR1cmF0aW9uID0gcmVzdWx0cy5vdXRib3VuZFRvdGFsRHVyYXRpb247XHJcbiAgICByZXN1bHRzLmZvckVhY2goKGZsaWdodCwgaW5kZXgpID0+IHtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRhdGVBcnJpdmFsID0gZmxpZ2h0LmRhdGVUaW1lQXJyaXZpbmc7XHJcbiAgICAgIHJldHVybk9iamVjdC5kYXRlRGVwYXJ0dXJlID0gZmxpZ2h0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuZHVyYXRpb24gPSB0aGlzLm1pblRvSG91cihmbGlnaHQudG90YWxEdXJhdGlvbik7XHJcbiAgICAgIHJldHVybk9iamVjdC50aW1lQXJyaXZhbCA9IG1vbWVudChmbGlnaHQuZGF0ZVRpbWVBcnJpdmluZykuZm9ybWF0KFxyXG4gICAgICAgICdISDptbSdcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuT2JqZWN0LnRpbWVEZXBhcnR1cmUgPSBtb21lbnQoZmxpZ2h0LmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoXHJcbiAgICAgICAgJ0hIOm1tJ1xyXG4gICAgICApO1xyXG4gICAgICByZXR1cm5PYmplY3QudWlkID0gaW5kZXg7XHJcbiAgICAgIHN3aXRjaCAoZmxpZ2h0LmZhcmVJbmZvLnRpdGxlKSB7XHJcbiAgICAgICAgY2FzZSBFdXJvc3RhckNsYXNzRW51bS5TVEFOREFSRDpcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZEZhcmUuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5mYXJlID0gZmxpZ2h0O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5wcmljZSA9IHRvdGFsLnByaWNlO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5jdXJyZW5jeSA9IHRvdGFsLmN1cnJlbmN5O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkRmFyZS5jbGFzcyA9IGZsaWdodC5jYWJpbkNsYXNzO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFdXJvc3RhckNsYXNzRW51bS5TVEFOREFSRF9QUkVNSUVSOlxyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuZmFyZSA9IGZsaWdodDtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5zdGFuZGFyZFByZW1pZXJGYXJlLnByaWNlID0gdG90YWwucHJpY2U7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3Quc3RhbmRhcmRQcmVtaWVyRmFyZS5jdXJyZW5jeSA9IHRvdGFsLmN1cnJlbmN5O1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LnN0YW5kYXJkUHJlbWllckZhcmUuY2xhc3MgPSBmbGlnaHQuY2FiaW5DbGFzcztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRXVyb3N0YXJDbGFzc0VudW0uQlVTSU5FU1NfUFJFTUlFUjpcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmZhcmUgPSBmbGlnaHQ7XHJcbiAgICAgICAgICByZXR1cm5PYmplY3QuYnVzaW5lc3NQcmVtaWVyRmFyZS5wcmljZSA9IHRvdGFsLnByaWNlO1xyXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LmJ1c2luZXNzUHJlbWllckZhcmUuY3VycmVuY3kgPSB0b3RhbC5jdXJyZW5jeTtcclxuICAgICAgICAgIHJldHVybk9iamVjdC5idXNpbmVzc1ByZW1pZXJGYXJlLmNsYXNzID0gZmxpZ2h0LmNhYmluQ2xhc3M7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ25ldyBjbGFzcyB0byBiZSBpbXBsZW1lbnRlZDogJywgZmxpZ2h0LmZhcmVJbmZvLnRpdGxlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRXVyb3N0YXJRdWVyeSgpKTtcclxuICAgIGlmIChjaGVja0lzVmFsaWQpIHtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0UGFyYW1zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gICAgdGhpcy5yZXNldFF1ZXJ5KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xyXG4gICAgaWYgKCF0aGlzLmRvQ2hlY2tzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBhZGQgaW4gYSBkZXBhcnR1dHJlIGxvY2F0aW9uJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIGluIGEgYXJyaXZhbCBkZXN0aW5hdGlvbicpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0RlcGFydHVyZSBkYXRlIGNhbiBub3QgYmUgaW4gdGhlIHBhc3QnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgJiZcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ICYmXHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gc3RhdGlvbiBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAvLyBUT0RPIGNoZWNrIHRoYXQgcmV0dXJuIGRldGFpbHMgYXJlIHNldFxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1JldHVybiBkYXRlIG11c3QgYmUgYWZ0ZXIgdGhlIGRlcGFydHVyZSBkYXRlJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHsgLi4udGhpcy50ZW1wUGFyYW1zIH0pO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5ldXJvc3RhckZldGNoZXIuZmV0Y2hMaXN0KHRoaXMuZ2V0U2VhcmNoUXVlcnkoKSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkV1cm9zdGFyLFxyXG4gICAgICBzZWFyY2hBcmdzOiBxdWVyeSxcclxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5vdXRCb3VuZERhdGUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlLFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EYXRlKSB7XHJcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EYXRlLFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZhcmVUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZmFyZVR5cGU7XHJcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MubWF4Q29ubmVjdGlvbnM7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzcykge1xyXG4gICAgICB0aGlzLmNhYmluQ2xhc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZENhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQ2FiaW5DbGFzcykge1xyXG4gICAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuaW5jbHVkZU5lYXJieUFpcnBvcnRzO1xyXG5cclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVyblRyaXBcclxuICAgICAgPyBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRXVyb3N0YXJTZWFyY2hUeXBlLm9uZVdheTtcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3JpZ2luQWlycG9ydFxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkFpcnBvcnRcclxuICAgICAgKVxyXG4gICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xyXG4gICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcclxuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0ge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucHJlZmVycmVkQ2FycmllcnMpIHtcclxuICAgICAgICAgIGxldCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcclxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB3aW5kb3cgPT09IFRpbWVXaW5kb3cuRGVwYXJ0XHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICBkYXRlVGltZTogbW9tZW50Lk1vbWVudCxcclxuICAgIHdpbmRvdzogVGltZVdpbmRvd1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAod2luZG93ICE9PSBUaW1lV2luZG93LkFycml2ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMik7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICBkYXRlOiBzdHJpbmcsXHJcbiAgICB0aW1lV2luZG93Pzogc3RyaW5nXHJcbiAgKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICBpZiAodGltZVdpbmRvdykge1xyXG4gICAgICBjb25zdCBmbGlnaHRUaW1lID0gdGltZVdpbmRvdy5zcGxpdCgnLScpO1xyXG4gICAgICBsZXQgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzPihcclxuICAgICAgT2JqZWN0LmFzc2lnbihcclxuICAgICAgICB7fSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5BaXJwb3J0OiB0aGlzLl9vcmlnaW5BaXJwb3J0LFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQsXHJcbiAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBhc3NlbmdlcnM6IHRoaXMuX3Bhc3NlbmdlcnMsXHJcbiAgICAgICAgICByZXR1cm5UcmlwOiB0aGlzLmlzUmV0dXJuLFxyXG4gICAgICAgICAgb3V0Ym91bmRDYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc1xyXG4gICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc11cclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgcmVxdWlyZUZyZWVCYWc6IG51bGwsXHJcbiAgICAgICAgICBtYXhDb25uZWN0aW9uczogdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zLFxyXG4gICAgICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzLFxyXG4gICAgICAgICAgcHJlZmVycmVkQ2FycmllcnM6IHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycy5tYXAoXHJcbiAgICAgICAgICAgIChjYXJyaWVyOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+XHJcbiAgICAgICAgICAgICAgY2Fycmllcj8uY29kZSA/IGNhcnJpZXIuY29kZSA6IG51bGxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBmYXJlVHlwZTogdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlLFxyXG4gICAgICAgICAgd2l0aEdyb3VwZWQ6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRoaXMuaXNSZXR1cm5cclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIHRoaXMuYXZhbGlhYmxlQ2xhc3Nlcy5uZXh0KFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbnknLFxyXG4gICAgICAgIHR5cGU6IEV1cm9zdGFyQ2xhc3NFbnVtLkFOWVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0YW5kYXJkIChzZW1pIGZsZXhpYmxlKScsXHJcbiAgICAgICAgdHlwZTogRXVyb3N0YXJDbGFzc0VudW0uU1RBTkRBUkRcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdGFuZGFyZCBwcmVtaWVyIChzZW1pIGZsZXhpYmxlKScsXHJcbiAgICAgICAgdHlwZTogRXVyb3N0YXJDbGFzc0VudW0uU1RBTkRBUkRfUFJFTUlFUlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0J1c2luZXNzIHByZW1pZXIgKGZ1bGx5IGZsZXhpYmxlKScsXHJcbiAgICAgICAgdHlwZTogRXVyb3N0YXJDbGFzc0VudW0uQlVTSU5FU1NfUFJFTUlFUlxyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIHNvcnQgdGhlIGZsaWdodCByZXN1bHRzXHJcbiAgICogQHRvZG8gLSBGaWxsIG91dCBQcmVmZXJyZWQgYW5kIENvMiBzb3J0aW5nIHdoZW4gd2UgaGF2ZSB0aGF0IGRhdGFcclxuICAgKi9cclxuICBwdWJsaWMgc29ydFJlc3VsdHMoXHJcbiAgICBzb3J0TWV0aG9kVmFsdWU6IFNvcnRUeXBlc0V1cm9zdGFyLFxyXG4gICAgZ2l2ZW5SZXN1bHRzPzogRXVyb3N0YXJSZXN1bHRzW11cclxuICApOiB2b2lkIHtcclxuICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICBnaXZlblJlc3VsdHNcclxuICAgICAgICA/IGdpdmVuUmVzdWx0c1xyXG4gICAgICAgIDogPEV1cm9zdGFyUmVzdWx0c1tdPig8dW5rbm93bj50aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgKTtcclxuXHJcbiAgICBzd2l0Y2ggKHNvcnRNZXRob2RWYWx1ZSkge1xyXG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkNoZWFwZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5UHJpY2UocmVzdWx0cyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU29ydFR5cGVzRXVyb3N0YXIuRWFybGllc3RGaXJzdDpcclxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlEYXRlKHJlc3VsdHMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBVbmtub3duIHNvcnRpbmcgbWV0aG9kOiAke3NvcnRNZXRob2RWYWx1ZX0gKysrYCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydFJlc3VsdHNGbGlnaHRKb3VybmV5cyhcclxuICAgIHNvcnRNZXRob2RWYWx1ZTogU29ydFR5cGVzRXVyb3N0YXIsXHJcbiAgICBpbmJvdW5kOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBnaXZlblJlc3VsdHM/OiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGxldCByZXN1bHRzID0gdGhpcy5oZWxwZXJzLmNsb25lKGdpdmVuUmVzdWx0cyk7XHJcblxyXG4gICAgc3dpdGNoIChzb3J0TWV0aG9kVmFsdWUpIHtcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5DaGVhcGVzdEZpcnN0OlxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnNvcnRCeVByaWNlRmxpZ2h0KHJlc3VsdHMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNvcnRUeXBlc0V1cm9zdGFyLkVhcmxpZXN0Rmlyc3Q6XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMuc29ydEJ5RGF0ZUZsaWdodChyZXN1bHRzLCBpbmJvdW5kKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTb3J0VHlwZXNFdXJvc3Rhci5MYXRlc3RGaXJzdDpcclxuICAgICAgICByZXN1bHRzID0gdGhpcy5zb3J0QnlEYXRlRmxpZ2h0RGVjZW5kaW5nKHJlc3VsdHMsIGluYm91bmQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBVbmtub3duIHNvcnRpbmcgbWV0aG9kOiAke3NvcnRNZXRob2RWYWx1ZX0gKysrYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBzb3J0QnlQcmljZUZsaWdodChyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIHJldHVybiByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgcmV0dXJuIE51bWJlcihhLnRvdGFsLnByaWNlKSAtIE51bWJlcihiLnRvdGFsLnByaWNlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ5RGF0ZUZsaWdodChcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdLFxyXG4gICAgaW5ib3VuZDogYm9vbGVhblxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIHJldHVybiByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgaWYgKGluYm91bmQpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgbW9tZW50KGEuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKSAtXHJcbiAgICAgICAgICBtb21lbnQoYi5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxyXG4gICAgICAgICAgbW9tZW50KGIub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNvcnRCeURhdGVGbGlnaHREZWNlbmRpbmcoXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IGJvb2xlYW5cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXR1cm4gcmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChpbmJvdW5kKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChiLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS51bml4KCkgLVxyXG4gICAgICAgICAgbW9tZW50KGEuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLnVuaXgoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpIC1cclxuICAgICAgICAgIG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykudW5peCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IHJlc3VsdHMgYnkgZGVwYXJ0dXJlIHRpbWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXVyb3N0YXJSZXN1bHRzW119IHJlc3VsdHNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBFdXJvc3RhckluZm9cclxuICAgKi9cclxuICBzb3J0QnlEYXRlKHJlc3VsdHM6IEV1cm9zdGFyUmVzdWx0c1tdKTogRXVyb3N0YXJSZXN1bHRzW10ge1xyXG4gICAgY29uc3QgYnlEYXRlID0gKGE6IEV1cm9zdGFySXRlbSwgYjogRXVyb3N0YXJJdGVtKSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgbW9tZW50KGEudGltZURlcGFydHVyZSwgJ0hIOm1tJykudW5peCgpIC1cclxuICAgICAgICBtb21lbnQoYi50aW1lRGVwYXJ0dXJlLCAnSEg6bW0nKS51bml4KClcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IHtcclxuICAgICAgb3V0Ym91bmQ6IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieURhdGUpLFxyXG4gICAgICBpbmJvdW5kOiByZXN1bHRzWzBdLmluYm91bmQuc29ydChieURhdGUpXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFtzb3J0ZWRSZXN1bHRzXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgcmVzdWx0cyBieSBwcmljZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdXJvc3RhclJlc3VsdHNbXX0gcmVzdWx0c1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICogQG1lbWJlcm9mIEV1cm9zdGFySW5mb1xyXG4gICAqL1xyXG4gIHNvcnRCeVByaWNlKHJlc3VsdHM6IEV1cm9zdGFyUmVzdWx0c1tdLCBkaXI/OiBib29sZWFuKTogRXVyb3N0YXJSZXN1bHRzW10ge1xyXG4gICAgY29uc3QgYnlQcmljZSA9IChhOiBFdXJvc3Rhckl0ZW0sIGI6IEV1cm9zdGFySXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBhUHJpY2UgPVxyXG4gICAgICAgICthLnN0YW5kYXJkRmFyZS5wcmljZSB8fFxyXG4gICAgICAgICthLnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgfHxcclxuICAgICAgICArYS5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlO1xyXG4gICAgICBjb25zdCBiUHJpY2UgPVxyXG4gICAgICAgICtiLnN0YW5kYXJkRmFyZS5wcmljZSB8fFxyXG4gICAgICAgICtiLnN0YW5kYXJkUHJlbWllckZhcmUucHJpY2UgfHxcclxuICAgICAgICArYi5idXNpbmVzc1ByZW1pZXJGYXJlLnByaWNlO1xyXG4gICAgICBpZiAoZGlyKSB7XHJcbiAgICAgICAgcmV0dXJuIGJQcmljZSAtIGFQcmljZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYVByaWNlIC0gYlByaWNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzb3J0ZWRSZXN1bHRzID0ge1xyXG4gICAgICBvdXRib3VuZDogcmVzdWx0c1swXS5vdXRib3VuZC5zb3J0KGJ5UHJpY2UpLFxyXG4gICAgICBpbmJvdW5kOiByZXN1bHRzWzBdLmluYm91bmQuc29ydChieVByaWNlKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBbc29ydGVkUmVzdWx0c107XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChmbGlnaHRJdGVtKSB7XHJcbiAgICAgIC8vIFRPRE8gZmxpZ2h0cyBoYXZlbid0IGJlZW4gZG9uZSB5ZXQuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbEJhZ2dhZ2UocmVzdWx0OiBGbGlnaHRJdGluZXJhcnkpOiBudW1iZXIge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuXHJcbiAgICBjb25zdCBwYXJzZWRBZGRpdGlvbmFsID0gSlNPTi5wYXJzZShyZXN1bHQuYWRkaXRpb25hbCk7XHJcbiAgICBpZiAocGFyc2VkQWRkaXRpb25hbCAmJiBwYXJzZWRBZGRpdGlvbmFsLm91dGJvdW5kRmxpZ2h0cykge1xyXG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLm91dGJvdW5kRmxpZ2h0cy5mb3JFYWNoKChmbGlnaHQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGZsaWdodC5iYWdnYWdlLmZvckVhY2goKGJhZzogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoYmFnLmFsbG93YW5jZSAmJiBiYWcuYWxsb3dhbmNlID4gdG90YWwpIHtcclxuICAgICAgICAgICAgdG90YWwgPSBiYWcuYWxsb3dhbmNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAocGFyc2VkQWRkaXRpb25hbCAmJiBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UpIHtcclxuICAgICAgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlLmZvckVhY2goKGJhZ2dhZ2VBbGxvdzogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5ICYmXHJcbiAgICAgICAgICBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KSA+IHRvdGFsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0b3RhbCA9IE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvdGFsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2l2ZSB0aGUgY29ycmVjdCBmb3JtYXQgZm9yIHRyYW5zZmVyaW5nIG1pbnVldGVzIG9uIHRoZSBzbGlkZXJzXHJcbiAgICogQHBhcmFtIG1pbiAtIHRoZSBtaW4gaW4gMTAwdGgncyB0byB0cmFuc2Zvcm0gb250byA2MHRoJ3NcclxuICAgKi9cclxuICB0cmFuc2Zvcm1NaW4obWluOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IG51bSA9IChOdW1iZXIobWluKSAqIDYwKSAvIDEwMDtcclxuICAgIC8vIGNvbnNvbGUubG9nKCcrKysgTnVtIENvcHk6ICcsIF8uY2xvbmUobnVtKSwgJyArKysnKTtcclxuICAgIGlmIChudW0gJSAxIDwgMC41KSB7XHJcbiAgICAgIG51bSA9IE1hdGguZmxvb3IobnVtKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG51bSA9IE1hdGguY2VpbChudW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudW0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gYXBwbHkgYWxsIGZpbHRlcnMgdG8gcmVzdWx0c1xyXG4gICAqIEBwYXJhbSBmaWx0ZXJzXHJcbiAgICogQHBhcmFtIGluYm91bmRcclxuICAgKiBAcGFyYW0gcmVzdWx0c1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIGluYm91bmQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgLy8gbGV0IG5ld1Jlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cyk7XHJcbiAgICAvLyBpZiAoaW5ib3VuZCkge1xyXG4gICAgLy8gICBuZXdSZXN1bHRzID0gdGhpcy5maWx0ZXJCeVJldHVybkRlcGFydHVyZVRpbWUoXHJcbiAgICAvLyAgICAgZmlsdGVycy5taW5SZXR1cm5EZXBhcnR1cmVUaW1lLFxyXG4gICAgLy8gICAgIGZpbHRlcnMubWF4UmV0dXJuRGVwYXJ0dXJlVGltZSxcclxuICAgIC8vICAgICBuZXdSZXN1bHRzXHJcbiAgICAvLyAgICk7XHJcbiAgICAvLyAgIG5ld1Jlc3VsdHMgPSB0aGlzLmZpbHRlckJ5UmV0dXJuQXJyaXZhbFRpbWUoXHJcbiAgICAvLyAgICAgZmlsdGVycy5taW5SZXR1cm5BcnJpdmFsVGltZSxcclxuICAgIC8vICAgICBmaWx0ZXJzLm1heFJldHVybkFycml2YWxUaW1lLFxyXG4gICAgLy8gICAgIG5ld1Jlc3VsdHNcclxuICAgIC8vICAgKTtcclxuICAgIC8vIH1cclxuICAgIC8vIC8vIEdsb2JhbCAoYXBwbHkgdG8gYm90aCBpbmJvdW5kIGFuZCBvdXRib3VuZCByZXN1bHRzKSBmaWx0ZXJzXHJcbiAgICAvLyBuZXdSZXN1bHRzID0gdGhpcy5maWx0ZXJCeURlcGFydHVyZVRpbWUoXHJcbiAgICAvLyAgIGZpbHRlcnMubWluRGVwYXJ0dXJlVGltZSxcclxuICAgIC8vICAgZmlsdGVycy5tYXhEZXBhcnR1cmVUaW1lLFxyXG4gICAgLy8gICBuZXdSZXN1bHRzXHJcbiAgICAvLyApO1xyXG4gICAgLy8gbmV3UmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlBcnJpdmFsVGltZShcclxuICAgIC8vICAgZmlsdGVycy5taW5BcnJpdmFsVGltZSxcclxuICAgIC8vICAgZmlsdGVycy5tYXhBcnJpdmFsVGltZSxcclxuICAgIC8vICAgbmV3UmVzdWx0c1xyXG4gICAgLy8gKTtcclxuICAgIC8vIG5ld1Jlc3VsdHMgPSB0aGlzLmZpbHRlclJlc3VsdHNCeVN0b3BzKGZpbHRlcnMuc3RvcHMsIG5ld1Jlc3VsdHMpO1xyXG4gICAgLy8gbmV3UmVzdWx0cyA9IHRoaXMuZmlsdGVyQnlQcmljZShcclxuICAgIC8vICAgZmlsdGVycy5taW5QcmljZSxcclxuICAgIC8vICAgZmlsdGVycy5tYXhQcmljZSxcclxuICAgIC8vICAgbmV3UmVzdWx0c1xyXG4gICAgLy8gKTtcclxuICAgIC8vIHJldHVybiBuZXdSZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlEdXJhdGlvbihcclxuICAgIG1pbkR1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBtYXhEdXJhdGlvbjogbnVtYmVyLFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBpc1JldHVybiA9IGZhbHNlXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IGR1ciA9IDA7XHJcbiAgICAgIGlmICghaXNSZXR1cm4pIHtcclxuICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKG91dDogRmxpZ2h0Sm91cm5leSkgPT4ge1xyXG4gICAgICAgICAgZHVyICs9IG91dC50b3RhbER1cmF0aW9uO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzPy5sZW5ndGggJiYgaXNSZXR1cm4pIHtcclxuICAgICAgICByZXN1bHQuaW5ib3VuZEZsaWdodHMuZm9yRWFjaCgoaW5iOiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICBkdXIgKz0gaW5iLnRvdGFsRHVyYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBkdXIgPj0gbWluRHVyYXRpb24gJiYgZHVyIDw9IG1heER1cmF0aW9uO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeURlcGFydHVyZVRpbWUoXHJcbiAgICBtaW5EZXA6IG51bWJlcixcclxuICAgIG1heERlcDogbnVtYmVyLFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBkZXBhcnR1cmVUaW1lID0gTnVtYmVyKFxyXG4gICAgICAgIG1vbWVudChyZXN1bHQub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBuZXdOdW1TdHJpbmcxID0gTnVtYmVyKFxyXG4gICAgICAgIE1hdGguZmxvb3IoTnVtYmVyKG1pbkRlcCAvIDEwMCkpLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgdGhpcy50cmFuc2Zvcm1NaW4oTWF0aC5jZWlsKE51bWJlcihtaW5EZXAgJSAxMDApKSlcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbmV3TnVtU3RyaW5nMiA9IE51bWJlcihcclxuICAgICAgICBNYXRoLmZsb29yKE51bWJlcihtYXhEZXAgLyAxMDApKS50b1N0cmluZygpICtcclxuICAgICAgICAgIHRoaXMudHJhbnNmb3JtTWluKE1hdGguY2VpbChOdW1iZXIobWF4RGVwICUgMTAwKSkpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZGVwYXJ0dXJlVGltZSA+PSBuZXdOdW1TdHJpbmcxICYmIGRlcGFydHVyZVRpbWUgPD0gbmV3TnVtU3RyaW5nMjtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlSZXR1cm5EZXBhcnR1cmVUaW1lKFxyXG4gICAgbWluRGVwOiBudW1iZXIsXHJcbiAgICBtYXhEZXA6IG51bWJlcixcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgaWYgKCFtaW5EZXAgJiYgIW1heERlcCkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdOdW1TdHJpbmcxID0gTnVtYmVyKFxyXG4gICAgICBNYXRoLmZsb29yKE51bWJlcihtaW5EZXAgLyAxMDApKS50b1N0cmluZygpICtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybU1pbihNYXRoLmNlaWwoTnVtYmVyKG1pbkRlcCAlIDEwMCkpKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IG5ld051bVN0cmluZzIgPSBOdW1iZXIoXHJcbiAgICAgIE1hdGguZmxvb3IoTnVtYmVyKG1heERlcCAvIDEwMCkpLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtTWluKE1hdGguY2VpbChOdW1iZXIobWF4RGVwICUgMTAwKSkpXHJcbiAgICApO1xyXG5cclxuICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmICghcmVzdWx0LmluYm91bmRGbGlnaHRzIHx8ICFyZXN1bHQuaW5ib3VuZEZsaWdodHNbMF0pIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZGVwYXJ0dXJlVGltZSA9IE51bWJlcihcclxuICAgICAgICBtb21lbnQocmVzdWx0LmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZGVwYXJ0dXJlVGltZSA+PSBuZXdOdW1TdHJpbmcxICYmIGRlcGFydHVyZVRpbWUgPD0gbmV3TnVtU3RyaW5nMjtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlSZXR1cm5BcnJpdmFsVGltZShcclxuICAgIG1pbkFycjogbnVtYmVyLFxyXG4gICAgbWF4QXJyOiBudW1iZXIsXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGlmICghbWluQXJyICYmICFtYXhBcnIpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3TnVtU3RyaW5nMSA9IE51bWJlcihcclxuICAgICAgTWF0aC5mbG9vcihOdW1iZXIobWluQXJyIC8gMTAwKSkudG9TdHJpbmcoKSArXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1NaW4oTWF0aC5jZWlsKE51bWJlcihtaW5BcnIgJSAxMDApKSlcclxuICAgICk7XHJcbiAgICBjb25zdCBuZXdOdW1TdHJpbmcyID0gTnVtYmVyKFxyXG4gICAgICBNYXRoLmZsb29yKE51bWJlcihtYXhBcnIgLyAxMDApKS50b1N0cmluZygpICtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybU1pbihNYXRoLmNlaWwoTnVtYmVyKG1heEFyciAlIDEwMCkpKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAoIXJlc3VsdC5pbmJvdW5kRmxpZ2h0cyB8fCAhcmVzdWx0LmluYm91bmRGbGlnaHRzWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGFycml2YWxUaW1lID0gTnVtYmVyKFxyXG4gICAgICAgIG1vbWVudChcclxuICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1tyZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgLmRhdGVUaW1lQXJyaXZpbmdcclxuICAgICAgICApLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHJldFZhbCA9XHJcbiAgICAgICAgYXJyaXZhbFRpbWUgPj0gbmV3TnVtU3RyaW5nMSAmJiBhcnJpdmFsVGltZSA8PSBuZXdOdW1TdHJpbmcyO1xyXG5cclxuICAgICAgLy8gZm9yIGRlYnVnZ2luZ1xyXG4gICAgICAvLyBpZiAoIXJldFZhbCkge1xyXG4gICAgICAvLyAgIGNvbnNvbGUud2FybihgKysrIEZpbHRlcmluZyBPdXQ6ICR7YXJyaXZhbFRpbWV9ICsrK2ApO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICByZXR1cm4gcmV0VmFsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUFycml2YWxUaW1lKFxyXG4gICAgbWluQXJyOiBudW1iZXIsXHJcbiAgICBtYXhBcnI6IG51bWJlcixcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3QgbmV3TnVtU3RyaW5nMSA9IE51bWJlcihcclxuICAgICAgTWF0aC5mbG9vcihOdW1iZXIobWluQXJyIC8gMTAwKSkudG9TdHJpbmcoKSArXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1NaW4oTWF0aC5jZWlsKE51bWJlcihtaW5BcnIgJSAxMDApKSlcclxuICAgICk7XHJcbiAgICBjb25zdCBuZXdOdW1TdHJpbmcyID0gTnVtYmVyKFxyXG4gICAgICBNYXRoLmZsb29yKE51bWJlcihtYXhBcnIgLyAxMDApKS50b1N0cmluZygpICtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybU1pbihNYXRoLmNlaWwoTnVtYmVyKG1heEFyciAlIDEwMCkpKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBhcnJpdmFsVGltZSA9IE51bWJlcihcclxuICAgICAgICBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzW3Jlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgLmRhdGVUaW1lQXJyaXZpbmdcclxuICAgICAgICApLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gYXJyaXZhbFRpbWUgPj0gbmV3TnVtU3RyaW5nMSAmJiBhcnJpdmFsVGltZSA8PSBuZXdOdW1TdHJpbmcyO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUJhZ2dhZ2UoXHJcbiAgICBiYWdnYWdlRmlsdGVyczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gYmFnZ2FnZUZpbHRlcnMuZmlsdGVyKCh4KSA9PiB4LnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQ/Lmxlbmd0aCA+PSAxICYmIHNlbGVjdGVkLmxlbmd0aCAhPT0gYmFnZ2FnZUZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHRvdGFsQmFncyA9IHRoaXMuZ2V0VG90YWxCYWdnYWdlKHJlc3VsdCk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGVkLmZpbmQoKHgpID0+IHgudmFsdWUgPT09IHRvdGFsQmFncyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciBkZXRlcm1lbmluZyBiYWdnYWdlOiAke2Vycm9yfSArKysnKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyQnlQcmljZShcclxuICAgIG1pblByaWNlOiBudW1iZXIsXHJcbiAgICBtYXhQcmljZTogbnVtYmVyLFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhgKysrIFByaWNlOiAke3Jlc3VsdC50b3RhbC5wcmljZX0gaXMgYmV0d2VlbjogJHttaW5QcmljZX0gYW5kICR7bWF4UHJpY2V9OiAke3Jlc3VsdC50b3RhbC5wcmljZSA+PSBtaW5QcmljZSAmJiByZXN1bHQudG90YWwucHJpY2UgPD0gbWF4UHJpY2V9ICsrK2ApXHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0LnRvdGFsLnByaWNlID49IG1pblByaWNlICYmIHJlc3VsdC50b3RhbC5wcmljZSA8PSBtYXhQcmljZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZmlsdGVyIHRoZSByZXN1bHRzIGJ5IHRoZSBudW1iZXIgb2Ygc3RvcHNcclxuICAgKiBAcGFyYW0gc3RvcEZpbHRlcnMgLSB0aGUgc2VsZWN0ZWQgc3RvcHNcclxuICAgKiBAcGFyYW0gZnVsbFJlc3VsdHMgLSBhbGwgb2Ygb3VyIHJlc3VsdHMgc28gZmFyXHJcbiAgICovXHJcbiAgZmlsdGVyUmVzdWx0c0J5U3RvcHMoXHJcbiAgICBzdG9wRmlsdGVyczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICBmdWxsUmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHN0b3BGaWx0ZXJzLmZpbHRlcigoeCkgPT4geC5zZWxlY3RlZCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkPy5sZW5ndGggPj0gMSAmJiBzZWxlY3RlZC5sZW5ndGggIT09IHN0b3BGaWx0ZXJzLmxlbmd0aCkge1xyXG4gICAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdG90YWxTdG9wcyA9IHJlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICAgICAgY29uc3QgaGF2ZVN0b3AgPSBzZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgKHNlbGVjdGVkMTogU2VsZWN0RmlsdGVyKSA9PiBzZWxlY3RlZDEudmFsdWUgPT09IHRvdGFsU3RvcHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gaGF2ZVN0b3A7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdWxsUmVzdWx0cztcclxuICB9XHJcblxyXG4gIGZpbHRlclJlc3VsdHNCeUFpcmxpbmUoXHJcbiAgICBhaXJsaW5lRmlsdGVyczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gYWlybGluZUZpbHRlcnMuZmlsdGVyKCh4KSA9PiB4LnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQ/Lmxlbmd0aCA+PSAxICYmIHNlbGVjdGVkLmxlbmd0aCAhPT0gYWlybGluZUZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkLmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC52YWx1ZSA9PT0gcmVzdWx0Lm91dGJvdW5kRmxpZ2h0c1swXS5vcGVyYXRpbmdDYXJyaWVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJSZXN1bHRzQnlDbGFzcyhcclxuICAgIGNsYXNzRmlsdGVyczogU2VsZWN0RmlsdGVyW10sXHJcbiAgICByZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXVxyXG4gICk6IEZsaWdodEl0aW5lcmFyeVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gY2xhc3NGaWx0ZXJzLmZpbHRlcigoeCkgPT4geC5zZWxlY3RlZCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkPy5sZW5ndGggPj0gMSAmJiBzZWxlY3RlZC5sZW5ndGggIT09IGNsYXNzRmlsdGVycy5sZW5ndGgpIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAgICh4KSA9PiB4LnZhbHVlID09PSByZXN1bHQub3V0Ym91bmRGbGlnaHRzWzBdLmNhYmluQ2xhc3NcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5RGVwYXJ0dXJlQWlycG9ydChcclxuICAgIGRlcGFydHVyZUFpcnBvcnRzOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBkZXBhcnR1cmVBaXJwb3J0cy5maWx0ZXIoKHgpID0+IHguc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZD8ubGVuZ3RoID49IDEgJiYgc2VsZWN0ZWQubGVuZ3RoICE9PSBkZXBhcnR1cmVBaXJwb3J0cy5sZW5ndGgpIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAgICh4KSA9PiB4LnZhbHVlID09PSByZXN1bHQub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnRcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5QXJyaXZhbEFpcnBvcnQoXHJcbiAgICBhcnJpdmFsQWlycG9ydHM6IFNlbGVjdEZpbHRlcltdLFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IGFycml2YWxBaXJwb3J0cy5maWx0ZXIoKHgpID0+IHguc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZD8ubGVuZ3RoID49IDEgJiYgc2VsZWN0ZWQubGVuZ3RoICE9PSBhcnJpdmFsQWlycG9ydHMubGVuZ3RoKSB7XHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25BaXJwb3J0ID1cclxuICAgICAgICAgIHJlc3VsdC5vdXRib3VuZEZsaWdodHNbcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAuZGVzdGluYXRpb25BaXJwb3J0O1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RlZC5maW5kKCh4KSA9PiB4LnZhbHVlID09PSBkZXN0aW5hdGlvbkFpcnBvcnQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGZpbHRlckJ5RGVwYXJ0dXJlUmV0dXJuQWlycG9ydChcclxuICAgIGRlcGFydHVyZUFpcnBvcnRzOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBkZXBhcnR1cmVBaXJwb3J0cy5maWx0ZXIoKHgpID0+IHguc2VsZWN0ZWQpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZD8ubGVuZ3RoID49IDEgJiYgc2VsZWN0ZWQubGVuZ3RoICE9PSBkZXBhcnR1cmVBaXJwb3J0cy5sZW5ndGgpIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdC5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHgudmFsdWUgPT09IHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJCeUFycml2YWxSZXR1cm5BaXJwb3J0KFxyXG4gICAgYXJyaXZhbEFpcnBvcnRzOiBTZWxlY3RGaWx0ZXJbXSxcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBhcnJpdmFsQWlycG9ydHMuZmlsdGVyKCh4KSA9PiB4LnNlbGVjdGVkKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQ/Lmxlbmd0aCA+PSAxICYmIHNlbGVjdGVkLmxlbmd0aCAhPT0gYXJyaXZhbEFpcnBvcnRzLmxlbmd0aCkge1xyXG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzdWx0LmluYm91bmRGbGlnaHRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25BaXJwb3J0ID1cclxuICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1tyZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgLmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQuZmluZCgoeCkgPT4geC52YWx1ZSA9PT0gZGVzdGluYXRpb25BaXJwb3J0KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBnZXRNaW5EdXJhdGlvbihyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSwgaXNSZXR1cm4gPSBmYWxzZSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluID0gMDtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgZHVyID0gMDtcclxuXHJcbiAgICAgIGlmICghaXNSZXR1cm4pIHtcclxuICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKG91dDogRmxpZ2h0Sm91cm5leSkgPT4ge1xyXG4gICAgICAgICAgZHVyICs9IG91dC50b3RhbER1cmF0aW9uO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzPy5sZW5ndGggJiYgaXNSZXR1cm4pIHtcclxuICAgICAgICByZXN1bHQuaW5ib3VuZEZsaWdodHMuZm9yRWFjaCgoaW5iOiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICBkdXIgKz0gaW5iLnRvdGFsRHVyYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghbWluIHx8IGR1ciA8IG1pbikge1xyXG4gICAgICAgIG1pbiA9IGR1cjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1pbjtcclxuICB9XHJcblxyXG4gIGdldE1heER1cmF0aW9uKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdLCBpc1JldHVybiA9IGZhbHNlKTogbnVtYmVyIHtcclxuICAgIGxldCBtYXggPSAwO1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBkdXIgPSAwO1xyXG4gICAgICBpZiAoIWlzUmV0dXJuKSB7XHJcbiAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5mb3JFYWNoKChvdXQ6IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIGR1ciArPSBvdXQudG90YWxEdXJhdGlvbjtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoICYmIGlzUmV0dXJuKSB7XHJcbiAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLmZvckVhY2goKGluYjogRmxpZ2h0Sm91cm5leSkgPT4ge1xyXG4gICAgICAgICAgZHVyICs9IGluYi50b3RhbER1cmF0aW9uO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIW1heCB8fCBkdXIgPiBtYXgpIHtcclxuICAgICAgICBtYXggPSBkdXI7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtYXg7XHJcbiAgfVxyXG5cclxuICBnZXRNaW5BcnJpdmFsVGltZShyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluOiBudW1iZXI7XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IG1pbkRlcFRpbWUgPSBOdW1iZXIoXHJcbiAgICAgICAgbW9tZW50KFxyXG4gICAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgIC5kYXRlVGltZUFycml2aW5nXHJcbiAgICAgICAgKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICApO1xyXG4gICAgICBtaW5EZXBUaW1lID0gTWF0aC5mbG9vcihtaW5EZXBUaW1lIC8gMTAwKSAqIDEwMDtcclxuICAgICAgaWYgKCFtaW4gfHwgbWluRGVwVGltZSA8IG1pbikge1xyXG4gICAgICAgIG1pbiA9IG1pbkRlcFRpbWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtaW47XHJcbiAgfVxyXG5cclxuICBnZXRNaW5SZXR1cm5BcnJpdmFsVGltZShyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluOiBudW1iZXI7XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IG1pbkRlcFRpbWUgPSBOdW1iZXIoXHJcbiAgICAgICAgICBtb21lbnQoXHJcbiAgICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1tyZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWluRGVwVGltZSA9IE1hdGguZmxvb3IobWluRGVwVGltZSAvIDEwMCkgKiAxMDA7XHJcbiAgICAgICAgaWYgKCFtaW4gfHwgbWluRGVwVGltZSA8IG1pbikge1xyXG4gICAgICAgICAgbWluID0gbWluRGVwVGltZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtaW47XHJcbiAgfVxyXG5cclxuICBnZXRNYXhSZXR1cm5BcnJpdmFsVGltZShyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4OiBudW1iZXI7XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cyAmJiByZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IG1heERlcFRpbWUgPSBOdW1iZXIoXHJcbiAgICAgICAgICBtb21lbnQoXHJcbiAgICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1tyZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAuZGF0ZVRpbWVBcnJpdmluZ1xyXG4gICAgICAgICAgKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWF4RGVwVGltZSA9IE1hdGguY2VpbChtYXhEZXBUaW1lIC8gMTAwKSAqIDEwMDtcclxuICAgICAgICBpZiAoIW1heCB8fCBtYXhEZXBUaW1lID4gbWF4KSB7XHJcbiAgICAgICAgICBtYXggPSBtYXhEZXBUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcblxyXG4gIGdldE1heEFycml2YWxUaW1lKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtYXg6IG51bWJlcjtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgbWF4RGVwVGltZSA9IE51bWJlcihcclxuICAgICAgICBtb21lbnQoXHJcbiAgICAgICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzW3Jlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgLmRhdGVUaW1lQXJyaXZpbmdcclxuICAgICAgICApLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBtYXhEZXBUaW1lID0gTWF0aC5jZWlsKG1heERlcFRpbWUgLyAxMDApICogMTAwO1xyXG4gICAgICBpZiAoIW1heCB8fCBtYXhEZXBUaW1lID4gbWF4KSB7XHJcbiAgICAgICAgbWF4ID0gbWF4RGVwVGltZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluRGVwYXJ0dXJlVGltZShyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluOiBudW1iZXI7XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IG1pbkRlcFRpbWUgPSBOdW1iZXIoXHJcbiAgICAgICAgbW9tZW50KHJlc3VsdC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICk7XHJcbiAgICAgIG1pbkRlcFRpbWUgPSBNYXRoLmZsb29yKG1pbkRlcFRpbWUgLyAxMDApICogMTAwO1xyXG4gICAgICBpZiAoIW1pbiB8fCBtaW5EZXBUaW1lIDwgbWluKSB7XHJcbiAgICAgICAgbWluID0gbWluRGVwVGltZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1pbjtcclxuICB9XHJcblxyXG4gIGdldE1pblJldHVybkRlcGFydHVyZVRpbWUocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbjogbnVtYmVyO1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQuaW5ib3VuZEZsaWdodHMgJiYgcmVzdWx0LmluYm91bmRGbGlnaHRzWzBdKSB7XHJcbiAgICAgICAgbGV0IG1pbkRlcFRpbWUgPSBOdW1iZXIoXHJcbiAgICAgICAgICBtb21lbnQocmVzdWx0LmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWluRGVwVGltZSA9IE1hdGguZmxvb3IobWluRGVwVGltZSAvIDEwMCkgKiAxMDA7XHJcbiAgICAgICAgaWYgKCFtaW4gfHwgbWluRGVwVGltZSA8IG1pbikge1xyXG4gICAgICAgICAgbWluID0gbWluRGVwVGltZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtaW47XHJcbiAgfVxyXG5cclxuICBnZXRNYXhSZXR1cm5EZXBhcnR1cmVUaW1lKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtYXg6IG51bWJlcjtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzICYmIHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1swXSkge1xyXG4gICAgICAgIGxldCBtYXhEZXBUaW1lID0gTnVtYmVyKFxyXG4gICAgICAgICAgbW9tZW50KHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZykuZm9ybWF0KCdISG1tJylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBtYXhEZXBUaW1lID0gTWF0aC5jZWlsKG1heERlcFRpbWUgLyAxMDApICogMTAwO1xyXG5cclxuICAgICAgICBpZiAoIW1heCB8fCBtYXhEZXBUaW1lID4gbWF4KSB7XHJcbiAgICAgICAgICBtYXggPSBtYXhEZXBUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcblxyXG4gIGdldE1heERlcGFydHVyZVRpbWUocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1heDogbnVtYmVyO1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBtYXhEZXBUaW1lID0gTnVtYmVyKFxyXG4gICAgICAgIG1vbWVudChyZXN1bHQub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbWF4RGVwVGltZSA9IE1hdGguY2VpbChtYXhEZXBUaW1lIC8gMTAwKSAqIDEwMDtcclxuXHJcbiAgICAgIGlmICghbWF4IHx8IG1heERlcFRpbWUgPiBtYXgpIHtcclxuICAgICAgICBtYXggPSBtYXhEZXBUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuXHJcbiAgZ2V0QmFnZ2FnZShyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IFNlbGVjdEZpbHRlcltdIHtcclxuICAgIGNvbnN0IGJhZ2dhZ2U6IGFueSA9IHt9O1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkQWRkaXRpb25hbCA9IEpTT04ucGFyc2UocmVzdWx0LmFkZGl0aW9uYWwpO1xyXG5cclxuICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG5cclxuICAgICAgICBpZiAocGFyc2VkQWRkaXRpb25hbCAmJiBwYXJzZWRBZGRpdGlvbmFsLm91dGJvdW5kRmxpZ2h0cykge1xyXG4gICAgICAgICAgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZmxpZ2h0LmJhZ2dhZ2UuZm9yRWFjaCgoYmFnOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYmFnLmFsbG93YW5jZSAmJiBiYWcuYWxsb3dhbmNlID4gdG90YWwpIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsID0gYmFnLmFsbG93YW5jZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSkge1xyXG4gICAgICAgICAgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlLmZvckVhY2goKGJhZ2dhZ2VBbGxvdzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkgJiZcclxuICAgICAgICAgICAgICBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KSA+IHRvdGFsXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRvdGFsID0gTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYmFnZ2FnZVt0b3RhbF0gPSB7XHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICB2YWx1ZTogdG90YWwsXHJcbiAgICAgICAgICBkaXNwbGF5OiBgJHt0b3RhbH0gYmFnJHt0b3RhbCAhPT0gMSA/ICdzJyA6ICcnfWBcclxuICAgICAgICB9O1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciBwYXJzaW5nIGFkZGl0aW9uYWwgZmxpZ2h0IGRhdGE6ICR7ZXJyb3J9ICsrK2ApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhiYWdnYWdlKTtcclxuICB9XHJcblxyXG4gIGdldE1pblByaWNlKHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW5QcmljZTogbnVtYmVyO1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmICghbWluUHJpY2UgfHwgcmVzdWx0LnRvdGFsLnByaWNlIDwgbWluUHJpY2UpIHtcclxuICAgICAgICBtaW5QcmljZSA9IHJlc3VsdC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1pblByaWNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4UHJpY2UocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1heFByaWNlOiBhbnk7XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKCFtYXhQcmljZSB8fCByZXN1bHQudG90YWwucHJpY2UgPiBtYXhQcmljZSkge1xyXG4gICAgICAgIG1heFByaWNlID0gcmVzdWx0LnRvdGFsLnByaWNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbWF4UHJpY2U7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdG9wcyhyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IFNlbGVjdEZpbHRlcltdIHtcclxuICAgIGNvbnN0IGFsbFN0b3BzOiBhbnkgPSB7fTtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCB0b3RhbFN0b3BzID0gcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxOyAvLyBtaWdodCBoYXZlIHRvIHJlY2FsY3VsYXRlIHRoaXNcclxuICAgICAgYWxsU3RvcHNbdG90YWxTdG9wc10gPSB7XHJcbiAgICAgICAgdmFsdWU6IHRvdGFsU3RvcHMsXHJcbiAgICAgICAgZGlzcGxheTogYCR7dG90YWxTdG9wc30gc3RvcGAgKyAodG90YWxTdG9wcyAhPT0gMSA/ICdzJyA6ICcnKSxcclxuICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGFsbFN0b3BzKTtcclxuICB9XHJcblxyXG4gIGdldEFsbENsYXNzZXMocmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBTZWxlY3RGaWx0ZXJbXSB7XHJcbiAgICBjb25zdCBhbGxDbGFzc2VzOiBhbnkgPSBbXTtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xyXG4gICAgICByZXN1bHQub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKG91dEZsaWdodDogRmxpZ2h0Sm91cm5leSkgPT4ge1xyXG4gICAgICAgIGFsbENsYXNzZXNbb3V0RmxpZ2h0LmNhYmluQ2xhc3NdID0ge1xyXG4gICAgICAgICAgdmFsdWU6IG91dEZsaWdodC5jYWJpbkNsYXNzLFxyXG4gICAgICAgICAgZGlzcGxheTogb3V0RmxpZ2h0LmNhYmluQ2xhc3MsXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9IGFzIFNlbGVjdEZpbHRlcjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmluYm91bmRGbGlnaHRzKSB7XHJcbiAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLmZvckVhY2goKGluRmxpZ2h0OiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICBhbGxDbGFzc2VzW2luRmxpZ2h0LmNhYmluQ2xhc3NdID0ge1xyXG4gICAgICAgICAgICB2YWx1ZTogaW5GbGlnaHQuY2FiaW5DbGFzcyxcclxuICAgICAgICAgICAgZGlzcGxheTogaW5GbGlnaHQuY2FiaW5DbGFzcyxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICB9IGFzIFNlbGVjdEZpbHRlcjtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoYWxsQ2xhc3Nlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBjcmVhdGUgc2VsZWN0IGZpbHRlcnMgZm9yIGFsbCB1bmlxdWUgZGVwYXJ0dXJlIGFpcnBvcnRzIHJldHVybmVkIGluIHRoZSBzZWFyY2hcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIHRoZSBmbGlnaHQgcmVzdWx0c1xyXG4gICAqL1xyXG4gIGdldEFsbERlcGFydHVyZUFpcnBvcnRzKFxyXG4gICAgcmVzdWx0czogRmxpZ2h0SXRpbmVyYXJ5W10sXHJcbiAgICBpbmJvdW5kID0gZmFsc2VcclxuICApOiBTZWxlY3RGaWx0ZXJbXSB7XHJcbiAgICBjb25zdCBhbGxBaXJwb3J0czogYW55ID0ge307XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5vdXRib3VuZEZsaWdodHMubGVuZ3RoICYmICFpbmJvdW5kKSB7XHJcbiAgICAgICAgYWxsQWlycG9ydHNbcmVzdWx0Lm91dGJvdW5kRmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0XSA9IHtcclxuICAgICAgICAgIHZhbHVlOiByZXN1bHQub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgICBkaXNwbGF5OiByZXN1bHQub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnROYW1lLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoICYmIGluYm91bmQpIHtcclxuICAgICAgICBhbGxBaXJwb3J0c1tyZXN1bHQuaW5ib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydF0gPSB7XHJcbiAgICAgICAgICB2YWx1ZTogcmVzdWx0LmluYm91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgICBkaXNwbGF5OiByZXN1bHQuaW5ib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydE5hbWUsXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhhbGxBaXJwb3J0cyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBjcmVhdGUgc2VsZWN0IGZpbHRlcnMgZm9yIGFsbCB1bmlxdWUgZGVwYXJ0dXJlIGFpcnBvcnRzIHJldHVybmVkIGluIHRoZSBzZWFyY2hcclxuICAgKiBAcGFyYW0gcmVzdWx0cyAtIHRoZSBmbGlnaHQgcmVzdWx0c1xyXG4gICAqL1xyXG4gIGdldEFsbEFycml2YWxBaXJwb3J0cyhcclxuICAgIHJlc3VsdHM6IEZsaWdodEl0aW5lcmFyeVtdLFxyXG4gICAgaW5ib3VuZCA9IGZhbHNlXHJcbiAgKTogU2VsZWN0RmlsdGVyW10ge1xyXG4gICAgY29uc3QgYWxsQWlycG9ydHM6IGFueSA9IHt9O1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAmJiAhaW5ib3VuZCkge1xyXG4gICAgICAgIGFsbEFpcnBvcnRzW1xyXG4gICAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgICBdLmRlc3RpbmF0aW9uQWlycG9ydFxyXG4gICAgICAgIF0gPSB7XHJcbiAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgcmVzdWx0Lm91dGJvdW5kRmxpZ2h0c1tyZXN1bHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgICAgLmRlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIHJlc3VsdC5vdXRib3VuZEZsaWdodHNbcmVzdWx0Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgICAgIC5kZXN0aW5hdGlvbkFpcnBvcnROYW1lLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoICYmIGluYm91bmQpIHtcclxuICAgICAgICBhbGxBaXJwb3J0c1tcclxuICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgcmVzdWx0LmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgIF0uZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgICAgXSA9IHtcclxuICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICByZXN1bHQuaW5ib3VuZEZsaWdodHNbcmVzdWx0LmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgICAgLmRlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0c1tyZXN1bHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cclxuICAgICAgICAgICAgICAuZGVzdGluYXRpb25BaXJwb3J0TmFtZSxcclxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGFsbEFpcnBvcnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGNyZWF0ZSBzZWxlY3QgZmlsdGVycyBmb3IgYWxsIHVuaXF1ZSBhaXJsaW5lcyByZXR1cm5lZCBpbiB0aGUgc2VhcmNoXHJcbiAgICogQHBhcmFtIHJlc3VsdHMgLSB0aGUgZmxpZ2h0IHJlc3VsdHNcclxuICAgKi9cclxuICBnZXRBbGxBaXJsaW5lcyhyZXN1bHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IFNlbGVjdEZpbHRlcltdIHtcclxuICAgIGNvbnN0IGFsbEFpcmxpbmVzOiBhbnkgPSB7fTtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJlc3VsdC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgob3V0RmxpZ2h0OiBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgYWxsQWlybGluZXNbb3V0RmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXJdID0ge1xyXG4gICAgICAgICAgdmFsdWU6IG91dEZsaWdodC5vcGVyYXRpbmdDYXJyaWVyLFxyXG4gICAgICAgICAgZGlzcGxheTogb3V0RmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXJOYW1lLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfSBhcyBTZWxlY3RGaWx0ZXI7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHJlc3VsdC5pbmJvdW5kRmxpZ2h0cykge1xyXG4gICAgICAgIHJlc3VsdC5pbmJvdW5kRmxpZ2h0cy5mb3JFYWNoKChpbkZsaWdodDogRmxpZ2h0Sm91cm5leSkgPT4ge1xyXG4gICAgICAgICAgYWxsQWlybGluZXNbaW5GbGlnaHQub3BlcmF0aW5nQ2Fycmllcl0gPSB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBpbkZsaWdodC5vcGVyYXRpbmdDYXJyaWVyLFxyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbkZsaWdodC5vcGVyYXRpbmdDYXJyaWVyTmFtZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICB9IGFzIFNlbGVjdEZpbHRlcjtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoYWxsQWlybGluZXMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEV1cm9zdGFyKFxyXG4gICAgc2VsZWN0ZWRFdXJvc3RhcjogRXVyb3N0YXJJdGVtLFxyXG4gICAgZmFyZTogRXVyb3N0YXJGYXJlLFxyXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXHJcbiAgKSB7XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUub25lV2F5ICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICBzZWxlY3RlZEV1cm9zdGFyLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0czogW3RoaXMubWFrZVNjaGVtYUZsaWdodHMoZmFyZS5mYXJlLCAnb3V0Ym91bmQnLCAwKV0sXHJcbiAgICAgICAgICBpbmJvdW5kRmxpZ2h0czogW10sXHJcbiAgICAgICAgICBqb3VybmV5VHlwZTogJ3NpbmdsZSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyID0gc2VsZWN0ZWRFdXJvc3RhcjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEV1cm9zdGFyRmFyZSA9IGZhcmU7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gc2VsZWN0ZWRFdXJvc3Rhci51aWQ7XHJcblxyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICAodGhpcy5mdWxsUmVzdWx0cyBhcyBFdXJvc3RhclJlc3VsdHNbXSkubWFwKFxyXG4gICAgICAgICAgKHJlc3VsdDogRXVyb3N0YXJSZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kID0gcmVzdWx0Lm91dGJvdW5kLmZpbHRlcihcclxuICAgICAgICAgICAgICAoaXRlbTogRXVyb3N0YXJJdGVtLCBncm91cEluZGV4KSA9PiBpbmRleCA9PT0gZ3JvdXBJbmRleFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4geyBpbmJvdW5kOiByZXN1bHQuaW5ib3VuZCwgb3V0Ym91bmQgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEV1cm9zdGFyXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kb0Jvb2tpbmcoXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHNlbGVjdGVkRXVyb3N0YXIsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAgIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEV1cm9zdGFyRmFyZS5mYXJlLFxyXG4gICAgICAgICAgICAgICdvdXRib3VuZCcsXHJcbiAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFt0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZhcmUuZmFyZSwgJ2luYm91bmQnLCAwKV0sXHJcbiAgICAgICAgICBqb3VybmV5VHlwZTogJ3JvdW5kdHJpcCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdGVkRXVyb3N0YXIuZGF0ZURlcGFydHVyZSxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBFdXJvc3Rhci5kYXRlQXJyaXZhbFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dCh0aGlzLmZ1bGxSZXN1bHRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEV1cm9zdGFyUXVvdGVSZXN1bHRBcnJheSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybjtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNbMF0gYXMgRXVyb3N0YXJRdW90ZVJlc3VsdDtcclxuICAgIGNvbnN0IGpvdXJuZXlzID0gcmVzdWx0LmpvdXJuZXlzO1xyXG4gICAgY29uc3QgY3VycmVuY3kgPSBqb3VybmV5c1swXS50b3RhbC5jdXJyZW5jeTtcclxuICAgIHJldHVybiBqb3VybmV5cy5yZWR1Y2UoXHJcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZSwgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC50b3RhbC5wcmljZTtcclxuICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcclxuICAgICAgICByZXR1cm4gY2hlYXBlc3RQcmljZTtcclxuICAgICAgfSxcclxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5IH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGRvQm9va2luZyhcclxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRXVyb3N0YXJJdGVtLFxyXG4gICAgc2NoZW1hRGV0YWlsczogYW55LFxyXG4gICAgb3V0Ym91bmREYXRlOiBzdHJpbmcsXHJcbiAgICBpbmJvdW5kRGF0ZT86IHN0cmluZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzb3VyY2VJZCwgY28yUGVySXRlbSwgY28yUGVyUGFzc2VuZ2VyLCB0b3RhbCB9ID0gc2VsZWN0ZWRGbGlnaHQ7XHJcbiAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcclxuICAgICAgYmFza2V0OiBpbnRCYXNrZXQuaWQsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICBjbzJQZXJJdGVtLFxyXG4gICAgICBjbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcclxuICAgICAgcHJpY2U6IHRvdGFsLnByaWNlLFxyXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgb3V0Ym91bmREYXRlXHJcbiAgICB9O1xyXG4gICAgaWYgKGluYm91bmREYXRlKSB7XHJcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgYm9va2luZyxcclxuICAgICAgaW50QmFza2V0LFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgIHRoaXMudHJhdmVsbGVyc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleD86IG51bWJlclxyXG4gICk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjYWJpbkNsYXNzOiBzZWxlY3RlZEZsaWdodC5jYWJpbkNsYXNzLFxyXG4gICAgICBkYXRlVGltZUFycml2aW5nOiBzZWxlY3RlZEZsaWdodC5kYXRlVGltZUFycml2aW5nLFxyXG4gICAgICBkYXRlVGltZUFycml2aW5nVVRDOiBzZWxlY3RlZEZsaWdodC5kYXRlVGltZUFycml2aW5nVVRDLFxyXG4gICAgICBkYXRlVGltZURlcGFydGluZzogc2VsZWN0ZWRGbGlnaHQuZGF0ZVRpbWVEZXBhcnRpbmcsXHJcbiAgICAgIGRhdGVUaW1lRGVwYXJ0aW5nVVRDOiBzZWxlY3RlZEZsaWdodC5kYXRlVGltZURlcGFydGluZ1VUQyxcclxuICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiBzZWxlY3RlZEZsaWdodC5kZXN0aW5hdGlvbkFpcnBvcnQsXHJcbiAgICAgIGpvdXJuZXlJbmZvOiB7XHJcbiAgICAgICAgZmxpZ2h0R3JvdXAsXHJcbiAgICAgICAgZ3JvdXBJbmRleCxcclxuICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgfSxcclxuICAgICAgbWFya2V0aW5nQ2Fycmllcjogc2VsZWN0ZWRGbGlnaHQubWFya2V0aW5nQ2FycmllcixcclxuICAgICAgbWFya2V0aW5nRmxpZ2h0TnVtYmVyOiBzZWxlY3RlZEZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXIsXHJcbiAgICAgIG9wZXJhdGluZ0NhcnJpZXI6IHNlbGVjdGVkRmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXIsXHJcbiAgICAgIG9wZXJhdGluZ0ZsaWdodE51bWJlcjogc2VsZWN0ZWRGbGlnaHQub3BlcmF0aW5nRmxpZ2h0TnVtYmVyLFxyXG4gICAgICBvcmlnaW5BaXJwb3J0OiBzZWxlY3RlZEZsaWdodC5vcmlnaW5BaXJwb3J0LFxyXG4gICAgICB0b3RhbER1cmF0aW9uOiBzZWxlY3RlZEZsaWdodC50b3RhbER1cmF0aW9uLFxyXG4gICAgICBmYXJlVHlwZTogc2VsZWN0ZWRGbGlnaHQuZmFyZUluZm8udGl0bGVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgcmV0dXJuT2JqZWN0OiBFdXJvc3Rhckdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgIHNvdXJjZTogc3RyaW5nLFxyXG4gICAgb3V0Ym91bmRGbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXHJcbiAgICBvdXRib3VuZFRvdGFsRHVyYXRpb246IG51bWJlcixcclxuICAgIGluYm91bmRGbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXHJcbiAgICBpbmJvdW5kVG90YWxEdXJhdGlvbjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcclxuICAgICAgY29uc3QgbGFzdCA9IG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnQgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gbGFzdC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yID0gZmlyc3Qub3BlcmF0aW5nQ2FycmllcjtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm9wZXJhdGluZ0NhcnJpZXJOYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3MgPSBvdXRib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ29wZXJhdGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluYm91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbikge1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5ib3VuZFRvdGFsRHVyYXRpb24gPSBpbmJvdW5kVG90YWxEdXJhdGlvbjtcclxuICAgICAgcmV0dXJuT2JqZWN0LmlubGVnc0NvdW50ID0gaW5ib3VuZEZsaWdodHMubGVuZ3RoO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzID0gaW5ib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kRmxpZ2h0TnVtYmVyID1cclxuICAgICAgICB0aGlzLmhlbHBlcnMuam9pbkZyb21BdHRyaWJ1dGU8RmxpZ2h0Sm91cm5leT4oXHJcbiAgICAgICAgICAnLScsXHJcbiAgICAgICAgICAnb3BlcmF0aW5nRmxpZ2h0TnVtYmVyJyxcclxuICAgICAgICAgIGluYm91bmRGbGlnaHRzXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybk9iamVjdC5pc1JldHVybiA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWFrZVNlc3Npb25SZXN1bHRzKFxyXG4gICAgZGF0YTogRXVyb3N0YXJRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRXVyb3N0YXJTZXNzaW9uVHlwZSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN1bHRzOiBkYXRhLFxyXG4gICAgICBncm91cERhdGE6IHRoaXMuZmxpZ2h0c1RvR3JvdXAsXHJcbiAgICAgIGdyb3VwZWQ6IHRoaXMuZ3JvdXBlZCxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNaW5GbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICBtYXRjaGluZ0JyYW5kRmxpZ2h0cy5mb3JFYWNoKChmbGlnaHQpID0+IHtcclxuICAgICAgaWYgKG1pbiA+IGZsaWdodD8udG90YWw/LnByaWNlKSB7XHJcbiAgICAgICAgbWluID0gZmxpZ2h0LnRvdGFsLnByaWNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBtaW47XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcblxyXG4gIGlzT3Zlck5pZ2h0KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb3V0d2FyZERheSA9IHRoaXMub3V0Qm91bmREYXRlLmRhdGUoKTtcclxuICAgIGNvbnN0IHJldHVybkRheSA9IHRoaXMuaW5ib3VuZERhdGUuZGF0ZSgpO1xyXG4gICAgaWYgKHJldHVybkRheSAtIG91dHdhcmREYXkgPj0gMSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1pblRvSG91ciA9IChkdXI6IG51bWJlcik6IHN0cmluZyA9PiBgJHtNYXRoLmZsb29yKGR1ciAvIDYwKX1oICR7ZHVyICUgNjB9bWA7XHJcblxyXG4gIGFzeW5jIGFkZEV1cm9zdGFySm91cm5leXNUb0Jhc2tldChcclxuICAgIGV1cm9zdGFyUXVvdGU6IEZsaWdodEl0aW5lcmFyeVxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGV1cm9zdGFyUXVvdGUudW5hdmFpbGFibGUpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3QgeyBzb3VyY2VJZCwgY28yUGVySXRlbSwgY28yUGVyUGFzc2VuZ2VyLCB0b3RhbCB9ID0gZXVyb3N0YXJRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoXHJcbiAgICAgICAgZXVyb3N0YXJRdW90ZS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgaW5ib3VuZERhdGU6IGFueSA9IGV1cm9zdGFyUXVvdGUuaW5ib3VuZEZsaWdodHMubGVuZ3RoXHJcbiAgICAgICAgPyBtb21lbnQoZXVyb3N0YXJRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBjb25zdCBzY2hlbWFEZXRhaWxzID0ge1xyXG4gICAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgLi4uZXVyb3N0YXJRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgJ291dGJvdW5kJywgMCwgc2VnbWVudEluZGV4KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmV1cm9zdGFyUXVvdGUuaW5ib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgJ2luYm91bmQnLCAwLCBzZWdtZW50SW5kZXgpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXSxcclxuICAgICAgICBqb3VybmV5VHlwZTogJ3NpbmdsZSdcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XHJcbiAgICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcclxuICAgICAgICBiYXNrZXQ6IGludEJhc2tldC5pZCxcclxuICAgICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcclxuICAgICAgICBjbzJQZXJJdGVtLFxyXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcclxuICAgICAgICBwcmljZTogdG90YWwucHJpY2UsXHJcbiAgICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXHJcbiAgICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICBvdXRib3VuZERhdGU6IG91dGJvdW5kRGF0ZS5mb3JtYXQoKVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoaW5ib3VuZERhdGUpIHtcclxuICAgICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGUuZm9ybWF0KCk7XHJcbiAgICAgICAgc2NoZW1hRGV0YWlscy5qb3VybmV5VHlwZSA9ICdyb3VuZHRyaXAnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIGJvb2tpbmcsXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpOyAvLyBUT0RPIHNob3VsZCB0aGlzIHRocm93IGFuIGVycm9yP1xyXG4gIH1cclxufVxyXG4iXX0=
|