@sabstravtech/obtservices 0.0.22051001 → 0.1.6161600
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/components/basket-panel.d.ts +1 -0
- package/angular/fetchers.d.ts +5 -0
- package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-office.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
- package/angular/lib/vendor/services/logon.service.d.ts +2 -1
- package/angular/lib/vendor/services/user.service.d.ts +9 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +614 -550
- package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/updaters.d.ts +1 -0
- package/base/fetchers.d.ts +5 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +7 -1
- package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
- package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +9 -4
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +12 -4
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +14 -7
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +16 -5
- package/base/lib/vendor/classes/helpers.d.ts +6 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +10 -3
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +13 -8
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +3 -3
- package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +5 -4
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +10 -8
- package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
- package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
- package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
- package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -0
- package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-office.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +8 -6
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +7 -5
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +8 -1
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +8 -2
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +8 -7
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +5 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +5 -2
- package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +11 -3
- package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/summary-interface.d.ts +6 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/models/traveller.object.d.ts +12 -2
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +22 -9
- package/base/lib/vendor/services/logon.service.d.ts +5 -1
- package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
- package/base/lib/vendor/services/search.service.d.ts +27 -23
- package/base/lib/vendor/services/url.service.d.ts +2 -0
- package/base/lib/vendor/services/user.service.d.ts +36 -5
- package/base/lib/vendor/services/webtoken.service.d.ts +6 -0
- package/base/lib/vendor/types/graphql.types.d.ts +581 -549
- package/base/lib/vendor/types/types.d.ts +48 -6
- package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
- package/base/sabstravtech-obtservices-base.d.ts +1 -1
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/updaters.d.ts +1 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +541 -252
- 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 +4080 -1471
- 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/components/basket-panel.js +16 -7
- package/esm2015/angular/fetchers.js +6 -1
- package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-office.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +24 -21
- package/esm2015/angular/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/search.service.js +1 -1
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
- package/esm2015/angular/lib/vendor/services/user.service.js +28 -10
- package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +1023 -1220
- package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
- package/esm2015/angular/updaters.js +2 -1
- package/esm2015/base/fetchers.js +6 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +12 -3
- package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -8
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +219 -18
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +235 -67
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +462 -49
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +37 -13
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +281 -62
- package/esm2015/base/lib/vendor/classes/helpers.js +32 -3
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +228 -54
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +221 -46
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +101 -14
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +67 -40
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +146 -11
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +210 -25
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +58 -4
- package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
- package/esm2015/base/lib/vendor/data/countries.json +484 -242
- package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
- package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-office.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +21 -3
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +129 -43
- package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
- package/esm2015/base/lib/vendor/services/logon.service.js +40 -3
- package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
- package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
- package/esm2015/base/lib/vendor/services/search.service.js +100 -117
- package/esm2015/base/lib/vendor/services/url.service.js +3 -1
- package/esm2015/base/lib/vendor/services/user.service.js +90 -12
- package/esm2015/base/lib/vendor/services/webtoken.service.js +14 -1
- package/esm2015/base/lib/vendor/types/graphql.types.js +21 -2
- package/esm2015/base/lib/vendor/types/types.js +32 -14
- package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
- package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
- package/esm2015/base/updaters.js +2 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +1254 -1332
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +3324 -839
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,13 +2,13 @@ import { __awaiter } from "tslib";
|
|
|
2
2
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
4
|
import moment from 'moment';
|
|
5
|
+
import { DifferentInvokdedUserReasons } from '../types/types';
|
|
5
6
|
import { ServiceType } from '../types/graphql.types';
|
|
6
7
|
export class LoungesEnterpriseSearch extends BaseEnterpriseSearch {
|
|
7
|
-
constructor(loungefetcher, helpers, basketService, storageService, searchService) {
|
|
8
|
-
super(storageService, helpers);
|
|
8
|
+
constructor(loungefetcher, helpers, basketService, storageService, searchService, userService) {
|
|
9
|
+
super(storageService, helpers, searchService, userService);
|
|
9
10
|
this.loungefetcher = loungefetcher;
|
|
10
11
|
this.basketService = basketService;
|
|
11
|
-
this.searchService = searchService;
|
|
12
12
|
this.type = ServiceType.Lounge;
|
|
13
13
|
this.terminals = new BehaviorSubject([]);
|
|
14
14
|
this._flightNumber = null;
|
|
@@ -274,9 +274,13 @@ export class LoungesEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
274
274
|
this.results.next(results.sort(terminalSorter));
|
|
275
275
|
}
|
|
276
276
|
updateFromPreviousSearches(previousItems) {
|
|
277
|
-
var _a;
|
|
277
|
+
var _a, _b, _c, _d, _e;
|
|
278
278
|
console.log('PREPOPULATING LOUNGE FORM');
|
|
279
279
|
const flightItem = (_a = previousItems[ServiceType.Flight]) === null || _a === void 0 ? void 0 : _a.searchQuery;
|
|
280
|
+
const irlItem = (_b = previousItems[ServiceType.InternationalRail]) === null || _b === void 0 ? void 0 : _b.searchQuery;
|
|
281
|
+
const railItem = (_c = previousItems[ServiceType.Rail]) === null || _c === void 0 ? void 0 : _c.searchQuery;
|
|
282
|
+
const hotelItem = (_d = previousItems[ServiceType.Rail]) === null || _d === void 0 ? void 0 : _d.searchQuery;
|
|
283
|
+
const carItem = (_e = previousItems[ServiceType.Car]) === null || _e === void 0 ? void 0 : _e.searchQuery;
|
|
280
284
|
if (flightItem) {
|
|
281
285
|
try {
|
|
282
286
|
let date = this.searchService.searches[ServiceType.Flight].outBoundDate.toDate();
|
|
@@ -288,22 +292,98 @@ export class LoungesEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
288
292
|
this.locationCode = this.searchService.searches[ServiceType.Flight]
|
|
289
293
|
.arriveLocation;
|
|
290
294
|
}
|
|
291
|
-
catch (
|
|
292
|
-
console.error('Error trying to prepopulate
|
|
295
|
+
catch (_f) {
|
|
296
|
+
console.error('Error trying to prepopulate lounge from flight item');
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
else if (railItem) {
|
|
300
|
+
try {
|
|
301
|
+
let date = this.searchService.searches[ServiceType.Rail].outBoundDateTime.toDate();
|
|
302
|
+
this.date = {
|
|
303
|
+
day: date.getUTCDate(),
|
|
304
|
+
month: date.getUTCMonth() + 1,
|
|
305
|
+
year: date.getUTCFullYear()
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
catch (_g) {
|
|
309
|
+
console.error('Error trying to prepopulate lounge from rail item');
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
else if (irlItem) {
|
|
313
|
+
try {
|
|
314
|
+
let date = this.searchService.searches[ServiceType.InternationalRail].outBoundDateTime.toDate();
|
|
315
|
+
this.date = {
|
|
316
|
+
day: date.getUTCDate(),
|
|
317
|
+
month: date.getUTCMonth() + 1,
|
|
318
|
+
year: date.getUTCFullYear()
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
catch (_h) {
|
|
322
|
+
console.error('Error trying to prepopulate lounge from international rail item');
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
else if (hotelItem) {
|
|
326
|
+
try {
|
|
327
|
+
let date = this.searchService.searches[ServiceType.Hotel].checkin_date.toDate();
|
|
328
|
+
this.date = {
|
|
329
|
+
day: date.getUTCDate(),
|
|
330
|
+
month: date.getUTCMonth() + 1,
|
|
331
|
+
year: date.getUTCFullYear()
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
catch (_j) {
|
|
335
|
+
console.error('Error trying to prepopulate lounge from hotel item');
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else if (carItem) {
|
|
339
|
+
try {
|
|
340
|
+
let date = this.searchService.searches[ServiceType.Car].pickup_date;
|
|
341
|
+
this.date = date;
|
|
342
|
+
}
|
|
343
|
+
catch (_k) {
|
|
344
|
+
console.error('Error trying to prepopulate lounge from car item');
|
|
293
345
|
}
|
|
294
346
|
}
|
|
295
347
|
}
|
|
348
|
+
updateSearchFromExpiredBasketItem(basketItem) {
|
|
349
|
+
const searchLoungesQuery = basketItem.searchQuery;
|
|
350
|
+
if (searchLoungesQuery) {
|
|
351
|
+
this.arrivalDatetime = moment(searchLoungesQuery.arrivalDatetime);
|
|
352
|
+
this.terminal = searchLoungesQuery.terminal;
|
|
353
|
+
this.searchService
|
|
354
|
+
.getAirportByCode(searchLoungesQuery.locationCode)
|
|
355
|
+
.subscribe((airport) => {
|
|
356
|
+
var _a, _b, _c, _d, _e, _f;
|
|
357
|
+
if (airport) {
|
|
358
|
+
this.locationCode = {
|
|
359
|
+
country: (_b = (_a = airport.iataMatch) === null || _a === void 0 ? void 0 : _a.locationDetails) === null || _b === void 0 ? void 0 : _b.country,
|
|
360
|
+
countryCode: (_d = (_c = airport.iataMatch) === null || _c === void 0 ? void 0 : _c.locationDetails) === null || _d === void 0 ? void 0 : _d.countryCode,
|
|
361
|
+
destination: airport.iataMatch.name,
|
|
362
|
+
gateway: airport.iataMatch.iata,
|
|
363
|
+
postcode: (_f = (_e = airport.iataMatch) === null || _e === void 0 ? void 0 : _e.locationDetails) === null || _f === void 0 ? void 0 : _f.postcode,
|
|
364
|
+
terminals: this.searchService.processTerminals(airport.iataMatch.terminals)
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
// add Travellers
|
|
370
|
+
if (basketItem.users) {
|
|
371
|
+
basketItem.users.forEach((user) => {
|
|
372
|
+
this.searchService.addTraveller(user);
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
}
|
|
296
376
|
addLoungeToBasket(loungeQuote, loungeQuery) {
|
|
297
|
-
var _a;
|
|
377
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
298
378
|
return __awaiter(this, void 0, void 0, function* () {
|
|
299
379
|
if (loungeQuote.unavailable) {
|
|
300
|
-
return Promise.resolve(
|
|
380
|
+
return Promise.resolve(DifferentInvokdedUserReasons.cancel);
|
|
301
381
|
}
|
|
302
382
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
303
383
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
304
384
|
const termsAndConditions = this.getTermsAndCond(loungeQuote);
|
|
305
385
|
if (basket) {
|
|
306
|
-
|
|
386
|
+
const whatHappened = yield this.basketService.addToBasket({
|
|
307
387
|
adults: loungeQuery.adults,
|
|
308
388
|
children: loungeQuery.children,
|
|
309
389
|
infants: loungeQuery.infants,
|
|
@@ -332,10 +412,17 @@ export class LoungesEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
332
412
|
price: loungeQuote.price,
|
|
333
413
|
currency: loungeQuote.currency,
|
|
334
414
|
searchQuery: loungeQuery,
|
|
335
|
-
outboundDate: loungeQuery.arrivalDatetime.format()
|
|
415
|
+
outboundDate: loungeQuery.arrivalDatetime.format(),
|
|
416
|
+
lowestPrice: ((_b = this.cheapestPrice) === null || _b === void 0 ? void 0 : _b.amount) != loungeQuote.price || ((_c = this.cheapestPrice) === null || _c === void 0 ? void 0 : _c.currencyCode) != loungeQuote.currency ? (_d = this.cheapestPrice) === null || _d === void 0 ? void 0 : _d.amount : null,
|
|
417
|
+
lowestPriceCurrency: ((_e = this.cheapestPrice) === null || _e === void 0 ? void 0 : _e.amount) != loungeQuote.price || ((_f = this.cheapestPrice) === null || _f === void 0 ? void 0 : _f.currencyCode) != loungeQuote.currency ?
|
|
418
|
+
(_g = this.cheapestPrice) === null || _g === void 0 ? void 0 : _g.currencyCode : null
|
|
336
419
|
}, intBasket, this.searchService, this.travellers, loungeQuote.requiresReason);
|
|
420
|
+
if (whatHappened === DifferentInvokdedUserReasons.research) {
|
|
421
|
+
this.performSearch();
|
|
422
|
+
}
|
|
423
|
+
return whatHappened;
|
|
337
424
|
}
|
|
338
|
-
return
|
|
425
|
+
return DifferentInvokdedUserReasons.cancel; // TODO should this throw an error?
|
|
339
426
|
});
|
|
340
427
|
}
|
|
341
428
|
getTermsAndCond(loungeQuote) {
|
|
@@ -426,8 +513,8 @@ export class LoungesEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
426
513
|
}
|
|
427
514
|
applyFavourite(fav) {
|
|
428
515
|
return __awaiter(this, void 0, void 0, function* () {
|
|
429
|
-
this.searchService.getAirportsList(fav.locationCode).subscribe(a => {
|
|
430
|
-
this.locationCode = a.find(a => a.gateway == fav.locationCode);
|
|
516
|
+
this.searchService.getAirportsList(fav.locationCode).subscribe((a) => {
|
|
517
|
+
this.locationCode = a.find((a) => a.gateway == fav.locationCode);
|
|
431
518
|
this.terminal = fav.terminal;
|
|
432
519
|
});
|
|
433
520
|
this.adults = fav.adults;
|
|
@@ -438,4 +525,4 @@ export class LoungesEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
438
525
|
}
|
|
439
526
|
LoungesEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_lounge';
|
|
440
527
|
LoungesEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_lounge';
|
|
441
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG91bmdlcy1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9sb3VuZ2VzLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQWE1QixPQUFPLEVBT0wsV0FBVyxFQUNaLE1BQU0sd0JBQXdCLENBQUM7QUFlaEMsTUFBTSxPQUFPLHVCQUNYLFNBQVEsb0JBSVA7SUFtS0QsWUFDVSxhQUEyQyxFQUNuRCxPQUEyQixFQUNuQixhQUErQyxFQUN2RCxjQUFrQyxFQUMxQixhQUErQztRQUV2RCxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBTnZCLGtCQUFhLEdBQWIsYUFBYSxDQUE4QjtRQUUzQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFFL0Msa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBbktsRCxTQUFJLEdBQWdCLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDdkMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFrQixFQUFFLENBQUMsQ0FBQztRQStCcEQsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFvRTdCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQVV2QyxtQkFBbUI7UUFDWixhQUFRLEdBQUc7WUFDaEIsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRTtZQUNyQixLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztZQUMzQixHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFO1NBQ3JCLENBQUM7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QUFFO2dCQUNqRSxJQUFJLENBQUMsWUFBWSxHQUFJLENBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDekUsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFBO1lBQzlCLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQTtZQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUE7UUFDNUIsQ0FBQztLQUFBOztBQXhnQmUsOENBQXNCLEdBQUcsZUFBZSxDQUFDO0FBQ3pDLCtDQUF1QixHQUFHLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHtcclxuICBMb3VuZ2VRdW90ZVJlc3VsdCxcclxuICBMb3VuZ2VRdW90ZVJlc3VsdEFycmF5LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXHJcbiAgVGVybWluYWxzVHlwZVxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBBaXJwb3J0UmVzdWx0cyxcclxuICBCYXNrZXRJdGVtLFxyXG4gIExvdW5nZVF1b3RlLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGVcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNlTG91bmdlUXVvdGVGZXRjaGVyLFxyXG4gIExvdW5nZVF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9sb3VuZ2UtcXVvdGUuZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgTG91bmdlc0VudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgTG91bmdlc1RlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lsb3VuZ2VzLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuZXhwb3J0IGNsYXNzIExvdW5nZXNFbnRlcnByaXNlU2VhcmNoPExRX1EgZXh0ZW5kcyBMb3VuZ2VRdW90ZUZldGNoZXJUeXBlPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBMb3VuZ2VzVGVtcFBhcmFtcyxcclxuICAgIExvdW5nZVF1b3RlUmVzdWx0QXJyYXksXHJcbiAgICBMb3VuZ2VRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgTG91bmdlc0VudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9sb3VuZ2UnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2xvdW5nZSc7XHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuTG91bmdlO1xyXG4gIHB1YmxpYyB0ZXJtaW5hbHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlcm1pbmFsc1R5cGVbXT4oW10pO1xyXG5cclxuICBwcml2YXRlIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG4gIHByaXZhdGUgX2xvY2F0aW9uQ29kZTogc3RyaW5nO1xyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluZmFudHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cztcclxuICB9XHJcblxyXG4gIHNldCBpbmZhbnRzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mbGlnaHROdW1iZXI6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIGdldCBmbGlnaHROdW1iZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9mbGlnaHROdW1iZXI7XHJcbiAgfVxyXG5cclxuICBzZXQgZmxpZ2h0TnVtYmVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2ZsaWdodE51bWJlciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvY2F0aW9uQ29kZSgpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uQ29kZTtcclxuICB9XHJcblxyXG4gIHNldCBsb2NhdGlvbkNvZGUodmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25Db2RlID0gdmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtaW5hbHNUeXBlOiBUZXJtaW5hbHNUeXBlW10gPSB0aGlzLnRlcm1pbmFscz8udmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLl9sb2NhdGlvbkNvZGUgPSAnJztcclxuICAgICAgdGhpcy50ZXJtaW5hbCA9IG51bGw7XHJcbiAgICAgIHRoaXMudGVybWluYWxzLm5leHQoW10pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcclxuICAgICAgdGhpcy5fbG9jYXRpb25Db2RlID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgICAgdGhpcy50ZXJtaW5hbCA9IG51bGw7XHJcbiAgICAgIHRoaXMudGVybWluYWxzLm5leHQodmFsdWUudGVybWluYWxzKTtcclxuICAgICAgaWYgKHRlcm1pbmFsc1R5cGUubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gdGVybWluYWxzVHlwZVswXS5rZXk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbG9jYXRpb25Db2RlID0gbnVsbDtcclxuICAgICAgdGhpcy50ZXJtaW5hbCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtaW5hbCA9IG51bGw7XHJcbiAgICAgIHRoaXMudGVybWluYWxzLm5leHQoW10pO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgdGVybWluYWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudGVybWluYWxcclxuICAgICAgPyB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwudG9TdHJpbmcoKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXQgdGVybWluYWwoaW5wdXQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsID0gaW5wdXQ7XHJcbiAgICBjb25zdCBmb3VuZDogVGVybWluYWxzVHlwZSA9IHRoaXMudGVybWluYWxzLnZhbHVlLmZpbmQoXHJcbiAgICAgICh0ZXJtaW5hbDogVGVybWluYWxzVHlwZSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmICh0ZXJtaW5hbC52YWx1ZSA9PT0gaW5wdXQpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoZm91bmQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gZm91bmQua2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMudGVybWluYWxzLnZhbHVlICYmIHRoaXMudGVybWluYWxzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSB0aGlzLnRlcm1pbmFscy52YWx1ZVswXS5rZXk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gJ0FueSBUZXJtaW5hbCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGVybWluYWw6IHN0cmluZyA9ICcnO1xyXG4gIHNldCBzZWxlY3RlZFRlcm1pbmFsKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGVybWluYWwgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFRlcm1pbmFsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUZXJtaW5hbDtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyB2YXJpYWJsZXNcclxuICBwdWJsaWMgbWluX2RhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsIC8vIG5nYkRhdGUgbW9udGhzIGFyZSBub3QgMCBpbmRleGVkXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG4gIGdldCBkYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBhcnJpdmFsRGF0ZXRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZTtcclxuICB9XHJcblxyXG4gIHNldCBhcnJpdmFsRGF0ZXRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIGlmICh2YWx1ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZSA9IHZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX3RpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgTG91bmdlc0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBsb3VuZ2VmZXRjaGVyOiBCYXNlTG91bmdlUXVvdGVGZXRjaGVyPExRX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IExvdW5nZXNUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgTG91bmdlc1RlbXBQYXJhbXNcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHNlYXJjaFNlcnZpY2UubWFrZUxvdW5nZXNRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnMoXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnMsXHJcbiAgICAgICAgICAgIFNlcnZpY2VUeXBlLkxvdW5nZVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuXHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PExvdW5nZVF1b3RlUmVzdWx0QXJyYXk+KFxyXG4gICAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICAgICkgfHwgW107XHJcbiAgICAvLyBpZiAocmVzdWx0cyA9PSBudWxsICYmIHRoaXMuaXNWYWxpZCkge1xyXG4gICAgLy8gICBzZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyB8fCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpIHtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUxvdW5nZXNRdWVyeSgpKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBxdWVyeTogU2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzID0ge1xyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIGluZmFudHM6IHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzLFxyXG4gICAgICBsb2NhdGlvbkNvZGU6IHRoaXMuX2xvY2F0aW9uQ29kZSxcclxuICAgICAgdGVybWluYWw6XHJcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsID09PSAnQW55JyA/IG51bGwgOiB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwsXHJcbiAgICAgIGFycml2YWxEYXRldGltZTogdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICAvLyBQcml2YXRlIE1ldGhvZHNcclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIHRyYXZlbGxlcnM6IHRoaXMudHJhdmVsbGVyc1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAoIXRoaXMuX2xvY2F0aW9uQ29kZSB8fCB0aGlzLl9sb2NhdGlvbkNvZGUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1lvdSBtdXN0IHNlbGVjdCBhaXJwb3J0IGZpcnN0LicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICghdGhpcy5xdWVyeS50ZXJtaW5hbCkge1xyXG4gICAgLy8gICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUZXJtaW5hbCBjYW4gbm90IGJlIGVtcHR5LicpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lLnVuaXgoKSA8IG1vbWVudCgpLnVuaXgoKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdPdXR3YXJkIGpvdXJuZXkgY2Fubm90IGJlIGluIHRoZSBwYXN0LicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRGF0ZVRpbWUoKSB7XHJcbiAgICBpZiAodGhpcy5fZGF0ZSAmJiB0aGlzLl90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fZGF0ZSwgdGhpcy5fdGltZSk7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICB0aGlzLmxvdW5nZWZldGNoZXIuZmV0Y2hMaXN0KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcz4ocXVlcnkpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXNcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkxvdW5nZSxcclxuICAgICAgc2VhcmNoQXJnczogcXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuYXJyaXZhbERhdGV0aW1lLmZvcm1hdCgpLFxyXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycylcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuYXJyaXZhbERhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFycml2YWxEYXRldGltZSk7XHJcbiAgICB0aGlzLnRlcm1pbmFsID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudGVybWluYWw7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgLmdldEFpcnBvcnRCeUNvZGUocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MubG9jYXRpb25Db2RlKVxyXG4gICAgICAuc3Vic2NyaWJlKChhaXJwb3J0OiBBaXJwb3J0UmVzdWx0cykgPT4ge1xyXG4gICAgICAgIGlmIChhaXJwb3J0KSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uQ29kZSA9IHtcclxuICAgICAgICAgICAgY291bnRyeTogYWlycG9ydC5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgICAgZ2F0ZXdheTogYWlycG9ydC5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgICAgcG9zdGNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICAgIGFpcnBvcnQuaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy50ZXJtaW5hbCA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRlcm1pbmFsO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIHNvcnRCeVByaWNlKGFzYz86IGJvb2xlYW4sIHJlc3VsdEFycmF5OiBMb3VuZ2VRdW90ZVtdID0gW10pIHtcclxuICAgIGxldCBzb3J0UmVzdWx0cyA9IFsuLi50aGlzLmZ1bGxSZXN1bHRzXSBhcyBMb3VuZ2VRdW90ZVtdO1xyXG4gICAgaWYgKCFzb3J0UmVzdWx0cy5sZW5ndGgpIHtcclxuICAgICAgc29ydFJlc3VsdHMgPSByZXN1bHRBcnJheTtcclxuICAgIH1cclxuICAgIHNvcnRSZXN1bHRzID0gdGhpcy5zb3J0UmVzdWx0c1ByaWNlKHNvcnRSZXN1bHRzLCBhc2MpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoc29ydFJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgc29ydFJlc3VsdHNQcmljZShyZXN1bHRBcnJheTogTG91bmdlUXVvdGVbXSwgYXNjPzogYm9vbGVhbik6IExvdW5nZVF1b3RlW10ge1xyXG4gICAgbGV0IHJlc3VsdHMgPSBbLi4ucmVzdWx0QXJyYXldO1xyXG4gICAgaWYgKGFzYykge1xyXG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KFxyXG4gICAgICAgIChhOiBMb3VuZ2VRdW90ZVJlc3VsdCwgYjogTG91bmdlUXVvdGVSZXN1bHQpID0+IGIucHJpY2UgLSBhLnByaWNlXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KFxyXG4gICAgICAgIChhOiBMb3VuZ2VRdW90ZVJlc3VsdCwgYjogTG91bmdlUXVvdGVSZXN1bHQpID0+IGEucHJpY2UgLSBiLnByaWNlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIHNvcnRCeVRlcm1pbmFsKHJlc3VsdEFycmF5OiBMb3VuZ2VRdW90ZVtdID0gW10pIHtcclxuICAgIGxldCByZXN1bHRzID0gWy4uLnRoaXMuZnVsbFJlc3VsdHNdO1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xyXG4gICAgICByZXN1bHRzID0gcmVzdWx0QXJyYXk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0ZXJtaW5hbFNvcnRlciA9IChhOiBMb3VuZ2VRdW90ZVJlc3VsdCwgYjogTG91bmdlUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgcmV0dXJuIC0xOyAvLyBUT0RPIGEucmF3RGF0YS5GbGlnaHRUZXJtT3V0ID4gYi5yYXdEYXRhLkZsaWdodFRlcm1PdXQgPyAxIDogLTE7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cy5zb3J0KHRlcm1pbmFsU29ydGVyKSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdQUkVQT1BVTEFUSU5HIExPVU5HRSBGT1JNJyk7XHJcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XHJcbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XHJcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBkYXRlID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLm91dEJvdW5kRGF0ZS50b0RhdGUoKTtcclxuICAgICAgICB0aGlzLmRhdGUgPSB7XHJcbiAgICAgICAgICBkYXk6IGRhdGUuZ2V0VVRDRGF0ZSgpLFxyXG4gICAgICAgICAgbW9udGg6IGRhdGUuZ2V0VVRDTW9udGgoKSArIDEsXHJcbiAgICAgICAgICB5ZWFyOiBkYXRlLmdldFVUQ0Z1bGxZZWFyKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMubG9jYXRpb25Db2RlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF1cclxuICAgICAgICAgIC5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIHBhcmtpbmcgZnJvbSBsb3VuZ2UgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRMb3VuZ2VUb0Jhc2tldChcclxuICAgIGxvdW5nZVF1b3RlOiBMb3VuZ2VRdW90ZSxcclxuICAgIGxvdW5nZVF1ZXJ5OiBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXNcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChsb3VuZ2VRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQobG91bmdlUXVvdGUpO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGFkdWx0czogbG91bmdlUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgICAgY2hpbGRyZW46IGxvdW5nZVF1ZXJ5LmNoaWxkcmVuLFxyXG4gICAgICAgICAgaW5mYW50czogbG91bmdlUXVlcnkuaW5mYW50cyxcclxuICAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgICAgc2VydmljZTogbG91bmdlUXVvdGUuc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZXRpbWU6IGxvdW5nZVF1ZXJ5LmFycml2YWxEYXRldGltZS5mb3JtYXQoKSxcclxuICAgICAgICAgICAgbG9jYXRpb25Db2RlOiBsb3VuZ2VRdW90ZS5jb2RlLFxyXG4gICAgICAgICAgICBuYW1lOiBsb3VuZ2VRdW90ZS5uYW1lLFxyXG4gICAgICAgICAgICBhaXJwb3J0SWF0YTogbG91bmdlUXVlcnk/LmxvY2F0aW9uQ29kZSxcclxuICAgICAgICAgICAgbG9nbzogbG91bmdlUXVvdGUubG91bmdlLmxvZ28sXHJcbiAgICAgICAgICAgIGludHJvZHVjdGlvbjogbG91bmdlUXVvdGUubG91bmdlLmludHJvZHVjdGlvbixcclxuICAgICAgICAgICAgY292aWRDb3B5OiBsb3VuZ2VRdW90ZS5sb3VuZ2UubWlzYy5jb3ZpZENvcHksXHJcbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbkluZm86IGxvdW5nZVF1b3RlLmxvdW5nZS5jYW5jZWxsYXRpb25JbmZvLFxyXG4gICAgICAgICAgICBhZG1lbmRtZW50c0luZm86IGxvdW5nZVF1b3RlLmxvdW5nZS5hbWVuZG1lbnRzSW5mbyxcclxuICAgICAgICAgICAgY2hlY2tJbkluZm86IGxvdW5nZVF1b3RlLmxvdW5nZS5jaGVja0luSW5mbyxcclxuICAgICAgICAgICAgZHJlc3NDb2RlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UuZHJlc3NDb2RlLFxyXG4gICAgICAgICAgICBmb29kQW5kQmV2ZXJhZ2U6IGxvdW5nZVF1b3RlLmxvdW5nZS5mb29kQW5kQmV2ZXJhZ2UsXHJcbiAgICAgICAgICAgIHdoYXRzSW5jbHVkZWRGb29kOiBsb3VuZ2VRdW90ZS5sb3VuZ2Uud2hhdHNJbmNsdWRlZEZvb2QsXHJcbiAgICAgICAgICAgIHdoYXRzSW5jbHVkZWREcmlua3M6IGxvdW5nZVF1b3RlLmxvdW5nZS53aGF0c0luY2x1ZGVkRHJpbmtzLFxyXG4gICAgICAgICAgICB3aGF0c0luY2x1ZGVkRXh0cmFzOiBsb3VuZ2VRdW90ZS5sb3VuZ2Uud2hhdHNJbmNsdWRlZEV4dHJhcyxcclxuICAgICAgICAgICAgZ3JvdXBJbmZvOiBsb3VuZ2VRdW90ZS5sb3VuZ2UuZ3JvdXBJbmZvLFxyXG4gICAgICAgICAgICB0ZXJtaW5hbDogbG91bmdlUXVvdGUubG91bmdlLnRlcm1pbmFsPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9uc1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHByaWNlOiBsb3VuZ2VRdW90ZS5wcmljZSxcclxuICAgICAgICAgIGN1cnJlbmN5OiBsb3VuZ2VRdW90ZS5jdXJyZW5jeSxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5OiBsb3VuZ2VRdWVyeSxcclxuICAgICAgICAgIG91dGJvdW5kRGF0ZTogbG91bmdlUXVlcnkuYXJyaXZhbERhdGV0aW1lLmZvcm1hdCgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBsb3VuZ2VRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtc0FuZENvbmQobG91bmdlUXVvdGU6IExvdW5nZVF1b3RlKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ05hbWUnLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UubmFtZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RlbGVwaG9uZScsXHJcbiAgICAgICAgdmFsdWU6IGxvdW5nZVF1b3RlLmxvdW5nZS50ZWxlcGhvbmVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdJbXBvcnRhbnQgSW5mb3JtYXRpb24nLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UubWlzYy5pbXBvcnRhbnRJbmZvcm1hdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ludHJvZHVjdGlvbicsXHJcbiAgICAgICAgdmFsdWU6IGxvdW5nZVF1b3RlLmxvdW5nZS5pbnRyb2R1Y3Rpb25cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEcmVzcyBDb2RlJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLmRyZXNzQ29kZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0J1c2luZXNzIEZhY2lsaXRpZXMnLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UubWlzYy5idXNpbmVzc2ZhY2lsaXRpZXNcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdFbnRlcnRhaW5tZW50IEZhY2lsaXRpZXMnLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UubWlzYy5lbnRlcnRhaW5tZW50RmFjaWxpdGllc1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0Rpc2FibGVkIEZhY2lsaXRpZXMnLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UubWlzYy5mYWNpbGl0aWVzZGlzYWJsZWRcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGYWNpbGl0aWVzJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLmZhY2lsaXRpZXMudG9TdHJpbmcoKVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpbWVzJyxcclxuICAgICAgICB2YWx1ZTogYE9wZW5zICR7bG91bmdlUXVvdGUubG91bmdlLm9wZW5UaW1lfTsgQ2xvc2VzICR7bG91bmdlUXVvdGUubG91bmdlLmNsb3NlVGltZX1gXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGlyZWN0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6IGxvdW5nZVF1b3RlLmxvdW5nZS5kaXJlY3Rpb25zXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnR3JvdXBzJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLmdyb3VwSW5mb1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NoZWNrLUluIFRpbWUnLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UuY2hlY2tJbkluZm9cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbWVuZCBJbmZvJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLmFtZW5kbWVudHNJbmZvXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2FuY2VsIEluZm8nLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UuY2FuY2VsbGF0aW9uSW5mb1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogTG91bmdlUXVvdGVbXSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY3VycmVuY3kgPSByZXN1bHRzWzBdLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogTG91bmdlUXVvdGUpID0+IHtcclxuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC5wcmljZTtcclxuICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcclxuICAgICAgICByZXR1cm4gY2hlYXBlc3RQcmljZTtcclxuICAgICAgfSxcclxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5IH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuTG91bmdlLFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IHNlYXJjaFxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPntcclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2LmxvY2F0aW9uQ29kZSkuc3Vic2NyaWJlKGEgPT4ge1xyXG4gICAgICB0aGlzLmxvY2F0aW9uQ29kZSA9IChhIGFzIGFueVtdKS5maW5kKGEgPT4gYS5nYXRld2F5ID09IGZhdi5sb2NhdGlvbkNvZGUpXHJcbiAgICAgIHRoaXMudGVybWluYWwgPSBmYXYudGVybWluYWxcclxuICAgIH0pXHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5hZHVsdHNcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBmYXYuY2hpbGRyZW5cclxuICAgIHRoaXMuaW5mYW50cyA9IGZhdi5pbmZhbnRzXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
528
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG91bmdlcy1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9sb3VuZ2VzLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUk1QixPQUFPLEVBQ0wsNEJBQTRCLEVBUTdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQVdMLFdBQVcsRUFFWixNQUFNLHdCQUF3QixDQUFDO0FBZ0JoQyxNQUFNLE9BQU8sdUJBQ1gsU0FBUSxvQkFJUDtJQW1LRCxZQUNVLGFBQTJDLEVBQ25ELE9BQTJCLEVBQ25CLGFBQStDLEVBQ3ZELGNBQWtDLEVBQ2xDLGFBQStDLEVBQy9DLFdBQWlDO1FBR2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQVJuRCxrQkFBYSxHQUFiLGFBQWEsQ0FBOEI7UUFFM0Msa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBaktsRCxTQUFJLEdBQWdCLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDdkMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFrQixFQUFFLENBQUMsQ0FBQztRQStCcEQsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFvRTdCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQVV2QyxtQkFBbUI7UUFDWixhQUFRLEdBQUc7WUFDaEIsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRTtZQUNyQixLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztZQUMzQixHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFO1NBQ3JCLENBQUM7UUFFTSxVQUFLLEdBQWtCLElBQUksQ0FBQztRQVU1QixVQUFLLEdBQVcsSUFBSSxDQUFDO1FBMEJuQix1QkFBa0IsR0FDMUIsdUJBQXVCLENBQUMsdUJBQXVCLENBQUM7UUFDeEMsNEJBQXVCLEdBQy9CLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDO1FBWWhELE1BQU0sSUFBSSxHQUVOLGNBQWMsQ0FBQyxjQUFjLENBQy9CLHVCQUF1QixDQUFDLHNCQUFzQixDQUMvQyxJQUFJO1lBQ0gsVUFBVSxFQUFFLEVBQXVCO1NBQ3BDLENBQUM7UUFFRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXZFLElBQUksYUFBYSxDQUFDLDhCQUE4QixFQUFFLEVBQUU7WUFDbEQsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FDMUMsQ0FBQyxVQUF1QixFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQ3JELFVBQVUsRUFDVixXQUFXLENBQUMsTUFBTSxDQUNuQixDQUFDO2dCQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBRTdCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQ0YsQ0FBQztTQUNIO1FBQ0QsTUFBTSxPQUFPLEdBQ1gsY0FBYyxDQUFDLG9CQUFvQixDQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLElBQUksRUFBRSxDQUFDO1FBQ1YseUNBQXlDO1FBQ3pDLG1DQUFtQztRQUNuQyxJQUFJO1FBQ0osSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQXJNRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUlELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsS0FBaUM7O1FBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQyxNQUFNLGFBQWEsU0FBb0IsSUFBSSxDQUFDLFNBQVMsMENBQUUsS0FBSyxDQUFDO1FBQzdELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO2FBQU0sSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2FBQzlDO1lBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUM3QixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ3JDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEQsQ0FBQyxRQUF1QixFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQ3pDLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQ0YsQ0FBQztRQUVGLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDbkM7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzthQUNyRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO2FBQ3hDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUdELElBQUksZ0JBQWdCLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQVVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsS0FBb0I7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFHRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLEtBQWE7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBRXhDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsRDthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFzRFMsVUFBVTtRQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxLQUFLLEdBQWdDO1lBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07WUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQ2hDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyxRQUFRLEVBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUN0RSxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlO1NBQ2pELENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUE4QixLQUFLLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsa0JBQWtCO0lBRVYsUUFBUTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUNoQyx1QkFBdUIsQ0FBQyxzQkFBc0IsRUFDOUM7WUFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsOEJBQThCO1FBQzlCLGdFQUFnRTtRQUNoRSxJQUFJO1FBRUosSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7U0FDeEU7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDL0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUE4QixLQUFLLENBQUMsQ0FDN0QsQ0FDRixDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FDbEIsS0FBa0M7UUFFbEMsT0FBTztZQUNMLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTTtZQUMvQixVQUFVLEVBQUUsS0FBSztZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDekMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDMUQsQ0FBQztJQUNKLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxZQUEwQjtRQUNqRCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWE7YUFDZixnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQzthQUN0RCxTQUFTLENBQUMsQ0FBQyxPQUF1QixFQUFFLEVBQUU7O1lBQ3JDLElBQUksT0FBTyxFQUFFO2dCQUNYLElBQUksQ0FBQyxZQUFZLEdBQUc7b0JBQ2xCLE9BQU8sY0FBRSxPQUFPLENBQUMsU0FBUywwQ0FBRSxlQUFlLDBDQUFFLE9BQU87b0JBQ3BELFdBQVcsY0FBRSxPQUFPLENBQUMsU0FBUywwQ0FBRSxlQUFlLDBDQUFFLFdBQVc7b0JBQzVELFdBQVcsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUk7b0JBQ25DLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUk7b0JBQy9CLFFBQVEsY0FBRSxPQUFPLENBQUMsU0FBUywwQ0FBRSxlQUFlLDBDQUFFLFFBQVE7b0JBQ3RELFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUM1QyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FDNUI7aUJBQ0YsQ0FBQztnQkFDRixJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3BDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBYSxFQUFFLGNBQTZCLEVBQUU7UUFDeEQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQWtCLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDdkIsV0FBVyxHQUFHLFdBQVcsQ0FBQztTQUMzQjtRQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxXQUEwQixFQUFFLEdBQWE7UUFDeEQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxFQUFFO1lBQ1AsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ3BCLENBQUMsQ0FBb0IsRUFBRSxDQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQ2xFLENBQUM7U0FDSDthQUFNO1lBQ0wsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ3BCLENBQUMsQ0FBb0IsRUFBRSxDQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQ2xFLENBQUM7U0FDSDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxjQUFjLENBQUMsY0FBNkIsRUFBRTtRQUM1QyxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ25CLE9BQU8sR0FBRyxXQUFXLENBQUM7U0FDdkI7UUFDRCxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQW9CLEVBQUUsQ0FBb0IsRUFBRSxFQUFFO1lBQ3BFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxtRUFBbUU7UUFDaEYsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCwwQkFBMEIsQ0FDeEIsYUFBOEM7O1FBRTlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN6QyxNQUFNLFVBQVUsU0FDZCxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxXQUFXLENBQUM7UUFDakQsTUFBTSxPQUFPLFNBQ1gsYUFBYSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQywwQ0FBRSxXQUFXLENBQUE7UUFDM0QsTUFBTSxRQUFRLFNBQ1osYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsMENBQUUsV0FBVyxDQUFDO1FBQy9DLE1BQU0sU0FBUyxTQUNiLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLDBDQUFFLFdBQVcsQ0FBQztRQUMvQyxNQUFNLE9BQU8sU0FDWCxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQywwQ0FBRSxXQUFXLENBQUE7UUFDN0MsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJO2dCQUNGLElBQUksSUFBSSxHQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxJQUFJLEdBQUc7b0JBQ1YsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztvQkFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7aUJBQzVCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO3FCQUNoRSxjQUFtQyxDQUFDO2FBQ3hDO1lBQUMsV0FBTTtnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7YUFDdEU7U0FDRjthQUNJLElBQUksUUFBUSxFQUFFO1lBQ2pCLElBQUk7Z0JBQ0YsSUFBSSxJQUFJLEdBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMxRSxJQUFJLENBQUMsSUFBSSxHQUFHO29CQUNWLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUM7b0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO2lCQUM1QixDQUFDO2FBQ0g7WUFBQyxXQUFNO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQzthQUNwRTtTQUNGO2FBQ0ksSUFBSSxPQUFPLEVBQUU7WUFDaEIsSUFBSTtnQkFDRixJQUFJLElBQUksR0FDTixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdkYsSUFBSSxDQUFDLElBQUksR0FBRztvQkFDVixHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDO29CQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtpQkFDNUIsQ0FBQzthQUNIO1lBQUMsV0FBTTtnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7YUFDbEY7U0FDRjthQUNJLElBQUksU0FBUyxFQUFFO1lBQ2xCLElBQUk7Z0JBQ0YsSUFBSSxJQUFJLEdBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLElBQUksR0FBRztvQkFDVixHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDO29CQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtpQkFDNUIsQ0FBQzthQUNIO1lBQUMsV0FBTTtnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7YUFDckU7U0FDRjthQUNJLElBQUksT0FBTyxFQUFFO1lBQ2hCLElBQUk7Z0JBQ0YsSUFBSSxJQUFJLEdBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7YUFDbEI7WUFBQyxXQUFNO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQzthQUNuRTtTQUNGO0lBQ0gsQ0FBQztJQUVELGlDQUFpQyxDQUFDLFVBQXNCO1FBQ3RELE1BQU0sa0JBQWtCLEdBQ3RCLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDekIsSUFBSSxrQkFBa0IsRUFBRTtZQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUVsRSxJQUFJLENBQUMsUUFBUSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYTtpQkFDZixnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7aUJBQ2pELFNBQVMsQ0FBQyxDQUFDLE9BQXVCLEVBQUUsRUFBRTs7Z0JBQ3JDLElBQUksT0FBTyxFQUFFO29CQUNYLElBQUksQ0FBQyxZQUFZLEdBQUc7d0JBQ2xCLE9BQU8sY0FBRSxPQUFPLENBQUMsU0FBUywwQ0FBRSxlQUFlLDBDQUFFLE9BQU87d0JBQ3BELFdBQVcsY0FBRSxPQUFPLENBQUMsU0FBUywwQ0FBRSxlQUFlLDBDQUFFLFdBQVc7d0JBQzVELFdBQVcsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUk7d0JBQ25DLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUk7d0JBQy9CLFFBQVEsY0FBRSxPQUFPLENBQUMsU0FBUywwQ0FBRSxlQUFlLDBDQUFFLFFBQVE7d0JBQ3RELFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUM1QyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FDNUI7cUJBQ0YsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxpQkFBaUI7UUFDakIsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQ3BCLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUssaUJBQWlCLENBQ3JCLFdBQXdCLEVBQ3hCLFdBQXdDOzs7WUFFeEMsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMzQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0Q7WUFDRCxNQUFNLFNBQVMsR0FDYixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN4QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0QsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDdkQ7b0JBQ0UsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO29CQUMxQixRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVE7b0JBQzlCLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTztvQkFDNUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29CQUNqQixPQUFPLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQ3hDLE1BQU0sRUFBRTt3QkFDTixlQUFlLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7d0JBQ3JELFlBQVksRUFBRSxXQUFXLENBQUMsSUFBSTt3QkFDOUIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO3dCQUN0QixXQUFXLEVBQUUsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFlBQVk7d0JBQ3RDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUk7d0JBQzdCLFlBQVksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLFlBQVk7d0JBQzdDLFNBQVMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTO3dCQUM1QyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLGdCQUFnQjt3QkFDckQsZUFBZSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYzt3QkFDbEQsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVzt3QkFDM0MsU0FBUyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUzt3QkFDdkMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsZUFBZTt3QkFDbkQsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUI7d0JBQ3ZELG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CO3dCQUMzRCxtQkFBbUIsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLG1CQUFtQjt3QkFDM0QsU0FBUyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUzt3QkFDdkMsUUFBUSxRQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSwwQ0FBRSxRQUFRLEVBQUU7d0JBQ2pELFlBQVksRUFBRSxrQkFBa0I7cUJBQ2pDO29CQUNELEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztvQkFDeEIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRO29CQUM5QixXQUFXLEVBQUUsV0FBVztvQkFDeEIsWUFBWSxFQUFFLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO29CQUNsRCxXQUFXLEVBQUUsT0FBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxNQUFNLEtBQUksV0FBVyxDQUFDLEtBQUssSUFBSSxPQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLFlBQVksS0FBSSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsT0FDeEgsSUFBSSxDQUFDLGFBQWEsMENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO29CQUNuQyxtQkFBbUIsRUFBRSxPQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLE1BQU0sS0FBSSxXQUFXLENBQUMsS0FBSyxJQUFJLE9BQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsWUFBWSxLQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDakksTUFBYyxJQUFJLENBQUMsYUFBYSwwQ0FBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUk7aUJBQ3ZELEVBQ0QsU0FBUyxFQUNULElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQ2YsV0FBVyxDQUFDLGNBQWMsQ0FDM0IsQ0FBQztnQkFFRixJQUFJLFlBQVksS0FBSyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUU7b0JBQzFELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDdEI7Z0JBQ0QsT0FBTyxZQUFZLENBQUM7YUFDckI7WUFDRCxPQUFPLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDLG1DQUFtQzs7S0FDaEY7SUFFRCxlQUFlLENBQUMsV0FBd0I7UUFDdEMsT0FBTztZQUNMO2dCQUNFLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUk7YUFDL0I7WUFDRDtnQkFDRSxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUzthQUNwQztZQUNEO2dCQUNFLElBQUksRUFBRSx1QkFBdUI7Z0JBQzdCLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0I7YUFDcEQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWTthQUN2QztZQUNEO2dCQUNFLElBQUksRUFBRSxZQUFZO2dCQUNsQixLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2FBQ3BDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQjthQUNsRDtZQUNEO2dCQUNFLElBQUksRUFBRSwwQkFBMEI7Z0JBQ2hDLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUI7YUFDdkQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCO2FBQ2xEO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7YUFDaEQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsT0FBTztnQkFDYixLQUFLLEVBQUUsU0FBUyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsWUFBWSxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTthQUN0RjtZQUNEO2dCQUNFLElBQUksRUFBRSxZQUFZO2dCQUNsQixLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVO2FBQ3JDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUzthQUNwQztZQUNEO2dCQUNFLElBQUksRUFBRSxlQUFlO2dCQUNyQixLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXO2FBQ3RDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWM7YUFDekM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO2FBQzNDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFzQjtRQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3JDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FDbkIsQ0FBQyxhQUE2QixFQUFFLE1BQW1CLEVBQUUsRUFBRTtZQUNyRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzNCLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxLQUFLO2dCQUFFLGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQy9ELE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUMsRUFDRCxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRztnQkFDakIsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUU7Z0JBQ25CLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTTtnQkFDL0IsVUFBVSxFQUFFLE1BQU07YUFDbkIsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFDSyxjQUFjLENBQUMsR0FBUTs7WUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNuRSxJQUFJLENBQUMsWUFBWSxHQUFJLENBQVcsQ0FBQyxJQUFJLENBQ25DLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQ3JDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDN0IsQ0FBQztLQUFBOztBQTltQmUsOENBQXNCLEdBQUcsZUFBZSxDQUFDO0FBQ3pDLCtDQUF1QixHQUFHLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHtcclxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxyXG4gIExvdW5nZVF1b3RlUmVzdWx0LFxyXG4gIExvdW5nZVF1b3RlUmVzdWx0QXJyYXksXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRBaXJwb3J0RGV0YWlscyxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcclxuICBUZXJtaW5hbHNUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEFpcnBvcnRSZXN1bHRzLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgTG91bmdlUXVvdGUsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcyxcclxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIEN1cnJlbmN5Q29kZVxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VMb3VuZ2VRdW90ZUZldGNoZXIsXHJcbiAgTG91bmdlUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2xvdW5nZS1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBMb3VuZ2VzVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWxvdW5nZXMtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmV4cG9ydCBjbGFzcyBMb3VuZ2VzRW50ZXJwcmlzZVNlYXJjaDxMUV9RIGV4dGVuZHMgTG91bmdlUXVvdGVGZXRjaGVyVHlwZT5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgTG91bmdlc1RlbXBQYXJhbXMsXHJcbiAgICBMb3VuZ2VRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgTG91bmdlUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIExvdW5nZXNFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfbG91bmdlJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19sb3VuZ2UnO1xyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkxvdW5nZTtcclxuICBwdWJsaWMgdGVybWluYWxzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXJtaW5hbHNUeXBlW10+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcclxuICBwcml2YXRlIF9sb2NhdGlvbkNvZGU6IHN0cmluZztcclxuXHJcbiAgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG5cclxuICBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpbmZhbnRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluZmFudHM7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5mYW50cyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmxpZ2h0TnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBnZXQgZmxpZ2h0TnVtYmVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmxpZ2h0TnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZsaWdodE51bWJlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9mbGlnaHROdW1iZXIgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBsb2NhdGlvbkNvZGUoKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5sb2NhdGlvbkNvZGU7XHJcbiAgfVxyXG5cclxuICBzZXQgbG9jYXRpb25Db2RlKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uQ29kZSA9IHZhbHVlO1xyXG4gICAgY29uc3QgdGVybWluYWxzVHlwZTogVGVybWluYWxzVHlwZVtdID0gdGhpcy50ZXJtaW5hbHM/LnZhbHVlO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5fbG9jYXRpb25Db2RlID0gJyc7XHJcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlcm1pbmFscy5uZXh0KFtdKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlcm1pbmFscy5uZXh0KHZhbHVlLnRlcm1pbmFscyk7XHJcbiAgICAgIGlmICh0ZXJtaW5hbHNUeXBlLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtaW5hbCA9IHRlcm1pbmFsc1R5cGVbMF0ua2V5O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9IG51bGw7XHJcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlcm1pbmFscy5uZXh0KFtdKTtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHRlcm1pbmFsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsXHJcbiAgICAgID8gdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsLnRvU3RyaW5nKClcclxuICAgICAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRlcm1pbmFsKGlucHV0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50ZXJtaW5hbCA9IGlucHV0O1xyXG4gICAgY29uc3QgZm91bmQ6IFRlcm1pbmFsc1R5cGUgPSB0aGlzLnRlcm1pbmFscy52YWx1ZS5maW5kKFxyXG4gICAgICAodGVybWluYWw6IFRlcm1pbmFsc1R5cGUsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICBpZiAodGVybWluYWwudmFsdWUgPT09IGlucHV0KSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtaW5hbCA9IGZvdW5kLmtleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnRlcm1pbmFscy52YWx1ZSAmJiB0aGlzLnRlcm1pbmFscy52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gdGhpcy50ZXJtaW5hbHMudmFsdWVbMF0ua2V5O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtaW5hbCA9ICdBbnkgVGVybWluYWwnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZFRlcm1pbmFsOiBzdHJpbmcgPSAnJztcclxuICBzZXQgc2VsZWN0ZWRUZXJtaW5hbCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRlcm1pbmFsID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRUZXJtaW5hbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGVybWluYWw7XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgdmFyaWFibGVzXHJcbiAgcHVibGljIG1pbl9kYXRlID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLCAvLyBuZ2JEYXRlIG1vbnRocyBhcmUgbm90IDAgaW5kZXhlZFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuICBnZXQgZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCB0aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCB0aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXJyaXZhbERhdGV0aW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgYXJyaXZhbERhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICBpZiAodmFsdWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgIHRoaXMuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xyXG4gICAgICB0aGlzLl90aW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgTG91bmdlc0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIExvdW5nZXNFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbG91bmdlZmV0Y2hlcjogQmFzZUxvdW5nZVF1b3RlRmV0Y2hlcjxMUV9RPixcclxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2VcclxuXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycywgc2VhcmNoU2VydmljZSwgdXNlclNlcnZpY2UpO1xyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICB0ZW1wUGFyYW1zOiBMb3VuZ2VzVGVtcFBhcmFtcztcclxuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgTG91bmdlc0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIExvdW5nZXNUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VMb3VuZ2VzUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5Mb3VuZ2VcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcblxyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3VsdHMgPVxyXG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxMb3VuZ2VRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgLy8gaWYgKHJlc3VsdHMgPT0gbnVsbCAmJiB0aGlzLmlzVmFsaWQpIHtcclxuICAgIC8vICAgc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VMb3VuZ2VzUXVlcnkoKSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXMge1xyXG4gICAgY29uc3QgcXVlcnk6IFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxyXG4gICAgICBpbmZhbnRzOiB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cyxcclxuICAgICAgbG9jYXRpb25Db2RlOiB0aGlzLl9sb2NhdGlvbkNvZGUsXHJcbiAgICAgIHRlcm1pbmFsOlxyXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy50ZXJtaW5hbCA9PT0gJ0FueScgPyBudWxsIDogdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsLFxyXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWVcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaExvdW5nZXNRdWVyeVZhcmlhYmxlcz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgLy8gUHJpdmF0ZSBNZXRob2RzXHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgTG91bmdlc0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICB0cmF2ZWxsZXJzOiB0aGlzLnRyYXZlbGxlcnNcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLl9sb2NhdGlvbkNvZGUgfHwgdGhpcy5fbG9jYXRpb25Db2RlID09PSAnJykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdZb3UgbXVzdCBzZWxlY3QgYWlycG9ydCBmaXJzdC4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAoIXRoaXMucXVlcnkudGVybWluYWwpIHtcclxuICAgIC8vICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGVybWluYWwgY2FuIG5vdCBiZSBlbXB0eS4nKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZS51bml4KCkgPCBtb21lbnQoKS51bml4KCkpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnT3V0d2FyZCBqb3VybmV5IGNhbm5vdCBiZSBpbiB0aGUgcGFzdC4nKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZURhdGVUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuX2RhdGUgJiYgdGhpcy5fdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2RhdGUsIHRoaXMuX3RpbWUpO1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5sb3VuZ2VmZXRjaGVyLmZldGNoTGlzdChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5Mb3VuZ2UsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLmFycml2YWxEYXRldGltZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFycml2YWxEYXRldGltZSA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5hcnJpdmFsRGF0ZXRpbWUpO1xyXG4gICAgdGhpcy50ZXJtaW5hbCA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRlcm1pbmFsO1xyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgIC5nZXRBaXJwb3J0QnlDb2RlKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmxvY2F0aW9uQ29kZSlcclxuICAgICAgLnN1YnNjcmliZSgoYWlycG9ydDogQWlycG9ydFJlc3VsdHMpID0+IHtcclxuICAgICAgICBpZiAoYWlycG9ydCkge1xyXG4gICAgICAgICAgdGhpcy5sb2NhdGlvbkNvZGUgPSB7XHJcbiAgICAgICAgICAgIGNvdW50cnk6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiBhaXJwb3J0LmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcclxuICAgICAgICAgICAgZGVzdGluYXRpb246IGFpcnBvcnQuaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICAgIGdhdGV3YXk6IGFpcnBvcnQuaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBhaXJwb3J0LmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgICBhaXJwb3J0LmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMudGVybWluYWwgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50ZXJtaW5hbDtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBzb3J0QnlQcmljZShhc2M/OiBib29sZWFuLCByZXN1bHRBcnJheTogTG91bmdlUXVvdGVbXSA9IFtdKSB7XHJcbiAgICBsZXQgc29ydFJlc3VsdHMgPSBbLi4udGhpcy5mdWxsUmVzdWx0c10gYXMgTG91bmdlUXVvdGVbXTtcclxuICAgIGlmICghc29ydFJlc3VsdHMubGVuZ3RoKSB7XHJcbiAgICAgIHNvcnRSZXN1bHRzID0gcmVzdWx0QXJyYXk7XHJcbiAgICB9XHJcbiAgICBzb3J0UmVzdWx0cyA9IHRoaXMuc29ydFJlc3VsdHNQcmljZShzb3J0UmVzdWx0cywgYXNjKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHNvcnRSZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIHNvcnRSZXN1bHRzUHJpY2UocmVzdWx0QXJyYXk6IExvdW5nZVF1b3RlW10sIGFzYz86IGJvb2xlYW4pOiBMb3VuZ2VRdW90ZVtdIHtcclxuICAgIGxldCByZXN1bHRzID0gWy4uLnJlc3VsdEFycmF5XTtcclxuICAgIGlmIChhc2MpIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChcclxuICAgICAgICAoYTogTG91bmdlUXVvdGVSZXN1bHQsIGI6IExvdW5nZVF1b3RlUmVzdWx0KSA9PiBiLnByaWNlIC0gYS5wcmljZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChcclxuICAgICAgICAoYTogTG91bmdlUXVvdGVSZXN1bHQsIGI6IExvdW5nZVF1b3RlUmVzdWx0KSA9PiBhLnByaWNlIC0gYi5wcmljZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICBzb3J0QnlUZXJtaW5hbChyZXN1bHRBcnJheTogTG91bmdlUXVvdGVbXSA9IFtdKSB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IFsuLi50aGlzLmZ1bGxSZXN1bHRzXTtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdEFycmF5O1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGVybWluYWxTb3J0ZXIgPSAoYTogTG91bmdlUXVvdGVSZXN1bHQsIGI6IExvdW5nZVF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgIHJldHVybiAtMTsgLy8gVE9ETyBhLnJhd0RhdGEuRmxpZ2h0VGVybU91dCA+IGIucmF3RGF0YS5GbGlnaHRUZXJtT3V0ID8gMSA6IC0xO1xyXG4gICAgfTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMuc29ydCh0ZXJtaW5hbFNvcnRlcikpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnUFJFUE9QVUxBVElORyBMT1VOR0UgRk9STScpO1xyXG4gICAgY29uc3QgZmxpZ2h0SXRlbTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5O1xyXG4gICAgY29uc3QgaXJsSXRlbTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMgPSBcclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF0/LnNlYXJjaFF1ZXJ5XHJcbiAgICBjb25zdCByYWlsSXRlbTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XHJcbiAgICBjb25zdCBob3RlbEl0ZW06IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XHJcbiAgICBjb25zdCBjYXJJdGVtOiBTZWFyY2hDYXJIaXJlUXVlcnlWYXJpYWJsZXMgPSBcclxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5DYXJdPy5zZWFyY2hRdWVyeVxyXG4gICAgaWYgKGZsaWdodEl0ZW0pIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgZGF0ZSA9XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XS5vdXRCb3VuZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgdGhpcy5kYXRlID0ge1xyXG4gICAgICAgICAgZGF5OiBkYXRlLmdldFVUQ0RhdGUoKSxcclxuICAgICAgICAgIG1vbnRoOiBkYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgeWVhcjogZGF0ZS5nZXRVVENGdWxsWWVhcigpXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmxvY2F0aW9uQ29kZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdXHJcbiAgICAgICAgICAuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBsb3VuZ2UgZnJvbSBmbGlnaHQgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyYWlsSXRlbSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBkYXRlID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXS5vdXRCb3VuZERhdGVUaW1lLnRvRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZGF0ZSA9IHtcclxuICAgICAgICAgIGRheTogZGF0ZS5nZXRVVENEYXRlKCksXHJcbiAgICAgICAgICBtb250aDogZGF0ZS5nZXRVVENNb250aCgpICsgMSxcclxuICAgICAgICAgIHllYXI6IGRhdGUuZ2V0VVRDRnVsbFllYXIoKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBsb3VuZ2UgZnJvbSByYWlsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXJsSXRlbSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBkYXRlID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbF0ub3V0Qm91bmREYXRlVGltZS50b0RhdGUoKTtcclxuICAgICAgICB0aGlzLmRhdGUgPSB7XHJcbiAgICAgICAgICBkYXk6IGRhdGUuZ2V0VVRDRGF0ZSgpLFxyXG4gICAgICAgICAgbW9udGg6IGRhdGUuZ2V0VVRDTW9udGgoKSArIDEsXHJcbiAgICAgICAgICB5ZWFyOiBkYXRlLmdldFVUQ0Z1bGxZZWFyKClcclxuICAgICAgICB9O1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgbG91bmdlIGZyb20gaW50ZXJuYXRpb25hbCByYWlsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaG90ZWxJdGVtKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IGRhdGUgPVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaGVja2luX2RhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgdGhpcy5kYXRlID0ge1xyXG4gICAgICAgICAgZGF5OiBkYXRlLmdldFVUQ0RhdGUoKSxcclxuICAgICAgICAgIG1vbnRoOiBkYXRlLmdldFVUQ01vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgeWVhcjogZGF0ZS5nZXRVVENGdWxsWWVhcigpXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGxvdW5nZSBmcm9tIGhvdGVsIGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY2FySXRlbSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBkYXRlID1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5DYXJdLnBpY2t1cF9kYXRlO1xyXG4gICAgICAgIHRoaXMuZGF0ZSA9IGRhdGU7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBsb3VuZ2UgZnJvbSBjYXIgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoTG91bmdlc1F1ZXJ5OiBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXMgPVxyXG4gICAgICBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xyXG4gICAgaWYgKHNlYXJjaExvdW5nZXNRdWVyeSkge1xyXG4gICAgICB0aGlzLmFycml2YWxEYXRldGltZSA9IG1vbWVudChzZWFyY2hMb3VuZ2VzUXVlcnkuYXJyaXZhbERhdGV0aW1lKTtcclxuXHJcbiAgICAgIHRoaXMudGVybWluYWwgPSBzZWFyY2hMb3VuZ2VzUXVlcnkudGVybWluYWw7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgIC5nZXRBaXJwb3J0QnlDb2RlKHNlYXJjaExvdW5nZXNRdWVyeS5sb2NhdGlvbkNvZGUpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoYWlycG9ydDogQWlycG9ydFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIGlmIChhaXJwb3J0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25Db2RlID0ge1xyXG4gICAgICAgICAgICAgIGNvdW50cnk6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxyXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBhaXJwb3J0LmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgICAgIGdhdGV3YXk6IGFpcnBvcnQuaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgICAgICBhaXJwb3J0LmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIFRyYXZlbGxlcnNcclxuICAgIGlmIChiYXNrZXRJdGVtLnVzZXJzKSB7XHJcbiAgICAgIGJhc2tldEl0ZW0udXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmFkZFRyYXZlbGxlcih1c2VyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRMb3VuZ2VUb0Jhc2tldChcclxuICAgIGxvdW5nZVF1b3RlOiBMb3VuZ2VRdW90ZSxcclxuICAgIGxvdW5nZVF1ZXJ5OiBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXNcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGlmIChsb3VuZ2VRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQobG91bmdlUXVvdGUpO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYWR1bHRzOiBsb3VuZ2VRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgICBjaGlsZHJlbjogbG91bmdlUXVlcnkuY2hpbGRyZW4sXHJcbiAgICAgICAgICBpbmZhbnRzOiBsb3VuZ2VRdWVyeS5pbmZhbnRzLFxyXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgICBzZXJ2aWNlOiBsb3VuZ2VRdW90ZS5zb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRldGltZTogbG91bmdlUXVlcnkuYXJyaXZhbERhdGV0aW1lLmZvcm1hdCgpLFxyXG4gICAgICAgICAgICBsb2NhdGlvbkNvZGU6IGxvdW5nZVF1b3RlLmNvZGUsXHJcbiAgICAgICAgICAgIG5hbWU6IGxvdW5nZVF1b3RlLm5hbWUsXHJcbiAgICAgICAgICAgIGFpcnBvcnRJYXRhOiBsb3VuZ2VRdWVyeT8ubG9jYXRpb25Db2RlLFxyXG4gICAgICAgICAgICBsb2dvOiBsb3VuZ2VRdW90ZS5sb3VuZ2UubG9nbyxcclxuICAgICAgICAgICAgaW50cm9kdWN0aW9uOiBsb3VuZ2VRdW90ZS5sb3VuZ2UuaW50cm9kdWN0aW9uLFxyXG4gICAgICAgICAgICBjb3ZpZENvcHk6IGxvdW5nZVF1b3RlLmxvdW5nZS5taXNjLmNvdmlkQ29weSxcclxuICAgICAgICAgICAgY2FuY2VsbGF0aW9uSW5mbzogbG91bmdlUXVvdGUubG91bmdlLmNhbmNlbGxhdGlvbkluZm8sXHJcbiAgICAgICAgICAgIGFkbWVuZG1lbnRzSW5mbzogbG91bmdlUXVvdGUubG91bmdlLmFtZW5kbWVudHNJbmZvLFxyXG4gICAgICAgICAgICBjaGVja0luSW5mbzogbG91bmdlUXVvdGUubG91bmdlLmNoZWNrSW5JbmZvLFxyXG4gICAgICAgICAgICBkcmVzc0NvZGU6IGxvdW5nZVF1b3RlLmxvdW5nZS5kcmVzc0NvZGUsXHJcbiAgICAgICAgICAgIGZvb2RBbmRCZXZlcmFnZTogbG91bmdlUXVvdGUubG91bmdlLmZvb2RBbmRCZXZlcmFnZSxcclxuICAgICAgICAgICAgd2hhdHNJbmNsdWRlZEZvb2Q6IGxvdW5nZVF1b3RlLmxvdW5nZS53aGF0c0luY2x1ZGVkRm9vZCxcclxuICAgICAgICAgICAgd2hhdHNJbmNsdWRlZERyaW5rczogbG91bmdlUXVvdGUubG91bmdlLndoYXRzSW5jbHVkZWREcmlua3MsXHJcbiAgICAgICAgICAgIHdoYXRzSW5jbHVkZWRFeHRyYXM6IGxvdW5nZVF1b3RlLmxvdW5nZS53aGF0c0luY2x1ZGVkRXh0cmFzLFxyXG4gICAgICAgICAgICBncm91cEluZm86IGxvdW5nZVF1b3RlLmxvdW5nZS5ncm91cEluZm8sXHJcbiAgICAgICAgICAgIHRlcm1pbmFsOiBsb3VuZ2VRdW90ZS5sb3VuZ2UudGVybWluYWw/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcHJpY2U6IGxvdW5nZVF1b3RlLnByaWNlLFxyXG4gICAgICAgICAgY3VycmVuY3k6IGxvdW5nZVF1b3RlLmN1cnJlbmN5LFxyXG4gICAgICAgICAgc2VhcmNoUXVlcnk6IGxvdW5nZVF1ZXJ5LFxyXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBsb3VuZ2VRdWVyeS5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KCksXHJcbiAgICAgICAgICBsb3dlc3RQcmljZTogdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgIT0gbG91bmdlUXVvdGUucHJpY2UgfHwgdGhpcy5jaGVhcGVzdFByaWNlPy5jdXJyZW5jeUNvZGUgIT0gbG91bmdlUXVvdGUuY3VycmVuY3kgPyBcclxuICAgICAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgOiBudWxsLFxyXG4gICAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTogdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgIT0gbG91bmdlUXVvdGUucHJpY2UgfHwgdGhpcy5jaGVhcGVzdFByaWNlPy5jdXJyZW5jeUNvZGUgIT0gbG91bmdlUXVvdGUuY3VycmVuY3kgPyBcclxuICAgICAgICAgICA8Q3VycmVuY3lDb2RlPnRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlIDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgbG91bmdlUXVvdGUucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsOyAvLyBUT0RPIHNob3VsZCB0aGlzIHRocm93IGFuIGVycm9yP1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybXNBbmRDb25kKGxvdW5nZVF1b3RlOiBMb3VuZ2VRdW90ZSkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdOYW1lJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLm5hbWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUZWxlcGhvbmUnLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UudGVsZXBob25lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSW1wb3J0YW50IEluZm9ybWF0aW9uJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLm1pc2MuaW1wb3J0YW50SW5mb3JtYXRpb25cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdJbnRyb2R1Y3Rpb24nLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UuaW50cm9kdWN0aW9uXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRHJlc3MgQ29kZScsXHJcbiAgICAgICAgdmFsdWU6IGxvdW5nZVF1b3RlLmxvdW5nZS5kcmVzc0NvZGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdCdXNpbmVzcyBGYWNpbGl0aWVzJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLm1pc2MuYnVzaW5lc3NmYWNpbGl0aWVzXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRW50ZXJ0YWlubWVudCBGYWNpbGl0aWVzJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLm1pc2MuZW50ZXJ0YWlubWVudEZhY2lsaXRpZXNcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEaXNhYmxlZCBGYWNpbGl0aWVzJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLm1pc2MuZmFjaWxpdGllc2Rpc2FibGVkXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRmFjaWxpdGllcycsXHJcbiAgICAgICAgdmFsdWU6IGxvdW5nZVF1b3RlLmxvdW5nZS5mYWNpbGl0aWVzLnRvU3RyaW5nKClcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaW1lcycsXHJcbiAgICAgICAgdmFsdWU6IGBPcGVucyAke2xvdW5nZVF1b3RlLmxvdW5nZS5vcGVuVGltZX07IENsb3NlcyAke2xvdW5nZVF1b3RlLmxvdW5nZS5jbG9zZVRpbWV9YFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RpcmVjdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiBsb3VuZ2VRdW90ZS5sb3VuZ2UuZGlyZWN0aW9uc1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0dyb3VwcycsXHJcbiAgICAgICAgdmFsdWU6IGxvdW5nZVF1b3RlLmxvdW5nZS5ncm91cEluZm9cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDaGVjay1JbiBUaW1lJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLmNoZWNrSW5JbmZvXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQW1lbmQgSW5mbycsXHJcbiAgICAgICAgdmFsdWU6IGxvdW5nZVF1b3RlLmxvdW5nZS5hbWVuZG1lbnRzSW5mb1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NhbmNlbCBJbmZvJyxcclxuICAgICAgICB2YWx1ZTogbG91bmdlUXVvdGUubG91bmdlLmNhbmNlbGxhdGlvbkluZm9cclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IExvdW5nZVF1b3RlW10pOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gcmVzdWx0c1swXS5jdXJyZW5jeTtcclxuICAgIHJldHVybiByZXN1bHRzLnJlZHVjZShcclxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IExvdW5nZVF1b3RlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkxvdW5nZSxcclxuICAgICAgICBzZWFyY2hBcmdzOiBzZWFyY2hcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRzTGlzdChmYXYubG9jYXRpb25Db2RlKS5zdWJzY3JpYmUoKGEpID0+IHtcclxuICAgICAgdGhpcy5sb2NhdGlvbkNvZGUgPSAoYSBhcyBhbnlbXSkuZmluZChcclxuICAgICAgICAoYSkgPT4gYS5nYXRld2F5ID09IGZhdi5sb2NhdGlvbkNvZGVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy50ZXJtaW5hbCA9IGZhdi50ZXJtaW5hbDtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5hZHVsdHMgPSBmYXYuYWR1bHRzO1xyXG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5jaGlsZHJlbjtcclxuICAgIHRoaXMuaW5mYW50cyA9IGZhdi5pbmZhbnRzO1xyXG4gIH1cclxufVxyXG4iXX0=
|