@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.
Files changed (166) hide show
  1. package/angular/components/basket-panel.d.ts +1 -0
  2. package/angular/fetchers.d.ts +5 -0
  3. package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
  5. package/angular/lib/vendor/fetchers/get-office.fetcher.d.ts +7 -0
  6. package/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +7 -0
  7. package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
  8. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
  9. package/angular/lib/vendor/services/logon.service.d.ts +2 -1
  10. package/angular/lib/vendor/services/user.service.d.ts +9 -3
  11. package/angular/lib/vendor/types/graphql.angular.types.d.ts +614 -550
  12. package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
  13. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  14. package/angular/updaters.d.ts +1 -0
  15. package/base/fetchers.d.ts +5 -0
  16. package/base/lib/vendor/classes/base-enterprise.d.ts +7 -1
  17. package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
  18. package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
  19. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +9 -4
  20. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +12 -4
  21. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +14 -7
  22. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +5 -4
  23. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +16 -5
  24. package/base/lib/vendor/classes/helpers.d.ts +6 -1
  25. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +10 -3
  26. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +13 -8
  27. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +5 -4
  28. package/base/lib/vendor/classes/management-info-and-valid.d.ts +3 -3
  29. package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
  30. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +5 -4
  31. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +10 -8
  32. package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
  33. package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
  34. package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
  35. package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -0
  36. package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
  37. package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
  38. package/base/lib/vendor/fetchers/get-office.fetcher.d.ts +20 -0
  39. package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
  40. package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
  41. package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
  42. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +2 -0
  43. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +5 -2
  44. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +8 -6
  45. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
  46. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +7 -5
  47. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +8 -1
  48. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +8 -2
  49. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +8 -7
  50. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
  51. package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
  52. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
  53. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +5 -2
  54. package/base/lib/vendor/interfaces/Isearch.service.d.ts +5 -2
  55. package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
  56. package/base/lib/vendor/interfaces/Iuser.service.d.ts +11 -3
  57. package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
  58. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  59. package/base/lib/vendor/interfaces/summary-interface.d.ts +6 -0
  60. package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
  61. package/base/lib/vendor/models/traveller.object.d.ts +12 -2
  62. package/base/lib/vendor/services/enterprise-basket.service.d.ts +22 -9
  63. package/base/lib/vendor/services/logon.service.d.ts +5 -1
  64. package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
  65. package/base/lib/vendor/services/search.service.d.ts +27 -23
  66. package/base/lib/vendor/services/url.service.d.ts +2 -0
  67. package/base/lib/vendor/services/user.service.d.ts +36 -5
  68. package/base/lib/vendor/services/webtoken.service.d.ts +6 -0
  69. package/base/lib/vendor/types/graphql.types.d.ts +581 -549
  70. package/base/lib/vendor/types/types.d.ts +48 -6
  71. package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
  72. package/base/sabstravtech-obtservices-base.d.ts +1 -1
  73. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  74. package/base/updaters.d.ts +1 -0
  75. package/bundles/sabstravtech-obtservices-angular.umd.js +541 -252
  76. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  77. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  78. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  79. package/bundles/sabstravtech-obtservices-base.umd.js +4080 -1471
  80. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  81. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  82. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  83. package/esm2015/angular/components/basket-panel.js +16 -7
  84. package/esm2015/angular/fetchers.js +6 -1
  85. package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
  86. package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
  87. package/esm2015/angular/lib/vendor/fetchers/get-office.fetcher.js +25 -0
  88. package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +25 -0
  89. package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
  90. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +24 -21
  91. package/esm2015/angular/lib/vendor/services/http-call.service.js +1 -1
  92. package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
  93. package/esm2015/angular/lib/vendor/services/search.service.js +1 -1
  94. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
  95. package/esm2015/angular/lib/vendor/services/user.service.js +28 -10
  96. package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
  97. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +1023 -1220
  98. package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
  99. package/esm2015/angular/updaters.js +2 -1
  100. package/esm2015/base/fetchers.js +6 -1
  101. package/esm2015/base/lib/vendor/classes/base-enterprise.js +12 -3
  102. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
  103. package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -8
  104. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +219 -18
  105. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +235 -67
  106. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +462 -49
  107. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +37 -13
  108. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +281 -62
  109. package/esm2015/base/lib/vendor/classes/helpers.js +32 -3
  110. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +228 -54
  111. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +221 -46
  112. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +101 -14
  113. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +67 -40
  114. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
  115. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +146 -11
  116. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +210 -25
  117. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +58 -4
  118. package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
  119. package/esm2015/base/lib/vendor/data/countries.json +484 -242
  120. package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
  121. package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
  122. package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
  123. package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
  124. package/esm2015/base/lib/vendor/fetchers/get-office.fetcher.js +11 -0
  125. package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
  126. package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
  127. package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
  128. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  129. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  130. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  131. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  132. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
  133. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  134. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
  135. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  136. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  137. package/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +1 -1
  138. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  139. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  140. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  141. package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
  142. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  143. package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
  144. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  145. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  146. package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
  147. package/esm2015/base/lib/vendor/models/traveller.object.js +21 -3
  148. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +129 -43
  149. package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
  150. package/esm2015/base/lib/vendor/services/logon.service.js +40 -3
  151. package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
  152. package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
  153. package/esm2015/base/lib/vendor/services/search.service.js +100 -117
  154. package/esm2015/base/lib/vendor/services/url.service.js +3 -1
  155. package/esm2015/base/lib/vendor/services/user.service.js +90 -12
  156. package/esm2015/base/lib/vendor/services/webtoken.service.js +14 -1
  157. package/esm2015/base/lib/vendor/types/graphql.types.js +21 -2
  158. package/esm2015/base/lib/vendor/types/types.js +32 -14
  159. package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
  160. package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
  161. package/esm2015/base/updaters.js +2 -1
  162. package/fesm2015/sabstravtech-obtservices-angular.js +1254 -1332
  163. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  164. package/fesm2015/sabstravtech-obtservices-base.js +3324 -839
  165. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  166. package/package.json +1 -1
@@ -3,7 +3,7 @@ import moment from 'moment';
3
3
  import { BaseEnterpriseSearch } from './base-enterprise';
4
4
  import { BehaviorSubject, combineLatest } from 'rxjs';
5
5
  import { FareType, FlightCabinClass, FlightPassengerType, ServiceType } from '../types/graphql.types';
6
- import { FlightDirectionEnum, OBTFlightCabinClass } from '../types/types';
6
+ import { DifferentInvokdedUserReasons, FlightDirectionEnum, OBTFlightCabinClass } from '../types/types';
7
7
  import { DEFAULT_FLIGHT_FILTERS, FlightDisplayTypes } from '../interfaces/Iflight-enterprise-search';
8
8
  import { FlightSearchType } from './flight-search-type.enum';
9
9
  import { UserFavorurite } from './user-favourite.enum';
@@ -30,11 +30,10 @@ export var FlightSortTypes;
30
30
  })(FlightSortTypes || (FlightSortTypes = {}));
31
31
  export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
32
32
  constructor(flightfetcher, helpers, userService, basketService, storageService, searchService, applyFlightRules, modalService) {
33
- super(storageService, helpers);
33
+ super(storageService, helpers, searchService, userService);
34
34
  this.flightfetcher = flightfetcher;
35
35
  this.userService = userService;
36
36
  this.basketService = basketService;
37
- this.searchService = searchService;
38
37
  this.applyFlightRules = applyFlightRules;
39
38
  this.modalService = modalService;
40
39
  this.type = ServiceType.Flight;
@@ -129,7 +128,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
129
128
  if (a.direction !== b.direction) {
130
129
  return a.direction - b.direction;
131
130
  }
132
- return (a.preferred ? 1 : 0) - (b.preferred ? 1 : 0);
131
+ return (b.preferred ? 1 : 0) - (a.preferred ? 1 : 0);
133
132
  },
134
133
  [FlightSortTypes.LowestEmissions]: (a, b) => {
135
134
  if (a.direction !== b.direction) {
@@ -205,6 +204,20 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
205
204
  this.filters = new BehaviorSubject(DEFAULT_FLIGHT_FILTERS);
206
205
  this.duralSingleFilter = new BehaviorSubject(DEFAULT_FLIGHT_FILTERS);
207
206
  this.choosenDisplayType = new BehaviorSubject(FlightDisplayTypes.returns);
207
+ this._cheapestPriceObject = {
208
+ dualOutbound: {
209
+ amount: Number.MAX_SAFE_INTEGER,
210
+ currencyCode: 'GBP'
211
+ },
212
+ dualInbound: {
213
+ amount: Number.MAX_SAFE_INTEGER,
214
+ currencyCode: 'GBP'
215
+ },
216
+ returns: {
217
+ amount: Number.MAX_SAFE_INTEGER,
218
+ currencyCode: 'GBP'
219
+ }
220
+ };
208
221
  this._multiDestination = [];
209
222
  const data = storageService.getSessionItem(FlightEnterpriseSearch.STORAGE_SESSION_PARAMS) || {
210
223
  tempParams: {},
@@ -237,6 +250,9 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
237
250
  this.negotiated =
238
251
  this.tempParams.fareType === FareType.Negotiated ? true : false;
239
252
  }
253
+ get cheapestPriceObject() {
254
+ return this._cheapestPriceObject;
255
+ }
240
256
  get timeArray() {
241
257
  this._timeArray =
242
258
  this._timeArray ||
@@ -516,13 +532,13 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
516
532
  journeyWhenSelected: {},
517
533
  dualSingleWhenSelected: {},
518
534
  whenSelectedAlone: {}
519
- }, results.ruleActionSummary);
535
+ }, results.ruleActionSummary || {});
520
536
  this.resultQuery = this.getSearchQuery();
521
537
  this.multi = results.multi;
522
538
  this.setFlightDisplayType(FlightDisplayTypes.returns);
523
539
  this.currentFilters = this.helpers.createFlightFilters(results.journeys, DEFAULT_FLIGHT_FILTERS);
524
540
  this.filters.next(this.currentFilters);
525
- delete this.resultQuery.withGrouped;
541
+ // delete this.resultQuery['withGrouped'];
526
542
  const dualSingles = results.multi.reduce((previousItems, nextItem) => {
527
543
  previousItems[nextItem.order === OUTBOUND ? 'outbound' : 'inbound'] =
528
544
  nextItem.results.reduce((accum, flight) => {
@@ -536,7 +552,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
536
552
  }, { outbound: {}, inbound: {} });
537
553
  // console.log(dualSingles);
538
554
  const dualInboundFilters = this.helpers.createFlightFilters(Object.values(dualSingles.inbound), DEFAULT_FLIGHT_FILTERS);
539
- this.duralSingleFilter.next(this.helpers.createFlightFilters(Object.values(dualSingles.outbound), Object.assign(Object.assign({}, DEFAULT_FLIGHT_FILTERS), { arrivalReturnAirport: dualInboundFilters.arrivalAirport, depatureReturnAirport: dualInboundFilters.depatureAirport, returnArrivalTime: dualInboundFilters.arrivalTime, returnDuration: dualInboundFilters.duration, returnDepartureTime: dualInboundFilters.departureTime })));
555
+ this.duralSingleFilter.next(this.helpers.createFlightFilters(Object.values(dualSingles.outbound), Object.assign(Object.assign({}, DEFAULT_FLIGHT_FILTERS), { price: dualInboundFilters.price, arrivalReturnAirport: dualInboundFilters.arrivalAirport, depatureReturnAirport: dualInboundFilters.depatureAirport, returnArrivalTime: dualInboundFilters.arrivalTime, returnDuration: dualInboundFilters.duration, returnDepartureTime: dualInboundFilters.departureTime })));
540
556
  if (results && this.searchService.isFlightsGrouped()) {
541
557
  const returns = (results.journeys || []).reduce((accum, flight) => {
542
558
  accum[flight.uid] = Object.assign({
@@ -558,6 +574,28 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
558
574
  result1.direction = FlightDirectionEnum.DualSingleInbound;
559
575
  return result1;
560
576
  });
577
+ // gonna grab cheapest flights here
578
+ this._cheapestPriceObject.returns = returnData.reduce((cheapestPrice, result) => {
579
+ const price = result.minPrice;
580
+ if (cheapestPrice.amount > price) {
581
+ cheapestPrice.amount = price;
582
+ }
583
+ return cheapestPrice;
584
+ }, { amount: Number.MAX_SAFE_INTEGER, currencyCode: 'GBP' });
585
+ this._cheapestPriceObject.dualOutbound = dualDataOutbound.reduce((cheapestPrice, result) => {
586
+ const price = result.minPrice;
587
+ if (cheapestPrice.amount > price) {
588
+ cheapestPrice.amount = price;
589
+ }
590
+ return cheapestPrice;
591
+ }, { amount: Number.MAX_SAFE_INTEGER, currencyCode: 'GBP' });
592
+ this._cheapestPriceObject.dualInbound = dualDataInbound.reduce((cheapestPrice, result) => {
593
+ const price = result.minPrice;
594
+ if (cheapestPrice.amount > price) {
595
+ cheapestPrice.amount = price;
596
+ }
597
+ return cheapestPrice;
598
+ }, { amount: Number.MAX_SAFE_INTEGER, currencyCode: 'GBP' });
561
599
  const data2 = [...returnData, ...dualDataOutbound, ...dualDataInbound];
562
600
  console.log('Processed Grouped data', data2);
563
601
  return data2;
@@ -600,6 +638,12 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
600
638
  inlegsCount: 0,
601
639
  dataSource: '',
602
640
  preferred: false,
641
+ companyPreferred: false,
642
+ companyPreferredMessage: '',
643
+ officePreferred: false,
644
+ officePreferredMessage: '',
645
+ tmcPreferred: false,
646
+ tmcPreferredMessage: '',
603
647
  outboundFlightNumber: '',
604
648
  operator: '',
605
649
  operatorFull: '',
@@ -620,7 +664,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
620
664
  }
621
665
  // ! using a reduce because not all flights actually exist and we were seeing undefined in the flight list
622
666
  brands[brand].forEach((flightNum) => {
623
- var _a, _b;
667
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
624
668
  const flight = groupedObject[flightNum];
625
669
  if (flight) {
626
670
  if (isOutBound || treatOutboundsAsOutbounds) {
@@ -640,7 +684,28 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
640
684
  returnObject.maxPrice > maxprice
641
685
  ? returnObject.maxPrice
642
686
  : maxprice;
643
- if ((_b = (_a = returnObject.classes[correctBrand]) === null || _a === void 0 ? void 0 : _a.flights) === null || _b === void 0 ? void 0 : _b.length) {
687
+ returnObject.companyPreferred =
688
+ ((_a = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _a === void 0 ? void 0 : _a.companyPreferred) || ((_b = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _b === void 0 ? void 0 : _b.companyPreferred) ||
689
+ false;
690
+ returnObject.companyPreferredMessage =
691
+ ((_c = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _c === void 0 ? void 0 : _c.companyPreferredMessage) || ((_d = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _d === void 0 ? void 0 : _d.companyPreferredMessage) ||
692
+ '';
693
+ returnObject.officePreferred =
694
+ ((_e = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _e === void 0 ? void 0 : _e.officePreferred) || ((_f = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _f === void 0 ? void 0 : _f.officePreferred) ||
695
+ false;
696
+ returnObject.officePreferredMessage =
697
+ ((_g = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _g === void 0 ? void 0 : _g.officePreferredMessage) || ((_h = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _h === void 0 ? void 0 : _h.officePreferredMessage) ||
698
+ '';
699
+ returnObject.tmcPreferred =
700
+ ((_j = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _j === void 0 ? void 0 : _j.tmcPreferred) || ((_k = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _k === void 0 ? void 0 : _k.tmcPreferred) ||
701
+ false;
702
+ returnObject.tmcPreferredMessage =
703
+ ((_l = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _l === void 0 ? void 0 : _l.tmcPreferredMessage) || ((_m = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _m === void 0 ? void 0 : _m.tmcPreferredMessage) ||
704
+ '';
705
+ returnObject.preferred =
706
+ ((_o = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _o === void 0 ? void 0 : _o.companyPreferred) || ((_p = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _p === void 0 ? void 0 : _p.companyPreferred) || ((_q = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _q === void 0 ? void 0 : _q.officePreferred) || ((_r = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _r === void 0 ? void 0 : _r.officePreferred) || ((_s = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _s === void 0 ? void 0 : _s.tmcPreferred) || ((_t = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _t === void 0 ? void 0 : _t.tmcPreferred);
707
+ false;
708
+ if ((_v = (_u = returnObject.classes[correctBrand]) === null || _u === void 0 ? void 0 : _u.flights) === null || _v === void 0 ? void 0 : _v.length) {
644
709
  returnObject.classes[correctBrand].flights.push(flight);
645
710
  returnObject.classes[correctBrand].minprice = Math.min(returnObject.classes[correctBrand].minprice, minprice);
646
711
  returnObject.classes[correctBrand].maxprice = Math.max(returnObject.classes[correctBrand].maxprice, maxprice);
@@ -970,7 +1035,6 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
970
1035
  includeNearbyAirports: this.tempParams.includeNearbyAirports,
971
1036
  preferredCarriers: this.tempParams.preferredCarriers.map((carrier) => (carrier === null || carrier === void 0 ? void 0 : carrier.code) ? carrier.code : null),
972
1037
  fareType: this.tempParams.fareType,
973
- withGrouped: isFlightsGrouped
974
1038
  }, this.isReturn
975
1039
  ? {
976
1040
  returnDate: this.helpers.formatIsoDate(this.tempParams.inboundDate),
@@ -1039,6 +1103,101 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1039
1103
  updateFromPreviousSearches(_previousItems) {
1040
1104
  // Flights can not be search after other products so no defaults can be set.
1041
1105
  }
1106
+ updateSearchFromExpiredBasketItem(basketItem) {
1107
+ const searchFlightsQuery = basketItem.searchQuery;
1108
+ if (searchFlightsQuery.outboundDate) {
1109
+ let outboundTimeWindow = searchFlightsQuery.outboundDepartureTimeWindow
1110
+ ? searchFlightsQuery.outboundDepartureTimeWindow
1111
+ : searchFlightsQuery.outboundArrivalTimeWindow;
1112
+ this.outBoundDate = this.convertRecentSearchDateTime(searchFlightsQuery.outboundDate, outboundTimeWindow);
1113
+ }
1114
+ if (searchFlightsQuery.returnDate) {
1115
+ let returnTimeWindow = searchFlightsQuery.returnDepartureTimeWindow
1116
+ ? searchFlightsQuery.returnDepartureTimeWindow
1117
+ : searchFlightsQuery.returnArrivalTimeWindow;
1118
+ this.inboundDate = this.convertRecentSearchDateTime(searchFlightsQuery.returnDate, returnTimeWindow);
1119
+ }
1120
+ this.fareType = searchFlightsQuery.fareType;
1121
+ this.maxConnections = searchFlightsQuery.maxConnections;
1122
+ if (searchFlightsQuery.outboundCabinClass) {
1123
+ this.cabinClass =
1124
+ searchFlightsQuery.outboundCabinClass;
1125
+ }
1126
+ if (searchFlightsQuery.returnCabinClass) {
1127
+ this.returnCabinClass =
1128
+ searchFlightsQuery.returnCabinClass;
1129
+ }
1130
+ this.includeNearbyAirports = searchFlightsQuery.includeNearbyAirports
1131
+ ? true
1132
+ : false;
1133
+ this.chosenSearchType = searchFlightsQuery.returnTrip
1134
+ ? FlightSearchType.return
1135
+ : FlightSearchType.oneWay;
1136
+ if (searchFlightsQuery.outboundDepartureTimeWindow) {
1137
+ this.outTimeCriteria = TimeWindow.Depart;
1138
+ }
1139
+ else if (searchFlightsQuery.outboundArrivalTimeWindow) {
1140
+ this.outTimeCriteria = TimeWindow.Arrive;
1141
+ }
1142
+ else {
1143
+ this.outTimeCriteria = TimeWindow.Anytime;
1144
+ }
1145
+ if (searchFlightsQuery.returnDepartureTimeWindow) {
1146
+ this.inTimeCriteria = TimeWindow.Depart;
1147
+ }
1148
+ else if (searchFlightsQuery.returnArrivalTimeWindow) {
1149
+ this.inTimeCriteria = TimeWindow.Arrive;
1150
+ }
1151
+ else {
1152
+ this.inTimeCriteria = TimeWindow.Anytime;
1153
+ }
1154
+ combineLatest([
1155
+ this.searchService.getAirportByCode(searchFlightsQuery.originAirport),
1156
+ this.searchService.getAirportByCode(searchFlightsQuery.destinationAirport)
1157
+ ]).subscribe(([departLocation, arriveLocation]) => {
1158
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
1159
+ if (departLocation && arriveLocation) {
1160
+ this.departLocation = {
1161
+ destination: departLocation.iataMatch.name,
1162
+ gateway: departLocation.iataMatch.iata,
1163
+ terminals: this.searchService.processTerminals(departLocation.iataMatch.terminals),
1164
+ country: (_b = (_a = departLocation.iataMatch) === null || _a === void 0 ? void 0 : _a.locationDetails) === null || _b === void 0 ? void 0 : _b.country,
1165
+ postcode: (_d = (_c = departLocation.iataMatch) === null || _c === void 0 ? void 0 : _c.locationDetails) === null || _d === void 0 ? void 0 : _d.postcode,
1166
+ countryCode: (_f = (_e = departLocation.iataMatch) === null || _e === void 0 ? void 0 : _e.locationDetails) === null || _f === void 0 ? void 0 : _f.countryCode
1167
+ };
1168
+ this.arriveLocation = {
1169
+ destination: arriveLocation.iataMatch.name,
1170
+ gateway: arriveLocation.iataMatch.iata,
1171
+ terminals: this.searchService.processTerminals(arriveLocation.iataMatch.terminals),
1172
+ country: (_h = (_g = arriveLocation.iataMatch) === null || _g === void 0 ? void 0 : _g.locationDetails) === null || _h === void 0 ? void 0 : _h.country,
1173
+ postcode: (_k = (_j = arriveLocation.iataMatch) === null || _j === void 0 ? void 0 : _j.locationDetails) === null || _k === void 0 ? void 0 : _k.postcode,
1174
+ countryCode: (_m = (_l = arriveLocation.iataMatch) === null || _l === void 0 ? void 0 : _l.locationDetails) === null || _m === void 0 ? void 0 : _m.countryCode
1175
+ };
1176
+ if (searchFlightsQuery.preferredCarriers) {
1177
+ let carriers = searchFlightsQuery.preferredCarriers;
1178
+ const preferredCarriers = [];
1179
+ carriers.map((preferredCarry) => {
1180
+ this.searchService
1181
+ .getAirlinesList(preferredCarry)
1182
+ .subscribe((items) => {
1183
+ items.map((item) => {
1184
+ if (item.code === preferredCarry) {
1185
+ preferredCarriers.push(item);
1186
+ }
1187
+ });
1188
+ this.preferredCarriers = preferredCarriers;
1189
+ });
1190
+ });
1191
+ }
1192
+ }
1193
+ });
1194
+ // add Travellers
1195
+ if (basketItem.users) {
1196
+ basketItem.users.forEach((user) => {
1197
+ this.searchService.addTraveller(user);
1198
+ });
1199
+ }
1200
+ }
1042
1201
  getTotalBaggage(result) {
1043
1202
  let total = 0;
1044
1203
  const parsedAdditional = JSON.parse(result.additional);
@@ -1276,21 +1435,30 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1276
1435
  })));
1277
1436
  };
1278
1437
  const selectedRuleSummary = this._ruleActionSummary.dualSingleWhenSelected[(_b = this.selectedGroupFlight) === null || _b === void 0 ? void 0 : _b.journeyHash] || {};
1438
+ const hasField = (flight, field, def) => {
1439
+ return (this.helpers.fieldFromObject(this._ruleActionSummary, [
1440
+ 'journeyWhenSelected',
1441
+ flight.journeyHash,
1442
+ field
1443
+ ]) ||
1444
+ this.helpers.fieldFromObject(this._ruleActionSummary, [
1445
+ 'whenSelectedAlone',
1446
+ flight.journeyHash,
1447
+ field
1448
+ ]) ||
1449
+ this.helpers.fieldFromObject(selectedRuleSummary, [
1450
+ flight.journeyHash,
1451
+ field
1452
+ ]) ||
1453
+ def);
1454
+ };
1279
1455
  const setSelected = (flight) => {
1280
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
1456
+ var _a;
1281
1457
  flight.selected = flight.uid === ((_a = this.selectedGroupFlight) === null || _a === void 0 ? void 0 : _a.uid);
1282
- flight.unavailable =
1283
- ((_b = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _b === void 0 ? void 0 : _b.unavailable) || ((_c = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _c === void 0 ? void 0 : _c.unavailable) || ((_d = selectedRuleSummary[flight.journeyHash]) === null || _d === void 0 ? void 0 : _d.unavailable) ||
1284
- false;
1285
- flight.unavailableMessage =
1286
- ((_e = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _e === void 0 ? void 0 : _e.unavailableMessage) || ((_f = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _f === void 0 ? void 0 : _f.unavailableMessage) ||
1287
- '';
1288
- flight.requiresReason =
1289
- ((_g = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _g === void 0 ? void 0 : _g.requiresReason) || ((_h = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _h === void 0 ? void 0 : _h.requiresReason) || ((_j = selectedRuleSummary[flight.journeyHash]) === null || _j === void 0 ? void 0 : _j.requiresReason) ||
1290
- false;
1291
- flight.requiresReasonMessage =
1292
- ((_k = this._ruleActionSummary.journeyWhenSelected[flight.journeyHash]) === null || _k === void 0 ? void 0 : _k.requiresReasonMessage) || ((_l = this._ruleActionSummary.whenSelectedAlone[flight.journeyHash]) === null || _l === void 0 ? void 0 : _l.requiresReasonMessage) ||
1293
- '';
1458
+ flight.unavailable = hasField(flight, 'unavailable', false);
1459
+ flight.unavailableMessage = hasField(flight, 'unavailableMessage', '');
1460
+ flight.requiresReason = hasField(flight, 'requiresReason', false);
1461
+ flight.requiresReasonMessage = hasField(flight, 'requiresReasonMessage', '');
1294
1462
  return flight;
1295
1463
  };
1296
1464
  if (this.isGroupedFlights(this.fullResults)) {
@@ -1459,10 +1627,15 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1459
1627
  return acc;
1460
1628
  }, []);
1461
1629
  if (multiInbounds.length > 0) {
1630
+ if (!this.rawResults) {
1631
+ this.rawResults = this.storageService.getSessionItem(this.resultsSessionName + '_raw');
1632
+ }
1633
+ console.log(this.rawResults);
1462
1634
  this.applyFlightRules
1463
1635
  .fetchOne({
1464
1636
  selectedOutboundFlight: this.selectedGroupFlight,
1465
- availableInboundFlights: multiInbounds
1637
+ availableInboundFlights: multiInbounds,
1638
+ searchId: this.rawResults.searchId
1466
1639
  })
1467
1640
  .pipe(take(1))
1468
1641
  .subscribe((rules) => {
@@ -1483,24 +1656,47 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1483
1656
  }, selectedFlight.outboundFlights[0].dateTimeDeparting);
1484
1657
  }
1485
1658
  doBooking(intBasket, selectedFlight, schemaDetails, outboundDate, inboundDate) {
1486
- const { sourceId, co2PerItem, co2PerPassenger, total } = selectedFlight;
1487
- const booking = {
1488
- adults: this.adults,
1489
- basket: intBasket.id,
1490
- children: this.children,
1491
- co2PerItem,
1492
- co2PerPassenger,
1493
- currency: total.currency,
1494
- detail: schemaDetails,
1495
- price: total.price,
1496
- searchQuery: this.resultQuery,
1497
- service: sourceId.toString(),
1498
- outboundDate
1499
- };
1500
- if (inboundDate) {
1501
- booking.inboundDate = inboundDate;
1659
+ return __awaiter(this, void 0, void 0, function* () {
1660
+ const { sourceId, co2PerItem, co2PerPassenger, total } = selectedFlight;
1661
+ const booking = {
1662
+ adults: this.adults,
1663
+ basket: intBasket.id,
1664
+ children: this.children,
1665
+ co2PerItem,
1666
+ co2PerPassenger,
1667
+ currency: total.currency,
1668
+ detail: schemaDetails,
1669
+ price: total.price,
1670
+ searchQuery: this.resultQuery,
1671
+ service: sourceId.toString(),
1672
+ outboundDate,
1673
+ lowestPrice: (this.absoluteCheapestPrice.amount != Math.floor(total.price) || this.absoluteCheapestPrice.currencyCode != total.currency) ?
1674
+ this.absoluteCheapestPrice.amount : null,
1675
+ lowestPriceCurrency: (this.absoluteCheapestPrice.amount != Math.floor(total.price) || this.absoluteCheapestPrice.currencyCode != total.currency) ?
1676
+ this.absoluteCheapestPrice.currencyCode : null
1677
+ };
1678
+ if (inboundDate) {
1679
+ booking.inboundDate = inboundDate;
1680
+ }
1681
+ const whatHappened = yield this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers, selectedFlight.requiresReason);
1682
+ if (whatHappened === DifferentInvokdedUserReasons.research) {
1683
+ this.performSearch();
1684
+ }
1685
+ return whatHappened;
1686
+ });
1687
+ }
1688
+ get absoluteCheapestPrice() {
1689
+ if (this.cheapestPrice)
1690
+ return this.cheapestPrice;
1691
+ let price = { amount: null, currencyCode: null };
1692
+ if (this.cheapestPriceObject.dualInbound.amount + this.cheapestPriceObject.dualOutbound.amount <
1693
+ this.cheapestPriceObject.returns.amount && this.cheapestPriceObject.dualInbound.currencyCode == this.cheapestPriceObject.dualOutbound.currencyCode) {
1694
+ price.amount = this.cheapestPriceObject.dualInbound.amount + this.cheapestPriceObject.dualOutbound.amount;
1695
+ price.currencyCode = this.cheapestPriceObject.dualInbound.currencyCode;
1502
1696
  }
1503
- this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers, selectedFlight.requiresReason);
1697
+ else
1698
+ price = this.cheapestPriceObject.returns;
1699
+ return price;
1504
1700
  }
1505
1701
  makeSchemaFlights(selectedFlight, flightGroup, groupIndex, segmentIndex) {
1506
1702
  return Object.assign(Object.assign({}, selectedFlight), { journeyInfo: {
@@ -1512,7 +1708,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1512
1708
  addFlightJourneysToBasket(flightQuote) {
1513
1709
  return __awaiter(this, void 0, void 0, function* () {
1514
1710
  if (flightQuote.unavailable) {
1515
- return Promise.resolve(false);
1711
+ return Promise.resolve(DifferentInvokdedUserReasons.cancel);
1516
1712
  }
1517
1713
  const intBasket = yield this.basketService.getDefaultBasket();
1518
1714
  const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
@@ -1556,7 +1752,7 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1556
1752
  }
1557
1753
  return this.basketService.addToBasket(booking, intBasket, this.searchService, this.travellers, flightQuote.requiresReason);
1558
1754
  }
1559
- return Promise.resolve(false); // TODO should this throw an error?
1755
+ return Promise.resolve(DifferentInvokdedUserReasons.cancel); // TODO should this throw an error?
1560
1756
  });
1561
1757
  }
1562
1758
  setFlightDisplayType(displayType) {
@@ -1566,26 +1762,28 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1566
1762
  _applyFilter() {
1567
1763
  this.applyFilters(this.currentFilters, this.currentSort);
1568
1764
  }
1569
- openFlightFareRules(rules, flights) {
1765
+ openFlightFareRules(rules, flights, options = null, flightDetail = null) {
1570
1766
  // first check if there are rules
1571
1767
  const doCall = !Object.values(rules).find((rule) => rule.length);
1572
1768
  if (doCall) {
1573
1769
  const rulesFromCall = this.searchService.getFlightFareRules(flights[0]);
1574
1770
  rulesFromCall.subscribe((data) => {
1575
- this.modalService.open(ModalTypes.ModalFlightFareComponent, null, {
1771
+ this.modalService.open(ModalTypes.ModalFlightFareComponent, options, {
1576
1772
  rules: data.results[0],
1577
1773
  from: flights[0].originAirport,
1578
- to: flights[flights.length - 1].destinationAirport
1774
+ to: flights[flights.length - 1].destinationAirport,
1775
+ flight: flightDetail
1579
1776
  });
1580
1777
  }, (err) => {
1581
1778
  console.log(err);
1582
1779
  });
1583
1780
  }
1584
1781
  else {
1585
- this.modalService.open(ModalTypes.ModalFlightFareComponent, null, {
1782
+ this.modalService.open(ModalTypes.ModalFlightFareComponent, options, {
1586
1783
  rules,
1587
1784
  from: flights[0].originAirport,
1588
- to: flights[flights.length - 1].destinationAirport
1785
+ to: flights[flights.length - 1].destinationAirport,
1786
+ flight: flightDetail
1589
1787
  });
1590
1788
  }
1591
1789
  }
@@ -1737,33 +1935,54 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1737
1935
  }
1738
1936
  applyFavourite(fav) {
1739
1937
  return __awaiter(this, void 0, void 0, function* () {
1740
- this.chosenSearchType = fav.multiDestination ? FlightSearchType.multiCity : fav.returnTrip ? FlightSearchType.return : FlightSearchType.oneWay;
1938
+ this.chosenSearchType = fav.multiDestination
1939
+ ? FlightSearchType.multiCity
1940
+ : fav.returnTrip
1941
+ ? FlightSearchType.return
1942
+ : FlightSearchType.oneWay;
1741
1943
  if (this.chosenSearchType == FlightSearchType.multiCity) {
1742
1944
  const multi = yield Promise.all(fav.multiDestination.map((a) => __awaiter(this, void 0, void 0, function* () {
1743
- let destination = { date: undefined, dest: undefined, orig: undefined };
1744
- destination.orig = yield this.searchService.getAirportsList(a.orig).toPromise().then(origResults => {
1745
- return origResults.find(b => b.gateway == a.orig);
1945
+ let destination = {
1946
+ date: undefined,
1947
+ dest: undefined,
1948
+ orig: undefined
1949
+ };
1950
+ destination.orig = yield this.searchService
1951
+ .getAirportsList(a.orig)
1952
+ .toPromise()
1953
+ .then((origResults) => {
1954
+ return origResults.find((b) => b.gateway == a.orig);
1746
1955
  });
1747
- destination.dest = yield this.searchService.getAirportsList(a.dest).toPromise().then(destResults => {
1748
- return destResults.find(b => b.gateway == a.dest);
1956
+ destination.dest = yield this.searchService
1957
+ .getAirportsList(a.dest)
1958
+ .toPromise()
1959
+ .then((destResults) => {
1960
+ return destResults.find((b) => b.gateway == a.dest);
1749
1961
  });
1750
1962
  return destination;
1751
1963
  })));
1752
1964
  this.multiDestination = multi;
1753
1965
  }
1754
1966
  else {
1755
- this.searchService.getAirportsList(fav.originAirport).subscribe(results => {
1756
- this.departLocation = results.find(a => a.gateway == fav.originAirport);
1967
+ this.searchService
1968
+ .getAirportsList(fav.originAirport)
1969
+ .subscribe((results) => {
1970
+ this.departLocation = results.find((a) => a.gateway == fav.originAirport);
1757
1971
  });
1758
- this.searchService.getAirportsList(fav.destinationAirport).subscribe(results => {
1759
- this.arriveLocation = results.find(a => a.gateway == fav.destinationAirport);
1972
+ this.searchService
1973
+ .getAirportsList(fav.destinationAirport)
1974
+ .subscribe((results) => {
1975
+ this.arriveLocation = results.find((a) => a.gateway == fav.destinationAirport);
1760
1976
  });
1761
1977
  }
1762
1978
  this.cabinClass = fav.outboundCabinClass[0];
1763
- this.returnCabinClass = this.chosenSearchType != FlightSearchType.return ? null : fav.returnCabinClass[0];
1979
+ this.returnCabinClass =
1980
+ this.chosenSearchType != FlightSearchType.return
1981
+ ? null
1982
+ : fav.returnCabinClass[0];
1764
1983
  this.includeNearbyAirports = fav.includeNearbyAirports;
1765
- this.adults = fav.passengers.filter((a) => a.type == "ADULT").length;
1766
- this.children = fav.passengers.filter((a) => a.type == "CHILD").length;
1984
+ this.adults = fav.passengers.filter((a) => a.type == 'ADULT').length;
1985
+ this.children = fav.passengers.filter((a) => a.type == 'CHILD').length;
1767
1986
  // this.preferredCarriers = fav.preferredCarriers.map((a: any) => {
1768
1987
  // })
1769
1988
  });
@@ -1785,4 +2004,4 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
1785
2004
  }
1786
2005
  FlightEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_flight';
1787
2006
  FlightEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_flight';
1788
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSWxFLE9BQU8sRUFRTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBSWhCLG1CQUFtQixFQVFuQixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBRUwsbUJBQW1CLEVBWW5CLG1CQUFtQixFQU1wQixNQUFNLGdCQUFnQixDQUFDO0FBVXhCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsa0JBQWtCLEVBR25CLE1BQU0seUNBQXlDLENBQUM7QUFFakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBYW5CLE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDcEIsaUNBQW1CLENBQUE7SUFDbkIsa0NBQW9CLENBQUE7SUFDcEIsa0NBQW9CLENBQUE7QUFDdEIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFVWDtBQVZELFdBQVksZUFB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Q0FBQyxNQUFNO2dCQUMxQixXQUFXLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDdkQsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3ZELE1BQU07U0FDVDtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O0FBN2xGZSw2Q0FBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsOENBQXVCLEdBQUcsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZUNvbmRpdGlvbkVudHJ5LFxyXG4gIEZhcmVDb25kaXRpb25zLFxyXG4gIEZhcmVUeXBlLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgR3JvdXBlZEZpZWxkc0ZyYWdtZW50LFxyXG4gIEdyb3VwRmxpZ2h0cyxcclxuICBJbnB1dEZsaWdodEpvdXJuZXksXHJcbiAgSXRpbmVyYXJ5U3VtbWFyeSxcclxuICBNYXRjaGluZ0ZsaWdodHMsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgRmxpZ2h0R3JvdXBzLFxyXG4gIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gIEZsaWdodE11bHRpLFxyXG4gIEZsaWdodFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgR3JvdXBlZEZsaWdodHMsXHJcbiAgTWluTWF4LFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxyXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxyXG4gIE9CVEZsaWdodENhYmluQ2xhc3MsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFJlY29yZFJ1bGVBY3Rpb24sXHJcbiAgUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UsXHJcbiAgUnVsZUxvb2t1cCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VGbGlnaHRRdW90ZUZldGNoZXIsXHJcbiAgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBGdWxsVXNlckRldGFpbHMsXHJcbiAgVXNlclNlcnZpY2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxyXG4gIEZsaWdodERpc3BsYXlUeXBlcyxcclxuICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIEZsaWdodFRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBGbGlnaHRTZWFyY2hUeXBlIH0gZnJvbSAnLi9mbGlnaHQtc2VhcmNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyByZXN1bHQgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGUsXHJcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJRmxpZ2h0U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XHJcblxyXG5jb25zdCBPVVRCT1VORCA9IDA7XHJcbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZENsYXNzIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmxpZ2h0T3BlcmF0b3Ige1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFsbG93ZWRDbGFzc2VzID0gQWxsb3dlZENsYXNzW107XHJcblxyXG5leHBvcnQgZW51bSBUaW1lV2luZG93IHtcclxuICBBbnl0aW1lID0gJ0FueXRpbWUnLFxyXG4gIERlcGFydCA9ICdEZXBhcnQgQnknLFxyXG4gIEFycml2ZSA9ICdBcnJpdmUgQnknXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEZsaWdodFNvcnRUeXBlcyB7XHJcbiAgQ2hlYXBlc3QgPSAnQ2hlYXBlc3QnLFxyXG4gIE1vc3RFeHBlbnNpdmUgPSAnTW9zdCBFeHBlbnNpdmUnLFxyXG4gIEZhc3Rlc3QgPSAnRmFzdGVzdCcsXHJcbiAgUHJlZmVycmVkID0gJ1ByZWZlcnJlZCcsXHJcbiAgTG93ZXN0RW1pc3Npb25zID0gJ0xvd2VzdCBFbWlzc2lvbnMnLFxyXG4gIERlcGFydHVyZVRpbWUgPSAnRGVwYXJ0dXJlIFRpbWUnLFxyXG4gIEFycml2YWxUaW1lID0gJ0Fycml2YWwgVGltZScsXHJcbiAgUXVpY2tlc3QgPSAnUXVpY2tlc3QnLFxyXG4gIE1vc3REaXJlY3QgPSAnTW9zdCBEaXJlY3QnXHJcbn1cclxuXHJcbmludGVyZmFjZSBGbGlnaHRTZXNzaW9uVHlwZSB7XHJcbiAgcmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheTtcclxuICBncm91cGVkOiBHcm91cGVkRmxpZ2h0cztcclxuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbn1cclxuXHJcbmludGVyZmFjZSBIaWRlRmxpZ2h0Q2FiaW5DbGFzc0ludGVyZmFjZSB7XHJcbiAgYW55OiBib29sZWFuO1xyXG4gIGJ1c2luZXNzOiBib29sZWFuO1xyXG4gIGVjb25vbXk6IGJvb2xlYW47XHJcbiAgcHJlbWl1bUVjb25vbXk6IGJvb2xlYW47XHJcbiAgZmlyc3Q6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgRlFfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBGbGlnaHRUZW1wUGFyYW1zLFxyXG4gICAgRmxpZ2h0QWxsUXVvdGVSZXN1bHQsXHJcbiAgICBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2ZsaWdodCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZmxpZ2h0JztcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmxpZ2h0O1xyXG5cclxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+KFtdKTtcclxuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBUaW1lV2luZG93W11cclxuICA+KFtdKTtcclxuICBmbGlnaHRPcGVyYXRvcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBGbGlnaHRPcGVyYXRvcltdXHJcbiAgPihbXSk7XHJcblxyXG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZWFyYnlfYWlycG9ydHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogVmFsdWVEaXNwbGF5PEZsaWdodFNvcnRUeXBlcz5bXSA9IFtcclxuICAgIHsgZGlzcGxheTogJ0NoZWFwZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVcclxuICAgIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGYXN0ZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdQcmVmZXJyZWQgRmFyZXMgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZCB9LFxyXG4gICAge1xyXG4gICAgICBkaXNwbGF5OiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxyXG4gICAgICB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgX3NvcnRJdGluYXJ5Um91dGluZXM6IFJlY29yZDxcclxuICAgIEZsaWdodFNvcnRUeXBlcyxcclxuICAgIChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4gbnVtYmVyXHJcbiAgPiA9IHtcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIGEudG90YWwucHJpY2UgLSBiLnRvdGFsLnByaWNlO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZV06IChcclxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4ge1xyXG4gICAgICByZXR1cm4gYi50b3RhbC5wcmljZSAtIGEudG90YWwucHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLnByZWZlcnJlZCAtIGIucHJlZmVycmVkO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVBcnJpdmluZyk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xyXG4gICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAoYS5vdXRib3VuZEZsaWdodHMgPyBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSAtXHJcbiAgICAgICAgKGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMgPyBiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggOiAwKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9zb3J0R3JvdXBlZFJvdXRpbmVzOiBSZWNvcmQ8XHJcbiAgICBGbGlnaHRTb3J0VHlwZXMsXHJcbiAgICAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IG51bWJlclxyXG4gID4gPSB7XHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5taW5QcmljZSAtIGIubWluUHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYi5taW5QcmljZSAtIGEubWF4UHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gLSBiLmluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKGEucHJlZmVycmVkID8gMSA6IDApIC0gKGIucHJlZmVycmVkID8gMSA6IDApO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5jbzJQZXJJdGVtIC0gYi5jbzJQZXJJdGVtO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuRGVwYXJ0dXJlVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5kZXBhcnREYXRlVGltZSk7XHJcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChcclxuICAgICAgYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxyXG4gICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5hcnJpdmFsRGF0ZVRpbWUpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLmFycml2YWxEYXRlVGltZSk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cclxuICAgICAgICA6IChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cclxuICAgICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcclxuICAgICAgICA/IGEub3V0bGVncy5sZW5ndGggLSBiLm91dGxlZ3MubGVuZ3RoXHJcbiAgICAgICAgOiAoYS5pbmxlZ3MgfHwgW10pLmxlbmd0aCAtIChiLmlubGVncyB8fCBbXSkubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5PEZhcmVUeXBlPltdID0gW1xyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuRmxleGlibGUsIGRpc3BsYXk6ICdGbGV4aWJsZScgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkxlaXN1cmUsIGRpc3BsYXk6ICdMZWlzdXJlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTmVnb3RpYXRlZCwgZGlzcGxheTogJ05lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Ob25OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTm9uLU5lZ290aWF0ZWQnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuU2VsZWN0QW5kUHJvLCBkaXNwbGF5OiAnU2VsZWN0ICYgUHJvJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1PdXRCb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtaW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfb3V0RGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX2luVGltZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcclxuICBwcml2YXRlIF9wYXNzZW5nZXJzOiBhbnk7XHJcbiAgLy8gcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBGbGlnaHRJdGluZXJhcnlXaXRoU2VsZWN0ZWRbXTtcclxuICBwcm90ZWN0ZWQgcmVzdWx0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xyXG4gIHByb3RlY3RlZCBfZ3JvdXBlZDogR3JvdXBlZEZsaWdodHMgPSBudWxsO1xyXG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBzZWxlY3RlZEdyb3VwRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucztcclxuICBwcml2YXRlIF9zaG93SG90ZWxGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaG90ZWxTZWFyY2hSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVycz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICk7XHJcbiAgZHVyYWxTaW5nbGVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgKTtcclxuXHJcbiAgY2hvb3NlbkRpc3BsYXlUeXBlOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RGlzcGxheVR5cGVzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJuc1xyXG4gICk7XHJcbiAgY3VycmVudFNvcnQ6IEZsaWdodFNvcnRUeXBlcztcclxuICBjdXJyZW50RmlsdGVyczogRmxpZ2h0RmlsdGVycztcclxuICBzZWxlY3RlZEdyb3VwSWQ6IG51bWJlcjtcclxuICBwcml2YXRlIF9ydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2U7XHJcbiAgbXVsdGk6IEZsaWdodE11bHRpW107XHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoOTYpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwcmVmZXJyZWRDYXJyaWVycygpOiBPQlRBaXJsaW5lc0RldGFpbHNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwcmVmZXJyZWRDYXJyaWVycyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjEoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMSh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjIoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMih2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjMoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl0gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBvcGVyYXRvcjQoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG9wZXJhdG9yNCh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM10gPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX21pbkRhdGUgfHwgdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudCgpKTtcclxuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0TG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0TG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSAnJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yaWdpbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5RGVzdGluYXRpb25BaXBvcnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlcGFydFRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dFRpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICB0aGlzLl9vdXREYXRlLFxyXG4gICAgICB0aGlzLl9vdXRUaW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvdXRCb3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IHZhbHVlLnllYXIoKSxcclxuICAgICAgbW9udGg6IHZhbHVlLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlICYmXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IG1vbWVudCh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlKS5hZGQoMSwgJ2RheScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3V0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9vdXRUaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZXR1cm5EYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9pbkRhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5UaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVUaW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2luVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5ib3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLl9pblRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXJyaXZlTG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYXJyaXZlTG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb24gPSB2YWx1ZTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybkNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkNhYmluQ2xhc3ModmFsdWU6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogRmxpZ2h0U2VhcmNoVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoVHlwZSh0eXBlOiBGbGlnaHRTZWFyY2hUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dFRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluVGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG4gIGdldCBtYXhDb25uZWN0aW9ucygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHNldCBtYXhDb25uZWN0aW9ucyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xyXG4gIGdldCBtdWx0aURlc3RpbmF0aW9uKCk6IElNdWx0aURlc3RpbmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IG11bHRpRGVzdGluYXRpb24odmFsdWVBcnJheTogSU11bHRpRGVzdGluYXRpb25bXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93SG90ZWxGb3JtKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dIb3RlbEZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNob3dIb3RlbEZvcm0obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93SG90ZWxGb3JtID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBob3RlbFNlYXJjaFJlcXVlc3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaG90ZWxTZWFyY2hSZXF1ZXN0ZWQobmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZCA9IG5ld1ZhbDtcclxuICB9XHJcblxyXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xyXG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxyXG4gICAgICAoZGVzdGluYXRpb25BcnJheTogRGVzdGluYXRpb25FbnRyeVtdLCBpdGVtOiBJTXVsdGlEZXN0aW5hdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdCA9IGl0ZW0uZGVzdC5nYXRld2F5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCBvbmx5XHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGYXJlVHlwZT5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmFyZVR5cGVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZSgpOiBGYXJlVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbmVnb3RpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cztcclxuICB9XHJcblxyXG4gIHNldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZsaWdodGZldGNoZXI6IEJhc2VGbGlnaHRRdW90ZUZldGNoZXI8RlFfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFKRl9RPixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcblxyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICB0ZW1wUGFyYW1zOiBGbGlnaHRUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IEZsaWdodFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXMsXHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDoge30gYXMgRmxpZ2h0VGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBxdWVyeSA9IHNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KGRhdGEudGVtcFBhcmFtcyk7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMocXVlcnkpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5GbGlnaHRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXJTZXJ2aWNlLmNoYW5nZVVzZXIuc3Vic2NyaWJlKChfdXNlcjogRnVsbFVzZXJEZXRhaWxzKSA9PiB7XHJcbiAgICAgIHRoaXMudGltZUNyaXRlcmlhT3B0aW9ucy5uZXh0KFtcclxuICAgICAgICBUaW1lV2luZG93LkFueXRpbWUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5BcnJpdmUsXHJcbiAgICAgICAgVGltZVdpbmRvdy5EZXBhcnRcclxuICAgICAgXSk7IC8vIFRPRE8gdXBkYXRlIHdpdGggYW55IFVGc1xyXG4gICAgICB0aGlzLmZsaWdodE9wZXJhdG9ycy5uZXh0KFt7IGNvZGU6ICdCQScsIG5hbWU6ICdCcml0aXNoIEFpcndheXMnIH1dKTsgLy8gRmV0Y2ggdGhlc2UgZnJvbSBEQlxyXG4gICAgICB0aGlzLnVwZGF0ZUF2YWxpYWJsZUNsYXNzZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG5cclxuICAgIHRoaXMubmVnb3RpYXRlZCA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhcclxuICAgIHJlc3VsdHM6IEZsaWdodEFsbFF1b3RlUmVzdWx0XHJcbiAgKTogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSB7XHJcbiAgICBpZiAoIXJlc3VsdHMpIHtcclxuICAgICAgdGhpcy5fZ3JvdXBlZCA9IFtdO1xyXG4gICAgICB0aGlzLm11bHRpID0gW107XHJcbiAgICAgIHRoaXMucmVzdWx0UXVlcnkgPSBudWxsO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ncm91cGVkID0gcmVzdWx0cy5ncm91cGVkIHx8IFtdO1xyXG4gICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAge1xyXG4gICAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWQ6IHt9LFxyXG4gICAgICAgIGR1YWxTaW5nbGVXaGVuU2VsZWN0ZWQ6IHt9LFxyXG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lOiB7fVxyXG4gICAgICB9LFxyXG4gICAgICByZXN1bHRzLnJ1bGVBY3Rpb25TdW1tYXJ5XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICB0aGlzLm11bHRpID0gcmVzdWx0cy5tdWx0aTtcclxuICAgIHRoaXMuc2V0RmxpZ2h0RGlzcGxheVR5cGUoRmxpZ2h0RGlzcGxheVR5cGVzLnJldHVybnMpO1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVycyA9IHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxyXG4gICAgICByZXN1bHRzLmpvdXJuZXlzLFxyXG4gICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgICApO1xyXG4gICAgdGhpcy5maWx0ZXJzLm5leHQodGhpcy5jdXJyZW50RmlsdGVycyk7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMucmVzdWx0UXVlcnkud2l0aEdyb3VwZWQ7XHJcbiAgICBjb25zdCBkdWFsU2luZ2xlcyA9IHJlc3VsdHMubXVsdGkucmVkdWNlKFxyXG4gICAgICAoXHJcbiAgICAgICAgcHJldmlvdXNJdGVtczoge1xyXG4gICAgICAgICAgb3V0Ym91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcclxuICAgICAgICAgIGluYm91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5leHRJdGVtOiBJdGluZXJhcnlTdW1tYXJ5XHJcbiAgICAgICkgPT4ge1xyXG4gICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ10gPVxyXG4gICAgICAgICAgbmV4dEl0ZW0ucmVzdWx0cy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBhY2N1bTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+LFxyXG4gICAgICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICAgICAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcclxuICAgICAgICAgICAgICBhY2N1bVtmbGlnaHQudWlkXSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgY2FuU2VsZWN0OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmxpZ2h0XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzSXRlbXM7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgb3V0Ym91bmQ6IHt9LCBpbmJvdW5kOiB7fSB9XHJcbiAgICApO1xyXG4gICAgLy8gY29uc29sZS5sb2coZHVhbFNpbmdsZXMpO1xyXG4gICAgY29uc3QgZHVhbEluYm91bmRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZHVhbFNpbmdsZXMuaW5ib3VuZCksXHJcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlNcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5kdXJhbFNpbmdsZUZpbHRlci5uZXh0KFxyXG4gICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSwge1xyXG4gICAgICAgIC4uLkRFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXHJcbiAgICAgICAgYXJyaXZhbFJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsQWlycG9ydCxcclxuICAgICAgICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXHJcbiAgICAgICAgcmV0dXJuQXJyaXZhbFRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsVGltZSxcclxuICAgICAgICByZXR1cm5EdXJhdGlvbjogZHVhbEluYm91bmRGaWx0ZXJzLmR1cmF0aW9uLFxyXG4gICAgICAgIHJldHVybkRlcGFydHVyZVRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhcnR1cmVUaW1lXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaWYgKHJlc3VsdHMgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICBjb25zdCByZXR1cm5zID0gKFxyXG4gICAgICAgIChyZXN1bHRzLmpvdXJuZXlzIGFzIHVua25vd24gYXMgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXSkgfHwgW11cclxuICAgICAgKS5yZWR1Y2UoXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgYWNjdW06IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICAgICAgICApOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4gPT4ge1xyXG4gICAgICAgICAgYWNjdW1bZmxpZ2h0LnVpZF0gPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGNhblNlbGVjdDogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmbGlnaHRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7fVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IChyZXN1bHRzLmdyb3VwZWQgfHwgW10pLnJlZHVjZShcclxuICAgICAgICB0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhyZXR1cm5zKSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZHVhbERhdGFPdXRib3VuZDogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10gPSAoXHJcbiAgICAgICAgcmVzdWx0cy5ncm91cGVkIHx8IFtdXHJcbiAgICAgIClcclxuICAgICAgICAucmVkdWNlKHRoaXMubWFrZUdyb3VwZWRPYmplY3RzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSwgW10pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQxLmRpcmVjdGlvbiA9IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDE7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBkdWFsRGF0YUluYm91bmQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0gKFxyXG4gICAgICAgIHJlc3VsdHMuZ3JvdXBlZCB8fCBbXVxyXG4gICAgICApXHJcbiAgICAgICAgLnJlZHVjZSh0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhkdWFsU2luZ2xlcy5pbmJvdW5kLCB0cnVlKSwgW10pXHJcbiAgICAgICAgLm1hcCgocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQxLmRpcmVjdGlvbiA9IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQ7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0MTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGEyID0gWy4uLnJldHVybkRhdGEsIC4uLmR1YWxEYXRhT3V0Ym91bmQsIC4uLmR1YWxEYXRhSW5ib3VuZF07XHJcbiAgICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzZWQgR3JvdXBlZCBkYXRhJywgZGF0YTIpO1xyXG4gICAgICByZXR1cm4gZGF0YTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cyA/IFtyZXN1bHRzXSA6IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIG1ha2VHcm91cGVkT2JqZWN0cyhcclxuICAgIGdyb3VwZWRPYmplY3Q6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcclxuICAgIHRyZWF0T3V0Ym91bmRzQXNPdXRib3VuZHM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgYWNjOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSxcclxuICAgICAgaXRlbTogR3JvdXBlZEZpZWxkc0ZyYWdtZW50XHJcbiAgICApOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzT3V0Qm91bmQgPSBpdGVtLmJvdW5kSW5kaWNhdG9yID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kO1xyXG4gICAgICBjb25zdCByZXR1cm5PYmplY3Q6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCA9IHtcclxuICAgICAgICB0eXBlOiAnRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0JyxcclxuICAgICAgICBkaXJlY3Rpb246IGl0ZW0uYm91bmRJbmRpY2F0b3IsXHJcbiAgICAgICAgY2xhc3Nlczoge1xyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3NCcmFuZGVkXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aV06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215RmxleGlCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlOb0JhZ3NdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc0JyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teVJlc3RyaWN0ZWRCcmFuZGVkXTpcclxuICAgICAgICAgICAgbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0XTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkZpcnN0QnJhbmRlZF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teV06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teUJyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvcmlnaW5BaXJwb3J0OiAnJyxcclxuICAgICAgICBvcmlnaW5BaXJwb3J0TmFtZTogJycsXHJcbiAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OiAnJyxcclxuICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnROYW1lOiAnJyxcclxuICAgICAgICBkZXBhcnREYXRlVGltZTogJycsXHJcbiAgICAgICAgYXJyaXZhbERhdGVUaW1lOiAnJyxcclxuICAgICAgICBvdXRib3VuZFRvdGFsRHVyYXRpb246IDAsXHJcbiAgICAgICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IDAsXHJcbiAgICAgICAgb3V0bGVnczogbnVsbCxcclxuICAgICAgICBpbmxlZ3M6IG51bGwsXHJcbiAgICAgICAgb3V0bGVnc0NvdW50OiAwLFxyXG4gICAgICAgIGlubGVnc0NvdW50OiAwLFxyXG4gICAgICAgIGRhdGFTb3VyY2U6ICcnLFxyXG4gICAgICAgIHByZWZlcnJlZDogZmFsc2UsXHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHROdW1iZXI6ICcnLFxyXG4gICAgICAgIG9wZXJhdG9yOiAnJyxcclxuICAgICAgICBvcGVyYXRvckZ1bGw6ICcnLFxyXG4gICAgICAgIGluYm91bmRGbGlnaHROdW1iZXI6ICcnLFxyXG4gICAgICAgIGlzUmV0dXJuOiBmYWxzZSxcclxuICAgICAgICBtaW5QcmljZTogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICAgICAgbWF4UHJpY2U6IDAsXHJcbiAgICAgICAgY28yUGVySXRlbTogMCxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IDAsXHJcbiAgICAgICAgZ2lkOiBpdGVtLnJlZmVyZW5jZUlEXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGJyYW5kczogTWF0Y2hpbmdGbGlnaHRzID0gaXRlbS5mbGlnaHRzO1xyXG5cclxuICAgICAgT2JqZWN0LmtleXMoYnJhbmRzKVxyXG4gICAgICAgIC5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiBrZXlbMF0gIT09ICdfJylcclxuICAgICAgICAuZm9yRWFjaCgoYnJhbmQ6IEZsaWdodEdyb3VwcykgPT4ge1xyXG4gICAgICAgICAgaWYgKCFicmFuZHNbYnJhbmRdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAhIHVzaW5nIGEgcmVkdWNlIGJlY2F1c2Ugbm90IGFsbCBmbGlnaHRzIGFjdHVhbGx5IGV4aXN0IGFuZCB3ZSB3ZXJlIHNlZWluZyB1bmRlZmluZWQgaW4gdGhlIGZsaWdodCBsaXN0XHJcbiAgICAgICAgICBicmFuZHNbYnJhbmRdLmZvckVhY2goKGZsaWdodE51bTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZsaWdodCA9IGdyb3VwZWRPYmplY3RbZmxpZ2h0TnVtXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmbGlnaHQpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNPdXRCb3VuZCB8fCB0cmVhdE91dGJvdW5kc0FzT3V0Ym91bmRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5zb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmluYm91bmRUb3RhbER1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuY28yUGVySXRlbSxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlclBhc3NlbmdlclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cGVkSXRlbShcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0Lm91dGJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlckl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RCcmFuZDogT0JURmxpZ2h0Q2FiaW5DbGFzcyA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlbHBlcnMuRmxpZ2h0Q2FiaW5DbGFzc1RvQnJhbmRlZE9CVEZsaWdodENhYmluQ2xhc3MoXHJcbiAgICAgICAgICAgICAgICAgIGJyYW5kLFxyXG4gICAgICAgICAgICAgICAgICAhIWZsaWdodC5iYXNlRmFyZUlkICYmIGZsaWdodC5iYXNlRmFyZUlkICE9PSBmbGlnaHQudWlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1pbnByaWNlID0gTWF0aC5mbG9vcihmbGlnaHQudG90YWwucHJpY2UpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1heHByaWNlID0gTWF0aC5jZWlsKGZsaWdodC50b3RhbC5wcmljZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm1pblByaWNlID1cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5taW5QcmljZSA8IG1pbnByaWNlXHJcbiAgICAgICAgICAgICAgICAgID8gcmV0dXJuT2JqZWN0Lm1pblByaWNlXHJcbiAgICAgICAgICAgICAgICAgIDogbWlucHJpY2U7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5tYXhQcmljZSA9XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWF4UHJpY2UgPiBtYXhwcmljZVxyXG4gICAgICAgICAgICAgICAgICA/IHJldHVybk9iamVjdC5tYXhQcmljZVxyXG4gICAgICAgICAgICAgICAgICA6IG1heHByaWNlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXT8uZmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLmZsaWdodHMucHVzaChmbGlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWlucHJpY2UgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXS5taW5wcmljZSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLm1heHByaWNlID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWF4cHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdID0ge1xyXG4gICAgICAgICAgICAgICAgICBmbGlnaHRzOiBbZmxpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeTogZmxpZ2h0LnRvdGFsLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgIC8vICAgJ1VuYWJsZSB0byBmaW5kIGZsaWdodCB3aXRoIHVpZCAnICsgZmxpZ2h0TnVtXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXR1cm5PYmplY3QgJiZcclxuICAgICAgICAhIU9iamVjdC52YWx1ZXMocmV0dXJuT2JqZWN0LmNsYXNzZXMpLmZpbmQoXHJcbiAgICAgICAgICAoY2xhczogRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXM/LmZsaWdodHM/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY2MucHVzaChyZXR1cm5PYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2MuZmlsdGVyKChpdGVtMjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiAhIWl0ZW0yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlcixcclxuICAgIGNvMlBlckl0ZW06IG51bWJlcixcclxuICAgIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcclxuICAgICAgY29uc3QgbGFzdCA9IG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnQgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gbGFzdC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yID0gZmlyc3QubWFya2V0aW5nQ2FycmllcjtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm1hcmtldGluZ0NhcnJpZXJOYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3MgPSBvdXRib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ21hcmtldGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gZmFsc2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5jbzJQZXJJdGVtID0gY28yUGVySXRlbTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmNvMlBlclBhc3NlbmdlciA9IGNvMlBlclBhc3NlbmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRmxpZ2h0U2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogZGF0YSxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtaW4gPiBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XHJcbiAgICBpZiAoY2hlY2tJc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XHJcbiAgICAgIHRoaXMubXVsdGlDaXR5VmFsaWRhdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhbiBhcnJpdmFsIGRlc3RpbmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydCBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xyXG4gICAgbGV0IGlzZW1wdHlWYWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzZW1wdHlMYW5kaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uLm1hcCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWVsZW1lbnQub3JpZykge1xyXG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPCAyKSB7XHJcbiAgICAgICAgICBpc2VtcHR5TGFuZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lm9yaWcgPT09IGVsZW1lbnQuZGVzdCkgaXNTYW1lVmFsdWUgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIW1vbWVudCh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNlbXB0eUxhbmRpbmcpXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgbGFuZGluZyBhaXJwb3J0KHMpJyk7XHJcbiAgICBpZiAoaXNlbXB0eVZhbHVlKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IHRha2Ugb2ZmIGFpcnBvcnQocyknKTtcclxuICAgIGlmIChpc1NhbWVWYWx1ZSlcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnVGFrZSBvZmYgYW5kIGxhbmRpbmcgbG9jYXRpb24ocykgY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gIH1cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnRcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcclxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxyXG4gICAgaXNGbGlnaHRzR3JvdXBlZDogYm9vbGVhblxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICA/IGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpXHJcbiAgICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXHJcbiAgICBpc0ZsaWdodHNHcm91cGVkOiBib29sZWFuXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgZGF0ZTogc3RyaW5nLFxyXG4gICAgdGltZVdpbmRvdz86IHN0cmluZ1xyXG4gICk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgaWYgKHRpbWVXaW5kb3cpIHtcclxuICAgICAgY29uc3QgZmxpZ2h0VGltZSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcclxuICAgICAgY29uc3QgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcclxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxyXG4gICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbXVsdGlEZXN0aW5hdGlvbiA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXHJcbiAgICAgICAgOiBbXTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXHJcbiAgICAgICAgICAgICAgICBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxyXG4gICAgICAgICAgICAgICAgaXNGbGlnaHRzR3JvdXBlZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxyXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcclxuICAgICAgICAgIG91dGJvdW5kQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NdXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxyXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyxcclxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcclxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKFxyXG4gICAgICAgICAgICAoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxyXG4gICAgICAgICAgICAgIGNhcnJpZXI/LmNvZGUgPyBjYXJyaWVyLmNvZGUgOiBudWxsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcclxuICAgICAgICAgIHdpdGhHcm91cGVkOiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLmlzUmV0dXJuXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIGNvbnN0IGhpZGVDbGFzc2VzID1cclxuICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8SGlkZUZsaWdodENhYmluQ2xhc3NJbnRlcmZhY2U+KFxyXG4gICAgICAgIFVzZXJGYXZvcnVyaXRlLkhpZGVGbGlnaHRDYWJpbkNsYXNzZXNcclxuICAgICAgKSB8fCB7XHJcbiAgICAgICAgYW55OiBmYWxzZSxcclxuICAgICAgICBidXNpbmVzczogZmFsc2UsXHJcbiAgICAgICAgZWNvbm9teTogZmFsc2UsXHJcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxyXG4gICAgICAgIHByZW1pdW1FY29ub215OiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXSA9IFtdO1xyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5hbnkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5lY29ub215KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMuYnVzaW5lc3MpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0J1c2luZXNzJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmZpcnN0KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdGaXJzdCcsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRmlyc3QgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyhcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzLFxyXG4gICAgICBoaWRlQ2xhc3NlcyxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyxcclxuICAgICAgaGlkZUNsYXNzZXMsXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gICAgaGlkZUNsYXNzZXM6IEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlLFxyXG4gICAgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdXHJcbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBzd2l0Y2ggKGNhYmluQ2xhc3MpIHtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5idXNpbmVzcyA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5lY29ub215ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XHJcbiAgfVxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIC8vIEZsaWdodHMgY2FuIG5vdCBiZSBzZWFyY2ggYWZ0ZXIgb3RoZXIgcHJvZHVjdHMgc28gbm8gZGVmYXVsdHMgY2FuIGJlIHNldC5cclxuICB9XHJcblxyXG4gIGdldFRvdGFsQmFnZ2FnZShyZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSk6IG51bWJlciB7XHJcbiAgICBsZXQgdG90YWwgPSAwO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZEFkZGl0aW9uYWwgPSBKU09OLnBhcnNlKHJlc3VsdC5hZGRpdGlvbmFsKTtcclxuICAgIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goKGZsaWdodDogYW55KSA9PiB7XHJcbiAgICAgICAgZmxpZ2h0LmJhZ2dhZ2UuZm9yRWFjaCgoYmFnOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChiYWcuYWxsb3dhbmNlICYmIGJhZy5hbGxvd2FuY2UgPiB0b3RhbCkge1xyXG4gICAgICAgICAgICB0b3RhbCA9IGJhZy5hbGxvd2FuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwYXJzZWRBZGRpdGlvbmFsICYmIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSkge1xyXG4gICAgICBwYXJzZWRBZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZm9yRWFjaCgoYmFnZ2FnZUFsbG93OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkgJiZcclxuICAgICAgICAgIE51bWJlcihiYWdnYWdlQWxsb3cuYmFnZ2FnZS5xdHkpID4gdG90YWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRvdGFsID0gTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG90YWw7XHJcbiAgfVxyXG5cclxuICBpc0dyb3VwZWRGbGlnaHRzKFxyXG4gICAgdG9UZXN0OiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogdG9UZXN0IGlzIEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdIHtcclxuICAgIHJldHVybiB0b1Rlc3RbMF0/LnR5cGUgPT09ICdGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQnO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBmaWx0ZXIgdGhlIHJlc3VsdHMsIHRoZW4gc29ydCB0aGUgcmVtYWluZGVyXHJcbiAgICogQHRvZG8gLSBBZGQgZmlsdGVycyBmb3IgdHJhdmVsIHBvbGljeSwgZmFyZSB0eXBlcyBhbmQgYW5jaWxsaWFyaWVzXHJcbiAgICovXHJcbiAgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIHNvcnRWYWx1ZTogRmxpZ2h0U29ydFR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gZmlsdGVycztcclxuICAgIHRoaXMuY3VycmVudFNvcnQgPSBzb3J0VmFsdWU7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnKysrIEFwcGx5aW5nIEZpbHRlcnMgdG8gZmxpZ2h0czogJywgZmlsdGVycywgJyArKysnKTtcclxuICAgIGlmICh0aGlzLmZ1bGxSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsdGVyU2VsZWN0ZWRGbGlnaHRzOiAoXHJcbiAgICAgIGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sXHJcbiAgICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bVxyXG4gICAgKSA9PiAoZjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuID0gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICAgID8gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmluYm91bmRGbGlnaHRzPy5sZW5ndGhcclxuICAgICAgICA/IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcclxuICAgICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiAoZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kIHx8XHJcbiAgICAgICAgICAgICAgICBncm91cHNUb1Nob3cuaW5jbHVkZXMoZmxpZ2h0SXRpbmVyYXJ5LnVpZClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICA6IChfZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICBjb25zdCB0ZXN0ZXIgPSAoXHJcbiAgICAgIGZpbHRlcnNUb3Rlc3Q6IFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIFNlbGVjdEZpbHRlcj4sXHJcbiAgICAgIHRlc3RGdW5jdGlvbjogKFxyXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSxcclxuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXHJcbiAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJzVG90ZXN0KS5maWx0ZXIoXHJcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gISFzZWxlY3RlZC5maW5kKChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGVzdEZ1bmN0aW9uKGZsaWdodEl0aW5lcmFyeSwgZmlsdGVyLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZHMgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmcsXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApOiBzdHJpbmcgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGRcclxuICAgICAgICAucmVwbGFjZSgnT1VUQk9VTkRfREVQQVJUVVJFJywgJ291dGJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdPVVRCT1VORF9BUlJJVkFMJyxcclxuICAgICAgICAgICdvdXRib3VuZEZsaWdodHMuJyArIChmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5yZXBsYWNlKCdJTkJPVU5EX0RFUEFSVFVSRScsICdpbmJvdW5kRmxpZ2h0cy4wJylcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ2luYm91bmRGbGlnaHRzLicgK1xyXG4gICAgICAgICAgICAoKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoIC0gMSlcclxuICAgICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaXNIb3VyQmV0d2VlbiA9IChcclxuICAgICAgbWlubWF4OiBNaW5NYXgsXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcclxuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpc1RpbWVCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuXHJcbiAgICAgICAgLy8gbm93IGF0dGVtcHQgdG8gZ2V0IHRoZSBtaW4gLSBtYXkgbmVlZCB0byBub3JtYWxpc2UgdGhpc1xyXG4gICAgICAgIGNvbnN0IHZhbDIgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnbWludXRlJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvdGFsVGltZTogbnVtYmVyID0gTnVtYmVyKFxyXG4gICAgICAgICAgYCR7dmFsfS4ke3RoaXMuaGVscGVycy5ub3JtYWxpc2VNaW51dGVUb0Jhc2UxMCh2YWwyKX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdG90YWxUaW1lID49IG1pbm1heC5taW4gJiYgdG90YWxUaW1lIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhc1ZhbHVlID0gKFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB0b1Rlc3Q6IHN0cmluZykgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB0b1Rlc3Q6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdmFsID09PSB0b1Rlc3Q7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGZpZWxkSGFzVmFsdWUgPSAoXHJcbiAgICAgIGZpZWxkOiBrZXlvZiBGbGlnaHRKb3VybmV5XHJcbiAgICApOiAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBmbGlnaHRbZmllbGRdID09PSB2YWx1ZTtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb3V0SXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgY29uc3QgaW5EdWFsSXRpbmVyYXJ5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLmFycml2YWxUaW1lLCAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5kZXBhcnR1cmVUaW1lLFxyXG4gICAgICAgICdPVVRCT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc0JldHdlZW4oZmlsdGVycy5yZXR1cm5EdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc0JldHdlZW4oZmlsdGVycy5kdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5zdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoID09PVxyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxBaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXT8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSxcclxuICAgICAgICAnSU5CT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKFxyXG4gICAgICAgIGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSxcclxuICAgICAgICAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnaW5ib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggPT09XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5iYWdnYWdlLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IGZsaWdodEl0aW5lcmFyeS5iYWdnYWdlQWxsb3dhbmNlLm1hcChcclxuICAgICAgICAgICAgKGJhZ2dhZ2VBbGxvd2FuY2U6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZ2dhZ2VBbGxvd2FuY2UucXR5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aFxyXG4gICAgICAgICAgICA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSlcclxuICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgcmV0dXJuIGJhZ2dhZ2UgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzWzBdPy5vcmlnaW5BaXJwb3J0ID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5hcnJpdmFsUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tcclxuICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXT8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3V0Sm91cm5leVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpXHJcbiAgICApO1xyXG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKGZpbHRlcnMuYWlybGluZXMsIGZpZWxkSGFzVmFsdWUoJ21hcmtldGluZ0NhcnJpZXInKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpKTtcclxuICAgIGluSm91cm5leVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKGZpbHRlcnMuYWlybGluZXMsIGZpZWxkSGFzVmFsdWUoJ21hcmtldGluZ0NhcnJpZXInKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb3V0RmlsdGVySXRpbmVyYXJpZXMgPSAoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICBncm91cEluZGV4OiBudW1iZXJcclxuICAgICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIGFjYyA9IGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhb3V0Sm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGluRmlsdGVySXRpbmVyYXJpZXMgPSAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBpbkl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChcclxuICAgICAgICAgICAgICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpbkR1YWxGaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2M6IGJvb2xlYW4sXHJcbiAgICAgICAgICAgIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApICYmXHJcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggfHxcclxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkUnVsZVN1bW1hcnk6IFJlY29yZFJ1bGVBY3Rpb24gPVxyXG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8uam91cm5leUhhc2hcclxuICAgICAgXSB8fCB7fTtcclxuXHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XHJcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy51bmF2YWlsYWJsZSB8fFxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8udW5hdmFpbGFibGUgfHxcclxuICAgICAgICBzZWxlY3RlZFJ1bGVTdW1tYXJ5W2ZsaWdodC5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlIHx8XHJcbiAgICAgICAgZmFsc2U7XHJcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPVxyXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnVuYXZhaWxhYmxlTWVzc2FnZSB8fFxyXG4gICAgICAgICcnO1xyXG5cclxuICAgICAgZmxpZ2h0LnJlcXVpcmVzUmVhc29uID1cclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ucmVxdWlyZXNSZWFzb24gfHxcclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICA/LnJlcXVpcmVzUmVhc29uIHx8XHJcbiAgICAgICAgc2VsZWN0ZWRSdWxlU3VtbWFyeVtmbGlnaHQuam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbiB8fFxyXG4gICAgICAgIGZhbHNlO1xyXG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25NZXNzYWdlID1cclxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgID8ucmVxdWlyZXNSZWFzb25NZXNzYWdlIHx8XHJcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2UgfHxcclxuICAgICAgICAnJztcclxuXHJcbiAgICAgIHJldHVybiBmbGlnaHQ7XHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuaXNHcm91cGVkRmxpZ2h0cyh0aGlzLmZ1bGxSZXN1bHRzKSkge1xyXG4gICAgICBjb25zdCBncm91cGVkRmxpZ2h0czogR3JvdXBGbGlnaHRzID0gdGhpcy5fZ3JvdXBlZC5maW5kKFxyXG4gICAgICAgIChpdGVtOiBHcm91cEZsaWdodHMpID0+IGl0ZW0ucmVmZXJlbmNlSUQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgICAgLmNsb25lPEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdPih0aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgICAgICAgLmZpbHRlcigocmVzdWx0MTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDE7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLm1hcChcclxuICAgICAgICAgICAgKHJlc3VsdDI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCk6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVySXRpbmVyYXJpZXMgPVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0Mi5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgfHxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVPdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICA/IG91dEZpbHRlckl0aW5lcmFyaWVzXHJcbiAgICAgICAgICAgICAgICAgIDogcmVzdWx0Mi5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmRcclxuICAgICAgICAgICAgICAgICAgPyBpbkR1YWxGaWx0ZXJJdGluZXJhcmllc1xyXG4gICAgICAgICAgICAgICAgICA6IGluRmlsdGVySXRpbmVyYXJpZXM7XHJcblxyXG4gICAgICAgICAgICAgIHJlc3VsdDIuY2xhc3NlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3VsdDIuY2xhc3NlcykucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICBhY2N1bTogUmVjb3JkPE9CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzPixcclxuICAgICAgICAgICAgICAgICAgW2tleSwgdmFsdWVdOiBbT0JURmxpZ2h0Q2FiaW5DbGFzcywgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3NdXHJcbiAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmZsaWdodHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEpvdXJuZXlzID0gdmFsdWUuZmxpZ2h0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiAhIWZsaWdodEl0aW5lcmFyeVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyU2VsZWN0ZWRGbGlnaHRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRGbGlnaHRzPy5mbGlnaHRzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLk9CVEZsaWdodENhYmluQ2xhc3NUb0ZsaWdodENhYmluQ2xhc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0gfHwgW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Mi5kaXJlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXJJdGluZXJhcmllcylcclxuICAgICAgICAgICAgICAgICAgICAgIC5tYXAoc2V0U2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEpvdXJuZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGFjY3VtW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGlnaHRzOiBmaWx0ZXJlZEpvdXJuZXlzXHJcbiAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge30gYXMgUmVjb3JkPE9CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzPlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdDI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0MiAmJiBPYmplY3Qua2V5cyhyZXN1bHQyLmNsYXNzZXMpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnNvcnQodGhpcy5fc29ydEdyb3VwZWRSb3V0aW5lc1tzb3J0VmFsdWVdKSBhcyBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzXHJcbiAgICAgICAgICAgIC5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgICAgICAgICAubWFwKChyZXN1bHQ0OiBGbGlnaHRBbGxRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBuZXdKb3VybmV5czogYW55ID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdDQuam91cm5leXMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZmlsdGVycy5mbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gbmV3Sm91cm5leXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0Ym91bmRGbGlnaHRzID0gZmxpZ2h0SXRlbS5vdXRib3VuZEZsaWdodHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChvdXRGbGlnaHQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dEZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXIgPT09IGZpbHRlcnMuZmxpZ2h0TnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0uaW5ib3VuZEZsaWdodHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChpbkZsaWdodCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5GbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyID09PSBmaWx0ZXJzLmZsaWdodE51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dGJvdW5kRmxpZ2h0cyB8fCBpbmJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihvdXRGaWx0ZXJJdGluZXJhcmllcyk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmlzUmV0dXJuKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3SW5Kb3VybmV5czogYW55ID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdDQuam91cm5leXMpO1xyXG4gICAgICAgICAgICAgICAgbmV3SW5Kb3VybmV5cyA9IG5ld0luSm91cm5leXMuZmlsdGVyKGluRmlsdGVySXRpbmVyYXJpZXMpO1xyXG4gICAgICAgICAgICAgICAgbmV3Sm91cm5leXMgPSB0aGlzLm1lcmdlT3V0SW5Cb3VuZChuZXdKb3VybmV5cywgbmV3SW5Kb3VybmV5cyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld0pvdXJuZXlzLnNvcnQodGhpcy5fc29ydEl0aW5hcnlSb3V0aW5lc1tzb3J0VmFsdWVdKTtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ0ZsaWdodEFsbFF1b3RlUmVzdWx0JyxcclxuICAgICAgICAgICAgICAgIGpvdXJuZXlzOiA8RmxpZ2h0SXRpbmVyYXJ5W10+bmV3Sm91cm5leXNcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkgYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWVyZ2VPdXRJbkJvdW5kKFxyXG4gICAgb3V0Ym91bmQ6IEZsaWdodEl0aW5lcmFyeVtdLFxyXG4gICAgaW5ib3VuZDogRmxpZ2h0SXRpbmVyYXJ5W11cclxuICApOiBGbGlnaHRJdGluZXJhcnlbXSB7XHJcbiAgICBjb25zdCBmbGlnaHRzID0gT2JqZWN0LnZhbHVlcyhcclxuICAgICAgWy4uLm91dGJvdW5kLCAuLi5pbmJvdW5kXS5yZWR1Y2UoKHJlc3VsdCwgeyB1aWQsIC4uLnJlc3QgfSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzdWx0W3VpZF0pIHtcclxuICAgICAgICAgIHJlc3VsdFt1aWRdID0ge1xyXG4gICAgICAgICAgICAuLi4ocmVzdWx0W3VpZF0gfHwge30pLFxyXG4gICAgICAgICAgICB1aWQsXHJcbiAgICAgICAgICAgIC4uLnJlc3RcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0sIFtdKVxyXG4gICAgKTtcclxuICAgIHJldHVybiBmbGlnaHRzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGggfHwgdGhpcy5zZWFyY2hTZXJ2aWNlLmlzRmxpZ2h0c0dyb3VwZWQoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgam91cm5leXMgPSAocmVzdWx0c1swXSBhcyBGbGlnaHRBbGxRdW90ZVJlc3VsdCkuam91cm5leXM7XHJcbiAgICBpZiAoIWpvdXJuZXlzLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XHJcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxyXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2UsIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XHJcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEZsaWdodChcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcclxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSxcclxuICAgIGdyb3VwSWQ6IG51bWJlclxyXG4gICkge1xyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXkgJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXHJcbiAgICApIHtcclxuICAgICAgLy8gVE9ETyBiZWNvdXNlIHBvcC11cCBpcyBub3QgcmVhZHkgSSBjb21tZW50ZWQgdGhlIGNvZGUuXHJcbiAgICAgIC8vIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oIE1vZGFsVHlwZXMuRmxpZ2h0RXh0cmFzRGlhbG9nQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlIH0sIHsgZmxpZ2h0OiBzZWxlY3RlZEZsaWdodCB9KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgKGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZCB8fFxyXG4gICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmQpXHJcbiAgICApIHtcclxuICAgICAgaWYgKHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IC0xO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IHNlbGVjdGVkRmxpZ2h0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkID0gZ3JvdXBJZDtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgICAgICB0aGlzLl91cGRhdGVUcmF2ZWxQb2xpY2llcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkID0gIXNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBiYXNrZXQgJiZcclxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcclxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kb0Jvb2tpbmcoXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xyXG4gICAgICAgICAgICAuLi5zZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAnb3V0Ym91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAnaW5ib3VuZCcsXHJcbiAgICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAgIHNlZ21lbnRJbmRleFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBqb3VybmV5VHlwZTogJ3JvdW5kdHJpcCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQyxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQpO1xyXG4gICAgICB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfdXBkYXRlVHJhdmVsUG9saWNpZXMoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgfHxcclxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuam91cm5leUhhc2hcclxuICAgICAgXSB8fFxyXG4gICAgICAhdGhpcy5tdWx0aSB8fFxyXG4gICAgICB0aGlzLm11bHRpLmxlbmd0aCA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG11bHRpSW5ib3VuZHMgPSAodGhpcy5tdWx0aSB8fCBbXSkucmVkdWNlKFxyXG4gICAgICAoYWNjOiBGbGlnaHRJdGluZXJhcnlbXSwgaXRlbTogRmxpZ2h0TXVsdGkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5vcmRlciA9PT0gMSAmJiBpdGVtLnJlc3VsdHMgJiYgaXRlbS5yZXN1bHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoaXRlbS5yZXN1bHRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSxcclxuICAgICAgW11cclxuICAgICk7XHJcbiAgICBpZiAobXVsdGlJbmJvdW5kcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGbGlnaHRSdWxlc1xyXG4gICAgICAgIC5mZXRjaE9uZSh7XHJcbiAgICAgICAgICBzZWxlY3RlZE91dGJvdW5kRmxpZ2h0OiB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQsXHJcbiAgICAgICAgICBhdmFpbGFibGVJbmJvdW5kRmxpZ2h0czogbXVsdGlJbmJvdW5kc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChydWxlczogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UpID0+IHtcclxuICAgICAgICAgIGlmIChydWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHMoXHJcbiAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnksXHJcbiAgICAgICAgICAgICAgcnVsZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYm9va1NpbmdsZUZsaWdodChcclxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApIHtcclxuICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICBpbnRCYXNrZXQsXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnb3V0Ym91bmQnLCAwLCBzZWdtZW50SW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICksXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9LFxyXG4gICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkb0Jvb2tpbmcoXHJcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgc2NoZW1hRGV0YWlsczogYW55LFxyXG4gICAgb3V0Ym91bmREYXRlOiBzdHJpbmcsXHJcbiAgICBpbmJvdW5kRGF0ZT86IHN0cmluZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzb3VyY2VJZCwgY28yUGVySXRlbSwgY28yUGVyUGFzc2VuZ2VyLCB0b3RhbCB9ID0gc2VsZWN0ZWRGbGlnaHQ7XHJcbiAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcclxuICAgICAgYmFza2V0OiBpbnRCYXNrZXQuaWQsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICBjbzJQZXJJdGVtLFxyXG4gICAgICBjbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcclxuICAgICAgcHJpY2U6IHRvdGFsLnByaWNlLFxyXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgb3V0Ym91bmREYXRlXHJcbiAgICB9O1xyXG4gICAgaWYgKGluYm91bmREYXRlKSB7XHJcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgYm9va2luZyxcclxuICAgICAgaW50QmFza2V0LFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgc2VsZWN0ZWRGbGlnaHQucmVxdWlyZXNSZWFzb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleDogbnVtYmVyXHJcbiAgKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICBqb3VybmV5SW5mbzoge1xyXG4gICAgICAgIGZsaWdodEdyb3VwLFxyXG4gICAgICAgIGdyb3VwSW5kZXgsXHJcbiAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGFzeW5jIGFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoXHJcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChmbGlnaHRRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBmbGlnaHRRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoXHJcbiAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5mbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5mbGlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZmxpZ2h0IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYm9va2luZyxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XHJcbiAgfVxyXG5cclxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jaG9vc2VuRGlzcGxheVR5cGUubmV4dChkaXNwbGF5VHlwZSk7XHJcbiAgfVxyXG5cclxuICBfYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICB9XHJcblxyXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMocnVsZXM6IEZhcmVDb25kaXRpb25zLCBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10pOiB2b2lkIHtcclxuICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZXJlIGFyZSBydWxlc1xyXG4gICAgY29uc3QgZG9DYWxsID0gIU9iamVjdC52YWx1ZXMocnVsZXMpLmZpbmQoXHJcbiAgICAgIChydWxlOiBGYXJlQ29uZGl0aW9uRW50cnlbXSk6IG51bWJlciA9PiBydWxlLmxlbmd0aFxyXG4gICAgKTtcclxuICAgIGlmIChkb0NhbGwpIHtcclxuICAgICAgY29uc3QgcnVsZXNGcm9tQ2FsbCA9IHRoaXMuc2VhcmNoU2VydmljZS5nZXRGbGlnaHRGYXJlUnVsZXMoXHJcbiAgICAgICAgZmxpZ2h0c1swXSBhcyBJbnB1dEZsaWdodEpvdXJuZXlcclxuICAgICAgKTtcclxuICAgICAgcnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICAgICAgcnVsZXM6IGRhdGEucmVzdWx0c1swXSxcclxuICAgICAgICAgICAgZnJvbTogZmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0LFxyXG4gICAgICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG51bGwsIHtcclxuICAgICAgICBydWxlcyxcclxuICAgICAgICBmcm9tOiBmbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXHJcbiAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPIHdhaXRpbmcgZm9yIGRhdGFcclxuICBnZXRUZXJtc0FuZENvbmQoZmxpZ2h0UXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1BlbmFsdGllcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRWxpZ2liaWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICAsXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGF5L3RpbWUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NlYXNvbmFsaXR5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGbGlnaHTCoEFwcGxpY2F0aW9uJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZHZhbmNlwqBSZXNlcnZhdGlvbnMvdGlja2V0aW5nJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNYXhpbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdNaW5pbXVtwqBTdGF5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTdG9wb3ZlcnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYW5zZmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ29tYmluYXRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdCbGFja291dMKgRGF0ZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N1cmNoYXJnZXMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FjY29tcGFuaWVkwqBUcmF2ZWwnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RyYXZlbMKgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdTYWxlc8KgUmVzdHJpY3Rpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdIaXAvbWlsZWFnZcKgRXhjZXB0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVGlja2V0wqBFbmRvcnNlbWVudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0NoaWxkcmVuwqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXLCoENvbmR1Y3RvcsKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBZ2VudMKgRGlzY291bnRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBbGzCoE90aGVywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pc2NlbGxhbmVvdXPCoFByb3Zpc2lvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZhcmXCoEJ5wqBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdHcm91cHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RvdXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWaXNpdMKgQW5vdGhlcsKgQ291bnRyeScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRGVwb3NpdHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZvbHVudGFyecKgQ2hhbmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBSZWZ1bmRzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdOZWdvdGlhdGVkwqBGYXJlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUnVsZcKgQXBwbGljYXRpb27CoEFuZMKgT3RoZXLCoENvbmRpdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJRmxpZ2h0U2VhcmNoQXJncyA9XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuRmxpZ2h0LFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2Lm11bHRpRGVzdGluYXRpb24gPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSA6IGZhdi5yZXR1cm5UcmlwID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheVxyXG4gICAgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSl7XHJcbiAgICAgIGNvbnN0IG11bHRpID0gYXdhaXQgUHJvbWlzZS5hbGwoZmF2Lm11bHRpRGVzdGluYXRpb24ubWFwKGFzeW5jIChhOiB7ZGF0ZTogc3RyaW5nLCBkZXN0OiBzdHJpbmcsIG9yaWc6IHN0cmluZ30pID0+IHtcclxuICAgICAgICBsZXQgZGVzdGluYXRpb246IHtkYXRlOiBtb21lbnQuTW9tZW50LCBkZXN0OiBhbnksIG9yaWc6IGFueX0gPSB7IGRhdGU6IHVuZGVmaW5lZCwgZGVzdDogdW5kZWZpbmVkLCBvcmlnOiB1bmRlZmluZWR9XHJcbiAgICAgICAgZGVzdGluYXRpb24ub3JpZyA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoYS5vcmlnKS50b1Byb21pc2UoKS50aGVuKG9yaWdSZXN1bHRzID0+IHtcclxuICAgICAgICAgIHJldHVybiAob3JpZ1Jlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmdhdGV3YXkgPT0gYS5vcmlnKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZGVzdGluYXRpb24uZGVzdCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoYS5kZXN0KS50b1Byb21pc2UoKS50aGVuKGRlc3RSZXN1bHRzID0+IHtcclxuICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmdhdGV3YXkgPT0gYS5kZXN0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uXHJcbiAgICAgIH0pKVxyXG4gICAgICB0aGlzLm11bHRpRGVzdGluYXRpb24gPSBtdWx0aSBhcyBhbnlcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2Lm9yaWdpbkFpcnBvcnQpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcclxuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gKHJlc3VsdHMgYXMgYW55W10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gZmF2Lm9yaWdpbkFpcnBvcnQpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QoZmF2LmRlc3RpbmF0aW9uQWlycG9ydCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChhID0+IGEuZ2F0ZXdheSA9PSBmYXYuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gZmF2Lm91dGJvdW5kQ2FiaW5DbGFzc1swXVxyXG4gICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gdGhpcy5jaG9zZW5TZWFyY2hUeXBlICE9IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuID8gbnVsbCA6IGZhdi5yZXR1cm5DYWJpbkNsYXNzWzBdXHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IGZhdi5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgIHRoaXMuYWR1bHRzID0gZmF2LnBhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSBcIkFEVUxUXCIpLmxlbmd0aFxyXG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gXCJDSElMRFwiKS5sZW5ndGhcclxuICAgIC8vIHRoaXMucHJlZmVycmVkQ2FycmllcnMgPSBmYXYucHJlZmVycmVkQ2FycmllcnMubWFwKChhOiBhbnkpID0+IHtcclxuICAgICAgXHJcbiAgICAvLyB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogSUZsaWdodFNlYXJjaEFyZ3Mge1xyXG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID0gcXVlcnk7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSkge1xyXG4gICAgICBjYXNlIEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5OlxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5Lm11bHRpRGVzdGluYXRpb25EZXRhaWwgPSB0aGlzLm11bHRpRGVzdGluYXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm46XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuZGVwYXJ0TG9jYXRpb25EZXRhaWwgPSB0aGlzLmRlcGFydExvY2F0aW9uO1xyXG4gICAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uRGV0YWlsID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
2007
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSWxFLE9BQU8sRUFRTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBSWhCLG1CQUFtQixFQVFuQixXQUFXLEVBQ1osTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEVBRTVCLG1CQUFtQixFQVluQixtQkFBbUIsRUFNcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQVV4QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUduQixNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2hELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQWFuQixNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ3BCLGlDQUFtQixDQUFBO0lBQ25CLGtDQUFvQixDQUFBO0lBQ3BCLGtDQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFKVyxVQUFVLEtBQVYsVUFBVSxRQUlyQjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBVVg7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QUFJLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1lBQ3ZELElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzFFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzVFLG1FQUFtRTtZQUVuRSxLQUFLO1FBQ1AsQ0FBQztLQUFBO0lBRU8sZ0JBQWdCLENBQ3RCLEtBQW9DO1FBRXBDLE1BQU0sV0FBVyxHQUFzQixLQUFLLENBQUM7UUFDN0MsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDN0IsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUM3QixXQUFXLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUMzRCxNQUFNO1lBQ1IsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDN0IsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNO2dCQUMxQixXQUFXLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDdkQsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3ZELE1BQU07U0FDVDtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O0FBeDRGZSw2Q0FBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsOENBQXVCLEdBQUcsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQgeyBGbGlnaHRGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtZmlsdGVycy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcclxuICBCYWdnYWdlQWxsb3dhbmNlLFxyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIERlc3RpbmF0aW9uRW50cnksXHJcbiAgRmFyZUNvbmRpdGlvbkVudHJ5LFxyXG4gIEZhcmVDb25kaXRpb25zLFxyXG4gIEZhcmVUeXBlLFxyXG4gIEZsaWdodENhYmluQ2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5LFxyXG4gIEZsaWdodEpvdXJuZXksXHJcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxyXG4gIEZsaWdodFBhc3NlbmdlclR5cGUsXHJcbiAgR3JvdXBlZEZpZWxkc0ZyYWdtZW50LFxyXG4gIEdyb3VwRmxpZ2h0cyxcclxuICBJbnB1dEZsaWdodEpvdXJuZXksXHJcbiAgSXRpbmVyYXJ5U3VtbWFyeSxcclxuICBNYXRjaGluZ0ZsaWdodHMsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcclxuICBGbGlnaHRBbGxRdW90ZVJlc3VsdCxcclxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxyXG4gIEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICBGbGlnaHRHcm91cHMsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgRmxpZ2h0TXVsdGksXHJcbiAgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSxcclxuICBHcm91cGVkRmxpZ2h0cyxcclxuICBNaW5NYXgsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRBaXJsaW5lc0RldGFpbHMsXHJcbiAgT0JUQWlycG9ydERldGFpbHMsXHJcbiAgT0JURmxpZ2h0Q2FiaW5DbGFzcyxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgUmVjb3JkUnVsZUFjdGlvbixcclxuICBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSxcclxuICBSdWxlTG9va3VwLFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUZsaWdodFF1b3RlRmV0Y2hlcixcclxuICBGbGlnaHRRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmxpZ2h0LXF1b3RlLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEZ1bGxVc2VyRGV0YWlscyxcclxuICBVc2VyU2VydmljZUludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXHJcbiAgRmxpZ2h0RGlzcGxheVR5cGVzLFxyXG4gIEZsaWdodEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgRmxpZ2h0VGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWZsaWdodC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IEZsaWdodFNlYXJjaFR5cGUgfSBmcm9tICcuL2ZsaWdodC1zZWFyY2gtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgSU11bHRpRGVzdGluYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1tdWx0aS1kZXN0aW5hdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IHJlc3VsdCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi91c2VyLWZhdm91cml0ZS5lbnVtJztcclxuaW1wb3J0IHtcclxuICBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcclxuICBCYXNlQXBwbHlKaXRGbGlnaHRSdWxlc0ZldGNoZXJcclxufSBmcm9tICcuLi9mZXRjaGVycy9hcHBseS1qaXQtZmxpZ2h0LXJ1bGVzJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGFsLW9wZW5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4vbW9kYWwtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7IElGbGlnaHRTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtc2VhcmNoLWFyZ3MuaW50ZXJmYWNlJztcclxuXHJcbmNvbnN0IE9VVEJPVU5EID0gMDtcclxuZXhwb3J0IGludGVyZmFjZSBBbGxvd2VkQ2xhc3Mge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGbGlnaHRPcGVyYXRvciB7XHJcbiAgY29kZTogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWxsb3dlZENsYXNzZXMgPSBBbGxvd2VkQ2xhc3NbXTtcclxuXHJcbmV4cG9ydCBlbnVtIFRpbWVXaW5kb3cge1xyXG4gIEFueXRpbWUgPSAnQW55dGltZScsXHJcbiAgRGVwYXJ0ID0gJ0RlcGFydCBCeScsXHJcbiAgQXJyaXZlID0gJ0Fycml2ZSBCeSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRmxpZ2h0U29ydFR5cGVzIHtcclxuICBDaGVhcGVzdCA9ICdDaGVhcGVzdCcsXHJcbiAgTW9zdEV4cGVuc2l2ZSA9ICdNb3N0IEV4cGVuc2l2ZScsXHJcbiAgRmFzdGVzdCA9ICdGYXN0ZXN0JyxcclxuICBQcmVmZXJyZWQgPSAnUHJlZmVycmVkJyxcclxuICBMb3dlc3RFbWlzc2lvbnMgPSAnTG93ZXN0IEVtaXNzaW9ucycsXHJcbiAgRGVwYXJ0dXJlVGltZSA9ICdEZXBhcnR1cmUgVGltZScsXHJcbiAgQXJyaXZhbFRpbWUgPSAnQXJyaXZhbCBUaW1lJyxcclxuICBRdWlja2VzdCA9ICdRdWlja2VzdCcsXHJcbiAgTW9zdERpcmVjdCA9ICdNb3N0IERpcmVjdCdcclxufVxyXG5cclxuaW50ZXJmYWNlIEZsaWdodFNlc3Npb25UeXBlIHtcclxuICByZXN1bHRzOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5O1xyXG4gIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzO1xyXG4gIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcztcclxufVxyXG5cclxuaW50ZXJmYWNlIEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlIHtcclxuICBhbnk6IGJvb2xlYW47XHJcbiAgYnVzaW5lc3M6IGJvb2xlYW47XHJcbiAgZWNvbm9teTogYm9vbGVhbjtcclxuICBwcmVtaXVtRWNvbm9teTogYm9vbGVhbjtcclxuICBmaXJzdDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZsaWdodEVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBGUV9RIGV4dGVuZHMgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZSxcclxuICAgIEFKRl9RIGV4dGVuZHMgQXBwbHlKaXRGbGlnaHRSdWxlc1R5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIEZsaWdodFRlbXBQYXJhbXMsXHJcbiAgICBGbGlnaHRBbGxRdW90ZVJlc3VsdCxcclxuICAgIEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfZmxpZ2h0JztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19mbGlnaHQnO1xyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5GbGlnaHQ7XHJcblxyXG4gIGF2YWxpYWJsZUNsYXNzZXM6IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4gPVxyXG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4oW10pO1xyXG4gIHRpbWVDcml0ZXJpYU9wdGlvbnM6IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIFRpbWVXaW5kb3dbXVxyXG4gID4oW10pO1xyXG4gIGZsaWdodE9wZXJhdG9yczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodE9wZXJhdG9yW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIEZsaWdodE9wZXJhdG9yW11cclxuICA+KFtdKTtcclxuXHJcbiAgcHJpdmF0ZSBfbmVnb3RpYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX25lYXJieV9haXJwb3J0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheTxzdHJpbmc+W107XHJcbiAgcHJpdmF0ZSBfc29ydEFycmF5OiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnQ2hlYXBlc3QgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0IH0sXHJcbiAgICB7XHJcbiAgICAgIGRpc3BsYXk6ICdNb3N0IEV4cGVuc2l2ZSBGaXJzdCcsXHJcbiAgICAgIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZVxyXG4gICAgfSxcclxuICAgIHsgZGlzcGxheTogJ0Zhc3Rlc3QgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkZhc3Rlc3QgfSxcclxuICAgIHsgZGlzcGxheTogJ1ByZWZlcnJlZCBGYXJlcyBGaXJzdCcsIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkIH0sXHJcbiAgICB7XHJcbiAgICAgIGRpc3BsYXk6ICdMb3dlc3QgQ28yIEVtaXNzaW9ucyBGaXJzdCcsXHJcbiAgICAgIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBfc29ydEl0aW5hcnlSb3V0aW5lczogUmVjb3JkPFxyXG4gICAgRmxpZ2h0U29ydFR5cGVzLFxyXG4gICAgKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBudW1iZXJcclxuICA+ID0ge1xyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdF06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICByZXR1cm4gYS50b3RhbC5wcmljZSAtIGIudG90YWwucHJpY2U7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKFxyXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiBiLnRvdGFsLnByaWNlIC0gYS50b3RhbC5wcmljZTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkZhc3Rlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXHJcbiAgICAgICAgKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxyXG4gICAgICAgIChiLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXHJcbiAgICAgICAgICAoYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKSlcclxuICAgICAgKTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlByZWZlcnJlZF06IChcclxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgICApID0+IHtcclxuICAgICAgcmV0dXJuIGEucHJlZmVycmVkIC0gYi5wcmVmZXJyZWQ7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Mb3dlc3RFbWlzc2lvbnNdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApID0+IHtcclxuICAgICAgcmV0dXJuIGEuY28yUGVySXRlbSAtIGIuY28yUGVySXRlbTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkRlcGFydHVyZVRpbWVdOiAoXHJcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkFycml2YWxUaW1lXTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lQXJyaXZpbmcpO1xyXG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZUFycml2aW5nKTtcclxuICAgICAgaWYgKGFUaW1lLmlzQmVmb3JlKGJUaW1lKSkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYVRpbWUuaXNTYW1lKGJUaW1lKSA/IDAgOiAxO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUXVpY2tlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXHJcbiAgICAgICAgKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxyXG4gICAgICAgIChiLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXHJcbiAgICAgICAgICAoYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKSlcclxuICAgICAgKTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLk1vc3REaXJlY3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBhLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggK1xyXG4gICAgICAgIChhLm91dGJvdW5kRmxpZ2h0cyA/IGEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA6IDApIC1cclxuICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgIChiLm91dGJvdW5kRmxpZ2h0cyA/IGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA6IDApKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX3NvcnRHcm91cGVkUm91dGluZXM6IFJlY29yZDxcclxuICAgIEZsaWdodFNvcnRUeXBlcyxcclxuICAgIChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4gbnVtYmVyXHJcbiAgPiA9IHtcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLm1pblByaWNlIC0gYi5taW5QcmljZTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBiLm1pblByaWNlIC0gYS5tYXhQcmljZTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkZhc3Rlc3RdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgICAgID8gYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gLSBiLm91dGJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgIDogYS5pbmJvdW5kVG90YWxEdXJhdGlvbiAtIGIuaW5ib3VuZFRvdGFsRHVyYXRpb247XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoYi5wcmVmZXJyZWQgPyAxIDogMCkgLSAoYS5wcmVmZXJyZWQgPyAxIDogMCk7XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Mb3dlc3RFbWlzc2lvbnNdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XHJcbiAgICB9LFxyXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLmRlcGFydERhdGVUaW1lKTtcclxuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5kZXBhcnREYXRlVGltZSk7XHJcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkFycml2YWxUaW1lXTogKFxyXG4gICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLmFycml2YWxEYXRlVGltZSk7XHJcbiAgICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuYXJyaXZhbERhdGVUaW1lKTtcclxuICAgICAgaWYgKGFUaW1lLmlzQmVmb3JlKGJUaW1lKSkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYVRpbWUuaXNTYW1lKGJUaW1lKSA/IDAgOiAxO1xyXG4gICAgfSxcclxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUXVpY2tlc3RdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgICAgID8gYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gLSBiLm91dGJvdW5kVG90YWxEdXJhdGlvblxyXG4gICAgICAgIDogKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxyXG4gICAgICAgICAgICAoYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKTtcclxuICAgIH0sXHJcbiAgICBbRmxpZ2h0U29ydFR5cGVzLk1vc3REaXJlY3RdOiAoXHJcbiAgICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcclxuICAgICAgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0XHJcbiAgICApID0+IHtcclxuICAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgICAgID8gYS5vdXRsZWdzLmxlbmd0aCAtIGIub3V0bGVncy5sZW5ndGhcclxuICAgICAgICA6IChhLmlubGVncyB8fCBbXSkubGVuZ3RoIC0gKGIuaW5sZWdzIHx8IFtdKS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfTtcclxuICBwcml2YXRlIF9mYXJlVHlwZUFycmF5OiBWYWx1ZURpc3BsYXk8RmFyZVR5cGU+W10gPSBbXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5GbGV4aWJsZSwgZGlzcGxheTogJ0ZsZXhpYmxlJyB9LFxyXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTGVpc3VyZSwgZGlzcGxheTogJ0xlaXN1cmUnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Mb3dlc3QsIGRpc3BsYXk6ICdMb3dlc3QnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5OZWdvdGlhdGVkLCBkaXNwbGF5OiAnTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5vbk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOb24tTmVnb3RpYXRlZCcgfSxcclxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlJlcXVlc3RGYXJlUnVsZXMsIGRpc3BsYXk6ICdSZXF1ZXN0IEZhcmUgUnVsZXMnIH0sXHJcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5TZWxlY3RBbmRQcm8sIGRpc3BsYXk6ICdTZWxlY3QgJiBQcm8nIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgbWluaW11bU91dEJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF9vdXREYXRlOiBOZ2JEYXRlU3RydWN0O1xyXG4gIHByaXZhdGUgX291dFRpbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgcHJpdmF0ZSBfaW5UaW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfZGVzdGluYXRpb25BaXJwb3J0OiBhbnk7XHJcbiAgcHJpdmF0ZSBfb3JpZ2luQWlycG9ydDogYW55O1xyXG4gIHByaXZhdGUgX3Bhc3NlbmdlcnM6IGFueTtcclxuICAvLyBwcml2YXRlIGdyb3VwZWRPYmplY3Q6IEZsaWdodEl0aW5lcmFyeVdpdGhTZWxlY3RlZFtdO1xyXG4gIHByb3RlY3RlZCByZXN1bHRRdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XHJcbiAgcHJvdGVjdGVkIF9ncm91cGVkOiBHcm91cGVkRmxpZ2h0cyA9IG51bGw7XHJcbiAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBudWxsO1xyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHNlbGVjdGVkR3JvdXBGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zO1xyXG4gIHByaXZhdGUgX3Nob3dIb3RlbEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9ob3RlbFNlYXJjaFJlcXVlc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZpbHRlcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXHJcbiAgKTtcclxuICBkdXJhbFNpbmdsZUZpbHRlcjogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlNcclxuICApO1xyXG5cclxuICBjaG9vc2VuRGlzcGxheVR5cGU6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHREaXNwbGF5VHlwZXM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIEZsaWdodERpc3BsYXlUeXBlcy5yZXR1cm5zXHJcbiAgKTtcclxuICBjdXJyZW50U29ydDogRmxpZ2h0U29ydFR5cGVzO1xyXG4gIGN1cnJlbnRGaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzO1xyXG4gIHNlbGVjdGVkR3JvdXBJZDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3J1bGVBY3Rpb25TdW1tYXJ5OiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZTtcclxuICBtdWx0aTogRmxpZ2h0TXVsdGlbXTtcclxuICBfY2hlYXBlc3RQcmljZU9iamVjdDoge1xyXG4gICAgZHVhbE91dGJvdW5kOiBJQ2hlYXBlc3RQcmljZTtcclxuICAgIGR1YWxJbmJvdW5kOiBJQ2hlYXBlc3RQcmljZTtcclxuICAgIHJldHVybnM6IElDaGVhcGVzdFByaWNlO1xyXG4gIH0gPSB7XHJcbiAgICBkdWFsT3V0Ym91bmQ6IHtcclxuICAgICAgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuICAgICAgY3VycmVuY3lDb2RlOiAnR0JQJ1xyXG4gICAgfSxcclxuICAgIGR1YWxJbmJvdW5kOiB7XHJcbiAgICAgIGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogJ0dCUCdcclxuICAgIH0sXHJcbiAgICByZXR1cm5zOiB7XHJcbiAgICAgIGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogJ0dCUCdcclxuICAgIH1cclxuICB9O1xyXG4gIHB1YmxpYyBnZXQgY2hlYXBlc3RQcmljZU9iamVjdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdFByaWNlT2JqZWN0O1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg5NilcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHByZWZlcnJlZENhcnJpZXJzKCk6IE9CVEFpcmxpbmVzRGV0YWlsc1tdIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHByZWZlcnJlZENhcnJpZXJzKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHNbXSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMSgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1swXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IxKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1swXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMigpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IyKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMygpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IzKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yNCgpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1szXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3I0KHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1szXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5fbWluRGF0ZSB8fCB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY2hpbGRyZW4odmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gTnVtYmVyKHZhbHVlKTtcclxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZXBhcnRMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnRMb2NhdGlvbih2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbiA9IHZhbHVlO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9ICcnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHF1ZXJ5T3JpZ2luQWlwb3J0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3JpZ2luQWlycG9ydDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcXVlcnlEZXN0aW5hdGlvbkFpcG9ydCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0RGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9vdXREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZXBhcnREYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9vdXREYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgdGhpcy5fb3V0RGF0ZSxcclxuICAgICAgdGhpcy5fb3V0VGltZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVwYXJ0VGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dFRpbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlcGFydFRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fb3V0VGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgIHRoaXMuX291dERhdGUsXHJcbiAgICAgIHRoaXMuX291dFRpbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG91dEJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvdXRCb3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICB0aGlzLm1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcclxuICAgICAgeWVhcjogdmFsdWUueWVhcigpLFxyXG4gICAgICBtb250aDogdmFsdWUubW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogdmFsdWUuZGF0ZSgpXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSAmJlxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgJiZcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc0FmdGVyKHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUpLmFkZCgxLCAnZGF5Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9vdXREYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcclxuICAgIHRoaXMuX291dFRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmV0dXJuRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9pbkRhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJldHVybkRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX2luRGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFycml2ZVRpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9pblRpbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFycml2ZVRpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5faW5UaW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2luRGF0ZSwgdGhpcy5faW5UaW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaW5ib3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBpbmJvdW5kRGF0ZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgdGhpcy5faW5EYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcclxuICAgIHRoaXMuX2luVGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhcnJpdmVMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhcnJpdmVMb2NhdGlvbih2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbiA9IHZhbHVlO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gJyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcclxuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FiaW5DbGFzcygpOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmV0dXJuQ2FiaW5DbGFzcygpOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuQ2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoVHlwZSgpOiBGbGlnaHRTZWFyY2hUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hUeXBlKHR5cGU6IEZsaWdodFNlYXJjaFR5cGUpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gdHlwZTtcclxuICB9XHJcblxyXG4gIGdldCBpc1JldHVybigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm47XHJcbiAgfVxyXG5cclxuICBnZXQgb3V0VGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0VGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5UaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluVGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcbiAgZ2V0IG1heENvbm5lY3Rpb25zKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1heENvbm5lY3Rpb25zKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbXVsdGlEZXN0aW5hdGlvbjogRGVzdGluYXRpb25FbnRyeVtdID0gW107XHJcbiAgZ2V0IG11bHRpRGVzdGluYXRpb24oKTogSU11bHRpRGVzdGluYXRpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgbXVsdGlEZXN0aW5hdGlvbih2YWx1ZUFycmF5OiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbiA9IHZhbHVlQXJyYXk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3dIb3RlbEZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2hvd0hvdGVsRm9ybTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2hvd0hvdGVsRm9ybShuZXdWYWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Nob3dIb3RlbEZvcm0gPSBuZXdWYWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhvdGVsU2VhcmNoUmVxdWVzdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hvdGVsU2VhcmNoUmVxdWVzdGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBob3RlbFNlYXJjaFJlcXVlc3RlZChuZXdWYWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2hvdGVsU2VhcmNoUmVxdWVzdGVkID0gbmV3VmFsO1xyXG4gIH1cclxuXHJcbiAgc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KG11bHRpRGVzdGluYXRpb246IElNdWx0aURlc3RpbmF0aW9uW10pIHtcclxuICAgIGNvbnN0IG5ld011bHRpRGVzdGluYXRpb24gPSB0aGlzLmhlbHBlcnMuY2xvbmUobXVsdGlEZXN0aW5hdGlvbik7XHJcbiAgICByZXR1cm4gbmV3TXVsdGlEZXN0aW5hdGlvbi5yZWR1Y2UoXHJcbiAgICAgIChkZXN0aW5hdGlvbkFycmF5OiBEZXN0aW5hdGlvbkVudHJ5W10sIGl0ZW06IElNdWx0aURlc3RpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25PYmplY3QgPSB7fSBhcyBEZXN0aW5hdGlvbkVudHJ5O1xyXG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0Lm9yaWcgPSBpdGVtLm9yaWcuZ2F0ZXdheTtcclxuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kZXN0ID0gaXRlbS5kZXN0LmdhdGV3YXk7XHJcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGF0ZSA9IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKGl0ZW0uZGF0ZSk7XHJcbiAgICAgICAgZGVzdGluYXRpb25BcnJheS5wdXNoKGRlc3RpbmF0aW9uT2JqZWN0KTtcclxuICAgICAgICByZXR1cm4gZGVzdGluYXRpb25BcnJheTtcclxuICAgICAgfSxcclxuICAgICAgW10gYXMgRGVzdGluYXRpb25FbnRyeVtdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IG9ubHlcclxuICBnZXQgc29ydERyb3Bkb3duVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGbGlnaHRTb3J0VHlwZXM+W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBmYXJlVHlwZXNWYWx1ZXMoKTogVmFsdWVEaXNwbGF5PEZhcmVUeXBlPltdIHtcclxuICAgIHJldHVybiB0aGlzLl9mYXJlVHlwZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZhcmVUeXBlKCk6IEZhcmVUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgZmFyZVR5cGUodmFsdWU6IEZhcmVUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBuZWdvdGlhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX25lZ290aWF0ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgbmVnb3RpYXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbmVnb3RpYXRlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHZhbHVlO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmxpZ2h0ZmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxGUV9RPixcclxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFKRl9RPixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHRlbXBQYXJhbXM6IEZsaWdodFRlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRmxpZ2h0VGVtcFBhcmFtcztcclxuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgRmxpZ2h0VGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBGbGlnaHRUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5ID0gc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoZGF0YS50ZW1wUGFyYW1zKTtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhxdWVyeSk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XHJcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnMoXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnMsXHJcbiAgICAgICAgICAgIFNlcnZpY2VUeXBlLkZsaWdodFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAvLyB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cyA9IHNwbGl0VHJhdmVsbGVycy5pbmZhbnRzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdXNlclNlcnZpY2UuY2hhbmdlVXNlci5zdWJzY3JpYmUoKF91c2VyOiBGdWxsVXNlckRldGFpbHMpID0+IHtcclxuICAgICAgdGhpcy50aW1lQ3JpdGVyaWFPcHRpb25zLm5leHQoW1xyXG4gICAgICAgIFRpbWVXaW5kb3cuQW55dGltZSxcclxuICAgICAgICBUaW1lV2luZG93LkFycml2ZSxcclxuICAgICAgICBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICBdKTsgLy8gVE9ETyB1cGRhdGUgd2l0aCBhbnkgVUZzXHJcbiAgICAgIHRoaXMuZmxpZ2h0T3BlcmF0b3JzLm5leHQoW3sgY29kZTogJ0JBJywgbmFtZTogJ0JyaXRpc2ggQWlyd2F5cycgfV0pOyAvLyBGZXRjaCB0aGVzZSBmcm9tIERCXHJcbiAgICAgIHRoaXMudXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XHJcblxyXG4gICAgdGhpcy5uZWdvdGlhdGVkID1cclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID09PSBGYXJlVHlwZS5OZWdvdGlhdGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKFxyXG4gICAgcmVzdWx0czogRmxpZ2h0QWxsUXVvdGVSZXN1bHRcclxuICApOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGlmICghcmVzdWx0cykge1xyXG4gICAgICB0aGlzLl9ncm91cGVkID0gW107XHJcbiAgICAgIHRoaXMubXVsdGkgPSBbXTtcclxuICAgICAgdGhpcy5yZXN1bHRRdWVyeSA9IG51bGw7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuX2dyb3VwZWQgPSByZXN1bHRzLmdyb3VwZWQgfHwgW107XHJcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHt9LFxyXG4gICAgICB7XHJcbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZDoge30sXHJcbiAgICAgICAgZHVhbFNpbmdsZVdoZW5TZWxlY3RlZDoge30sXHJcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmU6IHt9XHJcbiAgICAgIH0sXHJcbiAgICAgIHJlc3VsdHMucnVsZUFjdGlvblN1bW1hcnkgfHwge31cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgIHRoaXMubXVsdGkgPSByZXN1bHRzLm11bHRpO1xyXG4gICAgdGhpcy5zZXRGbGlnaHREaXNwbGF5VHlwZShGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJucyk7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXHJcbiAgICAgIHJlc3VsdHMuam91cm5leXMsXHJcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlNcclxuICAgICk7XHJcbiAgICB0aGlzLmZpbHRlcnMubmV4dCh0aGlzLmN1cnJlbnRGaWx0ZXJzKTtcclxuXHJcbiAgICAvLyBkZWxldGUgdGhpcy5yZXN1bHRRdWVyeVsnd2l0aEdyb3VwZWQnXTtcclxuICAgIGNvbnN0IGR1YWxTaW5nbGVzID0gcmVzdWx0cy5tdWx0aS5yZWR1Y2UoXHJcbiAgICAgIChcclxuICAgICAgICBwcmV2aW91c0l0ZW1zOiB7XHJcbiAgICAgICAgICBvdXRib3VuZDogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+O1xyXG4gICAgICAgICAgaW5ib3VuZDogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbmV4dEl0ZW06IEl0aW5lcmFyeVN1bW1hcnlcclxuICAgICAgKSA9PiB7XHJcbiAgICAgICAgcHJldmlvdXNJdGVtc1tuZXh0SXRlbS5vcmRlciA9PT0gT1VUQk9VTkQgPyAnb3V0Ym91bmQnIDogJ2luYm91bmQnXSA9XHJcbiAgICAgICAgICBuZXh0SXRlbS5yZXN1bHRzLnJlZHVjZShcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIGFjY3VtOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXHJcbiAgICAgICAgICAgICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICAgICAgICAgICApOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4gPT4ge1xyXG4gICAgICAgICAgICAgIGFjY3VtW2ZsaWdodC51aWRdID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBjYW5TZWxlY3Q6IHRydWVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmbGlnaHRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcHJldmlvdXNJdGVtc1tuZXh0SXRlbS5vcmRlciA9PT0gT1VUQk9VTkQgPyAnb3V0Ym91bmQnIDogJ2luYm91bmQnXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXNJdGVtcztcclxuICAgICAgfSxcclxuICAgICAgeyBvdXRib3VuZDoge30sIGluYm91bmQ6IHt9IH1cclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkdWFsU2luZ2xlcyk7XHJcbiAgICBjb25zdCBkdWFsSW5ib3VuZEZpbHRlcnMgPSB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcclxuICAgICAgT2JqZWN0LnZhbHVlcyhkdWFsU2luZ2xlcy5pbmJvdW5kKSxcclxuICAgICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmR1cmFsU2luZ2xlRmlsdGVyLm5leHQoXHJcbiAgICAgIHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKE9iamVjdC52YWx1ZXMoZHVhbFNpbmdsZXMub3V0Ym91bmQpLCB7XHJcbiAgICAgICAgLi4uREVGQVVMVF9GTElHSFRfRklMVEVSUyxcclxuICAgICAgICBwcmljZTogZHVhbEluYm91bmRGaWx0ZXJzLnByaWNlLFxyXG4gICAgICAgIGFycml2YWxSZXR1cm5BaXJwb3J0OiBkdWFsSW5ib3VuZEZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsXHJcbiAgICAgICAgZGVwYXR1cmVSZXR1cm5BaXJwb3J0OiBkdWFsSW5ib3VuZEZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LFxyXG4gICAgICAgIHJldHVybkFycml2YWxUaW1lOiBkdWFsSW5ib3VuZEZpbHRlcnMuYXJyaXZhbFRpbWUsXHJcbiAgICAgICAgcmV0dXJuRHVyYXRpb246IGR1YWxJbmJvdW5kRmlsdGVycy5kdXJhdGlvbixcclxuICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lOiBkdWFsSW5ib3VuZEZpbHRlcnMuZGVwYXJ0dXJlVGltZVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIGlmIChyZXN1bHRzICYmIHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgY29uc3QgcmV0dXJucyA9IChcclxuICAgICAgICAocmVzdWx0cy5qb3VybmV5cyBhcyB1bmtub3duIGFzIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW10pIHx8IFtdXHJcbiAgICAgICkucmVkdWNlKFxyXG4gICAgICAgIChcclxuICAgICAgICAgIGFjY3VtOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXHJcbiAgICAgICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXHJcbiAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcclxuICAgICAgICAgIGFjY3VtW2ZsaWdodC51aWRdID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBjYW5TZWxlY3Q6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmxpZ2h0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge31cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHJldHVybkRhdGEgPSAocmVzdWx0cy5ncm91cGVkIHx8IFtdKS5yZWR1Y2UoXHJcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBlZE9iamVjdHMocmV0dXJucyksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGR1YWxEYXRhT3V0Ym91bmQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0gKFxyXG4gICAgICAgIHJlc3VsdHMuZ3JvdXBlZCB8fCBbXVxyXG4gICAgICApXHJcbiAgICAgICAgLnJlZHVjZSh0aGlzLm1ha2VHcm91cGVkT2JqZWN0cyhkdWFsU2luZ2xlcy5vdXRib3VuZCksIFtdKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0MS5kaXJlY3Rpb24gPSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVPdXRib3VuZDtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQxO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZHVhbERhdGFJbmJvdW5kOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXSA9IChcclxuICAgICAgICByZXN1bHRzLmdyb3VwZWQgfHwgW11cclxuICAgICAgKVxyXG4gICAgICAgIC5yZWR1Y2UodGhpcy5tYWtlR3JvdXBlZE9iamVjdHMoZHVhbFNpbmdsZXMuaW5ib3VuZCwgdHJ1ZSksIFtdKVxyXG4gICAgICAgIC5tYXAoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0MS5kaXJlY3Rpb24gPSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIC8vIGdvbm5hIGdyYWIgY2hlYXBlc3QgZmxpZ2h0cyBoZXJlXHJcbiAgICAgIHRoaXMuX2NoZWFwZXN0UHJpY2VPYmplY3QucmV0dXJucyA9IHJldHVybkRhdGEucmVkdWNlKFxyXG4gICAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZSwgcmVzdWx0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0Lm1pblByaWNlO1xyXG4gICAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIHtcclxuICAgICAgICAgICAgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6ICdHQlAnIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuX2NoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kID0gZHVhbERhdGFPdXRib3VuZC5yZWR1Y2UoXHJcbiAgICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQubWluUHJpY2U7XHJcbiAgICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkge1xyXG4gICAgICAgICAgICBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogJ0dCUCcgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZCA9IGR1YWxEYXRhSW5ib3VuZC5yZWR1Y2UoXHJcbiAgICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQubWluUHJpY2U7XHJcbiAgICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkge1xyXG4gICAgICAgICAgICBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogJ0dCUCcgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZGF0YTIgPSBbLi4ucmV0dXJuRGF0YSwgLi4uZHVhbERhdGFPdXRib3VuZCwgLi4uZHVhbERhdGFJbmJvdW5kXTtcclxuICAgICAgY29uc29sZS5sb2coJ1Byb2Nlc3NlZCBHcm91cGVkIGRhdGEnLCBkYXRhMik7XHJcbiAgICAgIHJldHVybiBkYXRhMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzID8gW3Jlc3VsdHNdIDogW107XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgbWFrZUdyb3VwZWRPYmplY3RzKFxyXG4gICAgZ3JvdXBlZE9iamVjdDogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+LFxyXG4gICAgdHJlYXRPdXRib3VuZHNBc091dGJvdW5kczogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBhY2M6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdLFxyXG4gICAgICBpdGVtOiBHcm91cGVkRmllbGRzRnJhZ21lbnRcclxuICAgICk6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdID0+IHtcclxuICAgICAgY29uc3QgaXNPdXRCb3VuZCA9IGl0ZW0uYm91bmRJbmRpY2F0b3IgPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQ7XHJcbiAgICAgIGNvbnN0IHJldHVybk9iamVjdDogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0ID0ge1xyXG4gICAgICAgIHR5cGU6ICdGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQnLFxyXG4gICAgICAgIGRpcmVjdGlvbjogaXRlbS5ib3VuZEluZGljYXRvcixcclxuICAgICAgICBjbGFzc2VzOiB7XHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc106IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzc0JyYW5kZWRdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teUZsZXhpXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXlGbGV4aUJyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRWNvbm9teU5vQmFnc106IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215Tm9CYWdzQnJhbmRlZF06XHJcbiAgICAgICAgICAgIG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZF06IG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXHJcbiAgICAgICAgICBbT0JURmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215UmVzdHJpY3RlZEJyYW5kZWRdOlxyXG4gICAgICAgICAgICBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RdOiBudWxsIGFzIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxyXG4gICAgICAgICAgW09CVEZsaWdodENhYmluQ2xhc3MuRmlyc3RCcmFuZGVkXTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215XTogbnVsbCBhcyBGbGlnaHRJdGluZXJhcnlDbGFzcyxcclxuICAgICAgICAgIFtPQlRGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215QnJhbmRlZF06XHJcbiAgICAgICAgICAgIG51bGwgYXMgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3NcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9yaWdpbkFpcnBvcnQ6ICcnLFxyXG4gICAgICAgIG9yaWdpbkFpcnBvcnROYW1lOiAnJyxcclxuICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6ICcnLFxyXG4gICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydE5hbWU6ICcnLFxyXG4gICAgICAgIGRlcGFydERhdGVUaW1lOiAnJyxcclxuICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6ICcnLFxyXG4gICAgICAgIG91dGJvdW5kVG90YWxEdXJhdGlvbjogMCxcclxuICAgICAgICBpbmJvdW5kVG90YWxEdXJhdGlvbjogMCxcclxuICAgICAgICBvdXRsZWdzOiBudWxsLFxyXG4gICAgICAgIGlubGVnczogbnVsbCxcclxuICAgICAgICBvdXRsZWdzQ291bnQ6IDAsXHJcbiAgICAgICAgaW5sZWdzQ291bnQ6IDAsXHJcbiAgICAgICAgZGF0YVNvdXJjZTogJycsXHJcbiAgICAgICAgcHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBjb21wYW55UHJlZmVycmVkTWVzc2FnZTogJycsXHJcbiAgICAgICAgb2ZmaWNlUHJlZmVycmVkOiBmYWxzZSxcclxuICAgICAgICBvZmZpY2VQcmVmZXJyZWRNZXNzYWdlOiAnJyxcclxuICAgICAgICB0bWNQcmVmZXJyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHRtY1ByZWZlcnJlZE1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIG91dGJvdW5kRmxpZ2h0TnVtYmVyOiAnJyxcclxuICAgICAgICBvcGVyYXRvcjogJycsXHJcbiAgICAgICAgb3BlcmF0b3JGdWxsOiAnJyxcclxuICAgICAgICBpbmJvdW5kRmxpZ2h0TnVtYmVyOiAnJyxcclxuICAgICAgICBpc1JldHVybjogZmFsc2UsXHJcbiAgICAgICAgbWluUHJpY2U6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxyXG4gICAgICAgIG1heFByaWNlOiAwLFxyXG4gICAgICAgIGNvMlBlckl0ZW06IDAsXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiAwLFxyXG4gICAgICAgIGdpZDogaXRlbS5yZWZlcmVuY2VJRFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBicmFuZHM6IE1hdGNoaW5nRmxpZ2h0cyA9IGl0ZW0uZmxpZ2h0cztcclxuXHJcbiAgICAgIE9iamVjdC5rZXlzKGJyYW5kcylcclxuICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5WzBdICE9PSAnXycpXHJcbiAgICAgICAgLmZvckVhY2goKGJyYW5kOiBGbGlnaHRHcm91cHMpID0+IHtcclxuICAgICAgICAgIGlmICghYnJhbmRzW2JyYW5kXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gISB1c2luZyBhIHJlZHVjZSBiZWNhdXNlIG5vdCBhbGwgZmxpZ2h0cyBhY3R1YWxseSBleGlzdCBhbmQgd2Ugd2VyZSBzZWVpbmcgdW5kZWZpbmVkIGluIHRoZSBmbGlnaHQgbGlzdFxyXG4gICAgICAgICAgYnJhbmRzW2JyYW5kXS5mb3JFYWNoKChmbGlnaHROdW06IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmbGlnaHQgPSBncm91cGVkT2JqZWN0W2ZsaWdodE51bV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZmxpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzT3V0Qm91bmQgfHwgdHJlYXRPdXRib3VuZHNBc091dGJvdW5kcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cGVkSXRlbShcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQub3V0Ym91bmRUb3RhbER1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5pbmJvdW5kVG90YWxEdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmNvMlBlckl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXBlZEl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LnNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgZmxpZ2h0LmluYm91bmRGbGlnaHRzLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuaW5ib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZEZsaWdodHMsXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5vdXRib3VuZFRvdGFsRHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodC5jbzJQZXJJdGVtLFxyXG4gICAgICAgICAgICAgICAgICBmbGlnaHQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBjb3JyZWN0QnJhbmQ6IE9CVEZsaWdodENhYmluQ2xhc3MgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLkZsaWdodENhYmluQ2xhc3NUb0JyYW5kZWRPQlRGbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgICAgICAgICAgICAgICBicmFuZCxcclxuICAgICAgICAgICAgICAgICAgISFmbGlnaHQuYmFzZUZhcmVJZCAmJiBmbGlnaHQuYmFzZUZhcmVJZCAhPT0gZmxpZ2h0LnVpZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBtaW5wcmljZSA9IE1hdGguZmxvb3IoZmxpZ2h0LnRvdGFsLnByaWNlKTtcclxuICAgICAgICAgICAgICBjb25zdCBtYXhwcmljZSA9IE1hdGguY2VpbChmbGlnaHQudG90YWwucHJpY2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5taW5QcmljZSA9XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWluUHJpY2UgPCBtaW5wcmljZVxyXG4gICAgICAgICAgICAgICAgICA/IHJldHVybk9iamVjdC5taW5QcmljZVxyXG4gICAgICAgICAgICAgICAgICA6IG1pbnByaWNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3QubWF4UHJpY2UgPVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm1heFByaWNlID4gbWF4cHJpY2VcclxuICAgICAgICAgICAgICAgICAgPyByZXR1cm5PYmplY3QubWF4UHJpY2VcclxuICAgICAgICAgICAgICAgICAgOiBtYXhwcmljZTtcclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNvbXBhbnlQcmVmZXJyZWQgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgICAgICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgJyc7XHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0Lm9mZmljZVByZWZlcnJlZCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3Qub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgJyc7XHJcbiAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LnRtY1ByZWZlcnJlZCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy50bWNQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm5PYmplY3QudG1jUHJlZmVycmVkTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF1cclxuICAgICAgICAgICAgICAgICAgPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8udG1jUHJlZmVycmVkTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgJyc7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybk9iamVjdC5wcmVmZXJyZWQgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8uY29tcGFueVByZWZlcnJlZCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgICAgICAgICA/LmNvbXBhbnlQcmVmZXJyZWQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgICAgICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXVxyXG4gICAgICAgICAgICAgICAgICA/Lm9mZmljZVByZWZlcnJlZCB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8udG1jUHJlZmVycmVkIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgID8udG1jUHJlZmVycmVkO1xyXG4gICAgICAgICAgICAgIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXT8uZmxpZ2h0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLmZsaWdodHMucHVzaChmbGlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWlucHJpY2UgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmNsYXNzZXNbY29ycmVjdEJyYW5kXS5taW5wcmljZSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdLm1heHByaWNlID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5jbGFzc2VzW2NvcnJlY3RCcmFuZF0ubWF4cHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QuY2xhc3Nlc1tjb3JyZWN0QnJhbmRdID0ge1xyXG4gICAgICAgICAgICAgICAgICBmbGlnaHRzOiBbZmxpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgbWlucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIG1heHByaWNlLFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeTogZmxpZ2h0LnRvdGFsLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgIC8vICAgJ1VuYWJsZSB0byBmaW5kIGZsaWdodCB3aXRoIHVpZCAnICsgZmxpZ2h0TnVtXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByZXR1cm5PYmplY3QgJiZcclxuICAgICAgICAhIU9iamVjdC52YWx1ZXMocmV0dXJuT2JqZWN0LmNsYXNzZXMpLmZpbmQoXHJcbiAgICAgICAgICAoY2xhczogRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXM/LmZsaWdodHM/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY2MucHVzaChyZXR1cm5PYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2MuZmlsdGVyKChpdGVtMjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiAhIWl0ZW0yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdyb3VwZWRJdGVtKFxyXG4gICAgcmV0dXJuT2JqZWN0OiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIG91dGJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiBudW1iZXIsXHJcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxyXG4gICAgaW5ib3VuZFRvdGFsRHVyYXRpb246IG51bWJlcixcclxuICAgIGNvMlBlckl0ZW06IG51bWJlcixcclxuICAgIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAob3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggJiYgIXJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IG91dGJvdW5kRmxpZ2h0c1swXTtcclxuICAgICAgY29uc3QgbGFzdCA9IG91dGJvdW5kRmxpZ2h0c1tvdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHJldHVybk9iamVjdC5vcmlnaW5BaXJwb3J0ID0gZmlyc3Qub3JpZ2luQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9yaWdpbkFpcnBvcnROYW1lID0gZmlyc3Qub3JpZ2luQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXN0aW5hdGlvbkFpcnBvcnQgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydDtcclxuICAgICAgcmV0dXJuT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWUgPSBsYXN0LmRlc3RpbmF0aW9uQWlycG9ydE5hbWU7XHJcbiAgICAgIHJldHVybk9iamVjdC5kZXBhcnREYXRlVGltZSA9IGZpcnN0LmRhdGVUaW1lRGVwYXJ0aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3QuYXJyaXZhbERhdGVUaW1lID0gbGFzdC5kYXRlVGltZUFycml2aW5nO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0Ym91bmRUb3RhbER1cmF0aW9uID0gb3V0Ym91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuZGF0YVNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yID0gZmlyc3QubWFya2V0aW5nQ2FycmllcjtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm9wZXJhdG9yRnVsbCA9IGZpcnN0Lm1hcmtldGluZ0NhcnJpZXJOYW1lO1xyXG4gICAgICByZXR1cm5PYmplY3Qub3V0bGVnc0NvdW50ID0gb3V0Ym91bmRGbGlnaHRzLmxlbmd0aDtcclxuICAgICAgcmV0dXJuT2JqZWN0Lm91dGxlZ3MgPSBvdXRib3VuZEZsaWdodHM7XHJcbiAgICAgIHJldHVybk9iamVjdC5vdXRib3VuZEZsaWdodE51bWJlciA9XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmpvaW5Gcm9tQXR0cmlidXRlPEZsaWdodEpvdXJuZXk+KFxyXG4gICAgICAgICAgJy0nLFxyXG4gICAgICAgICAgJ21hcmtldGluZ0ZsaWdodE51bWJlcicsXHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gZmFsc2U7XHJcbiAgICAgIHJldHVybk9iamVjdC5jbzJQZXJJdGVtID0gY28yUGVySXRlbTtcclxuICAgICAgcmV0dXJuT2JqZWN0LmNvMlBlclBhc3NlbmdlciA9IGNvMlBlclBhc3NlbmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCAmJiAhcmV0dXJuT2JqZWN0LmluYm91bmRUb3RhbER1cmF0aW9uKSB7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmJvdW5kVG90YWxEdXJhdGlvbiA9IGluYm91bmRUb3RhbER1cmF0aW9uO1xyXG4gICAgICByZXR1cm5PYmplY3QuaW5sZWdzQ291bnQgPSBpbmJvdW5kRmxpZ2h0cy5sZW5ndGg7XHJcbiAgICAgIHJldHVybk9iamVjdC5pbmxlZ3MgPSBpbmJvdW5kRmxpZ2h0cztcclxuICAgICAgcmV0dXJuT2JqZWN0LmluYm91bmRGbGlnaHROdW1iZXIgPVxyXG4gICAgICAgIHRoaXMuaGVscGVycy5qb2luRnJvbUF0dHJpYnV0ZTxGbGlnaHRKb3VybmV5PihcclxuICAgICAgICAgICctJyxcclxuICAgICAgICAgICdvcGVyYXRpbmdGbGlnaHROdW1iZXInLFxyXG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuT2JqZWN0LmlzUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoXHJcbiAgICBkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XHJcbiAgKTogRmxpZ2h0U2Vzc2lvblR5cGUge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0czogZGF0YSxcclxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcclxuICAgICAgcXVlcnk6IHRoaXMucmVzdWx0UXVlcnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIG1hdGNoaW5nQnJhbmRGbGlnaHRzLmZvckVhY2goKGZsaWdodCkgPT4ge1xyXG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcclxuICAgICAgICBtYXggPSBmbGlnaHQudG90YWwucHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG1heDtcclxuICB9XHJcbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0KSA9PiB7XHJcbiAgICAgIGlmIChtaW4gPiBmbGlnaHQ/LnRvdGFsPy5wcmljZSkge1xyXG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbWluO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XHJcbiAgICBpZiAoY2hlY2tJc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XHJcbiAgICAgIHRoaXMubXVsdGlDaXR5VmFsaWRhdGlvbigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGFkZCBpbiBhbiBhcnJpdmFsIGRlc3RpbmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxyXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICAgJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydCBjYW5ub3QgYmUgdGhlIHNhbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWFcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAgICdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xyXG4gICAgbGV0IGlzZW1wdHlWYWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IGlzZW1wdHlMYW5kaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uLm1hcCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWVsZW1lbnQub3JpZykge1xyXG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPCAyKSB7XHJcbiAgICAgICAgICBpc2VtcHR5TGFuZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lm9yaWcgPT09IGVsZW1lbnQuZGVzdCkgaXNTYW1lVmFsdWUgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIW1vbWVudCh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKS5pc0FmdGVyKG1vbWVudCgpKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNlbXB0eUxhbmRpbmcpXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgbGFuZGluZyBhaXJwb3J0KHMpJyk7XHJcbiAgICBpZiAoaXNlbXB0eVZhbHVlKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IHRha2Ugb2ZmIGFpcnBvcnQocyknKTtcclxuICAgIGlmIChpc1NhbWVWYWx1ZSlcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnVGFrZSBvZmYgYW5kIGxhbmRpbmcgbG9jYXRpb24ocykgY2Fubm90IGJlIHRoZSBzYW1lJ1xyXG4gICAgICApO1xyXG4gIH1cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJnc1xyXG4gICAgICAgIC5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcclxuICAgICAgICA/IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERhdGUsXHJcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcclxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mYXJlVHlwZTtcclxuICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIH1cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuVHJpcFxyXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXHJcbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xyXG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbXHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnRcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgIClcclxuICAgIF0pLnN1YnNjcmliZSgoW2RlcGFydExvY2F0aW9uLCBhcnJpdmVMb2NhdGlvbl0pID0+IHtcclxuICAgICAgaWYgKGRlcGFydExvY2F0aW9uICYmIGFycml2ZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXHJcbiAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcclxuICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoXHJcbiAgICAgICAgICAgIGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXHJcbiAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcclxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnByZWZlcnJlZENhcnJpZXJzLm1hcChcclxuICAgICAgICAgICAgKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxyXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxyXG4gICAgaXNGbGlnaHRzR3JvdXBlZDogYm9vbGVhblxyXG4gICk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93ID09PSBUaW1lV2luZG93LkRlcGFydFxyXG4gICAgICA/IGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLTIsIDIpXHJcbiAgICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpXHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUFycml2YWxUaW1lV2luZG93KFxyXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXHJcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXHJcbiAgICBpc0ZsaWdodHNHcm91cGVkOiBib29sZWFuXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtMiwgMilcclxuICAgICAgOiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIDAsIDQpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxyXG4gICAgZGF0ZTogc3RyaW5nLFxyXG4gICAgdGltZVdpbmRvdz86IHN0cmluZ1xyXG4gICk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgaWYgKHRpbWVXaW5kb3cpIHtcclxuICAgICAgY29uc3QgZmxpZ2h0VGltZSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcclxuICAgICAgY29uc3QgdGltZUFuZERhdGUgPSBtb21lbnQoZGF0ZSkuYWRkKFxyXG4gICAgICAgIG1vbWVudC5kdXJhdGlvbih0aGlzLmhlbHBlcnMuaGhtbVRvVGltZShmbGlnaHRUaW1lWzBdKSlcclxuICAgICAgKTtcclxuICAgICAgLy8gYWRkIDIgaG91clxyXG4gICAgICByZXR1cm4gdGltZUFuZERhdGUuY2xvbmUoKS5hZGQoMiwgJ2hvdXInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcclxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxyXG4gICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbXVsdGlEZXN0aW5hdGlvbiA9XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXHJcbiAgICAgICAgOiBbXTtcclxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXHJcbiAgICAgICAgICAgICAgICBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxyXG4gICAgICAgICAgICAgICAgaXNGbGlnaHRzR3JvdXBlZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxyXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcclxuICAgICAgICAgIG91dGJvdW5kQ2FiaW5DbGFzczogdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NcclxuICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3NdXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxyXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucyxcclxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcclxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKFxyXG4gICAgICAgICAgICAoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxyXG4gICAgICAgICAgICAgIGNhcnJpZXI/LmNvZGUgPyBjYXJyaWVyLmNvZGUgOiBudWxsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcclxuICAgICAgICAgIC8vIHdpdGhHcm91cGVkOiBpc0ZsaWdodHNHcm91cGVkXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLmlzUmV0dXJuXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcclxuICAgICAgICAgICAgICAgIGlzRmxpZ2h0c0dyb3VwZWRcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc11cclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XHJcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbG9vcCA9IDA7IGxvb3AgPCB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGxvb3AgPSAwOyBsb29wIDwgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuOyBsb29wICs9IDEpIHtcclxuICAgICAgdHJhdmVsbGVycy5wdXNoKHsgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5DaGlsZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXZhbGlhYmxlQ2xhc3NlcygpIHtcclxuICAgIGNvbnN0IGhpZGVDbGFzc2VzID1cclxuICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8SGlkZUZsaWdodENhYmluQ2xhc3NJbnRlcmZhY2U+KFxyXG4gICAgICAgIFVzZXJGYXZvcnVyaXRlLkhpZGVGbGlnaHRDYWJpbkNsYXNzZXNcclxuICAgICAgKSB8fCB7XHJcbiAgICAgICAgYW55OiBmYWxzZSxcclxuICAgICAgICBidXNpbmVzczogZmFsc2UsXHJcbiAgICAgICAgZWNvbm9teTogZmFsc2UsXHJcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxyXG4gICAgICAgIHByZW1pdW1FY29ub215OiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXSA9IFtdO1xyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5hbnkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5lY29ub215KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGlkZUNsYXNzZXMuYnVzaW5lc3MpIHtcclxuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0J1c2luZXNzJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmZpcnN0KSB7XHJcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdGaXJzdCcsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuRmlyc3QgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyhcclxuICAgICAgdGhpcy5jYWJpbkNsYXNzLFxyXG4gICAgICBoaWRlQ2xhc3NlcyxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyxcclxuICAgICAgaGlkZUNsYXNzZXMsXHJcbiAgICAgIG9wdGlvbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXBkYXRlZENhYmluQ2xhc3MoXHJcbiAgICBjYWJpbkNsYXNzOiBGbGlnaHRDYWJpbkNsYXNzLFxyXG4gICAgaGlkZUNsYXNzZXM6IEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlLFxyXG4gICAgb3B0aW9uczogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IEZsaWdodENhYmluQ2xhc3MgfVtdXHJcbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XHJcbiAgICBzd2l0Y2ggKGNhYmluQ2xhc3MpIHtcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkFueTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5idXNpbmVzcyA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5lY29ub215ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcclxuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0OlxyXG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XHJcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcclxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMucHJlbWl1bUVjb25vbXkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XHJcbiAgfVxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHtcclxuICAgIC8vIEZsaWdodHMgY2FuIG5vdCBiZSBzZWFyY2ggYWZ0ZXIgb3RoZXIgcHJvZHVjdHMgc28gbm8gZGVmYXVsdHMgY2FuIGJlIHNldC5cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hGbGlnaHRzUXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cclxuICAgICAgYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlKSB7XHJcbiAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgOiBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcclxuICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlLFxyXG4gICAgICAgIG91dGJvdW5kVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGF0ZSkge1xyXG4gICAgICBsZXQgcmV0dXJuVGltZVdpbmRvdyA9IHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XHJcbiAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xyXG4gICAgICAgIDogc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkFycml2YWxUaW1lV2luZG93O1xyXG4gICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRhdGUsXHJcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvd1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmFyZVR5cGUgPSBzZWFyY2hGbGlnaHRzUXVlcnkuZmFyZVR5cGU7XHJcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm1heENvbm5lY3Rpb25zO1xyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9XHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzcyBhcyBGbGlnaHRDYWJpbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5DYWJpbkNsYXNzKSB7XHJcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9XHJcbiAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkNhYmluQ2xhc3MgYXMgRmxpZ2h0Q2FiaW5DbGFzcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHNlYXJjaEZsaWdodHNRdWVyeS5pbmNsdWRlTmVhcmJ5QWlycG9ydHNcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVyblRyaXBcclxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICA6IEZsaWdodFNlYXJjaFR5cGUub25lV2F5O1xyXG5cclxuICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XHJcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xyXG4gICAgfSBlbHNlIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRCeUNvZGUoc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm9yaWdpbkFpcnBvcnQpLFxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShzZWFyY2hGbGlnaHRzUXVlcnkuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xyXG4gICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcclxuICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0ge1xyXG4gICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxyXG4gICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXHJcbiAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKFxyXG4gICAgICAgICAgICBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2gudGVybWluYWxzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXHJcbiAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxyXG4gICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHtcclxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2gubmFtZSxcclxuICAgICAgICAgIGdhdGV3YXk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5pYXRhLFxyXG4gICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhcclxuICAgICAgICAgICAgYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFsc1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNvdW50cnk6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcG9zdGNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5wb3N0Y29kZSxcclxuICAgICAgICAgIGNvdW50cnlDb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnByZWZlcnJlZENhcnJpZXJzKSB7XHJcbiAgICAgICAgICBsZXQgY2FycmllcnM6IHN0cmluZ1tdID1cclxuICAgICAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5LnByZWZlcnJlZENhcnJpZXJzIGFzIHN0cmluZ1tdO1xyXG4gICAgICAgICAgY29uc3QgcHJlZmVycmVkQ2FycmllcnM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdID0gW107XHJcbiAgICAgICAgICBjYXJyaWVycy5tYXAoKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgLmdldEFpcmxpbmVzTGlzdChwcmVmZXJyZWRDYXJyeSlcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbTogT0JUQWlybGluZXNEZXRhaWxzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvZGUgPT09IHByZWZlcnJlZENhcnJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkQ2FycmllcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENhcnJpZXJzID0gcHJlZmVycmVkQ2FycmllcnM7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGFkZCBUcmF2ZWxsZXJzXHJcbiAgICBpZiAoYmFza2V0SXRlbS51c2Vycykge1xyXG4gICAgICBiYXNrZXRJdGVtLnVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5hZGRUcmF2ZWxsZXIodXNlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxCYWdnYWdlKHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcclxuICAgIGxldCB0b3RhbCA9IDA7XHJcblxyXG4gICAgY29uc3QgcGFyc2VkQWRkaXRpb25hbCA9IEpTT04ucGFyc2UocmVzdWx0LmFkZGl0aW9uYWwpO1xyXG4gICAgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMpIHtcclxuICAgICAgcGFyc2VkQWRkaXRpb25hbC5vdXRib3VuZEZsaWdodHMuZm9yRWFjaCgoZmxpZ2h0OiBhbnkpID0+IHtcclxuICAgICAgICBmbGlnaHQuYmFnZ2FnZS5mb3JFYWNoKChiYWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGJhZy5hbGxvd2FuY2UgJiYgYmFnLmFsbG93YW5jZSA+IHRvdGFsKSB7XHJcbiAgICAgICAgICAgIHRvdGFsID0gYmFnLmFsbG93YW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhcnNlZEFkZGl0aW9uYWwgJiYgcGFyc2VkQWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKSB7XHJcbiAgICAgIHBhcnNlZEFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZS5mb3JFYWNoKChiYWdnYWdlQWxsb3c6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSAmJlxyXG4gICAgICAgICAgTnVtYmVyKGJhZ2dhZ2VBbGxvdy5iYWdnYWdlLnF0eSkgPiB0b3RhbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdG90YWwgPSBOdW1iZXIoYmFnZ2FnZUFsbG93LmJhZ2dhZ2UucXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcblxyXG4gIGlzR3JvdXBlZEZsaWdodHMoXHJcbiAgICB0b1Rlc3Q6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICApOiB0b1Rlc3QgaXMgRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10ge1xyXG4gICAgcmV0dXJuIHRvVGVzdFswXT8udHlwZSA9PT0gJ0ZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCc7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGZpbHRlciB0aGUgcmVzdWx0cywgdGhlbiBzb3J0IHRoZSByZW1haW5kZXJcclxuICAgKiBAdG9kbyAtIEFkZCBmaWx0ZXJzIGZvciB0cmF2ZWwgcG9saWN5LCBmYXJlIHR5cGVzIGFuZCBhbmNpbGxpYXJpZXNcclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZmlsdGVyczogRmxpZ2h0RmlsdGVycywgc29ydFZhbHVlOiBGbGlnaHRTb3J0VHlwZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgdGhpcy5jdXJyZW50U29ydCA9IHNvcnRWYWx1ZTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCcrKysgQXBwbHlpbmcgRmlsdGVycyB0byBmbGlnaHRzOiAnLCBmaWx0ZXJzLCAnICsrKycpO1xyXG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXJTZWxlY3RlZEZsaWdodHM6IChcclxuICAgICAgZ3JvdXBzVG9TaG93OiBudW1iZXJbXSxcclxuICAgICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXHJcbiAgICApID0+IChmOiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4gPSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcclxuICAgICAgPyB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aFxyXG4gICAgICAgID8gKGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCB8fFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBzVG9TaG93LmluY2x1ZGVzKGZsaWdodEl0aW5lcmFyeS51aWQpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IChncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgfHxcclxuICAgICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIDogKF9ncm91cHNUb1Nob3c6IG51bWJlcltdLCBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiAoX2ZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG5cclxuICAgIGNvbnN0IHRlc3RlciA9IChcclxuICAgICAgZmlsdGVyc1RvdGVzdDogUmVjb3JkPG51bWJlciB8IHN0cmluZywgU2VsZWN0RmlsdGVyPixcclxuICAgICAgdGVzdEZ1bmN0aW9uOiAoXHJcbiAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5LFxyXG4gICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXJcclxuICAgICAgKSA9PiBib29sZWFuXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKGZpbHRlcnNUb3Rlc3QpLmZpbHRlcihcclxuICAgICAgICAoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiAhIXNlbGVjdGVkLmZpbmQoKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXN0RnVuY3Rpb24oZmxpZ2h0SXRpbmVyYXJ5LCBmaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVwbGFjZUZpZWxkcyA9IChcclxuICAgICAgZmllbGQ6IHN0cmluZyxcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlcclxuICAgICk6IHN0cmluZyA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZFxyXG4gICAgICAgIC5yZXBsYWNlKCdPVVRCT1VORF9ERVBBUlRVUkUnLCAnb3V0Ym91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ09VVEJPVU5EX0FSUklWQUwnLFxyXG4gICAgICAgICAgJ291dGJvdW5kRmxpZ2h0cy4nICsgKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnJlcGxhY2UoJ0lOQk9VTkRfREVQQVJUVVJFJywgJ2luYm91bmRGbGlnaHRzLjAnKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgJ0lOQk9VTkRfQVJSSVZBTCcsXHJcbiAgICAgICAgICAnaW5ib3VuZEZsaWdodHMuJyArXHJcbiAgICAgICAgICAgICgoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggLSAxKVxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaXNCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB2YWwgPj0gbWlubWF4Lm1pbiAmJiB2YWwgPD0gbWlubWF4Lm1heDtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICBjb25zdCBpc0hvdXJCZXR3ZWVuID0gKFxyXG4gICAgICBtaW5tYXg6IE1pbk1heCxcclxuICAgICAgZmllbGQ6IHN0cmluZ1xyXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxyXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcclxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5nZXQoJ2hvdXInKTtcclxuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGlzVGltZUJldHdlZW4gPSAoXHJcbiAgICAgIG1pbm1heDogTWluTWF4LFxyXG4gICAgICBmaWVsZDogc3RyaW5nXHJcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWwgPSBtb21lbnQoXHJcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxyXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICAgIClcclxuICAgICAgICApLmdldCgnaG91cicpO1xyXG5cclxuICAgICAgICAvLyBub3cgYXR0ZW1wdCB0byBnZXQgdGhlIG1pbiAtIG1heSBuZWVkIHRvIG5vcm1hbGlzZSB0aGlzXHJcbiAgICAgICAgY29uc3QgdmFsMiA9IG1vbWVudChcclxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkuZ2V0KCdtaW51dGUnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxUaW1lOiBudW1iZXIgPSBOdW1iZXIoXHJcbiAgICAgICAgICBgJHt2YWx9LiR7dGhpcy5oZWxwZXJzLm5vcm1hbGlzZU1pbnV0ZVRvQmFzZTEwKHZhbDIpfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB0b3RhbFRpbWUgPj0gbWlubWF4Lm1pbiAmJiB0b3RhbFRpbWUgPD0gbWlubWF4Lm1heDtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFzVmFsdWUgPSAoXHJcbiAgICAgIGZpZWxkOiBzdHJpbmdcclxuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHRvVGVzdDogc3RyaW5nKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHRvVGVzdDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXHJcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXHJcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB2YWwgPT09IHRvVGVzdDtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZmllbGRIYXNWYWx1ZSA9IChcclxuICAgICAgZmllbGQ6IGtleW9mIEZsaWdodEpvdXJuZXlcclxuICAgICk6ICgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZsaWdodFtmaWVsZF0gPT09IHZhbHVlO1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvdXRJdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcbiAgICBjb25zdCBpbkl0aW5lcmFyeVRlc3RlcnM6ICgoXHJcbiAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKSA9PiBib29sZWFuKVtdID0gW107XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLmRlcGFydHVyZVRpbWUsXHJcbiAgICAgICAgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJylcclxuICAgICk7XHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMudG90YWxTdG9wcyxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcclxuICAgICAgICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5sZW5ndGggPT09XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLnRvdGFsU3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZSxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAgIChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMuZHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucHJpY2UsICd0b3RhbC5wcmljZScpKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNUaW1lQmV0d2VlbihcclxuICAgICAgICBmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSxcclxuICAgICAgICAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJ1xyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIGlzVGltZUJldHdlZW4oXHJcbiAgICAgICAgZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLFxyXG4gICAgICAgICdJTkJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZydcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdpbmJvdW5kVG90YWxEdXJhdGlvbicpXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuc3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuc3RvcHMsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoXHJcbiAgICAgICAgZmlsdGVycy50b3RhbFN0b3BzLFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggK1xyXG4gICAgICAgICAgICAgIChmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmxlbmd0aCA9PT1cclxuICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmJhZ2dhZ2UsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2UubWFwKFxyXG4gICAgICAgICAgICAoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoXHJcbiAgICAgICAgICAgID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KVxyXG4gICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYmFnZ2FnZSxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZS5tYXAoXHJcbiAgICAgICAgICAgIChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGhcclxuICAgICAgICAgICAgPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpXHJcbiAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCxcclxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzWzBdPy5vcmlnaW5BaXJwb3J0ID09PSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihcclxuICAgICAgICBmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LFxyXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgIF0/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcclxuICAgICAgdGVzdGVyKFxyXG4gICAgICAgIGZpbHRlcnMuYXJyaXZhbFJldHVybkFpcnBvcnQsXHJcbiAgICAgICAgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW1xyXG4gICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBvdXRKb3VybmV5VGVzdGVyczogKChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICApID0+IGJvb2xlYW4pW10gPSBbXTtcclxuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2goXHJcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSlcclxuICAgICk7XHJcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBpbkpvdXJuZXlUZXN0ZXJzOiAoKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXlcclxuICAgICkgPT4gYm9vbGVhbilbXSA9IFtdO1xyXG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSkpO1xyXG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKFxyXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBvdXRGaWx0ZXJJdGluZXJhcmllcyA9IChcclxuICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksXHJcbiAgICAgIGdyb3VwSW5kZXg6IG51bWJlclxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgYWNjID0gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKSAmJlxyXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFvdXRKb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGluSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXHJcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leVxyXG4gICAgICAgICAgICAgICAgICApID0+IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjIoZmxpZ2h0Sm91cm5leSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGluRHVhbEZpbHRlckl0aW5lcmFyaWVzID0gKFxyXG4gICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVxyXG4gICAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjYzogYm9vbGVhbixcclxuICAgICAgICAgICAgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuXHJcbiAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcclxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5XHJcbiAgICAgICAgICAgICAgICAgICkgPT4gYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRSdWxlU3VtbWFyeTogUmVjb3JkUnVsZUFjdGlvbiA9XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0Py5qb3VybmV5SGFzaFxyXG4gICAgICBdIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IGhhc0ZpZWxkID0gPFQ+KFxyXG4gICAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxyXG4gICAgICBmaWVsZDogc3RyaW5nLFxyXG4gICAgICBkZWY6IFRcclxuICAgICk6IFQgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3QodGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIFtcclxuICAgICAgICAgICdqb3VybmV5V2hlblNlbGVjdGVkJyxcclxuICAgICAgICAgIGZsaWdodC5qb3VybmV5SGFzaCxcclxuICAgICAgICAgIGZpZWxkXHJcbiAgICAgICAgXSkgfHxcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZmllbGRGcm9tT2JqZWN0KHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBbXHJcbiAgICAgICAgICAnd2hlblNlbGVjdGVkQWxvbmUnLFxyXG4gICAgICAgICAgZmxpZ2h0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgZmllbGRcclxuICAgICAgICBdKSB8fFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5maWVsZEZyb21PYmplY3Qoc2VsZWN0ZWRSdWxlU3VtbWFyeSwgW1xyXG4gICAgICAgICAgZmxpZ2h0LmpvdXJuZXlIYXNoLFxyXG4gICAgICAgICAgZmllbGRcclxuICAgICAgICBdKSB8fFxyXG4gICAgICAgIGRlZlxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XHJcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xyXG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPSBoYXNGaWVsZChmbGlnaHQsICd1bmF2YWlsYWJsZScsIGZhbHNlKTtcclxuXHJcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPSBoYXNGaWVsZChmbGlnaHQsICd1bmF2YWlsYWJsZU1lc3NhZ2UnLCAnJyk7XHJcbiAgICAgIGZsaWdodC5yZXF1aXJlc1JlYXNvbiA9IGhhc0ZpZWxkKGZsaWdodCwgJ3JlcXVpcmVzUmVhc29uJywgZmFsc2UpO1xyXG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25NZXNzYWdlID0gaGFzRmllbGQoXHJcbiAgICAgICAgZmxpZ2h0LFxyXG4gICAgICAgICdyZXF1aXJlc1JlYXNvbk1lc3NhZ2UnLFxyXG4gICAgICAgICcnXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gZmxpZ2h0O1xyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmlzR3JvdXBlZEZsaWdodHModGhpcy5mdWxsUmVzdWx0cykpIHtcclxuICAgICAgY29uc3QgZ3JvdXBlZEZsaWdodHM6IEdyb3VwRmxpZ2h0cyA9IHRoaXMuX2dyb3VwZWQuZmluZChcclxuICAgICAgICAoaXRlbTogR3JvdXBGbGlnaHRzKSA9PiBpdGVtLnJlZmVyZW5jZUlEID09PSB0aGlzLnNlbGVjdGVkR3JvdXBJZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgICB0aGlzLmhlbHBlcnNcclxuICAgICAgICAgIC5jbG9uZTxGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRbXT4odGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdDE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gISFyZXN1bHQxO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5tYXAoXHJcbiAgICAgICAgICAgIChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlckl0aW5lcmFyaWVzID1cclxuICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kIHx8XHJcbiAgICAgICAgICAgICAgICByZXN1bHQyLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgPyBvdXRGaWx0ZXJJdGluZXJhcmllc1xyXG4gICAgICAgICAgICAgICAgICA6IHJlc3VsdDIuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXHJcbiAgICAgICAgICAgICAgICAgID8gaW5EdWFsRmlsdGVySXRpbmVyYXJpZXNcclxuICAgICAgICAgICAgICAgICAgOiBpbkZpbHRlckl0aW5lcmFyaWVzO1xyXG5cclxuICAgICAgICAgICAgICByZXN1bHQyLmNsYXNzZXMgPSBPYmplY3QuZW50cmllcyhyZXN1bHQyLmNsYXNzZXMpLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgICAgYWNjdW06IFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz4sXHJcbiAgICAgICAgICAgICAgICAgIFtrZXksIHZhbHVlXTogW09CVEZsaWdodENhYmluQ2xhc3MsIEZsaWdodEl0aW5lcmFyeUNsYXNzXVxyXG4gICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mbGlnaHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRKb3VybmV5cyA9IHZhbHVlLmZsaWdodHNcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gISFmbGlnaHRJdGluZXJhcnlcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclNlbGVjdGVkRmxpZ2h0cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkRmxpZ2h0cz8uZmxpZ2h0c1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVscGVycy5PQlRGbGlnaHRDYWJpbkNsYXNzVG9GbGlnaHRDYWJpbkNsYXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBdIHx8IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIuZGlyZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySXRpbmVyYXJpZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKHNldFNlbGVjdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRKb3VybmV5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhY2N1bVtrZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmxpZ2h0czogZmlsdGVyZWRKb3VybmV5c1xyXG4gICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHt9IGFzIFJlY29yZDxPQlRGbGlnaHRDYWJpbkNsYXNzLCBGbGlnaHRJdGluZXJhcnlDbGFzcz5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuZmlsdGVyKChyZXN1bHQyOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDIgJiYgT2JqZWN0LmtleXMocmVzdWx0Mi5jbGFzc2VzKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRHcm91cGVkUm91dGluZXNbc29ydFZhbHVlXSkgYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShcclxuICAgICAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgICAgICAuY2xvbmUodGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAgICAgLm1hcCgocmVzdWx0NDogRmxpZ2h0QWxsUXVvdGVSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgbmV3Sm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcnMuZmxpZ2h0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAob3V0RmxpZ2h0KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyID09PSBmaWx0ZXJzLmZsaWdodE51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLmluYm91bmRGbGlnaHRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaW5GbGlnaHQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlciA9PT0gZmlsdGVycy5mbGlnaHROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRib3VuZEZsaWdodHMgfHwgaW5ib3VuZEZsaWdodHMpIHJldHVybiBmbGlnaHRJdGVtO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5pc1JldHVybikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0luSm91cm5leXM6IGFueSA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LmpvdXJuZXlzKTtcclxuICAgICAgICAgICAgICAgIG5ld0luSm91cm5leXMgPSBuZXdJbkpvdXJuZXlzLmZpbHRlcihpbkZpbHRlckl0aW5lcmFyaWVzKTtcclxuICAgICAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gdGhpcy5tZXJnZU91dEluQm91bmQobmV3Sm91cm5leXMsIG5ld0luSm91cm5leXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBuZXdKb3VybmV5cy5zb3J0KHRoaXMuX3NvcnRJdGluYXJ5Um91dGluZXNbc29ydFZhbHVlXSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdGbGlnaHRBbGxRdW90ZVJlc3VsdCcsXHJcbiAgICAgICAgICAgICAgICBqb3VybmV5czogPEZsaWdodEl0aW5lcmFyeVtdPm5ld0pvdXJuZXlzXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApIGFzIEZsaWdodFF1b3RlUmVzdWx0QXJyYXlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lcmdlT3V0SW5Cb3VuZChcclxuICAgIG91dGJvdW5kOiBGbGlnaHRJdGluZXJhcnlbXSxcclxuICAgIGluYm91bmQ6IEZsaWdodEl0aW5lcmFyeVtdXHJcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xyXG4gICAgY29uc3QgZmxpZ2h0cyA9IE9iamVjdC52YWx1ZXMoXHJcbiAgICAgIFsuLi5vdXRib3VuZCwgLi4uaW5ib3VuZF0ucmVkdWNlKChyZXN1bHQsIHsgdWlkLCAuLi5yZXN0IH0pID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdFt1aWRdKSB7XHJcbiAgICAgICAgICByZXN1bHRbdWlkXSA9IHtcclxuICAgICAgICAgICAgLi4uKHJlc3VsdFt1aWRdIHx8IHt9KSxcclxuICAgICAgICAgICAgdWlkLFxyXG4gICAgICAgICAgICAuLi5yZXN0XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9LCBbXSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmxpZ2h0cztcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGpvdXJuZXlzID0gKHJlc3VsdHNbMF0gYXMgRmxpZ2h0QWxsUXVvdGVSZXN1bHQpLmpvdXJuZXlzO1xyXG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjdXJyZW5jeSA9IGpvdXJuZXlzWzBdLnRvdGFsLmN1cnJlbmN5O1xyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnRvdGFsLnByaWNlO1xyXG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xyXG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xyXG4gICAgICB9LFxyXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdEdyb3VwZWRGbGlnaHQoXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0sXHJcbiAgICBncm91cElkOiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5ICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIFRPRE8gYmVjb3VzZSBwb3AtdXAgaXMgbm90IHJlYWR5IEkgY29tbWVudGVkIHRoZSBjb2RlLlxyXG4gICAgICAvLyB0aGlzLm1vZGFsU2VydmljZS5vcGVuKCBNb2RhbFR5cGVzLkZsaWdodEV4dHJhc0RpYWxvZ0NvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9LCB7IGZsaWdodDogc2VsZWN0ZWRGbGlnaHQgfSkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAvLyAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIChkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgfHxcclxuICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWQgPSAtMTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBzZWxlY3RlZEZsaWdodDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IGdyb3VwSWQ7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVHJhdmVsUG9saWNpZXMoKTtcclxuICAgICAgfVxyXG4gICAgICBzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCA9ICFzZWxlY3RlZEZsaWdodC5zZWxlY3RlZDtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYmFza2V0ICYmXHJcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5JbmJvdW5kICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZG9Cb29raW5nKFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgICAgLi4uc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodCxcclxuICAgICAgICAgICAgICAgICAgJ291dGJvdW5kJyxcclxuICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGluYm91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoXHJcbiAgICAgICAgICAgICAgICAgIGZsaWdodCxcclxuICAgICAgICAgICAgICAgICAgJ2luYm91bmQnLFxyXG4gICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXhcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgam91cm5leVR5cGU6ICdyb3VuZHRyaXAnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVEMsXHJcbiAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVENcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGJhc2tldCAmJlxyXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiAmJlxyXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0KTtcclxuICAgICAgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0IHx8XHJcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmpvdXJuZXlIYXNoXHJcbiAgICAgIF0gfHxcclxuICAgICAgIXRoaXMubXVsdGkgfHxcclxuICAgICAgdGhpcy5tdWx0aS5sZW5ndGggPT09IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBtdWx0aUluYm91bmRzID0gKHRoaXMubXVsdGkgfHwgW10pLnJlZHVjZShcclxuICAgICAgKGFjYzogRmxpZ2h0SXRpbmVyYXJ5W10sIGl0ZW06IEZsaWdodE11bHRpKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JkZXIgPT09IDEgJiYgaXRlbS5yZXN1bHRzICYmIGl0ZW0ucmVzdWx0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KGl0ZW0ucmVzdWx0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sXHJcbiAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgaWYgKG11bHRpSW5ib3VuZHMubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLnJhd1Jlc3VsdHMpIHtcclxuICAgICAgICB0aGlzLnJhd1Jlc3VsdHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUgKyAnX3JhdydcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnJhd1Jlc3VsdHMpO1xyXG4gICAgICB0aGlzLmFwcGx5RmxpZ2h0UnVsZXNcclxuICAgICAgICAuZmV0Y2hPbmUoe1xyXG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxyXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IG11bHRpSW5ib3VuZHMsXHJcbiAgICAgICAgICBzZWFyY2hJZDogdGhpcy5yYXdSZXN1bHRzLnNlYXJjaElkXHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJ1bGVzOiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJ1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gdGhpcy5oZWxwZXJzLm1lcmdlT2JqZWN0cyhcclxuICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSxcclxuICAgICAgICAgICAgICBydWxlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBib29rU2luZ2xlRmxpZ2h0KFxyXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcclxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xyXG4gICkge1xyXG4gICAgdGhpcy5kb0Jvb2tpbmcoXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgc2VsZWN0ZWRGbGlnaHQsXHJcbiAgICAgIHtcclxuICAgICAgICBvdXRib3VuZEZsaWdodHM6IHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cy5tYXAoXHJcbiAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdvdXRib3VuZCcsIDAsIHNlZ21lbnRJbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKSxcclxuICAgICAgICBpbmJvdW5kRmxpZ2h0czogW10sXHJcbiAgICAgICAgam91cm5leVR5cGU6ICdzaW5nbGUnXHJcbiAgICAgIH0sXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRvQm9va2luZyhcclxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXHJcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXHJcbiAgICBzY2hlbWFEZXRhaWxzOiBhbnksXHJcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcclxuICAgIGluYm91bmREYXRlPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XHJcbiAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBzZWxlY3RlZEZsaWdodDtcclxuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xyXG4gICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICBiYXNrZXQ6IGludEJhc2tldC5pZCxcclxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXHJcbiAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgIGNvMlBlclBhc3NlbmdlcixcclxuICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICBwcmljZTogdG90YWwucHJpY2UsXHJcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxyXG4gICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICBvdXRib3VuZERhdGUsXHJcbiAgICAgIGxvd2VzdFByaWNlOiAodGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuYW1vdW50ICE9IE1hdGguZmxvb3IodG90YWwucHJpY2UpIHx8IHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSAhPSB0b3RhbC5jdXJyZW5jeSkgPyBcclxuICAgICAgICB0aGlzLmFic29sdXRlQ2hlYXBlc3RQcmljZS5hbW91bnQgOiBudWxsLFxyXG4gICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OiAodGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuYW1vdW50ICE9IE1hdGguZmxvb3IodG90YWwucHJpY2UpIHx8IHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSAhPSB0b3RhbC5jdXJyZW5jeSkgP1xyXG4gICAgICAgIDxDdXJyZW5jeUNvZGU+dGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlIDogbnVsbFxyXG4gICAgfTtcclxuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgIGJvb2tpbmcsXHJcbiAgICAgIGludEJhc2tldCxcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnJlcXVpcmVzUmVhc29uXHJcbiAgICApO1xyXG4gICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgIH1cclxuICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgYWJzb2x1dGVDaGVhcGVzdFByaWNlKCk6IElDaGVhcGVzdFByaWNle1xyXG4gICAgaWYgKHRoaXMuY2hlYXBlc3RQcmljZSkgcmV0dXJuIHRoaXMuY2hlYXBlc3RQcmljZVxyXG4gICAgbGV0IHByaWNlOiBJQ2hlYXBlc3RQcmljZSA9IHsgYW1vdW50OiBudWxsLCBjdXJyZW5jeUNvZGU6IG51bGx9XHJcbiAgICBpZiAodGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmFtb3VudCArIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuYW1vdW50IDwgXHJcbiAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5yZXR1cm5zLmFtb3VudCAmJiB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuY3VycmVuY3lDb2RlID09IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuY3VycmVuY3lDb2RlKXtcclxuICAgICAgcHJpY2UuYW1vdW50ID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmFtb3VudCArIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuYW1vdW50XHJcbiAgICAgIHByaWNlLmN1cnJlbmN5Q29kZSA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5jdXJyZW5jeUNvZGVcclxuICAgIH1cclxuICAgIGVsc2UgcHJpY2UgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QucmV0dXJuc1xyXG4gICAgcmV0dXJuIHByaWNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1ha2VTY2hlbWFGbGlnaHRzKFxyXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXHJcbiAgICBmbGlnaHRHcm91cDogJ291dGJvdW5kJyB8ICdpbmJvdW5kJyxcclxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIHNlZ21lbnRJbmRleDogbnVtYmVyXHJcbiAgKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxyXG4gICAgICBqb3VybmV5SW5mbzoge1xyXG4gICAgICAgIGZsaWdodEdyb3VwLFxyXG4gICAgICAgIGdyb3VwSW5kZXgsXHJcbiAgICAgICAgc2VnbWVudEluZGV4XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGFzeW5jIGFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoXHJcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGlmIChmbGlnaHRRdW90ZS51bmF2YWlsYWJsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsIH0gPSBmbGlnaHRRdW90ZTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmREYXRlOiBhbnkgPSBtb21lbnQoXHJcbiAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcclxuICAgICAgICA/IG1vbWVudChmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZSk7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XHJcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXHJcbiAgICAgICAgICAuLi5mbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKFxyXG4gICAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5mbGlnaHQgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtcclxuICAgICAgICAgIC4uLmZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLm1hcChcclxuICAgICAgICAgICAgKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZmxpZ2h0IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBdLFxyXG4gICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgIGpvdXJuZXlUeXBlOiAnc2luZ2xlJ1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcclxuICAgICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxyXG4gICAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxyXG4gICAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxyXG4gICAgICAgIGNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxyXG4gICAgICAgIHByaWNlOiB0b3RhbC5wcmljZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcclxuICAgICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICBzY2hlbWFEZXRhaWxzLmpvdXJuZXlUeXBlID0gJ3JvdW5kdHJpcCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYm9va2luZyxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7IC8vIFRPRE8gc2hvdWxkIHRoaXMgdGhyb3cgYW4gZXJyb3I/XHJcbiAgfVxyXG5cclxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jaG9vc2VuRGlzcGxheVR5cGUubmV4dChkaXNwbGF5VHlwZSk7XHJcbiAgfVxyXG5cclxuICBfYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcclxuICB9XHJcblxyXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMoXHJcbiAgICBydWxlczogRmFyZUNvbmRpdGlvbnMsXHJcbiAgICBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXHJcbiAgICBvcHRpb25zOiBhbnkgPSBudWxsLFxyXG4gICAgZmxpZ2h0RGV0YWlsOiBGbGlnaHRJdGluZXJhcnkgPSBudWxsXHJcbiAgKTogdm9pZCB7XHJcbiAgICAvLyBmaXJzdCBjaGVjayBpZiB0aGVyZSBhcmUgcnVsZXNcclxuICAgIGNvbnN0IGRvQ2FsbCA9ICFPYmplY3QudmFsdWVzKHJ1bGVzKS5maW5kKFxyXG4gICAgICAocnVsZTogRmFyZUNvbmRpdGlvbkVudHJ5W10pOiBudW1iZXIgPT4gcnVsZS5sZW5ndGhcclxuICAgICk7XHJcbiAgICBpZiAoZG9DYWxsKSB7XHJcbiAgICAgIGNvbnN0IHJ1bGVzRnJvbUNhbGwgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0RmFyZVJ1bGVzKFxyXG4gICAgICAgIGZsaWdodHNbMF0gYXMgSW5wdXRGbGlnaHRKb3VybmV5XHJcbiAgICAgICk7XHJcbiAgICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBvcHRpb25zLCB7XHJcbiAgICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXHJcbiAgICAgICAgICAgIGZyb206IGZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICAgICAgdG86IGZsaWdodHNbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQsXHJcbiAgICAgICAgICAgIGZsaWdodDogZmxpZ2h0RGV0YWlsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRmxpZ2h0RmFyZUNvbXBvbmVudCwgb3B0aW9ucywge1xyXG4gICAgICAgIHJ1bGVzLFxyXG4gICAgICAgIGZyb206IGZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcclxuICAgICAgICB0bzogZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcclxuICAgICAgICBmbGlnaHQ6IGZsaWdodERldGFpbFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxyXG4gIGdldFRlcm1zQW5kQ29uZChmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUGVuYWx0aWVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdFbGlnaWJpbGl0eScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgICxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEYXkvdGltZScsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU2Vhc29uYWxpdHknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZsaWdodMKgQXBwbGljYXRpb24nLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FkdmFuY2XCoFJlc2VydmF0aW9ucy90aWNrZXRpbmcnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01heGltdW3CoFN0YXknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ01pbmltdW3CoFN0YXknLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0b3BvdmVycycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVHJhbnNmZXJzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDb21iaW5hdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0JsYWNrb3V0wqBEYXRlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3VyY2hhcmdlcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQWNjb21wYW5pZWTCoFRyYXZlbCcsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVHJhdmVswqBSZXN0cmljdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1NhbGVzwqBSZXN0cmljdGlvbnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0hpcC9taWxlYWdlwqBFeGNlcHRpb25zJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXTCoEVuZG9yc2VtZW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hpbGRyZW7CoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG91csKgQ29uZHVjdG9ywqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FnZW50wqBEaXNjb3VudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FsbMKgT3RoZXLCoERpc2NvdW50cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnTWlzY2VsbGFuZW91c8KgUHJvdmlzaW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRmFyZcKgQnnCoFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0dyb3VwcycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG91cnMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1Zpc2l0wqBBbm90aGVywqBDb3VudHJ5JyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdEZXBvc2l0cycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBDaGFuZ2VzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoFJlZnVuZHMnLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ05lZ290aWF0ZWTCoEZhcmVzJyxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdSdWxlwqBBcHBsaWNhdGlvbsKgQW5kwqBPdGhlcsKgQ29uZGl0aW9ucycsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2Lm11bHRpRGVzdGluYXRpb25cclxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxyXG4gICAgICA6IGZhdi5yZXR1cm5UcmlwXHJcbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cclxuICAgICAgOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTtcclxuICAgIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcclxuICAgICAgY29uc3QgbXVsdGkgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBmYXYubXVsdGlEZXN0aW5hdGlvbi5tYXAoXHJcbiAgICAgICAgICBhc3luYyAoYTogeyBkYXRlOiBzdHJpbmc7IGRlc3Q6IHN0cmluZzsgb3JpZzogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGRlc3RpbmF0aW9uOiB7IGRhdGU6IG1vbWVudC5Nb21lbnQ7IGRlc3Q6IGFueTsgb3JpZzogYW55IH0gPSB7XHJcbiAgICAgICAgICAgICAgZGF0ZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIGRlc3Q6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICBvcmlnOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZGVzdGluYXRpb24ub3JpZyA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5vcmlnKVxyXG4gICAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAgIC50aGVuKChvcmlnUmVzdWx0cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvcmlnUmVzdWx0cyBhcyBhbnlbXSkuZmluZCgoYikgPT4gYi5nYXRld2F5ID09IGEub3JpZyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmRlc3QgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEuZGVzdClcclxuICAgICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgICAudGhlbigoZGVzdFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoKGIpID0+IGIuZ2F0ZXdheSA9PSBhLmRlc3QpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdGluYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm11bHRpRGVzdGluYXRpb24gPSBtdWx0aSBhcyBhbnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGZhdi5vcmlnaW5BaXJwb3J0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChcclxuICAgICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYub3JpZ2luQWlycG9ydFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldEFpcnBvcnRzTGlzdChmYXYuZGVzdGluYXRpb25BaXJwb3J0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChcclxuICAgICAgICAgICAgKGEpID0+IGEuZ2F0ZXdheSA9PSBmYXYuZGVzdGluYXRpb25BaXJwb3J0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gZmF2Lm91dGJvdW5kQ2FiaW5DbGFzc1swXTtcclxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9XHJcbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSAhPSBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDogZmF2LnJldHVybkNhYmluQ2xhc3NbMF07XHJcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IGZhdi5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0FEVUxUJykubGVuZ3RoO1xyXG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5wYXNzZW5nZXJzLmZpbHRlcigoYTogYW55KSA9PiBhLnR5cGUgPT0gJ0NISUxEJykubGVuZ3RoO1xyXG4gICAgLy8gdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IGZhdi5wcmVmZXJyZWRDYXJyaWVycy5tYXAoKGE6IGFueSkgPT4ge1xyXG5cclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXNcclxuICApOiBJRmxpZ2h0U2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogSUZsaWdodFNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIHN3aXRjaCAodGhpcy5jaG9zZW5TZWFyY2hUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHk6XHJcbiAgICAgICAgc2VhcmNoUXVlcnkubXVsdGlEZXN0aW5hdGlvbkRldGFpbCA9IHRoaXMubXVsdGlEZXN0aW5hdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybjpcclxuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTpcclxuICAgICAgICBzZWFyY2hRdWVyeS5kZXBhcnRMb2NhdGlvbkRldGFpbCA9IHRoaXMuZGVwYXJ0TG9jYXRpb247XHJcbiAgICAgICAgc2VhcmNoUXVlcnkuYXJyaXZlTG9jYXRpb25EZXRhaWwgPSB0aGlzLmFycml2ZUxvY2F0aW9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcbn1cclxuIl19