@sabstravtech/obtservices 0.0.22051001 → 0.0.26051001

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 (142) hide show
  1. package/angular/components/basket-panel.d.ts +1 -0
  2. package/angular/fetchers.d.ts +3 -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-user-guests.fetcher.d.ts +7 -0
  6. package/angular/lib/vendor/services/enterprise-basket.service.d.ts +2 -1
  7. package/angular/lib/vendor/services/logon.service.d.ts +2 -1
  8. package/angular/lib/vendor/services/user.service.d.ts +7 -3
  9. package/angular/lib/vendor/types/graphql.angular.types.d.ts +268 -85
  10. package/angular/lib/vendor/updaters/create-guest-updater.d.ts +6 -0
  11. package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
  12. package/angular/updaters.d.ts +1 -0
  13. package/base/fetchers.d.ts +3 -0
  14. package/base/lib/vendor/classes/base-enterprise.d.ts +5 -1
  15. package/base/lib/vendor/classes/basket-info-mi-details.impl.d.ts +2 -0
  16. package/base/lib/vendor/classes/bookable-basket.d.ts +2 -0
  17. package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +4 -3
  18. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +4 -3
  19. package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +4 -4
  20. package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +3 -3
  21. package/base/lib/vendor/classes/flight-enterprise-search.d.ts +5 -5
  22. package/base/lib/vendor/classes/helpers.d.ts +6 -1
  23. package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +6 -3
  24. package/base/lib/vendor/classes/irl-enterprise-search.d.ts +4 -4
  25. package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +3 -3
  26. package/base/lib/vendor/classes/management-info-and-valid.d.ts +1 -1
  27. package/base/lib/vendor/classes/modal-types.enum.d.ts +1 -0
  28. package/base/lib/vendor/classes/parking-enterprise-search.d.ts +3 -3
  29. package/base/lib/vendor/classes/rail-enterprise-search.d.ts +9 -7
  30. package/base/lib/vendor/classes/supplementary-booking-info-impl.d.ts +5 -3
  31. package/base/lib/vendor/fetchers/get-companies.fetcher.d.ts +21 -0
  32. package/base/lib/vendor/fetchers/get-company.fetcher.d.ts +20 -0
  33. package/base/lib/vendor/fetchers/get-user-guests.fetcher.d.ts +20 -0
  34. package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
  35. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +3 -2
  36. package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -5
  37. package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +1 -0
  38. package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +7 -5
  39. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +2 -1
  40. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +5 -2
  41. package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +4 -3
  42. package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
  43. package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
  44. package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +5 -2
  45. package/base/lib/vendor/interfaces/Isearch.service.d.ts +4 -2
  46. package/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.d.ts +3 -2
  47. package/base/lib/vendor/interfaces/Iuser.service.d.ts +1 -0
  48. package/base/lib/vendor/interfaces/car-hire-search-arg.interface.d.ts +2 -3
  49. package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
  50. package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
  51. package/base/lib/vendor/models/traveller.object.d.ts +1 -1
  52. package/base/lib/vendor/services/enterprise-basket.service.d.ts +18 -7
  53. package/base/lib/vendor/services/logon.service.d.ts +5 -1
  54. package/base/lib/vendor/services/search.service.d.ts +25 -22
  55. package/base/lib/vendor/services/url.service.d.ts +2 -0
  56. package/base/lib/vendor/services/user.service.d.ts +21 -5
  57. package/base/lib/vendor/services/webtoken.service.d.ts +4 -0
  58. package/base/lib/vendor/types/graphql.types.d.ts +245 -84
  59. package/base/lib/vendor/types/types.d.ts +16 -2
  60. package/base/lib/vendor/updaters/create-guest-updater.d.ts +19 -0
  61. package/base/sabstravtech-obtservices-base.d.ts +1 -1
  62. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  63. package/base/updaters.d.ts +1 -0
  64. package/bundles/sabstravtech-obtservices-angular.umd.js +366 -176
  65. package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
  66. package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
  67. package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
  68. package/bundles/sabstravtech-obtservices-base.umd.js +2019 -956
  69. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  70. package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
  71. package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
  72. package/esm2015/angular/components/basket-panel.js +16 -7
  73. package/esm2015/angular/fetchers.js +4 -1
  74. package/esm2015/angular/lib/vendor/fetchers/get-companies.fetcher.js +25 -0
  75. package/esm2015/angular/lib/vendor/fetchers/get-company.fetcher.js +25 -0
  76. package/esm2015/angular/lib/vendor/fetchers/get-user-guests.fetcher.js +25 -0
  77. package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
  78. package/esm2015/angular/lib/vendor/services/http-call.service.js +1 -1
  79. package/esm2015/angular/lib/vendor/services/logon.service.js +8 -5
  80. package/esm2015/angular/lib/vendor/services/search.service.js +1 -1
  81. package/esm2015/angular/lib/vendor/services/user.service.js +21 -9
  82. package/esm2015/angular/lib/vendor/services/webtoken.service.js +6 -2
  83. package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +296 -70
  84. package/esm2015/angular/lib/vendor/updaters/create-guest-updater.js +22 -0
  85. package/esm2015/angular/updaters.js +2 -1
  86. package/esm2015/base/fetchers.js +4 -1
  87. package/esm2015/base/lib/vendor/classes/base-enterprise.js +8 -2
  88. package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +14 -1
  89. package/esm2015/base/lib/vendor/classes/bookable-basket.js +27 -6
  90. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +66 -11
  91. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +108 -61
  92. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +115 -33
  93. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +31 -10
  94. package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +196 -57
  95. package/esm2015/base/lib/vendor/classes/helpers.js +19 -3
  96. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +145 -36
  97. package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +100 -30
  98. package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +40 -8
  99. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +13 -9
  100. package/esm2015/base/lib/vendor/classes/modal-types.enum.js +2 -1
  101. package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +39 -7
  102. package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +131 -20
  103. package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +42 -4
  104. package/esm2015/base/lib/vendor/fetchers/get-companies.fetcher.js +11 -0
  105. package/esm2015/base/lib/vendor/fetchers/get-company.fetcher.js +11 -0
  106. package/esm2015/base/lib/vendor/fetchers/get-user-guests.fetcher.js +11 -0
  107. package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
  108. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  109. package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
  110. package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
  111. package/esm2015/base/lib/vendor/interfaces/Ifast-track-enterprise-search.js +1 -1
  112. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  113. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +2 -1
  114. package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
  115. package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
  116. package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
  117. package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
  118. package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
  119. package/esm2015/base/lib/vendor/interfaces/Isupplementary-booking-info-impl.js +1 -1
  120. package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
  121. package/esm2015/base/lib/vendor/interfaces/car-hire-search-arg.interface.js +1 -1
  122. package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
  123. package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
  124. package/esm2015/base/lib/vendor/models/traveller.object.js +1 -1
  125. package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +93 -30
  126. package/esm2015/base/lib/vendor/services/http-call.service.js +1 -1
  127. package/esm2015/base/lib/vendor/services/logon.service.js +37 -3
  128. package/esm2015/base/lib/vendor/services/requires-reason.service.js +14 -10
  129. package/esm2015/base/lib/vendor/services/search.service.js +77 -102
  130. package/esm2015/base/lib/vendor/services/url.service.js +3 -1
  131. package/esm2015/base/lib/vendor/services/user.service.js +45 -11
  132. package/esm2015/base/lib/vendor/services/webtoken.service.js +8 -1
  133. package/esm2015/base/lib/vendor/types/graphql.types.js +7 -2
  134. package/esm2015/base/lib/vendor/types/types.js +31 -14
  135. package/esm2015/base/lib/vendor/updaters/create-guest-updater.js +11 -0
  136. package/esm2015/base/sabstravtech-obtservices-base.js +1 -1
  137. package/esm2015/base/updaters.js +2 -1
  138. package/fesm2015/sabstravtech-obtservices-angular.js +449 -141
  139. package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
  140. package/fesm2015/sabstravtech-obtservices-base.js +1383 -410
  141. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  142. 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);
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) {
@@ -1064,9 +1074,13 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1064
1074
  if (outTicketExtras) {
1065
1075
  basketItem.detail.outbound.ticketExtras = outTicketExtras;
1066
1076
  }
1067
- return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1077
+ const whatHappened = yield this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1078
+ if (whatHappened === DifferentInvokdedUserReasons.research) {
1079
+ this.performSearch();
1080
+ }
1081
+ return whatHappened;
1068
1082
  }
1069
- return Promise.resolve();
1083
+ return DifferentInvokdedUserReasons.continue;
1070
1084
  });
1071
1085
  }
1072
1086
  findCheapestTicket() {
@@ -1125,6 +1139,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1125
1139
  this.results.next([]);
1126
1140
  if (this.isValid.value) {
1127
1141
  const query = this.getSearchQuery(this.tempParams);
1142
+ this.tempParams.transactionIdentifier = null;
1128
1143
  this._originalUserSearch = Object.freeze(this.helpers.clone(this.tempParams));
1129
1144
  this.storageService.setSessionItem(RailEnterpriseSearch.STORAGE_SESSION_PARAMS, {
1130
1145
  tempParams: this.tempParams,
@@ -1245,8 +1260,9 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1245
1260
  returnDepartureDateTime: this.helpers.formatGraphQLDateTime(tempParams.inBoundDateTime),
1246
1261
  viaLocationId: (_f = (_e = tempParams.viaLocation) === null || _e === void 0 ? void 0 : _e.railstation) === null || _f === void 0 ? void 0 : _f.id,
1247
1262
  railCardQualifiers: (_g = tempParams.railCards) === null || _g === void 0 ? void 0 : _g.map((railCard) => {
1248
- return railCard.code;
1249
- })
1263
+ return railCard === null || railCard === void 0 ? void 0 : railCard.code;
1264
+ }),
1265
+ transactionIdentifier: tempParams.transactionIdentifier
1250
1266
  };
1251
1267
  if (tempParams.noOfChildren === 0) {
1252
1268
  query.children = null;
@@ -1299,6 +1315,87 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1299
1315
  }
1300
1316
  }
1301
1317
  updateFromPreviousSearches(previousItems) { }
1318
+ updateSearchFromExpiredBasketItem(basketItem) {
1319
+ const searchRailQuery = basketItem.searchQuery;
1320
+ this.chosenSearchType = searchRailQuery.journeyType;
1321
+ this.chosenSearchClass = searchRailQuery.class;
1322
+ this.extraTime = searchRailQuery.extraTimeToChange;
1323
+ // get outBoundDateTime, inBoundDateTime and outboundCriteria ,returnCriteria
1324
+ this.outBoundDateTime = searchRailQuery.outboundDepartureDateTime
1325
+ ? moment(searchRailQuery.outboundDepartureDateTime)
1326
+ : moment(searchRailQuery.outboundArrivalDateTime);
1327
+ this.outboundCriteria = this.getCriteria(searchRailQuery.outboundDepartureDateTime, searchRailQuery.outboundArrivalDateTime);
1328
+ if (searchRailQuery.journeyType === RailSearchJourneyType.ReturnJourney) {
1329
+ this.inBoundDateTime = searchRailQuery.returnDepartureDateTime
1330
+ ? moment(searchRailQuery.returnDepartureDateTime)
1331
+ : moment(searchRailQuery.returnArrivalDateTime);
1332
+ this.returnCriteria = this.getCriteria(searchRailQuery.returnDepartureDateTime, searchRailQuery.returnArrivalDateTime);
1333
+ }
1334
+ if (searchRailQuery.journeyType === RailSearchJourneyType.OpenReturnJourney) {
1335
+ this.openReturn = true;
1336
+ }
1337
+ if (searchRailQuery.departureLocationId) {
1338
+ this.searchService
1339
+ .getRailStationById(searchRailQuery.departureLocationId)
1340
+ .subscribe((departureStation) => {
1341
+ this.travellingFrom = {
1342
+ name: departureStation.name,
1343
+ railstation: {
1344
+ id: departureStation.id,
1345
+ name: departureStation.name,
1346
+ nlcCode: departureStation.nlcCode,
1347
+ stationCode: departureStation.stationCode,
1348
+ trainlineCode: departureStation.trainlineCode,
1349
+ trainlineUniqueCode: departureStation.trainlineUniqueCode
1350
+ }
1351
+ };
1352
+ });
1353
+ }
1354
+ if (searchRailQuery.arrivalLocationId) {
1355
+ this.searchService
1356
+ .getRailStationById(searchRailQuery.arrivalLocationId)
1357
+ .subscribe((arrivalStation) => {
1358
+ this.travellingTo = {
1359
+ name: arrivalStation.name,
1360
+ railstation: {
1361
+ id: arrivalStation.id,
1362
+ name: arrivalStation.name,
1363
+ nlcCode: arrivalStation.nlcCode,
1364
+ stationCode: arrivalStation.stationCode,
1365
+ trainlineCode: arrivalStation.trainlineCode,
1366
+ trainlineUniqueCode: arrivalStation.trainlineUniqueCode
1367
+ }
1368
+ };
1369
+ });
1370
+ }
1371
+ if (searchRailQuery.viaLocationId) {
1372
+ this.via = true;
1373
+ this.searchService
1374
+ .getRailStationById(searchRailQuery.viaLocationId)
1375
+ .subscribe((viaLocation) => {
1376
+ this.viaLocation = {
1377
+ name: viaLocation.name,
1378
+ railstation: {
1379
+ id: viaLocation.id,
1380
+ name: viaLocation.name,
1381
+ nlcCode: viaLocation.nlcCode,
1382
+ stationCode: viaLocation.stationCode,
1383
+ trainlineCode: viaLocation.trainlineCode,
1384
+ trainlineUniqueCode: viaLocation.trainlineUniqueCode
1385
+ }
1386
+ };
1387
+ });
1388
+ }
1389
+ else {
1390
+ this.viaLocation = null;
1391
+ }
1392
+ // add Travellers
1393
+ if (basketItem.users) {
1394
+ basketItem.users.forEach((user) => {
1395
+ this.searchService.addTraveller(user);
1396
+ });
1397
+ }
1398
+ }
1302
1399
  getRailStation(code, isLoading) {
1303
1400
  if (code.length === 3) {
1304
1401
  isLoading === null || isLoading === void 0 ? void 0 : isLoading.next(true);
@@ -1405,9 +1502,13 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1405
1502
  if (outTicketExtras) {
1406
1503
  basketItem.detail.outbound.ticketExtras = outTicketExtras;
1407
1504
  }
1408
- return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, railFare.requiresReason);
1505
+ const whatHappened = yield this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, railFare.requiresReason);
1506
+ if (whatHappened === DifferentInvokdedUserReasons.research) {
1507
+ this.performSearch();
1508
+ }
1509
+ return whatHappened;
1409
1510
  }
1410
- return Promise.resolve();
1511
+ return DifferentInvokdedUserReasons.cancel;
1411
1512
  });
1412
1513
  }
1413
1514
  addReturnJourneyToBasket(serviceId, tempParams, outbound, inbound, outboundFare, inboundFare) {
@@ -1501,9 +1602,13 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1501
1602
  if (ticketExtras) {
1502
1603
  basketItem.detail.outbound.ticketExtras = ticketExtras;
1503
1604
  }
1504
- return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1605
+ const whatHappened = yield this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, outboundFare.requiresReason || inboundFare.requiresReason);
1606
+ if (whatHappened === DifferentInvokdedUserReasons.research) {
1607
+ this.performSearch();
1608
+ }
1609
+ return whatHappened;
1505
1610
  }
1506
- return Promise.resolve(false);
1611
+ return DifferentInvokdedUserReasons.cancel;
1507
1612
  });
1508
1613
  }
1509
1614
  removedScheduledPlatformFromCallingPoints(railLegs) {
@@ -1594,7 +1699,7 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1594
1699
  .clone(this.fullResults)
1595
1700
  .reduce((accum, next) => {
1596
1701
  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)) });
1702
+ 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
1703
  }), return: (next.return || []).map((journey) => {
1599
1704
  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
1705
  }) });
@@ -1696,24 +1801,30 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1696
1801
  this.noOfChildren = fav.children;
1697
1802
  this.chosenSearchType = fav.journeyType;
1698
1803
  switch (fav.class) {
1699
- case "First":
1804
+ case 'First':
1700
1805
  this.chosenRailClass = RailClass.First;
1701
1806
  break;
1702
- case "Any":
1807
+ case 'Any':
1703
1808
  this.chosenRailClass = RailClass.All;
1704
1809
  break;
1705
- case "Standard":
1810
+ case 'Standard':
1706
1811
  this.chosenRailClass = RailClass.Standard;
1707
1812
  break;
1708
1813
  }
1709
- this.getRailStationFetcher.fetchList({ id: fav.departureLocationId }).subscribe(a => {
1814
+ this.getRailStationFetcher
1815
+ .fetchList({ id: fav.departureLocationId })
1816
+ .subscribe((a) => {
1710
1817
  this.travellingFrom = a;
1711
1818
  });
1712
- this.getRailStationFetcher.fetchList({ id: fav.arrivalLocationId }).subscribe(a => {
1819
+ this.getRailStationFetcher
1820
+ .fetchList({ id: fav.arrivalLocationId })
1821
+ .subscribe((a) => {
1713
1822
  this.travellingTo = a;
1714
1823
  });
1715
1824
  if (fav.viaLocationId) {
1716
- this.getRailStationFetcher.fetchList({ id: fav.viaLocationId }).subscribe(a => {
1825
+ this.getRailStationFetcher
1826
+ .fetchList({ id: fav.viaLocationId })
1827
+ .subscribe((a) => {
1717
1828
  this.viaLocation = a;
1718
1829
  });
1719
1830
  this.via = true;
@@ -1729,4 +1840,4 @@ export class RailEnterpriseSearch extends BaseEnterpriseSearch {
1729
1840
  RailEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_rail';
1730
1841
  RailEnterpriseSearch.STORAGE_SESSION_RESULTS = 'rail_results';
1731
1842
  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=
1843
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFpbC1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9yYWlsLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RCxPQUFPLEVBR0wsNEJBQTRCLEVBQzVCLGFBQWEsRUFDYixxQkFBcUIsRUFjckIsYUFBYSxFQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUVMLFNBQVMsRUFLVCxXQUFXLEVBRVgscUJBQXFCLEVBT3RCLE1BQU0sd0JBQXdCLENBQUM7QUFtQ2hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLDZDQUF1QixDQUFBO0lBQ3ZCLDhDQUF3QixDQUFBO0FBQzFCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBRUQsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3Qix3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RUFBRSxFQUFFLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDcEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO2FBQ2pCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQzthQUNsQjtZQUNELFFBQVE7UUFDVixDQUFDO0tBQUE7O0FBdGtGZSwyQ0FBc0IsR0FBRyxhQUFhLENBQUM7QUFDdkMsNENBQXVCLEdBQUcsY0FBYyxDQUFDO0FBQ3pDLGtDQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7XHJcbiAgQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXMsXHJcbiAgQ2hlYXBlc3RSYWlsUHJpY2VzLFxyXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXHJcbiAgTG9jYXRpb25UeXBlcyxcclxuICBtYXhUcmF2ZWxsZXJXZWxsYmVpbmcsXHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBPQlRSYWlsRmFyZSxcclxuICBPQlRSYWlsRmFyZVR5cGVzLFxyXG4gIE9CVFJhaWxJbnRlcm5hbEZhcmUsXHJcbiAgT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbixcclxuICBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgT0JUUmFpbFF1b3RlUmVzdWx0LFxyXG4gIE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5LFxyXG4gIFJhaWxXZWxsYmVpbmdPYmplY3RJbnRlcmZhY2UsXHJcbiAgUmVjZW50U2VhcmNoLFxyXG4gIFJlY3Vyc2l2ZVBhcnRpYWwsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcclxuICBXZWxsYmVpbmdFbnVtXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2tldEl0ZW0sXHJcbiAgUmFpbENsYXNzLFxyXG4gIFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gIFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgUmFpbFRpY2tldEV4dHJhLFxyXG4gIFJhaWxTZWFyY2hKb3VybmV5VHlwZSxcclxuICBSYWlsSm91cm5leUZhcmUsXHJcbiAgUmFpbFN0YXRpb24sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIFJhaWxBY2NvdW50LFxyXG4gIFJhaWxUaWNrZXRRdWV1ZSxcclxuICBSYWlsSm91cm5leUxlZ1xyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VSYWlsUXVvdGVGZXRjaGVyLFxyXG4gIFJhaWxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvcmFpbC1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1zdGF0aW9uLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgUmFpbEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgUmFpbFRlbXBQYXJhbXNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lyYWlsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBJUmFpbEFpcnBvcnRFeHByZXNzU3RhdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtYWlycG9ydC1leHByZXNzLXN0YXRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgQWNjb3VudHNMaXN0LFxyXG4gIFJhaWxCYXNrZXRJdGVtLFxyXG4gIFRpY2tldEV4dHJhcyxcclxuICBUaWNrZXRRdWV1ZUxpc3RcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtYmFza2V0LWl0ZW0uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUmFpbFJlY2VudFNlYXJjaEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtcmVjZW50LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJhaWxRdW90ZVJlc3VsdCwgUmFpbFF1b3RlUmVzdWx0QXJyYXkgfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgUmFpbFJ1bGVFbml0eSxcclxuICBSYWlsUnVsZUVuaXR5S2V5cyxcclxuICBSYWlsU3VtbWFyeVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvc3VtbWFyeS1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XHJcbmltcG9ydCB7IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC1vcGVuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJUmFpbFNlbGVjdGVkVGlja2V0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLXNlbGVjdGVkLXRpY2tldC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBSYWlsRGlyZWN0aW9uIH0gZnJvbSAnLi9yYWlsLWRpcmVjdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgUmFpbEluZGV4VG9UaWNrZXQgfSBmcm9tICcuL3JhaWwtaW5kZXgtdG8tdGlja2V0JztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmV4cG9ydCBlbnVtIFJhaWxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgRGVwYXJ0ID0gJ0RlcGFydCBBZnRlcicsXHJcbiAgQXJyaXZlID0gJ0Fycml2ZSBCZWZvcmUnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJhaWxKb3VybmV5RmFyZVR5cGUgeyAvLyBtYXkgbmVlZCB0byBiZSBleHBhbmRlZCBmb3IgZHVhbC9zcGxpdFxyXG4gIFJldHVybiA9ICdSZXR1cm4nLFxyXG4gIFNpbmdsZSA9ICdTaW5nbGUnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSYWlsRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIFEgZXh0ZW5kcyBSYWlsUXVvdGVGZXRjaGVyVHlwZSxcclxuICAgIEdSU19RIGV4dGVuZHMgR2V0UmFpbFN0YXRpb25GZXRjaGVyVHlwZVxyXG4gID5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBSYWlsUXVvdGVSZXN1bHRBcnJheSxcclxuICAgIE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgUmFpbEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGlja2V0OiBJUmFpbFNlbGVjdGVkVGlja2V0O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkSW5ib3VuZFRpY2tldDogSVJhaWxTZWxlY3RlZFRpY2tldDtcclxuICBwcml2YXRlIF9zZWxlY3RlZFN1bW1hcnk6IFJhaWxSdWxlRW5pdHk7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmJvdW5kU3VtbWFyeTogUmFpbFJ1bGVFbml0eTtcclxuICBwcml2YXRlIF9zZWxlY3RlZFNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXM7XHJcbiAgcHJpdmF0ZSBhbHRlcm5hdGl2ZVdlbGxiZWluZzogUmFpbFdlbGxiZWluZ09iamVjdEludGVyZmFjZTtcclxuXHJcbiAgZ2V0IHNlbGVjdGVkU2VjdGlvbigpOiBPQlRSYWlsRmFyZVR5cGVzIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFNlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRUaWNrZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRUaWNrZXQoc2VsZWN0ZWRUaWNrZXQ6IHtcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xyXG4gIH0pIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGlja2V0ID0gc2VsZWN0ZWRUaWNrZXQ7XHJcbiAgICBpZiAoIXRoaXMuX3NlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkU3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KFxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGlja2V0LmpvdXJuZXksXHJcbiAgICAgICAgdGhpcy5zdW1tYXJ5Lm91dGJvdW5kIHx8IFtdXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRJbmJvdW5kVGlja2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldDtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RlZEluYm91bmRUaWNrZXQoc2VsZWN0ZWRUaWNrZXQ6IElSYWlsU2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHNlbGVjdGVkVGlja2V0O1xyXG4gICAgaWYgKCF0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5ID0gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmJvdW5kU3VtbWFyeSA9IHRoaXMuc3VtbWFyeS5yZXR1cm4uZmluZChcclxuICAgICAgICAodmFsdWU6IFJhaWxSdWxlRW5pdHkpOiBib29sZWFuID0+IHtcclxuICAgICAgICAgIHJldHVybiB2YWx1ZS5qb3VybmV5SGFzaCA9PT0gdGhpcy5fc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhbnNhY3Rpb25JZGVudGlmaWVyKGlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXIgPSBpZDtcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc2FjdGlvbklkZW50aWZpZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhbnNhY3Rpb25JZGVudGlmaWVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX3JhaWwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyYWlsX3Jlc3VsdHMnO1xyXG4gIHN0YXRpYyByZWFkb25seSBQQVNTSU5HX1BPSU5UID0gJ1Bhc3NpbmcnO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1JldHVybicsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuU2luZ2xlSm91cm5leSB9XHJcbiAgICAvLyB7IGRpc3BsYXk6ICdPcGVuIFJldHVybicsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXkgfSxcclxuICAgIC8vIHsgZGlzcGxheTogJ0R1YWwgU2luZ2xlcycsIHZhbHVlOiBSYWlsU2VhcmNoSm91cm5leVR5cGUuRHVhbFNpbmdsZUpvdXJuZXkgfSxcclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBSYWlsQ2xhc3MuQWxsIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdTdGFuZGFyZCcsIHZhbHVlOiBSYWlsQ2xhc3MuU3RhbmRhcmQgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZpcnN0JywgdmFsdWU6IFJhaWxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFpcnBvcnRFeHByZXNzU3RhdGlvbnM6IElSYWlsQWlycG9ydEV4cHJlc3NTdGF0aW9uc1tdID0gW1xyXG4gICAgeyBjb2RlOiAnSFAxLTMnLCBuYW1lOiAnSGVhdGhyb3cgVDEtMyAtIFBhZGRpbmd0b24nIH0sXHJcbiAgICB7IGNvZGU6ICdIUDQnLCBuYW1lOiAnSGVhdGhyb3cgVDQgLSBQYWRkaW5ndG9uJyB9LFxyXG4gICAgeyBjb2RlOiAnSFA1JywgbmFtZTogJ0hlYXRocm93IFQ1IC0gUGFkZGluZ3RvbicgfSxcclxuICAgIHsgY29kZTogJ1BIMS0zJywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUMS0zJyB9LFxyXG4gICAgeyBjb2RlOiAnUEg0JywgbmFtZTogJ1BhZGRpbmd0b24gLSBIZWF0aHJvdyBUNCcgfSxcclxuICAgIHsgY29kZTogJ1BINScsIG5hbWU6ICdQYWRkaW5ndG9uIC0gSGVhdGhyb3cgVDUnIH0sXHJcbiAgICB7IGNvZGU6ICdHVicsIG5hbWU6ICdHYXR3aWNrIC0gVmljdG9yaWEnIH0sXHJcbiAgICB7IGNvZGU6ICdWRycsIG5hbWU6ICdWaWN0b3JpYSAtIEdhdHdpY2snIH0sXHJcbiAgICB7IGNvZGU6ICdTTCcsIG5hbWU6ICdTdGFuc3RlZCAtIExpdmVycG9vbCBTdHJlZXQnIH0sXHJcbiAgICB7IGNvZGU6ICdMUycsIG5hbWU6ICdMaXZlcnBvb2wgU3RyZWV0IC0gU3RhbnN0ZWQnIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgYWlycG9ydEV4cHJlc3NTdGF0aW9uc0NvZGVzOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7IGRlcDogc3RyaW5nOyBhcnI6IHN0cmluZyB9O1xyXG4gIH0gPSB7XHJcbiAgICAnSFAxLTMnOiB7IGRlcDogJ0hYWCcsIGFycjogJ1BBRCcgfSxcclxuICAgICdQSDEtMyc6IHsgZGVwOiAnUEFEJywgYXJyOiAnSFhYJyB9LFxyXG4gICAgSFA0OiB7IGRlcDogJ0hBRicsIGFycjogJ1BBRCcgfSxcclxuICAgIFBINDogeyBkZXA6ICdQQUQnLCBhcnI6ICdIQUYnIH0sXHJcbiAgICBIUDU6IHsgZGVwOiAnSFdWJywgYXJyOiAnUEFEJyB9LFxyXG4gICAgUEg1OiB7IGRlcDogJ1BBRCcsIGFycjogJ0hXVicgfSxcclxuICAgIEdWOiB7IGRlcDogJ0dUVycsIGFycjogJ1ZJQycgfSxcclxuICAgIFZHOiB7IGRlcDogJ1ZJQycsIGFycjogJ0dUVycgfSxcclxuICAgIFNMOiB7IGRlcDogJ1NTRCcsIGFycjogJ0xTVCcgfSxcclxuICAgIExTOiB7IGRlcDogJ0xTVCcsIGFycjogJ1NTRCcgfVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyByYWlsQ3JpdGVyaWEgPSBbUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydCwgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZV07XHJcblxyXG4gIHB1YmxpYyB0cmF2ZWxDYXJkcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1lvdW5nIHBlcnNvbnMgcmFpbGNhcmQnLCB2YWx1ZTogJ1lORycgfSxcclxuICAgIHsgZGlzcGxheTogJ0Rpc2FiaWxpdHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0RJUycgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZhbWlseSByYWlsY2FyZCcsIHZhbHVlOiAnRkFNJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRm9yY2VzIHJhaWxjYXJkJywgdmFsdWU6ICdITUYnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdUcmF2ZWwgYWdlbmN5IGRpc2NvdW50JywgdmFsdWU6ICdUQUQnIH1cclxuICBdO1xyXG5cclxuICAvLyBZTkc6IFwiWW91bmcgcGVyc29ucyByYWlsY2FyZFwiLFxyXG4gIC8vIERJUzogXCJEaXNhYmlsaXR5IHJhaWxjYXJkXCIsXHJcbiAgLy8gRkFNOiBcIkZhbWlseSByYWlsY2FyZFwiLFxyXG4gIC8vIEhNRjogXCJGb3JjZXMgcmFpbGNhcmRcIixcclxuICAvLyBUQUQ6IFwiVHJhdmVsIGFnZW5jeSBkaXNjb3VudFwiXHJcbiAgcHVibGljIHJlbW92ZVBhc3NpbmdQb2ludHNGcm9tUmVzdWx0cyA9IHRydWU7XHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuUmFpbDtcclxuXHJcbiAgcHJpdmF0ZSBfYm9va1JhaWxGcm9tTGl2ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjaGVhcGVzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xyXG4gICAgb3V0Ym91bmRDaGVhcGVzdDogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgaW5ib3VuZENoZWFwZXN0OiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXRSZXR1cm46IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldER1YWw6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gIH0+KHtcclxuICAgIG91dGJvdW5kQ2hlYXBlc3Q6IHtcclxuICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGluYm91bmRDaGVhcGVzdDoge1xyXG4gICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICB9LFxyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgIH0sXHJcbiAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfSxcclxuICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXREdWFsOiB7XHJcbiAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBnZXQgYm9va1JhaWxGcm9tTGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ib29rUmFpbEZyb21MaXZlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJvb2tSYWlsRnJvbUxpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Jvb2tSYWlsRnJvbUxpdmUgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHVibGljIG1pbk91dGJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwdWJsaWMgbWluSW5ib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHVibGljIG1heERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICAvLyBFTlQtMTU1NyAtIG1heCBFdm9sdmkgc2VhcmNoIGRhdGUgaXMgNiBtb250aHMgaW4gZnV0dXJlXHJcbiAgICB5ZWFyOiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLmFkZCgnbW9udGgnLCA2KS5tb250aCgpLFxyXG4gICAgZGF5OiBtb21lbnQoKS5hZGQoJ21vbnRoJywgNikuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIC8vIHByaXZhdGUgX2Nob3NlblRpY2tldEdyb3VwOiBSYWlsVGlja2V0R3JvdXA7XHJcbiAgcHJpdmF0ZSBfdmlhTG9jYXRpb246IHN0cmluZztcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nRnJvbTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdUbzogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfb3JpZ2luYWxVc2VyU2VhcmNoOiBSYWlsVGVtcFBhcmFtcztcclxuICBwdWJsaWMgc3VtbWFyeTogUmFpbFN1bW1hcnkgPSB7fTtcclxuXHJcbiAgZ2V0IG9wZW5SZXR1cm4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0IG9wZW5SZXR1cm4obmV3VmFsOiBib29sZWFuKSB7XHJcbiAgICBpZiAobmV3VmFsKSB7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID1cclxuICAgICAgICBSYWlsU2VhcmNoSm91cm5leVR5cGUuT3BlblJldHVybkpvdXJuZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5O1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogUmFpbFNlYXJjaEpvdXJuZXlUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hUeXBlKG5ld1R5cGU6IFJhaWxTZWFyY2hKb3VybmV5VHlwZSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPSBuZXdUeXBlO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZBZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBub09mQWR1bHRzKGFkdWx0czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyA9IGFkdWx0cztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQ2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vT2ZDaGlsZHJlbihjaGlsZHJlbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbztcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nVG8odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdUbyA9IHR0O1xyXG5cclxuICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICB9IGVsc2UgaWYgKHR0Py5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ0Zyb20oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb207XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhdmVsbGluZ0Zyb20odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnRyYXZlbGxpbmdGcm9tID0gdHQ7XHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH0gZWxzZSBpZiAodHQ/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gdHQuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblJhaWxDbGFzcygpOiBSYWlsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5SYWlsQ2xhc3MobmV3Q2xhc3M6IFJhaWxDbGFzcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzID0gbmV3Q2xhc3M7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoQ2xhc3MoKTogUmFpbENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoQ2xhc3MoY2xhc3NSOiBSYWlsQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyA9IGNsYXNzUjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBleHRyYVRpbWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmV4dHJhVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBleHRyYVRpbWUoZXh0cmE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5leHRyYVRpbWUgPSBleHRyYTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2aWEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYTtcclxuICB9XHJcblxyXG4gIHNldCB2aWEodmlhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhID0gdmlhO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZpYUxvY2F0aW9uKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpYUxvY2F0aW9uKHZpYUxvY2F0aW9uOiBhbnkpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbiA9IHZpYUxvY2F0aW9uO1xyXG5cclxuICAgIHRoaXMuX3ZpYUxvY2F0aW9uID0gJyc7XHJcbiAgICBpZiAodmlhTG9jYXRpb24/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl92aWFMb2NhdGlvbiA9IHZpYUxvY2F0aW9uLnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRCb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dEJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWluSW5ib3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IG5ld0RhdGVUaW1lLnllYXIoKSxcclxuICAgICAgbW9udGg6IG5ld0RhdGVUaW1lLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IG5ld0RhdGVUaW1lLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuaXNBZnRlcih0aGlzLmluQm91bmREYXRlVGltZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICAgLnNldCgnZGF0ZScsIG5ld0RhdGVUaW1lLmRhdGUoKSlcclxuICAgICAgICAuc2V0KCdtb250aCcsIG5ld0RhdGVUaW1lLm1vbnRoKCkpXHJcbiAgICAgICAgLnNldCgneWVhcicsIG5ld0RhdGVUaW1lLnllYXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dGJvdW5kQ3JpdGVyaWEoKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZENyaXRlcmlhKG5ld0NyaXQ6IFJhaWxTZWFyY2hDcml0ZXJpYSkge1xyXG4gICAgLy8gY29uc29sZS53YXJuKGArKysgU2V0dGluZyBOZXcgQ3JpdGVyaWE6ICR7bmV3Q3JpdH0gKysrYCk7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmRDcml0ZXJpYSA9IG5ld0NyaXQ7XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluQm91bmREYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluQm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmluQm91bmREYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX3JldHVybl90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzE2MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcclxuICBwcml2YXRlIF9vdXRib3VuZF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IG91dGJvdW5kX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vdXRib3VuZF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZF90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IHJldHVybl9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCByZXR1cm5fdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3JldHVybl90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldHVybkNyaXRlcmlhKCk6IFJhaWxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybkNyaXRlcmlhKG5ld0NyaXQ6IFJhaWxTZWFyY2hDcml0ZXJpYSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhID0gbmV3Q3JpdDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYXJuZXRUaWNrZXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhcm5ldFRpY2tldDtcclxuICB9XHJcblxyXG4gIHNldCBjYXJuZXRUaWNrZXQobmV3Q2FybmV0OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FybmV0VGlja2V0ID0gbmV3Q2FybmV0O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc2FibGVBdXRvRGlzY291bnRzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kaXNhYmxlQXV0b0Rpc2NvdW50cztcclxuICB9XHJcblxyXG4gIHNldCBkaXNhYmxlQXV0b0Rpc2NvdW50cyhuZXdEaXM6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kaXNhYmxlQXV0b0Rpc2NvdW50cyA9IG5ld0RpcztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBwcmlvcml0aXNlQnlQcmljZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJpb3JpdGlzZUJ5UHJpY2U7XHJcbiAgfVxyXG5cclxuICBzZXQgcHJpb3JpdGlzZUJ5UHJpY2UobmV3UHJpb3JpdHk6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5wcmlvcml0aXNlQnlQcmljZSA9IG5ld1ByaW9yaXR5O1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFwcGx5UmFpbGNhcmRzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcHBseVJhaWxjYXJkcztcclxuICB9XHJcblxyXG4gIHNldCBhcHBseVJhaWxjYXJkcyhhcENhcmRzOiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWFwQ2FyZHMpIHtcclxuICAgICAgdGhpcy5yYWlsQ2FyZHMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMudGVtcFBhcmFtcy5hcHBseVJhaWxjYXJkcyA9IGFwQ2FyZHM7XHJcbiAgfVxyXG5cclxuICBnZXQgcmFpbENhcmRzKCk6IFJlZmVyZW5jZVJhaWxDYXJkUXVhbGlmaWVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yYWlsQ2FyZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgcmFpbENhcmRzKHZhbHVlOiBSZWZlcmVuY2VSYWlsQ2FyZFF1YWxpZmllcltdKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmFpbENhcmRzID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpOiBWYWx1ZURpc3BsYXlbXSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoNDgpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gMilcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gMilcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFpcnBvcnRFeHByZXNzU3RhdGlvbnMoKTogeyBjb2RlOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9ucztcclxuICB9XHJcblxyXG4gIGdldCBhaXJwb3J0RXhwcmVzc1N0YXRpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IGFpcnBvcnRFeHByZXNzU3RhdGlvbihzdGF0aW9uOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0RXhwcmVzc1N0YXRpb24gPSBzdGF0aW9uO1xyXG4gICAgdGhpcy5fc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQWlycG9ydEV4cHJlc3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmlzQWlycG9ydEV4cHJlc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgaXNBaXJwb3J0RXhwcmVzcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmlzQWlycG9ydEV4cHJlc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHNldEFpcnBvcnRFeHByZXNzU3RhdGlvbklkcyhzdGF0aW9uSWRzOiB7XHJcbiAgICBkZXBhcnR1cmVMb2NhdGlvbklkOiBzdHJpbmc7XHJcbiAgICBhcnJpdmFsTG9jYXRpb25JZDogc3RyaW5nO1xyXG4gIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgZGVwYXJ0dXJlTG9jYXRpb25JZCwgYXJyaXZhbExvY2F0aW9uSWQgfSA9IHN0YXRpb25JZHM7XHJcbiAgICBpZiAoZGVwYXJ0dXJlTG9jYXRpb25JZCAmJiBhcnJpdmFsTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IGRlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IGFycml2YWxMb2NhdGlvbklkO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maW5kU3VtbWFyeShcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgc3VtbWFyeTogUmFpbFJ1bGVFbml0eVtdXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gc3VtbWFyeS5maW5kKCh2YWx1ZTogUmFpbFJ1bGVFbml0eSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gdmFsdWUuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2g7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5KTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgUmFpbGZldGNoZXI6IEJhc2VSYWlsUXVvdGVGZXRjaGVyPFE+LFxyXG4gICAgcHJpdmF0ZSBnZXRSYWlsU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXI8R1JTX1E+LFxyXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxyXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcclxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHF1ZXJ5OiB7fTtcclxuICAgICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogUmFpbFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIFJhaWxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICBxdWVyeToge30sXHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIFJhaWxUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZVJhaWxRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuICAgIGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoLnRyYW5zYWN0aW9uSWRlbnRpZmllciA9IG51bGw7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm5vT2ZBZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMoXHJcbiAgICByYXdSZXN1bHRzOiBSYWlsUXVvdGVSZXN1bHRBcnJheVxyXG4gICk6IE9CVFJhaWxRdW90ZVJlc3VsdEFycmF5IHtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25JZGVudGlmaWVyID0gbnVsbDtcclxuICAgIGNvbnN0IHNldEZhcmVzID0gKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZmFyZSxcclxuICAgICAgICB0eXBlOiBmYXJlPy50eXBlPy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc29ydEZhcmVzID0gKFxyXG4gICAgICBqb3VybmV5czogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj5bXVxyXG4gICAgKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdID0+IHtcclxuICAgICAgY29uc3QgdG9SZXR1cm4gPSB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUoam91cm5leXMpXHJcbiAgICAgICAgLnNvcnQoKGZpcnN0OiBSYWlsSm91cm5leU9wdGlvbiwgc2Vjb25kOiBSYWlsSm91cm5leU9wdGlvbik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXJzdFRpbWUgPSBtb21lbnQoZmlyc3QuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgY29uc3Qgc2Vjb25kVGltZSA9IG1vbWVudChzZWNvbmQuZGVwYXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgaWYgKGZpcnN0VGltZS5pc0JlZm9yZShzZWNvbmRUaW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlyc3RUaW1lLmlzQWZ0ZXIoc2Vjb25kVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5tYXAoKGpvdXJuZXk6IFJhaWxKb3VybmV5T3B0aW9uKTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzb3J0ID0gKFxyXG4gICAgICAgICAgICBmaXJzdDogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICAgKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnByaWNlIC0gc2Vjb25kLnByaWNlO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBkdWFsU2luZ2xlSm91cm5leXMgPSAoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IFtdKVxyXG4gICAgICAgICAgICAuc29ydChzb3J0KVxyXG4gICAgICAgICAgICAubWFwKHNldEZhcmVzKTtcclxuICAgICAgICAgIGNvbnN0IG9wZW5SZXR1cm5Kb3VybmV5cyA9IChqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leXMgPSAoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSm91cm5leXMgPSAoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnQpXHJcbiAgICAgICAgICAgIC5tYXAoc2V0RmFyZXMpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5cy5tYXAoc2V0RmFyZXMpO1xyXG4gICAgICAgICAgY29uc3QgcmV0dXJuSm91cm5leUZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9XHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlzLm1hcChzZXRGYXJlcyk7XHJcbiAgICAgICAgICBjb25zdCBzaW5nbGVKb3VybmV5RmFyZXM6IE9CVFJhaWxKb3VybmV5RmFyZVtdID1cclxuICAgICAgICAgICAgc2luZ2xlSm91cm5leXMubWFwKHNldEZhcmVzKTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0b1JldHVybjEgPSB7XHJcbiAgICAgICAgICAgIC4uLmpvdXJuZXksXHJcbiAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgb3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgICBbJ3R5cGUnLCBbJ3Rlcm1zLnRpY2tldFR5cGVDb2RlJywgJ3ByaWNlJ11dXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLmFycmF5VG9PYmplY3RBcnJheShcclxuICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICAgWyd0eXBlJywgWyd0ZXJtcy50aWNrZXRUeXBlQ29kZScsICdwcmljZSddXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5hcnJheVRvT2JqZWN0QXJyYXkoXHJcbiAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgICAgIFsndHlwZScsIFsndGVybXMudGlja2V0VHlwZUNvZGUnLCAncHJpY2UnXV1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBhcyBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0b1JldHVybjE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0b1JldHVybjtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJhd1Jlc3VsdHMubWFwKChyYWlsUmVzdWx0OiBSYWlsUXVvdGVSZXN1bHQpOiBPQlRSYWlsUXVvdGVSZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLnN1bW1hcnkgPSByYWlsUmVzdWx0LnN1bW1hcnk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kSW50ZXJuYWwgPSBzb3J0RmFyZXMocmFpbFJlc3VsdC5vdXRib3VuZCB8fCBbXSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmRJbnRlcm5hbCA9IHNvcnRGYXJlcyhyYWlsUmVzdWx0LnJldHVybiB8fCBbXSk7XHJcblxyXG4gICAgICBjb25zdCBpbmRleFRvVGlja2V0cyA9IHRoaXMubWFrZUZhcmVOYW1lcyhbXHJcbiAgICAgICAgb3V0Ym91bmRJbnRlcm5hbCB8fCBbXSxcclxuICAgICAgICBpbmJvdW5kSW50ZXJuYWwgfHwgW11cclxuICAgICAgXSk7XHJcblxyXG4gICAgICBjb25zdCBjb252ZXJ0RmFyZXMgPSAoXHJcbiAgICAgICAgZmFyZXM6IE9CVFJhaWxJbnRlcm5hbEZhcmUsXHJcbiAgICAgICAgdGlja2V0VHlwZTogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICAgICApOiBPQlRSYWlsRmFyZSA9PiB7XHJcbiAgICAgICAgY29uc3QgcnRpID0gaW5kZXhUb1RpY2tldHNbdGlja2V0VHlwZV07XHJcbiAgICAgICAgY29uc3QgdGlja2V0VHlwZXMgPSBydGkuZ2V0VGlja2V0VHlwZXMoKTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGlja2V0VHlwZXMpLnJlZHVjZShcclxuICAgICAgICAgIChjdXJyZW50OiBPQlRSYWlsRmFyZSwgW3R5cGUsIGNvdW50XTogW3N0cmluZywgbnVtYmVyXSkgPT4ge1xyXG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdID0gcnRpXHJcbiAgICAgICAgICAgICAgLndvcmtvdXRJbmRleGVzKHR5cGUpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGRzOiBzdHJpbmdbXSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oZWxwZXJzLmZpZWxkRnJvbU9iamVjdChmYXJlcywgZmllbGRzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge31cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb252ZXRSYWlsSk91cm5leSA9IChcclxuICAgICAgICBqb3VybmV5OiBPQlRSYWlsSW50ZXJuYWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IE9CVFJhaWxKb3VybmV5T3B0aW9uID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3JldHVybkpvdXJuZXlGYXJlcydcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiBjb252ZXJ0RmFyZXMoXHJcbiAgICAgICAgICAgIGpvdXJuZXkub3BlblJldHVybkpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LmR1YWxTaW5nbGVKb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJ1xyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogY29udmVydEZhcmVzKFxyXG4gICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyxcclxuICAgICAgICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcydcclxuICAgICAgICAgIClcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgb3V0Ym91bmQgPSBvdXRib3VuZEludGVybmFsLm1hcChjb252ZXRSYWlsSk91cm5leSk7XHJcbiAgICAgIGNvbnN0IGluYm91bmQgPSBpbmJvdW5kSW50ZXJuYWwubWFwKGNvbnZldFJhaWxKT3VybmV5KTtcclxuXHJcbiAgICAgIGNvbnN0IG91dFByaWNlcyA9IHRoaXMudXBkYXRlUHJpY2VzKFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czoge1xyXG4gICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgcmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDoge1xyXG4gICAgICAgICAgICBzdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBmaXJzdENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfSxcclxuICAgICAgICAgICAgaW5ib3VuZEZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiB7XHJcbiAgICAgICAgICAgIHN0YW5kYXJkQ2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGZpcnN0Q2xhc3NGYXJlOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIGluYm91bmRTdGFuZGFyZENsYXNzRmFyZTogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBpbmJvdW5kRmlyc3RDbGFzc0ZhcmU6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGluUHJpY2VzID0gdGhpcy51cGRhdGVQcmljZXMoXHJcbiAgICAgICAgaW5ib3VuZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjaGVhcGVzdFRpY2tldHM6IHtcclxuICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB7IHByaWNlOiAwLCBqb3VybmV5OiBudWxsLCBmYXJlOiBudWxsIH0sXHJcbiAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogeyBwcmljZTogMCwgam91cm5leTogbnVsbCwgZmFyZTogbnVsbCB9LFxyXG4gICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHsgcHJpY2U6IDAsIGpvdXJuZXk6IG51bGwsIGZhcmU6IG51bGwgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IG91dFByaWNlcy5jaGVhcGVzdENsYXNzVGlja2V0LFxyXG4gICAgICAgICAgb3V0Ym91bmRDbGFzc1RpY2tldDogb3V0UHJpY2VzLmNoZWFwZXN0Q2xhc3NUaWNrZXRcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNoZWFwZXN0Lm5leHQoe1xyXG4gICAgICAgIG91dGJvdW5kQ2hlYXBlc3Q6IG91dFByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgaW5ib3VuZENoZWFwZXN0OiBpblByaWNlcy5jaGVhcGVzdFRpY2tldHMsXHJcbiAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogaW5QcmljZXMuY2hlYXBlc3RDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0UmV0dXJuOiBvdXRQcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldCxcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0RHVhbDogaW5QcmljZXMub3V0Ym91bmRDbGFzc1RpY2tldFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5yYWlsUmVzdWx0LFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIHJldHVybjogaW5ib3VuZFxyXG4gICAgICB9IGFzIE9CVFJhaWxRdW90ZVJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlRmFyZU5hbWVzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxJbnRlcm5hbEpvdXJuZXlPcHRpb25bXVtdXHJcbiAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAncmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgJ29wZW5SZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICdzaW5nbGVKb3VybmV5RmFyZXMnXHJcbiAgICBdLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIGFjY3VtOiBSZWNvcmQ8T0JUUmFpbEZhcmVUeXBlcywgUmFpbEluZGV4VG9UaWNrZXQ+LFxyXG4gICAgICAgIG5leHQ6IE9CVFJhaWxGYXJlVHlwZXNcclxuICAgICAgKTogUmVjb3JkPE9CVFJhaWxGYXJlVHlwZXMsIFJhaWxJbmRleFRvVGlja2V0PiA9PiB7XHJcbiAgICAgICAgYWNjdW1bbmV4dF0gPSB0aGlzLl9tYWtlRmFyZU5hbWVzKGpvdXJuZXlzLCBuZXh0KTtcclxuICAgICAgICByZXR1cm4gYWNjdW07XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIGR1YWxTaW5nbGVKb3VybmV5RmFyZXM6IG5ldyBSYWlsSW5kZXhUb1RpY2tldCgpLFxyXG4gICAgICAgIHNpbmdsZUpvdXJuZXlGYXJlczogbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21ha2VGYXJlTmFtZXMoXHJcbiAgICBqb3VybmV5czogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvbltdW10sXHJcbiAgICBmaWVsZDogT0JUUmFpbEZhcmVUeXBlc1xyXG4gICk6IFJhaWxJbmRleFRvVGlja2V0IHtcclxuICAgIHJldHVybiBfLmZsYXR0ZW4oam91cm5leXMgfHwgW10pLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHJpdDogUmFpbEluZGV4VG9UaWNrZXQsXHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEludGVybmFsSm91cm5leU9wdGlvblxyXG4gICAgICApOiBSYWlsSW5kZXhUb1RpY2tldCA9PiB7XHJcbiAgICAgICAgaWYgKCFqb3VybmV5KSB7XHJcbiAgICAgICAgICByZXR1cm4gcml0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuZW50cmllcyhqb3VybmV5W2ZpZWxkXSB8fCB7fSkuZm9yRWFjaChcclxuICAgICAgICAgIChbdGlja2V0TmFtZSwgc3ViZmFyZXNdOiBbXHJcbiAgICAgICAgICAgIHN0cmluZyxcclxuICAgICAgICAgICAgUmVjb3JkPHN0cmluZywgT0JUUmFpbEpvdXJuZXlGYXJlW10+XHJcbiAgICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN1YmZhcmVzKS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgIChbdGlja2V0VHlwZSwgZmFyZXNdOiBbc3RyaW5nLCBPQlRSYWlsSm91cm5leUZhcmVbXV0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJpdC5hZGRGYXJlcyh0aWNrZXROYW1lLCB0aWNrZXRUeXBlLCBmYXJlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcml0Lm5leHRKb3VybmV5KCk7XHJcbiAgICAgICAgcmV0dXJuIHJpdDtcclxuICAgICAgfSxcclxuICAgICAgbmV3IFJhaWxJbmRleFRvVGlja2V0KClcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlUHJpY2VzKFxyXG4gICAgam91cm5leXM6IE9CVFJhaWxKb3VybmV5T3B0aW9uW10sXHJcbiAgICBwcmljZXM6IHtcclxuICAgICAgY2hlYXBlc3RUaWNrZXRzOiBDaGVhcGVzdFJhaWxQcmljZXM7XHJcbiAgICAgIGNoZWFwZXN0Q2xhc3NUaWNrZXQ6IENoZWFwZXN0UmFpbENsYXNzUHJpY2VzO1xyXG4gICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgIH0sXHJcbiAgICBpc1JldHVybjogYm9vbGVhblxyXG4gICk6IHtcclxuICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICB9IHtcclxuICAgIGNvbnN0IG1pbiA9IChcclxuICAgICAgY3VycmVudDoge1xyXG4gICAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb247XHJcbiAgICAgICAgZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlO1xyXG4gICAgICB9LFxyXG4gICAgICBmYXJlczogT0JUUmFpbEpvdXJuZXlGYXJlW10sXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApOiB7XHJcbiAgICAgIHByaWNlOiBudW1iZXI7XHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uO1xyXG4gICAgICBmYXJlOiBPQlRSYWlsSm91cm5leUZhcmU7XHJcbiAgICB9ID0+IHtcclxuICAgICAgaWYgKCFmYXJlcyB8fCBmYXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXh0ID0gZmFyZXNbMF0ucHJpY2U7XHJcbiAgICAgIHJldHVybiBjdXJyZW50LnByaWNlID4gMCAmJiBjdXJyZW50LnByaWNlIDwgbmV4dFxyXG4gICAgICAgID8gY3VycmVudFxyXG4gICAgICAgIDogeyBwcmljZTogbmV4dCwgam91cm5leSwgZmFyZTogZmFyZXNbMF0gfTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcclxuICAgICAgKFxyXG4gICAgICAgIHByaWNlczE6IHtcclxuICAgICAgICAgIGNoZWFwZXN0VGlja2V0czogQ2hlYXBlc3RSYWlsUHJpY2VzO1xyXG4gICAgICAgICAgY2hlYXBlc3RDbGFzc1RpY2tldDogQ2hlYXBlc3RSYWlsQ2xhc3NQcmljZXM7XHJcbiAgICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICAgICk6IHtcclxuICAgICAgICBjaGVhcGVzdFRpY2tldHM6IENoZWFwZXN0UmFpbFByaWNlcztcclxuICAgICAgICBjaGVhcGVzdENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgICBvdXRib3VuZENsYXNzVGlja2V0OiBDaGVhcGVzdFJhaWxDbGFzc1ByaWNlcztcclxuICAgICAgfSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc29ydCA9IChcclxuICAgICAgICAgIGZpcnN0OiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICAgICAgICBzZWNvbmQ6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICAgICAgICk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmlyc3QucHJpY2UgLSBzZWNvbmQucHJpY2U7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxKSA9PiBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLlN0YW5kYXJkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMgPSBfLmZsYXR0ZW4oXHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcylcclxuICAgICAgICApLmZpbHRlcihcclxuICAgICAgICAgIChqb3VybmV5MTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PlxyXG4gICAgICAgICAgICBqb3VybmV5MSAmJiBqb3VybmV5MS5jbGFzcyA9PT0gUmFpbENsYXNzLkZpcnN0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBvcGVuUmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKVxyXG4gICAgICAgICkuZmlsdGVyKFxyXG4gICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+XHJcbiAgICAgICAgICAgIGpvdXJuZXkxICYmIGpvdXJuZXkxLmNsYXNzID09PSBSYWlsQ2xhc3MuU3RhbmRhcmRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG9wZW5SZXR1cm5GaXJzdEpvdXJuZXlzID0gXy5mbGF0dGVuKFxyXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5yZXR1cm5Kb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlU3RhbmRhcmRKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5TdGFuZGFyZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2luZ2xlRmlyc3RKb3VybmV5cyA9IF8uZmxhdHRlbihcclxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMpXHJcbiAgICAgICAgKS5maWx0ZXIoXHJcbiAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT5cclxuICAgICAgICAgICAgam91cm5leTEgJiYgam91cm5leTEuY2xhc3MgPT09IFJhaWxDbGFzcy5GaXJzdFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5vRHVhbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLm9wZW5SZXR1cm5TdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ucmV0dXJuU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgIC4uLnNpbmdsZVN0YW5kYXJkSm91cm5leXNcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IGFsbFN0YW5kYXJkOiBPQlRSYWlsSm91cm5leUZhcmVbXSA9IFtcclxuICAgICAgICAgIC4uLmR1YWxTaW5nbGVTdGFuZGFyZEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4ubm9EdWFsU3RhbmRhcmRcclxuICAgICAgICBdLnNvcnQoc29ydCk7XHJcbiAgICAgICAgY29uc3Qgbm9EdWFsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4ub3BlblJldHVybkZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5yZXR1cm5GaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgLi4uc2luZ2xlRmlyc3RKb3VybmV5c1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgYWxsRmlyc3Q6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0gW1xyXG4gICAgICAgICAgLi4uZHVhbFNpbmdsZUZpcnN0Sm91cm5leXMsXHJcbiAgICAgICAgICAuLi5ub0R1YWxGaXJzdFxyXG4gICAgICAgIF0uc29ydChzb3J0KTtcclxuICAgICAgICBpZiAoIWlzUmV0dXJuKSB7XHJcbiAgICAgICAgICBub0R1YWxTdGFuZGFyZC5zb3J0KHNvcnQpO1xyXG4gICAgICAgICAgYWxsRmlyc3Quc29ydChzb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLmR1YWxTaW5nbGVKb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5kdWFsU2luZ2xlSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG4gICAgICAgIHByaWNlczEuY2hlYXBlc3RUaWNrZXRzLm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5vcGVuUmV0dXJuSm91cm5leUZhcmVzLFxyXG4gICAgICAgICAgXy5mbGF0dGVuKE9iamVjdC52YWx1ZXMoam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzKSkuZmlsdGVyKFxyXG4gICAgICAgICAgICAoam91cm5leTE6IE9CVFJhaWxKb3VybmV5RmFyZSkgPT4gISFqb3VybmV5MVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMgPSBtaW4oXHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0VGlja2V0cy5yZXR1cm5Kb3VybmV5RmFyZXMsXHJcbiAgICAgICAgICBfLmZsYXR0ZW4oT2JqZWN0LnZhbHVlcyhqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcykpLmZpbHRlcihcclxuICAgICAgICAgICAgKGpvdXJuZXkxOiBPQlRSYWlsSm91cm5leUZhcmUpID0+ICEham91cm5leTFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaXNSZXR1cm4pIHtcclxuICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIGFsbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSA9IG1pbihcclxuICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgbm9EdWFsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICBub0R1YWxGaXJzdCxcclxuICAgICAgICAgICAgam91cm5leVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGlzU3RhbmRhcmRDbGFzc1NpbmdsZSA9XHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZT8uZmFyZVxyXG4gICAgICAgICAgICAgID8uc2luZ2xlT3JSZXR1cm4gPT09IFJhaWxKb3VybmV5RmFyZVR5cGUuU2luZ2xlO1xyXG4gICAgICAgICAgaWYgKGlzU3RhbmRhcmRDbGFzc1NpbmdsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmJvdW5kUHJpY2UgPSBtaW4oXHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRTdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgICBkdWFsU2luZ2xlU3RhbmRhcmRKb3VybmV5cyxcclxuICAgICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kVG90YWxQcmljZSA9XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmRUb3RhbFByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID1cclxuICAgICAgICAgICAgICAgIHByaWNlczEub3V0Ym91bmRDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZTtcclxuICAgICAgICAgICAgICAvLyBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlID0ge1xyXG4gICAgICAgICAgICAgIC8vICAgcHJpY2U6IDAsXHJcbiAgICAgICAgICAgICAgLy8gICBqb3VybmV5OiBudWxsLFxyXG4gICAgICAgICAgICAgIC8vICAgZmFyZTogbnVsbFxyXG4gICAgICAgICAgICAgIC8vIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgaW5ib3VuZFByaWNlLnByaWNlID5cclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZFN0YW5kYXJkQ2xhc3NGYXJlLnByaWNlXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kU3RhbmRhcmRDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgaW5ib3VuZFByaWNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgaXNGaXJzdENsYXNzU2luZ2xlID1cclxuICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlPy5mYXJlPy5zaW5nbGVPclJldHVybiA9PT1cclxuICAgICAgICAgICAgUmFpbEpvdXJuZXlGYXJlVHlwZS5TaW5nbGU7XHJcbiAgICAgICAgICBpZiAoaXNGaXJzdENsYXNzU2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluYm91bmRQcmljZSA9IG1pbihcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuaW5ib3VuZEZpcnN0Q2xhc3NGYXJlLFxyXG4gICAgICAgICAgICAgIGR1YWxTaW5nbGVGaXJzdEpvdXJuZXlzLFxyXG4gICAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxQcmljZSA9IHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZS5wcmljZTtcclxuICAgICAgICAgICAgaWYgKHRvdGFsUHJpY2UgPiBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUucHJpY2UpIHtcclxuICAgICAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPVxyXG4gICAgICAgICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlO1xyXG4gICAgICAgICAgICAgIC8vIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUgPSB7XHJcbiAgICAgICAgICAgICAgLy8gICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAvLyAgIGpvdXJuZXk6IG51bGwsXHJcbiAgICAgICAgICAgICAgLy8gICBmYXJlOiBudWxsXHJcbiAgICAgICAgICAgICAgLy8gfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBpbmJvdW5kUHJpY2UucHJpY2UgPlxyXG4gICAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5pbmJvdW5kRmlyc3RDbGFzc0ZhcmUucHJpY2VcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcHJpY2VzMS5jaGVhcGVzdENsYXNzVGlja2V0LmluYm91bmRGaXJzdENsYXNzRmFyZSA9IGluYm91bmRQcmljZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5zdGFuZGFyZENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsU3RhbmRhcmQsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwcmljZXMxLmNoZWFwZXN0Q2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUgPSBtaW4oXHJcbiAgICAgICAgICAgIHByaWNlczEuY2hlYXBlc3RDbGFzc1RpY2tldC5maXJzdENsYXNzRmFyZSxcclxuICAgICAgICAgICAgYWxsRmlyc3QsXHJcbiAgICAgICAgICAgIGpvdXJuZXlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LnN0YW5kYXJkQ2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuc3RhbmRhcmRDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbFN0YW5kYXJkLFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcHJpY2VzMS5vdXRib3VuZENsYXNzVGlja2V0LmZpcnN0Q2xhc3NGYXJlID0gbWluKFxyXG4gICAgICAgICAgICBwcmljZXMxLm91dGJvdW5kQ2xhc3NUaWNrZXQuZmlyc3RDbGFzc0ZhcmUsXHJcbiAgICAgICAgICAgIG5vRHVhbEZpcnN0LFxyXG4gICAgICAgICAgICBqb3VybmV5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJpY2VzMTtcclxuICAgICAgfSxcclxuICAgICAgcHJpY2VzXHJcbiAgICApO1xyXG4gIH1cclxuICBhc3luYyBzZWxlY3RUaWNrZXQoXHJcbiAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24sXHJcbiAgICBqb3VybmV5OiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIHJhaWxGYXJlOiBPQlRSYWlsSm91cm5leUZhcmUsXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VjdGlvbjogT0JUUmFpbEZhcmVUeXBlcyxcclxuICAgIHdlbGxiZWluZzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXJhaWxGYXJlLnNlbGVjdGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT0gam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2ggPT09IHJhaWxGYXJlLmZhcmVIYXNoXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkVGlja2V0ID0gdGhpcy5zZWxlY3RlZFRpY2tldDtcclxuICAgIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChcclxuICAgICAgVXNlckZhdm9ydXJpdGUuQWx0ZXJuYXRpdmVSYWlsSXRpbmVyYXJ5RW5hYmxlZFxyXG4gICAgKTtcclxuICAgIGlmIChzZWxlY3RlZFRpY2tldCAmJiAhd2VsbGJlaW5nICYmIHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcpIHtcclxuICAgICAgY29uc3Qgb3V0OiBPQlRSYWlsSm91cm5leU9wdGlvbiA9IHNlbGVjdGVkVGlja2V0LmpvdXJuZXk7XHJcbiAgICAgIGNvbnN0IGluQjogT0JUUmFpbEpvdXJuZXlPcHRpb24gPSBqb3VybmV5O1xyXG5cclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzID0gbW9tZW50KG91dC5hcnJpdmVEYXRlVGltZSkuZGlmZihcclxuICAgICAgICBtb21lbnQob3V0LmRlcGFydERhdGVUaW1lKSxcclxuICAgICAgICAnaG91cnMnLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdGltZURpZmZJbkhvdXJzSW4gPSBtb21lbnQoaW5CLmFycml2ZURhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChpbkIuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdob3VycycsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXlEaWZmZXJuY2UgPSBtb21lbnQoaW5CLmRlcGFydERhdGVUaW1lKS5kaWZmKFxyXG4gICAgICAgIG1vbWVudChvdXQuZGVwYXJ0RGF0ZVRpbWUpLFxyXG4gICAgICAgICdkYXknXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB0b0FkZCA9IGF3YWl0IHRoaXMuY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgICAgIHRpbWVEaWZmSW5Ib3VycyArIHRpbWVEaWZmSW5Ib3Vyc0luLFxyXG4gICAgICAgIGRheURpZmZlcm5jZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodG9BZGQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFRpY2tldChcclxuICAgICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZSxcclxuICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgc2VjdGlvbixcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMgPSB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuICAgICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnc2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChqb3VybmV5Py50aWNrZXRFeHRyYXM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgIE1vZGFsVHlwZXMuUmFpbFRpY2tldHNEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IGpvdXJuZXkgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzID8gdGlja2V0RXh0cmFzIDogW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLk91dGJvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXk/LnRpY2tldEV4dHJhcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICAgICAgTW9kYWxUeXBlcy5SYWlsVGlja2V0c0RpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB7IG91dGJvdW5kUmFpbEpvdXJuZXlPcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0LmpvdXJuZXkudGlja2V0RXh0cmFzID0gdGlja2V0RXh0cmFzXHJcbiAgICAgICAgICAgICAgICA/IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAgICAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXksXHJcbiAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUsXHJcbiAgICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJzpcclxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQuam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGlja2V0RXh0cmFzOiBSYWlsVGlja2V0RXh0cmFbXSA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgb3V0Ym91bmRSYWlsSm91cm5leU9wdGlvbjogdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5IH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2codGlja2V0RXh0cmFzKTtcclxuICAgICAgICAgICAgICBzZWxlY3RlZFRpY2tldC5qb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhc1xyXG4gICAgICAgICAgICAgICAgPyB0aWNrZXRFeHRyYXNcclxuICAgICAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5qb3VybmV5LFxyXG4gICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLFxyXG4gICAgICAgICAgICAgIHJhaWxGYXJlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnb3BlblJldHVybkpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgICBpZiAoam91cm5leT8udGlja2V0RXh0cmFzPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldEV4dHJhczogUmFpbFRpY2tldEV4dHJhW10gPVxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgICBNb2RhbFR5cGVzLlJhaWxUaWNrZXRzRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgeyBjZW50ZXJlZDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBvdXRib3VuZFJhaWxKb3VybmV5T3B0aW9uOiBqb3VybmV5IH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aWNrZXRFeHRyYXMpO1xyXG4gICAgICAgICAgICBqb3VybmV5LnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcyA/IHRpY2tldEV4dHJhcyA6IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRPcGVuUmV0dXJuVG9CYXNrZXQoXHJcbiAgICAgICAgICAgIHNvdXJjZUlkLFxyXG4gICAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgcmFpbEZhcmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tBbHRlcm5hdGl2ZUhvdXJzKFxyXG4gICAgaG91ckRpZmZlcmVuY2U6IG51bWJlcixcclxuICAgIGRheURpZmZlcmVuY2U6IG51bWJlclxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gISBFTlQtMTQ4MSAtIENoZWNrIGlmIHdlIGFyZSBzZWFyY2hpbmcgcmV0dXJuIHJhaWwgLSBhbmQgYWx0ZXJuYXRpdmUgd2VsbGJlaW5nIGlzIGVuYWJsZWRcclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5SYWlsXTtcclxuICAgIGNvbnN0IGNoZWNrID1cclxuICAgICAgdGhpcy5hbHRlcm5hdGl2ZVdlbGxiZWluZy5lbmFibGUgJiZcclxuICAgICAgTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpID4gMCAmJlxyXG4gICAgICBwYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkgJiZcclxuICAgICAgaG91ckRpZmZlcmVuY2UgPj0gTnVtYmVyKHRoaXMuYWx0ZXJuYXRpdmVXZWxsYmVpbmcuaG91cnMpICYmXHJcbiAgICAgIGRheURpZmZlcmVuY2UgPT09IDAgJiZcclxuICAgICAgdGhpcy5ub09mQWR1bHRzICsgdGhpcy5ub09mQ2hpbGRyZW4gPD0gbWF4VHJhdmVsbGVyV2VsbGJlaW5nO1xyXG4gICAgaWYgKGNoZWNrKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgTW9kYWxUeXBlcy5BbHRlcm5hdGl2ZVJhaWxNb2RhbENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICB0aGlzLnBlcmZvcm1BbHRlcm5hdGl2ZVJhaWxBbmRIb3RlbFNlYXJjaCgpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXJmb3JtQWx0ZXJuYXRpdmVSYWlsQW5kSG90ZWxTZWFyY2goKTogdm9pZCB7XHJcbiAgICAvLyBhbHRlciB0aGUgc2VhcmNoIHBhcmFtc1xyXG4gICAgLy8gdGhlIGNhbGwgdGhlIHNlYXJjaCBmdW5jdGlvblxyXG5cclxuICAgIGNvbnNvbGUubG9nKCcrKysgQ3JlYXRpbmcgdGhlIEFsdGVybmF0aXZlIFNlYXJjaCBQYXJhbXMgKysrJyk7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNIb3RlbCA9XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF07XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXNSYWlsID1cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLlJhaWxdO1xyXG4gICAgc2VhcmNoUGFyYW1zSG90ZWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc1JhaWwuY2hvc2VuID0gdHJ1ZTtcclxuICAgIHNlYXJjaFBhcmFtc0hvdGVsLnByaW9yaXR5ID0gc2VhcmNoUGFyYW1zUmFpbC5wcmlvcml0eTtcclxuICAgIGNvbnN0IGhvdGVsUGFyYW1zID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXTtcclxuICAgIGNvbnN0IHJhaWxQYXJhbXMgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuUmFpbF07XHJcbiAgICAvLyBGaXJzdCBvZiBhbGwgLSBhbHRlciB0aGUgcmFpbCBpbmJvdW5kIGRhdGUgLSBhZGQgYSBkYXlcclxuICAgIHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1xyXG4gICAgICBTZXJ2aWNlVHlwZS5SYWlsXHJcbiAgICBdLmluQm91bmREYXRlVGltZS5hZGQoMSwgJ2RheScpO1xyXG5cclxuICAgIC8vIG5vdyBjcmVhdGUgdGhlIGhvdGVsIHNlYXJjaCBwYXJhbXNcclxuICAgIGhvdGVsUGFyYW1zLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb247XHJcbiAgICBob3RlbFBhcmFtcy5sb2NhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvO1xyXG4gICAgaG90ZWxQYXJhbXMudHJhaW5zU3RhdGlvbiA9IHJhaWxQYXJhbXMudHJhdmVsbGluZ1RvLnJhaWxzdGF0aW9uO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tpbl9kYXRlID0gcmFpbFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMuY2hlY2tvdXRfZGF0ZSA9IHJhaWxQYXJhbXMuaW5Cb3VuZERhdGVUaW1lO1xyXG4gICAgaG90ZWxQYXJhbXMubm9fb2Zfb2NjdXBhbnRzID1cclxuICAgICAgcmFpbFBhcmFtcy5ub09mQWR1bHRzICsgcmFpbFBhcmFtcy5ub09mQ2hpbGRyZW47XHJcbiAgICBob3RlbFBhcmFtcy5ub19vZl9yb29tcyA9IDE7XHJcbiAgICBob3RlbFBhcmFtcy5kaXN0YW5jZSA9IDEwO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKFdlbGxiZWluZ0VudW0uV0VMTEJFSU5HKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlbGVjdFRpY2tldE5vQWRkKFxyXG4gICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlY3Rpb246IE9CVFJhaWxGYXJlVHlwZXNcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghcmFpbEZhcmUuc2VsZWN0YWJsZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJysrKyBSYWlsIGZhcmUgaXMgbm90IHNlbGVjdGFibGUgKysrJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc091dFRpY2tldFNlbGVjdGVkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0LmpvdXJuZXkuam91cm5leUhhc2ggPT09IGpvdXJuZXkuam91cm5leUhhc2ggJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoID09PSByYWlsRmFyZS5mYXJlSGFzaDtcclxuICAgIGNvbnN0IGlzSW5UaWNrZXRTZWxlY3RlZCA9XHJcbiAgICAgIGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5JbmJvdW5kXHJcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuam91cm5leS5qb3VybmV5SGFzaCA9PT1cclxuICAgICAgICAgICAgam91cm5leS5qb3VybmV5SGFzaCAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQuZmFyZS5mYXJlSGFzaCA9PT0gcmFpbEZhcmUuZmFyZUhhc2hcclxuICAgICAgICA6IGZhbHNlO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaXNPdXRUaWNrZXRTZWxlY3RlZCB8fFxyXG4gICAgICAoZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQgJiYgaXNJblRpY2tldFNlbGVjdGVkKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnKysrIEpvdXJuZXkgYW5kIGZhcmUgYXJlIGFscmVhZHkgc2VsZWN0ZWQgLSBicmVha2luZyBvdXQgKysrJ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gICAgICBpZiAoaXNPdXRUaWNrZXRTZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5fc2VsZWN0ZWRTZWN0aW9uICYmIHRoaXMuX3NlbGVjdGVkU2VjdGlvbiAhPT0gc2VjdGlvbikgfHxcclxuICAgICAgKHRoaXMuX3NlbGVjdGVkU2VjdGlvbiA9PT0gJ3JldHVybkpvdXJuZXlGYXJlcycgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Py5mYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyICE9PVxyXG4gICAgICAgICAgcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5ib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2VsZWN0ZWRTZWN0aW9uID0gc2VjdGlvbjtcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyA9IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG4gICAgc3dpdGNoIChzZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3NpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBmYXJlOiByYWlsRmFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXR1cm5Kb3VybmV5RmFyZXMnOlxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFJhaWxEaXJlY3Rpb24uT3V0Ym91bmQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRUaWNrZXQgPSB7XHJcbiAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyc6XHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gUmFpbERpcmVjdGlvbi5PdXRib3VuZCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZFRpY2tldCA9IHtcclxuICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgZmFyZTogcmFpbEZhcmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0ge1xyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGZhcmU6IHJhaWxGYXJlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zdCB0ZW1wOiBPQlRSYWlsRmFyZVR5cGVzID0gc2VjdGlvbjtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGFkZCB0byBiYXNrZXQgZm9yIGdvMi9zY2lvblxyXG4gICAqIEBwYXJhbSBzb3VyY2VJZFxyXG4gICAqIEBwYXJhbSBzZWFyY2hRdWVyeVxyXG4gICAqIEBwYXJhbSBqb3VybmV5XHJcbiAgICogQHBhcmFtIHJhaWxGYXJlXHJcbiAgICogQHBhcmFtIGluYm91bmRSYWlsRmFyZVxyXG4gICAqIEBwYXJhbSBpbmJvdW5kSm91cm5leVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkVG9CYXNrZXQoXHJcbiAgICBzb3VyY2VJZDogc3RyaW5nLFxyXG4gICAgc2VhcmNoUXVlcnk6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZFJhaWxGYXJlPzogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEpvdXJuZXk/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgaWYgKHNlYXJjaFF1ZXJ5LmNob3NlblNlYXJjaFR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5KSB7XHJcbiAgICAgIC8vIFRPRE9cclxuICAgICAgYXdhaXQgdGhpcy5hZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgICAgam91cm5leSxcclxuICAgICAgICByYWlsRmFyZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gbm93IGNoZWNrIGlmIHdlIGhhdmUgY2hvc2VuIGR1YWwgc2luZ2xlcyBvciByZXR1cm5zXHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb24gPT09ICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICByYWlsRmFyZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmFpbEZhcmUuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgICAgICAgc291cmNlSWQsXHJcbiAgICAgICAgICBzZWFyY2hRdWVyeSxcclxuICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICBpbmJvdW5kSm91cm5leSxcclxuICAgICAgICAgIHJhaWxGYXJlLFxyXG4gICAgICAgICAgaW5ib3VuZFJhaWxGYXJlXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAhIC0gRHVhbCBTaW5nbGVzXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZGREdWFsU2luZ2xlVG9CYXNrZXQoXHJcbiAgICAgICAgICBzb3VyY2VJZCxcclxuICAgICAgICAgIHNlYXJjaFF1ZXJ5LFxyXG4gICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgIGluYm91bmRKb3VybmV5LFxyXG4gICAgICAgICAgcmFpbEZhcmUsXHJcbiAgICAgICAgICBpbmJvdW5kUmFpbEZhcmVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkT3BlblJldHVyblRvQmFza2V0KFxyXG4gICAgc291cmNlSWQ6IHN0cmluZyxcclxuICAgIHNlYXJjaFF1ZXJ5OiBSYWlsVGVtcFBhcmFtcyxcclxuICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgcmFpbEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgICBzb3VyY2VJZCxcclxuICAgICAgc2VhcmNoUXVlcnksXHJcbiAgICAgIGpvdXJuZXksXHJcbiAgICAgIHJhaWxGYXJlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkRHVhbFNpbmdsZVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBzZWFyY2hRdWVyeTogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICBvdXRib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBpbmJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIG91dGJvdW5kRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlLFxyXG4gICAgaW5ib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZVxyXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeShzZWFyY2hRdWVyeSk7XHJcblxyXG4gICAgbGV0IGluVGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuICAgIGxldCBvdXRUaWNrZXRFeHRyYXM6IFRpY2tldEV4dHJhc1tdO1xyXG5cclxuICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgY3JlYXRlIFRpY2tldEV4dHJhc09iamVjdCBhbmQgYWRkZWQgaXQgdG8gdGhlIGJhc2tldFxyXG4gICAgaWYgKGluYm91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIGluVGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QoaW5ib3VuZC50aWNrZXRFeHRyYXNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvdXRib3VuZD8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3Qob3V0Ym91bmQudGlja2V0RXh0cmFzWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICBvdXRib3VuZEZhcmUsXHJcbiAgICAgIG91dGJvdW5kLFxyXG4gICAgICBpbmJvdW5kXHJcbiAgICApO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuXHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW06IFJhaWxCYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZCxcclxuICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdDogKG91dGJvdW5kLnRpY2tldFF1ZXVlTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbFRpY2tldFF1ZXVlKTogVGlja2V0UXVldWVMaXN0ID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgYWNjb3VudHNMaXN0OiAob3V0Ym91bmQuYWNjb3VudHNMaXN0IHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgIChpdGVtOiBSYWlsQWNjb3VudCk6IEFjY291bnRzTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IG91dGJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IG91dGJvdW5kLnRvLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBvdXRib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IG91dGJvdW5kRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogb3V0Ym91bmRGYXJlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogb3V0Ym91bmRGYXJlLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaW53YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbmJvdW5kLnRvLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaW5ib3VuZC5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGluYm91bmQuZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBpbmJvdW5kRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogaW5ib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IGluYm91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcixcclxuICAgICAgICAgICAgaXNEdWFsU2luZ2xlUmV0dXJuOiB0cnVlLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW2luYm91bmRGYXJlLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6IGluYm91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBpc0R1YWxTaW5nbGVSZXR1cm46IHRydWUsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgZVRpY2tldDogISFpbmJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogTnVtYmVyKFxyXG4gICAgICAgICAgTnVtYmVyKG91dGJvdW5kRmFyZS5wcmljZSArIGluYm91bmRGYXJlLnByaWNlKS50b0ZpeGVkKDIpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiBpblRpY2tldEV4dHJhcyBvciBvdXRUaWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKGluVGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwucmV0dXJuLnRpY2tldEV4dHJhcyA9IGluVGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvdXRUaWNrZXRFeHRyYXMpIHtcclxuICAgICAgICBiYXNrZXRJdGVtLmRldGFpbC5vdXRib3VuZC50aWNrZXRFeHRyYXMgPSBvdXRUaWNrZXRFeHRyYXM7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIGJhc2tldEl0ZW0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMsXHJcbiAgICAgICAgb3V0Ym91bmRGYXJlLnJlcXVpcmVzUmVhc29uIHx8IGluYm91bmRGYXJlLnJlcXVpcmVzUmVhc29uXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlO1xyXG4gIH1cclxuXHJcbiAgZmluZENoZWFwZXN0VGlja2V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlUmFpbFF1ZXJ5KCkpO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QWlycG9ydEV4cHJlc3NTdGF0aW9ucygpIHtcclxuICAgIGNvbnN0IHBhcnNlZFN0YXRpb24gPVxyXG4gICAgICB0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbnNDb2Rlc1t0aGlzLmFpcnBvcnRFeHByZXNzU3RhdGlvbl07XHJcbiAgICBjb25zb2xlLmxvZygnLS0tIFBhcnNlZCBTdGF0aW9uIGlzIDonLCBwYXJzZWRTdGF0aW9uKTtcclxuICAgIGlmIChwYXJzZWRTdGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gcGFyc2VkU3RhdGlvbi5kZXA7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHBhcnNlZFN0YXRpb24uYXJyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcclxuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBSYWlsRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgRnJvbSBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdUbykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBUbyBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdXRCb3VuZERhdGVUaW1lPy5pc0JlZm9yZShub3cpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0RlcGFydHVyZSBEYXRlL1RpbWUgY2Fubm90IGJlIGluIHRoZSBwYXN0LidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBSYWlsU2VhcmNoSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xyXG4gICAgICAvLyBjaGVjayBmb3IgcmV0dXJuIHNwZWNpZmljIHZhbGlkYXRpb25zIGluIGhlcmVcclxuXHJcbiAgICAgIGlmICh0aGlzLmluQm91bmREYXRlVGltZT8uaXNTYW1lT3JCZWZvcmUodGhpcy5vdXRCb3VuZERhdGVUaW1lKSkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgICAnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIERlcGFydHVyZSBEYXRlL1RpbWUnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpYSkge1xyXG4gICAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvbikge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZpYSBsb2NhdGlvbi4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMubm9PZkFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5ub09mQ2hpbGRyZW4gPCAxKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRoaXMudGVtcFBhcmFtcyk7XHJcbiAgICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXIgPSBudWxsO1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKFxyXG4gICAgICAgIHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgICAgUmFpbEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2godGhpcy5SYWlsZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBSYWlsUmVjZW50U2VhcmNoQXJncyA9XHJcbiAgICAgIHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLlJhaWwsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShcclxuICAgIHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXNcclxuICApOiBSYWlsUmVjZW50U2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogUmFpbFJlY2VudFNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmlzQWlycG9ydEV4cHJlc3MgPSB0aGlzLmlzQWlycG9ydEV4cHJlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LmFpcnBvcnRFeHByZXNzU3RhdGlvbiA9IHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdGcm9tID0gdGhpcy50cmF2ZWxsaW5nRnJvbTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ1RvID0gdGhpcy50cmF2ZWxsaW5nVG87XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmlhTG9jYXRpb24pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudmlhTG9jYXRpb24gPSB0aGlzLnZpYUxvY2F0aW9uO1xyXG4gICAgfVxyXG4gICAgc2VhcmNoUXVlcnkub3V0Ym91bmRTdGF0aW9uQ29kZSA9XHJcbiAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZTtcclxuXHJcbiAgICBzZWFyY2hRdWVyeS5pbmJvdW5kU3RhdGlvbkNvZGUgPVxyXG4gICAgICB0aGlzLnRyYXZlbGxpbmdUbz8ucmFpbHN0YXRpb24/LnN0YXRpb25Db2RlO1xyXG5cclxuICAgIHJldHVybiBzZWFyY2hRdWVyeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGU7XHJcbiAgICB0aGlzLmNob3NlblNlYXJjaENsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2xhc3M7XHJcbiAgICB0aGlzLmV4dHJhVGltZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmV4dHJhVGltZVRvQ2hhbmdlO1xyXG4gICAgdGhpcy5pc0FpcnBvcnRFeHByZXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuaXNBaXJwb3J0RXhwcmVzcztcclxuICAgIHRoaXMuYWlycG9ydEV4cHJlc3NTdGF0aW9uID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYWlycG9ydEV4cHJlc3NTdGF0aW9uO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWUgYW5kIG91dGJvdW5kQ3JpdGVyaWEgLHJldHVybkNyaXRlcmlhXHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lKTtcclxuICAgIHRoaXMub3V0Ym91bmRDcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbERhdGVUaW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGUgPT09XHJcbiAgICAgIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICAgID8gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZURhdGVUaW1lKVxyXG4gICAgICAgIDogbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxEYXRlVGltZSk7XHJcblxyXG4gICAgICB0aGlzLnJldHVybkNyaXRlcmlhID0gdGhpcy5nZXRDcml0ZXJpYShcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5BcnJpdmFsRGF0ZVRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5UmFpbGNhcmRzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3M/LnJhaWxDYXJkUXVhbGlmaWVycz8ubGVuZ3RoXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuYXBwbHlSYWlsY2FyZHMpIHtcclxuICAgICAgdGhpcy5yYWlsQ2FyZHMgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yYWlsQ2FyZFF1YWxpZmllcnM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF2ZWxsaW5nVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nVG87XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ0Zyb207XHJcblxyXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZTtcclxuICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYUxvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRpb25JZHMgPSB7XHJcbiAgICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVwYXJ0dXJlTG9jYXRpb25JZCxcclxuICAgICAgICBhcnJpdmFsTG9jYXRpb25JZDogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZhbExvY2F0aW9uSWRcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZXRBaXJwb3J0RXhwcmVzc1N0YXRpb25JZHMoc3RhdGlvbklkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT1cclxuICAgICAgUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zKTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGlmICh0aGlzLmlzQWlycG9ydEV4cHJlc3MgJiYgdGhpcy5vcGVuUmV0dXJuKSB7XHJcbiAgICAgIHRoaXMub3BlblJldHVybiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIGNvdW50cnlDb2RlOiAnR0InLFxyXG4gICAgICBqb3VybmV5VHlwZTogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlLFxyXG4gICAgICBhZHVsdHM6IHRlbXBQYXJhbXMubm9PZkFkdWx0cyxcclxuICAgICAgYXJyaXZhbExvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ1RvPy5yYWlsc3RhdGlvbj8uaWQsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudHJhdmVsbGluZ0Zyb20/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgY2hpbGRyZW46IHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuLFxyXG4gICAgICBjbGFzczogdGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyxcclxuICAgICAgZXh0cmFUaW1lVG9DaGFuZ2U6IHRlbXBQYXJhbXMuZXh0cmFUaW1lLFxyXG4gICAgICBvdXRib3VuZEFycml2YWxEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy5oZWxwZXJzLmZvcm1hdEdyYXBoUUxEYXRlVGltZShcclxuICAgICAgICB0ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZVRpbWVcclxuICAgICAgKSxcclxuICAgICAgcmV0dXJuQXJyaXZhbERhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLmhlbHBlcnMuZm9ybWF0R3JhcGhRTERhdGVUaW1lKFxyXG4gICAgICAgIHRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lXHJcbiAgICAgICksXHJcbiAgICAgIHZpYUxvY2F0aW9uSWQ6IHRlbXBQYXJhbXMudmlhTG9jYXRpb24/LnJhaWxzdGF0aW9uPy5pZCxcclxuICAgICAgcmFpbENhcmRRdWFsaWZpZXJzOiB0ZW1wUGFyYW1zLnJhaWxDYXJkcz8ubWFwKFxyXG4gICAgICAgIChyYWlsQ2FyZDogUmVmZXJlbmNlUmFpbENhcmRRdWFsaWZpZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiByYWlsQ2FyZD8uY29kZTtcclxuICAgICAgICB9XHJcbiAgICAgICksXHJcbiAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogdGVtcFBhcmFtcy50cmFuc2FjdGlvbklkZW50aWZpZXJcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRlbXBQYXJhbXMubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgIHF1ZXJ5LmNoaWxkcmVuID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmlhTG9jYXRpb24gPT09ICcnKSB7XHJcbiAgICAgIHF1ZXJ5LnZpYUxvY2F0aW9uSWQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhKSB7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDpcclxuICAgICAgICBxdWVyeS5vdXRib3VuZEFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUmFpbFNlYXJjaENyaXRlcmlhLkFycml2ZTpcclxuICAgICAgICBxdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWF9ICsrK2BcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlOlxyXG4gICAgICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhfSArKytgXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSkge1xyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5OlxyXG4gICAgICBjYXNlIFJhaWxTZWFyY2hKb3VybmV5VHlwZS5PcGVuUmV0dXJuSm91cm5leTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgcXVlcnkucmV0dXJuQXJyaXZhbERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGVtcFBhcmFtcy5pc0FpcnBvcnRFeHByZXNzKSB7XHJcbiAgICAgIHF1ZXJ5LmFycml2YWxMb2NhdGlvbklkID0gdGhpcy5fdHJhdmVsbGluZ1RvO1xyXG4gICAgICBxdWVyeS5kZXBhcnR1cmVMb2NhdGlvbklkID0gdGhpcy5fdHJhdmVsbGluZ0Zyb207XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIGdldENyaXRlcmlhKFxyXG4gICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHN0cmluZyxcclxuICAgIGFycml2YWxEYXRlVGltZTogc3RyaW5nXHJcbiAgKTogUmFpbFNlYXJjaENyaXRlcmlhIHtcclxuICAgIGlmIChkZXBhcnR1cmVEYXRlVGltZSkge1xyXG4gICAgICByZXR1cm4gUmFpbFNlYXJjaENyaXRlcmlhLkRlcGFydDtcclxuICAgIH0gZWxzZSBpZiAoYXJyaXZhbERhdGVUaW1lKSB7XHJcbiAgICAgIHJldHVybiBSYWlsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlO1xyXG4gICAgfVxyXG4gICAge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge31cclxuXHJcbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaFJhaWxRdWVyeTogU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzID0gYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IHNlYXJjaFJhaWxRdWVyeS5qb3VybmV5VHlwZTtcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoQ2xhc3MgPSBzZWFyY2hSYWlsUXVlcnkuY2xhc3M7XHJcbiAgICB0aGlzLmV4dHJhVGltZSA9IHNlYXJjaFJhaWxRdWVyeS5leHRyYVRpbWVUb0NoYW5nZTtcclxuXHJcbiAgICAvLyBnZXQgb3V0Qm91bmREYXRlVGltZSwgaW5Cb3VuZERhdGVUaW1lIGFuZCBvdXRib3VuZENyaXRlcmlhICxyZXR1cm5Dcml0ZXJpYVxyXG4gICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWVcclxuICAgICAgPyBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUpXHJcbiAgICAgIDogbW9tZW50KHNlYXJjaFJhaWxRdWVyeS5vdXRib3VuZEFycml2YWxEYXRlVGltZSk7XHJcbiAgICB0aGlzLm91dGJvdW5kQ3JpdGVyaWEgPSB0aGlzLmdldENyaXRlcmlhKFxyXG4gICAgICBzZWFyY2hSYWlsUXVlcnkub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgc2VhcmNoUmFpbFF1ZXJ5Lm91dGJvdW5kQXJyaXZhbERhdGVUaW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChzZWFyY2hSYWlsUXVlcnkuam91cm5leVR5cGUgPT09IFJhaWxTZWFyY2hKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5KSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lXHJcbiAgICAgICAgPyBtb21lbnQoc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lKVxyXG4gICAgICAgIDogbW9tZW50KHNlYXJjaFJhaWxRdWVyeS5yZXR1cm5BcnJpdmFsRGF0ZVRpbWUpO1xyXG5cclxuICAgICAgdGhpcy5yZXR1cm5Dcml0ZXJpYSA9IHRoaXMuZ2V0Q3JpdGVyaWEoXHJcbiAgICAgICAgc2VhcmNoUmFpbFF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lLFxyXG4gICAgICAgIHNlYXJjaFJhaWxRdWVyeS5yZXR1cm5BcnJpdmFsRGF0ZVRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHNlYXJjaFJhaWxRdWVyeS5qb3VybmV5VHlwZSA9PT0gUmFpbFNlYXJjaEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcGVuUmV0dXJuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VhcmNoUmFpbFF1ZXJ5LmRlcGFydHVyZUxvY2F0aW9uSWQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldFJhaWxTdGF0aW9uQnlJZChzZWFyY2hSYWlsUXVlcnkuZGVwYXJ0dXJlTG9jYXRpb25JZClcclxuICAgICAgICAuc3Vic2NyaWJlKChkZXBhcnR1cmVTdGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxpbmdGcm9tID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBkZXBhcnR1cmVTdGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgIHJhaWxzdGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWQ6IGRlcGFydHVyZVN0YXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogZGVwYXJ0dXJlU3RhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgIG5sY0NvZGU6IGRlcGFydHVyZVN0YXRpb24ubmxjQ29kZSxcclxuICAgICAgICAgICAgICBzdGF0aW9uQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi5zdGF0aW9uQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVDb2RlOiBkZXBhcnR1cmVTdGF0aW9uLnRyYWlubGluZUNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lVW5pcXVlQ29kZTogZGVwYXJ0dXJlU3RhdGlvbi50cmFpbmxpbmVVbmlxdWVDb2RlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaFJhaWxRdWVyeS5hcnJpdmFsTG9jYXRpb25JZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2VcclxuICAgICAgICAuZ2V0UmFpbFN0YXRpb25CeUlkKHNlYXJjaFJhaWxRdWVyeS5hcnJpdmFsTG9jYXRpb25JZClcclxuICAgICAgICAuc3Vic2NyaWJlKChhcnJpdmFsU3RhdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsaW5nVG8gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGFycml2YWxTdGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgIHJhaWxzdGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgaWQ6IGFycml2YWxTdGF0aW9uLmlkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGFycml2YWxTdGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgbmxjQ29kZTogYXJyaXZhbFN0YXRpb24ubmxjQ29kZSxcclxuICAgICAgICAgICAgICBzdGF0aW9uQ29kZTogYXJyaXZhbFN0YXRpb24uc3RhdGlvbkNvZGUsXHJcbiAgICAgICAgICAgICAgdHJhaW5saW5lQ29kZTogYXJyaXZhbFN0YXRpb24udHJhaW5saW5lQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVVbmlxdWVDb2RlOiBhcnJpdmFsU3RhdGlvbi50cmFpbmxpbmVVbmlxdWVDb2RlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlYXJjaFJhaWxRdWVyeS52aWFMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMudmlhID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXHJcbiAgICAgICAgLmdldFJhaWxTdGF0aW9uQnlJZChzZWFyY2hSYWlsUXVlcnkudmlhTG9jYXRpb25JZClcclxuICAgICAgICAuc3Vic2NyaWJlKCh2aWFMb2NhdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGhpcy52aWFMb2NhdGlvbiA9IHtcclxuICAgICAgICAgICAgbmFtZTogdmlhTG9jYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgcmFpbHN0YXRpb246IHtcclxuICAgICAgICAgICAgICBpZDogdmlhTG9jYXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogdmlhTG9jYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICBubGNDb2RlOiB2aWFMb2NhdGlvbi5ubGNDb2RlLFxyXG4gICAgICAgICAgICAgIHN0YXRpb25Db2RlOiB2aWFMb2NhdGlvbi5zdGF0aW9uQ29kZSxcclxuICAgICAgICAgICAgICB0cmFpbmxpbmVDb2RlOiB2aWFMb2NhdGlvbi50cmFpbmxpbmVDb2RlLFxyXG4gICAgICAgICAgICAgIHRyYWlubGluZVVuaXF1ZUNvZGU6IHZpYUxvY2F0aW9uLnRyYWlubGluZVVuaXF1ZUNvZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlhTG9jYXRpb24gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCBUcmF2ZWxsZXJzXHJcbiAgICBpZiAoYmFza2V0SXRlbS51c2Vycykge1xyXG4gICAgICBiYXNrZXRJdGVtLnVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5hZGRUcmF2ZWxsZXIodXNlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmFpbFN0YXRpb24oXHJcbiAgICBjb2RlOiBzdHJpbmcsXHJcbiAgICBpc0xvYWRpbmc/OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICApOiBPYnNlcnZhYmxlPFJhaWxTdGF0aW9uPiB7XHJcbiAgICBpZiAoY29kZS5sZW5ndGggPT09IDMpIHtcclxuICAgICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRSYWlsU3RhdGlvbkZldGNoZXIuZmV0Y2hMaXN0KHsgY29kZSB9KS5waXBlKFxyXG4gICAgICAgIHRhcCgoKSA9PiBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpKSxcclxuICAgICAgICB0YWtlKDEpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUmFpbEpvdXJuZXlGYXJlKCk6IFJhaWxKb3VybmV5RmFyZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ocmFpbEpvdXJuZXlPcHRpb246IE9CVFJhaWxKb3VybmV5T3B0aW9uKTogYW55W10ge1xyXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LmpvdXJuZXlMZWdzLmxlbmd0aCkge1xyXG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uam91cm5leUxlZ3MubWFwKChzZWdtZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9wZXJhdG9yOiBzZWdtZW50Lm9wZXJhdG9yLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXHJcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVncztcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gICAgdGVtcFBhcmFtczogUmFpbFRlbXBQYXJhbXMsXHJcbiAgICByYWlsSm91cm5leU9wdGlvbjogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICByYWlsRmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlXHJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XHJcbiAgICBjb25zdCByYWlsUXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KHRlbXBQYXJhbXMpO1xyXG4gICAgbGV0IG91dFRpY2tldEV4dHJhczogVGlja2V0RXh0cmFzW107XHJcbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcclxuICAgIGlmIChyYWlsSm91cm5leU9wdGlvbj8udGlja2V0RXh0cmFzPy5sZW5ndGgpIHtcclxuICAgICAgb3V0VGlja2V0RXh0cmFzID0gdGhpcy5jcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QoXHJcbiAgICAgICAgcmFpbEpvdXJuZXlPcHRpb24udGlja2V0RXh0cmFzWzBdXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHJhaWxKb3VybmV5T3B0aW9uLnVuc2VsbGFibGUpIHtcclxuICAgIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKFxyXG4gICAgICByYWlsRmFyZSxcclxuICAgICAgcmFpbEpvdXJuZXlPcHRpb25cclxuICAgICk7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IGxlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ocmFpbEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICAvLyBjb25zdCB0aWNrZXRRdWV1ZUxpc3QgPSBzZWxlY3RlZFJhaWxKb3VybmV5RmFyZS50aWNrZXRRdWV1ZUxpc3QubWFwKFxyXG4gICAgICAvLyAgICh0aWNrZXRRdWV1ZUxpc3QxKSA9PiB7XHJcbiAgICAgIC8vICAgICByZXR1cm4ge1xyXG4gICAgICAvLyAgICAgICBpZDogdGlja2V0UXVldWVMaXN0MS5pZCxcclxuICAgICAgLy8gICAgICAgbmFtZTogdGlja2V0UXVldWVMaXN0MS5uYW1lLFxyXG4gICAgICAvLyAgICAgICB0eXBlOiB0aWNrZXRRdWV1ZUxpc3QxLnR5cGVcclxuICAgICAgLy8gICAgIH07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyApO1xyXG5cclxuICAgICAgY29uc3QgYmFza2V0SXRlbTogUmFpbEJhc2tldEl0ZW0gPSB7XHJcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChyYWlsSm91cm5leU9wdGlvbi50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKHJhaWxKb3VybmV5T3B0aW9uLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiByYWlsSm91cm5leU9wdGlvbi50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiByYWlsRmFyZS5wcm92aWRlck5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogcmFpbEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiByYWlsRmFyZS5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IHJhaWxGYXJlLmlkZW50aWZpZXJzLnRyYW5zYWN0aW9uSWRlbnRpZmllcixcclxuICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhcmFpbEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbcmFpbEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogcmFpbEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIHJhaWxKb3VybmV5T3B0aW9uLmpvdXJuZXlMZWdzXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9uc1xyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IHJhaWxGYXJlLnByaWNlLFxyXG4gICAgICAgIGN1cnJlbmN5OiByYWlsRmFyZS5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgc2VhcmNoUXVlcnk6IHJhaWxRdWVyeSxcclxuICAgICAgICBjbzJQZXJJdGVtOiByYWlsSm91cm5leU9wdGlvbi5jbzJQZXJJdGVtLFxyXG4gICAgICAgIGNvMlBlclBhc3NlbmdlcjogcmFpbEpvdXJuZXlPcHRpb24uY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogcmFpbEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIGlmIHRpY2tldEV4dHJhcyBleGlzdHMgYWRkIHRoZSBvYmplY3QgdG8gYmFza2V0SXRlbVxyXG4gICAgICBpZiAob3V0VGlja2V0RXh0cmFzKSB7XHJcbiAgICAgICAgYmFza2V0SXRlbS5kZXRhaWwub3V0Ym91bmQudGlja2V0RXh0cmFzID0gb3V0VGlja2V0RXh0cmFzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICByYWlsRmFyZS5yZXF1aXJlc1JlYXNvblxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRSZXR1cm5Kb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIHRlbXBQYXJhbXM6IFJhaWxUZW1wUGFyYW1zLFxyXG4gICAgb3V0Ym91bmQ6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgaW5ib3VuZDogT0JUUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgICBvdXRib3VuZEZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSxcclxuICAgIGluYm91bmRGYXJlOiBPQlRSYWlsSm91cm5leUZhcmVcclxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcclxuICAgIC8vIGlmIChvdXRib3VuZC51bnNlbGxhYmxlKSB7XHJcbiAgICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgcmFpbFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSh0ZW1wUGFyYW1zKTtcclxuXHJcbiAgICBsZXQgdGlja2V0RXh0cmFzOiBUaWNrZXRFeHRyYXNbXTtcclxuXHJcbiAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGNyZWF0ZSBUaWNrZXRFeHRyYXNPYmplY3QgYW5kIGFkZGVkIGl0IHRvIHRoZSBiYXNrZXRcclxuXHJcbiAgICBpZiAob3V0Ym91bmQ/LnRpY2tldEV4dHJhcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRpY2tldEV4dHJhcyA9IHRoaXMuY3JlYXRlVGlja2V0RXh0cmFzT2JqZWN0KG91dGJvdW5kLnRpY2tldEV4dHJhc1swXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChcclxuICAgICAgb3V0Ym91bmRGYXJlLFxyXG4gICAgICBvdXRib3VuZCxcclxuICAgICAgaW5ib3VuZFxyXG4gICAgKTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKG91dGJvdW5kKTtcclxuICAgICAgY29uc3QgaW5ib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24oaW5ib3VuZCk7XHJcblxyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtOiBSYWlsQmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICB0aWNrZXRRdWV1ZUxpc3Q6IChvdXRib3VuZC50aWNrZXRRdWV1ZUxpc3QgfHwgW10pLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IFJhaWxUaWNrZXRRdWV1ZSk6IFRpY2tldFF1ZXVlTGlzdCA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGFjY291bnRzTGlzdDogKG91dGJvdW5kLmFjY291bnRzTGlzdCB8fCBbXSkubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogUmFpbEFjY291bnQpOiBBY2NvdW50c0xpc3QgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dGJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Ym91bmQuZnJvbSxcclxuXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBvdXRib3VuZEZhcmUudHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBvdXRib3VuZEZhcmUucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbmJvdW5kLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluYm91bmQudG8sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5ib3VuZC5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluYm91bmRGYXJlLnByb3ZpZGVyTmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kRmFyZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogaW5ib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6IG91dGJvdW5kRmFyZS5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBlVGlja2V0OiAhIW91dGJvdW5kRmFyZS5lVGlja2V0QXZhaWxhYmxlLFxyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtvdXRib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogb3V0Ym91bmRGYXJlLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyLFxyXG4gICAgICAgICAgICBqb3VybmV5TGVnczogdGhpcy5yZW1vdmVkU2NoZWR1bGVkUGxhdGZvcm1Gcm9tQ2FsbGluZ1BvaW50cyhcclxuICAgICAgICAgICAgICBvdXRib3VuZC5qb3VybmV5TGVnc1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gdGlja2V0UXVldWVMaXN0LFxyXG4gICAgICAgICAgcmV0dXJuOiB7XHJcbiAgICAgICAgICAgIGVUaWNrZXQ6ICEhaW5ib3VuZEZhcmUuZVRpY2tldEF2YWlsYWJsZSxcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjogaW5ib3VuZEZhcmUuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGpvdXJuZXlMZWdzOiB0aGlzLnJlbW92ZWRTY2hlZHVsZWRQbGF0Zm9ybUZyb21DYWxsaW5nUG9pbnRzKFxyXG4gICAgICAgICAgICAgIGluYm91bmQuam91cm5leUxlZ3NcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IHJhaWxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IG91dGJvdW5kRmFyZS5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogb3V0Ym91bmRGYXJlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gICAgICAgIGNvMlBlckl0ZW06IG91dGJvdW5kLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiBvdXRib3VuZC5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZC5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICBpbmJvdW5kRGF0ZTogaW5ib3VuZC5hcnJpdmVEYXRlVGltZVxyXG4gICAgICB9O1xyXG4gICAgICAvLyBpZiB0aWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgICAgaWYgKHRpY2tldEV4dHJhcykge1xyXG4gICAgICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IHRpY2tldEV4dHJhcztcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBvdXRib3VuZEZhcmUucmVxdWlyZXNSZWFzb24gfHwgaW5ib3VuZEZhcmUucmVxdWlyZXNSZWFzb25cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlZFNjaGVkdWxlZFBsYXRmb3JtRnJvbUNhbGxpbmdQb2ludHMoXHJcbiAgICByYWlsTGVnczogUmFpbEpvdXJuZXlMZWdbXVxyXG4gICk6IFJhaWxKb3VybmV5TGVnW10ge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYWlsTGVncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBsZWcgPSByYWlsTGVnc1tpXTtcclxuXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVnLmNhbGxpbmdQb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBjYWxsaW5nUG9pbnRzID0gbGVnLmNhbGxpbmdQb2ludHNbal07XHJcbiAgICAgICAgZGVsZXRlIGNhbGxpbmdQb2ludHMuc2NoZWR1bGVkUGxhdGZvcm07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFpbExlZ3M7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVUaWNrZXRFeHRyYXNPYmplY3QocmFpbFRpY2tldEV4dHJhOiBSYWlsVGlja2V0RXh0cmEpOiBUaWNrZXRFeHRyYXNbXSB7XHJcbiAgICBjb25zdCBwcmljZSA9XHJcbiAgICAgIHRoaXMubm9PZkNoaWxkcmVuICogcmFpbFRpY2tldEV4dHJhPy5jaGlsZEFtb3VudCArXHJcbiAgICAgIHRoaXMubm9PZkFkdWx0cyAqIHJhaWxUaWNrZXRFeHRyYS5hZHVsdEFtb3VudDtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiByYWlsVGlja2V0RXh0cmEuaWRlbnRpZmllcnMudHlwZSxcclxuICAgICAgICBsb2NhdGlvbjogcmFpbFRpY2tldEV4dHJhLmlkZW50aWZpZXJzLmxvY2F0aW9uLFxyXG4gICAgICAgIGRhdGU6IHJhaWxUaWNrZXRFeHRyYS5pZGVudGlmaWVycy5kYXRlLFxyXG4gICAgICAgIHByaWNlXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUaW1lRGlmZmVyZW5jZUluTWlucyhyYWlsSm91cm5leTogUmFpbEpvdXJuZXlPcHRpb24pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVyc1xyXG4gICAgICAuZ2V0VGltZURpZmZlcmVuY2UocmFpbEpvdXJuZXkuYXJyaXZlRGF0ZVRpbWUsIHJhaWxKb3VybmV5LmRlcGFydERhdGVUaW1lKVxyXG4gICAgICAudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGRldGVybWluZSBpZiBhIHRpY2tldCBpcyBhbiBlVGlja2V0XHJcbiAgICogQHBhcmFtIHRpY2tldCAtIHRoZSB0aWNrZXQgd2Ugd2FudCB0byB0byBjaGVja1xyXG4gICAqIEByZXR1cm5zIC0gYm9vbGVhblxyXG4gICAqL1xyXG4gIHRpY2tldElzQW5FVGlja2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZm91bmRFVGlja2V0OiBSYWlsSm91cm5leU9wdGlvbiA9IG51bGw7XHJcblxyXG4gICAgLy8gZm91bmRFVGlja2V0ID0gdGlja2V0LnRpY2tldFF1ZXVlTGlzdC5maW5kKChxdWV1ZUxpc3RJdGVtKSA9PiB7XHJcbiAgICAvLyAgIHJldHVybiBxdWV1ZUxpc3RJdGVtLnR5cGUgPT09ICdlVGlja2V0JztcclxuICAgIC8vIH0pO1xyXG5cclxuICAgIHJldHVybiBmb3VuZEVUaWNrZXQgPyB0cnVlIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBseUZpbHRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBfYXBwbHlGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChcclxuICAgICAgdHlwZTogUmFpbFJ1bGVFbml0eUtleXMsXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMuX2ZpbmRTdW1tYXJ5KGpvdXJuZXksIHRoaXMuc3VtbWFyeS5yZXR1cm4pO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5XHJcbiAgICAgICAgPyAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZEZhcmVzLm1hcCgoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFmYXJlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoeyAuLi5mYXJlIH0sIFtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdW1tYXJ5W3R5cGVdW3RoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaF1cclxuICAgICAgICAgICAgICAgICAgICA/LnJ1bGVEYXRhV2hlblNlbGVjdGVkV2l0aFtmYXJlLmZhcmVIYXNoXSxcclxuICAgICAgICAgICAgICAgICAgc3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgICAgID8gc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXT8ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFyZS5mYXJlSGFzaCA9PT0gdGhpcy5zZWxlY3RlZFRpY2tldC5mYXJlLmZhcmVIYXNoLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogISF0aGlzLl9zZWxlY3RlZFN1bW1hcnlbdHlwZV1bXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuZmFyZS5mYXJlSGFzaFxyXG4gICAgICAgICAgICAgICAgXT8uYWxsb3dlZFdpdGg/LmluY2x1ZGVzKGZhcmUuZmFyZUhhc2gpXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZEZhcmVzLm1hcCgoZmFyZTogT0JUUmFpbEpvdXJuZXlGYXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFmYXJlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuaGVscGVycy5hZGRSYWlsQWN0aW9uUnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgIHsgLi4uZmFyZSB9LFxyXG4gICAgICAgICAgICAgICAgICBzdW1tYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgPyBbc3VtbWFyeVt0eXBlXVtmYXJlLmZhcmVIYXNoXS5ydWxlRGF0YVdoZW5TZWxlY3RlZEFsb25lXVxyXG4gICAgICAgICAgICAgICAgICAgIDogW11cclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzZXRSdWxlcyA9IChcclxuICAgICAgdHlwZTogUmFpbFJ1bGVFbml0eUtleXMsXHJcbiAgICAgIGpvdXJuZXk6IE9CVFJhaWxKb3VybmV5T3B0aW9uLFxyXG4gICAgICBkaXJlY3Rpb246ICdvdXRib3VuZCcgfCAncmV0dXJuJ1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIHJldHVybiAoZ3JvdXBlZEZhcmVzOiBPQlRSYWlsSm91cm5leUZhcmVbXSk6IE9CVFJhaWxKb3VybmV5RmFyZVtdID0+IHtcclxuICAgICAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5fZmluZFN1bW1hcnkoam91cm5leSwgdGhpcy5zdW1tYXJ5W2RpcmVjdGlvbl0pO1xyXG4gICAgICAgIHJldHVybiBncm91cGVkRmFyZXMubWFwKFxyXG4gICAgICAgICAgKGZhcmU6IE9CVFJhaWxKb3VybmV5RmFyZSk6IE9CVFJhaWxKb3VybmV5RmFyZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZmFyZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlbHBlcnMuYWRkUmFpbEFjdGlvblJ1bGVzKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC4uLmZhcmUsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCAmJlxyXG4gICAgICAgICAgICAgICAgICBmYXJlLmZhcmVIYXNoID09PSB0aGlzLnNlbGVjdGVkVGlja2V0LmZhcmUuZmFyZUhhc2hcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHN1bW1hcnlcclxuICAgICAgICAgICAgICAgID8gW3N1bW1hcnlbdHlwZV1bZmFyZS5mYXJlSGFzaF0ucnVsZURhdGFXaGVuU2VsZWN0ZWRBbG9uZV1cclxuICAgICAgICAgICAgICAgIDogW11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KFxyXG4gICAgICB0aGlzLmhlbHBlcnNcclxuICAgICAgICAuY2xvbmUodGhpcy5mdWxsUmVzdWx0cylcclxuICAgICAgICAucmVkdWNlKFxyXG4gICAgICAgICAgKFxyXG4gICAgICAgICAgICBhY2N1bTogT0JUUmFpbFF1b3RlUmVzdWx0W10sXHJcbiAgICAgICAgICAgIG5leHQ6IE9CVFJhaWxRdW90ZVJlc3VsdFxyXG4gICAgICAgICAgKTogT0JUUmFpbFF1b3RlUmVzdWx0W10gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0ge1xyXG4gICAgICAgICAgICAgIC4uLm5leHQsXHJcbiAgICAgICAgICAgICAgb3V0Ym91bmQ6IChuZXh0Lm91dGJvdW5kIHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5kdWFsU2luZ2xlSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdkdWFsU2luZ2xlSm91cm5leUZhcmVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmFpbERpcmVjdGlvbi5PdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5zaW5nbGVKb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbmdsZUpvdXJuZXlGYXJlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJhaWxEaXJlY3Rpb24uT3V0Ym91bmRcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkucmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5Kb3VybmV5RmFyZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSYWlsRGlyZWN0aW9uLk91dGJvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuUmV0dXJuSm91cm5leUZhcmVzOiB0aGlzLmhlbHBlcnMubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgam91cm5leS5vcGVuUmV0dXJuSm91cm5leUZhcmVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0UnVsZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdvcGVuUmV0dXJuSm91cm5leUZhcmVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmFpbERpcmVjdGlvbi5PdXRib3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfSBhcyBPQlRSYWlsSm91cm5leU9wdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIHJldHVybjogKG5leHQucmV0dXJuIHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoam91cm5leTogT0JUUmFpbEpvdXJuZXlPcHRpb24pOiBPQlRSYWlsSm91cm5leU9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uam91cm5leSxcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnJldHVybkpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKCdyZXR1cm5Kb3VybmV5RmFyZXMnLCBqb3VybmV5KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlGYXJlczogdGhpcy5oZWxwZXJzLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgIGpvdXJuZXkuZHVhbFNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKCdkdWFsU2luZ2xlSm91cm5leUZhcmVzJywgam91cm5leSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVKb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5LnNpbmdsZUpvdXJuZXlGYXJlcyB8fCB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFJ1bGVzKCdzaW5nbGVKb3VybmV5RmFyZXMnLCBqb3VybmV5LCAncmV0dXJuJylcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5SZXR1cm5Kb3VybmV5RmFyZXM6IHRoaXMuaGVscGVycy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBqb3VybmV5Lm9wZW5SZXR1cm5Kb3VybmV5RmFyZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRSdWxlcygnb3BlblJldHVybkpvdXJuZXlGYXJlcycsIGpvdXJuZXksICdyZXR1cm4nKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGFjY3VtLnB1c2godGVtcCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2N1bTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbXVxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtc0FuZENvbmQoXHJcbiAgICBvdXRib3VuZEZhcmU6IFJhaWxKb3VybmV5RmFyZSxcclxuICAgIG91dGJvdW5kOiBPQlRSYWlsSm91cm5leU9wdGlvbixcclxuICAgIGluYm91bmQ/OiBPQlRSYWlsSm91cm5leU9wdGlvblxyXG4gICkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDbGFzcycsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy50aWNrZXRUeXBlQ2xhc3NcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb25kaXRpb25zIERlc2NyaXB0aW9uJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDb25kaXRpb25zRGVzY3JpcHRpb25cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdWYWxpZCBSZXR1cm4gUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy52YWxpZFJldHVyblJ1bGVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBOYW1lJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hhbmdlIFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuY2hhbmdlUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ByZSBCb29raW5nIFJlcXVpcmVtZW50JyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnByZUJvb2tpbmdSZXF1aXJlbWVudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JhaWxjYXJkIERpc2NvdW50JyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnJhaWxjYXJkRGlzY291bnRcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdUaWNrZXQgVHlwZSBDb2RlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnRpY2tldFR5cGVDb2RlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnQ2hpbGQgRGlzY291bnQnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuY2hpbGREaXNjb3VudFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1ZhbGlkIE91dCBSdWxlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLnZhbGlkT3V0UnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1N0YXJ0IERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZC5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0VuZCBEYXRlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdKb3VybmV5IEJyZWFrIFJ1bGUnLFxyXG4gICAgICAgIHZhbHVlOiBvdXRib3VuZEZhcmUudGVybXMuam91cm5leUJyZWFrUnVsZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JlZnVuZCBDYW5jZWxsYXRpb24gUnVsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy5yZWZ1bmRDYW5jZWxsYXRpb25SdWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnSm91cm5leSBUeXBlJyxcclxuICAgICAgICB2YWx1ZTogb3V0Ym91bmRGYXJlLnRlcm1zLmpvdXJuZXlUeXBlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnVG9kIEF2YWlsYWJsZScsXHJcbiAgICAgICAgdmFsdWU6IG91dGJvdW5kRmFyZS50ZXJtcy50b2RBdmFpbGFibGVcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUmV0dXJuIFN0YXJ0IERhdGUnLFxyXG4gICAgICAgIHZhbHVlOiBpbmJvdW5kPy5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ1JldHVybiBFbmQgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IGluYm91bmQ/LmFycml2ZURhdGVUaW1lXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkodGhpcy50ZW1wUGFyYW1zKTtcclxuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IFJhaWxSZWNlbnRTZWFyY2hBcmdzID1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcclxuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxyXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxyXG4gICAgICAgIHNlYXJjaEFyZ3M6IGZhdm91cml0ZVNlYXJjaFF1ZXJ5XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMubm9PZkFkdWx0cyA9IGZhdi5hZHVsdHM7XHJcbiAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IGZhdi5jaGlsZHJlbjtcclxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IGZhdi5qb3VybmV5VHlwZTtcclxuICAgIHN3aXRjaCAoZmF2LmNsYXNzKSB7XHJcbiAgICAgIGNhc2UgJ0ZpcnN0JzpcclxuICAgICAgICB0aGlzLmNob3NlblJhaWxDbGFzcyA9IFJhaWxDbGFzcy5GaXJzdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQW55JzpcclxuICAgICAgICB0aGlzLmNob3NlblJhaWxDbGFzcyA9IFJhaWxDbGFzcy5BbGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1N0YW5kYXJkJzpcclxuICAgICAgICB0aGlzLmNob3NlblJhaWxDbGFzcyA9IFJhaWxDbGFzcy5TdGFuZGFyZDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyXHJcbiAgICAgIC5mZXRjaExpc3QoeyBpZDogZmF2LmRlcGFydHVyZUxvY2F0aW9uSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSgoYSkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSBhO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyXHJcbiAgICAgIC5mZXRjaExpc3QoeyBpZDogZmF2LmFycml2YWxMb2NhdGlvbklkIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoKGEpID0+IHtcclxuICAgICAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IGE7XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKGZhdi52aWFMb2NhdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuZ2V0UmFpbFN0YXRpb25GZXRjaGVyXHJcbiAgICAgICAgLmZldGNoTGlzdCh7IGlkOiBmYXYudmlhTG9jYXRpb25JZCB9KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGEpID0+IHtcclxuICAgICAgICAgIHRoaXMudmlhTG9jYXRpb24gPSBhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpYSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpYUxvY2F0aW9uID0gbnVsbDtcclxuICAgICAgdGhpcy52aWEgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuXHJcbiAgfVxyXG59XHJcbiJdfQ==