@veeroute/lss-studio-angular 7.5.2472 → 7.6.2491

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 (460) hide show
  1. package/README.md +1 -1
  2. package/api/api.d.ts +4 -1
  3. package/api/experimentsServiceInterface.d.ts +1 -1
  4. package/api/explorerServiceInterface.d.ts +1 -1
  5. package/api/externalRoutingService.d.ts +106 -0
  6. package/api/externalRoutingServiceInterface.d.ts +55 -0
  7. package/api/factsServiceInterface.d.ts +1 -1
  8. package/api/hardlinksServiceInterface.d.ts +1 -1
  9. package/api/locationsServiceInterface.d.ts +1 -1
  10. package/api/ordersServiceInterface.d.ts +1 -1
  11. package/api/performersServiceInterface.d.ts +1 -1
  12. package/api/systemServiceInterface.d.ts +1 -1
  13. package/api/transportsServiceInterface.d.ts +1 -1
  14. package/api/tripsServiceInterface.d.ts +1 -1
  15. package/cfg/process_types.json +24 -0
  16. package/cfg/table_settings.json +20 -0
  17. package/esm2022/api/api.mjs +5 -2
  18. package/esm2022/api/experimentsService.mjs +2 -2
  19. package/esm2022/api/experimentsServiceInterface.mjs +1 -1
  20. package/esm2022/api/explorerService.mjs +2 -2
  21. package/esm2022/api/explorerServiceInterface.mjs +1 -1
  22. package/esm2022/api/externalRoutingService.mjs +338 -0
  23. package/esm2022/api/externalRoutingServiceInterface.mjs +2 -0
  24. package/esm2022/api/factsService.mjs +2 -2
  25. package/esm2022/api/factsServiceInterface.mjs +1 -1
  26. package/esm2022/api/hardlinksService.mjs +2 -2
  27. package/esm2022/api/hardlinksServiceInterface.mjs +1 -1
  28. package/esm2022/api/locationsService.mjs +2 -2
  29. package/esm2022/api/locationsServiceInterface.mjs +1 -1
  30. package/esm2022/api/ordersService.mjs +2 -2
  31. package/esm2022/api/ordersServiceInterface.mjs +1 -1
  32. package/esm2022/api/performersService.mjs +2 -2
  33. package/esm2022/api/performersServiceInterface.mjs +1 -1
  34. package/esm2022/api/systemService.mjs +2 -2
  35. package/esm2022/api/systemServiceInterface.mjs +1 -1
  36. package/esm2022/api/transportsService.mjs +2 -2
  37. package/esm2022/api/transportsServiceInterface.mjs +1 -1
  38. package/esm2022/api/tripsService.mjs +2 -2
  39. package/esm2022/api/tripsServiceInterface.mjs +1 -1
  40. package/esm2022/model/actualizeSettings.mjs +2 -2
  41. package/esm2022/model/assignedPerformer.mjs +1 -1
  42. package/esm2022/model/assignedTransport.mjs +1 -1
  43. package/esm2022/model/attribute.mjs +2 -2
  44. package/esm2022/model/basicProcess.mjs +2 -2
  45. package/esm2022/model/basicState.mjs +2 -2
  46. package/esm2022/model/basicTimeWindow.mjs +2 -2
  47. package/esm2022/model/basicTracksType.mjs +2 -2
  48. package/esm2022/model/box.mjs +1 -1
  49. package/esm2022/model/boxCompatibilities.mjs +2 -2
  50. package/esm2022/model/boxLimits.mjs +1 -1
  51. package/esm2022/model/break.mjs +2 -2
  52. package/esm2022/model/breakRules.mjs +1 -1
  53. package/esm2022/model/calculationHistoryElement.mjs +1 -1
  54. package/esm2022/model/calculationInfo.mjs +1 -1
  55. package/esm2022/model/calculationSettings.mjs +2 -2
  56. package/esm2022/model/calculationState.mjs +1 -1
  57. package/esm2022/model/calculationStatus.mjs +2 -2
  58. package/esm2022/model/capacity.mjs +2 -2
  59. package/esm2022/model/capacityCost.mjs +2 -2
  60. package/esm2022/model/capacityLimit.mjs +2 -2
  61. package/esm2022/model/capacityMultiplier.mjs +2 -2
  62. package/esm2022/model/capacityStatisticsLoad.mjs +2 -2
  63. package/esm2022/model/capacityStatisticsRatio.mjs +2 -2
  64. package/esm2022/model/capacityStatisticsSum.mjs +2 -2
  65. package/esm2022/model/cargo.mjs +1 -1
  66. package/esm2022/model/cargoAction.mjs +1 -1
  67. package/esm2022/model/cargoActionType.mjs +2 -2
  68. package/esm2022/model/cargoCompatibilities.mjs +1 -1
  69. package/esm2022/model/cargoRotationType.mjs +2 -2
  70. package/esm2022/model/checkResult.mjs +2 -2
  71. package/esm2022/model/compatibilityPenalty.mjs +2 -2
  72. package/esm2022/model/custom400WithErrorsAndWarnings.mjs +1 -1
  73. package/esm2022/model/demand.mjs +1 -1
  74. package/esm2022/model/demandExtraDuration.mjs +2 -2
  75. package/esm2022/model/demandType.mjs +2 -2
  76. package/esm2022/model/entityError.mjs +1 -1
  77. package/esm2022/model/entityErrorType.mjs +4 -3
  78. package/esm2022/model/entityPath.mjs +1 -1
  79. package/esm2022/model/entityType.mjs +2 -2
  80. package/esm2022/model/entityWarning.mjs +1 -1
  81. package/esm2022/model/entityWarningType.mjs +2 -2
  82. package/esm2022/model/experiment.mjs +1 -1
  83. package/esm2022/model/experimentCheck.mjs +1 -1
  84. package/esm2022/model/experimentList.mjs +1 -1
  85. package/esm2022/model/experimentNeighbors.mjs +2 -2
  86. package/esm2022/model/experimentSettings.mjs +1 -1
  87. package/esm2022/model/experimentSpecification.mjs +2 -2
  88. package/esm2022/model/experimentStatistics.mjs +1 -1
  89. package/esm2022/model/fact.mjs +1 -1
  90. package/esm2022/model/factType.mjs +2 -2
  91. package/esm2022/model/featureLifetime.mjs +1 -1
  92. package/esm2022/model/filesystem.mjs +1 -1
  93. package/esm2022/model/folderCounters.mjs +2 -2
  94. package/esm2022/model/folderSpecification.mjs +2 -2
  95. package/esm2022/model/folderType.mjs +2 -2
  96. package/esm2022/model/general402.mjs +1 -1
  97. package/esm2022/model/general403.mjs +1 -1
  98. package/esm2022/model/general404.mjs +1 -1
  99. package/esm2022/model/general404Detail.mjs +1 -1
  100. package/esm2022/model/general429.mjs +1 -1
  101. package/esm2022/model/general500.mjs +1 -1
  102. package/esm2022/model/generalStatistics.mjs +1 -1
  103. package/esm2022/model/geoSettings.mjs +2 -2
  104. package/esm2022/model/geopoint.mjs +2 -2
  105. package/esm2022/model/hardlink.mjs +1 -1
  106. package/esm2022/model/hardlinkElement.mjs +1 -1
  107. package/esm2022/model/hardlinkElementType.mjs +2 -2
  108. package/esm2022/model/importSample.mjs +2 -2
  109. package/esm2022/model/importSource.mjs +2 -2
  110. package/esm2022/model/linkedEssence.mjs +2 -2
  111. package/esm2022/model/loadStatistics.mjs +1 -1
  112. package/esm2022/model/location.mjs +1 -1
  113. package/esm2022/model/locationCargosLimit.mjs +1 -1
  114. package/esm2022/model/locationCompatibilities.mjs +2 -2
  115. package/esm2022/model/locationLimit.mjs +1 -1
  116. package/esm2022/model/locationLimitStatistics.mjs +1 -1
  117. package/esm2022/model/locationStatistics.mjs +1 -1
  118. package/esm2022/model/locationTimetableElement.mjs +1 -1
  119. package/esm2022/model/locationTransportsLimit.mjs +2 -2
  120. package/esm2022/model/measurements.mjs +1 -1
  121. package/esm2022/model/order.mjs +1 -1
  122. package/esm2022/model/orderCompatibilities.mjs +2 -2
  123. package/esm2022/model/performer.mjs +1 -1
  124. package/esm2022/model/performerCompatibilities.mjs +1 -1
  125. package/esm2022/model/performerLimits.mjs +1 -1
  126. package/esm2022/model/performerShift.mjs +1 -1
  127. package/esm2022/model/performerTariff.mjs +1 -1
  128. package/esm2022/model/performerTariffConstraint.mjs +2 -2
  129. package/esm2022/model/planSettings.mjs +1 -1
  130. package/esm2022/model/planStatistics.mjs +1 -1
  131. package/esm2022/model/possibleEvent.mjs +1 -1
  132. package/esm2022/model/quality.mjs +1 -1
  133. package/esm2022/model/replanSettings.mjs +1 -1
  134. package/esm2022/model/replanStrategy.mjs +2 -2
  135. package/esm2022/model/rest.mjs +2 -2
  136. package/esm2022/model/restRules.mjs +1 -1
  137. package/esm2022/model/routingMatrix.mjs +1 -1
  138. package/esm2022/model/routingMatrixWaypoint.mjs +1 -1
  139. package/esm2022/model/routingTransportMatrix.mjs +1 -1
  140. package/esm2022/model/schemaError.mjs +2 -2
  141. package/esm2022/model/service.mjs +2 -2
  142. package/esm2022/model/stopDemand.mjs +1 -1
  143. package/esm2022/model/stopStatistics.mjs +1 -1
  144. package/esm2022/model/tableDataStats.mjs +2 -2
  145. package/esm2022/model/tableExperimentColumnType.mjs +2 -2
  146. package/esm2022/model/tableFact.mjs +1 -1
  147. package/esm2022/model/tableFactColumnType.mjs +2 -2
  148. package/esm2022/model/tableFactFields.mjs +2 -2
  149. package/esm2022/model/tableFactFilter.mjs +1 -1
  150. package/esm2022/model/tableFactFilterList.mjs +1 -1
  151. package/esm2022/model/tableFactList.mjs +1 -1
  152. package/esm2022/model/tableFilterBoolList.mjs +2 -2
  153. package/esm2022/model/tableFilterDatetimeRange.mjs +2 -2
  154. package/esm2022/model/tableFilterDurationRange.mjs +2 -2
  155. package/esm2022/model/tableFilterEnumList.mjs +2 -2
  156. package/esm2022/model/tableFilterFloatRange.mjs +2 -2
  157. package/esm2022/model/tableFilterIntRange.mjs +2 -2
  158. package/esm2022/model/tableFilterStringList.mjs +2 -2
  159. package/esm2022/model/tableFilterStringSearch.mjs +2 -2
  160. package/esm2022/model/tableFilterType.mjs +2 -2
  161. package/esm2022/model/tableHardlink.mjs +1 -1
  162. package/esm2022/model/tableHardlinkColumnType.mjs +2 -2
  163. package/esm2022/model/tableHardlinkFields.mjs +2 -2
  164. package/esm2022/model/tableHardlinkFilter.mjs +1 -1
  165. package/esm2022/model/tableHardlinkFilterList.mjs +1 -1
  166. package/esm2022/model/tableHardlinkList.mjs +1 -1
  167. package/esm2022/model/tableListCounters.mjs +1 -1
  168. package/esm2022/model/tableListCountersDetail.mjs +2 -2
  169. package/esm2022/model/tableLocation.mjs +1 -1
  170. package/esm2022/model/tableLocationColumnType.mjs +2 -2
  171. package/esm2022/model/tableLocationFields.mjs +1 -1
  172. package/esm2022/model/tableLocationFilter.mjs +1 -1
  173. package/esm2022/model/tableLocationFilterList.mjs +1 -1
  174. package/esm2022/model/tableLocationList.mjs +1 -1
  175. package/esm2022/model/tableOrder.mjs +1 -1
  176. package/esm2022/model/tableOrderColumnType.mjs +2 -2
  177. package/esm2022/model/tableOrderFields.mjs +1 -1
  178. package/esm2022/model/tableOrderFilter.mjs +1 -1
  179. package/esm2022/model/tableOrderFilterList.mjs +1 -1
  180. package/esm2022/model/tableOrderList.mjs +1 -1
  181. package/esm2022/model/tablePerformer.mjs +1 -1
  182. package/esm2022/model/tablePerformerColumnType.mjs +4 -2
  183. package/esm2022/model/tablePerformerFields.mjs +1 -1
  184. package/esm2022/model/tablePerformerFilter.mjs +1 -1
  185. package/esm2022/model/tablePerformerFilterList.mjs +1 -1
  186. package/esm2022/model/tablePerformerList.mjs +1 -1
  187. package/esm2022/model/tableTransport.mjs +1 -1
  188. package/esm2022/model/tableTransportColumnType.mjs +4 -2
  189. package/esm2022/model/tableTransportFields.mjs +1 -1
  190. package/esm2022/model/tableTransportFilter.mjs +1 -1
  191. package/esm2022/model/tableTransportFilterList.mjs +1 -1
  192. package/esm2022/model/tableTransportList.mjs +1 -1
  193. package/esm2022/model/tableTrip.mjs +1 -1
  194. package/esm2022/model/tableTripColumnType.mjs +2 -2
  195. package/esm2022/model/tableTripFields.mjs +1 -1
  196. package/esm2022/model/tableTripFilter.mjs +1 -1
  197. package/esm2022/model/tableTripFilterList.mjs +1 -1
  198. package/esm2022/model/tableTripList.mjs +1 -1
  199. package/esm2022/model/taskStatistics.mjs +1 -1
  200. package/esm2022/model/timeWindow.mjs +2 -2
  201. package/esm2022/model/timeWindowViolationDetail.mjs +2 -2
  202. package/esm2022/model/timeWindowViolations.mjs +1 -1
  203. package/esm2022/model/tracedata.mjs +1 -1
  204. package/esm2022/model/trackpoint.mjs +2 -2
  205. package/esm2022/model/transport.mjs +1 -1
  206. package/esm2022/model/transportCapacityMultiplier.mjs +1 -1
  207. package/esm2022/model/transportCompatibilities.mjs +1 -1
  208. package/esm2022/model/transportLimits.mjs +1 -1
  209. package/esm2022/model/transportLoad.mjs +1 -1
  210. package/esm2022/model/transportShift.mjs +1 -1
  211. package/esm2022/model/transportSpeedMultiplier.mjs +1 -1
  212. package/esm2022/model/transportTariff.mjs +1 -1
  213. package/esm2022/model/transportTariffConstraint.mjs +2 -2
  214. package/esm2022/model/transportType.mjs +7 -3
  215. package/esm2022/model/trip.mjs +1 -1
  216. package/esm2022/model/tripAssumptions.mjs +1 -1
  217. package/esm2022/model/tripExpectations.mjs +1 -1
  218. package/esm2022/model/tripPenalties.mjs +1 -1
  219. package/esm2022/model/tripStartTimeStrategy.mjs +2 -2
  220. package/esm2022/model/tripState.mjs +1 -1
  221. package/esm2022/model/tripStateFlag.mjs +2 -2
  222. package/esm2022/model/tripStatistics.mjs +1 -1
  223. package/esm2022/model/tripsSettings.mjs +1 -1
  224. package/esm2022/model/universalData.mjs +1 -1
  225. package/esm2022/model/unplannedItems.mjs +2 -2
  226. package/esm2022/model/versionResult.mjs +2 -2
  227. package/esm2022/model/webFact.mjs +1 -1
  228. package/esm2022/model/webHardlink.mjs +1 -1
  229. package/esm2022/model/webLocation.mjs +1 -1
  230. package/esm2022/model/webLocationGeopoint.mjs +1 -1
  231. package/esm2022/model/webLocationGeopointList.mjs +1 -1
  232. package/esm2022/model/webOrder.mjs +1 -1
  233. package/esm2022/model/webOrderGeopoint.mjs +1 -1
  234. package/esm2022/model/webOrderGeopointList.mjs +1 -1
  235. package/esm2022/model/webPerformer.mjs +1 -1
  236. package/esm2022/model/webPerformerGeopoint.mjs +1 -1
  237. package/esm2022/model/webPerformerGeopointList.mjs +1 -1
  238. package/esm2022/model/webTransport.mjs +1 -1
  239. package/esm2022/model/webTransportGeopoint.mjs +1 -1
  240. package/esm2022/model/webTransportGeopointList.mjs +1 -1
  241. package/esm2022/model/webTrip.mjs +1 -1
  242. package/esm2022/model/webTripChart.mjs +1 -1
  243. package/esm2022/model/webTripChartDemand.mjs +1 -1
  244. package/esm2022/model/webTripChartList.mjs +1 -1
  245. package/esm2022/model/webTripTrack.mjs +1 -1
  246. package/esm2022/model/webTripTrackList.mjs +1 -1
  247. package/esm2022/model/webTripTrackListCustom.mjs +1 -1
  248. package/esm2022/model/workAndRestRules.mjs +1 -1
  249. package/fesm2022/veeroute-lss-studio-angular.mjs +428 -90
  250. package/fesm2022/veeroute-lss-studio-angular.mjs.map +1 -1
  251. package/model/actualizeSettings.d.ts +1 -1
  252. package/model/assignedPerformer.d.ts +1 -1
  253. package/model/assignedTransport.d.ts +1 -1
  254. package/model/attribute.d.ts +1 -1
  255. package/model/basicProcess.d.ts +1 -1
  256. package/model/basicState.d.ts +1 -1
  257. package/model/basicTimeWindow.d.ts +1 -1
  258. package/model/basicTracksType.d.ts +1 -1
  259. package/model/box.d.ts +1 -1
  260. package/model/boxCompatibilities.d.ts +1 -1
  261. package/model/boxLimits.d.ts +1 -1
  262. package/model/break.d.ts +1 -1
  263. package/model/breakRules.d.ts +1 -1
  264. package/model/calculationHistoryElement.d.ts +1 -1
  265. package/model/calculationInfo.d.ts +1 -1
  266. package/model/calculationSettings.d.ts +1 -1
  267. package/model/calculationState.d.ts +1 -1
  268. package/model/calculationStatus.d.ts +1 -1
  269. package/model/capacity.d.ts +1 -1
  270. package/model/capacityCost.d.ts +1 -1
  271. package/model/capacityLimit.d.ts +1 -1
  272. package/model/capacityMultiplier.d.ts +1 -1
  273. package/model/capacityStatisticsLoad.d.ts +1 -1
  274. package/model/capacityStatisticsRatio.d.ts +1 -1
  275. package/model/capacityStatisticsSum.d.ts +1 -1
  276. package/model/cargo.d.ts +1 -1
  277. package/model/cargoAction.d.ts +1 -1
  278. package/model/cargoActionType.d.ts +1 -1
  279. package/model/cargoCompatibilities.d.ts +1 -1
  280. package/model/cargoRotationType.d.ts +1 -1
  281. package/model/checkResult.d.ts +1 -1
  282. package/model/compatibilityPenalty.d.ts +1 -1
  283. package/model/custom400WithErrorsAndWarnings.d.ts +1 -1
  284. package/model/demand.d.ts +1 -1
  285. package/model/demandExtraDuration.d.ts +1 -1
  286. package/model/demandType.d.ts +1 -1
  287. package/model/entityError.d.ts +1 -1
  288. package/model/entityErrorType.d.ts +3 -2
  289. package/model/entityPath.d.ts +1 -1
  290. package/model/entityType.d.ts +1 -1
  291. package/model/entityWarning.d.ts +1 -1
  292. package/model/entityWarningType.d.ts +1 -1
  293. package/model/experiment.d.ts +1 -1
  294. package/model/experimentCheck.d.ts +1 -1
  295. package/model/experimentList.d.ts +1 -1
  296. package/model/experimentNeighbors.d.ts +1 -1
  297. package/model/experimentSettings.d.ts +1 -1
  298. package/model/experimentSpecification.d.ts +1 -1
  299. package/model/experimentStatistics.d.ts +1 -1
  300. package/model/fact.d.ts +1 -1
  301. package/model/factType.d.ts +1 -1
  302. package/model/featureLifetime.d.ts +1 -1
  303. package/model/filesystem.d.ts +1 -1
  304. package/model/folderCounters.d.ts +1 -1
  305. package/model/folderSpecification.d.ts +1 -1
  306. package/model/folderType.d.ts +1 -1
  307. package/model/general402.d.ts +1 -1
  308. package/model/general403.d.ts +1 -1
  309. package/model/general404.d.ts +1 -1
  310. package/model/general404Detail.d.ts +1 -1
  311. package/model/general429.d.ts +1 -1
  312. package/model/general500.d.ts +1 -1
  313. package/model/generalStatistics.d.ts +1 -1
  314. package/model/geoSettings.d.ts +1 -1
  315. package/model/geopoint.d.ts +1 -1
  316. package/model/hardlink.d.ts +1 -1
  317. package/model/hardlinkElement.d.ts +1 -1
  318. package/model/hardlinkElementType.d.ts +1 -1
  319. package/model/importSample.d.ts +1 -1
  320. package/model/importSource.d.ts +1 -1
  321. package/model/linkedEssence.d.ts +1 -1
  322. package/model/loadStatistics.d.ts +1 -1
  323. package/model/location.d.ts +1 -1
  324. package/model/locationCargosLimit.d.ts +1 -1
  325. package/model/locationCompatibilities.d.ts +1 -1
  326. package/model/locationLimit.d.ts +1 -1
  327. package/model/locationLimitStatistics.d.ts +1 -1
  328. package/model/locationStatistics.d.ts +1 -1
  329. package/model/locationTimetableElement.d.ts +1 -1
  330. package/model/locationTransportsLimit.d.ts +1 -1
  331. package/model/measurements.d.ts +1 -1
  332. package/model/order.d.ts +1 -1
  333. package/model/orderCompatibilities.d.ts +1 -1
  334. package/model/performer.d.ts +1 -1
  335. package/model/performerCompatibilities.d.ts +1 -1
  336. package/model/performerLimits.d.ts +1 -1
  337. package/model/performerShift.d.ts +1 -1
  338. package/model/performerTariff.d.ts +1 -1
  339. package/model/performerTariffConstraint.d.ts +1 -1
  340. package/model/planSettings.d.ts +1 -1
  341. package/model/planStatistics.d.ts +1 -1
  342. package/model/possibleEvent.d.ts +1 -1
  343. package/model/quality.d.ts +1 -1
  344. package/model/replanSettings.d.ts +1 -1
  345. package/model/replanStrategy.d.ts +1 -1
  346. package/model/rest.d.ts +1 -1
  347. package/model/restRules.d.ts +1 -1
  348. package/model/routingMatrix.d.ts +1 -1
  349. package/model/routingMatrixWaypoint.d.ts +1 -1
  350. package/model/routingTransportMatrix.d.ts +1 -1
  351. package/model/schemaError.d.ts +1 -1
  352. package/model/service.d.ts +1 -1
  353. package/model/stopDemand.d.ts +1 -1
  354. package/model/stopStatistics.d.ts +1 -1
  355. package/model/tableDataStats.d.ts +1 -1
  356. package/model/tableExperimentColumnType.d.ts +1 -1
  357. package/model/tableFact.d.ts +1 -1
  358. package/model/tableFactColumnType.d.ts +1 -1
  359. package/model/tableFactFields.d.ts +1 -1
  360. package/model/tableFactFilter.d.ts +1 -1
  361. package/model/tableFactFilterList.d.ts +1 -1
  362. package/model/tableFactList.d.ts +1 -1
  363. package/model/tableFilterBoolList.d.ts +1 -1
  364. package/model/tableFilterDatetimeRange.d.ts +1 -1
  365. package/model/tableFilterDurationRange.d.ts +1 -1
  366. package/model/tableFilterEnumList.d.ts +1 -1
  367. package/model/tableFilterFloatRange.d.ts +1 -1
  368. package/model/tableFilterIntRange.d.ts +1 -1
  369. package/model/tableFilterStringList.d.ts +1 -1
  370. package/model/tableFilterStringSearch.d.ts +1 -1
  371. package/model/tableFilterType.d.ts +1 -1
  372. package/model/tableHardlink.d.ts +1 -1
  373. package/model/tableHardlinkColumnType.d.ts +1 -1
  374. package/model/tableHardlinkFields.d.ts +1 -1
  375. package/model/tableHardlinkFilter.d.ts +1 -1
  376. package/model/tableHardlinkFilterList.d.ts +1 -1
  377. package/model/tableHardlinkList.d.ts +1 -1
  378. package/model/tableListCounters.d.ts +1 -1
  379. package/model/tableListCountersDetail.d.ts +1 -1
  380. package/model/tableLocation.d.ts +1 -1
  381. package/model/tableLocationColumnType.d.ts +1 -1
  382. package/model/tableLocationFields.d.ts +1 -1
  383. package/model/tableLocationFilter.d.ts +1 -1
  384. package/model/tableLocationFilterList.d.ts +1 -1
  385. package/model/tableLocationList.d.ts +1 -1
  386. package/model/tableOrder.d.ts +1 -1
  387. package/model/tableOrderColumnType.d.ts +1 -1
  388. package/model/tableOrderFields.d.ts +1 -1
  389. package/model/tableOrderFilter.d.ts +1 -1
  390. package/model/tableOrderFilterList.d.ts +1 -1
  391. package/model/tableOrderList.d.ts +1 -1
  392. package/model/tablePerformer.d.ts +1 -1
  393. package/model/tablePerformerColumnType.d.ts +3 -1
  394. package/model/tablePerformerFields.d.ts +9 -1
  395. package/model/tablePerformerFilter.d.ts +1 -1
  396. package/model/tablePerformerFilterList.d.ts +1 -1
  397. package/model/tablePerformerList.d.ts +1 -1
  398. package/model/tableTransport.d.ts +1 -1
  399. package/model/tableTransportColumnType.d.ts +3 -1
  400. package/model/tableTransportFields.d.ts +9 -1
  401. package/model/tableTransportFilter.d.ts +1 -1
  402. package/model/tableTransportFilterList.d.ts +1 -1
  403. package/model/tableTransportList.d.ts +1 -1
  404. package/model/tableTrip.d.ts +1 -1
  405. package/model/tableTripColumnType.d.ts +1 -1
  406. package/model/tableTripFields.d.ts +1 -1
  407. package/model/tableTripFilter.d.ts +1 -1
  408. package/model/tableTripFilterList.d.ts +1 -1
  409. package/model/tableTripList.d.ts +1 -1
  410. package/model/taskStatistics.d.ts +1 -1
  411. package/model/timeWindow.d.ts +1 -1
  412. package/model/timeWindowViolationDetail.d.ts +1 -1
  413. package/model/timeWindowViolations.d.ts +1 -1
  414. package/model/tracedata.d.ts +1 -1
  415. package/model/trackpoint.d.ts +1 -1
  416. package/model/transport.d.ts +1 -1
  417. package/model/transportCapacityMultiplier.d.ts +1 -1
  418. package/model/transportCompatibilities.d.ts +1 -1
  419. package/model/transportLimits.d.ts +1 -1
  420. package/model/transportLoad.d.ts +1 -1
  421. package/model/transportShift.d.ts +1 -1
  422. package/model/transportSpeedMultiplier.d.ts +1 -1
  423. package/model/transportTariff.d.ts +1 -1
  424. package/model/transportTariffConstraint.d.ts +1 -1
  425. package/model/transportType.d.ts +7 -3
  426. package/model/trip.d.ts +1 -1
  427. package/model/tripAssumptions.d.ts +1 -1
  428. package/model/tripExpectations.d.ts +1 -1
  429. package/model/tripPenalties.d.ts +1 -1
  430. package/model/tripStartTimeStrategy.d.ts +1 -1
  431. package/model/tripState.d.ts +1 -1
  432. package/model/tripStateFlag.d.ts +1 -1
  433. package/model/tripStatistics.d.ts +1 -1
  434. package/model/tripsSettings.d.ts +1 -1
  435. package/model/universalData.d.ts +1 -1
  436. package/model/unplannedItems.d.ts +1 -1
  437. package/model/versionResult.d.ts +1 -1
  438. package/model/webFact.d.ts +1 -1
  439. package/model/webHardlink.d.ts +1 -1
  440. package/model/webLocation.d.ts +1 -1
  441. package/model/webLocationGeopoint.d.ts +1 -1
  442. package/model/webLocationGeopointList.d.ts +1 -1
  443. package/model/webOrder.d.ts +1 -1
  444. package/model/webOrderGeopoint.d.ts +1 -1
  445. package/model/webOrderGeopointList.d.ts +1 -1
  446. package/model/webPerformer.d.ts +1 -1
  447. package/model/webPerformerGeopoint.d.ts +1 -1
  448. package/model/webPerformerGeopointList.d.ts +1 -1
  449. package/model/webTransport.d.ts +1 -1
  450. package/model/webTransportGeopoint.d.ts +1 -1
  451. package/model/webTransportGeopointList.d.ts +1 -1
  452. package/model/webTrip.d.ts +1 -1
  453. package/model/webTripChart.d.ts +1 -1
  454. package/model/webTripChartDemand.d.ts +1 -1
  455. package/model/webTripChartList.d.ts +1 -1
  456. package/model/webTripTrack.d.ts +1 -1
  457. package/model/webTripTrackList.d.ts +1 -1
  458. package/model/webTripTrackListCustom.d.ts +1 -1
  459. package/model/workAndRestRules.d.ts +1 -1
  460. package/package.json +1 -1
@@ -0,0 +1,338 @@
1
+ /**
2
+ * VRt.Studio [ST]
3
+ *
4
+ * The version of the OpenAPI document: 7.6.2491
5
+ * Contact: servicedesk@veeroute.com
6
+ *
7
+ * NOTE: This class is auto generated by OpenAPI Generator.
8
+ * Do not edit the class manually.
9
+ */
10
+ /* tslint:disable:no-unused-variable member-ordering */
11
+ import { Inject, Injectable, Optional } from '@angular/core';
12
+ import { HttpHeaders, HttpContext } from '@angular/common/http';
13
+ import { CustomHttpParameterCodec } from '../encoder';
14
+ // @ts-ignore
15
+ import { BASE_PATH } from '../variables';
16
+ import { Configuration } from '../configuration';
17
+ import * as i0 from "@angular/core";
18
+ import * as i1 from "@angular/common/http";
19
+ import * as i2 from "../configuration";
20
+ export class ExternalRoutingService {
21
+ httpClient;
22
+ basePath = 'https://api.edge7.veeroute.cloud';
23
+ defaultHeaders = new HttpHeaders();
24
+ configuration = new Configuration();
25
+ encoder;
26
+ constructor(httpClient, basePath, configuration) {
27
+ this.httpClient = httpClient;
28
+ if (configuration) {
29
+ this.configuration = configuration;
30
+ }
31
+ if (typeof this.configuration.basePath !== 'string') {
32
+ if (Array.isArray(basePath) && basePath.length > 0) {
33
+ basePath = basePath[0];
34
+ }
35
+ if (typeof basePath !== 'string') {
36
+ basePath = this.basePath;
37
+ }
38
+ this.configuration.basePath = basePath;
39
+ }
40
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
41
+ }
42
+ // @ts-ignore
43
+ addToHttpParams(httpParams, value, key) {
44
+ if (typeof value === "object" && value instanceof Date === false) {
45
+ httpParams = this.addToHttpParamsRecursive(httpParams, value);
46
+ }
47
+ else {
48
+ httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
49
+ }
50
+ return httpParams;
51
+ }
52
+ addToHttpParamsRecursive(httpParams, value, key) {
53
+ if (value == null) {
54
+ return httpParams;
55
+ }
56
+ if (typeof value === "object") {
57
+ if (Array.isArray(value)) {
58
+ value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
59
+ }
60
+ else if (value instanceof Date) {
61
+ if (key != null) {
62
+ httpParams = httpParams.append(key, value.toISOString().substring(0, 10));
63
+ }
64
+ else {
65
+ throw Error("key may not be null if value is Date");
66
+ }
67
+ }
68
+ else {
69
+ Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
70
+ }
71
+ }
72
+ else if (key != null) {
73
+ httpParams = httpParams.append(key, value);
74
+ }
75
+ else {
76
+ throw Error("key may not be null if value is not object or array");
77
+ }
78
+ return httpParams;
79
+ }
80
+ createExternalrouting(requestParameters, observe = 'body', reportProgress = false, options) {
81
+ const experimentKey = requestParameters.experimentKey;
82
+ if (experimentKey === null || experimentKey === undefined) {
83
+ throw new Error('Required parameter experimentKey was null or undefined when calling createExternalrouting.');
84
+ }
85
+ const routingTransportMatrixStudio = requestParameters.routingTransportMatrixStudio;
86
+ if (routingTransportMatrixStudio === null || routingTransportMatrixStudio === undefined) {
87
+ throw new Error('Required parameter routingTransportMatrixStudio was null or undefined when calling createExternalrouting.');
88
+ }
89
+ let localVarHeaders = this.defaultHeaders;
90
+ let localVarCredential;
91
+ // authentication (ApiKeyAuth) required
92
+ localVarCredential = this.configuration.lookupCredential('ApiKeyAuth');
93
+ if (localVarCredential) {
94
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
95
+ }
96
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
97
+ if (localVarHttpHeaderAcceptSelected === undefined) {
98
+ // to determine the Accept header
99
+ const httpHeaderAccepts = [
100
+ 'application/json'
101
+ ];
102
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
103
+ }
104
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
105
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
106
+ }
107
+ let localVarHttpContext = options && options.context;
108
+ if (localVarHttpContext === undefined) {
109
+ localVarHttpContext = new HttpContext();
110
+ }
111
+ let localVarTransferCache = options && options.transferCache;
112
+ if (localVarTransferCache === undefined) {
113
+ localVarTransferCache = true;
114
+ }
115
+ // to determine the Content-Type header
116
+ const consumes = [
117
+ 'application/json'
118
+ ];
119
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
120
+ if (httpContentTypeSelected !== undefined) {
121
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
122
+ }
123
+ let responseType_ = 'json';
124
+ if (localVarHttpHeaderAcceptSelected) {
125
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
126
+ responseType_ = 'text';
127
+ }
128
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
129
+ responseType_ = 'json';
130
+ }
131
+ else {
132
+ responseType_ = 'blob';
133
+ }
134
+ }
135
+ let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "experimentKey", value: experimentKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/externalrouting`;
136
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
137
+ context: localVarHttpContext,
138
+ body: routingTransportMatrixStudio,
139
+ responseType: responseType_,
140
+ withCredentials: this.configuration.withCredentials,
141
+ headers: localVarHeaders,
142
+ observe: observe,
143
+ transferCache: localVarTransferCache,
144
+ reportProgress: reportProgress
145
+ });
146
+ }
147
+ deleteExternalrouting(requestParameters, observe = 'body', reportProgress = false, options) {
148
+ const experimentKey = requestParameters.experimentKey;
149
+ if (experimentKey === null || experimentKey === undefined) {
150
+ throw new Error('Required parameter experimentKey was null or undefined when calling deleteExternalrouting.');
151
+ }
152
+ let localVarHeaders = this.defaultHeaders;
153
+ let localVarCredential;
154
+ // authentication (ApiKeyAuth) required
155
+ localVarCredential = this.configuration.lookupCredential('ApiKeyAuth');
156
+ if (localVarCredential) {
157
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
158
+ }
159
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
160
+ if (localVarHttpHeaderAcceptSelected === undefined) {
161
+ // to determine the Accept header
162
+ const httpHeaderAccepts = [
163
+ 'application/json'
164
+ ];
165
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
166
+ }
167
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
168
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
169
+ }
170
+ let localVarHttpContext = options && options.context;
171
+ if (localVarHttpContext === undefined) {
172
+ localVarHttpContext = new HttpContext();
173
+ }
174
+ let localVarTransferCache = options && options.transferCache;
175
+ if (localVarTransferCache === undefined) {
176
+ localVarTransferCache = true;
177
+ }
178
+ let responseType_ = 'json';
179
+ if (localVarHttpHeaderAcceptSelected) {
180
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
181
+ responseType_ = 'text';
182
+ }
183
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
184
+ responseType_ = 'json';
185
+ }
186
+ else {
187
+ responseType_ = 'blob';
188
+ }
189
+ }
190
+ let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "experimentKey", value: experimentKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/externalrouting`;
191
+ return this.httpClient.request('delete', `${this.configuration.basePath}${localVarPath}`, {
192
+ context: localVarHttpContext,
193
+ responseType: responseType_,
194
+ withCredentials: this.configuration.withCredentials,
195
+ headers: localVarHeaders,
196
+ observe: observe,
197
+ transferCache: localVarTransferCache,
198
+ reportProgress: reportProgress
199
+ });
200
+ }
201
+ readExternalrouting(requestParameters, observe = 'body', reportProgress = false, options) {
202
+ const experimentKey = requestParameters.experimentKey;
203
+ if (experimentKey === null || experimentKey === undefined) {
204
+ throw new Error('Required parameter experimentKey was null or undefined when calling readExternalrouting.');
205
+ }
206
+ let localVarHeaders = this.defaultHeaders;
207
+ let localVarCredential;
208
+ // authentication (ApiKeyAuth) required
209
+ localVarCredential = this.configuration.lookupCredential('ApiKeyAuth');
210
+ if (localVarCredential) {
211
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
212
+ }
213
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
214
+ if (localVarHttpHeaderAcceptSelected === undefined) {
215
+ // to determine the Accept header
216
+ const httpHeaderAccepts = [
217
+ 'application/json'
218
+ ];
219
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
220
+ }
221
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
222
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
223
+ }
224
+ let localVarHttpContext = options && options.context;
225
+ if (localVarHttpContext === undefined) {
226
+ localVarHttpContext = new HttpContext();
227
+ }
228
+ let localVarTransferCache = options && options.transferCache;
229
+ if (localVarTransferCache === undefined) {
230
+ localVarTransferCache = true;
231
+ }
232
+ let responseType_ = 'json';
233
+ if (localVarHttpHeaderAcceptSelected) {
234
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
235
+ responseType_ = 'text';
236
+ }
237
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
238
+ responseType_ = 'json';
239
+ }
240
+ else {
241
+ responseType_ = 'blob';
242
+ }
243
+ }
244
+ let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "experimentKey", value: experimentKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/externalrouting`;
245
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
246
+ context: localVarHttpContext,
247
+ responseType: responseType_,
248
+ withCredentials: this.configuration.withCredentials,
249
+ headers: localVarHeaders,
250
+ observe: observe,
251
+ transferCache: localVarTransferCache,
252
+ reportProgress: reportProgress
253
+ });
254
+ }
255
+ updateExternalrouting(requestParameters, observe = 'body', reportProgress = false, options) {
256
+ const experimentKey = requestParameters.experimentKey;
257
+ if (experimentKey === null || experimentKey === undefined) {
258
+ throw new Error('Required parameter experimentKey was null or undefined when calling updateExternalrouting.');
259
+ }
260
+ const routingTransportMatrixStudio = requestParameters.routingTransportMatrixStudio;
261
+ if (routingTransportMatrixStudio === null || routingTransportMatrixStudio === undefined) {
262
+ throw new Error('Required parameter routingTransportMatrixStudio was null or undefined when calling updateExternalrouting.');
263
+ }
264
+ let localVarHeaders = this.defaultHeaders;
265
+ let localVarCredential;
266
+ // authentication (ApiKeyAuth) required
267
+ localVarCredential = this.configuration.lookupCredential('ApiKeyAuth');
268
+ if (localVarCredential) {
269
+ localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential);
270
+ }
271
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
272
+ if (localVarHttpHeaderAcceptSelected === undefined) {
273
+ // to determine the Accept header
274
+ const httpHeaderAccepts = [
275
+ 'application/json'
276
+ ];
277
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
278
+ }
279
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
280
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
281
+ }
282
+ let localVarHttpContext = options && options.context;
283
+ if (localVarHttpContext === undefined) {
284
+ localVarHttpContext = new HttpContext();
285
+ }
286
+ let localVarTransferCache = options && options.transferCache;
287
+ if (localVarTransferCache === undefined) {
288
+ localVarTransferCache = true;
289
+ }
290
+ // to determine the Content-Type header
291
+ const consumes = [
292
+ 'application/json'
293
+ ];
294
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
295
+ if (httpContentTypeSelected !== undefined) {
296
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
297
+ }
298
+ let responseType_ = 'json';
299
+ if (localVarHttpHeaderAcceptSelected) {
300
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
301
+ responseType_ = 'text';
302
+ }
303
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
304
+ responseType_ = 'json';
305
+ }
306
+ else {
307
+ responseType_ = 'blob';
308
+ }
309
+ }
310
+ let localVarPath = `/studio/experiments/${this.configuration.encodeParam({ name: "experimentKey", value: experimentKey, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/externalrouting`;
311
+ return this.httpClient.request('put', `${this.configuration.basePath}${localVarPath}`, {
312
+ context: localVarHttpContext,
313
+ body: routingTransportMatrixStudio,
314
+ responseType: responseType_,
315
+ withCredentials: this.configuration.withCredentials,
316
+ headers: localVarHeaders,
317
+ observe: observe,
318
+ transferCache: localVarTransferCache,
319
+ reportProgress: reportProgress
320
+ });
321
+ }
322
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ExternalRoutingService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
323
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ExternalRoutingService, providedIn: 'root' });
324
+ }
325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ExternalRoutingService, decorators: [{
326
+ type: Injectable,
327
+ args: [{
328
+ providedIn: 'root'
329
+ }]
330
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
331
+ type: Optional
332
+ }, {
333
+ type: Inject,
334
+ args: [BASE_PATH]
335
+ }] }, { type: i2.Configuration, decorators: [{
336
+ type: Optional
337
+ }] }] });
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWxSb3V0aW5nU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9leHRlcm5hbFJvdXRpbmdTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFjLFdBQVcsRUFDc0IsV0FBVyxFQUN4RCxNQUFZLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUErQixZQUFZLENBQUM7QUFrQi9FLGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQWNyRixNQUFNLE9BQU8sc0JBQXNCO0lBT1Q7SUFMWixRQUFRLEdBQUcsa0NBQWtDLENBQUM7SUFDakQsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUFzQixVQUFzQixFQUFnQyxRQUF5QixFQUFjLGFBQTRCO1FBQXpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lB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RSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLDRCQUE0QjtZQUNsQyxZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQzt3R0EzWFEsc0JBQXNCLDRDQU9rQyxTQUFTOzRHQVBqRSxzQkFBc0IsY0FGckIsTUFBTTs7NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWtELFFBQVE7OzBCQUFHLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZSdC5TdHVkaW8gW1NUXVxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiA3LjYuMjQ5MVxuICogQ29udGFjdDogc2VydmljZWRlc2tAdmVlcm91dGUuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvci5cbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyxcbiAgICAgICAgIEh0dHBSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBDb250ZXh0IFxuICAgICAgICB9ICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQ3VzdG9tNDAwV2l0aEVycm9yc0FuZFdhcm5pbmdzU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvY3VzdG9tNDAwV2l0aEVycm9yc0FuZFdhcm5pbmdzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEdlbmVyYWw0MDJTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9nZW5lcmFsNDAyJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEdlbmVyYWw0MDNTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9nZW5lcmFsNDAzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEdlbmVyYWw0MDRTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9nZW5lcmFsNDA0Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEdlbmVyYWw0MjlTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9nZW5lcmFsNDI5Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEdlbmVyYWw1MDBTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9nZW5lcmFsNTAwJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9yb3V0aW5nVHJhbnNwb3J0TWF0cml4JztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1xuICAgIEV4dGVybmFsUm91dGluZ1NlcnZpY2VJbnRlcmZhY2UsXG4gICAgQ3JlYXRlRXh0ZXJuYWxyb3V0aW5nUmVxdWVzdFBhcmFtcyxcbiAgICBEZWxldGVFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLFxuICAgIFJlYWRFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLFxuICAgIFVwZGF0ZUV4dGVybmFscm91dGluZ1JlcXVlc3RQYXJhbXNcbn0gZnJvbSAnLi9leHRlcm5hbFJvdXRpbmdTZXJ2aWNlSW50ZXJmYWNlJztcblxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEV4dGVybmFsUm91dGluZ1NlcnZpY2UgaW1wbGVtZW50cyBFeHRlcm5hbFJvdXRpbmdTZXJ2aWNlSW50ZXJmYWNlIHtcblxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICdodHRwczovL2FwaS5lZGdlNy52ZWVyb3V0ZS5jbG91ZCc7XG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIHB1YmxpYyBlbmNvZGVyOiBIdHRwUGFyYW1ldGVyQ29kZWM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJhc2VQYXRoKSAmJiBiYXNlUGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSBiYXNlUGF0aFswXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gICAgfVxuXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXMoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU6IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZT86IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaCggZWxlbSA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBEYXRlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goIGsgPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zLCB2YWx1ZVtrXSwga2V5ICE9IG51bGwgPyBgJHtrZXl9LiR7a31gIDogaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgbm90IG9iamVjdCBvciBhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgZXh0ZXJuYWxyb3V0aW5nXG4gICAgICogQ3JlYXRlIG5ldyBleHRlcm5hbCByb3V0aW5nLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVFeHRlcm5hbHJvdXRpbmcocmVxdWVzdFBhcmFtZXRlcnM6IENyZWF0ZUV4dGVybmFscm91dGluZ1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PjtcbiAgICBwdWJsaWMgY3JlYXRlRXh0ZXJuYWxyb3V0aW5nKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj47XG4gICAgcHVibGljIGNyZWF0ZUV4dGVybmFscm91dGluZyhyZXF1ZXN0UGFyYW1ldGVyczogQ3JlYXRlRXh0ZXJuYWxyb3V0aW5nUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PjtcbiAgICBwdWJsaWMgY3JlYXRlRXh0ZXJuYWxyb3V0aW5nKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBleHBlcmltZW50S2V5ID0gcmVxdWVzdFBhcmFtZXRlcnMuZXhwZXJpbWVudEtleTtcbiAgICAgICAgaWYgKGV4cGVyaW1lbnRLZXkgPT09IG51bGwgfHwgZXhwZXJpbWVudEtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBleHBlcmltZW50S2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgY3JlYXRlRXh0ZXJuYWxyb3V0aW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW8gPSByZXF1ZXN0UGFyYW1ldGVycy5yb3V0aW5nVHJhbnNwb3J0TWF0cml4U3R1ZGlvO1xuICAgICAgICBpZiAocm91dGluZ1RyYW5zcG9ydE1hdHJpeFN0dWRpbyA9PT0gbnVsbCB8fCByb3V0aW5nVHJhbnNwb3J0TWF0cml4U3R1ZGlvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW8gd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVFeHRlcm5hbHJvdXRpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChBcGlLZXlBdXRoKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnQXBpS2V5QXV0aCcpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvc3R1ZGlvL2V4cGVyaW1lbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImV4cGVyaW1lbnRLZXlcIiwgdmFsdWU6IGV4cGVyaW1lbnRLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vZXh0ZXJuYWxyb3V0aW5nYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PGFueT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IHJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW8sXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGluZyBleHRlcm5hbHJvdXRpbmdcbiAgICAgKiBSZW1vdmluZyBleHRlcm5hbHJvdXRpbmcuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUV4dGVybmFscm91dGluZyhyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlRXh0ZXJuYWxyb3V0aW5nUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHB1YmxpYyBkZWxldGVFeHRlcm5hbHJvdXRpbmcocmVxdWVzdFBhcmFtZXRlcnM6IERlbGV0ZUV4dGVybmFscm91dGluZ1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PjtcbiAgICBwdWJsaWMgZGVsZXRlRXh0ZXJuYWxyb3V0aW5nKHJlcXVlc3RQYXJhbWV0ZXJzOiBEZWxldGVFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+O1xuICAgIHB1YmxpYyBkZWxldGVFeHRlcm5hbHJvdXRpbmcocmVxdWVzdFBhcmFtZXRlcnM6IERlbGV0ZUV4dGVybmFscm91dGluZ1JlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IGV4cGVyaW1lbnRLZXkgPSByZXF1ZXN0UGFyYW1ldGVycy5leHBlcmltZW50S2V5O1xuICAgICAgICBpZiAoZXhwZXJpbWVudEtleSA9PT0gbnVsbCB8fCBleHBlcmltZW50S2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGV4cGVyaW1lbnRLZXkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVFeHRlcm5hbHJvdXRpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChBcGlLZXlBdXRoKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnQXBpS2V5QXV0aCcpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9zdHVkaW8vZXhwZXJpbWVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiZXhwZXJpbWVudEtleVwiLCB2YWx1ZTogZXhwZXJpbWVudEtleSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiBcInV1aWRcIn0pfS9leHRlcm5hbHJvdXRpbmdgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8YW55PignZGVsZXRlJywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWQgZXh0ZXJuYWxyb3V0aW5nXG4gICAgICogR2V0dGluZyBleHRlcm5hbHJvdXRpbmcgaW5mb3JtYXRpb24uXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRFeHRlcm5hbHJvdXRpbmcocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPFNldDxSb3V0aW5nVHJhbnNwb3J0TWF0cml4U3R1ZGlvPj47XG4gICAgcHVibGljIHJlYWRFeHRlcm5hbHJvdXRpbmcocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8U2V0PFJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW8+Pj47XG4gICAgcHVibGljIHJlYWRFeHRlcm5hbHJvdXRpbmcocmVxdWVzdFBhcmFtZXRlcnM6IFJlYWRFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFNldDxSb3V0aW5nVHJhbnNwb3J0TWF0cml4U3R1ZGlvPj4+O1xuICAgIHB1YmxpYyByZWFkRXh0ZXJuYWxyb3V0aW5nKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWFkRXh0ZXJuYWxyb3V0aW5nUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZXhwZXJpbWVudEtleSA9IHJlcXVlc3RQYXJhbWV0ZXJzLmV4cGVyaW1lbnRLZXk7XG4gICAgICAgIGlmIChleHBlcmltZW50S2V5ID09PSBudWxsIHx8IGV4cGVyaW1lbnRLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgZXhwZXJpbWVudEtleSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHJlYWRFeHRlcm5hbHJvdXRpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChBcGlLZXlBdXRoKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnQXBpS2V5QXV0aCcpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9zdHVkaW8vZXhwZXJpbWVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiZXhwZXJpbWVudEtleVwiLCB2YWx1ZTogZXhwZXJpbWVudEtleSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiBcInV1aWRcIn0pfS9leHRlcm5hbHJvdXRpbmdgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8U2V0PFJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW8+PignZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBleHRlcm5hbHJvdXRpbmdcbiAgICAgKiBVcGRhdGluZyB0aGUgZXh0ZXJuYWxyb3V0aW5nLlxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVFeHRlcm5hbHJvdXRpbmcocmVxdWVzdFBhcmFtZXRlcnM6IFVwZGF0ZUV4dGVybmFscm91dGluZ1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8YW55PjtcbiAgICBwdWJsaWMgdXBkYXRlRXh0ZXJuYWxyb3V0aW5nKHJlcXVlc3RQYXJhbWV0ZXJzOiBVcGRhdGVFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj47XG4gICAgcHVibGljIHVwZGF0ZUV4dGVybmFscm91dGluZyhyZXF1ZXN0UGFyYW1ldGVyczogVXBkYXRlRXh0ZXJuYWxyb3V0aW5nUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PjtcbiAgICBwdWJsaWMgdXBkYXRlRXh0ZXJuYWxyb3V0aW5nKHJlcXVlc3RQYXJhbWV0ZXJzOiBVcGRhdGVFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBleHBlcmltZW50S2V5ID0gcmVxdWVzdFBhcmFtZXRlcnMuZXhwZXJpbWVudEtleTtcbiAgICAgICAgaWYgKGV4cGVyaW1lbnRLZXkgPT09IG51bGwgfHwgZXhwZXJpbWVudEtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBleHBlcmltZW50S2V5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdXBkYXRlRXh0ZXJuYWxyb3V0aW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW8gPSByZXF1ZXN0UGFyYW1ldGVycy5yb3V0aW5nVHJhbnNwb3J0TWF0cml4U3R1ZGlvO1xuICAgICAgICBpZiAocm91dGluZ1RyYW5zcG9ydE1hdHJpeFN0dWRpbyA9PT0gbnVsbCB8fCByb3V0aW5nVHJhbnNwb3J0TWF0cml4U3R1ZGlvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW8gd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB1cGRhdGVFeHRlcm5hbHJvdXRpbmcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChBcGlLZXlBdXRoKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnQXBpS2V5QXV0aCcpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnICsgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgICAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvc3R1ZGlvL2V4cGVyaW1lbnRzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImV4cGVyaW1lbnRLZXlcIiwgdmFsdWU6IGV4cGVyaW1lbnRLZXksIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vZXh0ZXJuYWxyb3V0aW5nYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PGFueT4oJ3B1dCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogcm91dGluZ1RyYW5zcG9ydE1hdHJpeFN0dWRpbyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWxSb3V0aW5nU2VydmljZUludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9leHRlcm5hbFJvdXRpbmdTZXJ2aWNlSW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZSdC5TdHVkaW8gW1NUXVxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiA3LjYuMjQ5MVxuICogQ29udGFjdDogc2VydmljZWRlc2tAdmVlcm91dGUuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvci5cbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDdXN0b200MDBXaXRoRXJyb3JzQW5kV2FybmluZ3NTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgR2VuZXJhbDQwMlN0dWRpbyB9IGZyb20gJy4uL21vZGVsL21vZGVscyc7XG5pbXBvcnQgeyBHZW5lcmFsNDAzU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IEdlbmVyYWw0MDRTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgR2VuZXJhbDQyOVN0dWRpbyB9IGZyb20gJy4uL21vZGVsL21vZGVscyc7XG5pbXBvcnQgeyBHZW5lcmFsNTAwU3R1ZGlvIH0gZnJvbSAnLi4vbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IFJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW8gfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnO1xuXG5cbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUV4dGVybmFscm91dGluZ1JlcXVlc3RQYXJhbXMge1xuICAgIGV4cGVyaW1lbnRLZXk6IHN0cmluZztcbiAgICByb3V0aW5nVHJhbnNwb3J0TWF0cml4U3R1ZGlvOiBTZXQ8Um91dGluZ1RyYW5zcG9ydE1hdHJpeFN0dWRpbz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlRXh0ZXJuYWxyb3V0aW5nUmVxdWVzdFBhcmFtcyB7XG4gICAgZXhwZXJpbWVudEtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zIHtcbiAgICBleHBlcmltZW50S2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRXh0ZXJuYWxyb3V0aW5nUmVxdWVzdFBhcmFtcyB7XG4gICAgZXhwZXJpbWVudEtleTogc3RyaW5nO1xuICAgIHJvdXRpbmdUcmFuc3BvcnRNYXRyaXhTdHVkaW86IFNldDxSb3V0aW5nVHJhbnNwb3J0TWF0cml4U3R1ZGlvPjtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVybmFsUm91dGluZ1NlcnZpY2VJbnRlcmZhY2Uge1xuICAgIGRlZmF1bHRIZWFkZXJzOiBIdHRwSGVhZGVycztcbiAgICBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGV4dGVybmFscm91dGluZ1xuICAgICAqIENyZWF0ZSBuZXcgZXh0ZXJuYWwgcm91dGluZy5cbiogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICovXG4gICAgY3JlYXRlRXh0ZXJuYWxyb3V0aW5nKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTx7fT47XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGluZyBleHRlcm5hbHJvdXRpbmdcbiAgICAgKiBSZW1vdmluZyBleHRlcm5hbHJvdXRpbmcuXG4qIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqL1xuICAgIGRlbGV0ZUV4dGVybmFscm91dGluZyhyZXF1ZXN0UGFyYW1ldGVyczogRGVsZXRlRXh0ZXJuYWxyb3V0aW5nUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8e30+O1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBleHRlcm5hbHJvdXRpbmdcbiAgICAgKiBHZXR0aW5nIGV4dGVybmFscm91dGluZyBpbmZvcm1hdGlvbi5cbiogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICovXG4gICAgcmVhZEV4dGVybmFscm91dGluZyhyZXF1ZXN0UGFyYW1ldGVyczogUmVhZEV4dGVybmFscm91dGluZ1JlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPFNldDxSb3V0aW5nVHJhbnNwb3J0TWF0cml4U3R1ZGlvPj47XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgZXh0ZXJuYWxyb3V0aW5nXG4gICAgICogVXBkYXRpbmcgdGhlIGV4dGVybmFscm91dGluZy5cbiogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICovXG4gICAgdXBkYXRlRXh0ZXJuYWxyb3V0aW5nKHJlcXVlc3RQYXJhbWV0ZXJzOiBVcGRhdGVFeHRlcm5hbHJvdXRpbmdSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTx7fT47XG5cbn1cbiJdfQ==