@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
|
@@ -4,7 +4,7 @@ import moment from 'moment';
|
|
|
4
4
|
import Countries from '../data/countries.json';
|
|
5
5
|
import { BehaviorSubject, forkJoin, of } from 'rxjs';
|
|
6
6
|
import { ParkingEnterpriseSearch } from '../classes/parking-enterprise-search';
|
|
7
|
-
import { BookerType, FareType, RailClass, RailJourneyType, ServiceType, CabHireVehicleType, FlightCabinClass } from '../types/graphql.types';
|
|
7
|
+
import { BookerType, FareType, RailClass, RailJourneyType, ServiceType, CabHireVehicleType, FlightCabinClass, IrlJourneyType } from '../types/graphql.types';
|
|
8
8
|
import { LoungesEnterpriseSearch } from '../classes/lounges-enterprise-search';
|
|
9
9
|
import { HotelEnterpriseSearch } from '../classes/hotel-enterprise-search';
|
|
10
10
|
import { CarhireEnterpriseSearch } from '../classes/carhire-enterprise-search';
|
|
@@ -15,7 +15,7 @@ import { TravellerObject } from '../models/traveller.object';
|
|
|
15
15
|
import { LocationTypes } from '../types/types';
|
|
16
16
|
import { RegExps } from '../models/regexp.model';
|
|
17
17
|
import { TaxiFormMode } from '../interfaces/Icabhire-enterprise-search';
|
|
18
|
-
import { IRLEnterpriseSearch } from '../classes/irl-enterprise-search';
|
|
18
|
+
import { IRLEnterpriseSearch, IrlSearchCriteria } from '../classes/irl-enterprise-search';
|
|
19
19
|
import { EurostarEnterpriseSearch } from '../classes/eurostar-enterprise-search';
|
|
20
20
|
import EuroStations from '../data/euro-stations.json';
|
|
21
21
|
import _ from 'lodash';
|
|
@@ -28,7 +28,7 @@ export var TravellerSearchTypes;
|
|
|
28
28
|
TravellerSearchTypes["employeeNumber"] = "employeeNumber";
|
|
29
29
|
})(TravellerSearchTypes || (TravellerSearchTypes = {}));
|
|
30
30
|
export class BaseEnterpriseSearchService {
|
|
31
|
-
constructor(searchAirportsFetcher, searchAirlinesFetcher, storageService, userService, router, helpers, hotelAvalibilityService, citiesFetcher, confermaCitiesFetcher, postcodeFetcher, railStationFetcher, saveUserAddressUpdater, userAddressesFetcher, basketService, getUserCompanyOfficesFetcher, searchHotelChainsFetcher, baseValidateIsPostcodeValidTester, depotFetcher, confermaOfficeNamesFetcher, baseDeleteUserAddressUpdater, baseDeleteRecentSearchUpdater, baseSaveRecentSearchUpdater, getUserCurrentCarbonAllowanceFetcher, environment, loungeFetcher, parkingFetcher, httpCallService, flightFetcher, hotelFetcher, carhireFetcher, carHireAvailabilityDetailFetcher, cabhireFetcher, railFetcher, irlFetcher, getRailStationFetcher, baseWebTokenService, riskAlertsFetcher, quicklistFetcher, getUserRecentSearchesFetcher, getRailCardsFetcher, eurostarFetcher, searchUsersCanBookForFetcher) {
|
|
31
|
+
constructor(searchAirportsFetcher, searchAirlinesFetcher, storageService, userService, router, helpers, hotelAvalibilityService, citiesFetcher, confermaCitiesFetcher, postcodeFetcher, railStationFetcher, saveUserAddressUpdater, userAddressesFetcher, basketService, getUserCompanyOfficesFetcher, searchHotelChainsFetcher, baseValidateIsPostcodeValidTester, depotFetcher, confermaOfficeNamesFetcher, confermaOfficeFetcher, baseDeleteUserAddressUpdater, baseDeleteRecentSearchUpdater, baseSaveRecentSearchUpdater, getUserCurrentCarbonAllowanceFetcher, environment, loungeFetcher, parkingFetcher, httpCallService, flightFetcher, hotelFetcher, carhireFetcher, carHireAvailabilityDetailFetcher, cabhireFetcher, railFetcher, irlFetcher, getRailStationFetcher, baseWebTokenService, riskAlertsFetcher, quicklistFetcher, getUserRecentSearchesFetcher, getRailCardsFetcher, eurostarFetcher, searchUsersCanBookForFetcher, searchIrlStationsFetcher) {
|
|
32
32
|
this.searchAirportsFetcher = searchAirportsFetcher;
|
|
33
33
|
this.searchAirlinesFetcher = searchAirlinesFetcher;
|
|
34
34
|
this.storageService = storageService;
|
|
@@ -48,6 +48,7 @@ export class BaseEnterpriseSearchService {
|
|
|
48
48
|
this.baseValidateIsPostcodeValidTester = baseValidateIsPostcodeValidTester;
|
|
49
49
|
this.depotFetcher = depotFetcher;
|
|
50
50
|
this.confermaOfficeNamesFetcher = confermaOfficeNamesFetcher;
|
|
51
|
+
this.confermaOfficeFetcher = confermaOfficeFetcher;
|
|
51
52
|
this.baseDeleteUserAddressUpdater = baseDeleteUserAddressUpdater;
|
|
52
53
|
this.baseDeleteRecentSearchUpdater = baseDeleteRecentSearchUpdater;
|
|
53
54
|
this.baseSaveRecentSearchUpdater = baseSaveRecentSearchUpdater;
|
|
@@ -58,6 +59,7 @@ export class BaseEnterpriseSearchService {
|
|
|
58
59
|
this.getUserRecentSearchesFetcher = getUserRecentSearchesFetcher;
|
|
59
60
|
this.getRailCardsFetcher = getRailCardsFetcher;
|
|
60
61
|
this.searchUsersCanBookForFetcher = searchUsersCanBookForFetcher;
|
|
62
|
+
this.searchIrlStationsFetcher = searchIrlStationsFetcher;
|
|
61
63
|
this.traveller_error = false;
|
|
62
64
|
this.travellerInformation = new BehaviorSubject([]);
|
|
63
65
|
this.errors = new BehaviorSubject([]);
|
|
@@ -82,9 +84,7 @@ export class BaseEnterpriseSearchService {
|
|
|
82
84
|
[ServiceType.Hotel]: new HotelEnterpriseSearch(hotelFetcher, helpers, userService, environment, hotelAvalibilityService, basketService, storageService, this, httpCallService, quicklistFetcher, getRailStationFetcher),
|
|
83
85
|
[ServiceType.Car]: new CarhireEnterpriseSearch(carhireFetcher, carHireAvailabilityDetailFetcher, helpers, basketService, storageService, this),
|
|
84
86
|
[ServiceType.Cab]: new CabHireEnterpriseSearch(cabhireFetcher, helpers, storageService, this, basketService),
|
|
85
|
-
[ServiceType.InternationalRail]: new IRLEnterpriseSearch(irlFetcher,
|
|
86
|
-
// getRailStationFetcher,
|
|
87
|
-
helpers, basketService, storageService, this),
|
|
87
|
+
[ServiceType.InternationalRail]: new IRLEnterpriseSearch(irlFetcher, searchIrlStationsFetcher, helpers, basketService, storageService, this),
|
|
88
88
|
[ServiceType.FastTrack]: null,
|
|
89
89
|
[ServiceType.Coach]: null,
|
|
90
90
|
[ServiceType.Rail]: new RailEnterpriseSearch(railFetcher, getRailStationFetcher, helpers, basketService, storageService, this),
|
|
@@ -340,6 +340,23 @@ export class BaseEnterpriseSearchService {
|
|
|
340
340
|
getSelectedPlaceById(placeId) {
|
|
341
341
|
return this.selectedPlaces.find((place) => place.place_id === placeId);
|
|
342
342
|
}
|
|
343
|
+
getConfirmaOffices(term) {
|
|
344
|
+
if ((term === null || term === void 0 ? void 0 : term.length) > 2) {
|
|
345
|
+
const obs = this.confermaOfficeNamesFetcher.fetchList();
|
|
346
|
+
const func = (results) => {
|
|
347
|
+
const data = results.results.map((result) => {
|
|
348
|
+
return {
|
|
349
|
+
name: result.name,
|
|
350
|
+
type: LocationTypes.Office,
|
|
351
|
+
id: result.id
|
|
352
|
+
};
|
|
353
|
+
});
|
|
354
|
+
return data;
|
|
355
|
+
};
|
|
356
|
+
return obs.pipe(take(1), map(func));
|
|
357
|
+
}
|
|
358
|
+
return of([]);
|
|
359
|
+
}
|
|
343
360
|
/*
|
|
344
361
|
* @description - get the list of Office locations based on search term given
|
|
345
362
|
* @todo - fill this out so that it actually performs a http call
|
|
@@ -387,6 +404,31 @@ export class BaseEnterpriseSearchService {
|
|
|
387
404
|
return of([]);
|
|
388
405
|
}
|
|
389
406
|
}
|
|
407
|
+
searchIrlStationsLocations(term, isLoading) {
|
|
408
|
+
if (term.length > 2) {
|
|
409
|
+
isLoading === null || isLoading === void 0 ? void 0 : isLoading.next(true);
|
|
410
|
+
return this.searchIrlStationsFetcher
|
|
411
|
+
.fetchList({
|
|
412
|
+
query: term
|
|
413
|
+
})
|
|
414
|
+
.pipe(take(1), map((results) => {
|
|
415
|
+
if (isLoading) {
|
|
416
|
+
isLoading.next(false);
|
|
417
|
+
}
|
|
418
|
+
return results
|
|
419
|
+
.map((result) => {
|
|
420
|
+
return {
|
|
421
|
+
type: LocationTypes.TrainStation,
|
|
422
|
+
name: `${result.name} (${result.supplier})`,
|
|
423
|
+
railstation: result
|
|
424
|
+
};
|
|
425
|
+
});
|
|
426
|
+
}));
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
return of([]);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
390
432
|
/**
|
|
391
433
|
* @description - get hotel locations, these should be city, office, airport, railstation
|
|
392
434
|
* @todo - fill this out for the other location types, may need to mergeMap them or some other rxjs magic
|
|
@@ -405,7 +447,7 @@ export class BaseEnterpriseSearchService {
|
|
|
405
447
|
this.getAirportLocations(term, countryCode, isLoading),
|
|
406
448
|
this.getCityLocations(term, countryCode, isLoading),
|
|
407
449
|
this.getStationLocations(term, isLoading),
|
|
408
|
-
this.
|
|
450
|
+
this.getConfirmaOffices(term)
|
|
409
451
|
]).pipe(map((results) => {
|
|
410
452
|
if (isLoading === null || isLoading === void 0 ? void 0 : isLoading.value) {
|
|
411
453
|
isLoading.next(false);
|
|
@@ -836,6 +878,18 @@ export class BaseEnterpriseSearchService {
|
|
|
836
878
|
}));
|
|
837
879
|
isLoading === null || isLoading === void 0 ? void 0 : isLoading.next(false);
|
|
838
880
|
}
|
|
881
|
+
getOffice(officeId) {
|
|
882
|
+
if (officeId) {
|
|
883
|
+
return this.confermaOfficeFetcher.fetchOne({ officeId }).pipe(take(1), map((results) => {
|
|
884
|
+
if (results) {
|
|
885
|
+
return results.results;
|
|
886
|
+
}
|
|
887
|
+
}));
|
|
888
|
+
}
|
|
889
|
+
else {
|
|
890
|
+
return of();
|
|
891
|
+
}
|
|
892
|
+
}
|
|
839
893
|
getRailCards() {
|
|
840
894
|
return this.getRailCardsFetcher.fetchList().pipe(take(1), map((results) => {
|
|
841
895
|
if (results) {
|
|
@@ -1121,23 +1175,24 @@ export class BaseEnterpriseSearchService {
|
|
|
1121
1175
|
}
|
|
1122
1176
|
/*
|
|
1123
1177
|
* Creates a Rail search query with supplied params, auto fills with defaults if fields are empty.
|
|
1124
|
-
* @param {any} ...args Example - searchService.
|
|
1178
|
+
* @param {any} ...args Example - searchService.makeIrlQuery(data.query, { override: "property" })
|
|
1125
1179
|
* @return {QuerySearchRailArgs} Returns QuerySearchRailArgs type
|
|
1126
1180
|
*/
|
|
1127
1181
|
makeIrlQuery(...args) {
|
|
1128
1182
|
const time = this.helpers.momentRoundMinutes(moment(), 30);
|
|
1129
1183
|
const defaultVal = {
|
|
1184
|
+
returnCriteria: IrlSearchCriteria.Depart,
|
|
1185
|
+
outboundCriteria: IrlSearchCriteria.Depart,
|
|
1130
1186
|
supplier: null,
|
|
1131
1187
|
countryCode: '',
|
|
1132
|
-
|
|
1188
|
+
journeyType: IrlJourneyType.ReturnJourney,
|
|
1133
1189
|
class: null,
|
|
1134
1190
|
outboundDepartureDateTime: time,
|
|
1135
1191
|
departureLocationId: null,
|
|
1136
1192
|
arrivalLocationId: null,
|
|
1137
1193
|
adults: 0,
|
|
1138
1194
|
children: 0,
|
|
1139
|
-
returnDepartureDateTime: time
|
|
1140
|
-
journeyType: null
|
|
1195
|
+
returnDepartureDateTime: time
|
|
1141
1196
|
};
|
|
1142
1197
|
return this.helpers.sanatizeReturns(defaultVal, Object.assign({}, ...args), ['returnDepartureDateTime', 'outboundDepartureDateTime']);
|
|
1143
1198
|
}
|
|
@@ -1278,4 +1333,4 @@ export class BaseEnterpriseSearchService {
|
|
|
1278
1333
|
}
|
|
1279
1334
|
}
|
|
1280
1335
|
BaseEnterpriseSearchService.SESSION_TRAVELLER = 'search_travellers';
|
|
1281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFLL0UsT0FBTyxFQUlMLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULGVBQWUsRUFFZixXQUFXLEVBR1gsa0JBQWtCLEVBVWxCLGdCQUFnQixFQUtqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNYLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFTeEUsT0FBTyxFQU1MLGFBQWEsRUF1QmQsTUFBTSxnQkFBZ0IsQ0FBQztBQXlD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dCI6WyJpbXBvcnQgeyBtYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IENvdW50cmllcyBmcm9tICcuLi9kYXRhL2NvdW50cmllcy5qc29uJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFya2luZ0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL3BhcmtpbmctZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFNlYXJjaE9iamVjdCxcclxuICBTZWFyY2hPYmplY3RzXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWFyY2gtb2JqZWN0cy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3MsXHJcbiAgQWlycG9ydCxcclxuICBCYXNrZXRJdGVtLFxyXG4gIEJvb2tlclR5cGUsXHJcbiAgRmFyZVR5cGUsXHJcbiAgUmFpbENsYXNzLFxyXG4gIFJhaWxKb3VybmV5VHlwZSxcclxuICBTZWFyY2hBaXJwb3J0cyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBTYXZlVXNlckFkZHJlc3NNdXRhdGlvblZhcmlhYmxlcyxcclxuICBDYXJIaXJlRGVwb3QsXHJcbiAgQ2FiSGlyZVZlaGljbGVUeXBlLFxyXG4gIENvbmZlcm1hT2ZmaWNlTmFtZXMsXHJcbiAgQ2FyYm9uQWxsb3dhbmNlLFxyXG4gIFJpc2tBbGVydCxcclxuICBSaXNrTGV2ZWwsXHJcbiAgUmFpbFN0YXRpb24sXHJcbiAgR2V0Umlza0FsZXJ0c1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaEFpcmxpbmVzLFxyXG4gIEFpcmxpbmVSZXN1bHQsXHJcbiAgSG90ZWxJdGluZXJhcnksXHJcbiAgRmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcixcclxuICBTZWFyY2hVc2VyQ2FuQm9va0ZvclF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaCxcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXNcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHsgTG91bmdlc0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2xvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBIb3RlbEVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2hvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEVudGVycHJpc2VTZWFyY2gsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxFbnRlcnByaXNlU2VhcmNoLFxyXG4gIFJhaWxTZWFyY2hDcml0ZXJpYVxyXG59IGZyb20gJy4uL2NsYXNzZXMvcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4uL2NsYXNzZXMvaGVscGVycyc7XHJcbmltcG9ydCB7IEJhc2VIb3RlbEF2YWxpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vaG90ZWwtYXZhbGxpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb21lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXIsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1wb3N0Y29kZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc0Zvcm0sXHJcbiAgQWlycG9ydFNlYXJjaFJlc3VsdHMsXHJcbiAgQ2FySGlyZURlcG90UmVzdWx0QXJyYXksXHJcbiAgQ291bnRyeUNvZGUsXHJcbiAgTG9jYXRpb25EZXRhaWxzLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgUmFpbEFpcnBvcnQsXHJcbiAgUm91dGVyLFxyXG4gIFNlYXJjaENpdGllc1Jlc3VsdCxcclxuICBTZWFyY2hDaXRpZXNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hQb3N0Y29kZXNSZXN1bHQsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0LFxyXG4gIFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5LFxyXG4gIFRlcm1pbmFsc1R5cGUsXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0LFxyXG4gIFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgU2VhcmNoUmlza0FsZXJ0c1Jlc3VsdCxcclxuICBBaXJsaW5lc1NlYXJjaFJlc3VsdCxcclxuICBPQlRBaXJsaW5lc0RldGFpbHMsXHJcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0LFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBIb3RlbFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXIsXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtcmFpbC1zdGF0aW9ucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlTG91bmdlUXVvdGVGZXRjaGVyLFxyXG4gIExvdW5nZVF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9sb3VuZ2UtcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVBhcmtpbmdRdW90ZUZldGNoZXIsXHJcbiAgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSG90ZWxRdW90ZUZldGNoZXIsXHJcbiAgSG90ZWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhcmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FySGlyZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlUmFpbFF1b3RlRmV0Y2hlcixcclxuICBSYWlsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3JhaWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQgeyBSZWdFeHBzIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2V4cC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgU2VhcmNoUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcnBvcnRzLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJsaW5lc0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlybGluZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcmxpbmVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIFVzZXJTZXJ2aWNlc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtY2l0aWVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hDb25mZXJtYUNpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1jb25mZXJtYS1jaXRpZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlIH0gZnJvbSAnLi9odHRwLWNhbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2hvdGVsLWF2YWxpYWJpbGl0eS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVVzZXJBZGRyZXNzVXBkYXRlcixcclxuICBTYXZlVXNlckFkZHJlc3NVcGRhdGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NhdmUtdXNlci1hZGRyZXNzLnVwZGF0ZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcixcclxuICBVc2VyQWRkcmVzc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdXNlci1hZGRyZXNzZXMuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VDb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZU5hbWVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NvbmZlcm1hLW9mZmljZS1uYW1lcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXIsXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWNvbXBhbnktb2ZmaWNlcy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyLFxyXG4gIFNlYXJjaEhvdGVsQ2hhaW5zUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1ob3RlbC1jaGFpbnMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyLFxyXG4gIFZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVHlwZVxyXG59IGZyb20gJy4uL3Rlc3RlcnMvcG9zdGNvZGUtdmFsaWRhdGUudGVzdGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaERlcG90RmV0Y2hlcixcclxuICBTZWFyY2hEZXBvdFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtZGVwb3RzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1zdGF0aW9uLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoQ29uZmVybWFRdWlja2xpc3RGZXRjaGVyLFxyXG4gIENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9jb25mZXJtYS1xdWlja2xpc3QuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXIsXHJcbiAgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS11c2VyLWFkZHJlc3MtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyLFxyXG4gIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvcmVtb3ZlLXJlY2VudC1zZWFyY2gtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlcixcclxuICBTYXZlUmVjZW50U2VhcmNoRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9zYXZlLXJlY2VudC1zZWFyY2gtdXBkYXRlcic7XHJcblxyXG5pbXBvcnQgeyBIb3RlbFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lob3RlbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFJhaWxUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IEZsaWdodFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBMb3VuZ2VzVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWxvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBQYXJraW5nVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXBhcmtpbmctZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBDYWJIaXJlVGVtcFBhcmFtcywgVGF4aUZvcm1Nb2RlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IENhckhpcmVUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FyaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcixcclxuICBHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZVR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1jdXJyZW50LWNhcmJvbi1hbGxvd2FuY2UuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEJhc2VXZWJUb2tlblNlcnZpY2UgfSBmcm9tICcuL3dlYnRva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSaXNrQWxlcnRzRmV0Y2hlcixcclxuICBHZXRSaXNrQWxlcnRzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmlzay1hbGVydHMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IElybFRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lpcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJUkxFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9pcmwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBGbGlnaHRTZWFyY2hUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9mbGlnaHQtc2VhcmNoLXR5cGUuZW51bSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLFxyXG4gIEdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItcmVjZW50LXNlYXJjaGVzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbGNhcmRzRmV0Y2hlcixcclxuICBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLWNhcmRzLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRXVyb3N0YXJRdW90ZUZldGNoZXIsXHJcbiAgRXVyb3N0YXJRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZXVyb3N0YXItcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEV1cm9zdGFyRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBFdXJvc3RhclRlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCBFdXJvU3RhdGlvbnMgZnJvbSAnLi4vZGF0YS9ldXJvLXN0YXRpb25zLmpzb24nO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyLFxyXG4gIFNlYXJjaFVzZXJDYW5Cb29rRm9yRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtdXNlcnMtY2FuLWJvb2stZm9yLWZldGNoZXInO1xyXG5pbXBvcnQgeyBFdXJvc3RhclNlYXJjaFR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2V1cm9zdGFyLXNlYXJjaC10eXBlLmVudW0nO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWF9UUkFWRUxMRVJTID0gODtcclxuXHJcbmV4cG9ydCBlbnVtIFRyYXZlbGxlclNlYXJjaFR5cGVzIHtcclxuICBlbWFpbCA9ICdlbWFpbCcsXHJcbiAgbmFtZSA9ICduYW1lJyxcclxuICBlbXBsb3llZU51bWJlciA9ICdlbXBsb3llZU51bWJlcidcclxufVxyXG5cclxuaW50ZXJmYWNlIEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdEludGVyZmFjZSB7XHJcbiAgaGlnaGVzdDogbnVtYmVyO1xyXG4gIGN1cnJlbnRJdGVtOiBTZWFyY2hPYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2U8XHJcbiAgU1BfUSBleHRlbmRzIFNlYXJjaFBvc3Rjb2Rlc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1JfUSBleHRlbmRzIFNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXJUeXBlLFxyXG4gIFNMX1EgZXh0ZW5kcyBMb3VuZ2VRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNQQV9RIGV4dGVuZHMgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0ZMX1EgZXh0ZW5kcyBGbGlnaHRRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNIT19RIGV4dGVuZHMgSG90ZWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNDSF9RIGV4dGVuZHMgQ2FySGlyZUZldGNoZXJUeXBlLFxyXG4gIENIQURfUSBleHRlbmRzIENhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyVHlwZSxcclxuICBTVEhfUSBleHRlbmRzIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNBX1EgZXh0ZW5kcyBTZWFyY2hBaXJwb3J0c1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0FMX1EgZXh0ZW5kcyBTZWFyY2hBaXJsaW5lc1F1b3RlRmV0Y2hlclR5cGUsXHJcbiAgSEFfUSBleHRlbmRzIEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSxcclxuICBTQ19RIGV4dGVuZHMgU2VhcmNoQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQ0NfUSBleHRlbmRzIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTUkFfUSBleHRlbmRzIFJhaWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNJX1EgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNVQV9RIGV4dGVuZHMgU2F2ZVVzZXJBZGRyZXNzVXBkYXRlclR5cGUsXHJcbiAgU1VfUSBleHRlbmRzIFVzZXJBZGRyZXNzRmV0Y2hlclR5cGUsXHJcbiAgR1VDT19RIGV4dGVuZHMgR2V0VXNlckNvbXBhbnlPZmZpY2VzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTSENfUSBleHRlbmRzIFNlYXJjaEhvdGVsQ2hhaW5zUXVvdGVGZXRjaGVyVHlwZSxcclxuICBJUFZfUSBleHRlbmRzIFZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVHlwZSxcclxuICBTRF9RIGV4dGVuZHMgU2VhcmNoRGVwb3RRdW90ZUZldGNoZXJUeXBlLFxyXG4gIEdSU19RIGV4dGVuZHMgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZSxcclxuICBHT05fUSBleHRlbmRzIENvbmZlcm1hT2ZmaWNlTmFtZUZldGNoZXJUeXBlLFxyXG4gIERVQV9RIGV4dGVuZHMgRGVsZXRlVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcclxuICBEUlNfUSBleHRlbmRzIERlbGV0ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFNSU19RIGV4dGVuZHMgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlLFxyXG4gIFVDQV9RIGV4dGVuZHMgR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VUeXBlLFxyXG4gIEdSQV9RIGV4dGVuZHMgR2V0Umlza0FsZXJ0c0ZldGNoZXJUeXBlLFxyXG4gIFFMX1EgZXh0ZW5kcyBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlLFxyXG4gIEdVUlNGX1EgZXh0ZW5kcyBHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyVHlwZSxcclxuICBHUkNGX1EgZXh0ZW5kcyBHZXRSYWlsQ2FyZHNGZXRjaGVyVHlwZSxcclxuICBTRV9RIGV4dGVuZHMgRXVyb3N0YXJRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNVQ0JGIGV4dGVuZHMgU2VhcmNoVXNlckNhbkJvb2tGb3JGZXRjaGVyVHlwZVxyXG4gID4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB7XHJcbiAgc3RhdGljIFNFU1NJT05fVFJBVkVMTEVSOiBzdHJpbmcgPSAnc2VhcmNoX3RyYXZlbGxlcnMnO1xyXG5cclxuICBzZWFyY2hlczogU2VhcmNoUGFyYW1zO1xyXG4gIHRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRyYXZlbGxlcltdXHJcbiAgPihbXSk7XHJcbiAgZXJyb3JzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xyXG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIG5ld1NlYXJjaFN0YXJ0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIGZpcnN0TG9hZCA9IHRydWU7XHJcblxyXG4gIHNlYXJjaF9vYmplY3RzOiBTZWFyY2hPYmplY3RzO1xyXG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcclxuICBzaG93X2Vycm9ycyA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHNlYXJjaF9haXJwb3J0X2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XHJcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xyXG4gIGNvdW50cmllcyA9IENvdW50cmllcztcclxuICBldXJvc3RhdGlvbnM6IHsgZ2F0ZXdheTogc3RyaW5nOyBkZXN0aW5hdGlvbjogc3RyaW5nIH1bXSA9XHJcbiAgICBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoQWlycG9ydHNGZXRjaGVyOiBCYXNlU2VhcmNoQWlycG9ydHNGZXRjaGVyPFNBX1E+LFxyXG4gICAgcHJvdGVjdGVkIHNlYXJjaEFpcmxpbmVzRmV0Y2hlcjogQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcjxTQUxfUT4sXHJcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcm90ZWN0ZWQgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJvdGVjdGVkIGhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlOiBCYXNlSG90ZWxBdmFsaWJpbGl0eVNlcnZpY2U8SEFfUT4sXHJcbiAgICBwcml2YXRlIGNpdGllc0ZldGNoZXI6IEJhc2VTZWFyY2hDaXR5RmV0Y2hlcjxTQ19RPixcclxuICAgIHByaXZhdGUgY29uZmVybWFDaXRpZXNGZXRjaGVyOiBCYXNlU2VhcmNoQ29uZmVybWFDaXR5RmV0Y2hlcjxTQ0NfUT4sXHJcbiAgICBwcml2YXRlIHBvc3Rjb2RlRmV0Y2hlcjogQmFzZVNlYXJjaFBvc3Rjb2RlRmV0Y2hlcjxTUF9RPixcclxuICAgIHByaXZhdGUgcmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlcjxTUl9RPixcclxuICAgIHByaXZhdGUgc2F2ZVVzZXJBZGRyZXNzVXBkYXRlcjogQmFzZVNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI8U1VBX1E+LFxyXG4gICAgcHJpdmF0ZSB1c2VyQWRkcmVzc2VzRmV0Y2hlcjogQmFzZVVzZXJBZGRyZXNzZXNGZXRjaGVyPFNVX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgZ2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlcjogQmFzZUdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI8R1VDT19RPixcclxuICAgIHByaXZhdGUgc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyOiBCYXNlU2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyPFNIQ19RPixcclxuICAgIHByaXZhdGUgYmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyOiBCYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXI8SVBWX1E+LFxyXG4gICAgcHJpdmF0ZSBkZXBvdEZldGNoZXI6IEJhc2VTZWFyY2hEZXBvdEZldGNoZXI8U0RfUT4sXHJcbiAgICBwcml2YXRlIGNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyOiBCYXNlQ29uZmVybWFPZmZpY2VOYW1lc0ZldGNoZXI8R09OX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyOiBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyPERVQV9RPixcclxuICAgIHByaXZhdGUgYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VEZWxldGVSZWNlbnRTZWFyY2hVcGRhdGVyPERSU19RPixcclxuICAgIHByaXZhdGUgYmFzZVNhdmVSZWNlbnRTZWFyY2hVcGRhdGVyOiBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXI8U1JTX1E+LFxyXG4gICAgcHJpdmF0ZSBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI6IEJhc2VHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXI8VUNBX1E+LFxyXG4gICAgZW52aXJvbm1lbnQ6IEJhc2VFbnZpcm9ubWVudCxcclxuICAgIGxvdW5nZUZldGNoZXI6IEJhc2VMb3VuZ2VRdW90ZUZldGNoZXI8U0xfUT4sXHJcbiAgICBwYXJraW5nRmV0Y2hlcjogQmFzZVBhcmtpbmdRdW90ZUZldGNoZXI8U1BBX1E+LFxyXG4gICAgaHR0cENhbGxTZXJ2aWNlOiBBYnN0cmFjdEh0dHBDYWxsU2VydmljZSxcclxuICAgIGZsaWdodEZldGNoZXI6IEJhc2VGbGlnaHRRdW90ZUZldGNoZXI8U0ZMX1E+LFxyXG4gICAgaG90ZWxGZXRjaGVyOiBCYXNlSG90ZWxRdW90ZUZldGNoZXI8U0hPX1E+LFxyXG4gICAgY2FyaGlyZUZldGNoZXI6IEJhc2VDYXJoaXJlUXVvdGVGZXRjaGVyPFNDSF9RPixcclxuICAgIGNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyOiBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI8Q0hBRF9RPixcclxuICAgIGNhYmhpcmVGZXRjaGVyOiBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcjxTVEhfUT4sXHJcbiAgICByYWlsRmV0Y2hlcjogQmFzZVJhaWxRdW90ZUZldGNoZXI8U1JBX1E+LFxyXG4gICAgaXJsRmV0Y2hlcjogQmFzZUlybFF1b3RlRmV0Y2hlcjxTSV9RPixcclxuICAgIHByb3RlY3RlZCBnZXRSYWlsU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXI8R1JTX1E+LFxyXG4gICAgYmFzZVdlYlRva2VuU2VydmljZTogQmFzZVdlYlRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgcmlza0FsZXJ0c0ZldGNoZXI6IEJhc2VHZXRSaXNrQWxlcnRzRmV0Y2hlcjxHUkFfUT4sXHJcbiAgICBwcml2YXRlIHF1aWNrbGlzdEZldGNoZXI6IEJhc2VTZWFyY2hDb25mZXJtYVF1aWNrbGlzdEZldGNoZXI8UUxfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXI6IEJhc2VHZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyPEdVUlNGX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxDYXJkc0ZldGNoZXI6IEJhc2VHZXRSYWlsY2FyZHNGZXRjaGVyPEdSQ0ZfUT4sXHJcbiAgICBldXJvc3RhckZldGNoZXI6IEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcjxTRV9RPixcclxuICAgIHB1YmxpYyBzZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyOiBCYXNlU2VhcmNoVXNlcnNDYW5Cb29rRm9yRmV0Y2hlcjxTVUNCRj5cclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdFbnRlcnBpc2Ugc2VhcmNoIHNlcnZpY2UgYmVpbmcgaW5pdGVkJyk7XHJcbiAgICB0aGlzLnNlYXJjaGVzID0ge1xyXG4gICAgICBbU2VydmljZVR5cGUuTG91bmdlXTogbmV3IExvdW5nZXNFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGxvdW5nZUZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLlBhcmtpbmddOiBuZXcgUGFya2luZ0VudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcGFya2luZ0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZsaWdodF06IG5ldyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGZsaWdodEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkhvdGVsXTogbmV3IEhvdGVsRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBob3RlbEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICB1c2VyU2VydmljZSxcclxuICAgICAgICBlbnZpcm9ubWVudCxcclxuICAgICAgICBob3RlbEF2YWxpYmlsaXR5U2VydmljZSxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgaHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgICAgIHF1aWNrbGlzdEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5DYXJdOiBuZXcgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgY2FyaGlyZUZldGNoZXIsXHJcbiAgICAgICAgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNhYl06IG5ldyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBjYWJoaXJlRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZVxyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdOiBuZXcgSVJMRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBpcmxGZXRjaGVyLFxyXG4gICAgICAgIC8vIGdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuRmFzdFRyYWNrXTogbnVsbCxcclxuICAgICAgW1NlcnZpY2VUeXBlLkNvYWNoXTogbnVsbCxcclxuICAgICAgW1NlcnZpY2VUeXBlLlJhaWxdOiBuZXcgUmFpbEVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgcmFpbEZldGNoZXIsXHJcbiAgICAgICAgZ2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5FdXJvc3Rhcl06IG5ldyBFdXJvc3RhckVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgZXVyb3N0YXJGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgdXNlclNlcnZpY2UsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgIClcclxuICAgIH07XHJcbiAgICBjb25zb2xlLmxvZygnTmV3bHkgY3JlYXRlZCBzZWFyY2ggb2JqZWN0czogJywgdGhpcy5zZWFyY2hlcyk7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuaW5pdF9zZWFyY2hfb2JqZWN0cygpKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxcclxuICAgICAgVHJhdmVsbGVyW11cclxuICAgID4oQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSKTtcclxuICAgIHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24ubmV4dCh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyk7XHJcbiAgICB1c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlclNlcnZpY2VzLnN1YnNjcmliZShcclxuICAgICAgKHNlcnZpY2VzOiBVc2VyU2VydmljZXMpID0+IHtcclxuICAgICAgICBpZiAoc2VydmljZXMpIHtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaF9vYmplY3RzKS5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChvYmplY3RzOiBTZWFyY2hPYmplY3RzLCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIChvYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0uZW5hYmxlZCA9XHJcbiAgICAgICAgICAgICAgICAhIXNlcnZpY2VzICYmICEhc2VydmljZXNba2V5XTtcclxuICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0cztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb3VudHJpZXMpKSB7XHJcbiAgICAgIHRoaXMuY291bnRyaWVzID0gdGhpcy5jb3VudHJpZXMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGlmIChhLmNOYW1lIDwgYi5jTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYS5jTmFtZSA+IGIuY05hbWUpIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYmFzZVdlYlRva2VuU2VydmljZS5hdXRvTG9nb3V0Q29uZmlnID0gdGhpcy5nZXRBdXRvTG9nb3V0Q29uZmlnKCk7XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hlcykuZm9yRWFjaChcclxuICAgICAgKGl0ZW06IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcclxuICAgICAgICBpdGVtPy5yZXNldCgpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy5yZW1vdmVBbGxUcmF2ZWxsZXJzKCk7XHJcbiAgICB0aGlzLmJhc2tldFNlcnZpY2UucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlKFxyXG4gICAgdXNlcj86IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Q2FyYm9uQWxsb3dhbmNlPiB7XHJcbiAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJ5ID0geyB1c2VyIH07XHJcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAoKHJlc3VsdHM6IENhcmJvbkFsbG93YW5jZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFJpc2tBbGVydHMoXHJcbiAgICBtaW5MZXZlbDogUmlza0xldmVsLFxyXG4gICAgbWF4TGV2ZWw6IFJpc2tMZXZlbCxcclxuICAgIGNvdW50cnlJc29Db2RlOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBhaXJwb3J0PzogQWlycG9ydCxcclxuICAgIHJhaWxTdGF0aW9uPzogUmFpbFN0YXRpb24sXHJcbiAgICBhaXJwb3J0SWF0YT86IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8Umlza0FsZXJ0W10+IHtcclxuICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVlcnk6IEdldFJpc2tBbGVydHNRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgbWluTGV2ZWwsXHJcbiAgICAgIG1heExldmVsLFxyXG4gICAgICBjb3VudHJ5SXNvQ29kZVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5yaXNrQWxlcnRzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0OiBSaXNrQWxlcnRbXSkgPT4ge1xyXG4gICAgICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWlycG9ydHNMaXN0KFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcclxuICAgIGhhc0xvdW5nZT86IGJvb2xlYW4sXHJcbiAgICBoYXNQYXJraW5nPzogYm9vbGVhbixcclxuICAgIGhhc0Zhc3RUcmFjaz86IGJvb2xlYW5cclxuICApOiBPYnNlcnZhYmxlPE9CVEFpcnBvcnREZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBxdWVyeTogU2VhcmNoQWlycG9ydHMuVmFyaWFibGVzID0geyBxdWVyeTogdGVybSB9O1xyXG4gICAgICBpZiAoISFjb3VudHJ5Q29kZSkge1xyXG4gICAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBoYXNMb3VuZ2UgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc0xvdW5nZSA9IGhhc0xvdW5nZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIGhhc1BhcmtpbmcgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHF1ZXJ5Lmhhc1BhcmtpbmcgPSBoYXNQYXJraW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgaGFzRmFzdFRyYWNrID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBxdWVyeS5oYXNGYXN0VHJhY2sgPSBoYXNGYXN0VHJhY2s7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlycG9ydHNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBBaXJwb3J0U2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5nZW5lcmFsTWF0Y2hlcykge1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTWF0Y2hlcyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzLmdlbmVyYWxNYXRjaGVzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoaXMgYXMgdGhpcyBjcmVhdGVzIGR1cGxpY2F0ZSBhaXJwb3J0cyBpbiB0aGUgbGlzdFxyXG4gICAgICAgICAgICAvLyBpZiAocmVzdWx0cy5pYXRhTWF0Y2gpIHtcclxuICAgICAgICAgICAgLy8gICBnZW5lcmFsTWF0Y2hlcy5wdXNoKHJlc3VsdHMuaWF0YU1hdGNoKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIGdlbmVyYWxNYXRjaGVzXHJcbiAgICAgICAgICAgICAgICAvLyAuZmlsdGVyKChhaXJwb3J0OiBBaXJwb3J0UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyAgIHJldHVybiAhIWNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgPyBjb3VudHJ5Q29kZSA9PT0gYWlycG9ydC5kZXRhaWxzLmNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgOiBhaXJwb3J0O1xyXG4gICAgICAgICAgICAgICAgLy8gfSlcclxuICAgICAgICAgICAgICAgIC5tYXAoKGFpcnBvcnQ6IEFpcnBvcnQpOiBPQlRBaXJwb3J0RGV0YWlscyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb246IGFpcnBvcnQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5OiBhaXJwb3J0LmlhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYWxzOiB0aGlzLnByb2Nlc3NUZXJtaW5hbHMoYWlycG9ydC50ZXJtaW5hbHMpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnk6IGFpcnBvcnQ/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgICAgICAgICAgICBwb3N0Y29kZTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogYWlycG9ydD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0QWlybGluZXNMaXN0KFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxPQlRBaXJsaW5lc0RldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID49IDIpIHtcclxuICAgICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hBaXJsaW5lcy5WYXJpYWJsZXMgPSB7IHF1ZXJ5OiB0ZXJtIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaEFpcmxpbmVzRmV0Y2hlci5mZXRjaE9uZShxdWVyeSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogQWlybGluZXNTZWFyY2hSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMuZ2VuZXJhbE1hdGNoZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZ2VuZXJhbE1hdGNoZXMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cy5nZW5lcmFsTWF0Y2hlcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmFsTWF0Y2hlcy5tYXAoXHJcbiAgICAgICAgICAgICAgKGFpcmxpbmVzOiBBaXJsaW5lUmVzdWx0KTogT0JUQWlybGluZXNEZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvZGU6IGFpcmxpbmVzLmlhdGEsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGFpcmxpbmVzLm5hbWVcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRBaXJwb3J0TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaGFzTG91bmdlPzogYm9vbGVhbixcclxuICAgIGhhc1Bhcmtpbmc/OiBib29sZWFuLFxyXG4gICAgaGFzRmFzdFRyYWNrPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGNvbnN0IGNvbnZlcnQgPSAocmVzdWx0czogT0JUQWlycG9ydERldGFpbHNbXSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQ6IE9CVEFpcnBvcnREZXRhaWxzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5hbWU6IHJlc3VsdC5kZXN0aW5hdGlvbixcclxuICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQWlycG9ydCxcclxuICAgICAgICAgIGFpcnBvcnQ6IHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmdldEFpcnBvcnRzTGlzdChcclxuICAgICAgdGVybSxcclxuICAgICAgY291bnRyeUNvZGUsXHJcbiAgICAgIGlzTG9hZGluZyxcclxuICAgICAgaGFzTG91bmdlLFxyXG4gICAgICBoYXNQYXJraW5nLFxyXG4gICAgICBoYXNGYXN0VHJhY2tcclxuICAgICkucGlwZShtYXAoY29udmVydCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBpc0NvbmZpcm1hPzogYm9vbGVhblxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA8PSAyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc0NvbmZpcm1hKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldENvbmZlcm1hQ2l0eUxvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDaXR5TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2dldENpdHlMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgIGlmIChjb3VudHJ5Q29kZSkge1xyXG4gICAgICBxdWVyeS5jb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFNlYXJjaENpdGllc1Jlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuY2l0aWVzRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBTZWFyY2hDaXRpZXNSZXN1bHRBcnJheSk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBTZWFyY2hDaXRpZXNSZXN1bHQpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmNvb3JkaW5hdGVzLmxvbmdpdHVkZSxcclxuICAgICAgICAgICAgbGF0aXR1ZGU6IHJlc3VsdC5jb29yZGluYXRlcy5sYXRpdHVkZSxcclxuICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5DaXR5LFxyXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogcmVzdWx0LmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgICBpZDogcmVzdWx0LmlkXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbmZlcm1hQ2l0eUxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBxdWVyeTogYW55ID0geyBjaXR5TmFtZTogdGVybSB9O1xyXG4gICAgaWYgKGNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHF1ZXJ5LmNvdW50cnlDb2RlID0gY291bnRyeUNvZGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHQ+ID1cclxuICAgICAgdGhpcy5jb25mZXJtYUNpdGllc0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpO1xyXG4gICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBTZWFyY2hDb25mZXJtYUNpdGllc1Jlc3VsdCk6IExvY2F0aW9uRGV0YWlsc1tdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLnN1Z2dlc3Rpb25zLm1hcChcclxuICAgICAgICAocmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGUsXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGU6IHJlc3VsdC5jb3VudHJ5Q29kZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGNhciBoaXJlIGRlcG90cyBiYXNlZCBvbiBjaXR5IGNvcmRzXHJcbiAgICovXHJcbiAgZ2V0Q2FySGlyZURlcG90cyhcclxuICAgIGxhdGl0dWRlOiBudW1iZXIsXHJcbiAgICBsb25naXR1ZGU6IG51bWJlcixcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Q2FySGlyZURlcG90UmVzdWx0QXJyYXk+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8Q2FySGlyZURlcG90UmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5kZXBvdEZldGNoZXIuZmV0Y2hMaXN0KHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSB9KTtcclxuXHJcbiAgICBjb25zdCBmdW5jID0gKFxyXG4gICAgICByZXN1bHRzOiBDYXJIaXJlRGVwb3RSZXN1bHRBcnJheVxyXG4gICAgKTogQ2FySGlyZURlcG90UmVzdWx0QXJyYXkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBDYXJIaXJlRGVwb3RSZXN1bHRBcnJheSA9IHJlc3VsdHMubWFwKFxyXG4gICAgICAgIChyZXN1bHQ6IENhckhpcmVEZXBvdCk6IENhckhpcmVEZXBvdCA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnM7IC8vIC5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcblxyXG4gICAgLy8gcmV0dXJuIG9mKFtdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBwb3N0Y29kZSBsb2NhdGlvbnMsIHRoZXNlIHdpbGwgdXNlIHBhcnRpYWwgcG9zdGNvZGUsXHJcbiAgICogIGZ1bGwgYW5kIHRoZW4gZ3JhYmJpbmcgdGhlbSB3aWxsIGxldCB1cyBmaWxsIGluIHRoZSBhZGRyZXNzIGZvcm1cclxuICAgKiBAdG9kbyAtIGZpbGwgdGhpcyBvdXQgZm9yIHRoZSBvdGhlciBsb2NhdGlvbiB0eXBlcywgbWF5IG5lZWQgdG8gbWVyZ2VNYXAgdGhlbSBvciBzb21lIG90aGVyIHJ4anMgbWFnaWNcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaCBieSBlLmcuICd3YTE0JyBzaG91bGQgYnJpbmcgYmFjaywgb3VyIG9mZmljZSwgJ20zMycgc2hvaXVsZCBicmluZyBiYWNrIG15IGFkZHJzXHJcbiAgICovXHJcbiAgZ2V0UG9zdGNvZGVMaXN0KHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmIChSZWdFeHBzLlVLX1BPU1RDT0RFLnRlc3QodGVybSkpIHtcclxuICAgICAgY29uc3Qgc3VicyA9IHRoaXMucG9zdGNvZGVGZXRjaGVyLmZldGNoTGlzdCh7IHBvc3Rjb2RlOiB0ZXJtIH0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBTZWFyY2hQb3N0Y29kZXNSZXN1bHRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgICAocmVzdWx0OiBTZWFyY2hQb3N0Y29kZXNSZXN1bHQpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHQucG9zdGNvZGUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgbGF0aXR1ZGU6IHJlc3VsdC5sYXRpdHVkZSxcclxuICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogcmVzdWx0LmxvbmdpdHVkZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXHJcblxyXG4gICAgICByZXR1cm4gc3VicztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRUb1NlbGVjdGVkUGxhY2VzKGFkZHJlc3M6IEFkZHJlc3MpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRQbGFjZXMucHVzaChhZGRyZXNzKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUGxhY2VCeUlkKHBsYWNlSWQ6IHN0cmluZyk6IEFkZHJlc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRQbGFjZXMuZmluZChcclxuICAgICAgKHBsYWNlOiB7IHBsYWNlX2lkOiBzdHJpbmcgfSkgPT4gcGxhY2UucGxhY2VfaWQgPT09IHBsYWNlSWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgbGlzdCBvZiBPZmZpY2UgbG9jYXRpb25zIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIGdpdmVuXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHdlIHdhbnQgdG8gc2VhcmNoIGJ5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXRPZmZpY2VMb2NhdGlvbnModGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgICB0aGlzLmdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSAoXHJcbiAgICAgICAgcmVzdWx0czogR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXlcclxuICAgICAgKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgICAocmVzdWx0OiBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHQpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgIG9mZmljZTogcmVzdWx0LmFkZHJlc3Nlc1swXSxcclxuICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLk9mZmljZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0aW9uTG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnJhaWxTdGF0aW9uRmV0Y2hlclxyXG4gICAgICAgIC5mZXRjaExpc3Qoe1xyXG4gICAgICAgICAgcXVlcnk6IHRlcm1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIG1hcCgocmVzdWx0czogU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0QXJyYXkpOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQ6IFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbixcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgcmFpbHN0YXRpb246IHJlc3VsdFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGhvdGVsIGxvY2F0aW9ucywgdGhlc2Ugc2hvdWxkIGJlIGNpdHksIG9mZmljZSwgYWlycG9ydCwgcmFpbHN0YXRpb25cclxuICAgKiBAdG9kbyAtIGZpbGwgdGhpcyBvdXQgZm9yIHRoZSBvdGhlciBsb2NhdGlvbiB0eXBlcywgbWF5IG5lZWQgdG8gbWVyZ2VNYXAgdGhlbSBvciBzb21lIG90aGVyIHJ4anMgbWFnaWNcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaCBieSBlLmcuICdNYW4nIHNob3VsZCBicmluZyBiYWNrLCBtYW5jaGVzdGVyLCBtYW5jaGVzdGVyIGFpcnBvcnQsIG1hbmNoZXN0ZXIgcGljYWRpbGx5LCBldGNcclxuICAgKi9cclxuICBnZXRIb3RlbExvY2F0aW9uc0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlmIChSZWdFeHBzLlVLX1BPU1RDT0RFLnRlc3QodGVybSkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb3N0Y29kZUxpc3QodGVybSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFpc0xvYWRpbmc/LnZhbHVlKSB7XHJcbiAgICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3VicyA9IGZvcmtKb2luKFtcclxuICAgICAgICAgIHRoaXMuZ2V0QWlycG9ydExvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKSxcclxuICAgICAgICAgIHRoaXMuZ2V0Q2l0eUxvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKSxcclxuICAgICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgICAgdGhpcy5nZXRPZmZpY2VMb2NhdGlvbnModGVybSlcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5yZWR1Y2UoKGFjY3VtOiBMb2NhdGlvbkRldGFpbHNbXSwgcmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBhY2N1bS5wdXNoKC4uLnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG4gICAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGlvbnNBbmRBaXJwb3J0c0xpc3QoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZTogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlmICghaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHN1YnMgPSBmb3JrSm9pbihbXHJcbiAgICAgICAgdGhpcy5nZXRBaXJwb3J0TG9jYXRpb25zKHRlcm0sIGNvdW50cnlDb2RlLCBpc0xvYWRpbmcpLFxyXG4gICAgICAgIHRoaXMuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc0xvYWRpbmcpXHJcbiAgICAgIF0pLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogYW55W10sIHJlc3VsdDogYW55W10pID0+IHtcclxuICAgICAgICAgICAgYWNjdW0ucHVzaCguLi5yZXN1bHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTsgLy8gZXhwYW5kIHRoaXMgd2l0aCB0aGUgb3RoZXIgc2VhcmNoZXMgd2hlbiB0aGV5IGFyZSBkb25lXHJcbiAgICAgIHJldHVybiBzdWJzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgQGRlc2MgLSByZW1vdmUgYSBzcGVjaWZpZWQgdHJhdmVsbGVyIGZyb20gdGhlIHNlbGVjdGVkIGFycmF5XHJcbiAgKiovXHJcbiAgcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgX3JlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMgPSB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXJUb1Rlc3Q6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAhVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJUb1Rlc3QsIHRyYXZlbGxlcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxUcmF2ZWxsZXJzKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92ZSBhbGwgdHJhdmVsbGVycyBjYWxsZWQhJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyk7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5mb3JFYWNoKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICB0aGlzLl9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBhZGRUcmF2ZWxsZXIodHJhdmVsbGVyOiBUcmF2ZWxsZXIpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMudHJhdmVsbGVyQWxyZWFkeUFkZGVkKHRyYXZlbGxlcikgJiZcclxuICAgICAgIXRoaXMuY3VycmVudE5vT2ZUcmF2ZWxsZXJzR3JlYXRlck9yRXF1YWxUb01heCgpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMucHVzaCh0cmF2ZWxsZXIpO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IHRoaXMubWF4VHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgbWF4VHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIC8qdGhpcy51c2VyU2VydmljZS51c2VUcmF2ZWxsZXJQcm9maWxlICYmKi8gdGhpcy5jYW5Vc2VUcmF2ZWxsZXJQcm9maWxlKClcclxuICAgICAgPyAxXHJcbiAgICAgIDogTUFYX1RSQVZFTExFUlM7XHJcbiAgfVxyXG4gIC8qXHJcbiAgICBAZGVzYyAtIGhlbHBlciBmdW5jdGlvbiAtIGRldGVybWluZXMgaWYgYSBzZWxlY3RlZCB0cmF2ZWxsZXIgaXMgYWxyZWFkeSBhZGRlZCAtXHJcbiAgICB1c2VkIHRvIHByZXZlbnQgc2FtZSB0cmF2ZWxsZXIgYmVpbmcgYWRkZWQgbW9yZSB0aGFuIG9uY2VcclxuICAqKi9cclxuICB0cmF2ZWxsZXJBbHJlYWR5QWRkZWQodHJhdmVsbGVyOiBUcmF2ZWxsZXIpOiBib29sZWFuIHtcclxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VsZWN0ZWQgdHJhdmVsbGVycyBhbmQgcmV0dXJuIHRydWUgaWYgZm91bmQsIGZhbHNlIG90aGVyIHdpc2VcclxuICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcikgPT5cclxuICAgICAgVHJhdmVsbGVyT2JqZWN0LmVxdWFscyh0cmF2ZWxsZXJzLCB0cmF2ZWxsZXIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2FuVXNlVHJhdmVsbGVyUHJvZmlsZSgpOiBib29sZWFuIHtcclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5pc1VzZXJGYXZvcml0ZVNldChVc2VyRmF2b3J1cml0ZS5Eb250VXNlVHJhdmVsbGVyUG9saWN5KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRGV0YWlscygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXVxyXG4gICAgICAgIC5ndWVzdCAvKiYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzWzBdLnBheF9pZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXS5wYXhfaWQgIT09IHVzZXIuUGF4SWRcclxuICAgICk7Ki9cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnROb09mVHJhdmVsbGVycygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYXZlbGxlckluZm9ybWF0aW9uKCkge1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgKTtcclxuICAgIHRoaXMudHJhdmVsbGVySW5mb3JtYXRpb24ubmV4dChbLi4udGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNdKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gZGV0ZXJtaW5lIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdmFsdWUsXHJcbiAgICogICB0aGUgaGlnaGVzdCBpcyBiYXNlZCBvbiB0aGUgcHJpb3JpdHkgdmFsdWUgb2YgdGhlIHNlYXJjaCB0eXBlLFxyXG4gICAqICAgIGlmIGl0IGlzIGNob3NlbiBhbmQgaWYgdGhlIGJvb2tpbmcgaGFzIG5vdCBiZWVuIGNob3NlblxyXG4gICAqKi9cclxuICBkZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eSA9XHJcbiAgICAgIHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdCgpLmhpZ2hlc3QpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0KFxyXG4gICAgYmFza2V0SXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiBTZWFyY2hPYmplY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChiYXNrZXRJdGVtcykuY3VycmVudEl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoXHJcbiAgICBiYXNrZXRJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPiA9IHt9IGFzIFJlY29yZDxcclxuICAgICAgU2VydmljZVR5cGUsXHJcbiAgICAgIEJhc2tldEl0ZW1cclxuICAgID5cclxuICApOiBIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3RJbnRlcmZhY2Uge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxyXG4gICAgICAoeyBoaWdoZXN0LCBjdXJyZW50SXRlbSB9LCBpdGVtOiBTZWFyY2hPYmplY3QpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5jaG9zZW4gJiYgaXRlbS5wcmlvcml0eSA8IGhpZ2hlc3QpIHtcclxuICAgICAgICAgIGlmICghYmFza2V0SXRlbXNbaXRlbS50eXBlIGFzIFNlcnZpY2VUeXBlXSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBoaWdoZXN0OiBpdGVtLnByaW9yaXR5LCBjdXJyZW50SXRlbTogaXRlbSB9O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbS5jaG9zZW4gPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgaGlnaGVzdCwgY3VycmVudEl0ZW0gfTtcclxuICAgICAgfSxcclxuICAgICAgeyBoaWdoZXN0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVudEl0ZW06IG51bGwgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkT3B0aW9ucygpOiBTZXJ2aWNlVHlwZVtdIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaF9vYmplY3RzKS5yZWR1Y2UoKGN2LCBpdGVtSW5kZXgpID0+IHtcclxuICAgICAgaWYgKCh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2l0ZW1JbmRleF0uY2hvc2VuKSB7XHJcbiAgICAgICAgY3YucHVzaChpdGVtSW5kZXggYXMgU2VydmljZVR5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdjtcclxuICAgIH0sIFtdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBzZWxlY3RlZCB0cmF2ZWxsZXJzIGNvbnRhaW5zIGFueSBndWVzdHMgd2l0aG91dCBhbGwgb2YgZGV0YWlsc1xyXG4gICAqL1xyXG4gIGhhc1NpbXBsZUd1ZXN0cygpOiBib29sZWFuIHtcclxuICAgIC8qcmV0dXJuICEhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgoeyBndWVzdCwgcGhvbmUsIG5hdGlvbmFsaXR5LCBlbWFpbCB9KSA9PiB7XHJcbiAgICAgIHJldHVybiBndWVzdCAmJiAhKCEhZW1haWwgJiYgISFwaG9uZSAmJiAhIW5hdGlvbmFsaXR5KTtcclxuICAgIH0pOyovXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBzZXQgdGhlIHNlYXJjaCBvYmplY3RzIHRvIHRoZSBnZXQgbWUgdGhlcmUgb2JqZWN0cyAtIGNhbGxlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGdldCBtZSB0aGVyZSBzZWFyY2hlc1xyXG4gICAqL1xyXG4gIHNldEdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJysrKyBTZXR0aW5nIEdldE1lVGhlcmUgU2VhcmNoIE9iamVjdHMgKysrJyk7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZ2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKSk7XHJcbiAgfVxyXG5cclxuICByZXNldFNlYXJjaFBhcmFtcygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdSZXNldGluZyBTZWFyY2ggUGFyYW1zIScpO1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNcclxuICAgICk7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLmZvckVhY2goXHJcbiAgICAgIChwcm9kdWN0U2VhcmNoU2VydmljZTogQmFzZUVudGVycHJpc2VTZWFyY2g8YW55LCBhbnksIGFueVtdPikgPT4ge1xyXG4gICAgICAgIHByb2R1Y3RTZWFyY2hTZXJ2aWNlLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjYW5TZWFyY2godHlwZTogU2VydmljZVR5cGUgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIC8vIGNoZWNrIHRoYXQgdGhlIHNlbGVjdGVkIHR5cGUgaXMgY2hvc2VuLCBoYXMgaGlnaGVzdCBwcmlvcml0eSBhbmQgaGFzIG5vdCBhbHJlYWR5IGhhZCBhIGJvb2tpbmcgY2hvc2VuXHJcblxyXG4gICAgdGhpcy5kZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTtcclxuICAgIC8vIGZpcnN0bHkgY2hlY2sgdGhhdCB0aGUgdHlwZSBvZiBzZWFyY2ggZXhpc3RzXHJcbiAgICBpZiAoKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0pIHtcclxuICAgICAgY29uc29sZS5sb2coJ2NhbiBzZWFyY2ggaGVyZScpO1xyXG4gICAgICAvLyBub3cgY2hlY2sgdGhhdCB0aGUgdHlwZSBpcyBjaG9zZW4gaGFzIGhpZ2hlc3QgcHJpb3JpdHlcclxuICAgICAgaWYgKFxyXG4gICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdLmNob3NlbiAmJlxyXG4gICAgICAgIHRoaXMuaGFzSGlnaGVzdFNlYXJjaFByaW9yaXR5KFxyXG4gICAgICAgICAgKHRoaXMuc2VhcmNoX29iamVjdHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbdHlwZV0ucHJpb3JpdHlcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHR5cGUgKyAnIGNhbiBiZSBzZWFyY2hlZCcpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYXNIaWdoZXN0U2VhcmNoUHJpb3JpdHkocHJpb3JpdHlWYWw6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5kZXRlcm1pbmVIaWdoZXN0U2VhcmNoUHJpb3JpdHkoKTtcclxuICAgIHJldHVybiBwcmlvcml0eVZhbCA8PSB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5O1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiAgQGRlc2MgLSBjb25jYXRpbmF0cyBhbGwgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMgYWNyb3NzIGFsbCBzZWxlY3RlZCB0eXBlcyArXHJcbiAgICogICB0cmF2ZWxsZXJzIChvciB3aWxsIGRvIHdoZW4gaXQncyBjb21wbGV0ZSkgVE9ETyAtIGFkZCBGbGlnaHQsIFJhaWwgQ2FyXHJcbiAgICoqL1xyXG4gIGdldEFsbEVycm9yTWVzc2FnZXMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgY29uY2F0dGVkRXJyb3JzOiBzdHJpbmdbXSA9IHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkxvdW5nZV0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkxvdW5nZSlcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkxvdW5nZV0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkNhcl0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkNhcilcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkNhcl0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5SYWlsKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlBhcmtpbmddLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5QYXJraW5nKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuUGFya2luZ10udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkNhYl0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkNhYilcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkNhYl0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaG9zZW4gJiZcclxuICAgICAgdGhpcy5jYW5TZWFyY2goU2VydmljZVR5cGUuSG90ZWwpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0udmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgIGlmICh0aGlzLnNlYXJjaF9vYmplY3RzLmhvdGVsLmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5IT1RFTCkpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzID0gY29uY2F0dGVkRXJyb3JzLmNvbmNhdCh0aGlzLmhvdGVsLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5mbGlnaHQuY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkZMSUdIVCkpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzID0gY29uY2F0dGVkRXJyb3JzLmNvbmNhdCh0aGlzLmZsaWdodC52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlYXJjaF9vYmplY3RzLnBhcmtpbmcuY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkFJUl9QQVJLSU5HKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLnBhcmtpbmcudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy50YXhpLmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5UQVhJKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLnRheGkudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5ldXJvc3Rhci5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uRVVST1NUQVIpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKC4uLnRoaXMuZXVyb3N0YXIudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5jb2FjaC5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uQ09BQ0gpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKC4uLnRoaXMuY29hY2gudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH0qL1xyXG4gICAgdGhpcy5lcnJvcnMubmV4dChjb25jYXR0ZWRFcnJvcnMpO1xyXG4gICAgcmV0dXJuIGNvbmNhdHRlZEVycm9ycztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB0cmF2ZWxsZXJzQ29udGFpblVzZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xyXG4gICAgICByZXR1cm4gdHJhdmVsbGVyLmlkID09PSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJJZCgpLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZVRyYXZlbGxlcnMoKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy51c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckRhdGEudmFsdWUuYm9va2VyX3R5cGUpIHtcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLlNlbGZCb29rOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnRyYXZlbGxlcnNDb250YWluVXNlcigpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyB0aGlzIHNob3VsZCBuZXZlciB0cmlnZ2VyIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zIGFzIHRoZSB1c2VyIHNob3VsZCBiZSBsb2FkZWQgaW4gYXMgYSB0cmF2ZWxsZXIgb24gbG9naW5cclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdDdXJyZW50IHVzZXIgbXVzdCBiZSBhIHRyYXZlbGxlcidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBCb29rZXJUeXBlLkJvb2tlcldpdGhTZWxmOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoIDwgMSkgfHxcclxuICAgICAgICAgICF0aGlzLnRyYXZlbGxlcnNDb250YWluVXNlcigpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIHlvdXIgc2VsZi4nKTtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5Cb29rZXI6XHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5Db21wYW55OlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuQ29tcGFueUdyb3VwOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuT2ZmaWNlOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuVG1jOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuUm9vdDpcclxuICAgICAgICBpZiAoISh0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGggPj0gMSkpIHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSB0cmF2ZWxsZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJfZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ1VucmVjb2duaXNlZCB1c2VyIHR5cGUhIC0gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydC4nXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICByZXR1cm4gdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwO1xyXG4gIH1cclxuXHJcbiAgZmluZFBheEluVHJhdmVsbGVycyh1c2VybmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHVzZXJuYW1lID09PSB0cmF2ZWxsZXIuZW1haWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRm9ybXMoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWFyY2hPYmplY3Q6IFNlYXJjaE9iamVjdCA9IHRoaXMuX2ZpbmRTZWFyY2hPYnRlY3QoKTtcclxuICAgIHRoaXMuZ2V0QWxsRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgaWYgKHNlYXJjaE9iamVjdCkge1xyXG4gICAgICB0aGlzLmVycm9ycy5uZXh0KFxyXG4gICAgICAgIHRoaXMuc2VhcmNoZXNbc2VhcmNoT2JqZWN0LnR5cGUgYXMga2V5b2YgU2VhcmNoUGFyYW1zXS5tZXNzYWdlcy52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVUcmF2ZWxsZXJzKCkgJiZcclxuICAgICAgICB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10uaXNWYWxpZC52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmluZFNlYXJjaE9idGVjdCgpOiBTZWFyY2hPYmplY3QgfCBudWxsIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLmZpbmQoKG9iajogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgIHJldHVybiAhIW9iaiAmJiBvYmoucHJpb3JpdHkgPT09IHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5ld1NlYXJjaFN0YXJ0ZWQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuc2VhcmNoX2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHNlYXJjaE9iamVjdDogU2VhcmNoT2JqZWN0O1xyXG4gICAgc2VhcmNoT2JqZWN0ID0gdGhpcy5fZmluZFNlYXJjaE9idGVjdCgpO1xyXG4gICAgaWYgKHNlYXJjaE9iamVjdCkge1xyXG4gICAgICBzZWFyY2hPYmplY3QuY2hvc2VuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoT2JqZWN0ICYmICF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoc2VhcmNoT2JqZWN0LnJlc3VsdFVybCkpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3NlYXJjaE9iamVjdC5yZXN1bHRVcmxdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKklmIHRoZSBzZWFyY2ggZXhjZWVkcyB0aGUgdGltZW91dCB0aW1lLCBjYW5jZWwgc2VhcmNoIGFuZCB0ZWxsIE9CVCB0aGF0IGl0J3MgdGltZWQgb3V0Ki9cclxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChjb250ZXh0LnNlYXJjaF9sb2FkaW5nKSB7XHJcbiAgICAgICAgY29udGV4dC5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnRleHQuc2VhcmNoVGltZWRPdXQubmV4dCh0cnVlKTtcclxuICAgICAgICBjb250ZXh0LnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEyMDAwKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBQcm9taXNlLmFsbChcclxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLm1hcChcclxuICAgICAgICAgIChzZWFyY2g6IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICEhc2VhcmNoICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tzZWFyY2gudHlwZV0gJiZcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzW3NlYXJjaC50eXBlXS5jaG9zZW5cclxuICAgICAgICAgICAgICA/IHNlYXJjaC5zdGFydFNlYXJjaCgpXHJcbiAgICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgKS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hMb2FkaW5nRG9uZS5uZXh0KHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRheGlTdGF0aW9uTG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSYWlsQWlycG9ydFtdPiB7XHJcbiAgICByZXR1cm4gdGVybS5sZW5ndGggPCAzXHJcbiAgICAgID8gb2YoW10pXHJcbiAgICAgIDogb2YoW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiAnTWFuY2hlc3RlciBBaXJwb3QnLFxyXG4gICAgICAgICAgaXNhaXJwb3J0OiB0cnVlLFxyXG4gICAgICAgICAgc3VwcGxpZXJfY29kZTogJ01BTicsXHJcbiAgICAgICAgICBhZGRyZXNzOiAnTWFuY2hlc3RlciBBaXJwb3J0JyxcclxuICAgICAgICAgIHBvc3Rjb2RlOiAnTTkwIDFRWCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiAnTWFuY2hlc3RlciBQaWNjYWRpbGx5JyxcclxuICAgICAgICAgIGlzYWlycG9ydDogZmFsc2UsXHJcbiAgICAgICAgICBzdXBwbGllcl9jb2RlOiAnTU1BTicsXHJcbiAgICAgICAgICBhZGRyZXNzOiAnTWFuY2hlc3RlciBQaWNjYWRpbGx5JyxcclxuICAgICAgICAgIHBvc3Rjb2RlOiAnTTEgMlBaJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246ICdMb25kb24gSGVhdGhyb3cnLFxyXG4gICAgICAgICAgaXNhaXJwb3J0OiB0cnVlLFxyXG4gICAgICAgICAgc3VwcGxpZXJfY29kZTogJ0xIUicsXHJcbiAgICAgICAgICBhZGRyZXNzOiAnTG9uZG9uIEhlYXRocm93IEFpcnBvcnQnLFxyXG4gICAgICAgICAgcG9zdGNvZGU6ICdUVzYgMUVXJ1xyXG4gICAgICAgIH1cclxuICAgICAgXSk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRyZXNzZXMoaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4pOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiBvZihbXHJcbiAgICAgIHtcclxuICAgICAgICBIb3VzZTogJ0NlY2lsIENvdXJ0JyxcclxuICAgICAgICBTdHJlZXQ6ICcyOC0zNiBDZWNpbCBSb2FkJyxcclxuICAgICAgICBUb3duOiAnSGFsZScsXHJcbiAgICAgICAgUG9zdENvZGU6ICdXQTE1IDlQQicsXHJcbiAgICAgICAgQ291bnRyeTogJ1VLJ1xyXG4gICAgICB9XHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJBZGRyZXNzZXMoXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPEFkZHJlc3NGb3JtW10+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJBZGRyZXNzZXNGZXRjaGVyLmZldGNoTGlzdCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIG1hcCgocmVzdWx0czogYW55KTogYW55ID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBJRDogcmVzdWx0LmlkLFxyXG4gICAgICAgICAgICBIb3VzZTogcmVzdWx0Lm51bWJlck9yTmFtZSxcclxuICAgICAgICAgICAgU3RyZWV0OiByZXN1bHQuc3RyZWV0LFxyXG4gICAgICAgICAgICBUb3duOiByZXN1bHQudG93bixcclxuICAgICAgICAgICAgUG9zdENvZGU6IHJlc3VsdC5wb3N0Y29kZSxcclxuICAgICAgICAgICAgQ291bnRyeTogcmVzdWx0LmNvdW50cnlDb2RlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJBZGRyZXNzQnlJRChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SG90ZWxDaGFpbihcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8U2VhcmNoSG90ZWxDaGFpbnNSZXN1bHRBcnJheT4gPVxyXG4gICAgICAgIHRoaXMuc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyLmZldGNoTGlzdCh7IHF1ZXJ5OiB0ZXJtIH0pO1xyXG4gICAgICBjb25zdCBmdW5jID0gKHJlc3VsdHM6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXkpOiBhbnlbXSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogYW55W10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAgIChyZXN1bHQ6IFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0KTogYW55ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZpY2VOYW1lcyhcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8Q29uZmVybWFPZmZpY2VOYW1lc1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlci5mZXRjaExpc3QoKS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAoKHJlc3VsdHMpOiBhbnkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHRzKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0cz8ucmVzdWx0cz8ubWFwKChyZXN1bHQ6IENvbmZlcm1hT2ZmaWNlTmFtZXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBpZDogcmVzdWx0LmlkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGdldFJhaWxDYXJkcygpOiBPYnNlcnZhYmxlPFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFJhaWxDYXJkc0ZldGNoZXIuZmV0Y2hMaXN0KCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzKTogYW55ID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM/Lm1hcCgocmVzdWx0OiBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5jb2RlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFpcnBvcnRCeUNvZGUoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxBaXJwb3J0U2VhcmNoUmVzdWx0cz4ge1xyXG4gICAgaWYgKGNvZGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlycG9ydHNGZXRjaGVyLmZldGNoT25lKHsgcXVlcnk6IGNvZGUgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0OiBBaXJwb3J0U2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPIEJFIE9WRVIgUklEREVOIEJZIE9CVCBTVUJDTEFTU0VTXHJcbiAgcHJvdGVjdGVkIGluaXRfc2VhcmNoX29iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgKiBTRUFSQ0ggT0JKRUNUUyBGT1IgR0VUIE1FIFRIRVJFIERPT1IgMiBET09SICAgICAgICAgICpcclxuICAgKiBEaWZmZXJlbmNlKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKiBBbGwgb2JqZWN0cyBoYXZlIGEgcHJpb3JpdHkgb2YgMSBzbyB0aGF0IHRoZXkgYXJlICAgICpcclxuICAgKiBzZWFyY2hlZCBhdCB0aGUgc2FtZSB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKiBVcmxzIGNoYW5nZWQgdG8gZ2V0bWV0aGVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBwcm90ZWN0ZWQgZ2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gZ2V0cyBhbGwgc2VsZWN0ZWQgdHJhdmVsbGVyc1xyXG4gICAqICAgSW1wbGVtZW50ZWQgZm9yIHJhaWwgY2FyZCByZWFzb25zIGluIExVXHJcbiAgICoqL1xyXG4gIGdldFNlbGVjdGVkdHJhdmVsbGVycygpOiBUcmF2ZWxsZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnM7XHJcbiAgfVxyXG5cclxuICByZXNldFNlYXJjaE9iamVjdHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuaW5pdF9zZWFyY2hfb2JqZWN0cygpKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgIFRoZXNlIGFyZSB0aGUgcG9zc2libGUgYXJyYXkgb2YgdmFsdWVzIGZyb20gQVBJIGFyZSBleHB0ZWN0ZWQgYW5kIGZ1bmN0aW9uIG1hbmlwdWxhdGUgdG8gY3JlYXRlIHRoZSBsaXN0XHJcbiAgICBbXCJNYWluXCJdXHJcbiAgICBbXCIxXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiXVxyXG4gICAgW1wiMVwiLCBcIjJcIiwgXCIzXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiXVxyXG4gICAgW1wiU291dGhcIiwgXCJOb3J0aFwiXVxyXG4gICovXHJcbiAgcHVibGljIHByb2Nlc3NUZXJtaW5hbHModGVybWluYWxzOiBzdHJpbmdbXSk6IFRlcm1pbmFsc1R5cGVbXSB7XHJcbiAgICBjb25zdCB0ZW1wVGVybWluYWw6IFRlcm1pbmFsc1R5cGVbXSA9IFtdO1xyXG4gICAgaWYgKFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzEnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzInKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzMnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzQnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzUnKVxyXG4gICAgKSB7XHJcbiAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiAnQW55IFRlcm1pbmFsJywgdmFsdWU6ICdBbnknIH0pO1xyXG4gICAgICB0ZXJtaW5hbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgVGVybWluYWwgJHtpdGVtfWAsIHZhbHVlOiBgJHtpdGVtfWAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRlcm1pbmFscy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogYCR7dGVybWluYWxzWzBdfSBUZXJtaW5hbGAsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogJ0FueSBUZXJtaW5hbCcsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgICB0ZXJtaW5hbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGAke2l0ZW19IFRlcm1pbmFsYCwgdmFsdWU6IGAke2l0ZW19YCB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBUZXJtaW5hbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNhdmVVc2VyQWRkcmVzcyhcclxuICAgIGFkZHJlc3M6IFNhdmVVc2VyQWRkcmVzc011dGF0aW9uVmFyaWFibGVzXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoYWRkcmVzcykge1xyXG4gICAgICBhd2FpdCB0aGlzLnNhdmVVc2VyQWRkcmVzc1VwZGF0ZXIudXBkYXRlT25lKGFkZHJlc3MpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbkJvb2soc2VydmljZTogU2VydmljZVR5cGUpIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmNhbkJvb2soc2VydmljZSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc1Bvc3Rjb2RlVmFpbGQocG9zdGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyLnRlc3QoeyBwb3N0Y29kZSB9KTtcclxuICB9XHJcblxyXG4gIC8qIENyZWF0ZSBRdWVyeSBEZWZhdWx0cyBTdGFydCAqL1xyXG4gIC8qXHJcbiAgICogQ3JlYXRlIHRoZSBDYWIgSGlyZSBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbSwgYXV0byBmaWxsIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAuLi5hcmdzIGV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLnNldENhYkhpcmVRdWVyeShkYXRhLnF1ZXJ5LCB7IGRlcGFydHM6IG1vbWVudERhdGVUaW1lIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hDYWJIaXJlQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlQ2FiSGlyZVF1ZXJ5KC4uLmFyZ3M6IGFueSk6IENhYkhpcmVUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IENhYkhpcmVUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFpcnBvcnQ6IG51bGwsXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBjb3VudHJ5Q29kZTogbnVsbCxcclxuICAgICAgZGVwYXJ0czogdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCksXHJcbiAgICAgIGZyb21BZGRyZXNzOiBudWxsLFxyXG4gICAgICBmcm9tU3RhdGlvbjogbnVsbCxcclxuICAgICAgZnJvbUxvY2F0aW9uVHlwZTogVGF4aUZvcm1Nb2RlLkFERFJFU1MsXHJcbiAgICAgIGluZmFudHM6IDAsXHJcbiAgICAgIHRvQWRkcmVzczogbnVsbCxcclxuICAgICAgdG9TdGF0aW9uOiBudWxsLFxyXG4gICAgICB0b0xvY2F0aW9uVHlwZTogVGF4aUZvcm1Nb2RlLkFERFJFU1MsXHJcbiAgICAgIHZlaGljbGVUeXBlOiBDYWJIaXJlVmVoaWNsZVR5cGUuQW55LFxyXG4gICAgICB2aWFzRnJvbTogbnVsbCxcclxuICAgICAgdmlhc1RvOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPENhYkhpcmVUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnZGVwYXJ0cyddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgdGhlIENhciBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FySGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaENhckhpcmVBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hDYXJIaXJlQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VDYXJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FySGlyZVRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogQ2FySGlyZVRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYWlyQ29uOiBudWxsLFxyXG4gICAgICBjYXJDbGFzczogbnVsbCxcclxuICAgICAgY2FyVHlwZTogbnVsbCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNob3NlblZlbmRvcjogbnVsbCxcclxuICAgICAgY2l0eURyb3BvZmY6IG51bGwsXHJcbiAgICAgIGNpdHlEcm9wb2ZmRGVwb3Q6IG51bGwsXHJcbiAgICAgIGNpdHlQaWNrdXA6IG51bGwsXHJcbiAgICAgIGNpdHlQaWNrdXBEZXBvdDogbnVsbCxcclxuICAgICAgZHJvcG9mZl9jb3VudHJ5OiAnR0InLFxyXG4gICAgICBkcm9wb2ZmX2RhdGV0aW1lOiBudWxsLFxyXG4gICAgICBkcm9wb2ZmX2xvY2F0aW9uOiBudWxsLFxyXG4gICAgICBlc3RpbWF0ZWRNaWxlYWdlOiBudWxsLFxyXG4gICAgICBsb2NhdGlvblR5cGU6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9jb3VudHJ5OiBudWxsLFxyXG4gICAgICBwaWNrdXBfZGF0ZXRpbWU6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9sb2NhdGlvbjogbnVsbCxcclxuICAgICAgcG9zdGNvZGVEcm9wb2ZmOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZURyb3BvZmZSYXc6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlUGlja3VwOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZVBpY2t1cFJhdzogbnVsbCxcclxuICAgICAgcmV0dXJuX3RvX3BpY2t1cDogdHJ1ZSxcclxuICAgICAgdHJhbnNtaXNzaW9uOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPENhckhpcmVUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsncGlja3VwX2RhdGV0aW1lJywgJ2Ryb3BvZmZfZGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEZsaWdodCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoRmxpZ2h0c0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEZsaWdodHNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUZsaWdodFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEZsaWdodFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcclxuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcclxuICAgIGNvbnN0IG1vbWVudEluRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogRmxpZ2h0VGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcclxuICAgICAgY2FiaW5DbGFzczogRmxpZ2h0Q2FiaW5DbGFzcy5BbnksXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBjaG9zZW5TZWFyY2hUeXBlOiBudWxsLFxyXG4gICAgICBkZXBhcnRMb2NhdGlvbjogbnVsbCxcclxuICAgICAgZmFyZVR5cGU6IEZhcmVUeXBlLkZsZXhpYmxlLFxyXG4gICAgICBpbmJvdW5kRGF0ZTogbW9tZW50T3V0RGF0ZVRpbWUsXHJcbiAgICAgIGluVGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgbWF4Q29ubmVjdGlvbnM6IG51bGwsXHJcbiAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogZmFsc2UsXHJcbiAgICAgIG11bHRpRGVzdGluYXRpb246IFtdLFxyXG4gICAgICBvdXRCb3VuZERhdGU6IG1vbWVudEluRGF0ZVRpbWUsXHJcbiAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXHJcbiAgICAgIHByZWZlcnJlZENhcnJpZXJzOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sXHJcbiAgICAgIHJldHVybkNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEZsaWdodFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydvdXRCb3VuZERhdGUnLCAnaW5ib3VuZERhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEhvdGVsIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlSG90ZWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaEhvdGVsc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEhvdGVsc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlSG90ZWxRdWVyeSguLi5hcmdzOiBhbnkpOiBIb3RlbFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgY2hlY2tpbl9kYXRlOiBtb21lbnQoKS5zZXQoJ2hvdXInLCAyMykuc2V0KCdtaW51dGUnLCA1OSksXHJcbiAgICAgIGNoZWNrb3V0X2RhdGU6IG1vbWVudCgpLmFkZCgxLCAnZGF5Jykuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpLFxyXG4gICAgICBjb3VudHJ5OiB7IGNDb2RlOiAnR0InLCBjTmFtZTogJ1VuaXRlZCBLaW5nZG9tJyB9LFxyXG4gICAgICBjdXJyZW5jeTogJ0dCUCcsXHJcbiAgICAgIGRpc3RhbmNlOiA1LCAvLyBkZWZhdWx0IDUgbWlsZXMgcmFkaXVzXHJcbiAgICAgIGhvdGVsX2F2YWlsYWJpbGl0eTogbnVsbCxcclxuICAgICAgaG90ZWxfY2hhaW46IG51bGwsXHJcbiAgICAgIGhvdGVsX25hbWU6IG51bGwsXHJcbiAgICAgIGxvY2F0aW9uX3R5cGVfc2VsZWN0OiBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXHJcbiAgICAgIGxvY2F0aW9uOiBudWxsLCAvLyBtaWdodCB3YW50IHRvIHNwbGl0IHRoaXMgb3V0IHRvIGNpdHksIGFpcnBvcnQsIG9mZmljZSwgcmFpbHN0YXRpb24gLSB0aGlzIHdpbGwgZG8gZm9yIG5vd1xyXG4gICAgICBub19vZl9vY2N1cGFudHM6IDEsIC8vIHNpbWlsYXJseSB0aGluayB0aGlzIGlzIGEgbWF4IG9mIDNcclxuICAgICAgbm9fb2Zfcm9vbXM6IDEsIC8vIG1heCBvZiA0IGluIG9sZCBzYWJzLCBub3Qgc3VyZSBoZXJlXHJcbiAgICAgIG9mZmljZTogbnVsbCxcclxuICAgICAgcG9zdGNvZGU6IG51bGwsXHJcbiAgICAgIHByZWZlcmVkX2hvdGVsc19vbmx5OiBmYWxzZSxcclxuICAgICAgdHJhaW5zU3RhdGlvbjogbnVsbFxyXG4gICAgfSBhcyBIb3RlbFRlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8SG90ZWxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnY2hlY2tpbl9kYXRlJywgJ2NoZWNrb3V0X2RhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIExvdW5nZXMgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VMb3VuZ2VzUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hMb3VuZ2VzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoTG91bmdlc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlTG91bmdlc1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IExvdW5nZXNUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZhbERhdGV0aW1lOiBtb21lbnQoKSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGluZmFudHM6IDAsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcclxuICAgICAgdGVybWluYWw6IG51bGxcclxuICAgIH0gYXMgTG91bmdlc1RlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8TG91bmdlc1RlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydhcnJpdmFsRGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFBhcmtpbmcgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VQYXJraW5nUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hQYXJraW5nQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoUGFya2luZ0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlUGFya2luZ1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IFBhcmtpbmdUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50T3V0RGF0ZVRpbWUsXHJcbiAgICAgIGNhclBhcmtlZEZvcllvdTogbnVsbCxcclxuICAgICAgZGVwYXJ0RGF0ZXRpbWU6IG1vbWVudEluRGF0ZVRpbWUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcclxuICAgICAgbWVldEFuZEdyZWV0OiBudWxsLFxyXG4gICAgICBvbkFpcnBvcnQ6IG51bGwsXHJcbiAgICAgIG91dEZsaWdodE51bWJlcjogbnVsbCxcclxuICAgICAgcGFya0FuZFJpZGU6IG51bGwsXHJcbiAgICAgIHBhcmtBbmRTdHJvbGw6IG51bGwsXHJcbiAgICAgIHJlY29tbWVuZGVkOiBudWxsLFxyXG4gICAgICB0ZXJtaW5hbDogbnVsbFxyXG4gICAgfSBhcyBQYXJraW5nVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxQYXJraW5nVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2Fycml2YWxEYXRldGltZScsICdkZXBhcnREYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VSYWlsUXVlcnkoLi4uYXJnczogYW55KTogUmFpbFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobW9tZW50KCksIDMwKTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IFJhaWxUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhaXJwb3J0RXhwcmVzc1N0YXRpb246IG51bGwsXHJcbiAgICAgIGFwcGx5UmFpbGNhcmRzOiBmYWxzZSxcclxuICAgICAgY2FybmV0VGlja2V0OiBmYWxzZSxcclxuICAgICAgY2hvc2VuU2VhcmNoQ2xhc3M6IFJhaWxDbGFzcy5BbGwsXHJcbiAgICAgIGNob3NlblNlYXJjaFR5cGU6IFJhaWxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5LFxyXG4gICAgICBkaXNhYmxlQXV0b0Rpc2NvdW50czogZmFsc2UsXHJcbiAgICAgIGV4dHJhVGltZTogZmFsc2UsXHJcbiAgICAgIGluQm91bmREYXRlVGltZTogdGltZSxcclxuICAgICAgaXNBaXJwb3J0RXhwcmVzczogZmFsc2UsXHJcbiAgICAgIG5vT2ZBZHVsdHM6IDAsXHJcbiAgICAgIG5vT2ZDaGlsZHJlbjogMCxcclxuICAgICAgb3BlblJldHVybjogZmFsc2UsXHJcbiAgICAgIG91dGJvdW5kQ3JpdGVyaWE6IFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsXHJcbiAgICAgIG91dEJvdW5kRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIHByaW9yaXRpc2VCeVByaWNlOiBmYWxzZSxcclxuICAgICAgcmV0dXJuQ3JpdGVyaWE6IFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsXHJcbiAgICAgIHRyYXZlbGxpbmdGcm9tOiBudWxsLFxyXG4gICAgICB0cmF2ZWxsaW5nVG86IG51bGwsXHJcbiAgICAgIHZpYTogZmFsc2UsXHJcbiAgICAgIHZpYUxvY2F0aW9uOiBudWxsLFxyXG4gICAgICByYWlsQ2FyZHM6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8UmFpbFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydpbkJvdW5kRGF0ZVRpbWUnLCAnb3V0Qm91bmREYXRlVGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VJcmxRdWVyeSguLi5hcmdzOiBhbnkpOiBJcmxUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsOiBJcmxUZW1wUGFyYW1zID0ge1xyXG4gICAgICBzdXBwbGllcjogbnVsbCwgLy8gSVJMU3VwcGxpZXIhXHJcbiAgICAgIGNvdW50cnlDb2RlOiAnJyxcclxuICAgICAgLy8gam91cm5leVR5cGU6IHRoaXMuam91cm5leVR5cGUsIC8vIElSTEpvdXJuZXlUeXBlIVxyXG4gICAgICBjbGFzczogbnVsbCwgLy8gSVJMQ2xhc3NcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGltZSxcclxuICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogbnVsbCxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IG51bGwsXHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aW1lLFxyXG4gICAgICBqb3VybmV5VHlwZTogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxJcmxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsncmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUnLCAnb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgRXVyb3N0YXIgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge0V1cm9zdGFyVGVtcFBhcmFtc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoRXVyb3N0YXJBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUV1cm9zdGFyUXVlcnkoLi4uYXJnczogYW55KTogRXVyb3N0YXJUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IEV1cm9zdGFyVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcclxuICAgICAgY2FiaW5DbGFzczogRmxpZ2h0Q2FiaW5DbGFzcy5BbnksXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBjaG9zZW5TZWFyY2hUeXBlOiBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuLFxyXG4gICAgICBkZXBhcnRMb2NhdGlvbjogbnVsbCxcclxuICAgICAgZmFyZVR5cGU6IEZhcmVUeXBlLkZsZXhpYmxlLFxyXG4gICAgICBpbmJvdW5kRGF0ZTogbW9tZW50T3V0RGF0ZVRpbWUsXHJcbiAgICAgIGluVGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgbWF4Q29ubmVjdGlvbnM6IG51bGwsXHJcbiAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogZmFsc2UsXHJcbiAgICAgIG11bHRpRGVzdGluYXRpb246IFtdLFxyXG4gICAgICBvdXRCb3VuZERhdGU6IG1vbWVudEluRGF0ZVRpbWUsXHJcbiAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXHJcbiAgICAgIHByZWZlcnJlZENhcnJpZXJzOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sXHJcbiAgICAgIHJldHVybkNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEV1cm9zdGFyVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ291dEJvdW5kRGF0ZScsICdpbmJvdW5kRGF0ZSddXHJcbiAgICApO1xyXG4gIH1cclxuICAvKiBDcmVhdGUgUXVlcnkgRGVmYXVsdHMgRW5kICovXHJcblxyXG4gIHNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEF1dG9Mb2dvdXRDb25maWcoKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE92ZXJ3cml0ZSBpZiB0aGUgT0JUIGRpc3BsYXlzIGEgbGlzdCBvZiBvZmZpY2VzIGluc3RlYWQgb2Ygc2VhcmNoaW5nIG9uIHRoZW1cclxuICAgKi9cclxuICBwdWJsaWMgc2hvdWxkRmV0Y2hBbGxPZmZpY2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBpc0ZsaWdodHNHcm91cGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBnZXRDb3VudHJ5RnVsbE5hbWVGcm9tQ291bnRyeUNvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBmdWxsTmFtZSA9ICdVbmtub3duJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNvdW50cnkgPSB0aGlzLmNvdW50cmllc1tpXTtcclxuXHJcbiAgICAgIGlmIChjb3VudHJ5LmNDb2RlID09PSBjb2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuY05hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVsbE5hbWU7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyUmVjZW50U2VhcmNoZXMoXHJcbiAgICBzZXJ2aWNlVHlwZT86IFNlcnZpY2VUeXBlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNlbnRTZWFyY2hbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnkgPSB7IHNlcnZpY2VUeXBlIH07XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgY29uc3QgZnVuYyA9IChcclxuICAgICAgcmVzdWx0czogR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXlcclxuICAgICk6IFJlY2VudFNlYXJjaFtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogUmVjZW50U2VhcmNoW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHQpOiBSZWNlbnRTZWFyY2ggPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXN1bHQuc2VydmljZVR5cGUsXHJcbiAgICAgICAgICAgIHNlYXJjaEFyZ3M6IHJlc3VsdC5zZWFyY2hBcmdzLFxyXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHJlc3VsdC5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogcmVzdWx0LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdHJhdmVsRGF0ZTogcmVzdWx0LnRyYXZlbERhdGUsXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnM6IHJlc3VsdC50cmF2ZWxsZXJzXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVSZWNlbnRTZWFyY2hCeUlEKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVJlY2VudFNlYXJjaChxdWVyeTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzKTogdm9pZCB7XHJcbiAgICBpZiAocXVlcnkpIHtcclxuICAgICAgdGhpcy5iYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXIudXBkYXRlT25lKHF1ZXJ5KS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIGV1cm9zdGFyIHN0YXRpb24gbG9jYXRpb25zIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIGdpdmVuXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHdlIHdhbnQgdG8gc2VhcmNoIGJ5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBsb29rdXBFdXJvc3RhclN0YXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnNvbGUubG9nKCd0ZXJtfCAnLCB0ZXJtKTtcclxuICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy5ldXJvc3RhdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMuZXVyb3N0YXRpb25zLmZpbHRlcih2ID0+IHYuZGVzdGluYXRpb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRlcm0udG9Mb3dlckNhc2UoKSkgPiAtMSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoVHJhdmVsbGVycyhcclxuICAgIGlucHV0OiBzdHJpbmcsXHJcbiAgICBzZWFyY2hUcmF2ZWxsZXJzQnk6IFRyYXZlbGxlclNlYXJjaFR5cGVzXHJcbiAgKTogT2JzZXJ2YWJsZTxUcmF2ZWxsZXJbXT4ge1xyXG4gICAgY29uc3QgdHlwZTogQm9va2VyVHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJvb2tpbmdUeXBlKCk7XHJcbiAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gICAgLyogVE9ET1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlQWdlbnRDYW5Cb29rRm9yKCkpIHtcclxuICAgICAgdHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlVmFsdWUoJ0FnZW50Q2FuQm9va0ZvcicpO1xyXG4gICAgfSovXHJcbiAgICBpZiAoXHJcbiAgICAgIHR5cGUgJiZcclxuICAgICAgdHlwZSAhPT0gQm9va2VyVHlwZS5TZWxmQm9vayAmJlxyXG4gICAgICB0eXBlICE9PSBCb29rZXJUeXBlLlRyYXZlbGxlciAmJlxyXG4gICAgICBpbnB1dC5sZW5ndGggPj0gMVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGlucHV0V29yZHMgPSBpbnB1dC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oW1xcd10pKy9nKTtcclxuICAgICAgY29uc3QgYXJnczogU2VhcmNoVXNlckNhbkJvb2tGb3JRdWVyeVZhcmlhYmxlcyA9IHt9O1xyXG4gICAgICBzd2l0Y2ggKHNlYXJjaFRyYXZlbGxlcnNCeSkge1xyXG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMubmFtZTpcclxuICAgICAgICAgIGFyZ3MudXNlck5hbWUgPSBpbnB1dFdvcmRzLmxlbmd0aCA+IDEgPyBpbnB1dFdvcmRzWzBdIDogaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLmVtYWlsOlxyXG4gICAgICAgICAgYXJncy5lbWFpbCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5lbXBsb3llZU51bWJlcjpcclxuICAgICAgICAgIGFyZ3MuZW1wbG95ZWVJZCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIuZmV0Y2hMaXN0KGFyZ3MpLnBpcGUoXHJcbiAgICAgICAgbWFwKChkYXRhOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBhLnN1cm5hbWUgPCBiLnN1cm5hbWUgPyAtMSA6IGEuc3VybmFtZSA+IGIuc3VybmFtZSA/IDEgOiAwO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
1336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYnRzZXJ2aWNlcy9iYXNlL3NyYy9saWIvdmVuZG9yL3NlcnZpY2VzL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFLL0UsT0FBTyxFQUlMLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULGVBQWUsRUFFZixXQUFXLEVBR1gsa0JBQWtCLEVBWWxCLGdCQUFnQixFQU9oQixjQUFjLEVBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLFVBQVUsRUFDWCxNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ25CLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBU3hFLE9BQU8sRUFNTCxhQUFhLEVBMEJkLE1BQU0sZ0JBQWdC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UUFBUSxrQkFBa0IsRUFBRTtnQkFDMUIsS0FBSyxvQkFBb0IsQ0FBQyxJQUFJO29CQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDOUQsTUFBTTtnQkFDUixLQUFLLG9CQUFvQixDQUFDLEtBQUs7b0JBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUNuQixNQUFNO2dCQUNSLEtBQUssb0JBQW9CLENBQUMsY0FBYztvQkFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3hCLE1BQU07YUFDVDtZQUVELE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQzNELEdBQUcsQ0FBQyxDQUFDLElBQWlCLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN4QixPQUFPLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BFLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNIO0lBQ0gsQ0FBQzs7QUFqd0RNLDZDQUFpQixHQUFXLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBDb3VudHJpZXMgZnJvbSAnLi4vZGF0YS9jb3VudHJpZXMuanNvbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBhcmtpbmdFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9wYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hPYmplY3QsXHJcbiAgU2VhcmNoT2JqZWN0c1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvc2VhcmNoLW9iamVjdHMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzLFxyXG4gIEFpcnBvcnQsXHJcbiAgQmFza2V0SXRlbSxcclxuICBCb29rZXJUeXBlLFxyXG4gIEZhcmVUeXBlLFxyXG4gIFJhaWxDbGFzcyxcclxuICBSYWlsSm91cm5leVR5cGUsXHJcbiAgU2VhcmNoQWlycG9ydHMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgU2F2ZVVzZXJBZGRyZXNzTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgQ2FySGlyZURlcG90LFxyXG4gIENhYkhpcmVWZWhpY2xlVHlwZSxcclxuICBDb25mZXJtYU9mZmljZU5hbWVzLFxyXG4gIENvbmZlcm1hT2ZmaWNlSW5mbyxcclxuICBDb25mZXJtYU9mZmljZVJlc3VsdCxcclxuICBDYXJib25BbGxvd2FuY2UsXHJcbiAgUmlza0FsZXJ0LFxyXG4gIFJpc2tMZXZlbCxcclxuICBSYWlsU3RhdGlvbixcclxuICBHZXRSaXNrQWxlcnRzUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoQWlybGluZXMsXHJcbiAgQWlybGluZVJlc3VsdCxcclxuICBIb3RlbEl0aW5lcmFyeSxcclxuICBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gIFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyLFxyXG4gIFNlYXJjaFVzZXJDYW5Cb29rRm9yUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBJcmxTdXBwbGllclN0YXRpb24sXHJcbiAgSXJsU3VwcGxpZXIsXHJcbiAgSXJsSm91cm5leVR5cGVcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHsgTG91bmdlc0VudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2xvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBIb3RlbEVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2hvdGVsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FyaGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEZsaWdodEVudGVycHJpc2VTZWFyY2gsXHJcbiAgVGltZVdpbmRvd1xyXG59IGZyb20gJy4uL2NsYXNzZXMvZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuLi9jbGFzc2VzL2NhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxFbnRlcnByaXNlU2VhcmNoLFxyXG4gIFJhaWxTZWFyY2hDcml0ZXJpYVxyXG59IGZyb20gJy4uL2NsYXNzZXMvcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4uL2NsYXNzZXMvaGVscGVycyc7XHJcbmltcG9ydCB7IEJhc2VIb3RlbEF2YWxpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vaG90ZWwtYXZhbGxpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb21lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hQb3N0Y29kZUZldGNoZXIsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1wb3N0Y29kZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc0Zvcm0sXHJcbiAgQWlycG9ydFNlYXJjaFJlc3VsdHMsXHJcbiAgQ2FySGlyZURlcG90UmVzdWx0QXJyYXksXHJcbiAgQ291bnRyeUNvZGUsXHJcbiAgTG9jYXRpb25EZXRhaWxzLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgUmFpbEFpcnBvcnQsXHJcbiAgUm91dGVyLFxyXG4gIFNlYXJjaENpdGllc1Jlc3VsdCxcclxuICBTZWFyY2hDaXRpZXNSZXN1bHRBcnJheSxcclxuICBTZWFyY2hQb3N0Y29kZXNSZXN1bHQsXHJcbiAgU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0LFxyXG4gIFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdEFycmF5LFxyXG4gIFRlcm1pbmFsc1R5cGUsXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0LFxyXG4gIFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNSZXN1bHQsXHJcbiAgU2VhcmNoUmlza0FsZXJ0c1Jlc3VsdCxcclxuICBBaXJsaW5lc1NlYXJjaFJlc3VsdCxcclxuICBPQlRBaXJsaW5lc0RldGFpbHMsXHJcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXksXHJcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0LFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBIb3RlbFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgU2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHQsXHJcbiAgU2VhcmNoSXJsU3RhdGlvbnNSZXN1bHQsXHJcbiAgU2VhcmNoSXJsU3RhdGlvbnNSZXN1bHRBcnJheSxcclxuICBDb25mZXJtYU9mZmljZU5hbWVSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFJhaWxTdGF0aW9uc0ZldGNoZXIsXHJcbiAgU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtcmFpbC1zdGF0aW9ucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlTG91bmdlUXVvdGVGZXRjaGVyLFxyXG4gIExvdW5nZVF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9sb3VuZ2UtcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVBhcmtpbmdRdW90ZUZldGNoZXIsXHJcbiAgUGFya2luZ1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9wYXJraW5nLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSG90ZWxRdW90ZUZldGNoZXIsXHJcbiAgSG90ZWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaG90ZWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUNhcmhpcmVRdW90ZUZldGNoZXIsXHJcbiAgQ2FySGlyZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXIsXHJcbiAgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FyaGlyZS1hdmFpbGFiaWxpdHktZGV0YWlsLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyLFxyXG4gIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlUmFpbFF1b3RlRmV0Y2hlcixcclxuICBSYWlsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3JhaWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQgeyBSZWdFeHBzIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2V4cC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgU2VhcmNoUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJwb3J0c0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlycG9ydHNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcnBvcnRzLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hBaXJsaW5lc0ZldGNoZXIsXHJcbiAgU2VhcmNoQWlybGluZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWFpcmxpbmVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIFVzZXJTZXJ2aWNlc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENpdGllc1F1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtY2l0aWVzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hDb25mZXJtYUNpdHlGZXRjaGVyLFxyXG4gIFNlYXJjaENvbmZlcm1hQ2l0aWVzUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1jb25mZXJtYS1jaXRpZXMuZmV0Y2hlcic7XHJcbmltcG9ydCB7IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlIH0gZnJvbSAnLi9odHRwLWNhbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEhvdGVsQXZhbGluaWxpdHlGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2hvdGVsLWF2YWxpYWJpbGl0eS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVVzZXJBZGRyZXNzVXBkYXRlcixcclxuICBTYXZlVXNlckFkZHJlc3NVcGRhdGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NhdmUtdXNlci1hZGRyZXNzLnVwZGF0ZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VVc2VyQWRkcmVzc2VzRmV0Y2hlcixcclxuICBVc2VyQWRkcmVzc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvdXNlci1hZGRyZXNzZXMuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VDb25mZXJtYU9mZmljZU5hbWVzRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZU5hbWVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2NvbmZlcm1hLW9mZmljZS1uYW1lcy5mZXRjaGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUNvbmZlcm1hT2ZmaWNlRmV0Y2hlcixcclxuICBDb25mZXJtYU9mZmljZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtb2ZmaWNlLmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlR2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlcixcclxuICBHZXRVc2VyQ29tcGFueU9mZmljZXNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItY29tcGFueS1vZmZpY2VzLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hIb3RlbENoYWluc0ZldGNoZXIsXHJcbiAgU2VhcmNoSG90ZWxDaGFpbnNRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvc2VhcmNoLWhvdGVsLWNoYWlucy5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXIsXHJcbiAgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlXHJcbn0gZnJvbSAnLi4vdGVzdGVycy9wb3N0Y29kZS12YWxpZGF0ZS50ZXN0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoRGVwb3RGZXRjaGVyLFxyXG4gIFNlYXJjaERlcG90UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1kZXBvdHMuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXIsXHJcbiAgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXN0YXRpb24uZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXIsXHJcbiAgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC1pcmwtc3RhdGlvbnMuZmV0Y2hlcidcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlcixcclxuICBDb25mZXJtYVF1aWNrbGlzdEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY29uZmVybWEtcXVpY2tsaXN0LmZldGNoZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyLFxyXG4gIERlbGV0ZVVzZXJBZGRyZXNzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtdXNlci1hZGRyZXNzLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlcixcclxuICBEZWxldGVSZWNlbnRTZWFyY2hGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBCYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXIsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2F2ZS1yZWNlbnQtc2VhcmNoLXVwZGF0ZXInO1xyXG5cclxuaW1wb3J0IHsgSG90ZWxUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JaG90ZWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBSYWlsVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBGbGlnaHRUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgTG91bmdlc1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lsb3VuZ2VzLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgUGFya2luZ1RlbXBQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lwYXJraW5nLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgQ2FiSGlyZVRlbXBQYXJhbXMsIFRheGlGb3JtTW9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWNhYmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBDYXJIaXJlVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWNhcmhpcmUtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZUZldGNoZXIsXHJcbiAgR2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItY3VycmVudC1jYXJib24tYWxsb3dhbmNlLmZldGNoZXInO1xyXG5pbXBvcnQgeyBCYXNlV2ViVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi93ZWJ0b2tlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0Umlza0FsZXJ0c0ZldGNoZXIsXHJcbiAgR2V0Umlza0FsZXJ0c0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJpc2stYWxlcnRzLmZldGNoZXInO1xyXG5pbXBvcnQgeyBJcmxUZW1wUGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JaXJsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgSVJMRW50ZXJwcmlzZVNlYXJjaCwgSXJsU2VhcmNoQ3JpdGVyaWEgfSBmcm9tICcuLi9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IEZsaWdodFNlYXJjaFR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2ZsaWdodC1zZWFyY2gtdHlwZS5lbnVtJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXIsXHJcbiAgR2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1yZWNlbnQtc2VhcmNoZXMuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsY2FyZHNGZXRjaGVyLFxyXG4gIEdldFJhaWxDYXJkc0ZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtY2FyZHMuZmV0Y2hlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJhc2VFdXJvc3RhclF1b3RlRmV0Y2hlcixcclxuICBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9ldXJvc3Rhci1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHsgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi4vY2xhc3Nlcy9ldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IEV1cm9zdGFyVGVtcFBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSWV1cm9zdGFyLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IEV1cm9TdGF0aW9ucyBmcm9tICcuLi9kYXRhL2V1cm8tc3RhdGlvbnMuanNvbic7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIsXHJcbiAgU2VhcmNoVXNlckNhbkJvb2tGb3JGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3NlYXJjaC11c2Vycy1jYW4tYm9vay1mb3ItZmV0Y2hlcic7XHJcbmltcG9ydCB7IEV1cm9zdGFyU2VhcmNoVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZXVyb3N0YXItc2VhcmNoLXR5cGUuZW51bSc7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYX1RSQVZFTExFUlMgPSA4O1xyXG5cclxuZXhwb3J0IGVudW0gVHJhdmVsbGVyU2VhcmNoVHlwZXMge1xyXG4gIGVtYWlsID0gJ2VtYWlsJyxcclxuICBuYW1lID0gJ25hbWUnLFxyXG4gIGVtcGxveWVlTnVtYmVyID0gJ2VtcGxveWVlTnVtYmVyJ1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0SW50ZXJmYWNlIHtcclxuICBoaWdoZXN0OiBudW1iZXI7XHJcbiAgY3VycmVudEl0ZW06IFNlYXJjaE9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZTxcclxuICBTUF9RIGV4dGVuZHMgU2VhcmNoUG9zdGNvZGVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTUl9RIGV4dGVuZHMgU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlclR5cGUsXHJcbiAgU0xfUSBleHRlbmRzIExvdW5nZVF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1BBX1EgZXh0ZW5kcyBQYXJraW5nUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTRkxfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0hPX1EgZXh0ZW5kcyBIb3RlbFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0NIX1EgZXh0ZW5kcyBDYXJIaXJlRmV0Y2hlclR5cGUsXHJcbiAgQ0hBRF9RIGV4dGVuZHMgQ2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXJUeXBlLFxyXG4gIFNUSF9RIGV4dGVuZHMgQ2FiaGlyZVF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0FfUSBleHRlbmRzIFNlYXJjaEFpcnBvcnRzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBTQUxfUSBleHRlbmRzIFNlYXJjaEFpcmxpbmVzUXVvdGVGZXRjaGVyVHlwZSxcclxuICBIQV9RIGV4dGVuZHMgSG90ZWxBdmFsaW5pbGl0eUZldGNoZXJUeXBlLFxyXG4gIFNDX1EgZXh0ZW5kcyBTZWFyY2hDaXRpZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNDQ19RIGV4dGVuZHMgU2VhcmNoQ29uZmVybWFDaXRpZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNSQV9RIGV4dGVuZHMgUmFpbFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0lfUSBleHRlbmRzIElybFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1VBX1EgZXh0ZW5kcyBTYXZlVXNlckFkZHJlc3NVcGRhdGVyVHlwZSxcclxuICBTVV9RIGV4dGVuZHMgVXNlckFkZHJlc3NGZXRjaGVyVHlwZSxcclxuICBHVUNPX1EgZXh0ZW5kcyBHZXRVc2VyQ29tcGFueU9mZmljZXNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIFNIQ19RIGV4dGVuZHMgU2VhcmNoSG90ZWxDaGFpbnNRdW90ZUZldGNoZXJUeXBlLFxyXG4gIElQVl9RIGV4dGVuZHMgVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUeXBlLFxyXG4gIFNEX1EgZXh0ZW5kcyBTZWFyY2hEZXBvdFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlLFxyXG4gIEdPTl9RIGV4dGVuZHMgQ29uZmVybWFPZmZpY2VOYW1lRmV0Y2hlclR5cGUsXHJcbiAgQ09fUSBleHRlbmRzIENvbmZlcm1hT2ZmaWNlRmV0Y2hlclR5cGUsXHJcbiAgRFVBX1EgZXh0ZW5kcyBEZWxldGVVc2VyQWRkcmVzc0ZldGNoZXJUeXBlLFxyXG4gIERSU19RIGV4dGVuZHMgRGVsZXRlUmVjZW50U2VhcmNoRmV0Y2hlclR5cGUsXHJcbiAgU1JTX1EgZXh0ZW5kcyBTYXZlUmVjZW50U2VhcmNoRmV0Y2hlclR5cGUsXHJcbiAgVUNBX1EgZXh0ZW5kcyBHZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZVR5cGUsXHJcbiAgR1JBX1EgZXh0ZW5kcyBHZXRSaXNrQWxlcnRzRmV0Y2hlclR5cGUsXHJcbiAgUUxfUSBleHRlbmRzIENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlclR5cGUsXHJcbiAgR1VSU0ZfUSBleHRlbmRzIEdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXJUeXBlLFxyXG4gIEdSQ0ZfUSBleHRlbmRzIEdldFJhaWxDYXJkc0ZldGNoZXJUeXBlLFxyXG4gIFNFX1EgZXh0ZW5kcyBFdXJvc3RhclF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU1VDQkYgZXh0ZW5kcyBTZWFyY2hVc2VyQ2FuQm9va0ZvckZldGNoZXJUeXBlLFxyXG4gIFNJU19RIGV4dGVuZHMgU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyVHlwZVxyXG4gID4gaW1wbGVtZW50cyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB7XHJcbiAgc3RhdGljIFNFU1NJT05fVFJBVkVMTEVSOiBzdHJpbmcgPSAnc2VhcmNoX3RyYXZlbGxlcnMnO1xyXG5cclxuICBzZWFyY2hlczogU2VhcmNoUGFyYW1zO1xyXG4gIHRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlckluZm9ybWF0aW9uOiBCZWhhdmlvclN1YmplY3Q8VHJhdmVsbGVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRyYXZlbGxlcltdXHJcbiAgPihbXSk7XHJcbiAgZXJyb3JzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xyXG4gIHNlYXJjaExvYWRpbmdEb25lOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIHNlYXJjaFRpbWVkT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KFxyXG4gICAgZmFsc2VcclxuICApO1xyXG4gIG5ld1NlYXJjaFN0YXJ0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oXHJcbiAgICBmYWxzZVxyXG4gICk7XHJcblxyXG4gIGZpcnN0TG9hZCA9IHRydWU7XHJcblxyXG4gIHNlYXJjaF9vYmplY3RzOiBTZWFyY2hPYmplY3RzO1xyXG4gIGhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5ID0gODtcclxuICBzaG93X2Vycm9ycyA9IGZhbHNlO1xyXG4gIHRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBzZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHNlYXJjaF9haXJwb3J0X2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RlZFRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW107XHJcbiAgc2VsZWN0ZWRQbGFjZXM6IGFueSA9IFtdO1xyXG4gIGNvdW50cmllcyA9IENvdW50cmllcztcclxuICBldXJvc3RhdGlvbnM6IHsgZ2F0ZXdheTogc3RyaW5nOyBkZXN0aW5hdGlvbjogc3RyaW5nIH1bXSA9XHJcbiAgICBfLnRvQXJyYXkoRXVyb1N0YXRpb25zKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgc2VhcmNoQWlycG9ydHNGZXRjaGVyOiBCYXNlU2VhcmNoQWlycG9ydHNGZXRjaGVyPFNBX1E+LFxyXG4gICAgcHJvdGVjdGVkIHNlYXJjaEFpcmxpbmVzRmV0Y2hlcjogQmFzZVNlYXJjaEFpcmxpbmVzRmV0Y2hlcjxTQUxfUT4sXHJcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcm90ZWN0ZWQgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJvdGVjdGVkIGhvdGVsQXZhbGliaWxpdHlTZXJ2aWNlOiBCYXNlSG90ZWxBdmFsaWJpbGl0eVNlcnZpY2U8SEFfUT4sXHJcbiAgICBwcml2YXRlIGNpdGllc0ZldGNoZXI6IEJhc2VTZWFyY2hDaXR5RmV0Y2hlcjxTQ19RPixcclxuICAgIHByaXZhdGUgY29uZmVybWFDaXRpZXNGZXRjaGVyOiBCYXNlU2VhcmNoQ29uZmVybWFDaXR5RmV0Y2hlcjxTQ0NfUT4sXHJcbiAgICBwcml2YXRlIHBvc3Rjb2RlRmV0Y2hlcjogQmFzZVNlYXJjaFBvc3Rjb2RlRmV0Y2hlcjxTUF9RPixcclxuICAgIHByaXZhdGUgcmFpbFN0YXRpb25GZXRjaGVyOiBCYXNlU2VhcmNoUmFpbFN0YXRpb25zRmV0Y2hlcjxTUl9RPixcclxuICAgIHByaXZhdGUgc2F2ZVVzZXJBZGRyZXNzVXBkYXRlcjogQmFzZVNhdmVVc2VyQWRkcmVzc1VwZGF0ZXI8U1VBX1E+LFxyXG4gICAgcHJpdmF0ZSB1c2VyQWRkcmVzc2VzRmV0Y2hlcjogQmFzZVVzZXJBZGRyZXNzZXNGZXRjaGVyPFNVX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgZ2V0VXNlckNvbXBhbnlPZmZpY2VzRmV0Y2hlcjogQmFzZUdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXI8R1VDT19RPixcclxuICAgIHByaXZhdGUgc2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyOiBCYXNlU2VhcmNoSG90ZWxDaGFpbnNGZXRjaGVyPFNIQ19RPixcclxuICAgIHByaXZhdGUgYmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyOiBCYXNlVmFsaWRhdGVJc1Bvc3Rjb2RlVmFsaWRUZXN0ZXI8SVBWX1E+LFxyXG4gICAgcHJpdmF0ZSBkZXBvdEZldGNoZXI6IEJhc2VTZWFyY2hEZXBvdEZldGNoZXI8U0RfUT4sXHJcbiAgICBwcml2YXRlIGNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyOiBCYXNlQ29uZmVybWFPZmZpY2VOYW1lc0ZldGNoZXI8R09OX1E+LFxyXG4gICAgcHJpdmF0ZSBjb25mZXJtYU9mZmljZUZldGNoZXI6IEJhc2VDb25mZXJtYU9mZmljZUZldGNoZXI8Q09fUT4sXHJcbiAgICBwcml2YXRlIGJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI6IEJhc2VEZWxldGVVc2VyQWRkcmVzc1VwZGF0ZXI8RFVBX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlRGVsZXRlUmVjZW50U2VhcmNoVXBkYXRlcjogQmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXI8RFJTX1E+LFxyXG4gICAgcHJpdmF0ZSBiYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXI6IEJhc2VTYXZlUmVjZW50U2VhcmNoVXBkYXRlcjxTUlNfUT4sXHJcbiAgICBwcml2YXRlIGdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcjogQmFzZUdldFVzZXJDdXJyZW50Q2FyYm9uQWxsb3dhbmNlRmV0Y2hlcjxVQ0FfUT4sXHJcbiAgICBlbnZpcm9ubWVudDogQmFzZUVudmlyb25tZW50LFxyXG4gICAgbG91bmdlRmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxTTF9RPixcclxuICAgIHBhcmtpbmdGZXRjaGVyOiBCYXNlUGFya2luZ1F1b3RlRmV0Y2hlcjxTUEFfUT4sXHJcbiAgICBodHRwQ2FsbFNlcnZpY2U6IEFic3RyYWN0SHR0cENhbGxTZXJ2aWNlLFxyXG4gICAgZmxpZ2h0RmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxTRkxfUT4sXHJcbiAgICBob3RlbEZldGNoZXI6IEJhc2VIb3RlbFF1b3RlRmV0Y2hlcjxTSE9fUT4sXHJcbiAgICBjYXJoaXJlRmV0Y2hlcjogQmFzZUNhcmhpcmVRdW90ZUZldGNoZXI8U0NIX1E+LFxyXG4gICAgY2FySGlyZUF2YWlsYWJpbGl0eURldGFpbEZldGNoZXI6IEJhc2VDYXJIaXJlQXZhaWxhYmlsaXR5RGV0YWlsRmV0Y2hlcjxDSEFEX1E+LFxyXG4gICAgY2FiaGlyZUZldGNoZXI6IEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyPFNUSF9RPixcclxuICAgIHJhaWxGZXRjaGVyOiBCYXNlUmFpbFF1b3RlRmV0Y2hlcjxTUkFfUT4sXHJcbiAgICBpcmxGZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFNJX1E+LFxyXG4gICAgcHJvdGVjdGVkIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBiYXNlV2ViVG9rZW5TZXJ2aWNlOiBCYXNlV2ViVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByaXNrQWxlcnRzRmV0Y2hlcjogQmFzZUdldFJpc2tBbGVydHNGZXRjaGVyPEdSQV9RPixcclxuICAgIHByaXZhdGUgcXVpY2tsaXN0RmV0Y2hlcjogQmFzZVNlYXJjaENvbmZlcm1hUXVpY2tsaXN0RmV0Y2hlcjxRTF9RPixcclxuICAgIHByaXZhdGUgZ2V0VXNlclJlY2VudFNlYXJjaGVzRmV0Y2hlcjogQmFzZUdldFVzZXJSZWNlbnRTZWFyY2hlc0ZldGNoZXI8R1VSU0ZfUT4sXHJcbiAgICBwcm90ZWN0ZWQgZ2V0UmFpbENhcmRzRmV0Y2hlcjogQmFzZUdldFJhaWxjYXJkc0ZldGNoZXI8R1JDRl9RPixcclxuICAgIGV1cm9zdGFyRmV0Y2hlcjogQmFzZUV1cm9zdGFyUXVvdGVGZXRjaGVyPFNFX1E+LFxyXG4gICAgcHVibGljIHNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXI6IEJhc2VTZWFyY2hVc2Vyc0NhbkJvb2tGb3JGZXRjaGVyPFNVQ0JGPixcclxuICAgIHByb3RlY3RlZCBzZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI6IEJhc2VTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXI8U0lTX1E+XHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZygnRW50ZXJwaXNlIHNlYXJjaCBzZXJ2aWNlIGJlaW5nIGluaXRlZCcpO1xyXG4gICAgdGhpcy5zZWFyY2hlcyA9IHtcclxuICAgICAgW1NlcnZpY2VUeXBlLkxvdW5nZV06IG5ldyBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBsb3VuZ2VGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5QYXJraW5nXTogbmV3IFBhcmtpbmdFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIHBhcmtpbmdGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5GbGlnaHRdOiBuZXcgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaChcclxuICAgICAgICBmbGlnaHRGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgdXNlclNlcnZpY2UsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5Ib3RlbF06IG5ldyBIb3RlbEVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgaG90ZWxGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgdXNlclNlcnZpY2UsXHJcbiAgICAgICAgZW52aXJvbm1lbnQsXHJcbiAgICAgICAgaG90ZWxBdmFsaWJpbGl0eVNlcnZpY2UsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGh0dHBDYWxsU2VydmljZSxcclxuICAgICAgICBxdWlja2xpc3RGZXRjaGVyLFxyXG4gICAgICAgIGdldFJhaWxTdGF0aW9uRmV0Y2hlclxyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuQ2FyXTogbmV3IENhcmhpcmVFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGNhcmhpcmVGZXRjaGVyLFxyXG4gICAgICAgIGNhckhpcmVBdmFpbGFiaWxpdHlEZXRhaWxGZXRjaGVyLFxyXG4gICAgICAgIGhlbHBlcnMsXHJcbiAgICAgICAgYmFza2V0U2VydmljZSxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICksXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5DYWJdOiBuZXcgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgY2FiaGlyZUZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBzdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2VcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXTogbmV3IElSTEVudGVycHJpc2VTZWFyY2goXHJcbiAgICAgICAgaXJsRmV0Y2hlcixcclxuICAgICAgICBzZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXIsXHJcbiAgICAgICAgaGVscGVycyxcclxuICAgICAgICBiYXNrZXRTZXJ2aWNlLFxyXG4gICAgICAgIHN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKSxcclxuICAgICAgW1NlcnZpY2VUeXBlLkZhc3RUcmFja106IG51bGwsXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5Db2FjaF06IG51bGwsXHJcbiAgICAgIFtTZXJ2aWNlVHlwZS5SYWlsXTogbmV3IFJhaWxFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIHJhaWxGZXRjaGVyLFxyXG4gICAgICAgIGdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApLFxyXG4gICAgICBbU2VydmljZVR5cGUuRXVyb3N0YXJdOiBuZXcgRXVyb3N0YXJFbnRlcnByaXNlU2VhcmNoKFxyXG4gICAgICAgIGV1cm9zdGFyRmV0Y2hlcixcclxuICAgICAgICBoZWxwZXJzLFxyXG4gICAgICAgIHVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIGJhc2tldFNlcnZpY2UsXHJcbiAgICAgICAgc3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApXHJcbiAgICB9O1xyXG4gICAgY29uc29sZS5sb2coJ05ld2x5IGNyZWF0ZWQgc2VhcmNoIG9iamVjdHM6ICcsIHRoaXMuc2VhcmNoZXMpO1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmluaXRfc2VhcmNoX29iamVjdHMoKSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8XHJcbiAgICAgIFRyYXZlbGxlcltdXHJcbiAgICA+KEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUik7XHJcbiAgICB0aGlzLnRyYXZlbGxlckluZm9ybWF0aW9uLm5leHQodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMpO1xyXG4gICAgdXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJTZXJ2aWNlcy5zdWJzY3JpYmUoXHJcbiAgICAgIChzZXJ2aWNlczogVXNlclNlcnZpY2VzKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlcnZpY2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKFxyXG4gICAgICAgICAgICAob2JqZWN0czogU2VhcmNoT2JqZWN0cywga2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAob2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrZXldLmVuYWJsZWQgPVxyXG4gICAgICAgICAgICAgICAgISFzZXJ2aWNlcyAmJiAhIXNlcnZpY2VzW2tleV07XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdHM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY291bnRyaWVzKSkge1xyXG4gICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuY291bnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoYS5jTmFtZSA8IGIuY05hbWUpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGEuY05hbWUgPiBiLmNOYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJhc2VXZWJUb2tlblNlcnZpY2UuYXV0b0xvZ291dENvbmZpZyA9IHRoaXMuZ2V0QXV0b0xvZ291dENvbmZpZygpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoZXMpLmZvckVhY2goXHJcbiAgICAgIChpdGVtOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XHJcbiAgICAgICAgaXRlbT8ucmVzZXQoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVtb3ZlQWxsVHJhdmVsbGVycygpO1xyXG4gICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQ3VycmVudENhcmJvbkFsbG93YW5jZShcclxuICAgIHVzZXI/OiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhcmJvbkFsbG93YW5jZT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlciB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckN1cnJlbnRDYXJib25BbGxvd2FuY2VGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzOiBDYXJib25BbGxvd2FuY2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRSaXNrQWxlcnRzKFxyXG4gICAgbWluTGV2ZWw6IFJpc2tMZXZlbCxcclxuICAgIG1heExldmVsOiBSaXNrTGV2ZWwsXHJcbiAgICBjb3VudHJ5SXNvQ29kZTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgYWlycG9ydD86IEFpcnBvcnQsXHJcbiAgICByYWlsU3RhdGlvbj86IFJhaWxTdGF0aW9uLFxyXG4gICAgYWlycG9ydElhdGE/OiBzdHJpbmdcclxuICApOiBPYnNlcnZhYmxlPFJpc2tBbGVydFtdPiB7XHJcbiAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgIGlzTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJ5OiBHZXRSaXNrQWxlcnRzUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIG1pbkxldmVsLFxyXG4gICAgICBtYXhMZXZlbCxcclxuICAgICAgY291bnRyeUlzb0NvZGVcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucmlza0FsZXJ0c0ZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAoKHJlc3VsdDogUmlza0FsZXJ0W10pID0+IHtcclxuICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEFpcnBvcnRzTGlzdChcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlPzogQ291bnRyeUNvZGUsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXHJcbiAgICBoYXNMb3VuZ2U/OiBib29sZWFuLFxyXG4gICAgaGFzUGFya2luZz86IGJvb2xlYW4sXHJcbiAgICBoYXNGYXN0VHJhY2s/OiBib29sZWFuXHJcbiAgKTogT2JzZXJ2YWJsZTxPQlRBaXJwb3J0RGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaEFpcnBvcnRzLlZhcmlhYmxlcyA9IHsgcXVlcnk6IHRlcm0gfTtcclxuICAgICAgaWYgKCEhY291bnRyeUNvZGUpIHtcclxuICAgICAgICBxdWVyeS5jb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgaGFzTG91bmdlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBxdWVyeS5oYXNMb3VuZ2UgPSBoYXNMb3VuZ2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBoYXNQYXJraW5nID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBxdWVyeS5oYXNQYXJraW5nID0gaGFzUGFya2luZztcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZW9mIGhhc0Zhc3RUcmFjayA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgcXVlcnkuaGFzRmFzdFRyYWNrID0gaGFzRmFzdFRyYWNrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaEFpcnBvcnRzRmV0Y2hlci5mZXRjaE9uZShxdWVyeSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogQWlycG9ydFNlYXJjaFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMuZ2VuZXJhbE1hdGNoZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZ2VuZXJhbE1hdGNoZXMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cy5nZW5lcmFsTWF0Y2hlcyk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZW1vdmluZyB0aGlzIGFzIHRoaXMgY3JlYXRlcyBkdXBsaWNhdGUgYWlycG9ydHMgaW4gdGhlIGxpc3RcclxuICAgICAgICAgICAgLy8gaWYgKHJlc3VsdHMuaWF0YU1hdGNoKSB7XHJcbiAgICAgICAgICAgIC8vICAgZ2VuZXJhbE1hdGNoZXMucHVzaChyZXN1bHRzLmlhdGFNYXRjaCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICBnZW5lcmFsTWF0Y2hlc1xyXG4gICAgICAgICAgICAgICAgLy8gLmZpbHRlcigoYWlycG9ydDogQWlycG9ydFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gICByZXR1cm4gISFjb3VudHJ5Q29kZVxyXG4gICAgICAgICAgICAgICAgLy8gICAgID8gY291bnRyeUNvZGUgPT09IGFpcnBvcnQuZGV0YWlscy5jb3VudHJ5Q29kZVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIDogYWlycG9ydDtcclxuICAgICAgICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICAgICAgICAubWFwKChhaXJwb3J0OiBBaXJwb3J0KTogT0JUQWlycG9ydERldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBhaXJwb3J0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheTogYWlycG9ydC5pYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5wcm9jZXNzVGVybWluYWxzKGFpcnBvcnQudGVybWluYWxzKSxcclxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5OiBhaXJwb3J0Py5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zdGNvZGU6IGFpcnBvcnQ/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQ/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFpcmxpbmVzTGlzdChcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8T0JUQWlybGluZXNEZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBxdWVyeTogU2VhcmNoQWlybGluZXMuVmFyaWFibGVzID0geyBxdWVyeTogdGVybSB9O1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hBaXJsaW5lc0ZldGNoZXIuZmV0Y2hPbmUocXVlcnkpLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdHM6IEFpcmxpbmVzU2VhcmNoUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmdlbmVyYWxNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYWxNYXRjaGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdHMuZ2VuZXJhbE1hdGNoZXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhbE1hdGNoZXMubWFwKFxyXG4gICAgICAgICAgICAgIChhaXJsaW5lczogQWlybGluZVJlc3VsdCk6IE9CVEFpcmxpbmVzRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICBjb2RlOiBhaXJsaW5lcy5pYXRhLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiBhaXJsaW5lcy5uYW1lXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0QWlycG9ydExvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGNvdW50cnlDb2RlOiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcclxuICAgIGhhc0xvdW5nZT86IGJvb2xlYW4sXHJcbiAgICBoYXNQYXJraW5nPzogYm9vbGVhbixcclxuICAgIGhhc0Zhc3RUcmFjaz86IGJvb2xlYW5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBjb25zdCBjb252ZXJ0ID0gKHJlc3VsdHM6IE9CVEFpcnBvcnREZXRhaWxzW10pOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBPQlRBaXJwb3J0RGV0YWlscykgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBuYW1lOiByZXN1bHQuZGVzdGluYXRpb24sXHJcbiAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXHJcbiAgICAgICAgICBhaXJwb3J0OiByZXN1bHRcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5nZXRBaXJwb3J0c0xpc3QoXHJcbiAgICAgIHRlcm0sXHJcbiAgICAgIGNvdW50cnlDb2RlLFxyXG4gICAgICBpc0xvYWRpbmcsXHJcbiAgICAgIGhhc0xvdW5nZSxcclxuICAgICAgaGFzUGFya2luZyxcclxuICAgICAgaGFzRmFzdFRyYWNrXHJcbiAgICApLnBpcGUobWFwKGNvbnZlcnQpKTtcclxuICB9XHJcblxyXG4gIGdldENpdHlMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxyXG4gICAgaXNDb25maXJtYT86IGJvb2xlYW5cclxuICApOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPD0gMikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaXNDb25maXJtYSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDb25mZXJtYUNpdHlMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q2l0eUxvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9nZXRDaXR5TG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU/OiBDb3VudHJ5Q29kZSxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHF1ZXJ5OiBhbnkgPSB7IHF1ZXJ5OiB0ZXJtIH07XHJcbiAgICBpZiAoY291bnRyeUNvZGUpIHtcclxuICAgICAgcXVlcnkuY291bnRyeUNvZGUgPSBjb3VudHJ5Q29kZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxTZWFyY2hDaXRpZXNSZXN1bHRBcnJheT4gPVxyXG4gICAgICB0aGlzLmNpdGllc0ZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KTtcclxuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogU2VhcmNoQ2l0aWVzUmVzdWx0QXJyYXkpOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgKHJlc3VsdDogU2VhcmNoQ2l0aWVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5jb29yZGluYXRlcy5sb25naXR1ZGUsXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQuY29vcmRpbmF0ZXMubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuQ2l0eSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGU6IHJlc3VsdC5jb3VudHJ5Q29kZSxcclxuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb25mZXJtYUNpdHlMb2NhdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBjb3VudHJ5Q29kZT86IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnk6IGFueSA9IHsgY2l0eU5hbWU6IHRlcm0gfTtcclxuICAgIGlmIChjb3VudHJ5Q29kZSkge1xyXG4gICAgICBxdWVyeS5jb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFNlYXJjaENvbmZlcm1hQ2l0aWVzUmVzdWx0PiA9XHJcbiAgICAgIHRoaXMuY29uZmVybWFDaXRpZXNGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KTtcclxuICAgIGNvbnN0IGZ1bmMgPSAocmVzdWx0czogU2VhcmNoQ29uZmVybWFDaXRpZXNSZXN1bHQpOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5zdWdnZXN0aW9ucy5tYXAoXHJcbiAgICAgICAgKHJlc3VsdCk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgICAgICAgICAgbG9uZ2l0dWRlOiByZXN1bHQubG9uZ2l0dWRlLFxyXG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzdWx0LmxhdGl0dWRlLFxyXG4gICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLkNpdHksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiByZXN1bHQuY291bnRyeUNvZGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBjYXIgaGlyZSBkZXBvdHMgYmFzZWQgb24gY2l0eSBjb3Jkc1xyXG4gICAqL1xyXG4gIGdldENhckhpcmVEZXBvdHMoXHJcbiAgICBsYXRpdHVkZTogbnVtYmVyLFxyXG4gICAgbG9uZ2l0dWRlOiBudW1iZXIsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiB7XHJcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcblxyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPENhckhpcmVEZXBvdFJlc3VsdEFycmF5PiA9XHJcbiAgICAgIHRoaXMuZGVwb3RGZXRjaGVyLmZldGNoTGlzdCh7IGxhdGl0dWRlLCBsb25naXR1ZGUgfSk7XHJcblxyXG4gICAgY29uc3QgZnVuYyA9IChcclxuICAgICAgcmVzdWx0czogQ2FySGlyZURlcG90UmVzdWx0QXJyYXlcclxuICAgICk6IENhckhpcmVEZXBvdFJlc3VsdEFycmF5ID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogQ2FySGlyZURlcG90UmVzdWx0QXJyYXkgPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBDYXJIaXJlRGVwb3QpOiBDYXJIaXJlRGVwb3QgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gb2JzOyAvLyAucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG5cclxuICAgIC8vIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgcG9zdGNvZGUgbG9jYXRpb25zLCB0aGVzZSB3aWxsIHVzZSBwYXJ0aWFsIHBvc3Rjb2RlLFxyXG4gICAqICBmdWxsIGFuZCB0aGVuIGdyYWJiaW5nIHRoZW0gd2lsbCBsZXQgdXMgZmlsbCBpbiB0aGUgYWRkcmVzcyBmb3JtXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IGZvciB0aGUgb3RoZXIgbG9jYXRpb24gdHlwZXMsIG1heSBuZWVkIHRvIG1lcmdlTWFwIHRoZW0gb3Igc29tZSBvdGhlciByeGpzIG1hZ2ljXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2ggYnkgZS5nLiAnd2ExNCcgc2hvdWxkIGJyaW5nIGJhY2ssIG91ciBvZmZpY2UsICdtMzMnIHNob2l1bGQgYnJpbmcgYmFjayBteSBhZGRyc1xyXG4gICAqL1xyXG4gIGdldFBvc3Rjb2RlTGlzdCh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvY2F0aW9uRGV0YWlsc1tdPiB7XHJcbiAgICBpZiAoUmVnRXhwcy5VS19QT1NUQ09ERS50ZXN0KHRlcm0pKSB7XHJcbiAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnBvc3Rjb2RlRmV0Y2hlci5mZXRjaExpc3QoeyBwb3N0Y29kZTogdGVybSB9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogU2VhcmNoUG9zdGNvZGVzUmVzdWx0QXJyYXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDogU2VhcmNoUG9zdGNvZGVzUmVzdWx0KTogTG9jYXRpb25EZXRhaWxzID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5Qb3N0Y29kZSxcclxuICAgICAgICAgICAgICAgIGxhdGl0dWRlOiByZXN1bHQubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgICBsb25naXR1ZGU6IHJlc3VsdC5sb25naXR1ZGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG5cclxuICAgICAgcmV0dXJuIHN1YnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkVG9TZWxlY3RlZFBsYWNlcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFBsYWNlQnlJZChwbGFjZUlkOiBzdHJpbmcpOiBBZGRyZXNzIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhY2VzLmZpbmQoXHJcbiAgICAgIChwbGFjZTogeyBwbGFjZV9pZDogc3RyaW5nIH0pID0+IHBsYWNlLnBsYWNlX2lkID09PSBwbGFjZUlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtPy5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZU5hbWVSZXN1bHQ+ID1cclxuICAgICAgICB0aGlzLmNvbmZlcm1hT2ZmaWNlTmFtZXNGZXRjaGVyLmZldGNoTGlzdCgpO1xyXG4gICAgICBjb25zdCBmdW5jID0gKFxyXG4gICAgICAgIHJlc3VsdHM6IENvbmZlcm1hT2ZmaWNlTmFtZVJlc3VsdFxyXG4gICAgICApOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogTG9jYXRpb25EZXRhaWxzW10gPSByZXN1bHRzLnJlc3VsdHMubWFwKFxyXG4gICAgICAgICAgKHJlc3VsdDogQ29uZmVybWFPZmZpY2VOYW1lcyk6IExvY2F0aW9uRGV0YWlscyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgdHlwZTogTG9jYXRpb25UeXBlcy5PZmZpY2UsXHJcbiAgICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCB0aGUgbGlzdCBvZiBPZmZpY2UgbG9jYXRpb25zIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIGdpdmVuXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHdlIHdhbnQgdG8gc2VhcmNoIGJ5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXRPZmZpY2VMb2NhdGlvbnModGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgICB0aGlzLmdldFVzZXJDb21wYW55T2ZmaWNlc0ZldGNoZXIuZmV0Y2hMaXN0KCk7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSAoXHJcbiAgICAgICAgcmVzdWx0czogR2V0VXNlckNvbXBhbnlPZmZpY2VzUmVzdWx0QXJyYXlcclxuICAgICAgKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IExvY2F0aW9uRGV0YWlsc1tdID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgICAocmVzdWx0OiBHZXRVc2VyQ29tcGFueU9mZmljZXNSZXN1bHQpOiBMb2NhdGlvbkRldGFpbHMgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgIG9mZmljZTogcmVzdWx0LmFkZHJlc3Nlc1swXSxcclxuICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLk9mZmljZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBvYnMucGlwZSh0YWtlKDEpLCBtYXAoZnVuYykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0aW9uTG9jYXRpb25zKFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnJhaWxTdGF0aW9uRmV0Y2hlclxyXG4gICAgICAgIC5mZXRjaExpc3Qoe1xyXG4gICAgICAgICAgcXVlcnk6IHRlcm1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIG1hcCgocmVzdWx0czogU2VhcmNoUmFpbFN0YXRpb25zUmVzdWx0QXJyYXkpOiBMb2NhdGlvbkRldGFpbHNbXSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQ6IFNlYXJjaFJhaWxTdGF0aW9uc1Jlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBMb2NhdGlvblR5cGVzLlRyYWluU3RhdGlvbixcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgcmFpbHN0YXRpb246IHJlc3VsdFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzZWFyY2hJcmxTdGF0aW9uc0xvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8TG9jYXRpb25EZXRhaWxzW10+IHtcclxuICAgIGlmICh0ZXJtLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJcclxuICAgICAgICAuZmV0Y2hMaXN0KHtcclxuICAgICAgICAgIHF1ZXJ5OiB0ZXJtXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICBtYXAoKHJlc3VsdHM6IElybFN1cHBsaWVyU3RhdGlvbltdKTogTG9jYXRpb25EZXRhaWxzW10gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgLm1hcCgocmVzdWx0OiBJcmxTdXBwbGllclN0YXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiBgJHtyZXN1bHQubmFtZX0gKCR7cmVzdWx0LnN1cHBsaWVyfSlgLFxyXG4gICAgICAgICAgICAgICAgICByYWlsc3RhdGlvbjogcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBob3RlbCBsb2NhdGlvbnMsIHRoZXNlIHNob3VsZCBiZSBjaXR5LCBvZmZpY2UsIGFpcnBvcnQsIHJhaWxzdGF0aW9uXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IGZvciB0aGUgb3RoZXIgbG9jYXRpb24gdHlwZXMsIG1heSBuZWVkIHRvIG1lcmdlTWFwIHRoZW0gb3Igc29tZSBvdGhlciByeGpzIG1hZ2ljXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2ggYnkgZS5nLiAnTWFuJyBzaG91bGQgYnJpbmcgYmFjaywgbWFuY2hlc3RlciwgbWFuY2hlc3RlciBhaXJwb3J0LCBtYW5jaGVzdGVyIHBpY2FkaWxseSwgZXRjXHJcbiAgICovXHJcbiAgZ2V0SG90ZWxMb2NhdGlvbnNMaXN0KFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoUmVnRXhwcy5VS19QT1NUQ09ERS50ZXN0KHRlcm0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9zdGNvZGVMaXN0KHRlcm0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghaXNMb2FkaW5nPy52YWx1ZSkge1xyXG4gICAgICAgICAgaXNMb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSBmb3JrSm9pbihbXHJcbiAgICAgICAgICB0aGlzLmdldEFpcnBvcnRMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyksXHJcbiAgICAgICAgICB0aGlzLmdldENpdHlMb2NhdGlvbnModGVybSwgY291bnRyeUNvZGUsIGlzTG9hZGluZyksXHJcbiAgICAgICAgICB0aGlzLmdldFN0YXRpb25Mb2NhdGlvbnModGVybSwgaXNMb2FkaW5nKSxcclxuICAgICAgICAgIHRoaXMuZ2V0Q29uZmlybWFPZmZpY2VzKHRlcm0pXHJcbiAgICAgICAgXSkucGlwZShcclxuICAgICAgICAgIG1hcCgocmVzdWx0czogYW55W10pID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICAgICAgICBpc0xvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKChhY2N1bTogTG9jYXRpb25EZXRhaWxzW10sIHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgYWNjdW0ucHVzaCguLi5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgICAgfSwgW10pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApOyAvLyBleHBhbmQgdGhpcyB3aXRoIHRoZSBvdGhlciBzZWFyY2hlcyB3aGVuIHRoZXkgYXJlIGRvbmVcclxuICAgICAgICByZXR1cm4gc3VicztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0YXRpb25zQW5kQWlycG9ydHNMaXN0KFxyXG4gICAgdGVybTogc3RyaW5nLFxyXG4gICAgY291bnRyeUNvZGU6IENvdW50cnlDb2RlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkRldGFpbHNbXT4ge1xyXG4gICAgaWYgKHRlcm0ubGVuZ3RoID4gMikge1xyXG4gICAgICBpZiAoIWlzTG9hZGluZz8udmFsdWUpIHtcclxuICAgICAgICBpc0xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzdWJzID0gZm9ya0pvaW4oW1xyXG4gICAgICAgIHRoaXMuZ2V0QWlycG9ydExvY2F0aW9ucyh0ZXJtLCBjb3VudHJ5Q29kZSwgaXNMb2FkaW5nKSxcclxuICAgICAgICB0aGlzLmdldFN0YXRpb25Mb2NhdGlvbnModGVybSwgaXNMb2FkaW5nKVxyXG4gICAgICBdKS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzdWx0czogYW55W10pID0+IHtcclxuICAgICAgICAgIGlmIChpc0xvYWRpbmc/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXN1bHRzLnJlZHVjZSgoYWNjdW06IGFueVtdLCByZXN1bHQ6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgIGFjY3VtLnB1c2goLi4ucmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSwgW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7IC8vIGV4cGFuZCB0aGlzIHdpdGggdGhlIG90aGVyIHNlYXJjaGVzIHdoZW4gdGhleSBhcmUgZG9uZVxyXG4gICAgICByZXR1cm4gc3VicztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIEBkZXNjIC0gcmVtb3ZlIGEgc3BlY2lmaWVkIHRyYXZlbGxlciBmcm9tIHRoZSBzZWxlY3RlZCBhcnJheVxyXG4gICoqL1xyXG4gIHJlbW92ZVRyYXZlbGxlcih0cmF2ZWxsZXI6IFRyYXZlbGxlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcik7XHJcblxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1xyXG4gICAgKTtcclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVySW5mb3JtYXRpb24oKTtcclxuICB9XHJcblxyXG4gIF9yZW1vdmVUcmF2ZWxsZXIodHJhdmVsbGVyOiBUcmF2ZWxsZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzID0gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyVG9UZXN0OiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gIVRyYXZlbGxlck9iamVjdC5lcXVhbHModHJhdmVsbGVyVG9UZXN0LCB0cmF2ZWxsZXIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQWxsVHJhdmVsbGVycygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdyZW1vdmUgYWxsIHRyYXZlbGxlcnMgY2FsbGVkIScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMpO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZm9yRWFjaCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgdGhpcy5fcmVtb3ZlVHJhdmVsbGVyKHRyYXZlbGxlcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVHJhdmVsbGVyKHRyYXZlbGxlcjogVHJhdmVsbGVyKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnRyYXZlbGxlckFscmVhZHlBZGRlZCh0cmF2ZWxsZXIpICYmXHJcbiAgICAgICF0aGlzLmN1cnJlbnROb09mVHJhdmVsbGVyc0dyZWF0ZXJPckVxdWFsVG9NYXgoKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLnB1c2godHJhdmVsbGVyKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBCYXNlRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2UuU0VTU0lPTl9UUkFWRUxMRVIsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICAgKTtcclxuICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjdXJyZW50Tm9PZlRyYXZlbGxlcnNHcmVhdGVyT3JFcXVhbFRvTWF4KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA+PSB0aGlzLm1heFRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIG1heFRyYXZlbGxlcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAvKnRoaXMudXNlclNlcnZpY2UudXNlVHJhdmVsbGVyUHJvZmlsZSAmJiovIHRoaXMuY2FuVXNlVHJhdmVsbGVyUHJvZmlsZSgpXHJcbiAgICAgID8gMVxyXG4gICAgICA6IE1BWF9UUkFWRUxMRVJTO1xyXG4gIH1cclxuICAvKlxyXG4gICAgQGRlc2MgLSBoZWxwZXIgZnVuY3Rpb24gLSBkZXRlcm1pbmVzIGlmIGEgc2VsZWN0ZWQgdHJhdmVsbGVyIGlzIGFscmVhZHkgYWRkZWQgLVxyXG4gICAgdXNlZCB0byBwcmV2ZW50IHNhbWUgdHJhdmVsbGVyIGJlaW5nIGFkZGVkIG1vcmUgdGhhbiBvbmNlXHJcbiAgKiovXHJcbiAgdHJhdmVsbGVyQWxyZWFkeUFkZGVkKHRyYXZlbGxlcjogVHJhdmVsbGVyKTogYm9vbGVhbiB7XHJcbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIHNlbGVjdGVkIHRyYXZlbGxlcnMgYW5kIHJldHVybiB0cnVlIGlmIGZvdW5kLCBmYWxzZSBvdGhlciB3aXNlXHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5maW5kKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXIpID0+XHJcbiAgICAgIFRyYXZlbGxlck9iamVjdC5lcXVhbHModHJhdmVsbGVycywgdHJhdmVsbGVyKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNhblVzZVRyYXZlbGxlclByb2ZpbGUoKTogYm9vbGVhbiB7XHJcbiAgICAvKlxyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuaXNVc2VyRmF2b3JpdGVTZXQoVXNlckZhdm9ydXJpdGUuRG9udFVzZVRyYXZlbGxlclBvbGljeSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNbMF1cclxuICAgICAgICAuZ3Vlc3QgLyomJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVyc1swXS5wYXhfaWQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNbMF0ucGF4X2lkICE9PSB1c2VyLlBheElkXHJcbiAgICApOyovXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Tm9PZlRyYXZlbGxlcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUcmF2ZWxsZXJJbmZvcm1hdGlvbigpIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEJhc2VFbnRlcnByaXNlU2VhcmNoU2VydmljZS5TRVNTSU9OX1RSQVZFTExFUixcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnNcclxuICAgICk7XHJcbiAgICB0aGlzLnRyYXZlbGxlckluZm9ybWF0aW9uLm5leHQoWy4uLnRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzXSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBAZGVzYyAtIGRldGVybWluZSBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlLFxyXG4gICAqICAgdGhlIGhpZ2hlc3QgaXMgYmFzZWQgb24gdGhlIHByaW9yaXR5IHZhbHVlIG9mIHRoZSBzZWFyY2ggdHlwZSxcclxuICAgKiAgICBpZiBpdCBpcyBjaG9zZW4gYW5kIGlmIHRoZSBib29raW5nIGhhcyBub3QgYmVlbiBjaG9zZW5cclxuICAgKiovXHJcbiAgZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuaGlnaGVzdF9zZWFyY2hfcHJpb3JpdHkgPVxyXG4gICAgICB0aGlzLl9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoKS5oaWdoZXN0KTtcclxuICB9XHJcblxyXG4gIGdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChcclxuICAgIGJhc2tldEl0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogU2VhcmNoT2JqZWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QoYmFza2V0SXRlbXMpLmN1cnJlbnRJdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0SGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0KFxyXG4gICAgYmFza2V0SXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4gPSB7fSBhcyBSZWNvcmQ8XHJcbiAgICAgIFNlcnZpY2VUeXBlLFxyXG4gICAgICBCYXNrZXRJdGVtXHJcbiAgICA+XHJcbiAgKTogSGlnaGVzdFNlYXJjaFByaW9yaXR5T2JqZWN0SW50ZXJmYWNlIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VhcmNoX29iamVjdHMpLnJlZHVjZShcclxuICAgICAgKHsgaGlnaGVzdCwgY3VycmVudEl0ZW0gfSwgaXRlbTogU2VhcmNoT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hvc2VuICYmIGl0ZW0ucHJpb3JpdHkgPCBoaWdoZXN0KSB7XHJcbiAgICAgICAgICBpZiAoIWJhc2tldEl0ZW1zW2l0ZW0udHlwZSBhcyBTZXJ2aWNlVHlwZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgaGlnaGVzdDogaXRlbS5wcmlvcml0eSwgY3VycmVudEl0ZW06IGl0ZW0gfTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2hvc2VuID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGhpZ2hlc3QsIGN1cnJlbnRJdGVtIH07XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaGlnaGVzdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbnRJdGVtOiBudWxsIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZE9wdGlvbnMoKTogU2VydmljZVR5cGVbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWFyY2hfb2JqZWN0cykucmVkdWNlKChjdiwgaXRlbUluZGV4KSA9PiB7XHJcbiAgICAgIGlmICgodGhpcy5zZWFyY2hfb2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtpdGVtSW5kZXhdLmNob3Nlbikge1xyXG4gICAgICAgIGN2LnB1c2goaXRlbUluZGV4IGFzIFNlcnZpY2VUeXBlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY3Y7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgc2VsZWN0ZWQgdHJhdmVsbGVycyBjb250YWlucyBhbnkgZ3Vlc3RzIHdpdGhvdXQgYWxsIG9mIGRldGFpbHNcclxuICAgKi9cclxuICBoYXNTaW1wbGVHdWVzdHMoKTogYm9vbGVhbiB7XHJcbiAgICAvKnJldHVybiAhIXRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHsgZ3Vlc3QsIHBob25lLCBuYXRpb25hbGl0eSwgZW1haWwgfSkgPT4ge1xyXG4gICAgICByZXR1cm4gZ3Vlc3QgJiYgISghIWVtYWlsICYmICEhcGhvbmUgJiYgISFuYXRpb25hbGl0eSk7XHJcbiAgICB9KTsqL1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gc2V0IHRoZSBzZWFyY2ggb2JqZWN0cyB0byB0aGUgZ2V0IG1lIHRoZXJlIG9iamVjdHMgLSBjYWxsZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBnZXQgbWUgdGhlcmUgc2VhcmNoZXNcclxuICAgKi9cclxuICBzZXRHZXRNZVRoZXJlU2VhcmNoT2JqZWN0cygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCcrKysgU2V0dGluZyBHZXRNZVRoZXJlIFNlYXJjaCBPYmplY3RzICsrKycpO1xyXG4gICAgdGhpcy5zZWFyY2hfb2JqZWN0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmdldE1lVGhlcmVTZWFyY2hPYmplY3RzKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWFyY2hQYXJhbXMoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnUmVzZXRpbmcgU2VhcmNoIFBhcmFtcyEnKTtcclxuICAgIHRoaXMuc2VhcmNoX29iamVjdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5pbml0X3NlYXJjaF9vYmplY3RzKCkpO1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgQmFzZUVudGVycHJpc2VTZWFyY2hTZXJ2aWNlLlNFU1NJT05fVFJBVkVMTEVSLFxyXG4gICAgICB0aGlzLnNlYXJjaF9vYmplY3RzXHJcbiAgICApO1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5mb3JFYWNoKFxyXG4gICAgICAocHJvZHVjdFNlYXJjaFNlcnZpY2U6IEJhc2VFbnRlcnByaXNlU2VhcmNoPGFueSwgYW55LCBhbnlbXT4pID0+IHtcclxuICAgICAgICBwcm9kdWN0U2VhcmNoU2VydmljZS5yZXNldCgpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2FuU2VhcmNoKHR5cGU6IFNlcnZpY2VUeXBlIHwgc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjaGVjayB0aGF0IHRoZSBzZWxlY3RlZCB0eXBlIGlzIGNob3NlbiwgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIGhhcyBub3QgYWxyZWFkeSBoYWQgYSBib29raW5nIGNob3NlblxyXG5cclxuICAgIHRoaXMuZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk7XHJcbiAgICAvLyBmaXJzdGx5IGNoZWNrIHRoYXQgdGhlIHR5cGUgb2Ygc2VhcmNoIGV4aXN0c1xyXG4gICAgaWYgKCh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW4gc2VhcmNoIGhlcmUnKTtcclxuICAgICAgLy8gbm93IGNoZWNrIHRoYXQgdGhlIHR5cGUgaXMgY2hvc2VuIGhhcyBoaWdoZXN0IHByaW9yaXR5XHJcbiAgICAgIGlmIChcclxuICAgICAgICAodGhpcy5zZWFyY2hfb2JqZWN0cyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVt0eXBlXS5jaG9zZW4gJiZcclxuICAgICAgICB0aGlzLmhhc0hpZ2hlc3RTZWFyY2hQcmlvcml0eShcclxuICAgICAgICAgICh0aGlzLnNlYXJjaF9vYmplY3RzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3R5cGVdLnByaW9yaXR5XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyh0eXBlICsgJyBjYW4gYmUgc2VhcmNoZWQnKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFzSGlnaGVzdFNlYXJjaFByaW9yaXR5KHByaW9yaXR5VmFsOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHRoaXMuZGV0ZXJtaW5lSGlnaGVzdFNlYXJjaFByaW9yaXR5KCk7XHJcbiAgICByZXR1cm4gcHJpb3JpdHlWYWwgPD0gdGhpcy5oaWdoZXN0X3NlYXJjaF9wcmlvcml0eTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gY29uY2F0aW5hdHMgYWxsIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzIGFjcm9zcyBhbGwgc2VsZWN0ZWQgdHlwZXMgK1xyXG4gICAqICAgdHJhdmVsbGVycyAob3Igd2lsbCBkbyB3aGVuIGl0J3MgY29tcGxldGUpIFRPRE8gLSBhZGQgRmxpZ2h0LCBSYWlsIENhclxyXG4gICAqKi9cclxuICBnZXRBbGxFcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGNvbmNhdHRlZEVycm9yczogc3RyaW5nW10gPSB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcztcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Mb3VuZ2VdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5Mb3VuZ2UpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Mb3VuZ2VdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5DYXJdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5DYXIpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5DYXJdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5SYWlsXS5jaG9zZW4gJiZcclxuICAgICAgdGhpcy5jYW5TZWFyY2goU2VydmljZVR5cGUuUmFpbClcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlJhaWxdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5QYXJraW5nXS5jaG9zZW4gJiZcclxuICAgICAgdGhpcy5jYW5TZWFyY2goU2VydmljZVR5cGUuUGFya2luZylcclxuICAgICkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaChcclxuICAgICAgICAuLi50aGlzLnNlYXJjaGVzW1NlcnZpY2VUeXBlLlBhcmtpbmddLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5DYWJdLmNob3NlbiAmJlxyXG4gICAgICB0aGlzLmNhblNlYXJjaChTZXJ2aWNlVHlwZS5DYWIpXHJcbiAgICApIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goXHJcbiAgICAgICAgLi4udGhpcy5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5DYWJdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hvc2VuICYmXHJcbiAgICAgIHRoaXMuY2FuU2VhcmNoKFNlcnZpY2VUeXBlLkhvdGVsKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycy5wdXNoKFxyXG4gICAgICAgIC4uLnRoaXMuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5ob3RlbC5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uSE9URUwpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycyA9IGNvbmNhdHRlZEVycm9ycy5jb25jYXQodGhpcy5ob3RlbC52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMuZmxpZ2h0LmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5GTElHSFQpKSB7XHJcbiAgICAgIGNvbmNhdHRlZEVycm9ycyA9IGNvbmNhdHRlZEVycm9ycy5jb25jYXQodGhpcy5mbGlnaHQudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hfb2JqZWN0cy5wYXJraW5nLmNob3NlbiAmJiB0aGlzLmNhblNlYXJjaChUcmF2ZWxUeXBlRW51bS5BSVJfUEFSS0lORykpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goLi4udGhpcy5wYXJraW5nLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMudGF4aS5jaG9zZW4gJiYgdGhpcy5jYW5TZWFyY2goVHJhdmVsVHlwZUVudW0uVEFYSSkpIHtcclxuICAgICAgY29uY2F0dGVkRXJyb3JzLnB1c2goLi4udGhpcy50YXhpLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMuZXVyb3N0YXIuY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkVVUk9TVEFSKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLmV1cm9zdGFyLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoX29iamVjdHMuY29hY2guY2hvc2VuICYmIHRoaXMuY2FuU2VhcmNoKFRyYXZlbFR5cGVFbnVtLkNPQUNIKSkge1xyXG4gICAgICBjb25jYXR0ZWRFcnJvcnMucHVzaCguLi50aGlzLmNvYWNoLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9Ki9cclxuICAgIHRoaXMuZXJyb3JzLm5leHQoY29uY2F0dGVkRXJyb3JzKTtcclxuICAgIHJldHVybiBjb25jYXR0ZWRFcnJvcnM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdHJhdmVsbGVyc0NvbnRhaW5Vc2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMuZmluZCgodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHRyYXZlbGxlci5pZCA9PT0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VySWQoKS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsaWRhdGVUcmF2ZWxsZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJEYXRhLnZhbHVlLmJvb2tlcl90eXBlKSB7XHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5TZWxmQm9vazpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhdmVsbGVycy5sZW5ndGggPT09IDEgJiYgdGhpcy50cmF2ZWxsZXJzQ29udGFpblVzZXIoKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgdHJpZ2dlciB1bmRlciBub3JtYWwgY29uZGl0aW9ucyBhcyB0aGUgdXNlciBzaG91bGQgYmUgbG9hZGVkIGluIGFzIGEgdHJhdmVsbGVyIG9uIGxvZ2luXHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgICAnQ3VycmVudCB1c2VyIG11c3QgYmUgYSB0cmF2ZWxsZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQm9va2VyVHlwZS5Cb29rZXJXaXRoU2VsZjpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhKHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmxlbmd0aCA8IDEpIHx8XHJcbiAgICAgICAgICAhdGhpcy50cmF2ZWxsZXJzQ29udGFpblVzZXIoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCB5b3VyIHNlbGYuJyk7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuQm9va2VyOlxyXG4gICAgICBjYXNlIEJvb2tlclR5cGUuQ29tcGFueTpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLkNvbXBhbnlHcm91cDpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLk9mZmljZTpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLlRtYzpcclxuICAgICAgY2FzZSBCb29rZXJUeXBlLlJvb3Q6XHJcbiAgICAgICAgaWYgKCEodGhpcy5zZWxlY3RlZFRyYXZlbGxlcnMubGVuZ3RoID49IDEpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlclZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgICAnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgdHJhdmVsbGVyJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVyX2Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAgICdVbnJlY29nbmlzZWQgdXNlciB0eXBlISAtIFBsZWFzZSBjb250YWN0IHN1cHBvcnQuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy50cmF2ZWxsZXJWYWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gICAgcmV0dXJuIHRoaXMudHJhdmVsbGVyVmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMDtcclxuICB9XHJcblxyXG4gIGZpbmRQYXhJblRyYXZlbGxlcnModXNlcm5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUcmF2ZWxsZXJzLmZpbmQoKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB7XHJcbiAgICAgIHJldHVybiB1c2VybmFtZSA9PT0gdHJhdmVsbGVyLmVtYWlsO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUZvcm1zKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc2VhcmNoT2JqZWN0OiBTZWFyY2hPYmplY3QgPSB0aGlzLl9maW5kU2VhcmNoT2J0ZWN0KCk7XHJcbiAgICB0aGlzLmdldEFsbEVycm9yTWVzc2FnZXMoKTtcclxuICAgIGlmIChzZWFyY2hPYmplY3QpIHtcclxuICAgICAgdGhpcy5lcnJvcnMubmV4dChcclxuICAgICAgICB0aGlzLnNlYXJjaGVzW3NlYXJjaE9iamVjdC50eXBlIGFzIGtleW9mIFNlYXJjaFBhcmFtc10ubWVzc2FnZXMudmFsdWVcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0aGlzLnZhbGlkYXRlVHJhdmVsbGVycygpICYmXHJcbiAgICAgICAgdGhpcy5zZWFyY2hlc1tzZWFyY2hPYmplY3QudHlwZSBhcyBrZXlvZiBTZWFyY2hQYXJhbXNdLmlzVmFsaWQudmFsdWVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRTZWFyY2hPYnRlY3QoKTogU2VhcmNoT2JqZWN0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaF9vYmplY3RzKS5maW5kKChvYmo6IFNlYXJjaE9iamVjdCkgPT4ge1xyXG4gICAgICByZXR1cm4gISFvYmogJiYgb2JqLnByaW9yaXR5ID09PSB0aGlzLmhpZ2hlc3Rfc2VhcmNoX3ByaW9yaXR5O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZXdTZWFyY2hTdGFydGVkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLnNlYXJjaF9sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGxldCBzZWFyY2hPYmplY3Q6IFNlYXJjaE9iamVjdDtcclxuICAgIHNlYXJjaE9iamVjdCA9IHRoaXMuX2ZpbmRTZWFyY2hPYnRlY3QoKTtcclxuICAgIGlmIChzZWFyY2hPYmplY3QpIHtcclxuICAgICAgc2VhcmNoT2JqZWN0LmNob3NlbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaE9iamVjdCAmJiAhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKHNlYXJjaE9iamVjdC5yZXN1bHRVcmwpKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtzZWFyY2hPYmplY3QucmVzdWx0VXJsXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLypJZiB0aGUgc2VhcmNoIGV4Y2VlZHMgdGhlIHRpbWVvdXQgdGltZSwgY2FuY2VsIHNlYXJjaCBhbmQgdGVsbCBPQlQgdGhhdCBpdCdzIHRpbWVkIG91dCovXHJcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcztcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoY29udGV4dC5zZWFyY2hfbG9hZGluZykge1xyXG4gICAgICAgIGNvbnRleHQuc2VhcmNoX2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBjb250ZXh0LnNlYXJjaFRpbWVkT3V0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgY29udGV4dC5zZWFyY2hMb2FkaW5nRG9uZS5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMjAwMCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNlYXJjaGVzKS5tYXAoXHJcbiAgICAgICAgICAoc2VhcmNoOiBCYXNlRW50ZXJwcmlzZVNlYXJjaDxhbnksIGFueSwgYW55W10+KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXNlYXJjaCAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoX29iamVjdHNbc2VhcmNoLnR5cGVdICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hfb2JqZWN0c1tzZWFyY2gudHlwZV0uY2hvc2VuXHJcbiAgICAgICAgICAgICAgPyBzZWFyY2guc3RhcnRTZWFyY2goKVxyXG4gICAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTG9hZGluZ0RvbmUubmV4dCh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgdGhpcy5zZWFyY2hfbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlYXJjaExvYWRpbmdEb25lLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUYXhpU3RhdGlvbkxvY2F0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmFpbEFpcnBvcnRbXT4ge1xyXG4gICAgcmV0dXJuIHRlcm0ubGVuZ3RoIDwgM1xyXG4gICAgICA/IG9mKFtdKVxyXG4gICAgICA6IG9mKFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgQWlycG90JyxcclxuICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcclxuICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdNQU4nLFxyXG4gICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgQWlycG9ydCcsXHJcbiAgICAgICAgICBwb3N0Y29kZTogJ005MCAxUVgnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICBpc2FpcnBvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgc3VwcGxpZXJfY29kZTogJ01NQU4nLFxyXG4gICAgICAgICAgYWRkcmVzczogJ01hbmNoZXN0ZXIgUGljY2FkaWxseScsXHJcbiAgICAgICAgICBwb3N0Y29kZTogJ00xIDJQWidcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiAnTG9uZG9uIEhlYXRocm93JyxcclxuICAgICAgICAgIGlzYWlycG9ydDogdHJ1ZSxcclxuICAgICAgICAgIHN1cHBsaWVyX2NvZGU6ICdMSFInLFxyXG4gICAgICAgICAgYWRkcmVzczogJ0xvbmRvbiBIZWF0aHJvdyBBaXJwb3J0JyxcclxuICAgICAgICAgIHBvc3Rjb2RlOiAnVFc2IDFFVydcclxuICAgICAgICB9XHJcbiAgICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkcmVzc2VzKGlzTG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KTogT2JzZXJ2YWJsZTxBZGRyZXNzRm9ybVtdPiB7XHJcbiAgICByZXR1cm4gb2YoW1xyXG4gICAgICB7XHJcbiAgICAgICAgSG91c2U6ICdDZWNpbCBDb3VydCcsXHJcbiAgICAgICAgU3RyZWV0OiAnMjgtMzYgQ2VjaWwgUm9hZCcsXHJcbiAgICAgICAgVG93bjogJ0hhbGUnLFxyXG4gICAgICAgIFBvc3RDb2RlOiAnV0ExNSA5UEInLFxyXG4gICAgICAgIENvdW50cnk6ICdVSydcclxuICAgICAgfVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQWRkcmVzc2VzKFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxBZGRyZXNzRm9ybVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyQWRkcmVzc2VzRmV0Y2hlci5mZXRjaExpc3QoKS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICBtYXAoKHJlc3VsdHM6IGFueSk6IGFueSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgSUQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgSG91c2U6IHJlc3VsdC5udW1iZXJPck5hbWUsXHJcbiAgICAgICAgICAgIFN0cmVldDogcmVzdWx0LnN0cmVldCxcclxuICAgICAgICAgICAgVG93bjogcmVzdWx0LnRvd24sXHJcbiAgICAgICAgICAgIFBvc3RDb2RlOiByZXN1bHQucG9zdGNvZGUsXHJcbiAgICAgICAgICAgIENvdW50cnk6IHJlc3VsdC5jb3VudHJ5Q29kZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVVc2VyQWRkcmVzc0J5SUQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlRGVsZXRlVXNlckFkZHJlc3NVcGRhdGVyLnVwZGF0ZU9uZSh7IGlkOiBpZCB9KTtcclxuICB9XHJcblxyXG4gIGdldEhvdGVsQ2hhaW4oXHJcbiAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICBpZiAodGVybS5sZW5ndGggPiAyKSB7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFNlYXJjaEhvdGVsQ2hhaW5zUmVzdWx0QXJyYXk+ID1cclxuICAgICAgICB0aGlzLnNlYXJjaEhvdGVsQ2hhaW5zRmV0Y2hlci5mZXRjaExpc3QoeyBxdWVyeTogdGVybSB9KTtcclxuICAgICAgY29uc3QgZnVuYyA9IChyZXN1bHRzOiBTZWFyY2hIb3RlbENoYWluc1Jlc3VsdEFycmF5KTogYW55W10gPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gcmVzdWx0cy5tYXAoXHJcbiAgICAgICAgICAocmVzdWx0OiBTZWFyY2hIb3RlbENoYWluc1Jlc3VsdCk6IGFueSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgbmFtZTogcmVzdWx0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gb2JzLnBpcGUodGFrZSgxKSwgbWFwKGZ1bmMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2ZmaWNlTmFtZXMoXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPENvbmZlcm1hT2ZmaWNlTmFtZXNbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmVybWFPZmZpY2VOYW1lc0ZldGNoZXIuZmV0Y2hMaXN0KCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzKTogYW55ID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM/LnJlc3VsdHM/Lm1hcCgocmVzdWx0OiBDb25mZXJtYU9mZmljZU5hbWVzKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZpY2UoXHJcbiAgICBvZmZpY2VJZDogbnVtYmVyXHJcbiAgKTogT2JzZXJ2YWJsZTxDb25mZXJtYU9mZmljZUluZm8+IHtcclxuICAgIGlmIChvZmZpY2VJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25mZXJtYU9mZmljZUZldGNoZXIuZmV0Y2hPbmUoeyBvZmZpY2VJZCB9KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHRzOiBDb25mZXJtYU9mZmljZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0c1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJhaWxDYXJkcygpOiBPYnNlcnZhYmxlPFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFJhaWxDYXJkc0ZldGNoZXIuZmV0Y2hMaXN0KCkucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgbWFwKChyZXN1bHRzKTogYW55ID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM/Lm1hcCgocmVzdWx0OiBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5jb2RlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFpcnBvcnRCeUNvZGUoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxBaXJwb3J0U2VhcmNoUmVzdWx0cz4ge1xyXG4gICAgaWYgKGNvZGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoQWlycG9ydHNGZXRjaGVyLmZldGNoT25lKHsgcXVlcnk6IGNvZGUgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0OiBBaXJwb3J0U2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPIEJFIE9WRVIgUklEREVOIEJZIE9CVCBTVUJDTEFTU0VTXHJcbiAgcHJvdGVjdGVkIGluaXRfc2VhcmNoX29iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgKiBTRUFSQ0ggT0JKRUNUUyBGT1IgR0VUIE1FIFRIRVJFIERPT1IgMiBET09SICAgICAgICAgICpcclxuICAgKiBEaWZmZXJlbmNlKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKiBBbGwgb2JqZWN0cyBoYXZlIGEgcHJpb3JpdHkgb2YgMSBzbyB0aGF0IHRoZXkgYXJlICAgICpcclxuICAgKiBzZWFyY2hlZCBhdCB0aGUgc2FtZSB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKiBVcmxzIGNoYW5nZWQgdG8gZ2V0bWV0aGVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICpcclxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBwcm90ZWN0ZWQgZ2V0TWVUaGVyZVNlYXJjaE9iamVjdHMoKTogU2VhcmNoT2JqZWN0cyB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIC8qXHJcbiAgICogIEBkZXNjIC0gZ2V0cyBhbGwgc2VsZWN0ZWQgdHJhdmVsbGVyc1xyXG4gICAqICAgSW1wbGVtZW50ZWQgZm9yIHJhaWwgY2FyZCByZWFzb25zIGluIExVXHJcbiAgICoqL1xyXG4gIGdldFNlbGVjdGVkdHJhdmVsbGVycygpOiBUcmF2ZWxsZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRyYXZlbGxlcnM7XHJcbiAgfVxyXG5cclxuICByZXNldFNlYXJjaE9iamVjdHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaF9vYmplY3RzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuaW5pdF9zZWFyY2hfb2JqZWN0cygpKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgIFRoZXNlIGFyZSB0aGUgcG9zc2libGUgYXJyYXkgb2YgdmFsdWVzIGZyb20gQVBJIGFyZSBleHB0ZWN0ZWQgYW5kIGZ1bmN0aW9uIG1hbmlwdWxhdGUgdG8gY3JlYXRlIHRoZSBsaXN0XHJcbiAgICBbXCJNYWluXCJdXHJcbiAgICBbXCIxXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiXVxyXG4gICAgW1wiMVwiLCBcIjJcIiwgXCIzXCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCJdXHJcbiAgICBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiXVxyXG4gICAgW1wiU291dGhcIiwgXCJOb3J0aFwiXVxyXG4gICovXHJcbiAgcHVibGljIHByb2Nlc3NUZXJtaW5hbHModGVybWluYWxzOiBzdHJpbmdbXSk6IFRlcm1pbmFsc1R5cGVbXSB7XHJcbiAgICBjb25zdCB0ZW1wVGVybWluYWw6IFRlcm1pbmFsc1R5cGVbXSA9IFtdO1xyXG4gICAgaWYgKFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzEnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzInKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzMnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzQnKSB8fFxyXG4gICAgICB0ZXJtaW5hbHMuaW5jbHVkZXMoJzUnKVxyXG4gICAgKSB7XHJcbiAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiAnQW55IFRlcm1pbmFsJywgdmFsdWU6ICdBbnknIH0pO1xyXG4gICAgICB0ZXJtaW5hbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHRlbXBUZXJtaW5hbC5wdXNoKHsga2V5OiBgVGVybWluYWwgJHtpdGVtfWAsIHZhbHVlOiBgJHtpdGVtfWAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRlcm1pbmFscy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogYCR7dGVybWluYWxzWzBdfSBUZXJtaW5hbGAsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ZW1wVGVybWluYWwucHVzaCh7IGtleTogJ0FueSBUZXJtaW5hbCcsIHZhbHVlOiAnQW55JyB9KTtcclxuICAgICAgICB0ZXJtaW5hbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgdGVtcFRlcm1pbmFsLnB1c2goeyBrZXk6IGAke2l0ZW19IFRlcm1pbmFsYCwgdmFsdWU6IGAke2l0ZW19YCB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBUZXJtaW5hbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNhdmVVc2VyQWRkcmVzcyhcclxuICAgIGFkZHJlc3M6IFNhdmVVc2VyQWRkcmVzc011dGF0aW9uVmFyaWFibGVzXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoYWRkcmVzcykge1xyXG4gICAgICBhd2FpdCB0aGlzLnNhdmVVc2VyQWRkcmVzc1VwZGF0ZXIudXBkYXRlT25lKGFkZHJlc3MpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbkJvb2soc2VydmljZTogU2VydmljZVR5cGUpIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmNhbkJvb2soc2VydmljZSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc1Bvc3Rjb2RlVmFpbGQocG9zdGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZVZhbGlkYXRlSXNQb3N0Y29kZVZhbGlkVGVzdGVyLnRlc3QoeyBwb3N0Y29kZSB9KTtcclxuICB9XHJcblxyXG4gIC8qIENyZWF0ZSBRdWVyeSBEZWZhdWx0cyBTdGFydCAqL1xyXG4gIC8qXHJcbiAgICogQ3JlYXRlIHRoZSBDYWIgSGlyZSBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbSwgYXV0byBmaWxsIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAuLi5hcmdzIGV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLnNldENhYkhpcmVRdWVyeShkYXRhLnF1ZXJ5LCB7IGRlcGFydHM6IG1vbWVudERhdGVUaW1lIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hDYWJIaXJlQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlQ2FiSGlyZVF1ZXJ5KC4uLmFyZ3M6IGFueSk6IENhYkhpcmVUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IENhYkhpcmVUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGFpcnBvcnQ6IG51bGwsXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBjb3VudHJ5Q29kZTogbnVsbCxcclxuICAgICAgZGVwYXJ0czogdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCksXHJcbiAgICAgIGZyb21BZGRyZXNzOiBudWxsLFxyXG4gICAgICBmcm9tU3RhdGlvbjogbnVsbCxcclxuICAgICAgZnJvbUxvY2F0aW9uVHlwZTogVGF4aUZvcm1Nb2RlLkFERFJFU1MsXHJcbiAgICAgIGluZmFudHM6IDAsXHJcbiAgICAgIHRvQWRkcmVzczogbnVsbCxcclxuICAgICAgdG9TdGF0aW9uOiBudWxsLFxyXG4gICAgICB0b0xvY2F0aW9uVHlwZTogVGF4aUZvcm1Nb2RlLkFERFJFU1MsXHJcbiAgICAgIHZlaGljbGVUeXBlOiBDYWJIaXJlVmVoaWNsZVR5cGUuQW55LFxyXG4gICAgICB2aWFzRnJvbTogbnVsbCxcclxuICAgICAgdmlhc1RvOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPENhYkhpcmVUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnZGVwYXJ0cyddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgdGhlIENhciBIaXJlIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtLCBhdXRvIGZpbGwgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgIC4uLmFyZ3MgZXhhbXBsZSAtIHNlYXJjaFNlcnZpY2Uuc2V0Q2FySGlyZVF1ZXJ5KGRhdGEucXVlcnksIHsgZGVwYXJ0czogbW9tZW50RGF0ZVRpbWUgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaENhckhpcmVBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hDYXJIaXJlQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VDYXJIaXJlUXVlcnkoLi4uYXJnczogYW55KTogQ2FySGlyZVRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogQ2FySGlyZVRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYWlyQ29uOiBudWxsLFxyXG4gICAgICBjYXJDbGFzczogbnVsbCxcclxuICAgICAgY2FyVHlwZTogbnVsbCxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGNob3NlblZlbmRvcjogbnVsbCxcclxuICAgICAgY2l0eURyb3BvZmY6IG51bGwsXHJcbiAgICAgIGNpdHlEcm9wb2ZmRGVwb3Q6IG51bGwsXHJcbiAgICAgIGNpdHlQaWNrdXA6IG51bGwsXHJcbiAgICAgIGNpdHlQaWNrdXBEZXBvdDogbnVsbCxcclxuICAgICAgZHJvcG9mZl9jb3VudHJ5OiAnR0InLFxyXG4gICAgICBkcm9wb2ZmX2RhdGV0aW1lOiBudWxsLFxyXG4gICAgICBkcm9wb2ZmX2xvY2F0aW9uOiBudWxsLFxyXG4gICAgICBlc3RpbWF0ZWRNaWxlYWdlOiBudWxsLFxyXG4gICAgICBsb2NhdGlvblR5cGU6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9jb3VudHJ5OiBudWxsLFxyXG4gICAgICBwaWNrdXBfZGF0ZXRpbWU6IG51bGwsXHJcbiAgICAgIHBpY2t1cF9sb2NhdGlvbjogbnVsbCxcclxuICAgICAgcG9zdGNvZGVEcm9wb2ZmOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZURyb3BvZmZSYXc6IG51bGwsXHJcbiAgICAgIHBvc3Rjb2RlUGlja3VwOiBudWxsLFxyXG4gICAgICBwb3N0Y29kZVBpY2t1cFJhdzogbnVsbCxcclxuICAgICAgcmV0dXJuX3RvX3BpY2t1cDogdHJ1ZSxcclxuICAgICAgdHJhbnNtaXNzaW9uOiBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPENhckhpcmVUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsncGlja3VwX2RhdGV0aW1lJywgJ2Ryb3BvZmZfZGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEZsaWdodCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoRmxpZ2h0c0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEZsaWdodHNBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUZsaWdodFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IEZsaWdodFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcclxuICAgIGNvbnN0IG1vbWVudE91dERhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyhub3csIDMwKTtcclxuICAgIGNvbnN0IG1vbWVudEluRGF0ZVRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdFZhbDogRmxpZ2h0VGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcclxuICAgICAgY2FiaW5DbGFzczogRmxpZ2h0Q2FiaW5DbGFzcy5BbnksXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBjaG9zZW5TZWFyY2hUeXBlOiBudWxsLFxyXG4gICAgICBkZXBhcnRMb2NhdGlvbjogbnVsbCxcclxuICAgICAgZmFyZVR5cGU6IEZhcmVUeXBlLkZsZXhpYmxlLFxyXG4gICAgICBpbmJvdW5kRGF0ZTogbW9tZW50T3V0RGF0ZVRpbWUsXHJcbiAgICAgIGluVGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgbWF4Q29ubmVjdGlvbnM6IG51bGwsXHJcbiAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogZmFsc2UsXHJcbiAgICAgIG11bHRpRGVzdGluYXRpb246IFtdLFxyXG4gICAgICBvdXRCb3VuZERhdGU6IG1vbWVudEluRGF0ZVRpbWUsXHJcbiAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXHJcbiAgICAgIHByZWZlcnJlZENhcnJpZXJzOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sXHJcbiAgICAgIHJldHVybkNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEZsaWdodFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydvdXRCb3VuZERhdGUnLCAnaW5ib3VuZERhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIEhvdGVsIHNlYXJjaCBxdWVyeSB3aXRoIHN1cHBsaWVkIHBhcmFtcywgYXV0byBmaWxscyB3aXRoIGRlZmF1bHRzIGlmIGZpZWxkcyBhcmUgZW1wdHkuXHJcbiAgICogQHBhcmFtICB7YW55fSAgICAgICAgICAgICAgICAgICAgLi4uYXJncyBFeGFtcGxlIC0gc2VhcmNoU2VydmljZS5tYWtlSG90ZWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaEhvdGVsc0FyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaEhvdGVsc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlSG90ZWxRdWVyeSguLi5hcmdzOiBhbnkpOiBIb3RlbFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbCA9IHtcclxuICAgICAgY2hlY2tpbl9kYXRlOiBtb21lbnQoKS5zZXQoJ2hvdXInLCAyMykuc2V0KCdtaW51dGUnLCA1OSksXHJcbiAgICAgIGNoZWNrb3V0X2RhdGU6IG1vbWVudCgpLmFkZCgxLCAnZGF5Jykuc2V0KCdob3VyJywgMjMpLnNldCgnbWludXRlJywgNTkpLFxyXG4gICAgICBjb3VudHJ5OiB7IGNDb2RlOiAnR0InLCBjTmFtZTogJ1VuaXRlZCBLaW5nZG9tJyB9LFxyXG4gICAgICBjdXJyZW5jeTogJ0dCUCcsXHJcbiAgICAgIGRpc3RhbmNlOiA1LCAvLyBkZWZhdWx0IDUgbWlsZXMgcmFkaXVzXHJcbiAgICAgIGhvdGVsX2F2YWlsYWJpbGl0eTogbnVsbCxcclxuICAgICAgaG90ZWxfY2hhaW46IG51bGwsXHJcbiAgICAgIGhvdGVsX25hbWU6IG51bGwsXHJcbiAgICAgIGxvY2F0aW9uX3R5cGVfc2VsZWN0OiBMb2NhdGlvblR5cGVzLkFpcnBvcnQsXHJcbiAgICAgIGxvY2F0aW9uOiBudWxsLCAvLyBtaWdodCB3YW50IHRvIHNwbGl0IHRoaXMgb3V0IHRvIGNpdHksIGFpcnBvcnQsIG9mZmljZSwgcmFpbHN0YXRpb24gLSB0aGlzIHdpbGwgZG8gZm9yIG5vd1xyXG4gICAgICBub19vZl9vY2N1cGFudHM6IDEsIC8vIHNpbWlsYXJseSB0aGluayB0aGlzIGlzIGEgbWF4IG9mIDNcclxuICAgICAgbm9fb2Zfcm9vbXM6IDEsIC8vIG1heCBvZiA0IGluIG9sZCBzYWJzLCBub3Qgc3VyZSBoZXJlXHJcbiAgICAgIG9mZmljZTogbnVsbCxcclxuICAgICAgcG9zdGNvZGU6IG51bGwsXHJcbiAgICAgIHByZWZlcmVkX2hvdGVsc19vbmx5OiBmYWxzZSxcclxuICAgICAgdHJhaW5zU3RhdGlvbjogbnVsbFxyXG4gICAgfSBhcyBIb3RlbFRlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8SG90ZWxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsnY2hlY2tpbl9kYXRlJywgJ2NoZWNrb3V0X2RhdGUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIExvdW5nZXMgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VMb3VuZ2VzUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hMb3VuZ2VzQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoTG91bmdlc0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlTG91bmdlc1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IExvdW5nZXNUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFkdWx0czogMCxcclxuICAgICAgYXJyaXZhbERhdGV0aW1lOiBtb21lbnQoKSxcclxuICAgICAgY2hpbGRyZW46IDAsXHJcbiAgICAgIGluZmFudHM6IDAsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcclxuICAgICAgdGVybWluYWw6IG51bGxcclxuICAgIH0gYXMgTG91bmdlc1RlbXBQYXJhbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8TG91bmdlc1RlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydhcnJpdmFsRGF0ZXRpbWUnXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlcyBhIFBhcmtpbmcgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VQYXJraW5nUXVlcnkoZGF0YS5xdWVyeSwgeyBvdmVycmlkZTogXCJwcm9wZXJ0eVwiIH0pXHJcbiAgICogQHJldHVybiB7UXVlcnlTZWFyY2hQYXJraW5nQXJnc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoUGFya2luZ0FyZ3MgdHlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtYWtlUGFya2luZ1F1ZXJ5KC4uLmFyZ3M6IGFueSk6IFBhcmtpbmdUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB7XHJcbiAgICAgIGFycml2YWxEYXRldGltZTogbW9tZW50T3V0RGF0ZVRpbWUsXHJcbiAgICAgIGNhclBhcmtlZEZvcllvdTogbnVsbCxcclxuICAgICAgZGVwYXJ0RGF0ZXRpbWU6IG1vbWVudEluRGF0ZVRpbWUsXHJcbiAgICAgIGxvY2F0aW9uQ29kZTogbnVsbCxcclxuICAgICAgbWVldEFuZEdyZWV0OiBudWxsLFxyXG4gICAgICBvbkFpcnBvcnQ6IG51bGwsXHJcbiAgICAgIG91dEZsaWdodE51bWJlcjogbnVsbCxcclxuICAgICAgcGFya0FuZFJpZGU6IG51bGwsXHJcbiAgICAgIHBhcmtBbmRTdHJvbGw6IG51bGwsXHJcbiAgICAgIHJlY29tbWVuZGVkOiBudWxsLFxyXG4gICAgICB0ZXJtaW5hbDogbnVsbFxyXG4gICAgfSBhcyBQYXJraW5nVGVtcFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxQYXJraW5nVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ2Fycml2YWxEYXRldGltZScsICdkZXBhcnREYXRldGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnF1ZXJ5LCB7IG92ZXJyaWRlOiBcInByb3BlcnR5XCIgfSlcclxuICAgKiBAcmV0dXJuIHtRdWVyeVNlYXJjaFJhaWxBcmdzfSAgICAgICAgIFJldHVybnMgUXVlcnlTZWFyY2hSYWlsQXJncyB0eXBlXHJcbiAgICovXHJcbiAgcHVibGljIG1ha2VSYWlsUXVlcnkoLi4uYXJnczogYW55KTogUmFpbFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobW9tZW50KCksIDMwKTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IFJhaWxUZW1wUGFyYW1zID0ge1xyXG4gICAgICBhaXJwb3J0RXhwcmVzc1N0YXRpb246IG51bGwsXHJcbiAgICAgIGFwcGx5UmFpbGNhcmRzOiBmYWxzZSxcclxuICAgICAgY2FybmV0VGlja2V0OiBmYWxzZSxcclxuICAgICAgY2hvc2VuU2VhcmNoQ2xhc3M6IFJhaWxDbGFzcy5BbGwsXHJcbiAgICAgIGNob3NlblNlYXJjaFR5cGU6IFJhaWxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5LFxyXG4gICAgICBkaXNhYmxlQXV0b0Rpc2NvdW50czogZmFsc2UsXHJcbiAgICAgIGV4dHJhVGltZTogZmFsc2UsXHJcbiAgICAgIGluQm91bmREYXRlVGltZTogdGltZSxcclxuICAgICAgaXNBaXJwb3J0RXhwcmVzczogZmFsc2UsXHJcbiAgICAgIG5vT2ZBZHVsdHM6IDAsXHJcbiAgICAgIG5vT2ZDaGlsZHJlbjogMCxcclxuICAgICAgb3BlblJldHVybjogZmFsc2UsXHJcbiAgICAgIG91dGJvdW5kQ3JpdGVyaWE6IFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsXHJcbiAgICAgIG91dEJvdW5kRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIHByaW9yaXRpc2VCeVByaWNlOiBmYWxzZSxcclxuICAgICAgcmV0dXJuQ3JpdGVyaWE6IFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsXHJcbiAgICAgIHRyYXZlbGxpbmdGcm9tOiBudWxsLFxyXG4gICAgICB0cmF2ZWxsaW5nVG86IG51bGwsXHJcbiAgICAgIHZpYTogZmFsc2UsXHJcbiAgICAgIHZpYUxvY2F0aW9uOiBudWxsLFxyXG4gICAgICByYWlsQ2FyZHM6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5hdGl6ZVJldHVybnM8UmFpbFRlbXBQYXJhbXM+KFxyXG4gICAgICBkZWZhdWx0VmFsLFxyXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKSxcclxuICAgICAgWydpbkJvdW5kRGF0ZVRpbWUnLCAnb3V0Qm91bmREYXRlVGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgUmFpbCBzZWFyY2ggcXVlcnkgd2l0aCBzdXBwbGllZCBwYXJhbXMsIGF1dG8gZmlsbHMgd2l0aCBkZWZhdWx0cyBpZiBmaWVsZHMgYXJlIGVtcHR5LlxyXG4gICAqIEBwYXJhbSAge2FueX0gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3MgRXhhbXBsZSAtIHNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge1F1ZXJ5U2VhcmNoUmFpbEFyZ3N9ICAgICAgICAgUmV0dXJucyBRdWVyeVNlYXJjaFJhaWxBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUlybFF1ZXJ5KC4uLmFyZ3M6IGFueSk6IElybFRlbXBQYXJhbXMge1xyXG4gICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobW9tZW50KCksIDMwKTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IElybFRlbXBQYXJhbXMgPSB7XHJcbiAgICAgIHJldHVybkNyaXRlcmlhOiBJcmxTZWFyY2hDcml0ZXJpYS5EZXBhcnQsXHJcbiAgICAgIG91dGJvdW5kQ3JpdGVyaWE6IElybFNlYXJjaENyaXRlcmlhLkRlcGFydCxcclxuICAgICAgc3VwcGxpZXI6IG51bGwsIC8vIElSTFN1cHBsaWVyIVxyXG4gICAgICBjb3VudHJ5Q29kZTogJycsXHJcbiAgICAgIGpvdXJuZXlUeXBlOiBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5LCAvLyBJUkxKb3VybmV5VHlwZSFcclxuICAgICAgY2xhc3M6IG51bGwsIC8vIElSTENsYXNzXHJcbiAgICAgIG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IHRpbWUsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IG51bGwsXHJcbiAgICAgIGFycml2YWxMb2NhdGlvbklkOiBudWxsLFxyXG4gICAgICBhZHVsdHM6IDAsXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICByZXR1cm5EZXBhcnR1cmVEYXRlVGltZTogdGltZVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbmF0aXplUmV0dXJuczxJcmxUZW1wUGFyYW1zPihcclxuICAgICAgZGVmYXVsdFZhbCxcclxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgLi4uYXJncyksXHJcbiAgICAgIFsncmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUnLCAnb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGVzIGEgRXVyb3N0YXIgc2VhcmNoIHF1ZXJ5IHdpdGggc3VwcGxpZWQgcGFyYW1zLCBhdXRvIGZpbGxzIHdpdGggZGVmYXVsdHMgaWYgZmllbGRzIGFyZSBlbXB0eS5cclxuICAgKiBAcGFyYW0gIHthbnl9ICAgICAgICAgICAgICAgICAgICAuLi5hcmdzIEV4YW1wbGUgLSBzZWFyY2hTZXJ2aWNlLm1ha2VFdXJvc3RhclF1ZXJ5KGRhdGEucXVlcnksIHsgb3ZlcnJpZGU6IFwicHJvcGVydHlcIiB9KVxyXG4gICAqIEByZXR1cm4ge0V1cm9zdGFyVGVtcFBhcmFtc30gICAgICAgICBSZXR1cm5zIFF1ZXJ5U2VhcmNoRXVyb3N0YXJBcmdzIHR5cGVcclxuICAgKi9cclxuICBwdWJsaWMgbWFrZUV1cm9zdGFyUXVlcnkoLi4uYXJnczogYW55KTogRXVyb3N0YXJUZW1wUGFyYW1zIHtcclxuICAgIGNvbnN0IG5vdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpO1xyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XHJcbiAgICBjb25zdCBtb21lbnRPdXREYXRlVGltZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XHJcbiAgICBjb25zdCBtb21lbnRJbkRhdGVUaW1lID0gdGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0b21vcnJvdywgMzApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRWYWw6IEV1cm9zdGFyVGVtcFBhcmFtcyA9IHtcclxuICAgICAgYWR1bHRzOiAwLFxyXG4gICAgICBhcnJpdmVMb2NhdGlvbjogbnVsbCxcclxuICAgICAgY2FiaW5DbGFzczogRmxpZ2h0Q2FiaW5DbGFzcy5BbnksXHJcbiAgICAgIGNoaWxkcmVuOiAwLFxyXG4gICAgICBjaG9zZW5TZWFyY2hUeXBlOiBFdXJvc3RhclNlYXJjaFR5cGUucmV0dXJuLFxyXG4gICAgICBkZXBhcnRMb2NhdGlvbjogbnVsbCxcclxuICAgICAgZmFyZVR5cGU6IEZhcmVUeXBlLkZsZXhpYmxlLFxyXG4gICAgICBpbmJvdW5kRGF0ZTogbW9tZW50T3V0RGF0ZVRpbWUsXHJcbiAgICAgIGluVGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcclxuICAgICAgbWF4Q29ubmVjdGlvbnM6IG51bGwsXHJcbiAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogZmFsc2UsXHJcbiAgICAgIG11bHRpRGVzdGluYXRpb246IFtdLFxyXG4gICAgICBvdXRCb3VuZERhdGU6IG1vbWVudEluRGF0ZVRpbWUsXHJcbiAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXHJcbiAgICAgIHByZWZlcnJlZENhcnJpZXJzOiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sXHJcbiAgICAgIHJldHVybkNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MuQW55XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuc2FuYXRpemVSZXR1cm5zPEV1cm9zdGFyVGVtcFBhcmFtcz4oXHJcbiAgICAgIGRlZmF1bHRWYWwsXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIC4uLmFyZ3MpLFxyXG4gICAgICBbJ291dEJvdW5kRGF0ZScsICdpbmJvdW5kRGF0ZSddXHJcbiAgICApO1xyXG4gIH1cclxuICAvKiBDcmVhdGUgUXVlcnkgRGVmYXVsdHMgRW5kICovXHJcblxyXG4gIHNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEF1dG9Mb2dvdXRDb25maWcoKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE92ZXJ3cml0ZSBpZiB0aGUgT0JUIGRpc3BsYXlzIGEgbGlzdCBvZiBvZmZpY2VzIGluc3RlYWQgb2Ygc2VhcmNoaW5nIG9uIHRoZW1cclxuICAgKi9cclxuICBwdWJsaWMgc2hvdWxkRmV0Y2hBbGxPZmZpY2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBpc0ZsaWdodHNHcm91cGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBnZXRDb3VudHJ5RnVsbE5hbWVGcm9tQ291bnRyeUNvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBmdWxsTmFtZSA9ICdVbmtub3duJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNvdW50cnkgPSB0aGlzLmNvdW50cmllc1tpXTtcclxuXHJcbiAgICAgIGlmIChjb3VudHJ5LmNDb2RlID09PSBjb2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvdW50cnkuY05hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVsbE5hbWU7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyUmVjZW50U2VhcmNoZXMoXHJcbiAgICBzZXJ2aWNlVHlwZT86IFNlcnZpY2VUeXBlLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSZWNlbnRTZWFyY2hbXT4ge1xyXG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcXVlcnkgPSB7IHNlcnZpY2VUeXBlIH07XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8R2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXk+ID1cclxuICAgICAgdGhpcy5nZXRVc2VyUmVjZW50U2VhcmNoZXNGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XHJcblxyXG4gICAgY29uc3QgZnVuYyA9IChcclxuICAgICAgcmVzdWx0czogR2V0VXNlclJlY2VudFNlYXJjaGVzUmVzdWx0QXJyYXlcclxuICAgICk6IFJlY2VudFNlYXJjaFtdID0+IHtcclxuICAgICAgY29uc3QgZGF0YTogUmVjZW50U2VhcmNoW10gPSByZXN1bHRzLm1hcChcclxuICAgICAgICAocmVzdWx0OiBHZXRVc2VyUmVjZW50U2VhcmNoZXNSZXN1bHQpOiBSZWNlbnRTZWFyY2ggPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXN1bHQuc2VydmljZVR5cGUsXHJcbiAgICAgICAgICAgIHNlYXJjaEFyZ3M6IHJlc3VsdC5zZWFyY2hBcmdzLFxyXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHJlc3VsdC5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogcmVzdWx0LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdHJhdmVsRGF0ZTogcmVzdWx0LnRyYXZlbERhdGUsXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnM6IHJlc3VsdC50cmF2ZWxsZXJzXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9icy5waXBlKHRha2UoMSksIG1hcChmdW5jKSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVSZWNlbnRTZWFyY2hCeUlEKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFzZURlbGV0ZVJlY2VudFNlYXJjaFVwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGlkIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVJlY2VudFNlYXJjaChxdWVyeTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzKTogdm9pZCB7XHJcbiAgICBpZiAocXVlcnkpIHtcclxuICAgICAgdGhpcy5iYXNlU2F2ZVJlY2VudFNlYXJjaFVwZGF0ZXIudXBkYXRlT25lKHF1ZXJ5KS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IHRoZSBsaXN0IG9mIGV1cm9zdGFyIHN0YXRpb24gbG9jYXRpb25zIGJhc2VkIG9uIHNlYXJjaCB0ZXJtIGdpdmVuXHJcbiAgICogQHRvZG8gLSBmaWxsIHRoaXMgb3V0IHNvIHRoYXQgaXQgYWN0dWFsbHkgcGVyZm9ybXMgYSBodHRwIGNhbGxcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHdlIHdhbnQgdG8gc2VhcmNoIGJ5XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBsb29rdXBFdXJvc3RhclN0YXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgIGNvbnNvbGUubG9nKCd0ZXJtfCAnLCB0ZXJtKTtcclxuICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy5ldXJvc3RhdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMuZXVyb3N0YXRpb25zLmZpbHRlcih2ID0+IHYuZGVzdGluYXRpb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRlcm0udG9Mb3dlckNhc2UoKSkgPiAtMSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoVHJhdmVsbGVycyhcclxuICAgIGlucHV0OiBzdHJpbmcsXHJcbiAgICBzZWFyY2hUcmF2ZWxsZXJzQnk6IFRyYXZlbGxlclNlYXJjaFR5cGVzXHJcbiAgKTogT2JzZXJ2YWJsZTxUcmF2ZWxsZXJbXT4ge1xyXG4gICAgY29uc3QgdHlwZTogQm9va2VyVHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckJvb2tpbmdUeXBlKCk7XHJcbiAgICB0aGlzLnRyYXZlbGxlcl9lcnJvciA9IGZhbHNlO1xyXG4gICAgLyogVE9ET1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlQWdlbnRDYW5Cb29rRm9yKCkpIHtcclxuICAgICAgdHlwZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlVmFsdWUoJ0FnZW50Q2FuQm9va0ZvcicpO1xyXG4gICAgfSovXHJcbiAgICBpZiAoXHJcbiAgICAgIHR5cGUgJiZcclxuICAgICAgdHlwZSAhPT0gQm9va2VyVHlwZS5TZWxmQm9vayAmJlxyXG4gICAgICB0eXBlICE9PSBCb29rZXJUeXBlLlRyYXZlbGxlciAmJlxyXG4gICAgICBpbnB1dC5sZW5ndGggPj0gMVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGlucHV0V29yZHMgPSBpbnB1dC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oW1xcd10pKy9nKTtcclxuICAgICAgY29uc3QgYXJnczogU2VhcmNoVXNlckNhbkJvb2tGb3JRdWVyeVZhcmlhYmxlcyA9IHt9O1xyXG4gICAgICBzd2l0Y2ggKHNlYXJjaFRyYXZlbGxlcnNCeSkge1xyXG4gICAgICAgIGNhc2UgVHJhdmVsbGVyU2VhcmNoVHlwZXMubmFtZTpcclxuICAgICAgICAgIGFyZ3MudXNlck5hbWUgPSBpbnB1dFdvcmRzLmxlbmd0aCA+IDEgPyBpbnB1dFdvcmRzWzBdIDogaW5wdXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRyYXZlbGxlclNlYXJjaFR5cGVzLmVtYWlsOlxyXG4gICAgICAgICAgYXJncy5lbWFpbCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBUcmF2ZWxsZXJTZWFyY2hUeXBlcy5lbXBsb3llZU51bWJlcjpcclxuICAgICAgICAgIGFyZ3MuZW1wbG95ZWVJZCA9IGlucHV0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFVzZXJzQ2FuQm9va0ZvckZldGNoZXIuZmV0Y2hMaXN0KGFyZ3MpLnBpcGUoXHJcbiAgICAgICAgbWFwKChkYXRhOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBhLnN1cm5hbWUgPCBiLnN1cm5hbWUgPyAtMSA6IGEuc3VybmFtZSA+IGIuc3VybmFtZSA/IDEgOiAwO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|