@sabstravtech/obtservices 0.0.22051001 → 0.1.6161600

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/angular/components/basket-panel.d.ts +1 -0
  2. package/angular/fetchers.d.ts +5 -0
  3. package/angular/lib/vendor/fetchers/get-companies.fetcher.d.ts +7 -0
  4. package/angular/lib/vendor/fetchers/get-company.fetcher.d.ts +7 -0
  5. package/angular/lib/vendor/fetchers/get-office.fetcher.d.ts +7 -0
  6. package/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +7 -0
  7. package/angular/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +7 -0
  8. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
  9. package/angular/lib/vendor/services/logon.service.d.ts +2 -1
  10. package/angular/lib/vendor/services/user.service.d.ts +9 -3
  11. package/angular/lib/vendor/types/graphql.angular.types.d.ts +614 -550
  12. package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
  13. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  14. package/angular/updaters.d.ts +1 -0
  15. package/base/fetchers.d.ts +5 -0
  16. package/base/lib/vendor/classes/base-enterprise.d.ts +7 -1
  17. package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
  18. package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
  19. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +9 -4
  20. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +12 -4
  21. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +14 -7
  22. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +5 -4
  23. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +16 -5
  24. package/base/lib/vendor/classes/helpers.d.ts +6 -1
  25. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +10 -3
  26. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +13 -8
  27. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +5 -4
  28. package/base/lib/vendor/classes/management-info-and-valid.d.ts +3 -3
  29. package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
  30. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +5 -4
  31. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +10 -8
  32. package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
  33. package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
  34. package/base/lib/vendor/fetchers/eurostar-quote.fetcher.d.ts +3 -1
  35. package/base/lib/vendor/fetchers/flight-quote.fetcher.d.ts +1 -0
  36. package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
  37. package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
  38. package/base/lib/vendor/fetchers/get-office.fetcher.d.ts +20 -0
  39. package/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.d.ts +21 -0
  40. package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
  41. package/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.d.ts +2 -2
  42. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +2 -0
  43. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +5 -2
  44. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +8 -6
  45. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
  46. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +7 -5
  47. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +8 -1
  48. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +8 -2
  49. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +8 -7
  50. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
  51. package/base/lib/vendor/interfaces/Imybookings.service.d.ts +3 -2
  52. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
  53. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +5 -2
  54. package/base/lib/vendor/interfaces/Isearch.service.d.ts +5 -2
  55. package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
  56. package/base/lib/vendor/interfaces/Iuser.service.d.ts +11 -3
  57. package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
  58. package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
  59. package/base/lib/vendor/interfaces/summary-interface.d.ts +6 -0
  60. package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
  61. package/base/lib/vendor/models/traveller.object.d.ts +12 -2
  62. package/base/lib/vendor/services/enterprise-basket.service.d.ts +22 -9
  63. package/base/lib/vendor/services/logon.service.d.ts +5 -1
  64. package/base/lib/vendor/services/my-bookings.service.d.ts +3 -2
  65. package/base/lib/vendor/services/search.service.d.ts +27 -23
  66. package/base/lib/vendor/services/url.service.d.ts +2 -0
  67. package/base/lib/vendor/services/user.service.d.ts +36 -5
  68. package/base/lib/vendor/services/webtoken.service.d.ts +6 -0
  69. package/base/lib/vendor/types/graphql.types.d.ts +581 -549
  70. package/base/lib/vendor/types/types.d.ts +48 -6
  71. package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
  72. package/base/sabstravtech-obtservices-base.d.ts +1 -1
  73. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  74. package/base/updaters.d.ts +1 -0
  75. package/bundles/sabstravtech-obtservices-angular.umd.js +541 -252
  76. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  77. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  78. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  79. package/bundles/sabstravtech-obtservices-base.umd.js +4080 -1471
  80. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  81. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  82. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  83. package/esm2015/angular/components/basket-panel.js +16 -7
  84. package/esm2015/angular/fetchers.js +6 -1
  85. package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
  86. package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
  87. package/esm2015/angular/lib/vendor/fetchers/get-office.fetcher.js +25 -0
  88. package/esm2015/angular/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +25 -0
  89. package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
  90. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +24 -21
  91. package/esm2015/angular/lib/vendor/services/http-call.service.js +1 -1
  92. package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
  93. package/esm2015/angular/lib/vendor/services/search.service.js +1 -1
  94. package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +4 -1
  95. package/esm2015/angular/lib/vendor/services/user.service.js +28 -10
  96. package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
  97. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +1023 -1220
  98. package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
  99. package/esm2015/angular/updaters.js +2 -1
  100. package/esm2015/base/fetchers.js +6 -1
  101. package/esm2015/base/lib/vendor/classes/base-enterprise.js +12 -3
  102. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
  103. package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -8
  104. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +219 -18
  105. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +235 -67
  106. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +462 -49
  107. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +37 -13
  108. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +281 -62
  109. package/esm2015/base/lib/vendor/classes/helpers.js +32 -3
  110. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +228 -54
  111. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +221 -46
  112. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +101 -14
  113. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +67 -40
  114. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
  115. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +146 -11
  116. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +210 -25
  117. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +58 -4
  118. package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
  119. package/esm2015/base/lib/vendor/data/countries.json +484 -242
  120. package/esm2015/base/lib/vendor/fetchers/eurostar-quote.fetcher.js +3 -3
  121. package/esm2015/base/lib/vendor/fetchers/flight-quote.fetcher.js +3 -3
  122. package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
  123. package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
  124. package/esm2015/base/lib/vendor/fetchers/get-office.fetcher.js +11 -0
  125. package/esm2015/base/lib/vendor/fetchers/get-user-default-mi-value.fetcher.js +10 -0
  126. package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
  127. package/esm2015/base/lib/vendor/fetchers/search-users-can-book-for-fetcher.js +1 -1
  128. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  129. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  130. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  131. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  132. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
  133. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  134. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
  135. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  136. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  137. package/esm2015/base/lib/vendor/interfaces/Imybookings.service.js +1 -1
  138. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  139. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  140. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  141. package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
  142. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  143. package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
  144. package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
  145. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  146. package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
  147. package/esm2015/base/lib/vendor/models/traveller.object.js +21 -3
  148. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +129 -43
  149. package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
  150. package/esm2015/base/lib/vendor/services/logon.service.js +40 -3
  151. package/esm2015/base/lib/vendor/services/my-bookings.service.js +3 -2
  152. package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
  153. package/esm2015/base/lib/vendor/services/search.service.js +100 -117
  154. package/esm2015/base/lib/vendor/services/url.service.js +3 -1
  155. package/esm2015/base/lib/vendor/services/user.service.js +90 -12
  156. package/esm2015/base/lib/vendor/services/webtoken.service.js +14 -1
  157. package/esm2015/base/lib/vendor/types/graphql.types.js +21 -2
  158. package/esm2015/base/lib/vendor/types/types.js +32 -14
  159. package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
  160. package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
  161. package/esm2015/base/updaters.js +2 -1
  162. package/fesm2015/sabstravtech-obtservices-angular.js +1254 -1332
  163. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  164. package/fesm2015/sabstravtech-obtservices-base.js +3324 -839
  165. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  166. package/package.json +1 -1
@@ -3,7 +3,7 @@ import moment from 'moment';
3
3
  import { of, BehaviorSubject } from 'rxjs';
4
4
  import { take, tap } from 'rxjs/operators';
5
5
  import { BaseEnterpriseSearch } from './base-enterprise';
6
- import { LocationTypes, maxTravellerWellbeing, WellbeingEnum } from '../types/types';
6
+ import { DifferentInvokdedUserReasons, LocationTypes, maxTravellerWellbeing, WellbeingEnum } from '../types/types';
7
7
  import { RailClass, ServiceType, RailSearchJourneyType } from '../types/graphql.types';
8
8
  import { UserFavorurite } from './user-favourite.enum';
9
9
  import { ModalTypes } from './modal-types.enum';
@@ -22,11 +22,10 @@ export var RailJourneyFareType;
22
22
  })(RailJourneyFareType || (RailJourneyFareType = {}));
23
23
  export class RailEnterpriseSearch extends BaseEnterpriseSearch {
24
24
  constructor(Railfetcher, getRailStationFetcher, helpers, basketService, storageService, searchService, userService, modalService) {
25
- super(storageService, helpers);
25
+ super(storageService, helpers, searchService, userService);
26
26
  this.Railfetcher = Railfetcher;
27
27
  this.getRailStationFetcher = getRailStationFetcher;
28
28
  this.basketService = basketService;
29
- this.searchService = searchService;
30
29
  this.userService = userService;
31
30
  this.modalService = modalService;
32
31
  this.resultsSessionName = RailEnterpriseSearch.STORAGE_SESSION_RESULTS;
@@ -142,6 +141,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
142
141
  originalUserSearch: {}
143
142
  };
144
143
  this.updateTempParams(this.searchService.makeRailQuery(data.tempParams));
144
+ data.originalUserSearch.transactionIdentifier = null;
145
145
  this._originalUserSearch = data.originalUserSearch;
146
146
  if (searchService.shouldAddTravellerSubscription()) {
147
147
  searchService.travellerInformation.subscribe((travellers) => {
@@ -186,6 +186,12 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
186
186
  });
187
187
  }
188
188
  }
189
+ set transactionIdentifier(id) {
190
+ this.tempParams.transactionIdentifier = id;
191
+ }
192
+ get transactionIdentifier() {
193
+ return this.tempParams.transactionIdentifier;
194
+ }
189
195
  get bookRailFromLive() {
190
196
  return this._bookRailFromLive;
191
197
  }
@@ -403,6 +409,9 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
403
409
  return this.tempParams.applyRailcards;
404
410
  }
405
411
  set applyRailcards(apCards) {
412
+ if (!apCards) {
413
+ this.railCards = [];
414
+ }
406
415
  this.tempParams.applyRailcards = apCards;
407
416
  }
408
417
  get railCards() {
@@ -466,6 +475,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
466
475
  return null;
467
476
  }
468
477
  processResults(rawResults) {
478
+ this.transactionIdentifier = null;
469
479
  const setFares = (fare) => {
470
480
  var _a;
471
481
  return Object.assign(Object.assign({}, fare), { type: (_a = fare === null || fare === void 0 ? void 0 : fare.type) === null || _a === void 0 ? void 0 : _a.toLowerCase(), selected: false, selectable: true });
@@ -959,7 +969,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
959
969
  yield this.addDualSingleToBasket(sourceId, searchQuery, journey, inboundJourney, railFare, inboundRailFare);
960
970
  }
961
971
  }
962
- return false;
972
+ return DifferentInvokdedUserReasons.cancel;
963
973
  });
964
974
  }
965
975
  addOpenReturnToBasket(sourceId, searchQuery, journey, railFare) {
@@ -986,6 +996,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
986
996
  if (basket) {
987
997
  const outboundLegs = this.getLegsFromRailJourneyOption(outbound);
988
998
  const inboundLegs = this.getLegsFromRailJourneyOption(inbound);
999
+ const lowestTicket = this.findCheapestTicket();
989
1000
  const basketItem = {
990
1001
  basket: basket.id,
991
1002
  service: serviceId,
@@ -1055,7 +1066,11 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1055
1066
  co2PerItem: outbound.co2PerItem,
1056
1067
  co2PerPassenger: outbound.co2PerPassenger,
1057
1068
  outboundDate: outbound.arriveDateTime,
1058
- inboundDate: inbound.arriveDateTime
1069
+ inboundDate: inbound.arriveDateTime,
1070
+ lowestPrice: lowestTicket.amount != Number(outboundFare.price + inboundFare.price) || lowestTicket.currencyCode != outboundFare.currency ?
1071
+ lowestTicket.amount : null,
1072
+ lowestPriceCurrency: (lowestTicket.amount != Number(outboundFare.price + inboundFare.price) || lowestTicket.currencyCode != outboundFare.currency) ?
1073
+ lowestTicket.currencyCode : null
1059
1074
  };
1060
1075
  // if inTicketExtras or outTicketExtras exists add the object to basketItem
1061
1076
  if (inTicketExtras) {
@@ -1064,13 +1079,59 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1064
1079
  if (outTicketExtras) {
1065
1080
  basketItem.detail.outbound.ticketExtras = outTicketExtras;
1066
1081
  }
1067
- return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1082
+ const whatHappened = yield this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1083
+ if (whatHappened === DifferentInvokdedUserReasons.research) {
1084
+ this.performSearch();
1085
+ }
1086
+ return whatHappened;
1068
1087
  }
1069
- return Promise.resolve();
1088
+ return DifferentInvokdedUserReasons.continue;
1070
1089
  });
1071
1090
  }
1072
1091
  findCheapestTicket() {
1073
- return 0;
1092
+ if (this.cheapestPrice)
1093
+ return this.cheapestPrice;
1094
+ let cheapestOutboundTicket;
1095
+ let cheapestOpenReturnTicket;
1096
+ this.fullResults[0].outbound.forEach(element => {
1097
+ Object.keys(element.dualSingleJourneyFares).forEach(key => {
1098
+ const cheapestOnJourney = element.dualSingleJourneyFares[key].filter(a => a != null).sort(a => a.price)[0];
1099
+ if (cheapestOnJourney && (!cheapestOutboundTicket || cheapestOutboundTicket.price > cheapestOnJourney.price))
1100
+ cheapestOutboundTicket = cheapestOnJourney;
1101
+ });
1102
+ Object.keys(element.returnJourneyFares).forEach(key => {
1103
+ const cheapestOnJourney = element.returnJourneyFares[key].filter(a => a != null).sort(a => a.price)[0];
1104
+ if (cheapestOnJourney && (!cheapestOpenReturnTicket || cheapestOpenReturnTicket.price > cheapestOnJourney.price))
1105
+ cheapestOpenReturnTicket = cheapestOnJourney;
1106
+ });
1107
+ });
1108
+ let cheapestReturnTicket;
1109
+ if (this.fullResults[0].return) {
1110
+ this.fullResults[0].return.forEach(element => {
1111
+ Object.keys(element.dualSingleJourneyFares).forEach(key => {
1112
+ const cheapestOnJourney = element.dualSingleJourneyFares[key].filter(a => a != null).sort(a => a.price)[0];
1113
+ if (cheapestOnJourney && (!cheapestReturnTicket || cheapestReturnTicket.price > cheapestOnJourney.price))
1114
+ cheapestReturnTicket = cheapestOnJourney;
1115
+ });
1116
+ Object.keys(element.returnJourneyFares).forEach(key => {
1117
+ const cheapestOnJourney = element.returnJourneyFares[key].filter(a => a != null).sort(a => a.price)[0];
1118
+ if (cheapestOnJourney && (!cheapestOpenReturnTicket || cheapestOpenReturnTicket.price > cheapestOnJourney.price))
1119
+ cheapestOpenReturnTicket = cheapestOnJourney;
1120
+ });
1121
+ });
1122
+ }
1123
+ if (cheapestOpenReturnTicket) {
1124
+ if (cheapestReturnTicket) {
1125
+ if (cheapestOutboundTicket.price + cheapestReturnTicket.price < cheapestOpenReturnTicket.price && cheapestOutboundTicket.currency == cheapestReturnTicket.currency)
1126
+ return { amount: cheapestOutboundTicket.price + cheapestReturnTicket.price, currencyCode: cheapestOutboundTicket.currency };
1127
+ }
1128
+ else if (cheapestOutboundTicket.price < cheapestOpenReturnTicket.price)
1129
+ return { amount: cheapestOutboundTicket.price, currencyCode: cheapestOutboundTicket.currency };
1130
+ return { amount: cheapestOpenReturnTicket.price, currencyCode: cheapestOpenReturnTicket.currency };
1131
+ }
1132
+ else if (cheapestReturnTicket)
1133
+ return { amount: cheapestOutboundTicket.price + cheapestReturnTicket.price, currencyCode: cheapestOutboundTicket.currency };
1134
+ return { amount: cheapestOutboundTicket.price, currencyCode: cheapestOutboundTicket.currency };
1074
1135
  }
1075
1136
  resetQuery() {
1076
1137
  this.updateTempParams(this.searchService.makeRailQuery());
@@ -1125,6 +1186,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1125
1186
  this.results.next([]);
1126
1187
  if (this.isValid.value) {
1127
1188
  const query = this.getSearchQuery(this.tempParams);
1189
+ this.tempParams.transactionIdentifier = null;
1128
1190
  this._originalUserSearch = Object.freeze(this.helpers.clone(this.tempParams));
1129
1191
  this.storageService.setSessionItem(RailEnterpriseSearch.STORAGE_SESSION_PARAMS, {
1130
1192
  tempParams: this.tempParams,
@@ -1245,8 +1307,9 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1245
1307
  returnDepartureDateTime: this.helpers.formatGraphQLDateTime(tempParams.inBoundDateTime),
1246
1308
  viaLocationId: (_f = (_e = tempParams.viaLocation) === null || _e === void 0 ? void 0 : _e.railstation) === null || _f === void 0 ? void 0 : _f.id,
1247
1309
  railCardQualifiers: (_g = tempParams.railCards) === null || _g === void 0 ? void 0 : _g.map((railCard) => {
1248
- return railCard.code;
1249
- })
1310
+ return railCard === null || railCard === void 0 ? void 0 : railCard.code;
1311
+ }),
1312
+ transactionIdentifier: tempParams.transactionIdentifier
1250
1313
  };
1251
1314
  if (tempParams.noOfChildren === 0) {
1252
1315
  query.children = null;
@@ -1298,7 +1361,105 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1298
1361
  return null;
1299
1362
  }
1300
1363
  }
1301
- updateFromPreviousSearches(previousItems) { }
1364
+ updateFromPreviousSearches(previousItems) {
1365
+ console.log(previousItems);
1366
+ if (previousItems.FLIGHT) {
1367
+ try {
1368
+ this.outBoundDateTime = moment(previousItems.FLIGHT.outboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
1369
+ if (this.outBoundDateTime.minutes() % 30)
1370
+ this.outBoundDateTime = this.outBoundDateTime.subtract(this.outBoundDateTime.minutes() % 30, "minutes");
1371
+ if (previousItems.FLIGHT.inboundDate) {
1372
+ this.inBoundDateTime = moment(previousItems.FLIGHT.inboundDate.replace("T", "").split(".")[0], "YYYY-MM-DDhh:mm:ss");
1373
+ if (this.inBoundDateTime.minutes() % 30)
1374
+ this.inBoundDateTime = this.inBoundDateTime.subtract(this.inBoundDateTime.minutes() % 30, "minutes");
1375
+ }
1376
+ }
1377
+ catch (_a) {
1378
+ console.error('Error trying to prepopulate Rail from flight item');
1379
+ }
1380
+ }
1381
+ }
1382
+ updateSearchFromExpiredBasketItem(basketItem) {
1383
+ const searchRailQuery = basketItem.searchQuery;
1384
+ this.chosenSearchType = searchRailQuery.journeyType;
1385
+ this.chosenSearchClass = searchRailQuery.class;
1386
+ this.extraTime = searchRailQuery.extraTimeToChange;
1387
+ // get outBoundDateTime, inBoundDateTime and outboundCriteria ,returnCriteria
1388
+ this.outBoundDateTime = searchRailQuery.outboundDepartureDateTime
1389
+ ? moment(searchRailQuery.outboundDepartureDateTime)
1390
+ : moment(searchRailQuery.outboundArrivalDateTime);
1391
+ this.outboundCriteria = this.getCriteria(searchRailQuery.outboundDepartureDateTime, searchRailQuery.outboundArrivalDateTime);
1392
+ if (searchRailQuery.journeyType === RailSearchJourneyType.ReturnJourney) {
1393
+ this.inBoundDateTime = searchRailQuery.returnDepartureDateTime
1394
+ ? moment(searchRailQuery.returnDepartureDateTime)
1395
+ : moment(searchRailQuery.returnArrivalDateTime);
1396
+ this.returnCriteria = this.getCriteria(searchRailQuery.returnDepartureDateTime, searchRailQuery.returnArrivalDateTime);
1397
+ }
1398
+ if (searchRailQuery.journeyType === RailSearchJourneyType.OpenReturnJourney) {
1399
+ this.openReturn = true;
1400
+ }
1401
+ if (searchRailQuery.departureLocationId) {
1402
+ this.searchService
1403
+ .getRailStationById(searchRailQuery.departureLocationId)
1404
+ .subscribe((departureStation) => {
1405
+ this.travellingFrom = {
1406
+ name: departureStation.name,
1407
+ railstation: {
1408
+ id: departureStation.id,
1409
+ name: departureStation.name,
1410
+ nlcCode: departureStation.nlcCode,
1411
+ stationCode: departureStation.stationCode,
1412
+ trainlineCode: departureStation.trainlineCode,
1413
+ trainlineUniqueCode: departureStation.trainlineUniqueCode
1414
+ }
1415
+ };
1416
+ });
1417
+ }
1418
+ if (searchRailQuery.arrivalLocationId) {
1419
+ this.searchService
1420
+ .getRailStationById(searchRailQuery.arrivalLocationId)
1421
+ .subscribe((arrivalStation) => {
1422
+ this.travellingTo = {
1423
+ name: arrivalStation.name,
1424
+ railstation: {
1425
+ id: arrivalStation.id,
1426
+ name: arrivalStation.name,
1427
+ nlcCode: arrivalStation.nlcCode,
1428
+ stationCode: arrivalStation.stationCode,
1429
+ trainlineCode: arrivalStation.trainlineCode,
1430
+ trainlineUniqueCode: arrivalStation.trainlineUniqueCode
1431
+ }
1432
+ };
1433
+ });
1434
+ }
1435
+ if (searchRailQuery.viaLocationId) {
1436
+ this.via = true;
1437
+ this.searchService
1438
+ .getRailStationById(searchRailQuery.viaLocationId)
1439
+ .subscribe((viaLocation) => {
1440
+ this.viaLocation = {
1441
+ name: viaLocation.name,
1442
+ railstation: {
1443
+ id: viaLocation.id,
1444
+ name: viaLocation.name,
1445
+ nlcCode: viaLocation.nlcCode,
1446
+ stationCode: viaLocation.stationCode,
1447
+ trainlineCode: viaLocation.trainlineCode,
1448
+ trainlineUniqueCode: viaLocation.trainlineUniqueCode
1449
+ }
1450
+ };
1451
+ });
1452
+ }
1453
+ else {
1454
+ this.viaLocation = null;
1455
+ }
1456
+ // add Travellers
1457
+ if (basketItem.users) {
1458
+ basketItem.users.forEach((user) => {
1459
+ this.searchService.addTraveller(user);
1460
+ });
1461
+ }
1462
+ }
1302
1463
  getRailStation(code, isLoading) {
1303
1464
  if (code.length === 3) {
1304
1465
  isLoading === null || isLoading === void 0 ? void 0 : isLoading.next(true);
@@ -1352,6 +1513,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1352
1513
  // };
1353
1514
  // }
1354
1515
  // );
1516
+ const lowestTicket = this.findCheapestTicket();
1355
1517
  const basketItem = {
1356
1518
  basket: basket.id,
1357
1519
  service: serviceId.toString(),
@@ -1399,15 +1561,23 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1399
1561
  searchQuery: railQuery,
1400
1562
  co2PerItem: railJourneyOption.co2PerItem,
1401
1563
  co2PerPassenger: railJourneyOption.co2PerPassenger,
1402
- outboundDate: railJourneyOption.departDateTime
1564
+ outboundDate: railJourneyOption.departDateTime,
1565
+ lowestPrice: lowestTicket.amount != Number(railFare.price) || lowestTicket.currencyCode != railFare.currency ?
1566
+ lowestTicket.amount : null,
1567
+ lowestPriceCurrency: (lowestTicket.amount != Number(railFare.price) || lowestTicket.currencyCode != railFare.currency) ?
1568
+ lowestTicket.currencyCode : null
1403
1569
  };
1404
1570
  // if ticketExtras exists add the object to basketItem
1405
1571
  if (outTicketExtras) {
1406
1572
  basketItem.detail.outbound.ticketExtras = outTicketExtras;
1407
1573
  }
1408
- return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, railFare.requiresReason);
1574
+ const whatHappened = yield this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, railFare.requiresReason);
1575
+ if (whatHappened === DifferentInvokdedUserReasons.research) {
1576
+ this.performSearch();
1577
+ }
1578
+ return whatHappened;
1409
1579
  }
1410
- return Promise.resolve();
1580
+ return DifferentInvokdedUserReasons.cancel;
1411
1581
  });
1412
1582
  }
1413
1583
  addReturnJourneyToBasket(serviceId, tempParams, outbound, inbound, outboundFare, inboundFare) {
@@ -1428,6 +1598,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1428
1598
  if (basket) {
1429
1599
  const outboundLegs = this.getLegsFromRailJourneyOption(outbound);
1430
1600
  const inboundLegs = this.getLegsFromRailJourneyOption(inbound);
1601
+ const lowestTicket = this.findCheapestTicket();
1431
1602
  const basketItem = {
1432
1603
  basket: basket.id,
1433
1604
  service: serviceId,
@@ -1495,15 +1666,23 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1495
1666
  co2PerItem: outbound.co2PerItem,
1496
1667
  co2PerPassenger: outbound.co2PerPassenger,
1497
1668
  outboundDate: outbound.arriveDateTime,
1498
- inboundDate: inbound.arriveDateTime
1669
+ inboundDate: inbound.arriveDateTime,
1670
+ lowestPrice: lowestTicket.amount != Number(outboundFare.price) || lowestTicket.currencyCode != outboundFare.currency ?
1671
+ lowestTicket.amount : null,
1672
+ lowestPriceCurrency: (lowestTicket.amount != Number(outboundFare.price) || lowestTicket.currencyCode != outboundFare.currency) ?
1673
+ lowestTicket.currencyCode : null
1499
1674
  };
1500
1675
  // if ticketExtras exists add the object to basketItem
1501
1676
  if (ticketExtras) {
1502
1677
  basketItem.detail.outbound.ticketExtras = ticketExtras;
1503
1678
  }
1504
- return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1679
+ const whatHappened = yield this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1680
+ if (whatHappened === DifferentInvokdedUserReasons.research) {
1681
+ this.performSearch();
1682
+ }
1683
+ return whatHappened;
1505
1684
  }
1506
- return Promise.resolve(false);
1685
+ return DifferentInvokdedUserReasons.cancel;
1507
1686
  });
1508
1687
  }
1509
1688
  removedScheduledPlatformFromCallingPoints(railLegs) {
@@ -1594,7 +1773,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1594
1773
  .clone(this.fullResults)
1595
1774
  .reduce((accum, next) => {
1596
1775
  const temp = Object.assign(Object.assign({}, next), { outbound: (next.outbound || []).map((journey) => {
1597
- return Object.assign(Object.assign({}, journey), { dualSingleJourneyFares: this.helpers.map(journey.dualSingleJourneyFares || {}, setRules('dualSingleJourneyFares', journey, RailDirection.Outbound)), returnJourneyFares: this.helpers.map(journey.returnJourneyFares || {}, setRules('returnJourneyFares', journey, RailDirection.Outbound)), openReturnJourneyFares: this.helpers.map(journey.openReturnJourneyFares || {}, setRules('openReturnJourneyFares', journey, RailDirection.Outbound)) });
1776
+ return Object.assign(Object.assign({}, journey), { dualSingleJourneyFares: this.helpers.map(journey.dualSingleJourneyFares || {}, setRules('dualSingleJourneyFares', journey, RailDirection.Outbound)), singleJourneyFares: this.helpers.map(journey.singleJourneyFares || {}, setRules('singleJourneyFares', journey, RailDirection.Outbound)), returnJourneyFares: this.helpers.map(journey.returnJourneyFares || {}, setRules('returnJourneyFares', journey, RailDirection.Outbound)), openReturnJourneyFares: this.helpers.map(journey.openReturnJourneyFares || {}, setRules('openReturnJourneyFares', journey, RailDirection.Outbound)) });
1598
1777
  }), return: (next.return || []).map((journey) => {
1599
1778
  return Object.assign(Object.assign({}, journey), { returnJourneyFares: this.helpers.map(journey.returnJourneyFares || {}, setSelected('returnJourneyFares', journey)), dualSingleJourneyFares: this.helpers.map(journey.dualSingleJourneyFares || {}, setSelected('dualSingleJourneyFares', journey)), singleJourneyFares: this.helpers.map(journey.singleJourneyFares || {}, setRules('singleJourneyFares', journey, 'return')), openReturnJourneyFares: this.helpers.map(journey.openReturnJourneyFares || {}, setRules('openReturnJourneyFares', journey, 'return')) });
1600
1779
  }) });
@@ -1696,24 +1875,30 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1696
1875
  this.noOfChildren = fav.children;
1697
1876
  this.chosenSearchType = fav.journeyType;
1698
1877
  switch (fav.class) {
1699
- case "First":
1878
+ case 'First':
1700
1879
  this.chosenRailClass = RailClass.First;
1701
1880
  break;
1702
- case "Any":
1881
+ case 'Any':
1703
1882
  this.chosenRailClass = RailClass.All;
1704
1883
  break;
1705
- case "Standard":
1884
+ case 'Standard':
1706
1885
  this.chosenRailClass = RailClass.Standard;
1707
1886
  break;
1708
1887
  }
1709
- this.getRailStationFetcher.fetchList({ id: fav.departureLocationId }).subscribe(a => {
1888
+ this.getRailStationFetcher
1889
+ .fetchList({ id: fav.departureLocationId })
1890
+ .subscribe((a) => {
1710
1891
  this.travellingFrom = a;
1711
1892
  });
1712
- this.getRailStationFetcher.fetchList({ id: fav.arrivalLocationId }).subscribe(a => {
1893
+ this.getRailStationFetcher
1894
+ .fetchList({ id: fav.arrivalLocationId })
1895
+ .subscribe((a) => {
1713
1896
  this.travellingTo = a;
1714
1897
  });
1715
1898
  if (fav.viaLocationId) {
1716
- this.getRailStationFetcher.fetchList({ id: fav.viaLocationId }).subscribe(a => {
1899
+ this.getRailStationFetcher
1900
+ .fetchList({ id: fav.viaLocationId })
1901
+ .subscribe((a) => {
1717
1902
  this.viaLocation = a;
1718
1903
  });
1719
1904
  this.via = true;
@@ -1729,4 +1914,4 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1729
1914
  RailEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_rail';
1730
1915
  RailEnterpriseSearch.STORAGE_SESSION_RESULTS = 'rail_results';
1731
1916
  RailEnterpriseSearch.PASSING_POINT = 'Passing';
1732
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFpbC1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBR0wsYUFBYSxFQUNiLHFCQUFxQixFQWNyQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBRUwsU0FBUyxFQUtULFdBQVcsRUFFWCxxQkFBcUIsRUFPdEIsTUFBTSx3QkFBd0IsQ0FBQztBQW1DaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXZCLE1BQU0sQ0FBTixJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIsNkNBQXVCLENBQUE7SUFDdkIsOENBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQUhXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFHN0I7QUFFRCxNQUFNLENBQU4sSUFBWSxtQkFHWDtBQUhELFdBQVksbUJBQW1CO0lBQzdCLHdDQUFpQixDQUFBO0lB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QyxFQUFFLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlFLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFBO1lBQ3ZCLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFDO2dCQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDMUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUE7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFBO2dCQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFBO2FBQ2hCO2lCQUVJO2dCQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO2dCQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQTthQUNqQjtZQUNELFFBQVE7UUFDVixDQUFDO0tBQUE7O0FBcjhFZSwyQ0FBc0IsR0FBRyxhQUFhLENBQUM7QUFDdkMsNENBQXVCLEdBQUcsY0FBYyxDQUFDO0FBQ3pDLGtDQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7XHJcbiAgQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXMsXHJcbiAgQ2hlYXBlc3RSYWlsUHJpY2VzLFxyXG4gIExvY2F0aW9uVHlwZXMsXHJcbiAgbWF4VHJhdmVsbGVyV2VsbGJlaW5nLFxyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgT0JUUmFpbEZhcmUsXHJcbiAgT0JUUmFpbEZhcmVUeXBlcyxcclxuICBPQlRSYWlsSW50ZXJuYWxGYXJlLFxyXG4gIE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb24sXHJcbiAgT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gIE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gIE9CVFJhaWxRdW90ZVJlc3VsdCxcclxuICBPQlRSYWlsUXVvdGVSZXN1bHRBcnJheSxcclxuICBSYWlsV2VsbGJlaW5nT2JqZWN0SW50ZXJmYWNlLFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBSZWN1cnNpdmVQYXJ0aWFsLFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXHJcbiAgV2VsbGJlaW5nRW51bVxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNrZXRJdGVtLFxyXG4gIFJhaWxDbGFzcyxcclxuICBSYWlsSm91cm5leU9wdGlvbixcclxuICBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcixcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIFJhaWxUaWNrZXRFeHRyYSxcclxuICBSYWlsU2VhcmNoSm91cm5leVR5cGUsXHJcbiAgUmFpbEpvdXJuZXlGYXJlLFxyXG4gIFJhaWxTdGF0aW9uLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBSYWlsQWNjb3VudCxcclxuICBSYWlsVGlja2V0UXVldWUsXHJcbiAgUmFpbEpvdXJuZXlMZWdcclxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNlUmFpbFF1b3RlRmV0Y2hlcixcclxuICBSYWlsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL3JhaWwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcixcclxuICBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXJhaWwtc3RhdGlvbi5mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWVudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxyXG4gIFJhaWxUZW1wUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JcmFpbC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHsgSVJhaWxBaXJwb3J0RXhwcmVzc1N0YXRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLWFpcnBvcnQtZXhwcmVzcy1zdGF0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFjY291bnRzTGlzdCxcclxuICBSYWlsQmFza2V0SXRlbSxcclxuICBUaWNrZXRFeHRyYXMsXHJcbiAgVGlja2V0UXVldWVMaXN0XHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLWJhc2tldC1pdGVtLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJhaWxSZWNlbnRTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLXJlY2VudC1zZWFyY2gtYXJncy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBSYWlsUXVvdGVSZXN1bHQsIFJhaWxRdW90ZVJlc3VsdEFycmF5IH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxSdWxlRW5pdHksXHJcbiAgUmFpbFJ1bGVFbml0eUtleXMsXHJcbiAgUmFpbFN1bW1hcnlcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3N1bW1hcnktaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVXNlckZhdm9ydXJpdGUgfSBmcm9tICcuL3VzZXItZmF2b3VyaXRlLmVudW0nO1xyXG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi9tb2RhbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHsgSVJhaWxTZWxlY3RlZFRpY2tldCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1zZWxlY3RlZC10aWNrZXQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUmFpbERpcmVjdGlvbiB9IGZyb20gJy4vcmFpbC1kaXJlY3Rpb24uZW51bSc7XHJcbmltcG9ydCB7IFJhaWxJbmRleFRvVGlja2V0IH0gZnJvbSAnLi9yYWlsLWluZGV4LXRvLXRpY2tldCc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcblxyXG5leHBvcnQgZW51bSBSYWlsU2VhcmNoQ3JpdGVyaWEge1xyXG4gIERlcGFydCA9ICdEZXBhcnQgQWZ0ZXInLFxyXG4gIEFycml2ZSA9ICdBcnJpdmUgQmVmb3JlJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSYWlsSm91cm5leUZhcmVUeXBlIHsgLy8gbWF5IG5lZWQgdG8gYmUgZXhwYW5kZWQgZm9yIGR1YWwvc3BsaXRcclxuICBSZXR1cm4gPSAnUmV0dXJuJyxcclxuICBTaW5nbGUgPSAnU2luZ2xlJ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmFpbEVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBRIGV4dGVuZHMgUmFpbFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBHUlNfUSBleHRlbmRzIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgUmFpbFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgICBPQlRSYWlsUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIFJhaWxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBwcml2YXRlIF9zZWxlY3RlZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldDtcclxuICBwcml2YXRlIF9zZWxlY3RlZEluYm91bmRUaWNrZXQ6IElSYWlsU2VsZWN0ZWRUaWNrZXQ7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRTdW1tYXJ5OiBSYWlsUnVsZUVuaXR5O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkSW5ib3VuZFN1bW1hcnk6IFJhaWxSdWxlRW5pdHk7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRTZWN0aW9uOiBPQlRSYWlsRmFyZVR5cGVzO1xyXG4gIHByaXZhdGUgYWx0ZXJuYXRpdmVXZWxsYmVpbmc6IFJhaWxXZWxsYmVpbmdPYmplY3RJbnRlcmZhY2U7XHJcblxyXG4gIGdldCBzZWxlY3RlZFNlY3Rpb24oKTogT0JUUmFpbEZhcmVUeXBlcyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRTZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkVGlja2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGlja2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlbGVjdGVkVGlja2V0KHNlbGVjdGVkVGlja2V0OiB7XHJcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbjtcclxuICAgIGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZTtcclxuICB9KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRpY2tldCA9IHNlbGVjdGVkVGlja2V0O1xyXG4gICAgaWYgKCF0aGlzLl9zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnkgPSBudWxsO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnkgPSB0aGlzLl9maW5kU3VtbWFyeShcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxyXG4gICAgICAgIHRoaXMuc3VtbWFyeS5vdXRib3VuZCB8fCBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkSW5ib3VuZFRpY2tldCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRJbmJvdW5kVGlja2V0KHNlbGVjdGVkVGlja2V0OiBJUmFpbFNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBzZWxlY3RlZFRpY2tldDtcclxuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0KSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFN1bW1hcnkgPSB0aGlzLnN1bW1hcnkucmV0dXJuLmZpbmQoXHJcbiAgICAgICAgKHZhbHVlOiBSYWlsUnVsZUVuaXR5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUuam91cm5leUhhc2ggPT09IHRoaXMuX3NlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2g7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX3JhaWwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyYWlsX3Jlc3VsdHMnO1xyXG4gIHN0YXRpYyByZWFkb25seSBQQVNTSU5HX1BPSU5UID0gJ1Bhc3NpbmcnO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1JldHVybicsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leSB9XHJcbiAgICAvLyB7IGRpc3BsYXk6ICdPcGVuIFJldHVybicsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXkgfSxcclxuICAgIC8vIHsgZGlzcGxheTogJ0R1YWwgU2luZ2xlcycsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuRHVhbFNpbmdsZUpvdXJuZXkgfSxcclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBSYWlsQ2xhc3MuQWxsIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdTdGFuZGFyZCcsIHZhbHVlOiBSYWlsQ2xhc3MuU3RhbmRhcmQgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZpcnN0JywgdmFsdWU6IFJhaWxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFpcnBvcnRFeHByZXNzU3RhdGlvbnM6IElSYWlsQWlycG9ydEV4cHJlc3NTdGF0aW9uc1tdID0gW1xyXG4gICAgeyBjb2RlOiAnSFAxLTMnLCBuYW1lOiAnSGVhdGhyb3cgVDEtMyAtIFBhZGRpbmd0b24nIH0sXHJcbiAgICB7IGNvZGU6ICdIUDQnLCBuYW1lOiAnSGVhdGhyb3cgVDQgLSBQYWRkaW5ndG9uJyB9LFxyXG4gICAgeyBjb2RlOiAnSFA1JywgbmFtZTogJ0hlYXRocm93IFQ1IC0gUGFkZGluZ3RvbicgfSxcclxuICAgIHsgY29kZTogJ1BIMS0zJywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUMS0zJyB9LFxyXG4gICAgeyBjb2RlOiAnUEg0JywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUNCcgfSxcclxuICAgIHsgY29kZTogJ1BINScsIG5hbWU6ICdQYWRkaW5ndG9uIC0gSGVhdGhyb3cgVDUnIH0sXHJcbiAgICB7IGNvZGU6ICdHVicsIG5hbWU6ICdHYXR3aWNrIC0gVmljdG9yaWEnIH0sXHJcbiAgICB7IGNvZGU6ICdWRycsIG5hbWU6ICdWaWN0b3JpYSAtIEdhdHdpY2snIH0sXHJcbiAgICB7IGNvZGU6ICdTTCcsIG5hbWU6ICdTdGFuc3RlZCAtIExpdmVycG9vbCBTdHJlZXQnIH0sXHJcbiAgICB7IGNvZGU6ICdMUycsIG5hbWU6ICdMaXZlcnBvb2wgU3RyZWV0IC0gU3RhbnN0ZWQnIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgYWlycG9ydEV4cHJlc3NTdGF0aW9uc0NvZGVzOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7IGRlcDogc3RyaW5nOyBhcnI6IHN0cmluZyB9O1xyXG4gIH0gPSB7XHJcbiAgICAnSFAxLTMnOiB7IGRlcDogJ0hYWCcsIGFycjogJ1BBRCcgfSxcclxuICAgICdQSDEtMyc6IHsgZGVwOiAnUEFEJywgYXJyOiAnSFhYJyB9LFxyXG4gICAgSFA0OiB7IGRlcDogJ0hBRicsIGFycjogJ1BBRCcgfSxcclxuICAgIFBINDogeyBkZXA6ICdQQUQnLCBhcnI6ICdIQUYnIH0sXHJcbiAgICBIUDU6IHsgZGVwOiAnSFdWJywgYXJyOiAnUEFEJyB9LFxyXG4gICAgUEg1OiB7IGRlcDogJ1BBRCcsIGFycjogJ0hXVicgfSxcclxuICAgIEdWOiB7IGRlcDogJ0dUVycsIGFycjogJ1ZJQycgfSxcclxuICAgIFZHOiB7IGRlcDogJ1ZJQycsIGFycjogJ0dUVycgfSxcclxuICAgIFNMOiB7IGRlcDogJ1NTRCcsIGFycjogJ0xTVCcgfSxcclxuICAgIExTOiB7IGRlcDogJ0xTVCcsIGFycjogJ1NTRCcgfVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyByYWlsQ3JpdGVyaWEgPSBbUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydCwgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZV07XHJcblxyXG4gIHB1YmxpYyB0cmF2ZWxDYXJkcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1lvdW5nIHBlcnNvbnMgcmFpbGNhcmQnLCB2YWx1ZTogJ1lORycgfSxcclxuICAgIHsgZGlzcGxheTogJ0Rpc2FiaWxpdHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0RJUycgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZhbWlseSByYWlsY2FyZCcsIHZhbHVlOiAnRkFNJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRm9yY2VzIHJhaWxjYXJkJywgdmFsdWU6ICdITUYnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdUcmF2ZWwgYWdlbmN5IGRpc2NvdW50JywgdmFsdWU6ICdUQUQnIH1cclxuICBdO1xyXG5cclxuICAvLyBZTkc6IFwiWW91bmcgcGVyc29ucyByYWlsY2FyZFwiLFxyXG4gIC8vIERJUzogXCJEaXNhYmlsaXR5IHJhaWxjYXJkXCIsXHJcbiAgLy8gRkFNOiBcIkZhbWlseSByYWlsY2FyZFwiLFxyXG4gIC8vIEhNRjogXCJGb3JjZXMgcmFpbGNhcmRcIixcclxuICAvLyBUQUQ6IFwiVHJhdmVsIGFnZW5jeSBkaXNjb3VudFwiXHJcbiAgcHVibGljIHJlbW92ZVBhc3NpbmdQb2ludHNGcm9tUmVzdWx0cyA9IHRydWU7XHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuUmFpbDtcclxuXHJcbiAgcHJpdmF0ZSBfYm9va1JhaWxGcm9tTGl2ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjaGVhcGVzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xyXG4gICAgb3V0Ym91bmRDaGVhcGVzdDogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgaW5ib3VuZENoZWFwZXN0OiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXRSZXR1cm46IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldER1YWw6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gIH0+KHtcclxuICAgIG91dGJvdW5kQ2hlYXBlc3Q6IHtcclxuICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGluYm91bmRDaGVhcGVzdDoge1xyXG4gICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9LFxyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgIH0sXHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXREdWFsOiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBnZXQgYm9va1JhaWxGcm9tTGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ib29rUmFpbEZyb21MaXZlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJvb2tSYWlsRnJvbUxpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Jvb2tSYWlsRnJvbUxpdmUgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHVibGljIG1pbk91dGJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwdWJsaWMgbWluSW5ib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHVibGljIG1heERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICAvLyBFTlQtMTU1NyAtIG1heCBFdm9sdmkgc2VhcmNoIGRhdGUgaXMgNiBtb250aHMgaW4gZnV0dXJlXHJcbiAgICB5ZWFyOiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLmFkZCgnbW9udGgnLCA2KS5tb250aCgpLFxyXG4gICAgZGF5OiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIC8vIHByaXZhdGUgX2Nob3NlblRpY2tldEdyb3VwOiBSYWlsVGlja2V0R3JvdXA7XHJcbiAgcHJpdmF0ZSBfdmlhTG9jYXRpb246IHN0cmluZztcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nRnJvbTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdUbzogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfb3JpZ2luYWxVc2VyU2VhcmNoOiBSYWlsVGVtcFBhcmFtcztcclxuICBwdWJsaWMgc3VtbWFyeTogUmFpbFN1bW1hcnkgPSB7fTtcclxuXHJcbiAgZ2V0IG9wZW5SZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0IG9wZW5SZXR1cm4obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICBpZiAobmV3VmFsKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID1cclxuICAgICAgICBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5O1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hUeXBlKG5ld1R5cGU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSBuZXdUeXBlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZBZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBub09mQWR1bHRzKGFkdWx0czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyA9IGFkdWx0cztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQ2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vT2ZDaGlsZHJlbihjaGlsZHJlbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbztcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nVG8odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbyA9IHR0O1xyXG5cclxuICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0dD8uaWQpe1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5pZFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmF2ZWxsaW5nRnJvbTtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nRnJvbSh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20gPSB0dDtcclxuICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHQ/LmlkKXtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5pZFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5SYWlsQ2xhc3MoKTogUmFpbENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuUmFpbENsYXNzKG5ld0NsYXNzOiBSYWlsQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyA9IG5ld0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaENsYXNzKCk6IFJhaWxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblNlYXJjaENsYXNzKGNsYXNzUjogUmFpbENsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBjbGFzc1I7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZXh0cmFUaW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5leHRyYVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZXh0cmFUaW1lKGV4dHJhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZXh0cmFUaW1lID0gZXh0cmE7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWE7XHJcbiAgfVxyXG5cclxuICBzZXQgdmlhKHZpYTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYSA9IHZpYTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2aWFMb2NhdGlvbigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCB2aWFMb2NhdGlvbih2aWFMb2NhdGlvbjogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24gPSB2aWFMb2NhdGlvbjtcclxuXHJcbiAgICB0aGlzLl92aWFMb2NhdGlvbiA9ICcnO1xyXG4gICAgaWYgKHZpYUxvY2F0aW9uPy5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdmlhTG9jYXRpb24gPSB2aWFMb2NhdGlvbi5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgb3V0Qm91bmREYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRCb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcwNzAwJztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1pbkluYm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiBuZXdEYXRlVGltZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiBuZXdEYXRlVGltZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiBuZXdEYXRlVGltZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgJiZcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgJiZcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lLmlzQWZ0ZXIodGhpcy5pbkJvdW5kRGF0ZVRpbWUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aGlzLmluQm91bmREYXRlVGltZVxyXG4gICAgICAgIC5zZXQoJ2RhdGUnLCBuZXdEYXRlVGltZS5kYXRlKCkpXHJcbiAgICAgICAgLnNldCgnbW9udGgnLCBuZXdEYXRlVGltZS5tb250aCgpKVxyXG4gICAgICAgIC5zZXQoJ3llYXInLCBuZXdEYXRlVGltZS55ZWFyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRib3VuZENyaXRlcmlhKCk6IFJhaWxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRDcml0ZXJpYShuZXdDcml0OiBSYWlsU2VhcmNoQ3JpdGVyaWEpIHtcclxuICAgIC8vIGNvbnNvbGUud2FybihgKysrIFNldHRpbmcgTmV3IENyaXRlcmlhOiAke25ld0NyaXR9ICsrK2ApO1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpbkJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluQm91bmREYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBpbkJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9yZXR1cm5fdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcxNjAwJztcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBvdXRib3VuZF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgb3V0Ym91bmRfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCByZXR1cm5fZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcmV0dXJuX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIGdldCByZXR1cm5Dcml0ZXJpYSgpOiBSYWlsU2VhcmNoQ3JpdGVyaWEge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5Dcml0ZXJpYShuZXdDcml0OiBSYWlsU2VhcmNoQ3JpdGVyaWEpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYSA9IG5ld0NyaXQ7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FybmV0VGlja2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgY2FybmV0VGlja2V0KG5ld0Nhcm5ldDogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNhcm5ldFRpY2tldCA9IG5ld0Nhcm5ldDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNhYmxlQXV0b0Rpc2NvdW50cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGlzYWJsZUF1dG9EaXNjb3VudHM7XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzYWJsZUF1dG9EaXNjb3VudHMobmV3RGlzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGlzYWJsZUF1dG9EaXNjb3VudHMgPSBuZXdEaXM7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcHJpb3JpdGlzZUJ5UHJpY2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByaW9yaXRpc2VCeVByaWNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHByaW9yaXRpc2VCeVByaWNlKG5ld1ByaW9yaXR5OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJpb3JpdGlzZUJ5UHJpY2UgPSBuZXdQcmlvcml0eTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBhcHBseVJhaWxjYXJkcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXBwbHlSYWlsY2FyZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgYXBwbHlSYWlsY2FyZHMoYXBDYXJkczogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFwcGx5UmFpbGNhcmRzID0gYXBDYXJkcztcclxuICB9XHJcblxyXG4gIGdldCByYWlsQ2FyZHMoKTogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJhaWxDYXJkcztcclxuICB9XHJcblxyXG4gIHNldCByYWlsQ2FyZHModmFsdWU6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yYWlsQ2FyZHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg0OClcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpOiB7IGNvZGU6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFpcnBvcnRFeHByZXNzU3RhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0RXhwcmVzc1N0YXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgYWlycG9ydEV4cHJlc3NTdGF0aW9uKHN0YXRpb246IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHN0YXRpb247XHJcbiAgICB0aGlzLl9zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25zKCk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBaXJwb3J0RXhwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcztcclxuICB9XHJcblxyXG4gIHNldCBpc0FpcnBvcnRFeHByZXNzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9uSWRzKHN0YXRpb25JZHM6IHtcclxuICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHN0cmluZztcclxuICAgIGFycml2YWxMb2NhdGlvbklkOiBzdHJpbmc7XHJcbiAgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBkZXBhcnR1cmVMb2NhdGlvbklkLCBhcnJpdmFsTG9jYXRpb25JZCB9ID0gc3RhdGlvbklkcztcclxuICAgIGlmIChkZXBhcnR1cmVMb2NhdGlvbklkICYmIGFycml2YWxMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gYXJyaXZhbExvY2F0aW9uSWQ7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRTdW1tYXJ5KFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBzdW1tYXJ5OiBSYWlsUnVsZUVuaXR5W11cclxuICApIHtcclxuICAgIHJldHVybiBzdW1tYXJ5LmZpbmQoKHZhbHVlOiBSYWlsUnVsZUVuaXR5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBSYWlsZmV0Y2hlcjogQmFzZVJhaWxRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcblxyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICBxdWVyeToge307XHJcbiAgICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IFJhaWxUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgcXVlcnk6IHt9LFxyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBSYWlsVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBSYWlsVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VSYWlsUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByYXdSZXN1bHRzOiBSYWlsUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIGNvbnN0IHNldEZhcmVzID0gKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZmFyZSxcclxuICAgICAgICB0eXBlOiBmYXJlPy50eXBlPy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc29ydEZhcmVzID0gKFxyXG4gICAgICBqb3VybmV5czogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj5bXVxyXG4gICAgKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdID0+IHtcclxuICAgICAgY29uc3QgdG9SZXR1cm4gPSB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUoam91cm5leXMpXHJcbiAgICAgICAgLnNvcnQoKGZpcnN0OiBSYWlsSm91cm5leU9wdGlvbiwgc2Vjb25kOiBSYWlsSm91cm5leU9wdGlvbik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXJzdFRpbWUgPSBtb21lbnQoZmlyc3QuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kVGltZSA9IG1vbWVudChzZWNvbmQuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgaWYgKGZpcnN0VGltZS5pc0JlZm9yZShzZWNvbmRUaW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlyc3RUaW1lLmlzQWZ0ZXIoc2Vjb25kVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5tYXAoKGpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzb3J0ID0gKFxyXG4gICAgICAgICAgICBmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICAgKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkdWFsU2luZ2xlSm91cm5leXMgPSAoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IFtdKVxyXG4gICAgICAgICAgICAuc29ydChzb3J0KVxyXG4gICAgICAgICAgICAubWFwKHNldEZhcmVzKTtcclxuICAgICAgICAgIGNvbnN0IG9wZW5SZXR1cm5Kb3VybmV5cyA9IChqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leXMgPSAoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSm91cm5leXMgPSAoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5cy5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBzaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgc2luZ2xlSm91cm5leXMubWFwKHNldEZhcmVzKTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0b1JldHVybjEgPSB7XHJcbiAgICAgICAgICAgIC4uLmpvdXJuZXksXHJcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShcclxuICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICAgWyd0eXBlJywgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgICAgIFsndHlwZScsIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXV1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBhcyBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0b1JldHVybjE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b1JldHVybjtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJhd1Jlc3VsdHMubWFwKChyYWlsUmVzdWx0OiBSYWlsUXVvdGVSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnN1bW1hcnkgPSByYWlsUmVzdWx0LnN1bW1hcnk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kSW50ZXJuYWwgPSBzb3J0RmFyZXMocmFpbFJlc3VsdC5vdXRib3VuZCB8fCBbXSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmRJbnRlcm5hbCA9IHNvcnRGYXJlcyhyYWlsUmVzdWx0LnJldHVybiB8fCBbXSk7XHJcblxyXG4gICAgICBjb25zdCBpbmRleFRvVGlja2V0cyA9IHRoaXMubWFrZUZhcmVOYW1lcyhbXHJcbiAgICAgICAgb3V0Ym91bmRJbnRlcm5hbCB8fCBbXSxcclxuICAgICAgICBpbmJvdW5kSW50ZXJuYWwgfHwgW11cclxuICAgICAgXSk7XHJcblxyXG4gICAgICBjb25zdCBjb252ZXJ0RmFyZXMgPSAoXHJcbiAgICAgICAgZmFyZXM6IE9CVFJhaWxJbnRlcm5hbEZhcmUsXHJcbiAgICAgICAgdGlja2V0VHlwZTogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICAgICApOiBPQlRSYWlsRmFyZSA9PiB7XHJcbiAgICAgICAgY29uc3QgcnRpID0gaW5kZXhUb1RpY2tldHNbdGlja2V0VHlwZV07XHJcbiAgICAgICAgY29uc3QgdGlja2V0VHlwZXMgPSBydGkuZ2V0VGlja2V0VHlwZXMoKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGlja2V0VHlwZXMpLnJlZHVjZShcclxuICAgICAgICAgIChjdXJyZW50OiBPQlRSYWlsRmFyZSwgW3R5cGUsIGNvdW50XTogW3N0cmluZywgbnVtYmVyXSkgPT4ge1xyXG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdID0gcnRpXHJcbiAgICAgICAgICAgICAgLndvcmtvdXRJbmRleGVzKHR5cGUpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGRzOiBzdHJpbmdbXSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChmYXJlcywgZmllbGRzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge31cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb252ZXRSYWlsSk91cm5leSA9IChcclxuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcydcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBjb252ZXJ0RmFyZXMoXHJcbiAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJ1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcydcclxuICAgICAgICAgIClcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgb3V0Ym91bmQgPSBvdXRib3VuZEludGVybmFsLm1hcChjb252ZXRSYWlsSk91cm5leSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmQgPSBpbmJvdW5kSW50ZXJuYWwubWFwKGNvbnZldFJhaWxKT3VybmV5KTtcclxuXHJcbiAgICAgIGNvbnN0IG91dFByaWNlcyA9IHRoaXMudXBkYXRlUHJpY2VzKFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xyXG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICAgICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiB7XHJcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGluUHJpY2VzID0gdGhpcy51cGRhdGVQcmljZXMoXHJcbiAgICAgICAgaW5ib3VuZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IG91dFByaWNlcy5jaGVhcGVzdENsYXNzVGlja2V0LFxyXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogb3V0UHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXRcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNoZWFwZXN0Lm5leHQoe1xyXG4gICAgICAgIG91dGJvdW5kQ2hlYXBlc3Q6IG91dFByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgaW5ib3VuZENoZWFwZXN0OiBpblByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogaW5QcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiBvdXRQcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDogaW5QcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5yYWlsUmVzdWx0LFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHJldHVybjogaW5ib3VuZFxyXG4gICAgICB9IGFzIE9CVFJhaWxRdW90ZVJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRmFyZU5hbWVzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXVtdXHJcbiAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAncmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICdzaW5nbGVKb3VybmV5RmFyZXMnXHJcbiAgICBdLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIGFjY3VtOiBSZWNvcmQ8T0JUUmFpbEZhcmVUeXBlcywgUmFpbEluZGV4VG9UaWNrZXQ+LFxyXG4gICAgICAgIG5leHQ6IE9CVFJhaWxGYXJlVHlwZXNcclxuICAgICAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiA9PiB7XHJcbiAgICAgICAgYWNjdW1bbmV4dF0gPSB0aGlzLl9tYWtlRmFyZU5hbWVzKGpvdXJuZXlzLCBuZXh0KTtcclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21ha2VGYXJlTmFtZXMoXHJcbiAgICBqb3VybmV5czogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdW10sXHJcbiAgICBmaWVsZDogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICk6IFJhaWxJbmRleFRvVGlja2V0IHtcclxuICAgIHJldHVybiBfLmZsYXR0ZW4oam91cm5leXMgfHwgW10pLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHJpdDogUmFpbEluZGV4VG9UaWNrZXQsXHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvblxyXG4gICAgICApOiBSYWlsSW5kZXhUb1RpY2tldCA9PiB7XHJcbiAgICAgICAgaWYgKCFqb3VybmV5KSB7XHJcbiAgICAgICAgICByZXR1cm4gcml0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuZW50cmllcyhqb3VybmV5W2ZpZWxkXSB8fCB7fSkuZm9yRWFjaChcclxuICAgICAgICAgIChbdGlja2V0TmFtZSwgc3ViZmFyZXNdOiBbXHJcbiAgICAgICAgICAgIHN0cmluZyxcclxuICAgICAgICAgICAgUmVjb3JkPHN0cmluZywgT0JUUmFpbEpvdXJuZXlGYXJlW10+XHJcbiAgICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN1YmZhcmVzKS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgIChbdGlja2V0VHlwZSwgZmFyZXNdOiBbc3RyaW5nLCBPQlRSYWlsSm91cm5leUZhcmVbXV0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJpdC5hZGRGYXJlcyh0aWNrZXROYW1lLCB0aWNrZXRUeXBlLCBmYXJlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcml0Lm5leHRKb3VybmV5KCk7XHJcbiAgICAgICAgcmV0dXJuIHJpdDtcclxuICAgICAgfSxcclxuICAgICAgbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlUHJpY2VzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxKb3VybmV5T3B0aW9uW10sXHJcbiAgICBwcmljZXM6IHtcclxuICAgICAgY2hlYXBlc3RUaWNrZXRzOiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIH0sXHJcbiAgICBpc1JldHVybjogYm9vbGVhblxyXG4gICk6IHtcclxuICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICB9IHtcclxuICAgIGNvbnN0IG1pbiA9IChcclxuICAgICAgY3VycmVudDoge1xyXG4gICAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XHJcbiAgICAgICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xyXG4gICAgICB9LFxyXG4gICAgICBmYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10sXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApOiB7XHJcbiAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XHJcbiAgICB9ID0+IHtcclxuICAgICAgaWYgKCFmYXJlcyB8fCBmYXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXh0ID0gZmFyZXNbMF0ucHJpY2U7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnByaWNlID4gMCAmJiBjdXJyZW50LnByaWNlIDwgbmV4dFxyXG4gICAgICAgID8gY3VycmVudFxyXG4gICAgICAgIDogeyBwcmljZTogbmV4dCwgam91cm5leSwgZmFyZTogZmFyZXNbMF0gfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHByaWNlczE6IHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IHtcclxuICAgICAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgfSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc29ydCA9IChcclxuICAgICAgICAgIGZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmlyc3QucHJpY2UgLSBzZWNvbmQucHJpY2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLlN0YW5kYXJkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcylcclxuICAgICAgICApLmZpbHRlcihcclxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PlxyXG4gICAgICAgICAgICBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLkZpcnN0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBvcGVuUmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG9wZW5SZXR1cm5GaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKFxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5vRHVhbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLm9wZW5SZXR1cm5TdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ucmV0dXJuU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgIC4uLnNpbmdsZVN0YW5kYXJkSm91cm5leXNcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IGFsbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLmR1YWxTaW5nbGVTdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ubm9EdWFsU3RhbmRhcmRcclxuICAgICAgICBdLnNvcnQoc29ydCk7XHJcbiAgICAgICAgY29uc3Qgbm9EdWFsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4ub3BlblJldHVybkZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5yZXR1cm5GaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4uc2luZ2xlRmlyc3RKb3VybmV5c1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgYWxsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4uZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5ub0R1YWxGaXJzdFxyXG4gICAgICAgIF0uc29ydChzb3J0KTtcclxuICAgICAgICBpZiAoIWlzUmV0dXJuKSB7XHJcbiAgICAgICAgICBub0R1YWxTdGFuZGFyZC5zb3J0KHNvcnQpO1xyXG4gICAgICAgICAgYWxsRmlyc3Quc29ydChzb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5kdWFsU2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5vcGVuUmV0dXJuSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcclxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaXNSZXR1cm4pIHtcclxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIGFsbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgbm9EdWFsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICBub0R1YWxGaXJzdCxcclxuICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGlzU3RhbmRhcmRDbGFzc1NpbmdsZSA9XHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZT8uZmFyZVxyXG4gICAgICAgICAgICAgID8uc2luZ2xlT3JSZXR1cm4gPT09IFJhaWxKb3VybmV5RmFyZVR5cGUuU2luZ2xlO1xyXG4gICAgICAgICAgaWYgKGlzU3RhbmRhcmRDbGFzc1NpbmdsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmJvdW5kUHJpY2UgPSBtaW4oXHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgICBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kVG90YWxQcmljZSA9XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmRUb3RhbFByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID1cclxuICAgICAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZTtcclxuICAgICAgICAgICAgICAvLyBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlID0ge1xyXG4gICAgICAgICAgICAgIC8vICAgcHJpY2U6IDAsXHJcbiAgICAgICAgICAgICAgLy8gICBqb3VybmV5OiBudWxsLFxyXG4gICAgICAgICAgICAgIC8vICAgZmFyZTogbnVsbFxyXG4gICAgICAgICAgICAgIC8vIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgaW5ib3VuZFByaWNlLnByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgaW5ib3VuZFByaWNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgaXNGaXJzdENsYXNzU2luZ2xlID1cclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlPy5mYXJlPy5zaW5nbGVPclJldHVybiA9PT1cclxuICAgICAgICAgICAgUmFpbEpvdXJuZXlGYXJlVHlwZS5TaW5nbGU7XHJcbiAgICAgICAgICBpZiAoaXNGaXJzdENsYXNzU2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluYm91bmRQcmljZSA9IG1pbihcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxQcmljZSA9IHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZS5wcmljZTtcclxuICAgICAgICAgICAgaWYgKHRvdGFsUHJpY2UgPiBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUucHJpY2UpIHtcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlO1xyXG4gICAgICAgICAgICAgIC8vIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSB7XHJcbiAgICAgICAgICAgICAgLy8gICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAvLyAgIGpvdXJuZXk6IG51bGwsXHJcbiAgICAgICAgICAgICAgLy8gICBmYXJlOiBudWxsXHJcbiAgICAgICAgICAgICAgLy8gfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBpbmJvdW5kUHJpY2UucHJpY2UgPlxyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IGluYm91bmRQcmljZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbEZpcnN0LFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJpY2VzMTtcclxuICAgICAgfSxcclxuICAgICAgcHJpY2VzXHJcbiAgICApO1xyXG4gIH1cclxuICBhc3luYyBzZWxlY3RUaWNrZXQoXHJcbiAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24sXHJcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcyxcclxuICAgIHdlbGxiZWluZzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXJhaWxGYXJlLnNlbGVjdGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkVGlja2V0ID0gdGhpcy5zZWxlY3RlZFRpY2tldDtcclxuICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcclxuICAgICAgVXNlckZhdm9ydXJpdGUuQWx0ZXJuYXRpdmVSYWlsSXRpbmVyYXJ5RW5hYmxlZFxyXG4gICAgKTtcclxuICAgIGlmIChzZWxlY3RlZFRpY2tldCAmJiAhd2VsbGJlaW5nICYmIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcpIHtcclxuICAgICAgY29uc3Qgb3V0OiBPQlRSYWlsSm91cm5leU9wdGlvbiA9IHNlbGVjdGVkVGlja2V0LmpvdXJuZXk7XHJcbiAgICAgIGNvbnN0IGluQjogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBqb3VybmV5O1xyXG5cclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzID0gbW9tZW50KG91dC5hcnJpdmVEYXRlVGltZSkuZGlmZihcclxuICAgICAgICBtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSxcclxuICAgICAgICAnaG91cnMnLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzSW4gPSBtb21lbnQoaW5CLmFycml2ZURhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdob3VycycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXlEaWZmZXJuY2UgPSBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChvdXQuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdkYXknXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB0b0FkZCA9IGF3YWl0IHRoaXMuY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgICAgIHRpbWVEaWZmSW5Ib3VycyArIHRpbWVEaWZmSW5Ib3Vyc0luLFxyXG4gICAgICAgIGRheURpZmZlcm5jZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodG9BZGQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFRpY2tldChcclxuICAgICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZSxcclxuICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgc2VjdGlvbixcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMgPSB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnc2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXkgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0LmpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzXHJcbiAgICAgICAgICAgICAgICA/IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUsXHJcbiAgICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5IH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2codGlja2V0RXh0cmFzKTtcclxuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgPyB0aWNrZXRFeHRyYXNcclxuICAgICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxyXG4gICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLFxyXG4gICAgICAgICAgICAgIHJhaWxGYXJlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnb3BlblJldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5IH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aWNrZXRFeHRyYXMpO1xyXG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRPcGVuUmV0dXJuVG9CYXNrZXQoXHJcbiAgICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgaG91ckRpZmZlcmVuY2U6IG51bWJlcixcclxuICAgIGRheURpZmZlcmVuY2U6IG51bWJlclxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gISBFTlQtMTQ4MSAtIENoZWNrIGlmIHdlIGFyZSBzZWFyY2hpbmcgcmV0dXJuIHJhaWwgLSBhbmQgYWx0ZXJuYXRpdmUgd2VsbGJlaW5nIGlzIGVuYWJsZWRcclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXTtcclxuICAgIGNvbnN0IGNoZWNrID1cclxuICAgICAgdGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZy5lbmFibGUgJiZcclxuICAgICAgTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpID4gMCAmJlxyXG4gICAgICBwYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkgJiZcclxuICAgICAgaG91ckRpZmZlcmVuY2UgPj0gTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpICYmXHJcbiAgICAgIGRheURpZmZlcmVuY2UgPT09IDAgJiZcclxuICAgICAgdGhpcy5ub09mQWR1bHRzICsgdGhpcy5ub09mQ2hpbGRyZW4gPD0gbWF4VHJhdmVsbGVyV2VsbGJlaW5nO1xyXG4gICAgaWYgKGNoZWNrKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgTW9kYWxUeXBlcy5BbHRlcm5hdGl2ZVJhaWxNb2RhbENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICB0aGlzLnBlcmZvcm1BbHRlcm5hdGl2ZVJhaWxBbmRIb3RlbFNlYXJjaCgpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXJmb3JtQWx0ZXJuYXRpdmVSYWlsQW5kSG90ZWxTZWFyY2goKTogdm9pZCB7XHJcbiAgICAvLyBhbHRlciB0aGUgc2VhcmNoIHBhcmFtc1xyXG4gICAgLy8gdGhlIGNhbGwgdGhlIHNlYXJjaCBmdW5jdGlvblxyXG5cclxuICAgIGNvbnNvbGUubG9nKCcrKysgQ3JlYXRpbmcgdGhlIEFsdGVybmF0aXZlIFNlYXJjaCBQYXJhbXMgKysrJyk7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNIb3RlbCA9XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF07XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNSYWlsID1cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdO1xyXG4gICAgc2VhcmNoUGFyYW1zSG90ZWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc1JhaWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc0hvdGVsLnByaW9yaXR5ID0gc2VhcmNoUGFyYW1zUmFpbC5wcmlvcml0eTtcclxuICAgIGNvbnN0IGhvdGVsUGFyYW1zID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXTtcclxuICAgIGNvbnN0IHJhaWxQYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF07XHJcbiAgICAvLyBGaXJzdCBvZiBhbGwgLSBhbHRlciB0aGUgcmFpbCBpbmJvdW5kIGRhdGUgLSBhZGQgYSBkYXlcclxuICAgIHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1xyXG4gICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICBdLmluQm91bmREYXRlVGltZS5hZGQoMSwgJ2RheScpO1xyXG5cclxuICAgIC8vIG5vdyBjcmVhdGUgdGhlIGhvdGVsIHNlYXJjaCBwYXJhbXNcclxuICAgIGhvdGVsUGFyYW1zLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XHJcbiAgICBob3RlbFBhcmFtcy5sb2NhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvO1xyXG4gICAgaG90ZWxQYXJhbXMudHJhaW5zU3RhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvLnJhaWxzdGF0aW9uO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tpbl9kYXRlID0gcmFpbFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tvdXRfZGF0ZSA9IHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMubm9fb2Zfb2NjdXBhbnRzID1cclxuICAgICAgcmFpbFBhcmFtcy5ub09mQWR1bHRzICsgcmFpbFBhcmFtcy5ub09mQ2hpbGRyZW47XHJcbiAgICBob3RlbFBhcmFtcy5ub19vZl9yb29tcyA9IDE7XHJcbiAgICBob3RlbFBhcmFtcy5kaXN0YW5jZSA9IDEwO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKFdlbGxiZWluZ0VudW0uV0VMTEJFSU5HKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdFRpY2tldE5vQWRkKFxyXG4gICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghcmFpbEZhcmUuc2VsZWN0YWJsZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJysrKyBSYWlsIGZhcmUgaXMgbm90IHNlbGVjdGFibGUgKysrJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc091dFRpY2tldFNlbGVjdGVkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2ggJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoID09PSByYWlsRmFyZS5mYXJlSGFzaDtcclxuICAgIGNvbnN0IGlzSW5UaWNrZXRTZWxlY3RlZCA9XHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kXHJcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT1cclxuICAgICAgICAgICAgam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2hcclxuICAgICAgICA6IGZhbHNlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaXNPdXRUaWNrZXRTZWxlY3RlZCB8fFxyXG4gICAgICAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQgJiYgaXNJblRpY2tldFNlbGVjdGVkKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnKysrIEpvdXJuZXkgYW5kIGZhcmUgYXJlIGFscmVhZHkgc2VsZWN0ZWQgLSBicmVha2luZyBvdXQgKysrJ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gICAgICBpZiAoaXNPdXRUaWNrZXRTZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5fc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuX3NlbGVjdGVkU2VjdGlvbiAhPT0gc2VjdGlvbikgfHxcclxuICAgICAgKHRoaXMuX3NlbGVjdGVkU2VjdGlvbiA9PT0gJ3JldHVybkpvdXJuZXlGYXJlcycgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Py5mYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyICE9PVxyXG4gICAgICAgICAgcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2VsZWN0ZWRTZWN0aW9uID0gc2VjdGlvbjtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyA9IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3NpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXR1cm5Kb3VybmV5RmFyZXMnOlxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFkZCB0byBiYXNrZXQgZm9yIGdvMi9zY2lvblxyXG4gICAqIEBwYXJhbSBzb3VyY2VJZFxyXG4gICAqIEBwYXJhbSBzZWFyY2hRdWVyeVxyXG4gICAqIEBwYXJhbSBqb3VybmV5XHJcbiAgICogQHBhcmFtIHJhaWxGYXJlXHJcbiAgICogQHBhcmFtIGluYm91bmRSYWlsRmFyZVxyXG4gICAqIEBwYXJhbSBpbmJvdW5kSm91cm5leVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkVG9CYXNrZXQoXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZFJhaWxGYXJlPzogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEpvdXJuZXk/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHNlYXJjaFF1ZXJ5LmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5KSB7XHJcbiAgICAgIC8vIFRPRE9cclxuICAgICAgYXdhaXQgdGhpcy5hZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgam91cm5leSxcclxuICAgICAgICByYWlsRmFyZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gbm93IGNoZWNrIGlmIHdlIGhhdmUgY2hvc2VuIGR1YWwgc2luZ2xlcyBvciByZXR1cm5zXHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gPT09ICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmFpbEZhcmUuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBpbmJvdW5kSm91cm5leSxcclxuICAgICAgICAgIHJhaWxGYXJlLFxyXG4gICAgICAgICAgaW5ib3VuZFJhaWxGYXJlXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAhIC0gRHVhbCBTaW5nbGVzXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGluYm91bmRKb3VybmV5LFxyXG4gICAgICAgICAgcmFpbEZhcmUsXHJcbiAgICAgICAgICBpbmJvdW5kUmFpbEZhcmVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgICBzb3VyY2VJZCxcclxuICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgIGpvdXJuZXksXHJcbiAgICAgIHJhaWxGYXJlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBvdXRib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIG91dGJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeShzZWFyY2hRdWVyeSk7XHJcblxyXG4gICAgbGV0IGluVGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG5cclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG4gICAgaWYgKGluYm91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIGluVGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QoaW5ib3VuZC50aWNrZXRFeHRyYXNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvdXRib3VuZD8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3Qob3V0Ym91bmQudGlja2V0RXh0cmFzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICBvdXRib3VuZEZhcmUsXHJcbiAgICAgIG91dGJvdW5kLFxyXG4gICAgICBpbmJvdW5kXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuXHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZCxcclxuICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdDogKG91dGJvdW5kLnRpY2tldFF1ZXVlTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbFRpY2tldFF1ZXVlKTogVGlja2V0UXVldWVMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgYWNjb3VudHNMaXN0OiAob3V0Ym91bmQuYWNjb3VudHNMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsQWNjb3VudCk6IEFjY291bnRzTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IG91dGJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IG91dGJvdW5kLnRvLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBvdXRib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IG91dGJvdW5kRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogb3V0Ym91bmRGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogb3V0Ym91bmRGYXJlLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaW53YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbmJvdW5kLnRvLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaW5ib3VuZC5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGluYm91bmQuZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBpbmJvdW5kRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogaW5ib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IGluYm91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcclxuICAgICAgICAgICAgaXNEdWFsU2luZ2xlUmV0dXJuOiB0cnVlLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW2luYm91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IGluYm91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBpc0R1YWxTaW5nbGVSZXR1cm46IHRydWUsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgZVRpY2tldDogISFpbmJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogTnVtYmVyKFxyXG4gICAgICAgICAgTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSArIGluYm91bmRGYXJlLnByaWNlKS50b0ZpeGVkKDIpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiBpblRpY2tldEV4dHJhcyBvciBvdXRUaWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKGluVGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwucmV0dXJuLnRpY2tldEV4dHJhcyA9IGluVGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvdXRUaWNrZXRFeHRyYXMpIHtcclxuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSBvdXRUaWNrZXRFeHRyYXM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbiB8fCBpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgZmluZENoZWFwZXN0VGlja2V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlUmFpbFF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpIHtcclxuICAgIGNvbnN0IHBhcnNlZFN0YXRpb24gPVxyXG4gICAgICB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbnNDb2Rlc1t0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbl07XHJcbiAgICBjb25zb2xlLmxvZygnLS0tIFBhcnNlZCBTdGF0aW9uIGlzIDonLCBwYXJzZWRTdGF0aW9uKTtcclxuICAgIGlmIChwYXJzZWRTdGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gcGFyc2VkU3RhdGlvbi5kZXA7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHBhcnNlZFN0YXRpb24uYXJyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgRnJvbSBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdUbykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBUbyBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdXRCb3VuZERhdGVUaW1lPy5pc0JlZm9yZShub3cpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0RlcGFydHVyZSBEYXRlL1RpbWUgY2Fubm90IGJlIGluIHRoZSBwYXN0LidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xyXG4gICAgICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcclxuXHJcbiAgICAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5vdXRCb3VuZERhdGVUaW1lKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpYSkge1xyXG4gICAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbi4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPCAxKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoXHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLlJhaWxmZXRjaGVyLmZldGNoTGlzdChxdWVyeSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXNcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzID1cclxuICAgICAgdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuUmFpbCxcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlVGltZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlc1xyXG4gICk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzIHtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsUmVjZW50U2VhcmNoQXJncyA9IHF1ZXJ5O1xyXG5cclxuICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MpIHtcclxuICAgICAgc2VhcmNoUXVlcnkuaXNBaXJwb3J0RXhwcmVzcyA9IHRoaXMuaXNBaXJwb3J0RXhwcmVzcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb24pIHtcclxuICAgICAgc2VhcmNoUXVlcnkuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ0Zyb20gPSB0aGlzLnRyYXZlbGxpbmdGcm9tO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdUbykge1xyXG4gICAgICBzZWFyY2hRdWVyeS50cmF2ZWxsaW5nVG8gPSB0aGlzLnRyYXZlbGxpbmdUbztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52aWFMb2NhdGlvbikge1xyXG4gICAgICBzZWFyY2hRdWVyeS52aWFMb2NhdGlvbiA9IHRoaXMudmlhTG9jYXRpb247XHJcbiAgICB9XHJcbiAgICBzZWFyY2hRdWVyeS5vdXRib3VuZFN0YXRpb25Db2RlID1cclxuICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbT8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xyXG5cclxuICAgIHNlYXJjaFF1ZXJ5LmluYm91bmRTdGF0aW9uQ29kZSA9XHJcbiAgICAgIHRoaXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8uc3RhdGlvbkNvZGU7XHJcblxyXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZTtcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jbGFzcztcclxuICAgIHRoaXMuZXh0cmFUaW1lID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZXh0cmFUaW1lVG9DaGFuZ2U7XHJcbiAgICB0aGlzLmlzQWlycG9ydEV4cHJlc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pc0FpcnBvcnRFeHByZXNzO1xyXG4gICAgdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5haXJwb3J0RXhwcmVzc1N0YXRpb247XHJcblxyXG4gICAgLy8gZ2V0IG91dEJvdW5kRGF0ZVRpbWUsIGluQm91bmREYXRlVGltZSBhbmQgb3V0Ym91bmRDcml0ZXJpYSAscmV0dXJuQ3JpdGVyaWFcclxuICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWVcclxuICAgICAgPyBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSlcclxuICAgICAgOiBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWUpO1xyXG4gICAgdGhpcy5vdXRib3VuZENyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgICAgPyBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgICAgOiBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQXJyaXZhbERhdGVUaW1lKTtcclxuXHJcbiAgICAgIHRoaXMucmV0dXJuQ3JpdGVyaWEgPSB0aGlzLmdldENyaXRlcmlhKFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxEYXRlVGltZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXBwbHlSYWlsY2FyZHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncz8ucmFpbENhcmRRdWFsaWZpZXJzPy5sZW5ndGhcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgICBpZiAodGhpcy5hcHBseVJhaWxjYXJkcykge1xyXG4gICAgICB0aGlzLnJhaWxDYXJkcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJhaWxDYXJkUXVhbGlmaWVycztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRyYXZlbGxpbmdUbztcclxuICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nRnJvbTtcclxuXHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudmlhTG9jYXRpb24pIHtcclxuICAgICAgdGhpcy52aWEgPSB0cnVlO1xyXG4gICAgICB0aGlzLnZpYUxvY2F0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudmlhTG9jYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmlzQWlycG9ydEV4cHJlc3MpIHtcclxuICAgICAgY29uc3Qgc3RhdGlvbklkcyA9IHtcclxuICAgICAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBhcnR1cmVMb2NhdGlvbklkLFxyXG4gICAgICAgIGFycml2YWxMb2NhdGlvbklkOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5hcnJpdmFsTG9jYXRpb25JZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNldEFpcnBvcnRFeHByZXNzU3RhdGlvbklkcyhzdGF0aW9uSWRzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmpvdXJuZXlUeXBlID09PVxyXG4gICAgICBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXlcclxuICAgICkge1xyXG4gICAgICB0aGlzLm9wZW5SZXR1cm4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX291dGJvdW5kX2RhdGUgJiYgdGhpcy5fb3V0Ym91bmRfdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVSZXR1cm5EYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZXR1cm5fZGF0ZSAmJiB0aGlzLl9yZXR1cm5fdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX3JldHVybl9kYXRlLFxyXG4gICAgICAgIHRoaXMuX3JldHVybl90aW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXMpOiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMge1xyXG4gICAgaWYgKHRoaXMuaXNBaXJwb3J0RXhwcmVzcyAmJiB0aGlzLm9wZW5SZXR1cm4pIHtcclxuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVlcnk6IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgY291bnRyeUNvZGU6ICdHQicsXHJcbiAgICAgIGpvdXJuZXlUeXBlOiB0ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUsXHJcbiAgICAgIGFkdWx0czogdGVtcFBhcmFtcy5ub09mQWR1bHRzLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogdGVtcFBhcmFtcy50cmF2ZWxsaW5nVG8/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogdGVtcFBhcmFtcy50cmF2ZWxsaW5nRnJvbT8ucmFpbHN0YXRpb24/LmlkLFxyXG4gICAgICBjaGlsZHJlbjogdGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4sXHJcbiAgICAgIGNsYXNzOiB0ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzLFxyXG4gICAgICBleHRyYVRpbWVUb0NoYW5nZTogdGVtcFBhcmFtcy5leHRyYVRpbWUsXHJcbiAgICAgIG91dGJvdW5kQXJyaXZhbERhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZVxyXG4gICAgICApLFxyXG4gICAgICBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZVxyXG4gICAgICApLFxyXG4gICAgICByZXR1cm5BcnJpdmFsRGF0ZVRpbWU6IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUoXHJcbiAgICAgICAgdGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU6IHRoaXMuaGVscGVycy5mb3JtYXRHcmFwaFFMRGF0ZVRpbWUoXHJcbiAgICAgICAgdGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgdmlhTG9jYXRpb25JZDogdGVtcFBhcmFtcy52aWFMb2NhdGlvbj8ucmFpbHN0YXRpb24/LmlkLFxyXG4gICAgICByYWlsQ2FyZFF1YWxpZmllcnM6IHRlbXBQYXJhbXMucmFpbENhcmRzPy5tYXAoXHJcbiAgICAgICAgKHJhaWxDYXJkOiBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJhaWxDYXJkLmNvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0ZW1wUGFyYW1zLm5vT2ZDaGlsZHJlbiA9PT0gMCkge1xyXG4gICAgICBxdWVyeS5jaGlsZHJlbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZpYUxvY2F0aW9uID09PSAnJykge1xyXG4gICAgICBxdWVyeS52aWFMb2NhdGlvbklkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ6XHJcbiAgICAgICAgcXVlcnkub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5BcnJpdmU6XHJcbiAgICAgICAgcXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYCsrKyBVbmtub3duIENyaXRlcmlhOiAke3RoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhfSArKytgXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWEpIHtcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0OlxyXG4gICAgICAgIHF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYCsrKyBVbmtub3duIENyaXRlcmlhOiAke3RoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYX0gKysrYFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUpIHtcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTpcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXk6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIHF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcykge1xyXG4gICAgICBxdWVyeS5hcnJpdmFsTG9jYXRpb25JZCA9IHRoaXMuX3RyYXZlbGxpbmdUbztcclxuICAgICAgcXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZCA9IHRoaXMuX3RyYXZlbGxpbmdGcm9tO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICBnZXRDcml0ZXJpYShcclxuICAgIGRlcGFydHVyZURhdGVUaW1lOiBzdHJpbmcsXHJcbiAgICBhcnJpdmFsRGF0ZVRpbWU6IHN0cmluZ1xyXG4gICk6IFJhaWxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgICBpZiAoZGVwYXJ0dXJlRGF0ZVRpbWUpIHtcclxuICAgICAgcmV0dXJuIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ7XHJcbiAgICB9IGVsc2UgaWYgKGFycml2YWxEYXRlVGltZSkge1xyXG4gICAgICByZXR1cm4gUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTtcclxuICAgIH1cclxuICAgIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHt9XHJcblxyXG4gIGdldFJhaWxTdGF0aW9uKFxyXG4gICAgY29kZTogc3RyaW5nLFxyXG4gICAgaXNMb2FkaW5nPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XHJcbiAgKTogT2JzZXJ2YWJsZTxSYWlsU3RhdGlvbj4ge1xyXG4gICAgaWYgKGNvZGUubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyLmZldGNoTGlzdCh7IGNvZGUgfSkucGlwZShcclxuICAgICAgICB0YXAoKCkgPT4gaXNMb2FkaW5nPy5uZXh0KGZhbHNlKSksXHJcbiAgICAgICAgdGFrZSgxKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFJhaWxKb3VybmV5RmFyZSgpOiBSYWlsSm91cm5leUZhcmUge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uOiBPQlRSYWlsSm91cm5leU9wdGlvbik6IGFueVtdIHtcclxuICAgIGxldCBsZWdzOiBhbnlbXSA9IFtdO1xyXG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy5qb3VybmV5TGVncy5sZW5ndGgpIHtcclxuICAgICAgbGVncyA9IHJhaWxKb3VybmV5T3B0aW9uLmpvdXJuZXlMZWdzLm1hcCgoc2VnbWVudCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBvcGVyYXRvcjogc2VnbWVudC5vcGVyYXRvcixcclxuICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBzZWdtZW50LmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHNlZ21lbnQuZGVwYXJ0LFxyXG4gICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBzZWdtZW50LmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBzZWdtZW50LmFycml2ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ3M7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgcmFpbEpvdXJuZXlPcHRpb246IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0ZW1wUGFyYW1zKTtcclxuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG4gICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBjcmVhdGUgVGlja2V0RXh0cmFzT2JqZWN0IGFuZCBhZGRlZCBpdCB0byB0aGUgYmFza2V0XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIG91dFRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KFxyXG4gICAgICAgIHJhaWxKb3VybmV5T3B0aW9uLnRpY2tldEV4dHJhc1swXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChyYWlsSm91cm5leU9wdGlvbi51bnNlbGxhYmxlKSB7XHJcbiAgICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcclxuICAgICAgcmFpbEZhcmUsXHJcbiAgICAgIHJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBsZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uKTtcclxuICAgICAgLy8gY29uc3QgdGlja2V0UXVldWVMaXN0ID0gc2VsZWN0ZWRSYWlsSm91cm5leUZhcmUudGlja2V0UXVldWVMaXN0Lm1hcChcclxuICAgICAgLy8gICAodGlja2V0UXVldWVMaXN0MSkgPT4ge1xyXG4gICAgICAvLyAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgaWQ6IHRpY2tldFF1ZXVlTGlzdDEuaWQsXHJcbiAgICAgIC8vICAgICAgIG5hbWU6IHRpY2tldFF1ZXVlTGlzdDEubmFtZSxcclxuICAgICAgLy8gICAgICAgdHlwZTogdGlja2V0UXVldWVMaXN0MS50eXBlXHJcbiAgICAgIC8vICAgICB9O1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gKTtcclxuXHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgdGlja2V0UXVldWVMaXN0OiAocmFpbEpvdXJuZXlPcHRpb24udGlja2V0UXVldWVMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsVGlja2V0UXVldWUpOiBUaWNrZXRRdWV1ZUxpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBhY2NvdW50c0xpc3Q6IChyYWlsSm91cm5leU9wdGlvbi5hY2NvdW50c0xpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxBY2NvdW50KTogQWNjb3VudHNMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogcmFpbEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogcmFpbEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHJhaWxGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogcmFpbEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiByYWlsRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIXJhaWxGYXJlLmVUaWNrZXRBdmFpbGFibGUsXHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW3JhaWxGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IHJhaWxGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICByYWlsSm91cm5leU9wdGlvbi5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICAgIC8vIHRpY2tldFF1ZXVlTGlzdFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWR1bHRzOiByYWlsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiByYWlsRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogcmFpbEZhcmUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXHJcbiAgICAgICAgY28yUGVySXRlbTogcmFpbEpvdXJuZXlPcHRpb24uY28yUGVySXRlbSxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IHJhaWxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKG91dFRpY2tldEV4dHJhcykge1xyXG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IG91dFRpY2tldEV4dHJhcztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIHJhaWxGYXJlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRSZXR1cm5Kb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgaW5ib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBvdXRib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIGluYm91bmRGYXJlOiBPQlRSYWlsSm91cm5leUZhcmVcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vIGlmIChvdXRib3VuZC51bnNlbGxhYmxlKSB7XHJcbiAgICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0ZW1wUGFyYW1zKTtcclxuXHJcbiAgICBsZXQgdGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuXHJcbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcclxuXHJcbiAgICBpZiAob3V0Ym91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KG91dGJvdW5kLnRpY2tldEV4dHJhc1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcclxuICAgICAgb3V0Ym91bmRGYXJlLFxyXG4gICAgICBvdXRib3VuZCxcclxuICAgICAgaW5ib3VuZFxyXG4gICAgKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKG91dGJvdW5kKTtcclxuICAgICAgY29uc3QgaW5ib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24oaW5ib3VuZCk7XHJcblxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChvdXRib3VuZC50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcclxuXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBvdXRib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBvdXRib3VuZEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbmJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluYm91bmQudG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5ib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluYm91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogaW5ib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlLFxyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKHRpY2tldEV4dHJhcykge1xyXG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIGJhc2tldEl0ZW0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgb3V0Ym91bmRGYXJlLnJlcXVpcmVzUmVhc29uIHx8IGluYm91bmRGYXJlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgcmFpbExlZ3M6IFJhaWxKb3VybmV5TGVnW11cclxuICApOiBSYWlsSm91cm5leUxlZ1tdIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFpbExlZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgbGVnID0gcmFpbExlZ3NbaV07XHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlZy5jYWxsaW5nUG9pbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbGluZ1BvaW50cyA9IGxlZy5jYWxsaW5nUG9pbnRzW2pdO1xyXG4gICAgICAgIGRlbGV0ZSBjYWxsaW5nUG9pbnRzLnNjaGVkdWxlZFBsYXRmb3JtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhaWxMZWdzO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KHJhaWxUaWNrZXRFeHRyYTogUmFpbFRpY2tldEV4dHJhKTogVGlja2V0RXh0cmFzW10ge1xyXG4gICAgY29uc3QgcHJpY2UgPVxyXG4gICAgICB0aGlzLm5vT2ZDaGlsZHJlbiAqIHJhaWxUaWNrZXRFeHRyYT8uY2hpbGRBbW91bnQgK1xyXG4gICAgICB0aGlzLm5vT2ZBZHVsdHMgKiByYWlsVGlja2V0RXh0cmEuYWR1bHRBbW91bnQ7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogcmFpbFRpY2tldEV4dHJhLmlkZW50aWZpZXJzLnR5cGUsXHJcbiAgICAgICAgbG9jYXRpb246IHJhaWxUaWNrZXRFeHRyYS5pZGVudGlmaWVycy5sb2NhdGlvbixcclxuICAgICAgICBkYXRlOiByYWlsVGlja2V0RXh0cmEuaWRlbnRpZmllcnMuZGF0ZSxcclxuICAgICAgICBwcmljZVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlVGltZURpZmZlcmVuY2VJbk1pbnMocmFpbEpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnNcclxuICAgICAgLmdldFRpbWVEaWZmZXJlbmNlKHJhaWxKb3VybmV5LmFycml2ZURhdGVUaW1lLCByYWlsSm91cm5leS5kZXBhcnREYXRlVGltZSlcclxuICAgICAgLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBkZXRlcm1pbmUgaWYgYSB0aWNrZXQgaXMgYW4gZVRpY2tldFxyXG4gICAqIEBwYXJhbSB0aWNrZXQgLSB0aGUgdGlja2V0IHdlIHdhbnQgdG8gdG8gY2hlY2tcclxuICAgKiBAcmV0dXJucyAtIGJvb2xlYW5cclxuICAgKi9cclxuICB0aWNrZXRJc0FuRVRpY2tldCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvdW5kRVRpY2tldDogUmFpbEpvdXJuZXlPcHRpb24gPSBudWxsO1xyXG5cclxuICAgIC8vIGZvdW5kRVRpY2tldCA9IHRpY2tldC50aWNrZXRRdWV1ZUxpc3QuZmluZCgocXVldWVMaXN0SXRlbSkgPT4ge1xyXG4gICAgLy8gICByZXR1cm4gcXVldWVMaXN0SXRlbS50eXBlID09PSAnZVRpY2tldCc7XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICByZXR1cm4gZm91bmRFVGlja2V0ID8gdHJ1ZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXBwbHlGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgX2FwcGx5RmlsdGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2V0U2VsZWN0ZWQgPSAoXHJcbiAgICAgIHR5cGU6IFJhaWxSdWxlRW5pdHlLZXlzLFxyXG4gICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLl9maW5kU3VtbWFyeShqb3VybmV5LCB0aGlzLnN1bW1hcnkucmV0dXJuKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU3VtbWFyeVxyXG4gICAgICAgID8gKGdyb3VwZWRGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRGYXJlcy5tYXAoKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghZmFyZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKHsgLi4uZmFyZSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeVt0eXBlXVt0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2hdXHJcbiAgICAgICAgICAgICAgICAgICAgPy5ydWxlRGF0YVdoZW5TZWxlY3RlZFdpdGhbZmFyZS5mYXJlSGFzaF0sXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlcclxuICAgICAgICAgICAgICAgICAgICA/IHN1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0/LnJ1bGVEYXRhV2hlblNlbGVjdGVkQWxvbmVcclxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhcmUuZmFyZUhhc2ggPT09IHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6ICEhdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5W3R5cGVdW1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2hcclxuICAgICAgICAgICAgICAgIF0/LmFsbG93ZWRXaXRoPy5pbmNsdWRlcyhmYXJlLmZhcmVIYXNoKVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDogKGdyb3VwZWRGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRGYXJlcy5tYXAoKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghZmFyZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKFxyXG4gICAgICAgICAgICAgICAgICB7IC4uLmZhcmUgfSxcclxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgICAgID8gW3N1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZV1cclxuICAgICAgICAgICAgICAgICAgICA6IFtdXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2V0UnVsZXMgPSAoXHJcbiAgICAgIHR5cGU6IFJhaWxSdWxlRW5pdHlLZXlzLFxyXG4gICAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgICAgZGlyZWN0aW9uOiAnb3V0Ym91bmQnIHwgJ3JldHVybidcclxuICAgICkgPT4ge1xyXG4gICAgICByZXR1cm4gKGdyb3VwZWRGYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10pOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KGpvdXJuZXksIHRoaXMuc3VtbWFyeVtkaXJlY3Rpb25dKTtcclxuICAgICAgICByZXR1cm4gZ3JvdXBlZEZhcmVzLm1hcChcclxuICAgICAgICAgIChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpOiBPQlRSYWlsSm91cm5leUZhcmUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWZhcmUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmFkZFJhaWxBY3Rpb25SdWxlcyhcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAuLi5mYXJlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgJiZcclxuICAgICAgICAgICAgICAgICAgZmFyZS5mYXJlSGFzaCA9PT0gdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICA/IFtzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLnJ1bGVEYXRhV2hlblNlbGVjdGVkQWxvbmVdXHJcbiAgICAgICAgICAgICAgICA6IFtdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChcclxuICAgICAgdGhpcy5oZWxwZXJzXHJcbiAgICAgICAgLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpXHJcbiAgICAgICAgLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgYWNjdW06IE9CVFJhaWxRdW90ZVJlc3VsdFtdLFxyXG4gICAgICAgICAgICBuZXh0OiBPQlRSYWlsUXVvdGVSZXN1bHRcclxuICAgICAgICAgICk6IE9CVFJhaWxRdW90ZVJlc3VsdFtdID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHtcclxuICAgICAgICAgICAgICAuLi5uZXh0LFxyXG4gICAgICAgICAgICAgIG91dGJvdW5kOiAobmV4dC5vdXRib3VuZCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAgICAgKGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEpvdXJuZXlPcHRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmpvdXJuZXksXHJcbiAgICAgICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSYWlsRGlyZWN0aW9uLk91dGJvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmFpbERpcmVjdGlvbi5PdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfSBhcyBPQlRSYWlsSm91cm5leU9wdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybjogKG5leHQucmV0dXJuIHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKCdyZXR1cm5Kb3VybmV5RmFyZXMnLCBqb3VybmV5KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKCdkdWFsU2luZ2xlSm91cm5leUZhcmVzJywgam91cm5leSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdzaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5LCAncmV0dXJuJylcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcygnb3BlblJldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXksICdyZXR1cm4nKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGFjY3VtLnB1c2godGVtcCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbXVxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtc0FuZENvbmQoXHJcbiAgICBvdXRib3VuZEZhcmU6IFJhaWxKb3VybmV5RmFyZSxcclxuICAgIG91dGJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIGluYm91bmQ/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDbGFzcycsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy50aWNrZXRUeXBlQ2xhc3NcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb25kaXRpb25zIERlc2NyaXB0aW9uJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDb25kaXRpb25zRGVzY3JpcHRpb25cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWYWxpZCBSZXR1cm4gUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy52YWxpZFJldHVyblJ1bGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBOYW1lJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hhbmdlIFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuY2hhbmdlUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ByZSBCb29raW5nIFJlcXVpcmVtZW50JyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnByZUJvb2tpbmdSZXF1aXJlbWVudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JhaWxjYXJkIERpc2NvdW50JyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnJhaWxjYXJkRGlzY291bnRcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb2RlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDb2RlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hpbGQgRGlzY291bnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuY2hpbGREaXNjb3VudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZhbGlkIE91dCBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnZhbGlkT3V0UnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0YXJ0IERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZC5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0VuZCBEYXRlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdKb3VybmV5IEJyZWFrIFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuam91cm5leUJyZWFrUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JlZnVuZCBDYW5jZWxsYXRpb24gUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5yZWZ1bmRDYW5jZWxsYXRpb25SdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSm91cm5leSBUeXBlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLmpvdXJuZXlUeXBlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG9kIEF2YWlsYWJsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy50b2RBdmFpbGFibGVcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmV0dXJuIFN0YXJ0IERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBpbmJvdW5kPy5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JldHVybiBFbmQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IGluYm91bmQ/LmFycml2ZURhdGVUaW1lXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGhpcy50ZW1wUGFyYW1zKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgdGhpcy5ub09mQWR1bHRzID0gZmF2LmFkdWx0c1xyXG4gICAgdGhpcy5ub09mQ2hpbGRyZW4gPSBmYXYuY2hpbGRyZW5cclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IGZhdi5qb3VybmV5VHlwZVxyXG4gICAgc3dpdGNoIChmYXYuY2xhc3Mpe1xyXG4gICAgICBjYXNlIFwiRmlyc3RcIjpcclxuICAgICAgICB0aGlzLmNob3NlblJhaWxDbGFzcyA9IFJhaWxDbGFzcy5GaXJzdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkFueVwiOlxyXG4gICAgICAgIHRoaXMuY2hvc2VuUmFpbENsYXNzID0gUmFpbENsYXNzLkFsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlN0YW5kYXJkXCI6XHJcbiAgICAgICAgdGhpcy5jaG9zZW5SYWlsQ2xhc3MgPSBSYWlsQ2xhc3MuU3RhbmRhcmQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3Qoe2lkOiBmYXYuZGVwYXJ0dXJlTG9jYXRpb25JZH0pLnN1YnNjcmliZShhID0+IHtcclxuICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IGFcclxuICAgIH0pXHJcbiAgICB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3Qoe2lkOiBmYXYuYXJyaXZhbExvY2F0aW9uSWR9KS5zdWJzY3JpYmUoYSA9PiB7XHJcbiAgICAgIHRoaXMudHJhdmVsbGluZ1RvID0gYVxyXG4gICAgfSlcclxuICAgIGlmIChmYXYudmlhTG9jYXRpb25JZCl7XHJcbiAgICAgIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyLmZldGNoTGlzdCh7aWQ6IGZhdi52aWFMb2NhdGlvbklkfSkuc3Vic2NyaWJlKGEgPT4ge1xyXG4gICAgICAgIHRoaXMudmlhTG9jYXRpb24gPSBhXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgICBcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnZpYUxvY2F0aW9uID0gbnVsbFxyXG4gICAgICB0aGlzLnZpYSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLlxyXG4gIH1cclxufVxyXG4iXX0=
1917
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFpbC1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBR0wsNEJBQTRCLEVBQzVCLGFBQWEsRUFDYixxQkFBcUIsRUFjckIsYUFBYSxFQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUVMLFNBQVMsRUFLVCxXQUFXLEVBRVgscUJBQXFCLEVBT3RCLE1BQU0sd0JBQXdCLENBQUM7QUFtQ2hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLDZDQUF1QixDQUFBO0lBQ3ZCLDhDQUF3QixDQUFBO0FBQzFCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBRUQsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3Qix3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L0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FDOUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUNGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FDakQsQ0FBQztZQUNGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQ04sQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FDL0IsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FDcEQsQ0FBQztZQUNGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMs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LENBQUMscUJBQXFCO2lCQUN2QixTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7aUJBQ3hDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO2dCQUNyQixJQUFJLENBQUMscUJBQXFCO3FCQUN2QixTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO3FCQUNwQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDZixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDakI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO2FBQ2xCO1lBQ0QsUUFBUTtRQUNWLENBQUM7S0FBQTs7QUFyb0ZlLDJDQUFzQixHQUFHLGFBQWEsQ0FBQztBQUN2Qyw0Q0FBdUIsR0FBRyxjQUFjLENBQUM7QUFDekMsa0NBQWEsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IG9mLCBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcclxuaW1wb3J0IHtcclxuICBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcyxcclxuICBDaGVhcGVzdFJhaWxQcmljZXMsXHJcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcclxuICBMb2NhdGlvblR5cGVzLFxyXG4gIG1heFRyYXZlbGxlcldlbGxiZWluZyxcclxuICBOZ2JEYXRlU3RydWN0LFxyXG4gIE9CVFJhaWxGYXJlLFxyXG4gIE9CVFJhaWxGYXJlVHlwZXMsXHJcbiAgT0JUUmFpbEludGVybmFsRmFyZSxcclxuICBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uLFxyXG4gIE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICBPQlRSYWlsUXVvdGVSZXN1bHQsXHJcbiAgT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgUmFpbFdlbGxiZWluZ09iamVjdEludGVyZmFjZSxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgUmVjdXJzaXZlUGFydGlhbCxcclxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxyXG4gIFdlbGxiZWluZ0VudW1cclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBSYWlsQ2xhc3MsXHJcbiAgUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIsXHJcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBSYWlsVGlja2V0RXh0cmEsXHJcbiAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLFxyXG4gIFJhaWxKb3VybmV5RmFyZSxcclxuICBSYWlsU3RhdGlvbixcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgUmFpbEFjY291bnQsXHJcbiAgUmFpbFRpY2tldFF1ZXVlLFxyXG4gIFJhaWxKb3VybmV5TGVnXHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZVJhaWxRdW90ZUZldGNoZXIsXHJcbiAgUmFpbFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9yYWlsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXIsXHJcbiAgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1yYWlsLXN0YXRpb24uZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBSYWlsRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBSYWlsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSXJhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XHJcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XHJcbmltcG9ydCB7IElSYWlsQWlycG9ydEV4cHJlc3NTdGF0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1haXJwb3J0LWV4cHJlc3Mtc3RhdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBY2NvdW50c0xpc3QsXHJcbiAgUmFpbEJhc2tldEl0ZW0sXHJcbiAgVGlja2V0RXh0cmFzLFxyXG4gIFRpY2tldFF1ZXVlTGlzdFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1iYXNrZXQtaXRlbS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBSYWlsUmVjZW50U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC1yZWNlbnQtc2VhcmNoLWFyZ3MuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUmFpbFF1b3RlUmVzdWx0LCBSYWlsUXVvdGVSZXN1bHRBcnJheSB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBSYWlsUnVsZUVuaXR5LFxyXG4gIFJhaWxSdWxlRW5pdHlLZXlzLFxyXG4gIFJhaWxTdW1tYXJ5XHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdW1tYXJ5LWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi91c2VyLWZhdm91cml0ZS5lbnVtJztcclxuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGFsLW9wZW5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4vbW9kYWwtdHlwZXMuZW51bSc7XHJcbmltcG9ydCB7IElSYWlsU2VsZWN0ZWRUaWNrZXQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtc2VsZWN0ZWQtdGlja2V0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJhaWxEaXJlY3Rpb24gfSBmcm9tICcuL3JhaWwtZGlyZWN0aW9uLmVudW0nO1xyXG5pbXBvcnQgeyBSYWlsSW5kZXhUb1RpY2tldCB9IGZyb20gJy4vcmFpbC1pbmRleC10by10aWNrZXQnO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5cclxuZXhwb3J0IGVudW0gUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICBEZXBhcnQgPSAnRGVwYXJ0IEFmdGVyJyxcclxuICBBcnJpdmUgPSAnQXJyaXZlIEJlZm9yZSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUmFpbEpvdXJuZXlGYXJlVHlwZSB7IC8vIG1heSBuZWVkIHRvIGJlIGV4cGFuZGVkIGZvciBkdWFsL3NwbGl0XHJcbiAgUmV0dXJuID0gJ1JldHVybicsXHJcbiAgU2luZ2xlID0gJ1NpbmdsZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhaWxFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgUSBleHRlbmRzIFJhaWxRdW90ZUZldGNoZXJUeXBlLFxyXG4gICAgR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBSYWlsVGVtcFBhcmFtcyxcclxuICAgIFJhaWxRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBSYWlsRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUaWNrZXQ6IElSYWlsU2VsZWN0ZWRUaWNrZXQ7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmJvdW5kVGlja2V0OiBJUmFpbFNlbGVjdGVkVGlja2V0O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkU3VtbWFyeTogUmFpbFJ1bGVFbml0eTtcclxuICBwcml2YXRlIF9zZWxlY3RlZEluYm91bmRTdW1tYXJ5OiBSYWlsUnVsZUVuaXR5O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkU2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcztcclxuICBwcml2YXRlIGFsdGVybmF0aXZlV2VsbGJlaW5nOiBSYWlsV2VsbGJlaW5nT2JqZWN0SW50ZXJmYWNlO1xyXG5cclxuICBnZXQgc2VsZWN0ZWRTZWN0aW9uKCk6IE9CVFJhaWxGYXJlVHlwZXMge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU2VjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZFRpY2tldCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRpY2tldDtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RlZFRpY2tldChzZWxlY3RlZFRpY2tldDoge1xyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XHJcbiAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XHJcbiAgfSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUaWNrZXQgPSBzZWxlY3RlZFRpY2tldDtcclxuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUaWNrZXQuam91cm5leSxcclxuICAgICAgICB0aGlzLnN1bW1hcnkub3V0Ym91bmQgfHwgW11cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZEluYm91bmRUaWNrZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlbGVjdGVkSW5ib3VuZFRpY2tldChzZWxlY3RlZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldCkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRJbmJvdW5kVGlja2V0ID0gc2VsZWN0ZWRUaWNrZXQ7XHJcbiAgICBpZiAoIXRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnkgPSBudWxsO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRTdW1tYXJ5ID0gdGhpcy5zdW1tYXJ5LnJldHVybi5maW5kKFxyXG4gICAgICAgICh2YWx1ZTogUmFpbFJ1bGVFbml0eSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmpvdXJuZXlIYXNoID09PSB0aGlzLl9zZWxlY3RlZFRpY2tldC5qb3VybmV5LmpvdXJuZXlIYXNoO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldCB0cmFuc2FjdGlvbklkZW50aWZpZXIoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYW5zYWN0aW9uSWRlbnRpZmllciA9IGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYW5zYWN0aW9uSWRlbnRpZmllcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfcmFpbCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3JhaWxfcmVzdWx0cyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFBBU1NJTkdfUE9JTlQgPSAnUGFzc2luZyc7XHJcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgcHVibGljIHNlYXJjaFR5cGVzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnUmV0dXJuJywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdPbmUtV2F5JywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5IH1cclxuICAgIC8vIHsgZGlzcGxheTogJ09wZW4gUmV0dXJuJywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgLy8geyBkaXNwbGF5OiAnRHVhbCBTaW5nbGVzJywgdmFsdWU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5EdWFsU2luZ2xlSm91cm5leSB9LFxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBjbGFzc1R5cGVzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnQW55JywgdmFsdWU6IFJhaWxDbGFzcy5BbGwgfSxcclxuICAgIHsgZGlzcGxheTogJ1N0YW5kYXJkJywgdmFsdWU6IFJhaWxDbGFzcy5TdGFuZGFyZCB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmlyc3QnLCB2YWx1ZTogUmFpbENsYXNzLkZpcnN0IH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgYWlycG9ydEV4cHJlc3NTdGF0aW9uczogSVJhaWxBaXJwb3J0RXhwcmVzc1N0YXRpb25zW10gPSBbXHJcbiAgICB7IGNvZGU6ICdIUDEtMycsIG5hbWU6ICdIZWF0aHJvdyBUMS0zIC0gUGFkZGluZ3RvbicgfSxcclxuICAgIHsgY29kZTogJ0hQNCcsIG5hbWU6ICdIZWF0aHJvdyBUNCAtIFBhZGRpbmd0b24nIH0sXHJcbiAgICB7IGNvZGU6ICdIUDUnLCBuYW1lOiAnSGVhdGhyb3cgVDUgLSBQYWRkaW5ndG9uJyB9LFxyXG4gICAgeyBjb2RlOiAnUEgxLTMnLCBuYW1lOiAnUGFkZGluZ3RvbiAtIEhlYXRocm93IFQxLTMnIH0sXHJcbiAgICB7IGNvZGU6ICdQSDQnLCBuYW1lOiAnUGFkZGluZ3RvbiAtIEhlYXRocm93IFQ0JyB9LFxyXG4gICAgeyBjb2RlOiAnUEg1JywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUNScgfSxcclxuICAgIHsgY29kZTogJ0dWJywgbmFtZTogJ0dhdHdpY2sgLSBWaWN0b3JpYScgfSxcclxuICAgIHsgY29kZTogJ1ZHJywgbmFtZTogJ1ZpY3RvcmlhIC0gR2F0d2ljaycgfSxcclxuICAgIHsgY29kZTogJ1NMJywgbmFtZTogJ1N0YW5zdGVkIC0gTGl2ZXJwb29sIFN0cmVldCcgfSxcclxuICAgIHsgY29kZTogJ0xTJywgbmFtZTogJ0xpdmVycG9vbCBTdHJlZXQgLSBTdGFuc3RlZCcgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBhaXJwb3J0RXhwcmVzc1N0YXRpb25zQ29kZXM6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IHsgZGVwOiBzdHJpbmc7IGFycjogc3RyaW5nIH07XHJcbiAgfSA9IHtcclxuICAgICdIUDEtMyc6IHsgZGVwOiAnSFhYJywgYXJyOiAnUEFEJyB9LFxyXG4gICAgJ1BIMS0zJzogeyBkZXA6ICdQQUQnLCBhcnI6ICdIWFgnIH0sXHJcbiAgICBIUDQ6IHsgZGVwOiAnSEFGJywgYXJyOiAnUEFEJyB9LFxyXG4gICAgUEg0OiB7IGRlcDogJ1BBRCcsIGFycjogJ0hBRicgfSxcclxuICAgIEhQNTogeyBkZXA6ICdIV1YnLCBhcnI6ICdQQUQnIH0sXHJcbiAgICBQSDU6IHsgZGVwOiAnUEFEJywgYXJyOiAnSFdWJyB9LFxyXG4gICAgR1Y6IHsgZGVwOiAnR1RXJywgYXJyOiAnVklDJyB9LFxyXG4gICAgVkc6IHsgZGVwOiAnVklDJywgYXJyOiAnR1RXJyB9LFxyXG4gICAgU0w6IHsgZGVwOiAnU1NEJywgYXJyOiAnTFNUJyB9LFxyXG4gICAgTFM6IHsgZGVwOiAnTFNUJywgYXJyOiAnU1NEJyB9XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHJhaWxDcml0ZXJpYSA9IFtSYWlsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0LCBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlXTtcclxuXHJcbiAgcHVibGljIHRyYXZlbENhcmRzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmFtaWx5IHJhaWxjYXJkJywgdmFsdWU6ICdGQU0nIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcclxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxyXG4gIF07XHJcblxyXG4gIC8vIFlORzogXCJZb3VuZyBwZXJzb25zIHJhaWxjYXJkXCIsXHJcbiAgLy8gRElTOiBcIkRpc2FiaWxpdHkgcmFpbGNhcmRcIixcclxuICAvLyBGQU06IFwiRmFtaWx5IHJhaWxjYXJkXCIsXHJcbiAgLy8gSE1GOiBcIkZvcmNlcyByYWlsY2FyZFwiLFxyXG4gIC8vIFRBRDogXCJUcmF2ZWwgYWdlbmN5IGRpc2NvdW50XCJcclxuICBwdWJsaWMgcmVtb3ZlUGFzc2luZ1BvaW50c0Zyb21SZXN1bHRzID0gdHJ1ZTtcclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5SYWlsO1xyXG5cclxuICBwcml2YXRlIF9ib29rUmFpbEZyb21MaXZlID0gZmFsc2U7XHJcbiAgcHVibGljIGNoZWFwZXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XHJcbiAgICBvdXRib3VuZENoZWFwZXN0OiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICBpbmJvdW5kQ2hlYXBlc3Q6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldFJldHVybjogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgfT4oe1xyXG4gICAgb3V0Ym91bmRDaGVhcGVzdDoge1xyXG4gICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9LFxyXG4gICAgaW5ib3VuZENoZWFwZXN0OiB7XHJcbiAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgIH0sXHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0OiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXRSZXR1cm46IHtcclxuICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgZmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9LFxyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldER1YWw6IHtcclxuICAgICAgc3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgZmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRGaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGdldCBib29rUmFpbEZyb21MaXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2tSYWlsRnJvbUxpdmU7XHJcbiAgfVxyXG5cclxuICBzZXQgYm9va1JhaWxGcm9tTGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fYm9va1JhaWxGcm9tTGl2ZSA9IHZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgbWluT3V0Ym91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHB1YmxpYyBtaW5JbmJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwdWJsaWMgbWF4RGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIC8vIEVOVC0xNTU3IC0gbWF4IEV2b2x2aSBzZWFyY2ggZGF0ZSBpcyA2IG1vbnRocyBpbiBmdXR1cmVcclxuICAgIHllYXI6IG1vbWVudCgpLmFkZCgnbW9udGgnLCA2KS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkuYWRkKCdtb250aCcsIDYpLm1vbnRoKCksXHJcbiAgICBkYXk6IG1vbWVudCgpLmFkZCgnbW9udGgnLCA2KS5kYXRlKClcclxuICB9O1xyXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XHJcbiAgLy8gcHJpdmF0ZSBfY2hvc2VuVGlja2V0R3JvdXA6IFJhaWxUaWNrZXRHcm91cDtcclxuICBwcml2YXRlIF92aWFMb2NhdGlvbjogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdGcm9tOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdHJhdmVsbGluZ1RvOiBzdHJpbmc7XHJcbiAgcHJvdGVjdGVkIF9vcmlnaW5hbFVzZXJTZWFyY2g6IFJhaWxUZW1wUGFyYW1zO1xyXG4gIHB1YmxpYyBzdW1tYXJ5OiBSYWlsU3VtbWFyeSA9IHt9O1xyXG5cclxuICBnZXQgb3BlblJldHVybigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PVxyXG4gICAgICBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXQgb3BlblJldHVybihuZXdWYWw6IGJvb2xlYW4pIHtcclxuICAgIGlmIChuZXdWYWwpIHtcclxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPVxyXG4gICAgICAgIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoVHlwZSgpOiBSYWlsU2VhcmNoSm91cm5leVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblNlYXJjaFR5cGUobmV3VHlwZTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IG5ld1R5cGU7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbm9PZkFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ub09mQWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vT2ZBZHVsdHMoYWR1bHRzOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQWR1bHRzID0gYWR1bHRzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZDaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkNoaWxkcmVuKGNoaWxkcmVuOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nVG8oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ1RvO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdUbyh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ1RvID0gdHQ7XHJcblxyXG4gICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH0gZWxzZSBpZiAodHQ/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHR0LmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmF2ZWxsaW5nRnJvbTtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nRnJvbSh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20gPSB0dDtcclxuICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfSBlbHNlIGlmICh0dD8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuUmFpbENsYXNzKCk6IFJhaWxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblJhaWxDbGFzcyhuZXdDbGFzczogUmFpbENsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBuZXdDbGFzcztcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hDbGFzcygpOiBSYWlsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hDbGFzcyhjbGFzc1I6IFJhaWxDbGFzcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzID0gY2xhc3NSO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGV4dHJhVGltZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZXh0cmFUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGV4dHJhVGltZShleHRyYTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmV4dHJhVGltZSA9IGV4dHJhO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZpYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpYSh2aWE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy52aWEgPSB2aWE7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlhTG9jYXRpb24oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgdmlhTG9jYXRpb24odmlhTG9jYXRpb246IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uID0gdmlhTG9jYXRpb247XHJcblxyXG4gICAgdGhpcy5fdmlhTG9jYXRpb24gPSAnJztcclxuICAgIGlmICh2aWFMb2NhdGlvbj8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3ZpYUxvY2F0aW9uID0gdmlhTG9jYXRpb24ucmFpbHN0YXRpb24uaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dEJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Qm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMDcwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5taW5JbmJvdW5kRGF0ZSA9IHtcclxuICAgICAgeWVhcjogbmV3RGF0ZVRpbWUueWVhcigpLFxyXG4gICAgICBtb250aDogbmV3RGF0ZVRpbWUubW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogbmV3RGF0ZVRpbWUuZGF0ZSgpXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZS5pc0FmdGVyKHRoaXMuaW5Cb3VuZERhdGVUaW1lKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5pbkJvdW5kRGF0ZVRpbWVcclxuICAgICAgICAuc2V0KCdkYXRlJywgbmV3RGF0ZVRpbWUuZGF0ZSgpKVxyXG4gICAgICAgIC5zZXQoJ21vbnRoJywgbmV3RGF0ZVRpbWUubW9udGgoKSlcclxuICAgICAgICAuc2V0KCd5ZWFyJywgbmV3RGF0ZVRpbWUueWVhcigpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgb3V0Ym91bmRDcml0ZXJpYSgpOiBSYWlsU2VhcmNoQ3JpdGVyaWEge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kQ3JpdGVyaWEobmV3Q3JpdDogUmFpbFNlYXJjaENyaXRlcmlhKSB7XHJcbiAgICAvLyBjb25zb2xlLndhcm4oYCsrKyBTZXR0aW5nIE5ldyBDcml0ZXJpYTogJHtuZXdDcml0fSArKytgKTtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhID0gbmV3Q3JpdDtcclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5Cb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5Cb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fcmV0dXJuX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMTYwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICAvLyAhZGF0ZSBhbmQgdGltZSBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBMVVxyXG4gIHByaXZhdGUgX291dGJvdW5kX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgb3V0Ym91bmRfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZF9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IG91dGJvdW5kX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZF90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmV0dXJuX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgcmV0dXJuX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX3JldHVybl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmV0dXJuX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHJldHVybl90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmV0dXJuX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmV0dXJuQ3JpdGVyaWEoKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWE7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuQ3JpdGVyaWEobmV3Q3JpdDogUmFpbFNlYXJjaENyaXRlcmlhKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhcm5ldFRpY2tldCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FybmV0VGlja2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IGNhcm5ldFRpY2tldChuZXdDYXJuZXQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQgPSBuZXdDYXJuZXQ7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzYWJsZUF1dG9EaXNjb3VudHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRpc2FibGVBdXRvRGlzY291bnRzKG5ld0RpczogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzID0gbmV3RGlzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByaW9yaXRpc2VCeVByaWNlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmlvcml0aXNlQnlQcmljZTtcclxuICB9XHJcblxyXG4gIHNldCBwcmlvcml0aXNlQnlQcmljZShuZXdQcmlvcml0eTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnByaW9yaXRpc2VCeVByaWNlID0gbmV3UHJpb3JpdHk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXBwbHlSYWlsY2FyZHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFwcGx5UmFpbGNhcmRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGFwcGx5UmFpbGNhcmRzKGFwQ2FyZHM6IGJvb2xlYW4pIHtcclxuICAgIGlmICghYXBDYXJkcykge1xyXG4gICAgICB0aGlzLnJhaWxDYXJkcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFwcGx5UmFpbGNhcmRzID0gYXBDYXJkcztcclxuICB9XHJcblxyXG4gIGdldCByYWlsQ2FyZHMoKTogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJhaWxDYXJkcztcclxuICB9XHJcblxyXG4gIHNldCByYWlsQ2FyZHModmFsdWU6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yYWlsQ2FyZHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg0OClcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpOiB7IGNvZGU6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0RXhwcmVzc1N0YXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFpcnBvcnRFeHByZXNzU3RhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0RXhwcmVzc1N0YXRpb247XHJcbiAgfVxyXG5cclxuICBzZXQgYWlycG9ydEV4cHJlc3NTdGF0aW9uKHN0YXRpb246IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHN0YXRpb247XHJcbiAgICB0aGlzLl9zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25zKCk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBaXJwb3J0RXhwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcztcclxuICB9XHJcblxyXG4gIHNldCBpc0FpcnBvcnRFeHByZXNzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaXNBaXJwb3J0RXhwcmVzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9uSWRzKHN0YXRpb25JZHM6IHtcclxuICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHN0cmluZztcclxuICAgIGFycml2YWxMb2NhdGlvbklkOiBzdHJpbmc7XHJcbiAgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBkZXBhcnR1cmVMb2NhdGlvbklkLCBhcnJpdmFsTG9jYXRpb25JZCB9ID0gc3RhdGlvbklkcztcclxuICAgIGlmIChkZXBhcnR1cmVMb2NhdGlvbklkICYmIGFycml2YWxMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gYXJyaXZhbExvY2F0aW9uSWQ7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRTdW1tYXJ5KFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBzdW1tYXJ5OiBSYWlsUnVsZUVuaXR5W11cclxuICApIHtcclxuICAgIHJldHVybiBzdW1tYXJ5LmZpbmQoKHZhbHVlOiBSYWlsUnVsZUVuaXR5KTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogT0JUUmFpbFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBSYWlsZmV0Y2hlcjogQmFzZVJhaWxRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBwcml2YXRlIGdldFJhaWxTdGF0aW9uRmV0Y2hlcjogQmFzZUdldFJhaWxTdGF0aW9uRmV0Y2hlcjxHUlNfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHF1ZXJ5OiB7fTtcclxuICAgICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogUmFpbFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICBxdWVyeToge30sXHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIFJhaWxUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuICAgIGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoLnRyYW5zYWN0aW9uSWRlbnRpZmllciA9IG51bGw7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByYXdSZXN1bHRzOiBSYWlsUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25JZGVudGlmaWVyID0gbnVsbDtcclxuICAgIGNvbnN0IHNldEZhcmVzID0gKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZmFyZSxcclxuICAgICAgICB0eXBlOiBmYXJlPy50eXBlPy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc29ydEZhcmVzID0gKFxyXG4gICAgICBqb3VybmV5czogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj5bXVxyXG4gICAgKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdID0+IHtcclxuICAgICAgY29uc3QgdG9SZXR1cm4gPSB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUoam91cm5leXMpXHJcbiAgICAgICAgLnNvcnQoKGZpcnN0OiBSYWlsSm91cm5leU9wdGlvbiwgc2Vjb25kOiBSYWlsSm91cm5leU9wdGlvbik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXJzdFRpbWUgPSBtb21lbnQoZmlyc3QuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kVGltZSA9IG1vbWVudChzZWNvbmQuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgaWYgKGZpcnN0VGltZS5pc0JlZm9yZShzZWNvbmRUaW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlyc3RUaW1lLmlzQWZ0ZXIoc2Vjb25kVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5tYXAoKGpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzb3J0ID0gKFxyXG4gICAgICAgICAgICBmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICAgKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkdWFsU2luZ2xlSm91cm5leXMgPSAoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IFtdKVxyXG4gICAgICAgICAgICAuc29ydChzb3J0KVxyXG4gICAgICAgICAgICAubWFwKHNldEZhcmVzKTtcclxuICAgICAgICAgIGNvbnN0IG9wZW5SZXR1cm5Kb3VybmV5cyA9IChqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leXMgPSAoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSm91cm5leXMgPSAoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5cy5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBzaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgc2luZ2xlSm91cm5leXMubWFwKHNldEZhcmVzKTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0b1JldHVybjEgPSB7XHJcbiAgICAgICAgICAgIC4uLmpvdXJuZXksXHJcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShcclxuICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICAgWyd0eXBlJywgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgICAgIFsndHlwZScsIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXV1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBhcyBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0b1JldHVybjE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b1JldHVybjtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJhd1Jlc3VsdHMubWFwKChyYWlsUmVzdWx0OiBSYWlsUXVvdGVSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnN1bW1hcnkgPSByYWlsUmVzdWx0LnN1bW1hcnk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kSW50ZXJuYWwgPSBzb3J0RmFyZXMocmFpbFJlc3VsdC5vdXRib3VuZCB8fCBbXSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmRJbnRlcm5hbCA9IHNvcnRGYXJlcyhyYWlsUmVzdWx0LnJldHVybiB8fCBbXSk7XHJcblxyXG4gICAgICBjb25zdCBpbmRleFRvVGlja2V0cyA9IHRoaXMubWFrZUZhcmVOYW1lcyhbXHJcbiAgICAgICAgb3V0Ym91bmRJbnRlcm5hbCB8fCBbXSxcclxuICAgICAgICBpbmJvdW5kSW50ZXJuYWwgfHwgW11cclxuICAgICAgXSk7XHJcblxyXG4gICAgICBjb25zdCBjb252ZXJ0RmFyZXMgPSAoXHJcbiAgICAgICAgZmFyZXM6IE9CVFJhaWxJbnRlcm5hbEZhcmUsXHJcbiAgICAgICAgdGlja2V0VHlwZTogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICAgICApOiBPQlRSYWlsRmFyZSA9PiB7XHJcbiAgICAgICAgY29uc3QgcnRpID0gaW5kZXhUb1RpY2tldHNbdGlja2V0VHlwZV07XHJcbiAgICAgICAgY29uc3QgdGlja2V0VHlwZXMgPSBydGkuZ2V0VGlja2V0VHlwZXMoKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGlja2V0VHlwZXMpLnJlZHVjZShcclxuICAgICAgICAgIChjdXJyZW50OiBPQlRSYWlsRmFyZSwgW3R5cGUsIGNvdW50XTogW3N0cmluZywgbnVtYmVyXSkgPT4ge1xyXG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdID0gcnRpXHJcbiAgICAgICAgICAgICAgLndvcmtvdXRJbmRleGVzKHR5cGUpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGRzOiBzdHJpbmdbXSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChmYXJlcywgZmllbGRzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge31cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb252ZXRSYWlsSk91cm5leSA9IChcclxuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcydcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBjb252ZXJ0RmFyZXMoXHJcbiAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJ1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcydcclxuICAgICAgICAgIClcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgb3V0Ym91bmQgPSBvdXRib3VuZEludGVybmFsLm1hcChjb252ZXRSYWlsSk91cm5leSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmQgPSBpbmJvdW5kSW50ZXJuYWwubWFwKGNvbnZldFJhaWxKT3VybmV5KTtcclxuXHJcbiAgICAgIGNvbnN0IG91dFByaWNlcyA9IHRoaXMudXBkYXRlUHJpY2VzKFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xyXG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICAgICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiB7XHJcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGluUHJpY2VzID0gdGhpcy51cGRhdGVQcmljZXMoXHJcbiAgICAgICAgaW5ib3VuZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IG91dFByaWNlcy5jaGVhcGVzdENsYXNzVGlja2V0LFxyXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogb3V0UHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXRcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNoZWFwZXN0Lm5leHQoe1xyXG4gICAgICAgIG91dGJvdW5kQ2hlYXBlc3Q6IG91dFByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgaW5ib3VuZENoZWFwZXN0OiBpblByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogaW5QcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiBvdXRQcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDogaW5QcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5yYWlsUmVzdWx0LFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHJldHVybjogaW5ib3VuZFxyXG4gICAgICB9IGFzIE9CVFJhaWxRdW90ZVJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRmFyZU5hbWVzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXVtdXHJcbiAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAncmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICdzaW5nbGVKb3VybmV5RmFyZXMnXHJcbiAgICBdLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIGFjY3VtOiBSZWNvcmQ8T0JUUmFpbEZhcmVUeXBlcywgUmFpbEluZGV4VG9UaWNrZXQ+LFxyXG4gICAgICAgIG5leHQ6IE9CVFJhaWxGYXJlVHlwZXNcclxuICAgICAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiA9PiB7XHJcbiAgICAgICAgYWNjdW1bbmV4dF0gPSB0aGlzLl9tYWtlRmFyZU5hbWVzKGpvdXJuZXlzLCBuZXh0KTtcclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21ha2VGYXJlTmFtZXMoXHJcbiAgICBqb3VybmV5czogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdW10sXHJcbiAgICBmaWVsZDogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICk6IFJhaWxJbmRleFRvVGlja2V0IHtcclxuICAgIHJldHVybiBfLmZsYXR0ZW4oam91cm5leXMgfHwgW10pLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHJpdDogUmFpbEluZGV4VG9UaWNrZXQsXHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvblxyXG4gICAgICApOiBSYWlsSW5kZXhUb1RpY2tldCA9PiB7XHJcbiAgICAgICAgaWYgKCFqb3VybmV5KSB7XHJcbiAgICAgICAgICByZXR1cm4gcml0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuZW50cmllcyhqb3VybmV5W2ZpZWxkXSB8fCB7fSkuZm9yRWFjaChcclxuICAgICAgICAgIChbdGlja2V0TmFtZSwgc3ViZmFyZXNdOiBbXHJcbiAgICAgICAgICAgIHN0cmluZyxcclxuICAgICAgICAgICAgUmVjb3JkPHN0cmluZywgT0JUUmFpbEpvdXJuZXlGYXJlW10+XHJcbiAgICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN1YmZhcmVzKS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgIChbdGlja2V0VHlwZSwgZmFyZXNdOiBbc3RyaW5nLCBPQlRSYWlsSm91cm5leUZhcmVbXV0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJpdC5hZGRGYXJlcyh0aWNrZXROYW1lLCB0aWNrZXRUeXBlLCBmYXJlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcml0Lm5leHRKb3VybmV5KCk7XHJcbiAgICAgICAgcmV0dXJuIHJpdDtcclxuICAgICAgfSxcclxuICAgICAgbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlUHJpY2VzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxKb3VybmV5T3B0aW9uW10sXHJcbiAgICBwcmljZXM6IHtcclxuICAgICAgY2hlYXBlc3RUaWNrZXRzOiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIH0sXHJcbiAgICBpc1JldHVybjogYm9vbGVhblxyXG4gICk6IHtcclxuICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICB9IHtcclxuICAgIGNvbnN0IG1pbiA9IChcclxuICAgICAgY3VycmVudDoge1xyXG4gICAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XHJcbiAgICAgICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xyXG4gICAgICB9LFxyXG4gICAgICBmYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10sXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApOiB7XHJcbiAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XHJcbiAgICB9ID0+IHtcclxuICAgICAgaWYgKCFmYXJlcyB8fCBmYXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXh0ID0gZmFyZXNbMF0ucHJpY2U7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnByaWNlID4gMCAmJiBjdXJyZW50LnByaWNlIDwgbmV4dFxyXG4gICAgICAgID8gY3VycmVudFxyXG4gICAgICAgIDogeyBwcmljZTogbmV4dCwgam91cm5leSwgZmFyZTogZmFyZXNbMF0gfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHByaWNlczE6IHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IHtcclxuICAgICAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgfSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc29ydCA9IChcclxuICAgICAgICAgIGZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmlyc3QucHJpY2UgLSBzZWNvbmQucHJpY2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLlN0YW5kYXJkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcylcclxuICAgICAgICApLmZpbHRlcihcclxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PlxyXG4gICAgICAgICAgICBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLkZpcnN0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBvcGVuUmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG9wZW5SZXR1cm5GaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKFxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5vRHVhbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLm9wZW5SZXR1cm5TdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ucmV0dXJuU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgIC4uLnNpbmdsZVN0YW5kYXJkSm91cm5leXNcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IGFsbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLmR1YWxTaW5nbGVTdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ubm9EdWFsU3RhbmRhcmRcclxuICAgICAgICBdLnNvcnQoc29ydCk7XHJcbiAgICAgICAgY29uc3Qgbm9EdWFsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4ub3BlblJldHVybkZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5yZXR1cm5GaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4uc2luZ2xlRmlyc3RKb3VybmV5c1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgYWxsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4uZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5ub0R1YWxGaXJzdFxyXG4gICAgICAgIF0uc29ydChzb3J0KTtcclxuICAgICAgICBpZiAoIWlzUmV0dXJuKSB7XHJcbiAgICAgICAgICBub0R1YWxTdGFuZGFyZC5zb3J0KHNvcnQpO1xyXG4gICAgICAgICAgYWxsRmlyc3Quc29ydChzb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5kdWFsU2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5vcGVuUmV0dXJuSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcclxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaXNSZXR1cm4pIHtcclxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIGFsbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgbm9EdWFsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICBub0R1YWxGaXJzdCxcclxuICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGlzU3RhbmRhcmRDbGFzc1NpbmdsZSA9XHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZT8uZmFyZVxyXG4gICAgICAgICAgICAgID8uc2luZ2xlT3JSZXR1cm4gPT09IFJhaWxKb3VybmV5RmFyZVR5cGUuU2luZ2xlO1xyXG4gICAgICAgICAgaWYgKGlzU3RhbmRhcmRDbGFzc1NpbmdsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmJvdW5kUHJpY2UgPSBtaW4oXHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgICBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kVG90YWxQcmljZSA9XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmRUb3RhbFByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID1cclxuICAgICAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZTtcclxuICAgICAgICAgICAgICAvLyBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlID0ge1xyXG4gICAgICAgICAgICAgIC8vICAgcHJpY2U6IDAsXHJcbiAgICAgICAgICAgICAgLy8gICBqb3VybmV5OiBudWxsLFxyXG4gICAgICAgICAgICAgIC8vICAgZmFyZTogbnVsbFxyXG4gICAgICAgICAgICAgIC8vIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgaW5ib3VuZFByaWNlLnByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgaW5ib3VuZFByaWNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgaXNGaXJzdENsYXNzU2luZ2xlID1cclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlPy5mYXJlPy5zaW5nbGVPclJldHVybiA9PT1cclxuICAgICAgICAgICAgUmFpbEpvdXJuZXlGYXJlVHlwZS5TaW5nbGU7XHJcbiAgICAgICAgICBpZiAoaXNGaXJzdENsYXNzU2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluYm91bmRQcmljZSA9IG1pbihcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxQcmljZSA9IHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZS5wcmljZTtcclxuICAgICAgICAgICAgaWYgKHRvdGFsUHJpY2UgPiBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUucHJpY2UpIHtcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlO1xyXG4gICAgICAgICAgICAgIC8vIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSB7XHJcbiAgICAgICAgICAgICAgLy8gICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAvLyAgIGpvdXJuZXk6IG51bGwsXHJcbiAgICAgICAgICAgICAgLy8gICBmYXJlOiBudWxsXHJcbiAgICAgICAgICAgICAgLy8gfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBpbmJvdW5kUHJpY2UucHJpY2UgPlxyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IGluYm91bmRQcmljZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbEZpcnN0LFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJpY2VzMTtcclxuICAgICAgfSxcclxuICAgICAgcHJpY2VzXHJcbiAgICApO1xyXG4gIH1cclxuICBhc3luYyBzZWxlY3RUaWNrZXQoXHJcbiAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24sXHJcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcyxcclxuICAgIHdlbGxiZWluZzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXJhaWxGYXJlLnNlbGVjdGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkVGlja2V0ID0gdGhpcy5zZWxlY3RlZFRpY2tldDtcclxuICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcclxuICAgICAgVXNlckZhdm9ydXJpdGUuQWx0ZXJuYXRpdmVSYWlsSXRpbmVyYXJ5RW5hYmxlZFxyXG4gICAgKTtcclxuICAgIGlmIChzZWxlY3RlZFRpY2tldCAmJiAhd2VsbGJlaW5nICYmIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcpIHtcclxuICAgICAgY29uc3Qgb3V0OiBPQlRSYWlsSm91cm5leU9wdGlvbiA9IHNlbGVjdGVkVGlja2V0LmpvdXJuZXk7XHJcbiAgICAgIGNvbnN0IGluQjogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBqb3VybmV5O1xyXG5cclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzID0gbW9tZW50KG91dC5hcnJpdmVEYXRlVGltZSkuZGlmZihcclxuICAgICAgICBtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSxcclxuICAgICAgICAnaG91cnMnLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzSW4gPSBtb21lbnQoaW5CLmFycml2ZURhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdob3VycycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXlEaWZmZXJuY2UgPSBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChvdXQuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdkYXknXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB0b0FkZCA9IGF3YWl0IHRoaXMuY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgICAgIHRpbWVEaWZmSW5Ib3VycyArIHRpbWVEaWZmSW5Ib3Vyc0luLFxyXG4gICAgICAgIGRheURpZmZlcm5jZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodG9BZGQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFRpY2tldChcclxuICAgICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZSxcclxuICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgc2VjdGlvbixcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMgPSB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnc2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXkgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0LmpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzXHJcbiAgICAgICAgICAgICAgICA/IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUsXHJcbiAgICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5IH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2codGlja2V0RXh0cmFzKTtcclxuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgPyB0aWNrZXRFeHRyYXNcclxuICAgICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxyXG4gICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLFxyXG4gICAgICAgICAgICAgIHJhaWxGYXJlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnb3BlblJldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5IH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aWNrZXRFeHRyYXMpO1xyXG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRPcGVuUmV0dXJuVG9CYXNrZXQoXHJcbiAgICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgaG91ckRpZmZlcmVuY2U6IG51bWJlcixcclxuICAgIGRheURpZmZlcmVuY2U6IG51bWJlclxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gISBFTlQtMTQ4MSAtIENoZWNrIGlmIHdlIGFyZSBzZWFyY2hpbmcgcmV0dXJuIHJhaWwgLSBhbmQgYWx0ZXJuYXRpdmUgd2VsbGJlaW5nIGlzIGVuYWJsZWRcclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXTtcclxuICAgIGNvbnN0IGNoZWNrID1cclxuICAgICAgdGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZy5lbmFibGUgJiZcclxuICAgICAgTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpID4gMCAmJlxyXG4gICAgICBwYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkgJiZcclxuICAgICAgaG91ckRpZmZlcmVuY2UgPj0gTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpICYmXHJcbiAgICAgIGRheURpZmZlcmVuY2UgPT09IDAgJiZcclxuICAgICAgdGhpcy5ub09mQWR1bHRzICsgdGhpcy5ub09mQ2hpbGRyZW4gPD0gbWF4VHJhdmVsbGVyV2VsbGJlaW5nO1xyXG4gICAgaWYgKGNoZWNrKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgTW9kYWxUeXBlcy5BbHRlcm5hdGl2ZVJhaWxNb2RhbENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICB0aGlzLnBlcmZvcm1BbHRlcm5hdGl2ZVJhaWxBbmRIb3RlbFNlYXJjaCgpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXJmb3JtQWx0ZXJuYXRpdmVSYWlsQW5kSG90ZWxTZWFyY2goKTogdm9pZCB7XHJcbiAgICAvLyBhbHRlciB0aGUgc2VhcmNoIHBhcmFtc1xyXG4gICAgLy8gdGhlIGNhbGwgdGhlIHNlYXJjaCBmdW5jdGlvblxyXG5cclxuICAgIGNvbnNvbGUubG9nKCcrKysgQ3JlYXRpbmcgdGhlIEFsdGVybmF0aXZlIFNlYXJjaCBQYXJhbXMgKysrJyk7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNIb3RlbCA9XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF07XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNSYWlsID1cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdO1xyXG4gICAgc2VhcmNoUGFyYW1zSG90ZWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc1JhaWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc0hvdGVsLnByaW9yaXR5ID0gc2VhcmNoUGFyYW1zUmFpbC5wcmlvcml0eTtcclxuICAgIGNvbnN0IGhvdGVsUGFyYW1zID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXTtcclxuICAgIGNvbnN0IHJhaWxQYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF07XHJcbiAgICAvLyBGaXJzdCBvZiBhbGwgLSBhbHRlciB0aGUgcmFpbCBpbmJvdW5kIGRhdGUgLSBhZGQgYSBkYXlcclxuICAgIHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1xyXG4gICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICBdLmluQm91bmREYXRlVGltZS5hZGQoMSwgJ2RheScpO1xyXG5cclxuICAgIC8vIG5vdyBjcmVhdGUgdGhlIGhvdGVsIHNlYXJjaCBwYXJhbXNcclxuICAgIGhvdGVsUGFyYW1zLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XHJcbiAgICBob3RlbFBhcmFtcy5sb2NhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvO1xyXG4gICAgaG90ZWxQYXJhbXMudHJhaW5zU3RhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvLnJhaWxzdGF0aW9uO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tpbl9kYXRlID0gcmFpbFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tvdXRfZGF0ZSA9IHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMubm9fb2Zfb2NjdXBhbnRzID1cclxuICAgICAgcmFpbFBhcmFtcy5ub09mQWR1bHRzICsgcmFpbFBhcmFtcy5ub09mQ2hpbGRyZW47XHJcbiAgICBob3RlbFBhcmFtcy5ub19vZl9yb29tcyA9IDE7XHJcbiAgICBob3RlbFBhcmFtcy5kaXN0YW5jZSA9IDEwO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKFdlbGxiZWluZ0VudW0uV0VMTEJFSU5HKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdFRpY2tldE5vQWRkKFxyXG4gICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghcmFpbEZhcmUuc2VsZWN0YWJsZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJysrKyBSYWlsIGZhcmUgaXMgbm90IHNlbGVjdGFibGUgKysrJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc091dFRpY2tldFNlbGVjdGVkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2ggJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoID09PSByYWlsRmFyZS5mYXJlSGFzaDtcclxuICAgIGNvbnN0IGlzSW5UaWNrZXRTZWxlY3RlZCA9XHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kXHJcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT1cclxuICAgICAgICAgICAgam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2hcclxuICAgICAgICA6IGZhbHNlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaXNPdXRUaWNrZXRTZWxlY3RlZCB8fFxyXG4gICAgICAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQgJiYgaXNJblRpY2tldFNlbGVjdGVkKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnKysrIEpvdXJuZXkgYW5kIGZhcmUgYXJlIGFscmVhZHkgc2VsZWN0ZWQgLSBicmVha2luZyBvdXQgKysrJ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gICAgICBpZiAoaXNPdXRUaWNrZXRTZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5fc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuX3NlbGVjdGVkU2VjdGlvbiAhPT0gc2VjdGlvbikgfHxcclxuICAgICAgKHRoaXMuX3NlbGVjdGVkU2VjdGlvbiA9PT0gJ3JldHVybkpvdXJuZXlGYXJlcycgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Py5mYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyICE9PVxyXG4gICAgICAgICAgcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2VsZWN0ZWRTZWN0aW9uID0gc2VjdGlvbjtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyA9IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3NpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXR1cm5Kb3VybmV5RmFyZXMnOlxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFkZCB0byBiYXNrZXQgZm9yIGdvMi9zY2lvblxyXG4gICAqIEBwYXJhbSBzb3VyY2VJZFxyXG4gICAqIEBwYXJhbSBzZWFyY2hRdWVyeVxyXG4gICAqIEBwYXJhbSBqb3VybmV5XHJcbiAgICogQHBhcmFtIHJhaWxGYXJlXHJcbiAgICogQHBhcmFtIGluYm91bmRSYWlsRmFyZVxyXG4gICAqIEBwYXJhbSBpbmJvdW5kSm91cm5leVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkVG9CYXNrZXQoXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZFJhaWxGYXJlPzogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEpvdXJuZXk/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgaWYgKHNlYXJjaFF1ZXJ5LmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5KSB7XHJcbiAgICAgIC8vIFRPRE9cclxuICAgICAgYXdhaXQgdGhpcy5hZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgam91cm5leSxcclxuICAgICAgICByYWlsRmFyZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gbm93IGNoZWNrIGlmIHdlIGhhdmUgY2hvc2VuIGR1YWwgc2luZ2xlcyBvciByZXR1cm5zXHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gPT09ICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmFpbEZhcmUuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBpbmJvdW5kSm91cm5leSxcclxuICAgICAgICAgIHJhaWxGYXJlLFxyXG4gICAgICAgICAgaW5ib3VuZFJhaWxGYXJlXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAhIC0gRHVhbCBTaW5nbGVzXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGluYm91bmRKb3VybmV5LFxyXG4gICAgICAgICAgcmFpbEZhcmUsXHJcbiAgICAgICAgICBpbmJvdW5kUmFpbEZhcmVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgICBzb3VyY2VJZCxcclxuICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgIGpvdXJuZXksXHJcbiAgICAgIHJhaWxGYXJlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBvdXRib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIG91dGJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeShzZWFyY2hRdWVyeSk7XHJcblxyXG4gICAgbGV0IGluVGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG5cclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG4gICAgaWYgKGluYm91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIGluVGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QoaW5ib3VuZC50aWNrZXRFeHRyYXNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvdXRib3VuZD8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3Qob3V0Ym91bmQudGlja2V0RXh0cmFzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICBvdXRib3VuZEZhcmUsXHJcbiAgICAgIG91dGJvdW5kLFxyXG4gICAgICBpbmJvdW5kXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuICAgICAgY29uc3QgbG93ZXN0VGlja2V0ID0gdGhpcy5maW5kQ2hlYXBlc3RUaWNrZXQoKVxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChvdXRib3VuZC50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBvdXRib3VuZEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IG91dGJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IG91dGJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGlud2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluYm91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogaW5ib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IGluYm91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpbmJvdW5kLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaW5ib3VuZEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IGluYm91bmRGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLnRyYW5zYWN0aW9uSWRlbnRpZmllcixcclxuICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW291dGJvdW5kRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXHJcbiAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOiBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGlzRHVhbFNpbmdsZVJldHVybjogdHJ1ZSxcclxuICAgICAgICAgICAgam91cm5leUxlZ3M6IHRoaXMucmVtb3ZlZFNjaGVkdWxlZFBsYXRmb3JtRnJvbUNhbGxpbmdQb2ludHMoXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgZVRpY2tldDogISFvdXRib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC8vIHRpY2tldFF1ZXVlTGlzdCxcclxuICAgICAgICAgIHJldHVybjoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtpbmJvdW5kRmFyZS5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcl0sXHJcbiAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOiBpbmJvdW5kRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcclxuICAgICAgICAgICAgaXNEdWFsU2luZ2xlUmV0dXJuOiB0cnVlLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBpbmJvdW5kLmpvdXJuZXlMZWdzXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IE51bWJlcihcclxuICAgICAgICAgIE51bWJlcihvdXRib3VuZEZhcmUucHJpY2UgKyBpbmJvdW5kRmFyZS5wcmljZSkudG9GaXhlZCgyKVxyXG4gICAgICAgICksXHJcbiAgICAgICAgY3VycmVuY3k6IG91dGJvdW5kRmFyZS5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgc2VhcmNoUXVlcnk6IHJhaWxRdWVyeSxcclxuICAgICAgICBjbzJQZXJJdGVtOiBvdXRib3VuZC5jbzJQZXJJdGVtLFxyXG4gICAgICAgIGNvMlBlclBhc3Nlbmdlcjogb3V0Ym91bmQuY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgaW5ib3VuZERhdGU6IGluYm91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgbG93ZXN0UHJpY2U6IGxvd2VzdFRpY2tldC5hbW91bnQgIT0gTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSArIGluYm91bmRGYXJlLnByaWNlKSB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9IG91dGJvdW5kRmFyZS5jdXJyZW5jeSA/IFxyXG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCA6IG51bGwsXHJcbiAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTogKGxvd2VzdFRpY2tldC5hbW91bnQgIT0gTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSArIGluYm91bmRGYXJlLnByaWNlKSB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9IG91dGJvdW5kRmFyZS5jdXJyZW5jeSkgPyBcclxuICAgICAgICAgIDxDdXJyZW5jeUNvZGU+bG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSA6IG51bGxcclxuICAgICAgfTtcclxuICAgICAgLy8gaWYgaW5UaWNrZXRFeHRyYXMgb3Igb3V0VGlja2V0RXh0cmFzIGV4aXN0cyBhZGQgdGhlIG9iamVjdCB0byBiYXNrZXRJdGVtXHJcbiAgICAgIGlmIChpblRpY2tldEV4dHJhcykge1xyXG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLnJldHVybi50aWNrZXRFeHRyYXMgPSBpblRpY2tldEV4dHJhcztcclxuICAgICAgfVxyXG4gICAgICBpZiAob3V0VGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gb3V0VGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbiB8fCBpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jb250aW51ZTtcclxuICB9XHJcblxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldCgpOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAodGhpcy5jaGVhcGVzdFByaWNlKSByZXR1cm4gdGhpcy5jaGVhcGVzdFByaWNlXHJcbiAgICBsZXQgY2hlYXBlc3RPdXRib3VuZFRpY2tldDogT0JUUmFpbEpvdXJuZXlGYXJlXHJcbiAgICBsZXQgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0OiBPQlRSYWlsSm91cm5leUZhcmVcclxuICAgIHRoaXMuZnVsbFJlc3VsdHNbMF0ub3V0Ym91bmQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5kdWFsU2luZ2xlSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlYXBlc3RPbkpvdXJuZXkgPSBlbGVtZW50LmR1YWxTaW5nbGVKb3VybmV5RmFyZXNba2V5XS5maWx0ZXIoYSA9PiBhICE9IG51bGwpLnNvcnQoYSA9PiBhLnByaWNlKVswXVxyXG4gICAgICAgIGlmIChjaGVhcGVzdE9uSm91cm5leSAmJiAoIWNoZWFwZXN0T3V0Ym91bmRUaWNrZXQgfHwgY2hlYXBlc3RPdXRib3VuZFRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKSkgY2hlYXBlc3RPdXRib3VuZFRpY2tldCA9IGNoZWFwZXN0T25Kb3VybmV5XHJcbiAgICAgIH0pXHJcbiAgICAgIE9iamVjdC5rZXlzKGVsZW1lbnQucmV0dXJuSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlYXBlc3RPbkpvdXJuZXkgPSBlbGVtZW50LnJldHVybkpvdXJuZXlGYXJlc1trZXldLmZpbHRlcihhID0+IGEgIT0gbnVsbCkuc29ydChhID0+IGEucHJpY2UpWzBdXHJcbiAgICAgICAgaWYgKGNoZWFwZXN0T25Kb3VybmV5ICYmICghY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0IHx8IGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKSkgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0ID0gY2hlYXBlc3RPbkpvdXJuZXlcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gICAgbGV0IGNoZWFwZXN0UmV0dXJuVGlja2V0OiBPQlRSYWlsSm91cm5leUZhcmVcclxuICAgIGlmICh0aGlzLmZ1bGxSZXN1bHRzWzBdLnJldHVybil7XHJcbiAgICAgIHRoaXMuZnVsbFJlc3VsdHNbMF0ucmV0dXJuLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5kdWFsU2luZ2xlSm91cm5leUZhcmVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjaGVhcGVzdE9uSm91cm5leSA9IGVsZW1lbnQuZHVhbFNpbmdsZUpvdXJuZXlGYXJlc1trZXldLmZpbHRlcihhID0+IGEgIT0gbnVsbCkuc29ydChhID0+IGEucHJpY2UpWzBdXHJcbiAgICAgICAgICBpZiAoY2hlYXBlc3RPbkpvdXJuZXkgJiYgKCFjaGVhcGVzdFJldHVyblRpY2tldCB8fCBjaGVhcGVzdFJldHVyblRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKSkgY2hlYXBlc3RSZXR1cm5UaWNrZXQgPSBjaGVhcGVzdE9uSm91cm5leVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5yZXR1cm5Kb3VybmV5RmFyZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNoZWFwZXN0T25Kb3VybmV5ID0gZWxlbWVudC5yZXR1cm5Kb3VybmV5RmFyZXNba2V5XS5maWx0ZXIoYSA9PiBhICE9IG51bGwpLnNvcnQoYSA9PiBhLnByaWNlKVswXVxyXG4gICAgICAgICAgaWYgKGNoZWFwZXN0T25Kb3VybmV5ICYmICghY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0IHx8IGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5wcmljZSA+IGNoZWFwZXN0T25Kb3VybmV5LnByaWNlKSkgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0ID0gY2hlYXBlc3RPbkpvdXJuZXlcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gICAgXHJcbiAgICBpZiAoY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0KXtcclxuICAgICAgaWYgKGNoZWFwZXN0UmV0dXJuVGlja2V0KXtcclxuICAgICAgICBpZiAoY2hlYXBlc3RPdXRib3VuZFRpY2tldC5wcmljZSArIGNoZWFwZXN0UmV0dXJuVGlja2V0LnByaWNlIDwgY2hlYXBlc3RPcGVuUmV0dXJuVGlja2V0LnByaWNlICYmIGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQuY3VycmVuY3kgPT0gY2hlYXBlc3RSZXR1cm5UaWNrZXQuY3VycmVuY3kpIFxyXG4gICAgICAgICAgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UgKyBjaGVhcGVzdFJldHVyblRpY2tldC5wcmljZSwgY3VycmVuY3lDb2RlOiBjaGVhcGVzdE91dGJvdW5kVGlja2V0LmN1cnJlbmN5fVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UgPCBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQucHJpY2UpXHJcbiAgICAgICAgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UsIGN1cnJlbmN5Q29kZTogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5jdXJyZW5jeX1cclxuICAgICAgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3BlblJldHVyblRpY2tldC5wcmljZSwgY3VycmVuY3lDb2RlOiBjaGVhcGVzdE9wZW5SZXR1cm5UaWNrZXQuY3VycmVuY3l9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjaGVhcGVzdFJldHVyblRpY2tldCkgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UgKyBjaGVhcGVzdFJldHVyblRpY2tldC5wcmljZSwgY3VycmVuY3lDb2RlOiBjaGVhcGVzdE91dGJvdW5kVGlja2V0LmN1cnJlbmN5fVxyXG4gICAgcmV0dXJuIHthbW91bnQ6IGNoZWFwZXN0T3V0Ym91bmRUaWNrZXQucHJpY2UsIGN1cnJlbmN5Q29kZTogY2hlYXBlc3RPdXRib3VuZFRpY2tldC5jdXJyZW5jeX1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlUmFpbFF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpIHtcclxuICAgIGNvbnN0IHBhcnNlZFN0YXRpb24gPVxyXG4gICAgICB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbnNDb2Rlc1t0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbl07XHJcbiAgICBjb25zb2xlLmxvZygnLS0tIFBhcnNlZCBTdGF0aW9uIGlzIDonLCBwYXJzZWRTdGF0aW9uKTtcclxuICAgIGlmIChwYXJzZWRTdGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gcGFyc2VkU3RhdGlvbi5kZXA7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHBhcnNlZFN0YXRpb24uYXJyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgRnJvbSBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdUbykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBUbyBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdXRCb3VuZERhdGVUaW1lPy5pc0JlZm9yZShub3cpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0RlcGFydHVyZSBEYXRlL1RpbWUgY2Fubm90IGJlIGluIHRoZSBwYXN0LidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xyXG4gICAgICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcclxuXHJcbiAgICAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5vdXRCb3VuZERhdGVUaW1lKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpYSkge1xyXG4gICAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbi4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPCAxKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXIgPSBudWxsO1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgICAgUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2godGhpcy5SYWlsZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBSYWlsUmVjZW50U2VhcmNoQXJncyA9XHJcbiAgICAgIHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlJhaWwsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXNcclxuICApOiBSYWlsUmVjZW50U2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmlzQWlycG9ydEV4cHJlc3MgPSB0aGlzLmlzQWlycG9ydEV4cHJlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdGcm9tID0gdGhpcy50cmF2ZWxsaW5nRnJvbTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ1RvID0gdGhpcy50cmF2ZWxsaW5nVG87XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmlhTG9jYXRpb24pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudmlhTG9jYXRpb24gPSB0aGlzLnZpYUxvY2F0aW9uO1xyXG4gICAgfVxyXG4gICAgc2VhcmNoUXVlcnkub3V0Ym91bmRTdGF0aW9uQ29kZSA9XHJcbiAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZTtcclxuXHJcbiAgICBzZWFyY2hRdWVyeS5pbmJvdW5kU3RhdGlvbkNvZGUgPVxyXG4gICAgICB0aGlzLnRyYXZlbGxpbmdUbz8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGU7XHJcbiAgICB0aGlzLmNob3NlblNlYXJjaENsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2xhc3M7XHJcbiAgICB0aGlzLmV4dHJhVGltZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmV4dHJhVGltZVRvQ2hhbmdlO1xyXG4gICAgdGhpcy5pc0FpcnBvcnRFeHByZXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuaXNBaXJwb3J0RXhwcmVzcztcclxuICAgIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWUgYW5kIG91dGJvdW5kQ3JpdGVyaWEgLHJldHVybkNyaXRlcmlhXHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lKTtcclxuICAgIHRoaXMub3V0Ym91bmRDcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGUgPT09XHJcbiAgICAgIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lKVxyXG4gICAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxEYXRlVGltZSk7XHJcblxyXG4gICAgICB0aGlzLnJldHVybkNyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsRGF0ZVRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5UmFpbGNhcmRzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3M/LnJhaWxDYXJkUXVhbGlmaWVycz8ubGVuZ3RoXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuYXBwbHlSYWlsY2FyZHMpIHtcclxuICAgICAgdGhpcy5yYWlsQ2FyZHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yYWlsQ2FyZFF1YWxpZmllcnM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nVG87XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ0Zyb207XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZTtcclxuICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRpb25JZHMgPSB7XHJcbiAgICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwYXJ0dXJlTG9jYXRpb25JZCxcclxuICAgICAgICBhcnJpdmFsTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZhbExvY2F0aW9uSWRcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25JZHMoc3RhdGlvbklkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zKTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MgJiYgdGhpcy5vcGVuUmV0dXJuKSB7XHJcbiAgICAgIHRoaXMub3BlblJldHVybiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InLFxyXG4gICAgICBqb3VybmV5VHlwZTogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlLFxyXG4gICAgICBhZHVsdHM6IHRlbXBQYXJhbXMubm9PZkFkdWx0cyxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8uaWQsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgY2hpbGRyZW46IHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuLFxyXG4gICAgICBjbGFzczogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyxcclxuICAgICAgZXh0cmFUaW1lVG9DaGFuZ2U6IHRlbXBQYXJhbXMuZXh0cmFUaW1lLFxyXG4gICAgICBvdXRib3VuZEFycml2YWxEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgcmV0dXJuQXJyaXZhbERhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHZpYUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudmlhTG9jYXRpb24/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgcmFpbENhcmRRdWFsaWZpZXJzOiB0ZW1wUGFyYW1zLnJhaWxDYXJkcz8ubWFwKFxyXG4gICAgICAgIChyYWlsQ2FyZDogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiByYWlsQ2FyZD8uY29kZTtcclxuICAgICAgICB9XHJcbiAgICAgICksXHJcbiAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogdGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXJcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgIHF1ZXJ5LmNoaWxkcmVuID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmlhTG9jYXRpb24gPT09ICcnKSB7XHJcbiAgICAgIHF1ZXJ5LnZpYUxvY2F0aW9uSWQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhKSB7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDpcclxuICAgICAgICBxdWVyeS5vdXRib3VuZEFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTpcclxuICAgICAgICBxdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWF9ICsrK2BcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlOlxyXG4gICAgICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhfSArKytgXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5OlxyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGVtcFBhcmFtcy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIHF1ZXJ5LmFycml2YWxMb2NhdGlvbklkID0gdGhpcy5fdHJhdmVsbGluZ1RvO1xyXG4gICAgICBxdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkID0gdGhpcy5fdHJhdmVsbGluZ0Zyb207XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIGdldENyaXRlcmlhKFxyXG4gICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHN0cmluZyxcclxuICAgIGFycml2YWxEYXRlVGltZTogc3RyaW5nXHJcbiAgKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICAgIGlmIChkZXBhcnR1cmVEYXRlVGltZSkge1xyXG4gICAgICByZXR1cm4gUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAoYXJyaXZhbERhdGVUaW1lKSB7XHJcbiAgICAgIHJldHVybiBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlO1xyXG4gICAgfVxyXG4gICAge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2cocHJldmlvdXNJdGVtcylcclxuICAgIGlmIChwcmV2aW91c0l0ZW1zLkZMSUdIVCl7IFxyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gbW9tZW50KChwcmV2aW91c0l0ZW1zLkZMSUdIVC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgaWYgKHRoaXMub3V0Qm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCkgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGhpcy5vdXRCb3VuZERhdGVUaW1lLnN1YnRyYWN0KHRoaXMub3V0Qm91bmREYXRlVGltZS5taW51dGVzKCkgJSAzMCwgXCJtaW51dGVzXCIpXHJcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IG1vbWVudCgocHJldmlvdXNJdGVtcy5GTElHSFQuaW5ib3VuZERhdGUgYXMgc3RyaW5nKS5yZXBsYWNlKFwiVFwiLCBcIlwiKS5zcGxpdChcIi5cIilbMF0sIFwiWVlZWS1NTS1ERGhoOm1tOnNzXCIpXHJcbiAgICAgICAgICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWUubWludXRlcygpICUgMzApIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5pbkJvdW5kRGF0ZVRpbWUuc3VidHJhY3QodGhpcy5pbkJvdW5kRGF0ZVRpbWUubWludXRlcygpICUgMzAsIFwibWludXRlc1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIFJhaWwgZnJvbSBmbGlnaHQgaXRlbScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoUmFpbFF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPSBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gc2VhcmNoUmFpbFF1ZXJ5LmpvdXJuZXlUeXBlO1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hDbGFzcyA9IHNlYXJjaFJhaWxRdWVyeS5jbGFzcztcclxuICAgIHRoaXMuZXh0cmFUaW1lID0gc2VhcmNoUmFpbFF1ZXJ5LmV4dHJhVGltZVRvQ2hhbmdlO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWUgYW5kIG91dGJvdW5kQ3JpdGVyaWEgLHJldHVybkNyaXRlcmlhXHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSBzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICA/IG1vbWVudChzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSlcclxuICAgICAgOiBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kQXJyaXZhbERhdGVUaW1lKTtcclxuICAgIHRoaXMub3V0Ym91bmRDcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXHJcbiAgICAgIHNlYXJjaFJhaWxRdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICBzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHNlYXJjaFJhaWxRdWVyeS5qb3VybmV5VHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkpIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSBzZWFyY2hSYWlsUXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWVcclxuICAgICAgICA/IG1vbWVudChzZWFyY2hSYWlsUXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgICAgOiBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSk7XHJcblxyXG4gICAgICB0aGlzLnJldHVybkNyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcclxuICAgICAgICBzZWFyY2hSYWlsUXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgICAgc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgc2VhcmNoUmFpbFF1ZXJ5LmpvdXJuZXlUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXlcclxuICAgICkge1xyXG4gICAgICB0aGlzLm9wZW5SZXR1cm4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWFyY2hSYWlsUXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaFJhaWxRdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGRlcGFydHVyZVN0YXRpb24pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGRlcGFydHVyZVN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgcmFpbHN0YXRpb246IHtcclxuICAgICAgICAgICAgICBpZDogZGVwYXJ0dXJlU3RhdGlvbi5pZCxcclxuICAgICAgICAgICAgICBuYW1lOiBkZXBhcnR1cmVTdGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgbmxjQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi5ubGNDb2RlLFxyXG4gICAgICAgICAgICAgIHN0YXRpb25Db2RlOiBkZXBhcnR1cmVTdGF0aW9uLnN0YXRpb25Db2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZUNvZGU6IGRlcGFydHVyZVN0YXRpb24udHJhaW5saW5lQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVVbmlxdWVDb2RlOiBkZXBhcnR1cmVTdGF0aW9uLnRyYWlubGluZVVuaXF1ZUNvZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoUmFpbFF1ZXJ5LmFycml2YWxMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxyXG4gICAgICAgIC5nZXRSYWlsU3RhdGlvbkJ5SWQoc2VhcmNoUmFpbFF1ZXJ5LmFycml2YWxMb2NhdGlvbklkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGFycml2YWxTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IHtcclxuICAgICAgICAgICAgbmFtZTogYXJyaXZhbFN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgcmFpbHN0YXRpb246IHtcclxuICAgICAgICAgICAgICBpZDogYXJyaXZhbFN0YXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogYXJyaXZhbFN0YXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBubGNDb2RlOiBhcnJpdmFsU3RhdGlvbi5ubGNDb2RlLFxyXG4gICAgICAgICAgICAgIHN0YXRpb25Db2RlOiBhcnJpdmFsU3RhdGlvbi5zdGF0aW9uQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVDb2RlOiBhcnJpdmFsU3RhdGlvbi50cmFpbmxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZVVuaXF1ZUNvZGU6IGFycml2YWxTdGF0aW9uLnRyYWlubGluZVVuaXF1ZUNvZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoUmFpbFF1ZXJ5LnZpYUxvY2F0aW9uSWQpIHtcclxuICAgICAgdGhpcy52aWEgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaFJhaWxRdWVyeS52aWFMb2NhdGlvbklkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHZpYUxvY2F0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpYUxvY2F0aW9uID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB2aWFMb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICByYWlsc3RhdGlvbjoge1xyXG4gICAgICAgICAgICAgIGlkOiB2aWFMb2NhdGlvbi5pZCxcclxuICAgICAgICAgICAgICBuYW1lOiB2aWFMb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgIG5sY0NvZGU6IHZpYUxvY2F0aW9uLm5sY0NvZGUsXHJcbiAgICAgICAgICAgICAgc3RhdGlvbkNvZGU6IHZpYUxvY2F0aW9uLnN0YXRpb25Db2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZUNvZGU6IHZpYUxvY2F0aW9uLnRyYWlubGluZUNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lVW5pcXVlQ29kZTogdmlhTG9jYXRpb24udHJhaW5saW5lVW5pcXVlQ29kZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIFRyYXZlbGxlcnNcclxuICAgIGlmIChiYXNrZXRJdGVtLnVzZXJzKSB7XHJcbiAgICAgIGJhc2tldEl0ZW0udXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmFkZFRyYXZlbGxlcih1c2VyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSYWlsU3RhdGlvbihcclxuICAgIGNvZGU6IHN0cmluZyxcclxuICAgIGlzTG9hZGluZz86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxyXG4gICk6IE9ic2VydmFibGU8UmFpbFN0YXRpb24+IHtcclxuICAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3QoeyBjb2RlIH0pLnBpcGUoXHJcbiAgICAgICAgdGFwKCgpID0+IGlzTG9hZGluZz8ubmV4dChmYWxzZSkpLFxyXG4gICAgICAgIHRha2UoMSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRSYWlsSm91cm5leUZhcmUoKTogUmFpbEpvdXJuZXlGYXJlIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbjogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBhbnlbXSB7XHJcbiAgICBsZXQgbGVnczogYW55W10gPSBbXTtcclxuICAgIGlmIChyYWlsSm91cm5leU9wdGlvbj8uam91cm5leUxlZ3MubGVuZ3RoKSB7XHJcbiAgICAgIGxlZ3MgPSByYWlsSm91cm5leU9wdGlvbi5qb3VybmV5TGVncy5tYXAoKHNlZ21lbnQpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgb3BlcmF0b3I6IHNlZ21lbnQub3BlcmF0b3IsXHJcbiAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogc2VnbWVudC5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBzZWdtZW50LmRlcGFydCxcclxuICAgICAgICAgIGFycml2YWxEYXRlVGltZTogc2VnbWVudC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogc2VnbWVudC5hcnJpdmVcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWdzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICB0ZW1wUGFyYW1zOiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIHJhaWxKb3VybmV5T3B0aW9uOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmVcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIGNvbnN0IHJhaWxRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGVtcFBhcmFtcyk7XHJcbiAgICBsZXQgb3V0VGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy50aWNrZXRFeHRyYXM/Lmxlbmd0aCkge1xyXG4gICAgICBvdXRUaWNrZXRFeHRyYXMgPSB0aGlzLmNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChcclxuICAgICAgICByYWlsSm91cm5leU9wdGlvbi50aWNrZXRFeHRyYXNbMF1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAocmFpbEpvdXJuZXlPcHRpb24udW5zZWxsYWJsZSkge1xyXG4gICAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoXHJcbiAgICAgIHJhaWxGYXJlLFxyXG4gICAgICByYWlsSm91cm5leU9wdGlvblxyXG4gICAgKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3QgbGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbik7XHJcbiAgICAgIC8vIGNvbnN0IHRpY2tldFF1ZXVlTGlzdCA9IHNlbGVjdGVkUmFpbEpvdXJuZXlGYXJlLnRpY2tldFF1ZXVlTGlzdC5tYXAoXHJcbiAgICAgIC8vICAgKHRpY2tldFF1ZXVlTGlzdDEpID0+IHtcclxuICAgICAgLy8gICAgIHJldHVybiB7XHJcbiAgICAgIC8vICAgICAgIGlkOiB0aWNrZXRRdWV1ZUxpc3QxLmlkLFxyXG4gICAgICAvLyAgICAgICBuYW1lOiB0aWNrZXRRdWV1ZUxpc3QxLm5hbWUsXHJcbiAgICAgIC8vICAgICAgIHR5cGU6IHRpY2tldFF1ZXVlTGlzdDEudHlwZVxyXG4gICAgICAvLyAgICAgfTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICk7XHJcbiAgICAgIGNvbnN0IGxvd2VzdFRpY2tldCA9IHRoaXMuZmluZENoZWFwZXN0VGlja2V0KClcclxuXHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgdGlja2V0UXVldWVMaXN0OiAocmFpbEpvdXJuZXlPcHRpb24udGlja2V0UXVldWVMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsVGlja2V0UXVldWUpOiBUaWNrZXRRdWV1ZUxpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBhY2NvdW50c0xpc3Q6IChyYWlsSm91cm5leU9wdGlvbi5hY2NvdW50c0xpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxBY2NvdW50KTogQWNjb3VudHNMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogcmFpbEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogcmFpbEZhcmUucHJvdmlkZXJOYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHJhaWxGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogcmFpbEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiByYWlsRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIXJhaWxGYXJlLmVUaWNrZXRBdmFpbGFibGUsXHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW3JhaWxGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IHJhaWxGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICByYWlsSm91cm5leU9wdGlvbi5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICAgIC8vIHRpY2tldFF1ZXVlTGlzdFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWR1bHRzOiByYWlsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiByYWlsRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogcmFpbEZhcmUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXHJcbiAgICAgICAgY28yUGVySXRlbTogcmFpbEpvdXJuZXlPcHRpb24uY28yUGVySXRlbSxcclxuICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IHJhaWxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgIGxvd2VzdFByaWNlOiBsb3dlc3RUaWNrZXQuYW1vdW50ICE9IE51bWJlcihyYWlsRmFyZS5wcmljZSkgfHwgbG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSAhPSByYWlsRmFyZS5jdXJyZW5jeSA/IFxyXG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCA6IG51bGwsXHJcbiAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTogKGxvd2VzdFRpY2tldC5hbW91bnQgIT0gTnVtYmVyKHJhaWxGYXJlLnByaWNlKSB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9IHJhaWxGYXJlLmN1cnJlbmN5KSA/IFxyXG4gICAgICAgICAgPEN1cnJlbmN5Q29kZT5sb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlIDogbnVsbFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gaWYgdGlja2V0RXh0cmFzIGV4aXN0cyBhZGQgdGhlIG9iamVjdCB0byBiYXNrZXRJdGVtXHJcbiAgICAgIGlmIChvdXRUaWNrZXRFeHRyYXMpIHtcclxuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSBvdXRUaWNrZXRFeHRyYXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIHJhaWxGYXJlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBvdXRib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIG91dGJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgLy8gaWYgKG91dGJvdW5kLnVuc2VsbGFibGUpIHtcclxuICAgIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgICBjb25zdCByYWlsUXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXMpO1xyXG5cclxuICAgIGxldCB0aWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG5cclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG5cclxuICAgIGlmIChvdXRib3VuZD8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgdGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3Qob3V0Ym91bmQudGlja2V0RXh0cmFzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICBvdXRib3VuZEZhcmUsXHJcbiAgICAgIG91dGJvdW5kLFxyXG4gICAgICBpbmJvdW5kXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuICAgICAgY29uc3QgbG93ZXN0VGlja2V0ID0gdGhpcy5maW5kQ2hlYXBlc3RUaWNrZXQoKVxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChvdXRib3VuZC50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcclxuXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBvdXRib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBvdXRib3VuZEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbmJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluYm91bmQudG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5ib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluYm91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogaW5ib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlLFxyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBsb3dlc3RQcmljZTogbG93ZXN0VGlja2V0LmFtb3VudCAhPSBOdW1iZXIob3V0Ym91bmRGYXJlLnByaWNlKSB8fCBsb3dlc3RUaWNrZXQuY3VycmVuY3lDb2RlICE9IG91dGJvdW5kRmFyZS5jdXJyZW5jeSA/IFxyXG4gICAgICAgICAgbG93ZXN0VGlja2V0LmFtb3VudCA6IG51bGwsXHJcbiAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTogKGxvd2VzdFRpY2tldC5hbW91bnQgIT0gTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSkgfHwgbG93ZXN0VGlja2V0LmN1cnJlbmN5Q29kZSAhPSBvdXRib3VuZEZhcmUuY3VycmVuY3kpID8gXHJcbiAgICAgICAgICA8Q3VycmVuY3lDb2RlPmxvd2VzdFRpY2tldC5jdXJyZW5jeUNvZGUgOiBudWxsXHJcbiAgICAgIH07XHJcbiAgICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgYWRkIHRoZSBvYmplY3QgdG8gYmFza2V0SXRlbVxyXG4gICAgICBpZiAodGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIG91dGJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvbiB8fCBpbmJvdW5kRmFyZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XHJcbiAgfVxyXG5cclxuICByZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgIHJhaWxMZWdzOiBSYWlsSm91cm5leUxlZ1tdXHJcbiAgKTogUmFpbEpvdXJuZXlMZWdbXSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhaWxMZWdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGxlZyA9IHJhaWxMZWdzW2ldO1xyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZWcuY2FsbGluZ1BvaW50cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGNhbGxpbmdQb2ludHMgPSBsZWcuY2FsbGluZ1BvaW50c1tqXTtcclxuICAgICAgICBkZWxldGUgY2FsbGluZ1BvaW50cy5zY2hlZHVsZWRQbGF0Zm9ybTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByYWlsTGVncztcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRpY2tldEV4dHJhc09iamVjdChyYWlsVGlja2V0RXh0cmE6IFJhaWxUaWNrZXRFeHRyYSk6IFRpY2tldEV4dHJhc1tdIHtcclxuICAgIGNvbnN0IHByaWNlID1cclxuICAgICAgdGhpcy5ub09mQ2hpbGRyZW4gKiByYWlsVGlja2V0RXh0cmE/LmNoaWxkQW1vdW50ICtcclxuICAgICAgdGhpcy5ub09mQWR1bHRzICogcmFpbFRpY2tldEV4dHJhLmFkdWx0QW1vdW50O1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6IHJhaWxUaWNrZXRFeHRyYS5pZGVudGlmaWVycy50eXBlLFxyXG4gICAgICAgIGxvY2F0aW9uOiByYWlsVGlja2V0RXh0cmEuaWRlbnRpZmllcnMubG9jYXRpb24sXHJcbiAgICAgICAgZGF0ZTogcmFpbFRpY2tldEV4dHJhLmlkZW50aWZpZXJzLmRhdGUsXHJcbiAgICAgICAgcHJpY2VcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVRpbWVEaWZmZXJlbmNlSW5NaW5zKHJhaWxKb3VybmV5OiBSYWlsSm91cm5leU9wdGlvbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzXHJcbiAgICAgIC5nZXRUaW1lRGlmZmVyZW5jZShyYWlsSm91cm5leS5hcnJpdmVEYXRlVGltZSwgcmFpbEpvdXJuZXkuZGVwYXJ0RGF0ZVRpbWUpXHJcbiAgICAgIC50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIC0gZGV0ZXJtaW5lIGlmIGEgdGlja2V0IGlzIGFuIGVUaWNrZXRcclxuICAgKiBAcGFyYW0gdGlja2V0IC0gdGhlIHRpY2tldCB3ZSB3YW50IHRvIHRvIGNoZWNrXHJcbiAgICogQHJldHVybnMgLSBib29sZWFuXHJcbiAgICovXHJcbiAgdGlja2V0SXNBbkVUaWNrZXQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmb3VuZEVUaWNrZXQ6IFJhaWxKb3VybmV5T3B0aW9uID0gbnVsbDtcclxuXHJcbiAgICAvLyBmb3VuZEVUaWNrZXQgPSB0aWNrZXQudGlja2V0UXVldWVMaXN0LmZpbmQoKHF1ZXVlTGlzdEl0ZW0pID0+IHtcclxuICAgIC8vICAgcmV0dXJuIHF1ZXVlTGlzdEl0ZW0udHlwZSA9PT0gJ2VUaWNrZXQnO1xyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgcmV0dXJuIGZvdW5kRVRpY2tldCA/IHRydWUgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5RmlsdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIF9hcHBseUZpbHRlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNldFNlbGVjdGVkID0gKFxyXG4gICAgICB0eXBlOiBSYWlsUnVsZUVuaXR5S2V5cyxcclxuICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb25cclxuICAgICkgPT4ge1xyXG4gICAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoam91cm5leSwgdGhpcy5zdW1tYXJ5LnJldHVybik7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFN1bW1hcnlcclxuICAgICAgICA/IChncm91cGVkRmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBncm91cGVkRmFyZXMubWFwKChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWZhcmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5oZWxwZXJzLmFkZFJhaWxBY3Rpb25SdWxlcyh7IC4uLmZhcmUgfSwgW1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFN1bW1hcnlbdHlwZV1bdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoXVxyXG4gICAgICAgICAgICAgICAgICAgID8ucnVsZURhdGFXaGVuU2VsZWN0ZWRXaXRoW2ZhcmUuZmFyZUhhc2hdLFxyXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgPyBzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdPy5ydWxlRGF0YVdoZW5TZWxlY3RlZEFsb25lXHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYXJlLmZhcmVIYXNoID09PSB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2gsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiAhIXRoaXMuX3NlbGVjdGVkU3VtbWFyeVt0eXBlXVtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoXHJcbiAgICAgICAgICAgICAgICBdPy5hbGxvd2VkV2l0aD8uaW5jbHVkZXMoZmFyZS5mYXJlSGFzaClcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IChncm91cGVkRmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBncm91cGVkRmFyZXMubWFwKChmYXJlOiBPQlRSYWlsSm91cm5leUZhcmUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWZhcmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5oZWxwZXJzLmFkZFJhaWxBY3Rpb25SdWxlcyhcclxuICAgICAgICAgICAgICAgICAgeyAuLi5mYXJlIH0sXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlcclxuICAgICAgICAgICAgICAgICAgICA/IFtzdW1tYXJ5W3R5cGVdW2ZhcmUuZmFyZUhhc2hdLnJ1bGVEYXRhV2hlblNlbGVjdGVkQWxvbmVdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbXVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNldFJ1bGVzID0gKFxyXG4gICAgICB0eXBlOiBSYWlsUnVsZUVuaXR5S2V5cyxcclxuICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICAgIGRpcmVjdGlvbjogJ291dGJvdW5kJyB8ICdyZXR1cm4nXHJcbiAgICApID0+IHtcclxuICAgICAgcmV0dXJuIChncm91cGVkRmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdKTogT0JUUmFpbEpvdXJuZXlGYXJlW10gPT4ge1xyXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLl9maW5kU3VtbWFyeShqb3VybmV5LCB0aGlzLnN1bW1hcnlbZGlyZWN0aW9uXSk7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwZWRGYXJlcy5tYXAoXHJcbiAgICAgICAgICAoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlKTogT0JUUmFpbEpvdXJuZXlGYXJlID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmYXJlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLi4uZmFyZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXHJcbiAgICAgICAgICAgICAgICAgIGZhcmUuZmFyZUhhc2ggPT09IHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgPyBbc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5ydWxlRGF0YVdoZW5TZWxlY3RlZEFsb25lXVxyXG4gICAgICAgICAgICAgICAgOiBbXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoXHJcbiAgICAgIHRoaXMuaGVscGVyc1xyXG4gICAgICAgIC5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKVxyXG4gICAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIGFjY3VtOiBPQlRSYWlsUXVvdGVSZXN1bHRbXSxcclxuICAgICAgICAgICAgbmV4dDogT0JUUmFpbFF1b3RlUmVzdWx0XHJcbiAgICAgICAgICApOiBPQlRSYWlsUXVvdGVSZXN1bHRbXSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB7XHJcbiAgICAgICAgICAgICAgLi4ubmV4dCxcclxuICAgICAgICAgICAgICBvdXRib3VuZDogKG5leHQub3V0Ym91bmQgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgICAgIChqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbik6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5qb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSYWlsRGlyZWN0aW9uLk91dGJvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2luZ2xlSm91cm5leUZhcmVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmFpbERpcmVjdGlvbi5PdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSYWlsRGlyZWN0aW9uLk91dGJvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICB9IGFzIE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgcmV0dXJuOiAobmV4dC5yZXR1cm4gfHwgW10pLm1hcChcclxuICAgICAgICAgICAgICAgIChqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbik6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5qb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoJ3JldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoJ2R1YWxTaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkuc2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoJ3NpbmdsZUpvdXJuZXlGYXJlcycsIGpvdXJuZXksICdyZXR1cm4nKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdvcGVuUmV0dXJuSm91cm5leUZhcmVzJywgam91cm5leSwgJ3JldHVybicpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYWNjdW0ucHVzaCh0ZW1wKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFRlcm1zQW5kQ29uZChcclxuICAgIG91dGJvdW5kRmFyZTogUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgaW5ib3VuZD86IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENsYXNzJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDbGFzc1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENvbmRpdGlvbnMgRGVzY3JpcHRpb24nLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudGlja2V0VHlwZUNvbmRpdGlvbnNEZXNjcmlwdGlvblxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZhbGlkIFJldHVybiBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnZhbGlkUmV0dXJuUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIE5hbWUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudGlja2V0VHlwZU5hbWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDaGFuZ2UgUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5jaGFuZ2VSdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUHJlIEJvb2tpbmcgUmVxdWlyZW1lbnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMucHJlQm9va2luZ1JlcXVpcmVtZW50XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmFpbGNhcmQgRGlzY291bnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMucmFpbGNhcmREaXNjb3VudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1RpY2tldCBUeXBlIENvZGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudGlja2V0VHlwZUNvZGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdDaGlsZCBEaXNjb3VudCcsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5jaGlsZERpc2NvdW50XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVmFsaWQgT3V0IFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMudmFsaWRPdXRSdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnU3RhcnQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnRW5kIERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0pvdXJuZXkgQnJlYWsgUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5qb3VybmV5QnJlYWtSdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmVmdW5kIENhbmNlbGxhdGlvbiBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnJlZnVuZENhbmNlbGxhdGlvblJ1bGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdKb3VybmV5IFR5cGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuam91cm5leVR5cGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUb2QgQXZhaWxhYmxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRvZEF2YWlsYWJsZVxyXG4gICAgICB9LFxyXG5cclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdSZXR1cm4gU3RhcnQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IGluYm91bmQ/LmRlcGFydERhdGVUaW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmV0dXJuIEVuZCBEYXRlJyxcclxuICAgICAgICB2YWx1ZTogaW5ib3VuZD8uYXJyaXZlRGF0ZVRpbWVcclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0aGlzLnRlbXBQYXJhbXMpO1xyXG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPVxyXG4gICAgICAgIHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xyXG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXHJcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlJhaWwsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBhcHBseUZhdm91cml0ZShmYXY6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5ub09mQWR1bHRzID0gZmF2LmFkdWx0cztcclxuICAgIHRoaXMubm9PZkNoaWxkcmVuID0gZmF2LmNoaWxkcmVuO1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gZmF2LmpvdXJuZXlUeXBlO1xyXG4gICAgc3dpdGNoIChmYXYuY2xhc3MpIHtcclxuICAgICAgY2FzZSAnRmlyc3QnOlxyXG4gICAgICAgIHRoaXMuY2hvc2VuUmFpbENsYXNzID0gUmFpbENsYXNzLkZpcnN0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBbnknOlxyXG4gICAgICAgIHRoaXMuY2hvc2VuUmFpbENsYXNzID0gUmFpbENsYXNzLkFsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnU3RhbmRhcmQnOlxyXG4gICAgICAgIHRoaXMuY2hvc2VuUmFpbENsYXNzID0gUmFpbENsYXNzLlN0YW5kYXJkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgLmZldGNoTGlzdCh7IGlkOiBmYXYuZGVwYXJ0dXJlTG9jYXRpb25JZCB9KVxyXG4gICAgICAuc3Vic2NyaWJlKChhKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IGE7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgLmZldGNoTGlzdCh7IGlkOiBmYXYuYXJyaXZhbExvY2F0aW9uSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSgoYSkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhdmVsbGluZ1RvID0gYTtcclxuICAgICAgfSk7XHJcbiAgICBpZiAoZmF2LnZpYUxvY2F0aW9uSWQpIHtcclxuICAgICAgdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXJcclxuICAgICAgICAuZmV0Y2hMaXN0KHsgaWQ6IGZhdi52aWFMb2NhdGlvbklkIH0pXHJcbiAgICAgICAgLnN1YnNjcmliZSgoYSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlhTG9jYXRpb24gPSBudWxsO1xyXG4gICAgICB0aGlzLnZpYSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5cclxuICB9XHJcbn1cclxuIl19