@sabstravtech/obtservices 0.0.26051001 → 0.2.2206161600

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 (113) hide show
  1. package/angular/fetchers.d.ts +2 -0
  2. package/angular/lib/vendor/fetchers/get-office.fetcher.d.ts +7 -0
  3. package/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -4
  5. package/angular/lib/vendor/services/logon.service.d.ts +2 -2
  6. package/angular/lib/vendor/services/user.service.d.ts +5 -3
  7. package/angular/lib/vendor/types/graphql.angular.types.d.ts +389 -508
  8. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  9. package/base/fetchers.d.ts +2 -0
  10. package/base/lib/vendor/classes/base-enterprise.d.ts +3 -1
  11. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +5 -1
  12. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +8 -1
  13. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +11 -4
  14. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +2 -1
  15. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +11 -0
  16. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +4 -0
  17. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +9 -4
  18. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +2 -1
  19. package/base/lib/vendor/classes/management-info-and-valid.d.ts +2 -2
  20. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +2 -1
  21. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +1 -1
  22. package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
  23. package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
  24. package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -0
  25. package/base/lib/vendor/fetchers/get-office.fetcher.d.ts +20 -0
  26. package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
  27. package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
  28. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
  29. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +2 -0
  30. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +3 -2
  31. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +6 -0
  32. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +3 -0
  33. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +4 -4
  34. package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
  35. package/base/lib/vendor/interfaces/Isearch.service.d.ts +1 -0
  36. package/base/lib/vendor/interfaces/Iuser.service.d.ts +10 -3
  37. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  38. package/base/lib/vendor/interfaces/summary-interface.d.ts +4 -0
  39. package/base/lib/vendor/models/traveller.object.d.ts +11 -1
  40. package/base/lib/vendor/services/enterprise-basket.service.d.ts +9 -7
  41. package/base/lib/vendor/services/logon.service.d.ts +3 -3
  42. package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
  43. package/base/lib/vendor/services/search.service.d.ts +3 -2
  44. package/base/lib/vendor/services/user.service.d.ts +18 -3
  45. package/base/lib/vendor/services/webtoken.service.d.ts +6 -4
  46. package/base/lib/vendor/types/graphql.types.d.ts +379 -508
  47. package/base/lib/vendor/types/types.d.ts +35 -7
  48. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  49. package/bundles/sabstravtech-obtservices-angular.umd.js +300 -201
  50. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  51. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  52. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  53. package/bundles/sabstravtech-obtservices-base.umd.js +2143 -597
  54. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  55. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  56. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  57. package/esm2015/angular/fetchers.js +3 -1
  58. package/esm2015/angular/lib/vendor/fetchers/get-office.fetcher.js +25 -0
  59. package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +25 -0
  60. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +25 -25
  61. package/esm2015/angular/lib/vendor/services/logon.service.js +7 -7
  62. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
  63. package/esm2015/angular/lib/vendor/services/user.service.js +13 -7
  64. package/esm2015/angular/lib/vendor/services/webtoken.service.js +2 -2
  65. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +808 -1231
  66. package/esm2015/base/fetchers.js +3 -1
  67. package/esm2015/base/lib/vendor/classes/base-enterprise.js +6 -3
  68. package/esm2015/base/lib/vendor/classes/bookable-basket.js +1 -3
  69. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +155 -9
  70. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +129 -8
  71. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +351 -20
  72. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +8 -5
  73. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +94 -14
  74. package/esm2015/base/lib/vendor/classes/helpers.js +15 -2
  75. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +86 -21
  76. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +123 -18
  77. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +63 -8
  78. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +56 -33
  79. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +109 -6
  80. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +81 -7
  81. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +17 -1
  82. package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
  83. package/esm2015/base/lib/vendor/data/countries.json +484 -242
  84. package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
  85. package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
  86. package/esm2015/base/lib/vendor/fetchers/get-office.fetcher.js +11 -0
  87. package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
  88. package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
  89. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  90. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  91. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  92. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  93. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  94. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  95. package/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +1 -1
  96. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  97. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  98. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  99. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  100. package/esm2015/base/lib/vendor/models/traveller.object.js +21 -3
  101. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +42 -19
  102. package/esm2015/base/lib/vendor/services/logon.service.js +8 -5
  103. package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
  104. package/esm2015/base/lib/vendor/services/search.service.js +32 -24
  105. package/esm2015/base/lib/vendor/services/user.service.js +47 -3
  106. package/esm2015/base/lib/vendor/services/webtoken.service.js +12 -6
  107. package/esm2015/base/lib/vendor/types/graphql.types.js +15 -1
  108. package/esm2015/base/lib/vendor/types/types.js +4 -3
  109. package/fesm2015/sabstravtech-obtservices-angular.js +948 -1334
  110. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  111. package/fesm2015/sabstravtech-obtservices-base.js +1984 -472
  112. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  113. package/package.json +1 -1
@@ -21,8 +21,8 @@ export var ClassType;
21
21
  ClassType["First_Class"] = "1st Class";
22
22
  })(ClassType || (ClassType = {}));
23
23
  export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
24
- constructor(Irlfetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, searchService, getIrlSupplierStationFetcher) {
25
- super(storageService, helpers, searchService);
24
+ constructor(Irlfetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, searchService, getIrlSupplierStationFetcher, userService) {
25
+ super(storageService, helpers, searchService, userService);
26
26
  this.Irlfetcher = Irlfetcher;
27
27
  this.irlDiscountCardsFetcher = irlDiscountCardsFetcher;
28
28
  this.basketService = basketService;
@@ -90,6 +90,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
90
90
  this._ageRange = null;
91
91
  this._priceDir = true;
92
92
  this._dateDir = true;
93
+ this._discountCard = [];
93
94
  this._irlDiscountCardsArray = [];
94
95
  // !date and time is handled differently for LU
95
96
  this._outbound_date = null;
@@ -157,23 +158,26 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
157
158
  this._isValid();
158
159
  }
159
160
  get travellingTo() {
160
- return this.tempParams.arrivalLocationId;
161
+ return this.tempParams.travellingTo;
161
162
  }
162
163
  set travellingTo(tt) {
163
164
  var _a;
164
- this.tempParams.arrivalLocationId = tt;
165
+ this.tempParams.travellingTo = tt;
165
166
  this._travellingTo = '';
166
167
  if ((_a = tt === null || tt === void 0 ? void 0 : tt.railstation) === null || _a === void 0 ? void 0 : _a.id) {
167
168
  this._travellingTo = tt.railstation.id;
168
169
  }
170
+ else if (tt === null || tt === void 0 ? void 0 : tt.id) {
171
+ this._travellingTo = tt.id;
172
+ }
169
173
  this._isValid();
170
174
  }
171
175
  get travellingFrom() {
172
- return this.tempParams.departureLocationId;
176
+ return this.tempParams.travellingFrom;
173
177
  }
174
178
  set travellingFrom(tt) {
175
179
  var _a;
176
- this.tempParams.departureLocationId = tt;
180
+ this.tempParams.travellingFrom = tt;
177
181
  this._travellingFrom = '';
178
182
  if ((_a = tt === null || tt === void 0 ? void 0 : tt.railstation) === null || _a === void 0 ? void 0 : _a.id) {
179
183
  this._travellingFrom = tt.railstation.id;
@@ -182,6 +186,9 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
182
186
  this.irlDiscountCardsArray = data;
183
187
  });
184
188
  }
189
+ else if (tt === null || tt === void 0 ? void 0 : tt.id) {
190
+ this._travellingFrom = tt.id;
191
+ }
185
192
  this._isValid();
186
193
  }
187
194
  get supplier() {
@@ -220,12 +227,14 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
220
227
  return this._departureLocationId;
221
228
  }
222
229
  set departureLocationId(data) {
230
+ this.travellingFrom = data;
223
231
  this._departureLocationId = data;
224
232
  }
225
233
  get arrivalLocationId() {
226
234
  return this._arrivalLocationId;
227
235
  }
228
236
  set arrivalLocationId(data) {
237
+ this.travellingTo = data;
229
238
  this._arrivalLocationId = data;
230
239
  }
231
240
  get adults() {
@@ -286,12 +295,17 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
286
295
  this._isValid();
287
296
  }
288
297
  get discountCard() {
289
- return this.tempParams.irlDiscountCards;
298
+ return this._discountCard;
290
299
  }
291
300
  set discountCard(data) {
292
- this.tempParams.irlDiscountCards = data;
301
+ this._discountCard = data;
293
302
  this._isValid();
294
303
  }
304
+ get discountCardsList() {
305
+ var _a;
306
+ return ((_a = this._discountCard) === null || _a === void 0 ? void 0 : _a.length) ? this._discountCard.map(card => card.id).join(',') : null;
307
+ }
308
+ ;
295
309
  get irlDiscountCardsArray() {
296
310
  return this._irlDiscountCardsArray;
297
311
  }
@@ -430,8 +444,21 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
430
444
  }
431
445
  resetQuery() {
432
446
  this.updateTempParams(this.searchService.makeIrlQuery());
447
+ this.resetIrlForm();
433
448
  this._isValid();
434
449
  }
450
+ resetIrlForm() {
451
+ const time = this.helpers.momentRoundMinutes(moment(), 30);
452
+ this.additionalInstructions = '';
453
+ this.trainNumber = '';
454
+ this.travellingTo = '';
455
+ this.travellingFrom = '';
456
+ this.discountCard = [];
457
+ this.class = IrlClass.All;
458
+ this.outboundDepartureDateTime = time;
459
+ this.journeyType = IrlJourneyType.SingleJourney;
460
+ this.offline = false;
461
+ }
435
462
  _isValid() {
436
463
  var _a;
437
464
  this.storageService.setSessionItem(IRLEnterpriseSearch.STORAGE_SESSION_PARAMS, {
@@ -552,14 +579,14 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
552
579
  const query = {
553
580
  supplier: this.supplier,
554
581
  countryCode: 'GB',
555
- irlDiscountCards: this.discountCard ? this.discountCard.id : null,
582
+ irlDiscountCards: this.discountCardsList,
556
583
  class: this.class,
557
- outboundDepartureDateTime: this.tempParams.outboundDepartureDateTime,
584
+ outboundDepartureDateTime: this.helpers.formatGraphQLDateTime(this.tempParams.outboundDepartureDateTime),
558
585
  departureLocationId: this._travellingFrom,
559
586
  arrivalLocationId: this._travellingTo,
560
587
  adults: this.tempParams.adults,
561
588
  children: this.tempParams.children,
562
- returnDepartureDateTime: this.tempParams.returnDepartureDateTime,
589
+ returnDepartureDateTime: this.helpers.formatGraphQLDateTime(this.tempParams.returnDepartureDateTime),
563
590
  journeyType: this.journeyType
564
591
  };
565
592
  if (this.tempParams.children === 0) {
@@ -622,7 +649,39 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
622
649
  });
623
650
  }
624
651
  }
625
- updateFromPreviousSearches(previousItems) { }
652
+ updateFromPreviousSearches(previousItems) {
653
+ console.log(previousItems);
654
+ if (previousItems.FLIGHT) {
655
+ try {
656
+ this.outBoundDateTime = moment(previousItems.FLIGHT.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
657
+ if (this.outBoundDateTime.minutes() % 30)
658
+ this.outBoundDateTime = this.outBoundDateTime.subtract(this.outBoundDateTime.minutes() % 30, "minutes");
659
+ if (previousItems.FLIGHT.inboundDate) {
660
+ this.inBoundDateTime = moment(previousItems.FLIGHT.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
661
+ if (this.inBoundDateTime.minutes() % 30)
662
+ this.inBoundDateTime = this.inBoundDateTime.subtract(this.inBoundDateTime.minutes() % 30, "minutes");
663
+ }
664
+ }
665
+ catch (_a) {
666
+ console.error('Error trying to prepopulate international rail from flight item');
667
+ }
668
+ }
669
+ else if (previousItems.RAIL) {
670
+ try {
671
+ this.outBoundDateTime = moment(previousItems.RAIL.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
672
+ if (this.outBoundDateTime.minutes() % 30)
673
+ this.outBoundDateTime = this.outBoundDateTime.subtract(this.outBoundDateTime.minutes() % 30, "minutes");
674
+ if (previousItems.RAIL.inboundDate) {
675
+ this.inBoundDateTime = moment(previousItems.RAIL.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
676
+ if (this.inBoundDateTime.minutes() % 30)
677
+ this.inBoundDateTime = this.inBoundDateTime.subtract(this.inBoundDateTime.minutes() % 30, "minutes");
678
+ }
679
+ }
680
+ catch (_b) {
681
+ console.error('Error trying to prepopulate international rail from rail item');
682
+ }
683
+ }
684
+ }
626
685
  updateCanCombine(tkt) {
627
686
  (tkt.identifiers.allowedWith || []).forEach((allowed) => {
628
687
  if (!this._canCombine[tkt.type][allowed.journeyIdentifier]) {
@@ -669,6 +728,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
669
728
  const legs = this.getLegsFromIrlJourneyOption(irlJourneyOption);
670
729
  const termsAndConditions = this.getTermsAndCond(irlJourneyOption);
671
730
  // selectedIrlTicketOption.identifiers.provider;
731
+ const cheapestPrice = this.findCheapestTotal(this.fullResults);
672
732
  const basketItem = {
673
733
  basket: basket.id,
674
734
  service: serviceId,
@@ -697,7 +757,8 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
697
757
  journeyIdentifier: selectedIrlTicketOption.identifiers.journeyIdentifier
698
758
  },
699
759
  supplier: irlJourneyOption.providers[0].providerId,
700
- termsAndCond: termsAndConditions
760
+ termsAndCond: termsAndConditions,
761
+ railcardsDetail: irlQuery.irlDiscountCards ? irlQuery.irlDiscountCards.split(',') : []
701
762
  },
702
763
  adults: irlQuery.adults,
703
764
  price: selectedIrlTicketOption.price,
@@ -705,7 +766,9 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
705
766
  searchQuery: irlQuery,
706
767
  // co2PerItem: irlJourneyOption.co2PerItem,
707
768
  // co2PerPassenger: irlJourneyOption.co2PerPassenger,
708
- outboundDate: irlJourneyOption.departDateTime
769
+ outboundDate: irlJourneyOption.departDateTime,
770
+ lowestPrice: cheapestPrice.amount != selectedIrlTicketOption.price ? cheapestPrice.amount : null,
771
+ lowestPriceCurrency: cheapestPrice.amount != selectedIrlTicketOption.price ? cheapestPrice.currencyCode : null
709
772
  };
710
773
  const whatHappened = yield this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, false // TODO
711
774
  );
@@ -727,9 +790,12 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
727
790
  const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
728
791
  if (basket) {
729
792
  const selectedIrlTicketOption = this.getSelectedIrlTicketOption(outJourneyOption, outbound, 0);
793
+ const selectedIrlTicketOptionInbound = this.getSelectedIrlTicketOption(inJourneyOption, inbound, 0);
730
794
  const outboundLegs = this.getLegsFromIrlJourneyOption(outJourneyOption);
731
795
  const inboundLegs = this.getLegsFromIrlJourneyOption(inJourneyOption);
732
796
  const termsAndConditions = this.getTermsAndCond(outJourneyOption);
797
+ const cheapestPrice = this.findCheapestTotal(this.fullResults);
798
+ const price = Number((Number(selectedIrlTicketOption.price) + Number(inbound.price)).toFixed(2));
733
799
  const basketItem = {
734
800
  basket: basket.id,
735
801
  service: serviceId,
@@ -772,14 +838,23 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
772
838
  ],
773
839
  journeyIdentifier: selectedIrlTicketOption.identifiers.journeyIdentifier
774
840
  },
841
+ return: {
842
+ fareIdentifiers: [
843
+ selectedIrlTicketOptionInbound.identifiers.fareIdentifier
844
+ ],
845
+ journeyIdentifier: selectedIrlTicketOptionInbound.identifiers.journeyIdentifier
846
+ },
775
847
  supplier: outJourneyOption.providers[0].providerId,
776
- termsAndCond: termsAndConditions
848
+ termsAndCond: termsAndConditions,
849
+ railcardsDetail: irlQuery.irlDiscountCards ? irlQuery.irlDiscountCards.split(',') : []
777
850
  },
778
851
  adults: irlQuery.adults,
779
- price: Number((Number(selectedIrlTicketOption.price) + Number(inbound.price)).toFixed(2)),
852
+ price: price,
780
853
  currency: selectedIrlTicketOption.currency,
781
854
  searchQuery: irlQuery,
782
- outboundDate: outJourneyOption.departDateTime
855
+ outboundDate: outJourneyOption.departDateTime,
856
+ lowestPrice: cheapestPrice.amount != price ? cheapestPrice.amount : null,
857
+ lowestPriceCurrency: cheapestPrice.amount != price ? cheapestPrice.currencyCode : null
783
858
  // co2PerItem: outbound.co2PerItem,
784
859
  // co2PerPassenger: outbound.co2PerPassenger
785
860
  };
@@ -805,6 +880,36 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
805
880
  currencyCode: currency
806
881
  };
807
882
  }
883
+ findCheapestTotal(results) {
884
+ const cheapestOutbound = this.findCheapestTicket(results);
885
+ const cheapestArr = [];
886
+ results.map((result) => {
887
+ result.outbound.map((out) => {
888
+ out.providers.map((tkt) => {
889
+ const cheapestTicket = tkt.cheapestTicket.price;
890
+ tkt.ticketOptions.map((tktOption) => {
891
+ var _a, _b;
892
+ const tktPrice = tktOption.price;
893
+ const tktClass = tktOption.class;
894
+ if (tktClass === 'First' &&
895
+ (((_a = this._cheapestFirst) === null || _a === void 0 ? void 0 : _a.price) > tktPrice || !this._cheapestFirst)) {
896
+ this._cheapestFirst = tktOption;
897
+ }
898
+ else if (tktClass === 'Standard' &&
899
+ (((_b = this._cheapestStandard) === null || _b === void 0 ? void 0 : _b.price) > tktPrice ||
900
+ !this._cheapestStandard)) {
901
+ this._cheapestStandard = tktOption;
902
+ }
903
+ if (tktPrice === cheapestTicket) {
904
+ cheapestArr.push(cheapestTicket);
905
+ }
906
+ });
907
+ });
908
+ });
909
+ });
910
+ const cheapestInbound = Math.min(...cheapestArr);
911
+ return { amount: cheapestOutbound + cheapestInbound, currencyCode: results[0].outbound[0].providers[0].ticketOptions[0].currency };
912
+ }
808
913
  findCheapestTicket(results) {
809
914
  this._cheapestFirst = null;
810
915
  this._cheapestStandard = null;
@@ -1126,4 +1231,4 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
1126
1231
  IRLEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_irl';
1127
1232
  IRLEnterpriseSearch.STORAGE_SESSION_RESULTS = 'irl_results';
1128
1233
  IRLEnterpriseSearch.PASSING_POINT = 'Passing';
1129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxHQUFHLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBTUwsNEJBQTRCLEVBQzdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLFFBQVEsRUFNUixXQUFXLEVBQ1gsY0FBYyxFQUlmLE1BQU0sd0JBQXdCLENBQUM7QUFrQmhDLE9BQU8sRUFBYSxJQUFJLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFPMUQsTUFBTSxDQUFOLElBQVksWUFJWDtBQUpELFdBQVksWUFBWTtJQUN0QixtQ0FBbUIsQ0FBQTtJQUNuQixtQ0FBbUIsQ0FBQTtJQUNuQixpQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsWUFBWSxLQUFaLFlBQVksUUFJdkI7QUFXRCxNQUFNLENBQU4sSUFBWSxTQU1YO0FBTkQsV0FBWSxTQUFTO0lBQ25CLDBCQUFhLENBQUE7SUFDYiwwQkFBYSxDQUFBO0lBQ2IscUNBQXFDO0lBQ3JDLHVDQUEwQixDQUFBO0lBQzFCLHNDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFOVyxTQUFTLEtBQVQsU0FBUyxRQU1wQjtBQWFELE1BQU0sT0FBTyxtQkFLWCxTQUFRLG9CQUlQO0lBaWNELFlBQ1UsVUFBa0MsRUFDbEMsdUJBQTJELEVBQ25FLE9BQTJCLEVBQ25CLGFBQStDLEVBQ3ZELGNBQWtDLEVB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QUcsQ0FBQyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVc7Z0JBQ2QsR0FBRyxDQUFDLFdBQVcsS0FBSyxlQUFlO29CQUNqQyxDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWE7b0JBQzlCLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUMvQixDQUFDO0tBQUE7O0FBaDJDZSwwQ0FBc0IsR0FBRyxZQUFZLENBQUM7QUFDdEMsMkNBQXVCLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLGlDQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcclxuaW1wb3J0IHtcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIElybFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnNcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgSXJsQ2xhc3MsXHJcbiAgSXJsSm91cm5leU9wdGlvbixcclxuICBJcmxKb3VybmV5T3B0aW9ucyxcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgSXJsVGlja2V0T3B0aW9uLFxyXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIElybEpvdXJuZXlUeXBlLFxyXG4gIElybFN1cHBsaWVyLFxyXG4gIElybFRyYXZlbENhcmQsXHJcbiAgSXJsU2VnbWVudFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VJcmxEaXNjb3VudENhcmRGZXRjaGVyLFxyXG4gIElybERpc2NvdW50Q2FyZEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLWRpc2NvdW50LWNhcmQtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgSXJsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgYWdlcyB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHsgU29ydE1ldGhvZCB9IGZyb20gJy4vZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJSXJsU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaXJsLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcixcclxuICBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1pcmwtc3VwcGxpZXItc3RhdGlvbi5mZXRjaGVyJztcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0lybCB7XHJcbiAgQ2hlYXBlc3RGaXJzdCA9ICdDJyxcclxuICBFYXJsaWVzdEZpcnN0ID0gJ0UnLFxyXG4gIExhdGVzdEZpcnN0ID0gJ0wnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU29ydFR5cGVJcmwge1xyXG4gIC8qKiBUaXRsZSBkaXNwbGF5ZWQgb24gZHJvcGRvd24gKi9cclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIC8qKiBNZXRob2QgbmFtZSB1c2VkIGJ5IGNvbXBvbmVudCB0byBzb3J0IHJlc3VsdHMgKi9cclxuICBtZXRob2RSZWY6IFNvcnRNZXRob2Q7XHJcbiAgLyoqIEljb24gZGlzcGxheWVkIG9uIGRyb3AgZG93biAqL1xyXG4gIGljb246IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ2xhc3NUeXBlIHtcclxuICBDbGFzc18xID0gJzEnLFxyXG4gIENsYXNzXzIgPSAnMicsXHJcbiAgLy8gISB0aGVzZSAyIHNob3B1bGQgYmUgcmVtb3ZlZCBsYXRlclxyXG4gIFNlY29uZF9DbGFzcyA9ICcybmQgQ2xhc3MnLFxyXG4gIEZpcnN0X0NsYXNzID0gJzFzdCBDbGFzcydcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJcmxGaWx0ZXJzIHtcclxuICBwcmljZU1heDogbnVtYmVyO1xyXG4gIHByaWNlTWluOiBudW1iZXI7XHJcbiAgZGF0ZUFyck1heDogbnVtYmVyO1xyXG4gIGRhdGVBcnJNaW46IG51bWJlcjtcclxuICBkYXRlRGVwTWF4OiBudW1iZXI7XHJcbiAgZGF0ZURlcE1pbjogbnVtYmVyO1xyXG4gIGNsYXNzZXM6IGFueVtdO1xyXG4gIGNoYW5nZXM6IGFueVtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSVJMRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIFEgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxyXG4gICAgR0lERl9RIGV4dGVuZHMgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGUsXHJcbiAgICBHSVNTRl9RIGV4dGVuZHMgR2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlclR5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIElybFRlbXBQYXJhbXMsXHJcbiAgICBJcmxRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgSXJsUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9pcmwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdpcmxfcmVzdWx0cyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFBBU1NJTkdfUE9JTlQgPSAnUGFzc2luZyc7XHJcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogU29ydFR5cGVJcmxbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZFJlZjogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1RpbWUnLFxyXG4gICAgICBtZXRob2RSZWY6IFNvcnRNZXRob2Quc29ydEJ5RGF0ZSxcclxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcidcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdSZXR1cm4nLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5IH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBJcmxDbGFzcy5BbGwgfSxcclxuICAgIHsgZGlzcGxheTogJ1N0YW5kYXJkJywgdmFsdWU6IElybENsYXNzLlN0YW5kYXJkIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGaXJzdCcsIHZhbHVlOiBJcmxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFnZVJhbmdlczoge1xyXG4gICAga2V5OiBhZ2VzO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICB9W10gPSBbXHJcbiAgICB7IGtleTogYWdlcy5DaGlsZCwgdmFsdWU6ICdDaGlsZCAoMC0zKScgfSxcclxuICAgIHsga2V5OiBhZ2VzLkNoaWxkLCB2YWx1ZTogJ0NoaWxkICg0LTUpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuQ2hpbGQsIHZhbHVlOiAnQ2hpbGQgKDYtMTEpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnWW91dGggKDEyLTE0KScgfSxcclxuICAgIHsga2V5OiBhZ2VzLllvdXRoLCB2YWx1ZTogJ1lvdXRoICgxNS0yNSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5BZHVsdCwgdmFsdWU6ICdBZHVsdCAoMjYtNTkpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnU2VuaW9yICg2MCspJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHRyYXZlbENhcmRzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmFtaWx5IHJhaWxjYXJkJywgdmFsdWU6ICdGQU0nIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcclxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsO1xyXG4gIHB1YmxpYyBtaW5PdXRib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHVibGljIG1pbkluYm91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XHJcbiAgcHJpdmF0ZSBfY2FuQ29tYmluZTogYW55O1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdGcm9tOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdHJhdmVsbGluZ1RvOiBzdHJpbmc7XHJcbiAgcHJvdGVjdGVkIF9vcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRKb3VybmV5T3B0aW9uczogSXJsSm91cm5leU9wdGlvbjtcclxuICBwcml2YXRlIF9pc0ZpbHRlcmVkOiBib29sZWFuO1xyXG4gIGdldCBvdXRib3VuZEpvdXJuZXlPcHRpb25zKCk6IElybEpvdXJuZXlPcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kSm91cm5leU9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRKb3VybmV5T3B0aW9ucyhkYXRhOiBJcmxKb3VybmV5T3B0aW9uKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zID0gZGF0YTtcclxuICB9XHJcbiAgX291dGJvdW5kVGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQ7XHJcbiAgZ2V0IG91dGJvdW5kVGlja2V0KCk6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRUaWNrZXQoZGF0YTogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZFRpY2tldCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgbm9PZkFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkFkdWx0cyhhZHVsdHM6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IGFkdWx0cztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQ2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkNoaWxkcmVuKGNoaWxkcmVuOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYXZlbGxpbmdUbygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsTG9jYXRpb25JZDtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nVG8odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2YWxMb2NhdGlvbklkID0gdHQ7XHJcblxyXG4gICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ0Zyb20oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nRnJvbSh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0dXJlTG9jYXRpb25JZCA9IHR0O1xyXG4gICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSAnJztcclxuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICAgIHRoaXMuc3VwcGxpZXIgPSB0dC5yYWlsc3RhdGlvbi5zdXBwbGllcjtcclxuICAgICAgdGhpcy5nZXRJcmxEaXNjb3VudENhcmRzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pcmxEaXNjb3VudENhcmRzQXJyYXkgPSBkYXRhO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdXBwbGllcjogSXJsU3VwcGxpZXIgPSBudWxsO1xyXG4gIGdldCBzdXBwbGllcigpOiBJcmxTdXBwbGllciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3VwcGxpZXI7XHJcbiAgfVxyXG4gIHNldCBzdXBwbGllcihkYXRhOiBJcmxTdXBwbGllcikge1xyXG4gICAgdGhpcy5fc3VwcGxpZXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY291bnRyeUNvZGU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGNvdW50cnlDb2RlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY291bnRyeUNvZGU7XHJcbiAgfVxyXG4gIHNldCBjb3VudHJ5Q29kZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvdW50cnlDb2RlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsYXNzOiBJcmxDbGFzcyA9IElybENsYXNzLkFsbDtcclxuICBnZXQgY2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzO1xyXG4gIH1cclxuICBzZXQgY2xhc3MoZGF0YTogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMuX2NsYXNzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVwYXJ0dXJlTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgZGVwYXJ0dXJlTG9jYXRpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgfVxyXG4gIHNldCBkZXBhcnR1cmVMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZGVwYXJ0dXJlTG9jYXRpb25JZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcnJpdmFsTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgYXJyaXZhbExvY2F0aW9uSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hcnJpdmFsTG9jYXRpb25JZDtcclxuICB9XHJcbiAgc2V0IGFycml2YWxMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYXJyaXZhbExvY2F0aW9uSWQgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG4gIHNldCBhZHVsdHMoZGF0YTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoaWxkcmVuOiBudW1iZXIgPSAwO1xyXG4gIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xyXG4gIH1cclxuICBzZXQgY2hpbGRyZW4oZGF0YTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaGlsZHJlbiA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVhcGVzdFN0YW5kYXJkOiBJcmxUaWNrZXRPcHRpb24gPSBudWxsO1xyXG4gIGdldCBjaGVhcGVzdFN0YW5kYXJkKCk6IElybFRpY2tldE9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlYXBlc3RTdGFuZGFyZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2hlYXBlc3RGaXJzdDogSXJsVGlja2V0T3B0aW9uID0gbnVsbDtcclxuICBnZXQgY2hlYXBlc3RGaXJzdCgpOiBJcmxUaWNrZXRPcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoZWFwZXN0Rmlyc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTogbW9tZW50Lk1vbWVudCA9IG51bGw7XHJcbiAgZ2V0IHJldHVybkRlcGFydHVyZURhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybkRlcGFydHVyZURhdGVUaW1lO1xyXG4gIH1cclxuICBzZXQgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX3JldHVybl90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzE2MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FnZVJhbmdlOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBhZ2VSYW5nZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FnZVJhbmdlO1xyXG4gIH1cclxuICBzZXQgYWdlUmFuZ2UoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hZ2VSYW5nZSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmljZURpcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZ2V0IHByaWNlRGlyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByaWNlRGlyO1xyXG4gIH1cclxuICBzZXQgcHJpY2VEaXIoZGF0YTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcHJpY2VEaXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0ZURpcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZ2V0IGRhdGVEaXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZURpcjtcclxuICB9XHJcbiAgc2V0IGRhdGVEaXIoZGF0YTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGF0ZURpciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoQ2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hDbGFzcyhjbGFzc1I6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2xhc3MgPSBjbGFzc1I7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzY291bnRDYXJkKCk6IElybFRyYXZlbENhcmQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pcmxEaXNjb3VudENhcmRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRpc2NvdW50Q2FyZChkYXRhOiBJcmxUcmF2ZWxDYXJkKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaXJsRGlzY291bnRDYXJkcyA9IGRhdGE7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pcmxEaXNjb3VudENhcmRzQXJyYXk6IElybFRyYXZlbENhcmRbXSA9IFtdO1xyXG4gIGdldCBpcmxEaXNjb3VudENhcmRzQXJyYXkoKTogSXJsVHJhdmVsQ2FyZFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9pcmxEaXNjb3VudENhcmRzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBzZXQgaXJsRGlzY291bnRDYXJkc0FycmF5KGFycmF5OiBJcmxUcmF2ZWxDYXJkW10pIHtcclxuICAgIHRoaXMuX2lybERpc2NvdW50Q2FyZHNBcnJheSA9IGFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dEJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Qm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpO1xyXG5cclxuICAgIHRoaXMubWluSW5ib3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IG5ld0RhdGVUaW1lLnllYXIoKSxcclxuICAgICAgbW9udGg6IG5ld0RhdGVUaW1lLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IG5ld0RhdGVUaW1lLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZS5pc0FmdGVyKHRoaXMuaW5Cb3VuZERhdGVUaW1lKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5vdXRCb3VuZERhdGVUaW1lLmNsb25lKCkuYWRkKDEsICdkYXknKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5Cb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBpbkJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX3JldHVybl90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzE2MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcclxuICBwcml2YXRlIF9vdXRib3VuZF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IG91dGJvdW5kX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vdXRib3VuZF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZF90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IHJldHVybl9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCByZXR1cm5fdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3JldHVybl90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKTogVmFsdWVEaXNwbGF5W10ge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDQ4KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vZmZsaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2ZmbGluZTtcclxuICB9XHJcblxyXG4gIHNldCBvZmZsaW5lKGRhdGE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX29mZmxpbmUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXJsQ2xhc3M6IElybENsYXNzID0gSXJsQ2xhc3MuQWxsO1xyXG4gIGdldCBpcmxDbGFzcygpOiBJcmxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy5faXJsQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgaXJsQ2xhc3MoZGF0YTogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMuX2lybENsYXNzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2pvdXJuZXl0eXBlOiBJcmxKb3VybmV5VHlwZSA9IElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk7XHJcbiAgZ2V0IGpvdXJuZXlUeXBlKCk6IElybEpvdXJuZXlUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLl9qb3VybmV5dHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBqb3VybmV5VHlwZShkYXRhOiBJcmxKb3VybmV5VHlwZSkge1xyXG4gICAgdGhpcy5fam91cm5leXR5cGUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBTb3J0VHlwZUlybFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90cmFpbk51bWJlcjogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgdHJhaW5OdW1iZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFpbk51bWJlcjtcclxuICB9XHJcblxyXG4gIHNldCB0cmFpbk51bWJlcihkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3RyYWluTnVtYmVyID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZGl0aW9uYWxJbnN0cnVjdGlvbnM6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGFkZGl0aW9uYWxJbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zO1xyXG4gIH1cclxuICBzZXQgYWRkaXRpb25hbEluc3RydWN0aW9ucyhkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2FkZGl0aW9uYWxJbnN0cnVjdGlvbnMgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIElybGZldGNoZXI6IEJhc2VJcmxRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBwcml2YXRlIGlybERpc2NvdW50Q2FyZHNGZXRjaGVyOiBCYXNlSXJsRGlzY291bnRDYXJkRmV0Y2hlcjxHSURGX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcjogQmFzZUdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI8R0lTU0ZfUT5cclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHF1ZXJ5OiB7fTtcclxuICAgICAgdGVtcFBhcmFtczogSXJsVGVtcFBhcmFtcztcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBJcmxUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICBxdWVyeToge30sXHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIElybFRlbXBQYXJhbXMsXHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDoge30gYXMgSXJsVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJhdmVsbGVyc1swXSAmJiAhdGhpcy50cmF2ZWxsZXJzWzBdLmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy50cmF2ZWxsZXJzWzBdLmFnZVR5cGUgPSBhZ2VzLkFkdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICBjb25zdCByZXN1bHRzID1cclxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8SXJsUXVvdGVSZXN1bHRBcnJheT4oXHJcbiAgICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWVcclxuICAgICAgKSB8fCBbXTtcclxuICAgIC8vIGlmIChyZXN1bHRzID09IG51bGwgJiYgdGhpcy5pc1ZhbGlkKSB7XHJcbiAgICAvLyAgIHNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gcmVzdWx0cztcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xyXG4gIH1cclxuICBpcmxEaXNjb3VudENhcmRzOiBJcmxUcmF2ZWxDYXJkO1xyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMocmVzdWx0czogSXJsUXVvdGVSZXN1bHRBcnJheSkge1xyXG4gICAgcmVzdWx0c1swXT8ub3V0Ym91bmQuZm9yRWFjaCgoaXRlbTogSXJsSm91cm5leU9wdGlvbikgPT4ge1xyXG4gICAgICBpdGVtLnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLm1hcChcclxuICAgICAgICAodGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGlja2V0LlNob3dEZXRhaWwgPSBmYWxzZTtcclxuICAgICAgICAgIHRpY2tldC51aWQgPSBgJHt0aWNrZXQuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJ9XyR7aW5kZXggKyAxfWA7XHJcbiAgICAgICAgICByZXR1cm4gdGlja2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmZyZWV6ZShyZXN1bHRzKTtcclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBjb25zdCBub3cgPSBtb21lbnQoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIEZyb20gTG9jYXRpb24uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgVG8gTG9jYXRpb24uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3V0Qm91bmREYXRlVGltZT8uaXNCZWZvcmUobm93KSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICdEZXBhcnR1cmUgRGF0ZS9UaW1lIGNhbm5vdCBiZSBpbiB0aGUgcGFzdC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPT09IElybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXlcclxuICAgIC8vICkge1xyXG4gICAgLy8gICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcclxuXHJcbiAgICAvLyAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5vdXRCb3VuZERhdGVUaW1lKSkge1xyXG4gICAgLy8gICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAvLyAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnZpYSkge1xyXG4gICAgLy8gICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xyXG4gICAgLy8gICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbi4nKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuYWR1bHRzICsgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuIDwgMSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDEgdHJhdmVsbGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcclxuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHsgLi4udGhpcy50ZW1wUGFyYW1zIH0pO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICB0aGlzLklybGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KS5waXBlKG1hcCgocmVzdWx0KSA9PiByZXN1bHQpKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogSUlybFNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbCxcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlVGltZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyk6IElJcmxTZWFyY2hBcmdzIHtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJSXJsU2VhcmNoQXJncyA9IHF1ZXJ5O1xyXG4gICAgaWYgKHRoaXMudHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ0Zyb20gPSB0aGlzLnRyYXZlbGxpbmdGcm9tO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdUbykge1xyXG4gICAgICBzZWFyY2hRdWVyeS50cmF2ZWxsaW5nVG8gPSB0aGlzLnRyYXZlbGxpbmdUbztcclxuICAgIH1cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5qb3VybmV5VHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmpvdXJuZXlUeXBlO1xyXG4gICAgdGhpcy5pcmxDbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNsYXNzO1xyXG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nVG87XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ0Zyb207XHJcblxyXG4gICAgLy8gZ2V0IG91dEJvdW5kRGF0ZVRpbWUsIGluQm91bmREYXRlVGltZVxyXG4gICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gbW9tZW50KFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lXHJcbiAgICApO1xyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmpvdXJuZXlUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gbW9tZW50KFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fb3V0Ym91bmRfZGF0ZSAmJiB0aGlzLl9vdXRib3VuZF90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSxcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF90aW1lXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVSZXR1cm5EYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZXR1cm5fZGF0ZSAmJiB0aGlzLl9yZXR1cm5fdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX3JldHVybl9kYXRlLFxyXG4gICAgICAgIHRoaXMuX3JldHVybl90aW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUXVlcnkoKTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMge1xyXG4gICAgLy8gdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgIGlmICghdGhpcy50cmF2ZWxsZXJzKSB7XHJcbiAgICAgIHRoaXMubm9PZkFkdWx0cyA9IHRoaXMuYWR1bHRzO1xyXG4gICAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm5vT2ZBZHVsdHMgPSB0aGlzLnRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT5cclxuICAgICAgICAgIHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLkFkdWx0IHx8XHJcbiAgICAgICAgICB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5Zb3V0aCB8fFxyXG4gICAgICAgICAgdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuU2VuaW9yXHJcbiAgICAgICkubGVuZ3RoO1xyXG4gICAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IHRoaXMudHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICAgKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5DaGlsZFxyXG4gICAgICApLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuc3VwcGxpZXIgJiYgdGhpcy50cmF2ZWxsaW5nRnJvbS5uYW1lKSB7XHJcbiAgICAgIHRoaXMuc3VwcGxpZXIgPSB0aGlzLnRyYXZlbGxpbmdGcm9tLnJhaWxzdGF0aW9uLnN1cHBsaWVyO1xyXG4gICAgICB0aGlzLmdldElybERpc2NvdW50Q2FyZHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmlybERpc2NvdW50Q2FyZHNBcnJheSA9IGRhdGE7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcXVlcnk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID0ge1xyXG4gICAgICBzdXBwbGllcjogdGhpcy5zdXBwbGllciwgLy8gSVJMU3VwcGxpZXIhXHJcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InLFxyXG4gICAgICBpcmxEaXNjb3VudENhcmRzOiB0aGlzLmRpc2NvdW50Q2FyZCA/IHRoaXMuZGlzY291bnRDYXJkLmlkIDogbnVsbCxcclxuICAgICAgY2xhc3M6IHRoaXMuY2xhc3MsIC8vIElSTENsYXNzXHJcbiAgICAgIG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiB0aGlzLl90cmF2ZWxsaW5nRnJvbSxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IHRoaXMuX3RyYXZlbGxpbmdUbyxcclxuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxyXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxyXG4gICAgICByZXR1cm5EZXBhcnR1cmVEYXRlVGltZTogdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICBqb3VybmV5VHlwZTogdGhpcy5qb3VybmV5VHlwZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgIHF1ZXJ5LmNoaWxkcmVuID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMudGVtcFBhcmFtcy5qb3VybmV5VHlwZSkge1xyXG4gICAgICBjYXNlIElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaElybFF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XHJcbiAgICB0aGlzLmpvdXJuZXlUeXBlID0gc2VhcmNoSXJsUXVlcnkuam91cm5leVR5cGU7XHJcbiAgICB0aGlzLmlybENsYXNzID0gc2VhcmNoSXJsUXVlcnkuY2xhc3M7XHJcblxyXG4gICAgLy8gZ2V0IG91dEJvdW5kRGF0ZVRpbWUsIGluQm91bmREYXRlVGltZVxyXG4gICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gbW9tZW50KHNlYXJjaElybFF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUpO1xyXG4gICAgaWYgKHNlYXJjaElybFF1ZXJ5LmpvdXJuZXlUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gbW9tZW50KHNlYXJjaElybFF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoSXJsUXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaElybFF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZGVwYXJ0dXJlU3RhdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IHtcclxuICAgICAgICAgICAgbmFtZTogZGVwYXJ0dXJlU3RhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICByYWlsc3RhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGlkOiBkZXBhcnR1cmVTdGF0aW9uLmlkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGRlcGFydHVyZVN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBubGNDb2RlOiBkZXBhcnR1cmVTdGF0aW9uLm5sY0NvZGUsXHJcbiAgICAgICAgICAgICAgc3RhdGlvbkNvZGU6IGRlcGFydHVyZVN0YXRpb24uc3RhdGlvbkNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi50cmFpbmxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZVVuaXF1ZUNvZGU6IGRlcGFydHVyZVN0YXRpb24udHJhaW5saW5lVW5pcXVlQ29kZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hJcmxRdWVyeS5hcnJpdmFsTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaElybFF1ZXJ5LmFycml2YWxMb2NhdGlvbklkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGFycml2YWxTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IHtcclxuICAgICAgICAgICAgbmFtZTogYXJyaXZhbFN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgcmFpbHN0YXRpb246IHtcclxuICAgICAgICAgICAgICBpZDogYXJyaXZhbFN0YXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogYXJyaXZhbFN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBubGNDb2RlOiBhcnJpdmFsU3RhdGlvbi5ubGNDb2RlLFxyXG4gICAgICAgICAgICAgIHN0YXRpb25Db2RlOiBhcnJpdmFsU3RhdGlvbi5zdGF0aW9uQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVDb2RlOiBhcnJpdmFsU3RhdGlvbi50cmFpbmxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZVVuaXF1ZUNvZGU6IGFycml2YWxTdGF0aW9uLnRyYWlubGluZVVuaXF1ZUNvZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgVHJhdmVsbGVyc1xyXG4gICAgaWYgKGJhc2tldEl0ZW0udXNlcnMpIHtcclxuICAgICAgYmFza2V0SXRlbS51c2Vycy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuYWRkVHJhdmVsbGVyKHVzZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge31cclxuXHJcbiAgdXBkYXRlQ2FuQ29tYmluZSh0a3Q6IElybFRpY2tldE9wdGlvbik6IHZvaWQge1xyXG4gICAgKHRrdC5pZGVudGlmaWVycy5hbGxvd2VkV2l0aCB8fCBbXSkuZm9yRWFjaCgoYWxsb3dlZCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdKSB7XHJcbiAgICAgICAgdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0gPSBbXHJcbiAgICAgICAgICBhbGxvd2VkLmZhcmVJZGVudGlmaWVyXHJcbiAgICAgICAgXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXS5wdXNoKFxyXG4gICAgICAgICAgYWxsb3dlZC5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uKTogYW55W10ge1xyXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnNlZ21lbnRzLmxlbmd0aCkge1xyXG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uc2VnbWVudHMubWFwKChzZWdtZW50OiBJcmxTZWdtZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9wZXJhdG9yOlxyXG4gICAgICAgICAgICBzZWdtZW50Lm9wZXJhdG9yIHx8IHJhaWxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXHJcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVncztcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgaXJsSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbixcclxuICAgIGlybFRpY2tldE9wdGlvbjogSXJsVGlja2V0T3B0aW9uLFxyXG4gICAgcHJvdmlkZXJJbmRleDogbnVtYmVyXHJcbiAgKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1twcm92aWRlckluZGV4XS50aWNrZXRPcHRpb25zLmZpbmQoXHJcbiAgICAgICh0aWNrZXRPcHRpb24pID0+XHJcbiAgICAgICAgdGlja2V0T3B0aW9uLnR5cGUgPT09IGlybFRpY2tldE9wdGlvbi50eXBlICYmXHJcbiAgICAgICAgKHRpY2tldE9wdGlvbi5wcmljZSA9PT0gaXJsVGlja2V0T3B0aW9uLnByaWNlIHx8XHJcbiAgICAgICAgICB0aWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIgPT09XHJcbiAgICAgICAgICAgIGlybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIGlybFF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICAgIG91dGJvdW5kOiBJcmxUaWNrZXRPcHRpb24sXHJcbiAgICBpcmxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uXHJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKHNlcnZpY2VJZCxyYWlsUXVlcnksaXJsSm91cm5leU9wdGlvbilcclxuICAgIC8vICAgLy8gaWYgKGlybEpvdXJuZXlPcHRpb24udW5zZWxsYWJsZSkge1xyXG4gICAgLy8gICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gICAvLyB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgICAgIGlybEpvdXJuZXlPcHRpb24sXHJcbiAgICAgICAgb3V0Ym91bmQsXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24oaXJsSm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKGlybEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICAvLyBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5wcm92aWRlcjtcclxuICAgICAgY29uc3QgYmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaXJsSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpcmxKb3VybmV5T3B0aW9uLnRvLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbkNvZGU6IGlybEpvdXJuZXlPcHRpb24udG9Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaXJsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGlybEpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IGlybEpvdXJuZXlPcHRpb24uZnJvbUNvZGUsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaXJsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjpcclxuICAgICAgICAgICAgaXJsSm91cm5leU9wdGlvbi5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjpcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllclxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN1cHBsaWVyOiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogaXJsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiBpcmxRdWVyeSxcclxuICAgICAgICAvLyBjbzJQZXJJdGVtOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgLy8gY28yUGVyUGFzc2VuZ2VyOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IGlybEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIGZhbHNlIC8vIFRPRE9cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBpcmxRdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgICBpbmJvdW5kOiBJcmxUaWNrZXRPcHRpb24sXHJcbiAgICBpbkpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb24sXHJcbiAgICBvdXRib3VuZFRpY2tldD86IElybFRpY2tldE9wdGlvbixcclxuICAgIG91dGJvdW5kSm91cm5leT86IElybEpvdXJuZXlPcHRpb25cclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGNvbnN0IG91dGJvdW5kID0gb3V0Ym91bmRUaWNrZXQgPyBvdXRib3VuZFRpY2tldCA6IHRoaXMub3V0Ym91bmRUaWNrZXQ7XHJcbiAgICBjb25zdCBvdXRKb3VybmV5T3B0aW9uID0gb3V0Ym91bmRKb3VybmV5XHJcbiAgICAgID8gb3V0Ym91bmRKb3VybmV5XHJcbiAgICAgIDogdGhpcy5vdXRib3VuZEpvdXJuZXlPcHRpb25zO1xyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgICAgICBvdXRKb3VybmV5T3B0aW9uLFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24ob3V0Sm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IGluYm91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24oaW5Kb3VybmV5T3B0aW9uKTtcclxuICAgICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQob3V0Sm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW0gPSB7XHJcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IG91dEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogb3V0Sm91cm5leU9wdGlvbi50byxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25Db2RlOiBvdXRKb3VybmV5T3B0aW9uLnRvQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IG91dEpvdXJuZXlPcHRpb24uZnJvbUNvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBvdXRKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Sm91cm5leU9wdGlvbi5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IG91dEpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24udHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IG91dGJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGlud2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbkpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uQ29kZTogaW5Kb3VybmV5T3B0aW9uLnRvQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IGluSm91cm5leU9wdGlvbi5mcm9tQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IGluSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGluSm91cm5leU9wdGlvbi5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogb3V0Ym91bmQuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdXBwbGllcjogb3V0Sm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ucHJvdmlkZXJJZCxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IGlybFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogTnVtYmVyKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBOdW1iZXIoc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24ucHJpY2UpICsgTnVtYmVyKGluYm91bmQucHJpY2UpXHJcbiAgICAgICAgICApLnRvRml4ZWQoMilcclxuICAgICAgICApLFxyXG4gICAgICAgIGN1cnJlbmN5OiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgc2VhcmNoUXVlcnk6IGlybFF1ZXJ5LFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Sm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZVxyXG4gICAgICAgIC8vIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgLy8gY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXJcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZCgpO1xyXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmYWxzZSAvLyBUT0RPXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogSXJsSm91cm5leU9wdGlvbnNbXSk6IElDaGVhcGVzdFByaWNlIHtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY3VycmVuY3kgPVxyXG4gICAgICByZXN1bHRzWzBdPy5vdXRib3VuZFswXT8ucHJvdmlkZXJzWzBdPy5jaGVhcGVzdFRpY2tldD8uY3VycmVuY3k7XHJcbiAgICBjb25zdCBwcmljZSA9IHRoaXMuZmluZENoZWFwZXN0VGlja2V0KHJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYW1vdW50OiBwcmljZSxcclxuICAgICAgY3VycmVuY3lDb2RlOiBjdXJyZW5jeVxyXG4gICAgfTtcclxuICB9XHJcbiAgZmluZENoZWFwZXN0VGlja2V0KHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10pOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY2hlYXBlc3RGaXJzdCA9IG51bGw7XHJcbiAgICB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkID0gbnVsbDtcclxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgY2hlYXBlc3RBcnI6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICByZXN1bHQub3V0Ym91bmQubWFwKChvdXQpID0+IHtcclxuICAgICAgICBvdXQucHJvdmlkZXJzLm1hcCgodGt0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjaGVhcGVzdFRpY2tldDogbnVtYmVyID0gdGt0LmNoZWFwZXN0VGlja2V0LnByaWNlO1xyXG4gICAgICAgICAgdGt0LnRpY2tldE9wdGlvbnMubWFwKCh0a3RPcHRpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGt0UHJpY2UgPSB0a3RPcHRpb24ucHJpY2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHRrdENsYXNzID0gdGt0T3B0aW9uLmNsYXNzO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgdGt0Q2xhc3MgPT09ICdGaXJzdCcgJiZcclxuICAgICAgICAgICAgICAodGhpcy5fY2hlYXBlc3RGaXJzdD8ucHJpY2UgPiB0a3RQcmljZSB8fCAhdGhpcy5fY2hlYXBlc3RGaXJzdClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2hlYXBlc3RGaXJzdCA9IHRrdE9wdGlvbjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICB0a3RDbGFzcyA9PT0gJ1N0YW5kYXJkJyAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLl9jaGVhcGVzdFN0YW5kYXJkPy5wcmljZSA+IHRrdFByaWNlIHx8XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5fY2hlYXBlc3RTdGFuZGFyZClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IHRrdE9wdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGt0UHJpY2UgPT09IGNoZWFwZXN0VGlja2V0KSB7XHJcbiAgICAgICAgICAgICAgY2hlYXBlc3RBcnIucHVzaChjaGVhcGVzdFRpY2tldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIE1hdGgubWluKC4uLmNoZWFwZXN0QXJyKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCByZXN1bHRzIGJ5IHByaWNlXHJcbiAgICpcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBpcmwtZW50ZXJwcmlzZS1zZWFyY2hcclxuICAgKi9cclxuICBzb3J0QnlQcmljZShpZ25vcmVEaXJlY3Rpb25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCFpZ25vcmVEaXJlY3Rpb25DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5wcmljZURpciA9ICF0aGlzLnByaWNlRGlyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0czogSXJsSm91cm5leU9wdGlvbnNbXSA9IHRoaXMuZmlsdGVyU2VsZWN0ZWQodGhpcy5faXNGaWx0ZXJlZCk7XHJcblxyXG4gICAgY29uc3QgYnlQcmljZSA9IChhOiBJcmxKb3VybmV5T3B0aW9uLCBiOiBJcmxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByaWNlRGlyXHJcbiAgICAgICAgPyBhLnByb3ZpZGVyc1swXS5jaGVhcGVzdFRpY2tldC5wcmljZSAtXHJcbiAgICAgICAgICAgIGIucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlXHJcbiAgICAgICAgOiBiLnByb3ZpZGVyc1swXS5jaGVhcGVzdFRpY2tldC5wcmljZSAtXHJcbiAgICAgICAgICAgIGEucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlO1xyXG4gICAgfTtcclxuICAgIHJlc3VsdHNbMF0ub3V0Ym91bmQgPSByZXN1bHRzWzBdLm91dGJvdW5kLnNvcnQoYnlQcmljZSk7XHJcbiAgICByZXN1bHRzWzBdLnJldHVybiA9IHJlc3VsdHNbMF0ucmV0dXJuLnNvcnQoYnlQcmljZSk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgcmVzdWx0cyBieSBkZXBhcnR1cmUgdGltZVxyXG4gICAqXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgaXJsLWVudGVycHJpc2Utc2VhcmNoXHJcbiAgICovXHJcbiAgc29ydEJ5RGF0ZShpZ25vcmVEaXJlY3Rpb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCFpZ25vcmVEaXJlY3Rpb24pIHtcclxuICAgICAgdGhpcy5kYXRlRGlyID0gIXRoaXMuZGF0ZURpcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdID0gdGhpcy5maWx0ZXJTZWxlY3RlZCh0aGlzLl9pc0ZpbHRlcmVkKTtcclxuICAgIGNvbnN0IGJ5RGF0ZSA9IChhOiBJcmxKb3VybmV5T3B0aW9uLCBiOiBJcmxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGVEaXJcclxuICAgICAgICA/IG1vbWVudChhLmRlcGFydERhdGVUaW1lKS51bml4KCkgLSBtb21lbnQoYi5kZXBhcnREYXRlVGltZSkudW5peCgpXHJcbiAgICAgICAgOiBtb21lbnQoYi5kZXBhcnREYXRlVGltZSkudW5peCgpIC0gbW9tZW50KGEuZGVwYXJ0RGF0ZVRpbWUpLnVuaXgoKTtcclxuICAgIH07XHJcbiAgICByZXN1bHRzWzBdLm91dGJvdW5kID0gcmVzdWx0c1swXS5vdXRib3VuZC5zb3J0KGJ5RGF0ZSk7XHJcbiAgICByZXN1bHRzWzBdLnJldHVybiA9IHJlc3VsdHNbMF0ucmV0dXJuLnNvcnQoYnlEYXRlKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgYWRkT3V0Ym91bmRBbmRGaWx0ZXIoXHJcbiAgICB0aWNrZXQ6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCxcclxuICAgIGZ1bGxUaWNrZXQ6IElybEpvdXJuZXlPcHRpb25cclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMub3V0Ym91bmRKb3VybmV5T3B0aW9ucyA9IGZ1bGxUaWNrZXQ7XHJcbiAgICB0aGlzLm91dGJvdW5kVGlja2V0ID0gdGlja2V0O1xyXG4gICAgdGhpcy5maWx0ZXJTZWxlY3RlZCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGZpbHRlclNlbGVjdGVkKGZpbHRlck91dGJvdW5kOiBib29sZWFuID0gZmFsc2UpOiBJcmxKb3VybmV5T3B0aW9uc1tdIHtcclxuICAgIGNvbnN0IHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10gPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHRoaXMuZnVsbFJlc3VsdHMgYXMgSXJsSm91cm5leU9wdGlvbnNbXVxyXG4gICAgKTtcclxuICAgIGlmIChmaWx0ZXJPdXRib3VuZCkge1xyXG4gICAgICB0aGlzLl9pc0ZpbHRlcmVkID0gdHJ1ZTtcclxuICAgICAgcmVzdWx0c1swXS5vdXRib3VuZCA9IFtcclxuICAgICAgICByZXN1bHRzWzBdLm91dGJvdW5kLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGl0ZW0uZGVwYXJ0RGF0ZVRpbWUgPT09XHJcbiAgICAgICAgICAgICAgdGhpcy5fb3V0Ym91bmRKb3VybmV5T3B0aW9ucy5kZXBhcnREYXRlVGltZSAmJlxyXG4gICAgICAgICAgICBpdGVtLmFycml2ZURhdGVUaW1lID09PSB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zLmFycml2ZURhdGVUaW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF07XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMgPVxyXG4gICAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMucmVkdWNlKFxyXG4gICAgICAgICAgKGFjYywgdGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRpY2tldC51aWQgPT09IHRoaXMuX291dGJvdW5kVGlja2V0LnVpZCkge1xyXG4gICAgICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYWNjLnB1c2godGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2lzRmlsdGVyZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5vdXRib3VuZEpvdXJuZXlPcHRpb25zID0gbnVsbDtcclxuICAgICAgdGhpcy5vdXRib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMubWFwKFxyXG4gICAgICAgICAgKHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aWNrZXQuU2hvd0RldGFpbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGlja2V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgaXJsIHN0YXRpb24gbG9jYXRpb25zXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2hcclxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIC0gQmVoYXZpb3JTdWJqZWN0IHNvIHdlIGtub3cgc29tZXRoaW5nIGlzIGhhcHBlbmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0SXJsRGlzY291bnRDYXJkcygpOiBPYnNlcnZhYmxlPElybFRyYXZlbENhcmRbXT4ge1xyXG4gICAgY29uc3Qgc3VwcGxpZXIgPSB0aGlzLnN1cHBsaWVyO1xyXG4gICAgcmV0dXJuIHRoaXMuaXJsRGlzY291bnRDYXJkc0ZldGNoZXIuZmV0Y2hMaXN0KHtcclxuICAgICAgc3VwcGxpZXJcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybXNBbmRDb25kKGluSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGYXJlIFJ1bGVzJyxcclxuICAgICAgICB2YWx1ZTogaW5Kb3VybmV5T3B0aW9uPy5wcm92aWRlcnNbMF0/LnRpY2tldE9wdGlvbnNbMF0/LmZhcmVSdWxlc1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogSUlybFNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsLFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdlbmVyYXRlRmlsdGVycyhyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uW10pOiBJcmxGaWx0ZXJzIHtcclxuICAgIC8vIGZpcnN0IG9mIGFsbCB3ZSBuZWVkIHRvIGZpbmQgdGhlIG1pbiBwcmljZSBhbmQgdGhlIG1heCBwcmljZVxyXG5cclxuICAgIGlmICghcmVzdWx0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJpY2VNYXg6IG51bWJlciA9IG51bGw7XHJcbiAgICBsZXQgcHJpY2VNaW46IG51bWJlciA9IG51bGw7XHJcbiAgICBsZXQgZGF0ZURlcE1pbjogbnVtYmVyID0gbnVsbDtcclxuICAgIGxldCBkYXRlRGVwTWF4OiBudW1iZXIgPSBudWxsO1xyXG4gICAgbGV0IGRhdGVBcnJNaW46IG51bWJlciA9IG51bGw7XHJcbiAgICBsZXQgZGF0ZUFyck1heDogbnVtYmVyID0gbnVsbDtcclxuICAgIGxldCBjbGFzc09iamVjdDogYW55ID0ge307XHJcbiAgICBsZXQgY2hhbmdlc09iamVjdDogYW55ID0ge307XHJcblxyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcclxuICAgICAgcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLmZvckVhY2goKHRpY2tldCkgPT4ge1xyXG4gICAgICAgIGlmICghcHJpY2VNYXggfHwgcHJpY2VNYXggPCB0aWNrZXQucHJpY2UpIHtcclxuICAgICAgICAgIHByaWNlTWF4ID0gTWF0aC5jZWlsKHRpY2tldC5wcmljZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICghcHJpY2VNaW4gfHwgcHJpY2VNaW4gPiByZXN1bHQucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlKSB7XHJcbiAgICAgICAgcHJpY2VNaW4gPSBNYXRoLmZsb29yKHJlc3VsdC5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIWRhdGVEZXBNaW4gfHxcclxuICAgICAgICBtb21lbnQocmVzdWx0LmRlcGFydERhdGVUaW1lKS5pc0JlZm9yZShtb21lbnQoZGF0ZURlcE1pbikpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGRhdGVEZXBNaW4gPSBOdW1iZXIobW9tZW50KHJlc3VsdC5kZXBhcnREYXRlVGltZSkuZm9ybWF0KCdISG1tJykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIWRhdGVEZXBNYXggfHxcclxuICAgICAgICBtb21lbnQocmVzdWx0LmRlcGFydERhdGVUaW1lKS5pc0FmdGVyKG1vbWVudChkYXRlRGVwTWF4KSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGF0ZURlcE1heCA9IE51bWJlcihtb21lbnQocmVzdWx0LmRlcGFydERhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhZGF0ZUFyck1pbiB8fFxyXG4gICAgICAgIG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmlzQmVmb3JlKG1vbWVudChkYXRlQXJyTWluKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGF0ZUFyck1pbiA9IE51bWJlcihtb21lbnQocmVzdWx0LmFycml2ZURhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhZGF0ZUFyck1heCB8fFxyXG4gICAgICAgIG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmlzQWZ0ZXIobW9tZW50KGRhdGVBcnJNYXgpKVxyXG4gICAgICApIHtcclxuICAgICAgICBkYXRlQXJyTWF4ID0gTnVtYmVyKG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2hhbmdlc09iamVjdFtyZXN1bHQuc2VnbWVudHMubGVuZ3RoIC0gMV0gPSB7XHJcbiAgICAgICAga2V5OiByZXN1bHQuc2VnbWVudHMubGVuZ3RoIC0gMSxcclxuICAgICAgICB0aXRsZTogYCR7cmVzdWx0LnNlZ21lbnRzLmxlbmd0aCAtIDF9IGNoYW5nZXNgLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLmZvckVhY2goKHRpY2tldCkgPT4ge1xyXG4gICAgICAgIGlmICh0aWNrZXQuY2xhc3MgPT09ICcxJykge1xyXG4gICAgICAgICAgY2xhc3NPYmplY3RbJ0ZpcnN0J10gPSB7XHJcbiAgICAgICAgICAgIGtleTogQ2xhc3NUeXBlLkNsYXNzXzEsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnRmlyc3QnLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aWNrZXQuY2xhc3MgPT09ICcyJykge1xyXG4gICAgICAgICAgY2xhc3NPYmplY3RbJ1NlY29uZCddID0ge1xyXG4gICAgICAgICAgICBrZXk6IENsYXNzVHlwZS5DbGFzc18yLFxyXG4gICAgICAgICAgICB0aXRsZTogJ1NlY29uZCcsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcmV0T2JqZWN0ID0ge1xyXG4gICAgICBwcmljZU1heCxcclxuICAgICAgcHJpY2VNaW4sXHJcbiAgICAgIGRhdGVBcnJNYXgsXHJcbiAgICAgIGRhdGVBcnJNaW4sXHJcbiAgICAgIGRhdGVEZXBNYXgsXHJcbiAgICAgIGRhdGVEZXBNaW4sXHJcbiAgICAgIGNsYXNzZXM6IE9iamVjdC52YWx1ZXMoY2xhc3NPYmplY3QpLFxyXG4gICAgICBjaGFuZ2VzOiBPYmplY3QudmFsdWVzKGNoYW5nZXNPYmplY3QpXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnNvbGUubG9nKHJldE9iamVjdCk7XHJcbiAgICByZXR1cm4gcmV0T2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IElybEZpbHRlcnMsIGRpcmVjdGlvbjogc3RyaW5nID0gJ08nKTogdm9pZCB7XHJcbiAgICBjb25zdCBmdWxsUmVzdWx0c0NvcHkgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XHJcbiAgICBsZXQgZGlyUmVzdWx0cztcclxuXHJcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xyXG4gICAgICBjYXNlICdPJzpcclxuICAgICAgICBkaXJSZXN1bHRzID0gZnVsbFJlc3VsdHNDb3B5WzBdLm91dGJvdW5kO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdJJzpcclxuICAgICAgICBkaXJSZXN1bHRzID0gZnVsbFJlc3VsdHNDb3B5WzBdLnJldHVybjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBub3cgZmlyc3Qgb2YgYWxsIC0gYXBwbHkgdGhlIHByaWNlIGZpbHRlcnNcclxuXHJcbiAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCB0aWNrZXRzID0gcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLmZpbHRlcigodGlja2V0KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIHRpY2tldC5wcmljZSA+PSBmaWx0ZXJzLnByaWNlTWluICYmIHRpY2tldC5wcmljZSA8PSBmaWx0ZXJzLnByaWNlTWF4XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucyA9IHRpY2tldHM7XHJcbiAgICAgIHJldHVybiB0aWNrZXRzLmxlbmd0aDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHRpbWVzXHJcblxyXG4gICAgLy8gZGVwXHJcbiAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBkZXBUaW1lID0gTnVtYmVyKG1vbWVudChyZXN1bHQuZGVwYXJ0RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKTtcclxuICAgICAgcmV0dXJuIGRlcFRpbWUgPj0gZmlsdGVycy5kYXRlRGVwTWluICYmIGRlcFRpbWUgPD0gZmlsdGVycy5kYXRlRGVwTWF4O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gYXJyXHJcbiAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBjb25zdCBhcnJUaW1lID0gTnVtYmVyKG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKTtcclxuICAgICAgcmV0dXJuIGFyclRpbWUgPj0gZmlsdGVycy5kYXRlQXJyTWluICYmIGFyclRpbWUgPD0gZmlsdGVycy5kYXRlQXJyTWF4O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gY2xhc3Nlc1xyXG4gICAgLy8gZmlyc3Qgb2YgYWxsIGRldGVybWluZSBpZiBhbnkgYXJlIHNlbGVjdGVkXHJcbiAgICBjb25zdCBzZWxlY3RlZENsYXNzZXMgPSBmaWx0ZXJzLmNsYXNzZXMuZmlsdGVyKChjbGFzc0YpID0+IHtcclxuICAgICAgcmV0dXJuIGNsYXNzRi5zZWxlY3RlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZENsYXNzZXM/Lmxlbmd0aCkge1xyXG4gICAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld1RpY2tldHM6IGFueVtdID0gW107XHJcbiAgICAgICAgY29uc29sZS5sb2coJ29nIHRpY2tldHM6JywgcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zKTtcclxuICAgICAgICByZXN1bHQucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMuZm9yRWFjaCgodGlja2V0KSA9PiB7XHJcbiAgICAgICAgICBzZWxlY3RlZENsYXNzZXMuZm9yRWFjaCgoY2xhc3NTKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aWNrZXQuY2xhc3MgPT09IGNsYXNzUy5rZXkpIHtcclxuICAgICAgICAgICAgICBuZXdUaWNrZXRzLnB1c2godGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKG5ld1RpY2tldHMpO1xyXG4gICAgICAgIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucyA9IG5ld1RpY2tldHM7XHJcbiAgICAgICAgcmV0dXJuIG5ld1RpY2tldHMubGVuZ3RoID4gMDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coZGlyUmVzdWx0cyk7XHJcblxyXG4gICAgLy8gZmluYWxseSBzdG9wc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRTdG9wcyA9IGZpbHRlcnMuY2hhbmdlcy5maWx0ZXIoKGNoYW5nZSkgPT4ge1xyXG4gICAgICByZXR1cm4gY2hhbmdlLnNlbGVjdGVkO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkU3RvcHMubGVuZ3RoKSB7XHJcbiAgICAgIGRpclJlc3VsdHMgPSBkaXJSZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZFN0b3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnNlZ21lbnRzLmxlbmd0aCAtIDEgPT09IHNlbGVjdGVkU3RvcHNbaV0ua2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xyXG4gICAgICBjYXNlICdPJzpcclxuICAgICAgICBmdWxsUmVzdWx0c0NvcHlbMF0ub3V0Ym91bmQgPSBkaXJSZXN1bHRzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdJJzpcclxuICAgICAgICBmdWxsUmVzdWx0c0NvcHlbMF0ucmV0dXJuID0gZGlyUmVzdWx0cztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzQ29weSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5nZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyXHJcbiAgICAgIC5mZXRjaExpc3QoeyBpZDogZmF2LmRlcGFydHVyZUxvY2F0aW9uSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSgoYSkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSBhO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlclxyXG4gICAgICAuZmV0Y2hMaXN0KHsgaWQ6IGZhdi5hcnJpdmFsTG9jYXRpb25JZCB9KVxyXG4gICAgICAuc3Vic2NyaWJlKChhKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmF2ZWxsaW5nVG8gPSBhO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuYWR1bHRzID0gZmF2LmFkdWx0cztcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBmYXYuY2hpbGRyZW47XHJcbiAgICB0aGlzLmNsYXNzID0gZmF2LmNsYXNzO1xyXG4gICAgdGhpcy5jb3VudHJ5Q29kZSA9IGZhdi5jb3VudHJ5Q29kZTtcclxuICAgIHRoaXMuam91cm5leVR5cGUgPVxyXG4gICAgICBmYXYuam91cm5leVR5cGUgPT09ICdSZXR1cm5Kb3VybmV5J1xyXG4gICAgICAgID8gSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leVxyXG4gICAgICAgIDogSXJsSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTtcclxuICAgIHRoaXMuc3VwcGxpZXIgPSBmYXYuc3VwcGxpZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
1234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxHQUFHLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBTUwsNEJBQTRCLEVBQzdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLFFBQVEsRUFNUixXQUFXLEVBQ1gsY0FBYyxFQUlmLE1BQU0sd0JBQXdCLENBQUM7QUFrQmhDLE9BQU8sRUFBYSxJQUFJLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFRMUQsTUFBTSxDQUFOLElBQVksWUFJWDtBQUpELFdBQVksWUFBWTtJQUN0QixtQ0FBbUIsQ0FBQTtJQUNuQixtQ0FBbUIsQ0FBQTtJQUNuQixpQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsWUFBWSxLQUFaLFlBQVksUUFJdkI7QUFXRCxNQUFNLENBQU4sSUFBWSxTQU1YO0FBTkQsV0FBWSxTQUFTO0lBQ25CLDBCQUFhLENBQUE7SUFDYiwwQkFBYSxDQUFBO0lBQ2IscUNBQXFDO0lBQ3JDLHVDQUEwQixDQUFBO0lBQzFCLHNDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFOVyxTQUFTLEtBQVQsU0FBUyxRQU1wQjtBQWFELE1BQU0sT0FBTyxtQkFLWCxTQUFRLG9CQUlQO0lBNGNELFlBQ1UsVUFBa0MsRUFDbEMsdUJBQTJELEVBQ25FLE9BQTJCLEVBQ25CLGFBQStDLEVBQ3ZELGNBQWtDLEVB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ZixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNMLElBQUksQ0FBQyw0QkFBNEI7aUJBQzlCLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztpQkFDeEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVc7Z0JBQ2QsR0FBRyxDQUFDLFdBQVcsS0FBSyxlQUFlO29CQUNqQyxDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWE7b0JBQzlCLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUMvQixDQUFDO0tBQUE7O0FBMThDZSwwQ0FBc0IsR0FBRyxZQUFZLENBQUM7QUFDdEMsMkNBQXVCLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLGlDQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcclxuaW1wb3J0IHtcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIElybFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnNcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgSXJsQ2xhc3MsXHJcbiAgSXJsSm91cm5leU9wdGlvbixcclxuICBJcmxKb3VybmV5T3B0aW9ucyxcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgSXJsVGlja2V0T3B0aW9uLFxyXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIElybEpvdXJuZXlUeXBlLFxyXG4gIElybFN1cHBsaWVyLFxyXG4gIElybFRyYXZlbENhcmQsXHJcbiAgSXJsU2VnbWVudFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VJcmxEaXNjb3VudENhcmRGZXRjaGVyLFxyXG4gIElybERpc2NvdW50Q2FyZEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLWRpc2NvdW50LWNhcmQtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgSXJsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgYWdlcyB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHsgU29ydE1ldGhvZCB9IGZyb20gJy4vZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJSXJsU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaXJsLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlcixcclxuICBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1pcmwtc3VwcGxpZXItc3RhdGlvbi5mZXRjaGVyJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGVudW0gU29ydFR5cGVzSXJsIHtcclxuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxyXG4gIEVhcmxpZXN0Rmlyc3QgPSAnRScsXHJcbiAgTGF0ZXN0Rmlyc3QgPSAnTCdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0VHlwZUlybCB7XHJcbiAgLyoqIFRpdGxlIGRpc3BsYXllZCBvbiBkcm9wZG93biAqL1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgLyoqIE1ldGhvZCBuYW1lIHVzZWQgYnkgY29tcG9uZW50IHRvIHNvcnQgcmVzdWx0cyAqL1xyXG4gIG1ldGhvZFJlZjogU29ydE1ldGhvZDtcclxuICAvKiogSWNvbiBkaXNwbGF5ZWQgb24gZHJvcCBkb3duICovXHJcbiAgaWNvbjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBDbGFzc1R5cGUge1xyXG4gIENsYXNzXzEgPSAnMScsXHJcbiAgQ2xhc3NfMiA9ICcyJyxcclxuICAvLyAhIHRoZXNlIDIgc2hvcHVsZCBiZSByZW1vdmVkIGxhdGVyXHJcbiAgU2Vjb25kX0NsYXNzID0gJzJuZCBDbGFzcycsXHJcbiAgRmlyc3RfQ2xhc3MgPSAnMXN0IENsYXNzJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElybEZpbHRlcnMge1xyXG4gIHByaWNlTWF4OiBudW1iZXI7XHJcbiAgcHJpY2VNaW46IG51bWJlcjtcclxuICBkYXRlQXJyTWF4OiBudW1iZXI7XHJcbiAgZGF0ZUFyck1pbjogbnVtYmVyO1xyXG4gIGRhdGVEZXBNYXg6IG51bWJlcjtcclxuICBkYXRlRGVwTWluOiBudW1iZXI7XHJcbiAgY2xhc3NlczogYW55W107XHJcbiAgY2hhbmdlczogYW55W107XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJUkxFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgUSBleHRlbmRzIElybFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcclxuICAgIEdJU1NGX1EgZXh0ZW5kcyBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZVxyXG4gID5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgSXJsVGVtcFBhcmFtcyxcclxuICAgIElybFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgICBJcmxRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgSVJMRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSB7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2lybCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ2lybF9yZXN1bHRzJztcclxuICBzdGF0aWMgcmVhZG9ubHkgUEFTU0lOR19QT0lOVCA9ICdQYXNzaW5nJztcclxuICBwcml2YXRlIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gSVJMRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgSVJMRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgcHJpdmF0ZSBfc29ydEFycmF5OiBTb3J0VHlwZUlybFtdID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1ByaWNlJyxcclxuICAgICAgbWV0aG9kUmVmOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxyXG4gICAgICBpY29uOiAnaWNvLWRvbGxhcidcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZScsXHJcbiAgICAgIG1ldGhvZFJlZjogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxyXG4gICAgICBpY29uOiAnaWNvLWNhbGVuZGFyJ1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1JldHVybicsIHZhbHVlOiBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdPbmUtV2F5JywgdmFsdWU6IElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXkgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBjbGFzc1R5cGVzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnQW55JywgdmFsdWU6IElybENsYXNzLkFsbCB9LFxyXG4gICAgeyBkaXNwbGF5OiAnU3RhbmRhcmQnLCB2YWx1ZTogSXJsQ2xhc3MuU3RhbmRhcmQgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZpcnN0JywgdmFsdWU6IElybENsYXNzLkZpcnN0IH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgYWdlUmFuZ2VzOiB7XHJcbiAgICBrZXk6IGFnZXM7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gIH1bXSA9IFtcclxuICAgIHsga2V5OiBhZ2VzLkNoaWxkLCB2YWx1ZTogJ0NoaWxkICgwLTMpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuQ2hpbGQsIHZhbHVlOiAnQ2hpbGQgKDQtNSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5DaGlsZCwgdmFsdWU6ICdDaGlsZCAoNi0xMSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5Zb3V0aCwgdmFsdWU6ICdZb3V0aCAoMTItMTQpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnWW91dGggKDE1LTI1KScgfSxcclxuICAgIHsga2V5OiBhZ2VzLkFkdWx0LCB2YWx1ZTogJ0FkdWx0ICgyNi01OSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5Zb3V0aCwgdmFsdWU6ICdTZW5pb3IgKDYwKyknIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgdHJhdmVsQ2FyZHMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdZb3VuZyBwZXJzb25zIHJhaWxjYXJkJywgdmFsdWU6ICdZTkcnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdEaXNhYmlsaXR5IHJhaWxjYXJkJywgdmFsdWU6ICdESVMnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGYW1pbHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0ZBTScgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZvcmNlcyByYWlsY2FyZCcsIHZhbHVlOiAnSE1GJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnVHJhdmVsIGFnZW5jeSBkaXNjb3VudCcsIHZhbHVlOiAnVEFEJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWw7XHJcbiAgcHVibGljIG1pbk91dGJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwdWJsaWMgbWluSW5ib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXlbXTtcclxuICBwcml2YXRlIF9jYW5Db21iaW5lOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdHJhdmVsbGluZ0Zyb206IHN0cmluZztcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nVG86IHN0cmluZztcclxuICBwcm90ZWN0ZWQgX29yaWdpbmFsVXNlclNlYXJjaDogSXJsVGVtcFBhcmFtcztcclxuICBwcml2YXRlIF9vdXRib3VuZEpvdXJuZXlPcHRpb25zOiBJcmxKb3VybmV5T3B0aW9uO1xyXG4gIHByaXZhdGUgX2lzRmlsdGVyZWQ6IGJvb2xlYW47XHJcbiAgZ2V0IG91dGJvdW5kSm91cm5leU9wdGlvbnMoKTogSXJsSm91cm5leU9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRKb3VybmV5T3B0aW9ucztcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZEpvdXJuZXlPcHRpb25zKGRhdGE6IElybEpvdXJuZXlPcHRpb24pIHtcclxuICAgIHRoaXMuX291dGJvdW5kSm91cm5leU9wdGlvbnMgPSBkYXRhO1xyXG4gIH1cclxuICBfb3V0Ym91bmRUaWNrZXQ6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZDtcclxuICBnZXQgb3V0Ym91bmRUaWNrZXQoKTogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZFRpY2tldDtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZFRpY2tldChkYXRhOiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQpIHtcclxuICAgIHRoaXMuX291dGJvdW5kVGlja2V0ID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBub09mQWR1bHRzKGFkdWx0czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gYWR1bHRzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZDaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNldCBub09mQ2hpbGRyZW4oY2hpbGRyZW46IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbztcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nVG8odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbyA9IHR0O1xyXG5cclxuICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICB9IGVsc2UgaWYgKHR0Py5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ0Zyb20oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb207XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhdmVsbGluZ0Zyb20odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdGcm9tID0gdHQ7XHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgICAgdGhpcy5zdXBwbGllciA9IHR0LnJhaWxzdGF0aW9uLnN1cHBsaWVyO1xyXG4gICAgICB0aGlzLmdldElybERpc2NvdW50Q2FyZHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmlybERpc2NvdW50Q2FyZHNBcnJheSA9IGRhdGE7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0dD8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdXBwbGllcjogSXJsU3VwcGxpZXIgPSBudWxsO1xyXG4gIGdldCBzdXBwbGllcigpOiBJcmxTdXBwbGllciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3VwcGxpZXI7XHJcbiAgfVxyXG4gIHNldCBzdXBwbGllcihkYXRhOiBJcmxTdXBwbGllcikge1xyXG4gICAgdGhpcy5fc3VwcGxpZXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY291bnRyeUNvZGU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGNvdW50cnlDb2RlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY291bnRyeUNvZGU7XHJcbiAgfVxyXG4gIHNldCBjb3VudHJ5Q29kZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvdW50cnlDb2RlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsYXNzOiBJcmxDbGFzcyA9IElybENsYXNzLkFsbDtcclxuICBnZXQgY2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzO1xyXG4gIH1cclxuICBzZXQgY2xhc3MoZGF0YTogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMuX2NsYXNzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVwYXJ0dXJlTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgZGVwYXJ0dXJlTG9jYXRpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgfVxyXG4gIHNldCBkZXBhcnR1cmVMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IGRhdGE7XHJcbiAgICB0aGlzLl9kZXBhcnR1cmVMb2NhdGlvbklkID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Fycml2YWxMb2NhdGlvbklkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBhcnJpdmFsTG9jYXRpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Fycml2YWxMb2NhdGlvbklkO1xyXG4gIH1cclxuICBzZXQgYXJyaXZhbExvY2F0aW9uSWQoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IGRhdGE7XHJcbiAgICB0aGlzLl9hcnJpdmFsTG9jYXRpb25JZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcbiAgc2V0IGFkdWx0cyhkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IG51bWJlciA9IDA7XHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XHJcbiAgfVxyXG4gIHNldCBjaGlsZHJlbihkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoaWxkcmVuID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWFwZXN0U3RhbmRhcmQ6IElybFRpY2tldE9wdGlvbiA9IG51bGw7XHJcbiAgZ2V0IGNoZWFwZXN0U3RhbmRhcmQoKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkO1xyXG4gIH1cclxuICBwcml2YXRlIF9jaGVhcGVzdEZpcnN0OiBJcmxUaWNrZXRPcHRpb24gPSBudWxsO1xyXG4gIGdldCBjaGVhcGVzdEZpcnN0KCk6IElybFRpY2tldE9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlYXBlc3RGaXJzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybkRlcGFydHVyZURhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gbnVsbDtcclxuICBnZXQgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCByZXR1cm5EZXBhcnR1cmVEYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX3JldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fcmV0dXJuX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMTYwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWdlUmFuZ2U6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGFnZVJhbmdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWdlUmFuZ2U7XHJcbiAgfVxyXG4gIHNldCBhZ2VSYW5nZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2FnZVJhbmdlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByaWNlRGlyOiBib29sZWFuID0gdHJ1ZTtcclxuICBnZXQgcHJpY2VEaXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJpY2VEaXI7XHJcbiAgfVxyXG4gIHNldCBwcmljZURpcihkYXRhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9wcmljZURpciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRlRGlyOiBib29sZWFuID0gdHJ1ZTtcclxuICBnZXQgZGF0ZURpcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlRGlyO1xyXG4gIH1cclxuICBzZXQgZGF0ZURpcihkYXRhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kYXRlRGlyID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hDbGFzcygpOiBJcmxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblNlYXJjaENsYXNzKGNsYXNzUjogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jbGFzcyA9IGNsYXNzUjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIF9kaXNjb3VudENhcmQ6IElybFRyYXZlbENhcmRbXSA9IFtdXHJcblxyXG4gIGdldCBkaXNjb3VudENhcmQoKTogSXJsVHJhdmVsQ2FyZFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNjb3VudENhcmQ7XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzY291bnRDYXJkKGRhdGE6IElybFRyYXZlbENhcmRbXSkge1xyXG4gICAgdGhpcy5fZGlzY291bnRDYXJkID0gZGF0YTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNjb3VudENhcmRzTGlzdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc2NvdW50Q2FyZD8ubGVuZ3RoID8gdGhpcy5fZGlzY291bnRDYXJkLm1hcChjYXJkID0+IGNhcmQuaWQpLmpvaW4oJywnKSA6IG51bGw7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfaXJsRGlzY291bnRDYXJkc0FycmF5OiBJcmxUcmF2ZWxDYXJkW10gPSBbXTtcclxuICBnZXQgaXJsRGlzY291bnRDYXJkc0FycmF5KCk6IElybFRyYXZlbENhcmRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXJsRGlzY291bnRDYXJkc0FycmF5O1xyXG4gIH1cclxuXHJcbiAgc2V0IGlybERpc2NvdW50Q2FyZHNBcnJheShhcnJheTogSXJsVHJhdmVsQ2FyZFtdKSB7XHJcbiAgICB0aGlzLl9pcmxEaXNjb3VudENhcmRzQXJyYXkgPSBhcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRCb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dEJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKTtcclxuXHJcbiAgICB0aGlzLm1pbkluYm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiBuZXdEYXRlVGltZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiBuZXdEYXRlVGltZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiBuZXdEYXRlVGltZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcwNzAwJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuaXNBZnRlcih0aGlzLmluQm91bmREYXRlVGltZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMub3V0Qm91bmREYXRlVGltZS5jbG9uZSgpLmFkZCgxLCAnZGF5Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluQm91bmREYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5Cb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9yZXR1cm5fdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcxNjAwJztcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBvdXRib3VuZF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgb3V0Ym91bmRfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCByZXR1cm5fZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcmV0dXJuX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg0OClcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb2ZmbGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBvZmZsaW5lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29mZmxpbmU7XHJcbiAgfVxyXG5cclxuICBzZXQgb2ZmbGluZShkYXRhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9vZmZsaW5lID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lybENsYXNzOiBJcmxDbGFzcyA9IElybENsYXNzLkFsbDtcclxuICBnZXQgaXJsQ2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lybENsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGlybENsYXNzKGRhdGE6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLl9pcmxDbGFzcyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9qb3VybmV5dHlwZTogSXJsSm91cm5leVR5cGUgPSBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5O1xyXG4gIGdldCBqb3VybmV5VHlwZSgpOiBJcmxKb3VybmV5VHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fam91cm5leXR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgam91cm5leVR5cGUoZGF0YTogSXJsSm91cm5leVR5cGUpIHtcclxuICAgIHRoaXMuX2pvdXJuZXl0eXBlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBzb3J0RHJvcGRvd25WYWx1ZXMoKTogU29ydFR5cGVJcmxbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydEFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhaW5OdW1iZXI6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHRyYWluTnVtYmVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhaW5OdW1iZXI7XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhaW5OdW1iZXIoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90cmFpbk51bWJlciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBhZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWRkaXRpb25hbEluc3RydWN0aW9ucztcclxuICB9XHJcbiAgc2V0IGFkZGl0aW9uYWxJbnN0cnVjdGlvbnMoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBJcmxmZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFE+LFxyXG4gICAgcHJpdmF0ZSBpcmxEaXNjb3VudENhcmRzRmV0Y2hlcjogQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXI8R0lERl9RPixcclxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyPEdJU1NGX1E+LFxyXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycywgc2VhcmNoU2VydmljZSwgdXNlclNlcnZpY2UpO1xyXG5cclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgcXVlcnk6IHt9O1xyXG4gICAgICB0ZW1wUGFyYW1zOiBJcmxUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHF1ZXJ5OiB7fSxcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgSXJsVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBJcmxUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlSXJsUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBpZiAodGhpcy50cmF2ZWxsZXJzWzBdICYmICF0aGlzLnRyYXZlbGxlcnNbMF0uYWdlVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYXZlbGxlcnNbMF0uYWdlVHlwZSA9IGFnZXMuQWR1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIGNvbnN0IHJlc3VsdHMgPVxyXG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxJcmxRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgLy8gaWYgKHJlc3VsdHMgPT0gbnVsbCAmJiB0aGlzLmlzVmFsaWQpIHtcclxuICAgIC8vICAgc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIHRoaXMuZnVsbFJlc3VsdHMgPSByZXN1bHRzO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyB8fCBbXSk7XHJcbiAgfVxyXG4gIGlybERpc2NvdW50Q2FyZHM6IHN0cmluZztcclxuXHJcbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKHJlc3VsdHM6IElybFF1b3RlUmVzdWx0QXJyYXkpIHtcclxuICAgIHJlc3VsdHNbMF0/Lm91dGJvdW5kLmZvckVhY2goKGl0ZW06IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgaXRlbS5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5tYXAoXHJcbiAgICAgICAgKHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aWNrZXQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRpY2tldC5TaG93RGV0YWlsID0gZmFsc2U7XHJcbiAgICAgICAgICB0aWNrZXQudWlkID0gYCR7dGlja2V0LmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyfV8ke2luZGV4ICsgMX1gO1xyXG4gICAgICAgICAgcmV0dXJuIHRpY2tldDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5mcmVlemUocmVzdWx0cyk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeSgpKTtcclxuICAgIHRoaXMucmVzZXRJcmxGb3JtKClcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0SXJsRm9ybSgpIHtcclxuICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG1vbWVudCgpLCAzMCk7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxJbnN0cnVjdGlvbnMgPSAnJztcclxuICAgIHRoaXMudHJhaW5OdW1iZXIgPSAnJztcclxuICAgIHRoaXMudHJhdmVsbGluZ1RvID0gJyc7XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gJyc7XHJcbiAgICB0aGlzLmRpc2NvdW50Q2FyZCA9IFtdO1xyXG4gICAgdGhpcy5jbGFzcyA9IElybENsYXNzLkFsbDtcclxuICAgIHRoaXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IHRpbWU7XHJcbiAgICB0aGlzLmpvdXJuZXlUeXBlID0gSXJsSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTtcclxuICAgIHRoaXMub2ZmbGluZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICBjb25zdCBub3cgPSBtb21lbnQoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIEZyb20gTG9jYXRpb24uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgVG8gTG9jYXRpb24uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3V0Qm91bmREYXRlVGltZT8uaXNCZWZvcmUobm93KSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgICAgICdEZXBhcnR1cmUgRGF0ZS9UaW1lIGNhbm5vdCBiZSBpbiB0aGUgcGFzdC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPT09IElybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXlcclxuICAgIC8vICkge1xyXG4gICAgLy8gICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcclxuXHJcbiAgICAvLyAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5vdXRCb3VuZERhdGVUaW1lKSkge1xyXG4gICAgLy8gICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAvLyAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnZpYSkge1xyXG4gICAgLy8gICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xyXG4gICAgLy8gICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbi4nKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuYWR1bHRzICsgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuIDwgMSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDEgdHJhdmVsbGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcclxuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHsgLi4udGhpcy50ZW1wUGFyYW1zIH0pO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaChcclxuICAgICAgICB0aGlzLklybGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KS5waXBlKG1hcCgocmVzdWx0KSA9PiByZXN1bHQpKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XHJcbiAgICBjb25zdCByZWNlbnRTZWFyY2hRdWVyeTogSUlybFNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbCxcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlVGltZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyk6IElJcmxTZWFyY2hBcmdzIHtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJSXJsU2VhcmNoQXJncyA9IHF1ZXJ5O1xyXG4gICAgaWYgKHRoaXMudHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ0Zyb20gPSB0aGlzLnRyYXZlbGxpbmdGcm9tO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdUbykge1xyXG4gICAgICBzZWFyY2hRdWVyeS50cmF2ZWxsaW5nVG8gPSB0aGlzLnRyYXZlbGxpbmdUbztcclxuICAgIH1cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5qb3VybmV5VHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmpvdXJuZXlUeXBlO1xyXG4gICAgdGhpcy5pcmxDbGFzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmNsYXNzO1xyXG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nVG87XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ0Zyb207XHJcblxyXG4gICAgLy8gZ2V0IG91dEJvdW5kRGF0ZVRpbWUsIGluQm91bmREYXRlVGltZVxyXG4gICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gbW9tZW50KFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lXHJcbiAgICApO1xyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmpvdXJuZXlUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gbW9tZW50KFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fb3V0Ym91bmRfZGF0ZSAmJiB0aGlzLl9vdXRib3VuZF90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSxcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF90aW1lXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVSZXR1cm5EYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZXR1cm5fZGF0ZSAmJiB0aGlzLl9yZXR1cm5fdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX3JldHVybl9kYXRlLFxyXG4gICAgICAgIHRoaXMuX3JldHVybl90aW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUXVlcnkoKTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMge1xyXG4gICAgLy8gdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgIGlmICghdGhpcy50cmF2ZWxsZXJzKSB7XHJcbiAgICAgIHRoaXMubm9PZkFkdWx0cyA9IHRoaXMuYWR1bHRzO1xyXG4gICAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm5vT2ZBZHVsdHMgPSB0aGlzLnRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT5cclxuICAgICAgICAgIHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLkFkdWx0IHx8XHJcbiAgICAgICAgICB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5Zb3V0aCB8fFxyXG4gICAgICAgICAgdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuU2VuaW9yXHJcbiAgICAgICkubGVuZ3RoO1xyXG4gICAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IHRoaXMudHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICAgKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5DaGlsZFxyXG4gICAgICApLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuc3VwcGxpZXIgJiYgdGhpcy50cmF2ZWxsaW5nRnJvbS5uYW1lKSB7XHJcbiAgICAgIHRoaXMuc3VwcGxpZXIgPSB0aGlzLnRyYXZlbGxpbmdGcm9tLnJhaWxzdGF0aW9uLnN1cHBsaWVyO1xyXG4gICAgICB0aGlzLmdldElybERpc2NvdW50Q2FyZHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmlybERpc2NvdW50Q2FyZHNBcnJheSA9IGRhdGE7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcXVlcnk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID0ge1xyXG4gICAgICBzdXBwbGllcjogdGhpcy5zdXBwbGllciwgLy8gSVJMU3VwcGxpZXIhXHJcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InLFxyXG4gICAgICBpcmxEaXNjb3VudENhcmRzOiB0aGlzLmRpc2NvdW50Q2FyZHNMaXN0LFxyXG4gICAgICBjbGFzczogdGhpcy5jbGFzcywgLy8gSVJMQ2xhc3NcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZSh0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSksXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRoaXMuX3RyYXZlbGxpbmdGcm9tLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogdGhpcy5fdHJhdmVsbGluZ1RvLFxyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSksXHJcbiAgICAgIGpvdXJuZXlUeXBlOiB0aGlzLmpvdXJuZXlUeXBlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPT09IDApIHtcclxuICAgICAgcXVlcnkuY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLmpvdXJuZXlUeXBlKSB7XHJcbiAgICAgIGNhc2UgSXJsSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoSXJsUXVlcnk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID0gYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcclxuICAgIHRoaXMuam91cm5leVR5cGUgPSBzZWFyY2hJcmxRdWVyeS5qb3VybmV5VHlwZTtcclxuICAgIHRoaXMuaXJsQ2xhc3MgPSBzZWFyY2hJcmxRdWVyeS5jbGFzcztcclxuXHJcbiAgICAvLyBnZXQgb3V0Qm91bmREYXRlVGltZSwgaW5Cb3VuZERhdGVUaW1lXHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSBtb21lbnQoc2VhcmNoSXJsUXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSk7XHJcbiAgICBpZiAoc2VhcmNoSXJsUXVlcnkuam91cm5leVR5cGUgPT09IElybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkpIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSBtb21lbnQoc2VhcmNoSXJsUXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hJcmxRdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgIC5nZXRSYWlsU3RhdGlvbkJ5SWQoc2VhcmNoSXJsUXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZClcclxuICAgICAgICAuc3Vic2NyaWJlKChkZXBhcnR1cmVTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBkZXBhcnR1cmVTdGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgIHJhaWxzdGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWQ6IGRlcGFydHVyZVN0YXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogZGVwYXJ0dXJlU3RhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgIG5sY0NvZGU6IGRlcGFydHVyZVN0YXRpb24ubmxjQ29kZSxcclxuICAgICAgICAgICAgICBzdGF0aW9uQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi5zdGF0aW9uQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVDb2RlOiBkZXBhcnR1cmVTdGF0aW9uLnRyYWlubGluZUNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lVW5pcXVlQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi50cmFpbmxpbmVVbmlxdWVDb2RlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaElybFF1ZXJ5LmFycml2YWxMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgIC5nZXRSYWlsU3RhdGlvbkJ5SWQoc2VhcmNoSXJsUXVlcnkuYXJyaXZhbExvY2F0aW9uSWQpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoYXJyaXZhbFN0YXRpb24pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGluZ1RvID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBhcnJpdmFsU3RhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICByYWlsc3RhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGlkOiBhcnJpdmFsU3RhdGlvbi5pZCxcclxuICAgICAgICAgICAgICBuYW1lOiBhcnJpdmFsU3RhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgIG5sY0NvZGU6IGFycml2YWxTdGF0aW9uLm5sY0NvZGUsXHJcbiAgICAgICAgICAgICAgc3RhdGlvbkNvZGU6IGFycml2YWxTdGF0aW9uLnN0YXRpb25Db2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZUNvZGU6IGFycml2YWxTdGF0aW9uLnRyYWlubGluZUNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lVW5pcXVlQ29kZTogYXJyaXZhbFN0YXRpb24udHJhaW5saW5lVW5pcXVlQ29kZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCBUcmF2ZWxsZXJzXHJcbiAgICBpZiAoYmFza2V0SXRlbS51c2Vycykge1xyXG4gICAgICBiYXNrZXRJdGVtLnVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5hZGRUcmF2ZWxsZXIodXNlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhwcmV2aW91c0l0ZW1zKVxyXG4gICAgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hUKXsgXHJcbiAgICAgIHRyeXtcclxuICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICBpZiAodGhpcy5vdXRCb3VuZERhdGVUaW1lLm1pbnV0ZXMoKSAlIDMwKSB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuc3VidHJhY3QodGhpcy5vdXRCb3VuZERhdGVUaW1lLm1pbnV0ZXMoKSAlIDMwLCBcIm1pbnV0ZXNcIilcclxuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUpIHtcclxuICAgICAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkZMSUdIVC5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCkgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aGlzLmluQm91bmREYXRlVGltZS5zdWJ0cmFjdCh0aGlzLmluQm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgaW50ZXJuYXRpb25hbCByYWlsIGZyb20gZmxpZ2h0IGl0ZW0nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocHJldmlvdXNJdGVtcy5SQUlMKSB7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuUkFJTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCkgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGhpcy5vdXRCb3VuZERhdGVUaW1lLnN1YnRyYWN0KHRoaXMub3V0Qm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuUkFJTC5pbmJvdW5kRGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSBtb21lbnQoKHByZXZpb3VzSXRlbXMuUkFJTC5pbmJvdW5kRGF0ZSBhcyBzdHJpbmcpLnJlcGxhY2UoXCJUXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVswXSwgXCJZWVlZLU1NLUREaGg6bW06c3NcIilcclxuICAgICAgICAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCkgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aGlzLmluQm91bmREYXRlVGltZS5zdWJ0cmFjdCh0aGlzLmluQm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgaW50ZXJuYXRpb25hbCByYWlsIGZyb20gcmFpbCBpdGVtJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUNhbkNvbWJpbmUodGt0OiBJcmxUaWNrZXRPcHRpb24pOiB2b2lkIHtcclxuICAgICh0a3QuaWRlbnRpZmllcnMuYWxsb3dlZFdpdGggfHwgW10pLmZvckVhY2goKGFsbG93ZWQpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXSkge1xyXG4gICAgICAgIHRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdID0gW1xyXG4gICAgICAgICAgYWxsb3dlZC5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgIF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0ucHVzaChcclxuICAgICAgICAgIGFsbG93ZWQuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExlZ3NGcm9tSXJsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbik6IGFueVtdIHtcclxuICAgIGxldCBsZWdzOiBhbnlbXSA9IFtdO1xyXG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy5zZWdtZW50cy5sZW5ndGgpIHtcclxuICAgICAgbGVncyA9IHJhaWxKb3VybmV5T3B0aW9uLnNlZ21lbnRzLm1hcCgoc2VnbWVudDogSXJsU2VnbWVudCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBvcGVyYXRvcjpcclxuICAgICAgICAgICAgc2VnbWVudC5vcGVyYXRvciB8fCByYWlsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ucHJvdmlkZXJJZCxcclxuICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBzZWdtZW50LmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHNlZ21lbnQuZGVwYXJ0LFxyXG4gICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBzZWdtZW50LmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBzZWdtZW50LmFycml2ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ3M7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgIGlybEpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb24sXHJcbiAgICBpcmxUaWNrZXRPcHRpb246IElybFRpY2tldE9wdGlvbixcclxuICAgIHByb3ZpZGVySW5kZXg6IG51bWJlclxyXG4gICk6IElybFRpY2tldE9wdGlvbiB7XHJcbiAgICByZXR1cm4gaXJsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbcHJvdmlkZXJJbmRleF0udGlja2V0T3B0aW9ucy5maW5kKFxyXG4gICAgICAodGlja2V0T3B0aW9uKSA9PlxyXG4gICAgICAgIHRpY2tldE9wdGlvbi50eXBlID09PSBpcmxUaWNrZXRPcHRpb24udHlwZSAmJlxyXG4gICAgICAgICh0aWNrZXRPcHRpb24ucHJpY2UgPT09IGlybFRpY2tldE9wdGlvbi5wcmljZSB8fFxyXG4gICAgICAgICAgdGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyID09PVxyXG4gICAgICAgICAgICBpcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBpcmxRdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgICBvdXRib3VuZDogSXJsVGlja2V0T3B0aW9uLFxyXG4gICAgaXJsSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhzZXJ2aWNlSWQscmFpbFF1ZXJ5LGlybEpvdXJuZXlPcHRpb24pXHJcbiAgICAvLyAgIC8vIGlmIChpcmxKb3VybmV5T3B0aW9uLnVuc2VsbGFibGUpIHtcclxuICAgIC8vICAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIC8vICAgLy8gfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgICAgICBpcmxKb3VybmV5T3B0aW9uLFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKGlybEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChpcmxKb3VybmV5T3B0aW9uKTtcclxuICAgICAgLy8gc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMucHJvdmlkZXI7XHJcbiAgICAgIGNvbnN0IGNoZWFwZXN0UHJpY2UgPSB0aGlzLmZpbmRDaGVhcGVzdFRvdGFsKHRoaXMuZnVsbFJlc3VsdHMpXHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW0gPSB7XHJcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGlybEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogaXJsSm91cm5leU9wdGlvbi50byxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25Db2RlOiBpcmxKb3VybmV5T3B0aW9uLnRvQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IGlybEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpcmxKb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25Db2RlOiBpcmxKb3VybmV5T3B0aW9uLmZyb21Db2RlLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGlybEpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24udHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6XHJcbiAgICAgICAgICAgIGlybEpvdXJuZXlPcHRpb24uaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdXBwbGllcjogaXJsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ucHJvdmlkZXJJZCxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxyXG4gICAgICAgICAgcmFpbGNhcmRzRGV0YWlsOiBpcmxRdWVyeS5pcmxEaXNjb3VudENhcmRzID8gaXJsUXVlcnkuaXJsRGlzY291bnRDYXJkcy5zcGxpdCgnLCcpIDogW11cclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogaXJsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiBpcmxRdWVyeSxcclxuICAgICAgICAvLyBjbzJQZXJJdGVtOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgLy8gY28yUGVyUGFzc2VuZ2VyOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IGlybEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgbG93ZXN0UHJpY2U6IGNoZWFwZXN0UHJpY2UuYW1vdW50ICE9IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnByaWNlID8gY2hlYXBlc3RQcmljZS5hbW91bnQgOiBudWxsLFxyXG4gICAgICAgIGxvd2VzdFByaWNlQ3VycmVuY3k6IGNoZWFwZXN0UHJpY2UuYW1vdW50ICE9IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnByaWNlID8gPEN1cnJlbmN5Q29kZT5jaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSA6IG51bGxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIGZhbHNlIC8vIFRPRE9cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBpcmxRdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgICBpbmJvdW5kOiBJcmxUaWNrZXRPcHRpb24sXHJcbiAgICBpbkpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb24sXHJcbiAgICBvdXRib3VuZFRpY2tldD86IElybFRpY2tldE9wdGlvbixcclxuICAgIG91dGJvdW5kSm91cm5leT86IElybEpvdXJuZXlPcHRpb25cclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGNvbnN0IG91dGJvdW5kID0gb3V0Ym91bmRUaWNrZXQgPyBvdXRib3VuZFRpY2tldCA6IHRoaXMub3V0Ym91bmRUaWNrZXQ7XHJcbiAgICBjb25zdCBvdXRKb3VybmV5T3B0aW9uID0gb3V0Ym91bmRKb3VybmV5XHJcbiAgICAgID8gb3V0Ym91bmRKb3VybmV5XHJcbiAgICAgIDogdGhpcy5vdXRib3VuZEpvdXJuZXlPcHRpb25zO1xyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgICAgICBvdXRKb3VybmV5T3B0aW9uLFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb25JbmJvdW5kID0gdGhpcy5nZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgICAgICBpbkpvdXJuZXlPcHRpb24sXHJcbiAgICAgICAgaW5ib3VuZCxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKG91dEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKGluSm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKG91dEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICBjb25zdCBjaGVhcGVzdFByaWNlID0gdGhpcy5maW5kQ2hlYXBlc3RUb3RhbCh0aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgICBjb25zdCBwcmljZSA9IE51bWJlcihcclxuICAgICAgICAoXHJcbiAgICAgICAgICBOdW1iZXIoc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24ucHJpY2UpICsgTnVtYmVyKGluYm91bmQucHJpY2UpXHJcbiAgICAgICAgKS50b0ZpeGVkKDIpXHJcbiAgICAgIClcclxuICAgICAgY29uc3QgYmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogb3V0Sm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRKb3VybmV5T3B0aW9uLnRvLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbkNvZGU6IG91dEpvdXJuZXlPcHRpb24udG9Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uQ29kZTogb3V0Sm91cm5leU9wdGlvbi5mcm9tQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBvdXRKb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Sm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaW53YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaW5Kb3VybmV5T3B0aW9uLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluSm91cm5leU9wdGlvbi50byxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25Db2RlOiBpbkpvdXJuZXlPcHRpb24udG9Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uQ29kZTogaW5Kb3VybmV5T3B0aW9uLmZyb21Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaW5Kb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5Kb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaW5Kb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IGluYm91bmQudHlwZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IGluYm91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZC5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjpcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllclxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHJldHVybjoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbkluYm91bmQuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb25JbmJvdW5kLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3VwcGxpZXI6IG91dEpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLnByb3ZpZGVySWQsXHJcbiAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9ucyxcclxuICAgICAgICAgIHJhaWxjYXJkc0RldGFpbDogaXJsUXVlcnkuaXJsRGlzY291bnRDYXJkcyA/IGlybFF1ZXJ5LmlybERpc2NvdW50Q2FyZHMuc3BsaXQoJywnKSA6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IGlybFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogcHJpY2UsXHJcbiAgICAgICAgY3VycmVuY3k6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogaXJsUXVlcnksXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgIGxvd2VzdFByaWNlOiBjaGVhcGVzdFByaWNlLmFtb3VudCAhPSBwcmljZSA/IGNoZWFwZXN0UHJpY2UuYW1vdW50IDogbnVsbCxcclxuICAgICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OiBjaGVhcGVzdFByaWNlLmFtb3VudCAhPSBwcmljZSA/IDxDdXJyZW5jeUNvZGU+Y2hlYXBlc3RQcmljZS5jdXJyZW5jeUNvZGUgOiBudWxsXHJcbiAgICAgICAgLy8gY28yUGVySXRlbTogb3V0Ym91bmQuY28yUGVySXRlbSxcclxuICAgICAgICAvLyBjbzJQZXJQYXNzZW5nZXI6IG91dGJvdW5kLmNvMlBlclBhc3NlbmdlclxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmZpbHRlclNlbGVjdGVkKCk7XHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIGZhbHNlIC8vIFRPRE9cclxuICAgICAgKTtcclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBjdXJyZW5jeSA9XHJcbiAgICAgIHJlc3VsdHNbMF0/Lm91dGJvdW5kWzBdPy5wcm92aWRlcnNbMF0/LmNoZWFwZXN0VGlja2V0Py5jdXJyZW5jeTtcclxuICAgIGNvbnN0IHByaWNlID0gdGhpcy5maW5kQ2hlYXBlc3RUaWNrZXQocmVzdWx0cyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhbW91bnQ6IHByaWNlLFxyXG4gICAgICBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5XHJcbiAgICB9O1xyXG4gIH1cclxuICBmaW5kQ2hlYXBlc3RUb3RhbChyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gIGNvbnN0IGNoZWFwZXN0T3V0Ym91bmQgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzKVxyXG4gIGNvbnN0IGNoZWFwZXN0QXJyOiBudW1iZXJbXSA9IFtdO1xyXG4gIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcclxuICAgIHJlc3VsdC5vdXRib3VuZC5tYXAoKG91dCkgPT4ge1xyXG4gICAgICBvdXQucHJvdmlkZXJzLm1hcCgodGt0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlYXBlc3RUaWNrZXQ6IG51bWJlciA9IHRrdC5jaGVhcGVzdFRpY2tldC5wcmljZTtcclxuICAgICAgICB0a3QudGlja2V0T3B0aW9ucy5tYXAoKHRrdE9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGt0UHJpY2UgPSB0a3RPcHRpb24ucHJpY2U7XHJcbiAgICAgICAgICBjb25zdCB0a3RDbGFzcyA9IHRrdE9wdGlvbi5jbGFzcztcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGt0Q2xhc3MgPT09ICdGaXJzdCcgJiZcclxuICAgICAgICAgICAgKHRoaXMuX2NoZWFwZXN0Rmlyc3Q/LnByaWNlID4gdGt0UHJpY2UgfHwgIXRoaXMuX2NoZWFwZXN0Rmlyc3QpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlYXBlc3RGaXJzdCA9IHRrdE9wdGlvbjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRrdENsYXNzID09PSAnU3RhbmRhcmQnICYmXHJcbiAgICAgICAgICAgICh0aGlzLl9jaGVhcGVzdFN0YW5kYXJkPy5wcmljZSA+IHRrdFByaWNlIHx8XHJcbiAgICAgICAgICAgICAgIXRoaXMuX2NoZWFwZXN0U3RhbmRhcmQpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IHRrdE9wdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0a3RQcmljZSA9PT0gY2hlYXBlc3RUaWNrZXQpIHtcclxuICAgICAgICAgICAgY2hlYXBlc3RBcnIucHVzaChjaGVhcGVzdFRpY2tldCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbiAgY29uc3QgY2hlYXBlc3RJbmJvdW5kID0gTWF0aC5taW4oLi4uY2hlYXBlc3RBcnIpXHJcbiAgcmV0dXJuIHsgYW1vdW50OiBjaGVhcGVzdE91dGJvdW5kICsgY2hlYXBlc3RJbmJvdW5kLCBjdXJyZW5jeUNvZGU6IHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnNbMF0uY3VycmVuY3l9XHJcbiAgfVxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSBudWxsO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGNoZWFwZXN0QXJyOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgcmVzdWx0Lm91dGJvdW5kLm1hcCgob3V0KSA9PiB7XHJcbiAgICAgICAgb3V0LnByb3ZpZGVycy5tYXAoKHRrdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2hlYXBlc3RUaWNrZXQ6IG51bWJlciA9IHRrdC5jaGVhcGVzdFRpY2tldC5wcmljZTtcclxuICAgICAgICAgIHRrdC50aWNrZXRPcHRpb25zLm1hcCgodGt0T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRrdFByaWNlID0gdGt0T3B0aW9uLnByaWNlO1xyXG4gICAgICAgICAgICBjb25zdCB0a3RDbGFzcyA9IHRrdE9wdGlvbi5jbGFzcztcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRrdENsYXNzID09PSAnRmlyc3QnICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuX2NoZWFwZXN0Rmlyc3Q/LnByaWNlID4gdGt0UHJpY2UgfHwgIXRoaXMuX2NoZWFwZXN0Rmlyc3QpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSB0a3RPcHRpb247XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgdGt0Q2xhc3MgPT09ICdTdGFuZGFyZCcgJiZcclxuICAgICAgICAgICAgICAodGhpcy5fY2hlYXBlc3RTdGFuZGFyZD8ucHJpY2UgPiB0a3RQcmljZSB8fFxyXG4gICAgICAgICAgICAgICAgIXRoaXMuX2NoZWFwZXN0U3RhbmRhcmQpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQgPSB0a3RPcHRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRrdFByaWNlID09PSBjaGVhcGVzdFRpY2tldCkge1xyXG4gICAgICAgICAgICAgIGNoZWFwZXN0QXJyLnB1c2goY2hlYXBlc3RUaWNrZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBNYXRoLm1pbiguLi5jaGVhcGVzdEFycik7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNvcnQgcmVzdWx0cyBieSBwcmljZVxyXG4gICAqXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgaXJsLWVudGVycHJpc2Utc2VhcmNoXHJcbiAgICovXHJcbiAgc29ydEJ5UHJpY2UoaWdub3JlRGlyZWN0aW9uQ2hhbmdlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGlmICghaWdub3JlRGlyZWN0aW9uQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMucHJpY2VEaXIgPSAhdGhpcy5wcmljZURpcjtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10gPSB0aGlzLmZpbHRlclNlbGVjdGVkKHRoaXMuX2lzRmlsdGVyZWQpO1xyXG5cclxuICAgIGNvbnN0IGJ5UHJpY2UgPSAoYTogSXJsSm91cm5leU9wdGlvbiwgYjogSXJsSm91cm5leU9wdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5wcmljZURpclxyXG4gICAgICAgID8gYS5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2UgLVxyXG4gICAgICAgICAgICBiLnByb3ZpZGVyc1swXS5jaGVhcGVzdFRpY2tldC5wcmljZVxyXG4gICAgICAgIDogYi5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2UgLVxyXG4gICAgICAgICAgICBhLnByb3ZpZGVyc1swXS5jaGVhcGVzdFRpY2tldC5wcmljZTtcclxuICAgIH07XHJcbiAgICByZXN1bHRzWzBdLm91dGJvdW5kID0gcmVzdWx0c1swXS5vdXRib3VuZC5zb3J0KGJ5UHJpY2UpO1xyXG4gICAgcmVzdWx0c1swXS5yZXR1cm4gPSByZXN1bHRzWzBdLnJldHVybi5zb3J0KGJ5UHJpY2UpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IHJlc3VsdHMgYnkgZGVwYXJ0dXJlIHRpbWVcclxuICAgKlxyXG4gICAqIEByZXR1cm5zXHJcbiAgICogQG1lbWJlcm9mIGlybC1lbnRlcnByaXNlLXNlYXJjaFxyXG4gICAqL1xyXG4gIHNvcnRCeURhdGUoaWdub3JlRGlyZWN0aW9uOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGlmICghaWdub3JlRGlyZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGF0ZURpciA9ICF0aGlzLmRhdGVEaXI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0czogSXJsSm91cm5leU9wdGlvbnNbXSA9IHRoaXMuZmlsdGVyU2VsZWN0ZWQodGhpcy5faXNGaWx0ZXJlZCk7XHJcbiAgICBjb25zdCBieURhdGUgPSAoYTogSXJsSm91cm5leU9wdGlvbiwgYjogSXJsSm91cm5leU9wdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRlRGlyXHJcbiAgICAgICAgPyBtb21lbnQoYS5kZXBhcnREYXRlVGltZSkudW5peCgpIC0gbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpLnVuaXgoKVxyXG4gICAgICAgIDogbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpLnVuaXgoKSAtIG1vbWVudChhLmRlcGFydERhdGVUaW1lKS51bml4KCk7XHJcbiAgICB9O1xyXG4gICAgcmVzdWx0c1swXS5vdXRib3VuZCA9IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieURhdGUpO1xyXG4gICAgcmVzdWx0c1swXS5yZXR1cm4gPSByZXN1bHRzWzBdLnJldHVybi5zb3J0KGJ5RGF0ZSk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIGFkZE91dGJvdW5kQW5kRmlsdGVyKFxyXG4gICAgdGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQsXHJcbiAgICBmdWxsVGlja2V0OiBJcmxKb3VybmV5T3B0aW9uXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLm91dGJvdW5kSm91cm5leU9wdGlvbnMgPSBmdWxsVGlja2V0O1xyXG4gICAgdGhpcy5vdXRib3VuZFRpY2tldCA9IHRpY2tldDtcclxuICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJTZWxlY3RlZChmaWx0ZXJPdXRib3VuZDogYm9vbGVhbiA9IGZhbHNlKTogSXJsSm91cm5leU9wdGlvbnNbXSB7XHJcbiAgICBjb25zdCByZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdID0gdGhpcy5oZWxwZXJzLmNsb25lKFxyXG4gICAgICB0aGlzLmZ1bGxSZXN1bHRzIGFzIElybEpvdXJuZXlPcHRpb25zW11cclxuICAgICk7XHJcbiAgICBpZiAoZmlsdGVyT3V0Ym91bmQpIHtcclxuICAgICAgdGhpcy5faXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmQgPSBbXHJcbiAgICAgICAgcmVzdWx0c1swXS5vdXRib3VuZC5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBpdGVtLmRlcGFydERhdGVUaW1lID09PVxyXG4gICAgICAgICAgICAgIHRoaXMuX291dGJvdW5kSm91cm5leU9wdGlvbnMuZGVwYXJ0RGF0ZVRpbWUgJiZcclxuICAgICAgICAgICAgaXRlbS5hcnJpdmVEYXRlVGltZSA9PT0gdGhpcy5fb3V0Ym91bmRKb3VybmV5T3B0aW9ucy5hcnJpdmVEYXRlVGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgICBdO1xyXG4gICAgICByZXN1bHRzWzBdLm91dGJvdW5kWzBdLnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zID1cclxuICAgICAgICByZXN1bHRzWzBdLm91dGJvdW5kWzBdLnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLnJlZHVjZShcclxuICAgICAgICAgIChhY2MsIHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aWNrZXQudWlkID09PSB0aGlzLl9vdXRib3VuZFRpY2tldC51aWQpIHtcclxuICAgICAgICAgICAgICB0aWNrZXQuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGFjYy5wdXNoKHRpY2tldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbXVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9pc0ZpbHRlcmVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMub3V0Ym91bmRKb3VybmV5T3B0aW9ucyA9IG51bGw7XHJcbiAgICAgIHRoaXMub3V0Ym91bmRUaWNrZXQgPSBudWxsO1xyXG4gICAgICByZXN1bHRzWzBdLm91dGJvdW5kLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLm1hcChcclxuICAgICAgICAgICh0aWNrZXQ6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCkgPT4ge1xyXG4gICAgICAgICAgICB0aWNrZXQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGlja2V0LlNob3dEZXRhaWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRpY2tldDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzKTtcclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZ2V0IGlybCBzdGF0aW9uIGxvY2F0aW9uc1xyXG4gICAqIEBwYXJhbSB0ZXJtIC0gdGhlIHRlcm0gdG8gc2VhcmNoXHJcbiAgICogQHBhcmFtIGlzTG9hZGluZyAtIEJlaGF2aW9yU3ViamVjdCBzbyB3ZSBrbm93IHNvbWV0aGluZyBpcyBoYXBwZW5pbmdcclxuICAgKi9cclxuICBwcml2YXRlIGdldElybERpc2NvdW50Q2FyZHMoKTogT2JzZXJ2YWJsZTxJcmxUcmF2ZWxDYXJkW10+IHtcclxuICAgIGNvbnN0IHN1cHBsaWVyID0gdGhpcy5zdXBwbGllcjtcclxuICAgIHJldHVybiB0aGlzLmlybERpc2NvdW50Q2FyZHNGZXRjaGVyLmZldGNoTGlzdCh7XHJcbiAgICAgIHN1cHBsaWVyXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFRlcm1zQW5kQ29uZChpbkpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb24pIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRmFyZSBSdWxlcycsXHJcbiAgICAgICAgdmFsdWU6IGluSm91cm5leU9wdGlvbj8ucHJvdmlkZXJzWzBdPy50aWNrZXRPcHRpb25zWzBdPy5mYXJlUnVsZXNcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElJcmxTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbCxcclxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUZpbHRlcnMocmVzdWx0czogSXJsSm91cm5leU9wdGlvbltdKTogSXJsRmlsdGVycyB7XHJcbiAgICAvLyBmaXJzdCBvZiBhbGwgd2UgbmVlZCB0byBmaW5kIHRoZSBtaW4gcHJpY2UgYW5kIHRoZSBtYXggcHJpY2VcclxuXHJcbiAgICBpZiAoIXJlc3VsdHM/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHByaWNlTWF4OiBudW1iZXIgPSBudWxsO1xyXG4gICAgbGV0IHByaWNlTWluOiBudW1iZXIgPSBudWxsO1xyXG4gICAgbGV0IGRhdGVEZXBNaW46IG51bWJlciA9IG51bGw7XHJcbiAgICBsZXQgZGF0ZURlcE1heDogbnVtYmVyID0gbnVsbDtcclxuICAgIGxldCBkYXRlQXJyTWluOiBudW1iZXIgPSBudWxsO1xyXG4gICAgbGV0IGRhdGVBcnJNYXg6IG51bWJlciA9IG51bGw7XHJcbiAgICBsZXQgY2xhc3NPYmplY3Q6IGFueSA9IHt9O1xyXG4gICAgbGV0IGNoYW5nZXNPYmplY3Q6IGFueSA9IHt9O1xyXG5cclxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5mb3JFYWNoKCh0aWNrZXQpID0+IHtcclxuICAgICAgICBpZiAoIXByaWNlTWF4IHx8IHByaWNlTWF4IDwgdGlja2V0LnByaWNlKSB7XHJcbiAgICAgICAgICBwcmljZU1heCA9IE1hdGguY2VpbCh0aWNrZXQucHJpY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoIXByaWNlTWluIHx8IHByaWNlTWluID4gcmVzdWx0LnByb3ZpZGVyc1swXS5jaGVhcGVzdFRpY2tldC5wcmljZSkge1xyXG4gICAgICAgIHByaWNlTWluID0gTWF0aC5mbG9vcihyZXN1bHQucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICFkYXRlRGVwTWluIHx8XHJcbiAgICAgICAgbW9tZW50KHJlc3VsdC5kZXBhcnREYXRlVGltZSkuaXNCZWZvcmUobW9tZW50KGRhdGVEZXBNaW4pKVxyXG4gICAgICApIHtcclxuICAgICAgICBkYXRlRGVwTWluID0gTnVtYmVyKG1vbWVudChyZXN1bHQuZGVwYXJ0RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICFkYXRlRGVwTWF4IHx8XHJcbiAgICAgICAgbW9tZW50KHJlc3VsdC5kZXBhcnREYXRlVGltZSkuaXNBZnRlcihtb21lbnQoZGF0ZURlcE1heCkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGRhdGVEZXBNYXggPSBOdW1iZXIobW9tZW50KHJlc3VsdC5kZXBhcnREYXRlVGltZSkuZm9ybWF0KCdISG1tJykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIWRhdGVBcnJNaW4gfHxcclxuICAgICAgICBtb21lbnQocmVzdWx0LmFycml2ZURhdGVUaW1lKS5pc0JlZm9yZShtb21lbnQoZGF0ZUFyck1pbikpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGRhdGVBcnJNaW4gPSBOdW1iZXIobW9tZW50KHJlc3VsdC5hcnJpdmVEYXRlVGltZSkuZm9ybWF0KCdISG1tJykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIWRhdGVBcnJNYXggfHxcclxuICAgICAgICBtb21lbnQocmVzdWx0LmFycml2ZURhdGVUaW1lKS5pc0FmdGVyKG1vbWVudChkYXRlQXJyTWF4KSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGF0ZUFyck1heCA9IE51bWJlcihtb21lbnQocmVzdWx0LmFycml2ZURhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNoYW5nZXNPYmplY3RbcmVzdWx0LnNlZ21lbnRzLmxlbmd0aCAtIDFdID0ge1xyXG4gICAgICAgIGtleTogcmVzdWx0LnNlZ21lbnRzLmxlbmd0aCAtIDEsXHJcbiAgICAgICAgdGl0bGU6IGAke3Jlc3VsdC5zZWdtZW50cy5sZW5ndGggLSAxfSBjaGFuZ2VzYCxcclxuICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5mb3JFYWNoKCh0aWNrZXQpID0+IHtcclxuICAgICAgICBpZiAodGlja2V0LmNsYXNzID09PSAnMScpIHtcclxuICAgICAgICAgIGNsYXNzT2JqZWN0WydGaXJzdCddID0ge1xyXG4gICAgICAgICAgICBrZXk6IENsYXNzVHlwZS5DbGFzc18xLFxyXG4gICAgICAgICAgICB0aXRsZTogJ0ZpcnN0JyxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGlja2V0LmNsYXNzID09PSAnMicpIHtcclxuICAgICAgICAgIGNsYXNzT2JqZWN0WydTZWNvbmQnXSA9IHtcclxuICAgICAgICAgICAga2V5OiBDbGFzc1R5cGUuQ2xhc3NfMixcclxuICAgICAgICAgICAgdGl0bGU6ICdTZWNvbmQnLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJldE9iamVjdCA9IHtcclxuICAgICAgcHJpY2VNYXgsXHJcbiAgICAgIHByaWNlTWluLFxyXG4gICAgICBkYXRlQXJyTWF4LFxyXG4gICAgICBkYXRlQXJyTWluLFxyXG4gICAgICBkYXRlRGVwTWF4LFxyXG4gICAgICBkYXRlRGVwTWluLFxyXG4gICAgICBjbGFzc2VzOiBPYmplY3QudmFsdWVzKGNsYXNzT2JqZWN0KSxcclxuICAgICAgY2hhbmdlczogT2JqZWN0LnZhbHVlcyhjaGFuZ2VzT2JqZWN0KVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhyZXRPYmplY3QpO1xyXG4gICAgcmV0dXJuIHJldE9iamVjdDtcclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVycyhmaWx0ZXJzOiBJcmxGaWx0ZXJzLCBkaXJlY3Rpb246IHN0cmluZyA9ICdPJyk6IHZvaWQge1xyXG4gICAgY29uc3QgZnVsbFJlc3VsdHNDb3B5ID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpO1xyXG4gICAgbGV0IGRpclJlc3VsdHM7XHJcblxyXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcclxuICAgICAgY2FzZSAnTyc6XHJcbiAgICAgICAgZGlyUmVzdWx0cyA9IGZ1bGxSZXN1bHRzQ29weVswXS5vdXRib3VuZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSSc6XHJcbiAgICAgICAgZGlyUmVzdWx0cyA9IGZ1bGxSZXN1bHRzQ29weVswXS5yZXR1cm47XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbm93IGZpcnN0IG9mIGFsbCAtIGFwcGx5IHRoZSBwcmljZSBmaWx0ZXJzXHJcblxyXG4gICAgZGlyUmVzdWx0cyA9IGRpclJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgdGlja2V0cyA9IHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5maWx0ZXIoKHRpY2tldCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICB0aWNrZXQucHJpY2UgPj0gZmlsdGVycy5wcmljZU1pbiAmJiB0aWNrZXQucHJpY2UgPD0gZmlsdGVycy5wcmljZU1heFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXN1bHQucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMgPSB0aWNrZXRzO1xyXG4gICAgICByZXR1cm4gdGlja2V0cy5sZW5ndGg7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyB0aW1lc1xyXG5cclxuICAgIC8vIGRlcFxyXG4gICAgZGlyUmVzdWx0cyA9IGRpclJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgZGVwVGltZSA9IE51bWJlcihtb21lbnQocmVzdWx0LmRlcGFydERhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKSk7XHJcbiAgICAgIHJldHVybiBkZXBUaW1lID49IGZpbHRlcnMuZGF0ZURlcE1pbiAmJiBkZXBUaW1lIDw9IGZpbHRlcnMuZGF0ZURlcE1heDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGFyclxyXG4gICAgZGlyUmVzdWx0cyA9IGRpclJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgY29uc3QgYXJyVGltZSA9IE51bWJlcihtb21lbnQocmVzdWx0LmFycml2ZURhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKSk7XHJcbiAgICAgIHJldHVybiBhcnJUaW1lID49IGZpbHRlcnMuZGF0ZUFyck1pbiAmJiBhcnJUaW1lIDw9IGZpbHRlcnMuZGF0ZUFyck1heDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGNsYXNzZXNcclxuICAgIC8vIGZpcnN0IG9mIGFsbCBkZXRlcm1pbmUgaWYgYW55IGFyZSBzZWxlY3RlZFxyXG4gICAgY29uc3Qgc2VsZWN0ZWRDbGFzc2VzID0gZmlsdGVycy5jbGFzc2VzLmZpbHRlcigoY2xhc3NGKSA9PiB7XHJcbiAgICAgIHJldHVybiBjbGFzc0Yuc2VsZWN0ZWQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRDbGFzc2VzPy5sZW5ndGgpIHtcclxuICAgICAgZGlyUmVzdWx0cyA9IGRpclJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+IHtcclxuICAgICAgICBjb25zdCBuZXdUaWNrZXRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdvZyB0aWNrZXRzOicsIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucyk7XHJcbiAgICAgICAgcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLmZvckVhY2goKHRpY2tldCkgPT4ge1xyXG4gICAgICAgICAgc2VsZWN0ZWRDbGFzc2VzLmZvckVhY2goKGNsYXNzUykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGlja2V0LmNsYXNzID09PSBjbGFzc1Mua2V5KSB7XHJcbiAgICAgICAgICAgICAgbmV3VGlja2V0cy5wdXNoKHRpY2tldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhuZXdUaWNrZXRzKTtcclxuICAgICAgICByZXN1bHQucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMgPSBuZXdUaWNrZXRzO1xyXG4gICAgICAgIHJldHVybiBuZXdUaWNrZXRzLmxlbmd0aCA+IDA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKGRpclJlc3VsdHMpO1xyXG5cclxuICAgIC8vIGZpbmFsbHkgc3RvcHNcclxuICAgIGNvbnN0IHNlbGVjdGVkU3RvcHMgPSBmaWx0ZXJzLmNoYW5nZXMuZmlsdGVyKChjaGFuZ2UpID0+IHtcclxuICAgICAgcmV0dXJuIGNoYW5nZS5zZWxlY3RlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFN0b3BzLmxlbmd0aCkge1xyXG4gICAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRTdG9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5zZWdtZW50cy5sZW5ndGggLSAxID09PSBzZWxlY3RlZFN0b3BzW2ldLmtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcclxuICAgICAgY2FzZSAnTyc6XHJcbiAgICAgICAgZnVsbFJlc3VsdHNDb3B5WzBdLm91dGJvdW5kID0gZGlyUmVzdWx0cztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSSc6XHJcbiAgICAgICAgZnVsbFJlc3VsdHNDb3B5WzBdLnJldHVybiA9IGRpclJlc3VsdHM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0c0NvcHkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlclxyXG4gICAgICAuZmV0Y2hMaXN0KHsgaWQ6IGZhdi5kZXBhcnR1cmVMb2NhdGlvbklkIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoKGEpID0+IHtcclxuICAgICAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gYTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXJcclxuICAgICAgLmZldGNoTGlzdCh7IGlkOiBmYXYuYXJyaXZhbExvY2F0aW9uSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSgoYSkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhdmVsbGluZ1RvID0gYTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5hZHVsdHM7XHJcbiAgICB0aGlzLmNoaWxkcmVuID0gZmF2LmNoaWxkcmVuO1xyXG4gICAgdGhpcy5jbGFzcyA9IGZhdi5jbGFzcztcclxuICAgIHRoaXMuY291bnRyeUNvZGUgPSBmYXYuY291bnRyeUNvZGU7XHJcbiAgICB0aGlzLmpvdXJuZXlUeXBlID1cclxuICAgICAgZmF2LmpvdXJuZXlUeXBlID09PSAnUmV0dXJuSm91cm5leSdcclxuICAgICAgICA/IElybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXlcclxuICAgICAgICA6IElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk7XHJcbiAgICB0aGlzLnN1cHBsaWVyID0gZmF2LnN1cHBsaWVyO1xyXG4gIH1cclxufVxyXG4iXX0=