@decaf-ts/for-fabric 0.13.30 → 0.13.31-experimental.0

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 (563) hide show
  1. package/dist/for-fabric.cjs +3999 -2
  2. package/dist/for-fabric.js +4109 -2
  3. package/lib/cjs/bin/cli.cjs +2 -2
  4. package/lib/cjs/cli-module.cjs +2 -2
  5. package/lib/cjs/cli-utils.cjs +2 -2
  6. package/lib/cjs/client/FabricClientAdapter.cjs +2 -2
  7. package/lib/cjs/client/FabricClientContext.cjs +2 -2
  8. package/lib/cjs/client/FabricClientDispatch.cjs +2 -2
  9. package/lib/cjs/client/FabricClientPaginator.cjs +2 -2
  10. package/lib/cjs/client/FabricClientRepository.cjs +2 -2
  11. package/lib/cjs/client/FabricClientStatement.cjs +2 -2
  12. package/lib/cjs/client/collections/generation.cjs +2 -2
  13. package/lib/cjs/client/collections/index.cjs +2 -2
  14. package/lib/cjs/client/constants.cjs +2 -2
  15. package/lib/cjs/client/crypto.cjs +2 -2
  16. package/lib/cjs/client/erc20/FabricERC20ClientRepository.cjs +2 -2
  17. package/lib/cjs/client/erc20/index.cjs +2 -2
  18. package/lib/cjs/client/fabric-fs.cjs +8 -7
  19. package/lib/cjs/client/fabric-hsm.cjs +2 -2
  20. package/lib/cjs/client/ids/id-extraction.cjs +2 -2
  21. package/lib/cjs/client/ids/index.cjs +2 -2
  22. package/lib/cjs/client/index.cjs +2 -2
  23. package/lib/cjs/client/indexes/generation.cjs +2 -2
  24. package/lib/cjs/client/indexes/index.cjs +2 -2
  25. package/lib/cjs/client/logging.cjs +2 -2
  26. package/lib/cjs/client/services/FabricEnrollmentService.cjs +2 -2
  27. package/lib/cjs/client/services/FabricIdentityService.cjs +2 -2
  28. package/lib/cjs/client/services/RegistrationRequestBuilder.cjs +2 -2
  29. package/lib/cjs/client/services/constants.cjs +2 -2
  30. package/lib/cjs/client/services/index.cjs +2 -2
  31. package/lib/cjs/client/types.cjs +2 -2
  32. package/lib/cjs/client/utils.cjs +2 -2
  33. package/lib/cjs/contract/Address.cjs +2 -2
  34. package/lib/cjs/contract/AddressContract.cjs +2 -2
  35. package/lib/cjs/contract/AuditContract.cjs +2 -2
  36. package/lib/cjs/contract/BatchContract.cjs +2 -2
  37. package/lib/cjs/contract/MarketContract.cjs +2 -2
  38. package/lib/cjs/contract/OtherAuditContract.cjs +2 -2
  39. package/lib/cjs/contract/OtherBatchContract.cjs +2 -2
  40. package/lib/cjs/contract/OtherLeafletContract.cjs +2 -2
  41. package/lib/cjs/contract/OtherLeafletFileContract.cjs +2 -2
  42. package/lib/cjs/contract/OtherMarketContract.cjs +2 -2
  43. package/lib/cjs/contract/OtherProductContract.cjs +2 -2
  44. package/lib/cjs/contract/OtherProductImageContract.cjs +2 -2
  45. package/lib/cjs/contract/OtherProductSharedContract.cjs +2 -2
  46. package/lib/cjs/contract/OtherProductStrengthContract.cjs +2 -2
  47. package/lib/cjs/contract/Product.cjs +2 -2
  48. package/lib/cjs/contract/ProductContract.cjs +2 -2
  49. package/lib/cjs/contract/ProductStrengthContract.cjs +2 -2
  50. package/lib/cjs/contract/SegregatedPrivateDocumentContract.cjs +2 -2
  51. package/lib/cjs/contract/SegregatedSharedDocumentContract.cjs +2 -2
  52. package/lib/cjs/contract/User.cjs +2 -2
  53. package/lib/cjs/contract/UserContract.cjs +2 -2
  54. package/lib/cjs/contract/index.cjs +2 -2
  55. package/lib/cjs/contract/logging-context.cjs +2 -2
  56. package/lib/cjs/contract/models/Audit.cjs +2 -2
  57. package/lib/cjs/contract/models/BaseIdentifiedModel.cjs +2 -2
  58. package/lib/cjs/contract/models/BaseModel.cjs +2 -2
  59. package/lib/cjs/contract/models/Batch.cjs +2 -2
  60. package/lib/cjs/contract/models/GtinOwner.cjs +2 -2
  61. package/lib/cjs/contract/models/History.cjs +2 -2
  62. package/lib/cjs/contract/models/Leaflet.cjs +2 -2
  63. package/lib/cjs/contract/models/LeafletFile.cjs +2 -2
  64. package/lib/cjs/contract/models/Market.cjs +2 -2
  65. package/lib/cjs/contract/models/OtherAudit.cjs +2 -2
  66. package/lib/cjs/contract/models/OtherBatchShared.cjs +2 -2
  67. package/lib/cjs/contract/models/OtherLeaflet.cjs +2 -2
  68. package/lib/cjs/contract/models/OtherLeafletFile.cjs +2 -2
  69. package/lib/cjs/contract/models/OtherMarket.cjs +2 -2
  70. package/lib/cjs/contract/models/OtherProduct.cjs +2 -2
  71. package/lib/cjs/contract/models/OtherProductImage.cjs +2 -2
  72. package/lib/cjs/contract/models/OtherProductShared.cjs +2 -2
  73. package/lib/cjs/contract/models/OtherProductStrength.cjs +2 -2
  74. package/lib/cjs/contract/models/Product.cjs +2 -2
  75. package/lib/cjs/contract/models/ProductStrength.cjs +2 -2
  76. package/lib/cjs/contract/models/SegregatedDocument.cjs +2 -2
  77. package/lib/cjs/contract/models/constants.cjs +2 -2
  78. package/lib/cjs/contract/models/decorators-private.cjs +2 -2
  79. package/lib/cjs/contract/models/decorators.cjs +2 -2
  80. package/lib/cjs/contract/models/gtin.cjs +2 -2
  81. package/lib/cjs/contract/models/history-dec.cjs +2 -2
  82. package/lib/cjs/contract/trackedModels/History.cjs +2 -2
  83. package/lib/cjs/contract/trackedModels/OtherAudit.cjs +2 -2
  84. package/lib/cjs/contract/trackedModels/OtherBatchShared.cjs +2 -2
  85. package/lib/cjs/contract/trackedModels/OtherLeaflet.cjs +2 -2
  86. package/lib/cjs/contract/trackedModels/OtherLeafletFile.cjs +2 -2
  87. package/lib/cjs/contract/trackedModels/OtherMarket.cjs +2 -2
  88. package/lib/cjs/contract/trackedModels/OtherProduct.cjs +2 -2
  89. package/lib/cjs/contract/trackedModels/OtherProductImage.cjs +2 -2
  90. package/lib/cjs/contract/trackedModels/OtherProductShared.cjs +2 -2
  91. package/lib/cjs/contract/trackedModels/OtherProductStrength.cjs +2 -2
  92. package/lib/cjs/contracts/ContractAdapter.cjs +2 -2
  93. package/lib/cjs/contracts/ContractContext.cjs +2 -2
  94. package/lib/cjs/contracts/FabricContractDispatch.cjs +2 -2
  95. package/lib/cjs/contracts/FabricContractPaginator.cjs +2 -2
  96. package/lib/cjs/contracts/FabricContractRepository.cjs +2 -2
  97. package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.cjs +2 -2
  98. package/lib/cjs/contracts/FabricContractSequence.cjs +2 -2
  99. package/lib/cjs/contracts/FabricContractStatement.cjs +2 -2
  100. package/lib/cjs/contracts/MigrationContract.cjs +4 -3
  101. package/lib/cjs/contracts/PrivateSequence.cjs +2 -2
  102. package/lib/cjs/contracts/auth/decorators.cjs +2 -2
  103. package/lib/cjs/contracts/auth/index.cjs +2 -2
  104. package/lib/cjs/contracts/bootstrap.cjs +2 -2
  105. package/lib/cjs/contracts/crud/crud-contract.cjs +2 -2
  106. package/lib/cjs/contracts/crud/index.cjs +2 -2
  107. package/lib/cjs/contracts/crud/serialized-crud-contract.cjs +2 -2
  108. package/lib/cjs/contracts/erc20/erc20contract.cjs +2 -2
  109. package/lib/cjs/contracts/erc20/index.cjs +2 -2
  110. package/lib/cjs/contracts/erc20/models.cjs +2 -2
  111. package/lib/cjs/contracts/fabric-overrides.cjs +2 -2
  112. package/lib/cjs/contracts/index.cjs +2 -2
  113. package/lib/cjs/contracts/logging.cjs +2 -2
  114. package/lib/cjs/contracts/overrides.cjs +2 -2
  115. package/lib/cjs/contracts/types.cjs +2 -2
  116. package/lib/cjs/contracts/uuid.cjs +2 -2
  117. package/lib/cjs/index.cjs +2 -2
  118. package/lib/cjs/shared/ClientSerializer.cjs +2 -2
  119. package/lib/cjs/shared/DeterministicSerializer.cjs +2 -2
  120. package/lib/cjs/shared/SimpleDeterministicSerializer.cjs +2 -2
  121. package/lib/cjs/shared/constants.cjs +2 -2
  122. package/lib/cjs/shared/decorators.cjs +2 -2
  123. package/lib/cjs/shared/erc20/erc20-constants.cjs +2 -2
  124. package/lib/cjs/shared/erc20/index.cjs +2 -2
  125. package/lib/cjs/shared/errors.cjs +2 -2
  126. package/lib/cjs/shared/events.cjs +2 -2
  127. package/lib/cjs/shared/fabric-types.cjs +2 -2
  128. package/lib/cjs/shared/index.cjs +2 -2
  129. package/lib/cjs/shared/interfaces/Checkable.cjs +2 -2
  130. package/lib/cjs/shared/interfaces/index.cjs +2 -2
  131. package/lib/cjs/shared/math.cjs +2 -2
  132. package/lib/cjs/shared/model/FabricBaseModel.cjs +2 -2
  133. package/lib/cjs/shared/model/FabricIdentifiedBaseModel.cjs +2 -2
  134. package/lib/cjs/shared/model/Identity.cjs +2 -2
  135. package/lib/cjs/shared/model/IdentityCredentials.cjs +2 -2
  136. package/lib/cjs/shared/model/index.cjs +2 -2
  137. package/lib/cjs/shared/overrides/Model.cjs +2 -2
  138. package/lib/cjs/shared/overrides/index.cjs +2 -2
  139. package/lib/cjs/shared/overrides/overrides.cjs +2 -2
  140. package/lib/cjs/shared/types.cjs +2 -2
  141. package/lib/cjs/version.cjs +5 -5
  142. package/lib/esm/bin/cli.js +1 -1
  143. package/lib/esm/cli-module.js +1 -1
  144. package/lib/esm/cli-utils.js +1 -1
  145. package/lib/esm/client/FabricClientAdapter.js +1 -1
  146. package/lib/esm/client/FabricClientContext.js +1 -1
  147. package/lib/esm/client/FabricClientDispatch.js +1 -1
  148. package/lib/esm/client/FabricClientPaginator.js +1 -1
  149. package/lib/esm/client/FabricClientRepository.js +1 -1
  150. package/lib/esm/client/FabricClientStatement.js +1 -1
  151. package/lib/esm/client/collections/generation.js +1 -1
  152. package/lib/esm/client/collections/index.js +1 -1
  153. package/lib/esm/client/constants.js +1 -1
  154. package/lib/esm/client/crypto.js +1 -1
  155. package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
  156. package/lib/esm/client/erc20/index.js +1 -1
  157. package/lib/esm/client/fabric-fs.js +7 -6
  158. package/lib/esm/client/fabric-hsm.js +1 -1
  159. package/lib/esm/client/ids/id-extraction.js +1 -1
  160. package/lib/esm/client/ids/index.js +1 -1
  161. package/lib/esm/client/index.js +1 -1
  162. package/lib/esm/client/indexes/generation.js +1 -1
  163. package/lib/esm/client/indexes/index.js +1 -1
  164. package/lib/esm/client/logging.js +1 -1
  165. package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
  166. package/lib/esm/client/services/FabricIdentityService.js +1 -1
  167. package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
  168. package/lib/esm/client/services/constants.js +1 -1
  169. package/lib/esm/client/services/index.js +1 -1
  170. package/lib/esm/client/types.js +1 -1
  171. package/lib/esm/client/utils.js +1 -1
  172. package/lib/esm/contract/Address.js +1 -1
  173. package/lib/esm/contract/AddressContract.js +1 -1
  174. package/lib/esm/contract/AuditContract.js +1 -1
  175. package/lib/esm/contract/BatchContract.js +1 -1
  176. package/lib/esm/contract/MarketContract.js +1 -1
  177. package/lib/esm/contract/OtherAuditContract.js +1 -1
  178. package/lib/esm/contract/OtherBatchContract.js +1 -1
  179. package/lib/esm/contract/OtherLeafletContract.js +1 -1
  180. package/lib/esm/contract/OtherLeafletFileContract.js +1 -1
  181. package/lib/esm/contract/OtherMarketContract.js +1 -1
  182. package/lib/esm/contract/OtherProductContract.js +1 -1
  183. package/lib/esm/contract/OtherProductImageContract.js +1 -1
  184. package/lib/esm/contract/OtherProductSharedContract.js +1 -1
  185. package/lib/esm/contract/OtherProductStrengthContract.js +1 -1
  186. package/lib/esm/contract/Product.js +1 -1
  187. package/lib/esm/contract/ProductContract.js +1 -1
  188. package/lib/esm/contract/ProductStrengthContract.js +1 -1
  189. package/lib/esm/contract/SegregatedPrivateDocumentContract.js +1 -1
  190. package/lib/esm/contract/SegregatedSharedDocumentContract.js +1 -1
  191. package/lib/esm/contract/User.js +1 -1
  192. package/lib/esm/contract/UserContract.js +1 -1
  193. package/lib/esm/contract/index.js +1 -1
  194. package/lib/esm/contract/logging-context.js +1 -1
  195. package/lib/esm/contract/models/Audit.js +1 -1
  196. package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
  197. package/lib/esm/contract/models/BaseModel.js +1 -1
  198. package/lib/esm/contract/models/Batch.js +1 -1
  199. package/lib/esm/contract/models/GtinOwner.js +1 -1
  200. package/lib/esm/contract/models/History.js +1 -1
  201. package/lib/esm/contract/models/Leaflet.js +1 -1
  202. package/lib/esm/contract/models/LeafletFile.js +1 -1
  203. package/lib/esm/contract/models/Market.js +1 -1
  204. package/lib/esm/contract/models/OtherAudit.js +1 -1
  205. package/lib/esm/contract/models/OtherBatchShared.js +1 -1
  206. package/lib/esm/contract/models/OtherLeaflet.js +1 -1
  207. package/lib/esm/contract/models/OtherLeafletFile.js +1 -1
  208. package/lib/esm/contract/models/OtherMarket.js +1 -1
  209. package/lib/esm/contract/models/OtherProduct.js +1 -1
  210. package/lib/esm/contract/models/OtherProductImage.js +1 -1
  211. package/lib/esm/contract/models/OtherProductShared.js +1 -1
  212. package/lib/esm/contract/models/OtherProductStrength.js +1 -1
  213. package/lib/esm/contract/models/Product.js +1 -1
  214. package/lib/esm/contract/models/ProductStrength.js +1 -1
  215. package/lib/esm/contract/models/SegregatedDocument.js +1 -1
  216. package/lib/esm/contract/models/constants.js +1 -1
  217. package/lib/esm/contract/models/decorators-private.js +1 -1
  218. package/lib/esm/contract/models/decorators.js +1 -1
  219. package/lib/esm/contract/models/gtin.js +1 -1
  220. package/lib/esm/contract/models/history-dec.js +1 -1
  221. package/lib/esm/contract/trackedModels/History.js +1 -1
  222. package/lib/esm/contract/trackedModels/OtherAudit.js +1 -1
  223. package/lib/esm/contract/trackedModels/OtherBatchShared.js +1 -1
  224. package/lib/esm/contract/trackedModels/OtherLeaflet.js +1 -1
  225. package/lib/esm/contract/trackedModels/OtherLeafletFile.js +1 -1
  226. package/lib/esm/contract/trackedModels/OtherMarket.js +1 -1
  227. package/lib/esm/contract/trackedModels/OtherProduct.js +1 -1
  228. package/lib/esm/contract/trackedModels/OtherProductImage.js +1 -1
  229. package/lib/esm/contract/trackedModels/OtherProductShared.js +1 -1
  230. package/lib/esm/contract/trackedModels/OtherProductStrength.js +1 -1
  231. package/lib/esm/contracts/ContractAdapter.js +1 -1
  232. package/lib/esm/contracts/ContractContext.js +1 -1
  233. package/lib/esm/contracts/FabricContractDispatch.js +1 -1
  234. package/lib/esm/contracts/FabricContractPaginator.js +1 -1
  235. package/lib/esm/contracts/FabricContractRepository.js +1 -1
  236. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
  237. package/lib/esm/contracts/FabricContractSequence.js +1 -1
  238. package/lib/esm/contracts/FabricContractStatement.js +1 -1
  239. package/lib/esm/contracts/MigrationContract.js +3 -2
  240. package/lib/esm/contracts/PrivateSequence.js +1 -1
  241. package/lib/esm/contracts/auth/decorators.js +1 -1
  242. package/lib/esm/contracts/auth/index.js +1 -1
  243. package/lib/esm/contracts/bootstrap.js +1 -1
  244. package/lib/esm/contracts/crud/crud-contract.js +1 -1
  245. package/lib/esm/contracts/crud/index.js +1 -1
  246. package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
  247. package/lib/esm/contracts/erc20/erc20contract.js +1 -1
  248. package/lib/esm/contracts/erc20/index.js +1 -1
  249. package/lib/esm/contracts/erc20/models.js +1 -1
  250. package/lib/esm/contracts/fabric-overrides.js +1 -1
  251. package/lib/esm/contracts/index.js +1 -1
  252. package/lib/esm/contracts/logging.js +1 -1
  253. package/lib/esm/contracts/overrides.js +1 -1
  254. package/lib/esm/contracts/types.js +1 -1
  255. package/lib/esm/contracts/uuid.js +1 -1
  256. package/lib/esm/index.js +1 -1
  257. package/lib/esm/shared/ClientSerializer.js +1 -1
  258. package/lib/esm/shared/DeterministicSerializer.js +1 -1
  259. package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
  260. package/lib/esm/shared/constants.js +1 -1
  261. package/lib/esm/shared/decorators.js +1 -1
  262. package/lib/esm/shared/erc20/erc20-constants.js +1 -1
  263. package/lib/esm/shared/erc20/index.js +1 -1
  264. package/lib/esm/shared/errors.js +1 -1
  265. package/lib/esm/shared/events.js +1 -1
  266. package/lib/esm/shared/fabric-types.js +1 -1
  267. package/lib/esm/shared/index.js +1 -1
  268. package/lib/esm/shared/interfaces/Checkable.js +1 -1
  269. package/lib/esm/shared/interfaces/index.js +1 -1
  270. package/lib/esm/shared/math.js +1 -1
  271. package/lib/esm/shared/model/FabricBaseModel.js +1 -1
  272. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
  273. package/lib/esm/shared/model/Identity.js +1 -1
  274. package/lib/esm/shared/model/IdentityCredentials.js +1 -1
  275. package/lib/esm/shared/model/index.js +1 -1
  276. package/lib/esm/shared/overrides/Model.js +1 -1
  277. package/lib/esm/shared/overrides/index.js +1 -1
  278. package/lib/esm/shared/overrides/overrides.js +1 -1
  279. package/lib/esm/shared/types.js +1 -1
  280. package/lib/esm/version.js +4 -4
  281. package/lib/types/version.d.cts +3 -3
  282. package/lib/types/version.d.mts +3 -3
  283. package/package.json +1 -1
  284. package/dist/for-fabric.cjs.map +0 -1
  285. package/dist/for-fabric.js.map +0 -1
  286. package/lib/cjs/bin/cli.cjs.map +0 -1
  287. package/lib/cjs/cli-module.cjs.map +0 -1
  288. package/lib/cjs/cli-utils.cjs.map +0 -1
  289. package/lib/cjs/client/FabricClientAdapter.cjs.map +0 -1
  290. package/lib/cjs/client/FabricClientContext.cjs.map +0 -1
  291. package/lib/cjs/client/FabricClientDispatch.cjs.map +0 -1
  292. package/lib/cjs/client/FabricClientPaginator.cjs.map +0 -1
  293. package/lib/cjs/client/FabricClientRepository.cjs.map +0 -1
  294. package/lib/cjs/client/FabricClientStatement.cjs.map +0 -1
  295. package/lib/cjs/client/collections/generation.cjs.map +0 -1
  296. package/lib/cjs/client/collections/index.cjs.map +0 -1
  297. package/lib/cjs/client/constants.cjs.map +0 -1
  298. package/lib/cjs/client/crypto.cjs.map +0 -1
  299. package/lib/cjs/client/erc20/FabricERC20ClientRepository.cjs.map +0 -1
  300. package/lib/cjs/client/erc20/index.cjs.map +0 -1
  301. package/lib/cjs/client/fabric-fs.cjs.map +0 -1
  302. package/lib/cjs/client/fabric-hsm.cjs.map +0 -1
  303. package/lib/cjs/client/ids/id-extraction.cjs.map +0 -1
  304. package/lib/cjs/client/ids/index.cjs.map +0 -1
  305. package/lib/cjs/client/index.cjs.map +0 -1
  306. package/lib/cjs/client/indexes/generation.cjs.map +0 -1
  307. package/lib/cjs/client/indexes/index.cjs.map +0 -1
  308. package/lib/cjs/client/logging.cjs.map +0 -1
  309. package/lib/cjs/client/services/FabricEnrollmentService.cjs.map +0 -1
  310. package/lib/cjs/client/services/FabricIdentityService.cjs.map +0 -1
  311. package/lib/cjs/client/services/RegistrationRequestBuilder.cjs.map +0 -1
  312. package/lib/cjs/client/services/constants.cjs.map +0 -1
  313. package/lib/cjs/client/services/index.cjs.map +0 -1
  314. package/lib/cjs/client/types.cjs.map +0 -1
  315. package/lib/cjs/client/utils.cjs.map +0 -1
  316. package/lib/cjs/contract/Address.cjs.map +0 -1
  317. package/lib/cjs/contract/AddressContract.cjs.map +0 -1
  318. package/lib/cjs/contract/AuditContract.cjs.map +0 -1
  319. package/lib/cjs/contract/BatchContract.cjs.map +0 -1
  320. package/lib/cjs/contract/MarketContract.cjs.map +0 -1
  321. package/lib/cjs/contract/OtherAuditContract.cjs.map +0 -1
  322. package/lib/cjs/contract/OtherBatchContract.cjs.map +0 -1
  323. package/lib/cjs/contract/OtherLeafletContract.cjs.map +0 -1
  324. package/lib/cjs/contract/OtherLeafletFileContract.cjs.map +0 -1
  325. package/lib/cjs/contract/OtherMarketContract.cjs.map +0 -1
  326. package/lib/cjs/contract/OtherProductContract.cjs.map +0 -1
  327. package/lib/cjs/contract/OtherProductImageContract.cjs.map +0 -1
  328. package/lib/cjs/contract/OtherProductSharedContract.cjs.map +0 -1
  329. package/lib/cjs/contract/OtherProductStrengthContract.cjs.map +0 -1
  330. package/lib/cjs/contract/Product.cjs.map +0 -1
  331. package/lib/cjs/contract/ProductContract.cjs.map +0 -1
  332. package/lib/cjs/contract/ProductStrengthContract.cjs.map +0 -1
  333. package/lib/cjs/contract/SegregatedPrivateDocumentContract.cjs.map +0 -1
  334. package/lib/cjs/contract/SegregatedSharedDocumentContract.cjs.map +0 -1
  335. package/lib/cjs/contract/User.cjs.map +0 -1
  336. package/lib/cjs/contract/UserContract.cjs.map +0 -1
  337. package/lib/cjs/contract/index.cjs.map +0 -1
  338. package/lib/cjs/contract/logging-context.cjs.map +0 -1
  339. package/lib/cjs/contract/models/Audit.cjs.map +0 -1
  340. package/lib/cjs/contract/models/BaseIdentifiedModel.cjs.map +0 -1
  341. package/lib/cjs/contract/models/BaseModel.cjs.map +0 -1
  342. package/lib/cjs/contract/models/Batch.cjs.map +0 -1
  343. package/lib/cjs/contract/models/GtinOwner.cjs.map +0 -1
  344. package/lib/cjs/contract/models/History.cjs.map +0 -1
  345. package/lib/cjs/contract/models/Leaflet.cjs.map +0 -1
  346. package/lib/cjs/contract/models/LeafletFile.cjs.map +0 -1
  347. package/lib/cjs/contract/models/Market.cjs.map +0 -1
  348. package/lib/cjs/contract/models/OtherAudit.cjs.map +0 -1
  349. package/lib/cjs/contract/models/OtherBatchShared.cjs.map +0 -1
  350. package/lib/cjs/contract/models/OtherLeaflet.cjs.map +0 -1
  351. package/lib/cjs/contract/models/OtherLeafletFile.cjs.map +0 -1
  352. package/lib/cjs/contract/models/OtherMarket.cjs.map +0 -1
  353. package/lib/cjs/contract/models/OtherProduct.cjs.map +0 -1
  354. package/lib/cjs/contract/models/OtherProductImage.cjs.map +0 -1
  355. package/lib/cjs/contract/models/OtherProductShared.cjs.map +0 -1
  356. package/lib/cjs/contract/models/OtherProductStrength.cjs.map +0 -1
  357. package/lib/cjs/contract/models/Product.cjs.map +0 -1
  358. package/lib/cjs/contract/models/ProductStrength.cjs.map +0 -1
  359. package/lib/cjs/contract/models/SegregatedDocument.cjs.map +0 -1
  360. package/lib/cjs/contract/models/constants.cjs.map +0 -1
  361. package/lib/cjs/contract/models/decorators-private.cjs.map +0 -1
  362. package/lib/cjs/contract/models/decorators.cjs.map +0 -1
  363. package/lib/cjs/contract/models/gtin.cjs.map +0 -1
  364. package/lib/cjs/contract/models/history-dec.cjs.map +0 -1
  365. package/lib/cjs/contract/trackedModels/History.cjs.map +0 -1
  366. package/lib/cjs/contract/trackedModels/OtherAudit.cjs.map +0 -1
  367. package/lib/cjs/contract/trackedModels/OtherBatchShared.cjs.map +0 -1
  368. package/lib/cjs/contract/trackedModels/OtherLeaflet.cjs.map +0 -1
  369. package/lib/cjs/contract/trackedModels/OtherLeafletFile.cjs.map +0 -1
  370. package/lib/cjs/contract/trackedModels/OtherMarket.cjs.map +0 -1
  371. package/lib/cjs/contract/trackedModels/OtherProduct.cjs.map +0 -1
  372. package/lib/cjs/contract/trackedModels/OtherProductImage.cjs.map +0 -1
  373. package/lib/cjs/contract/trackedModels/OtherProductShared.cjs.map +0 -1
  374. package/lib/cjs/contract/trackedModels/OtherProductStrength.cjs.map +0 -1
  375. package/lib/cjs/contracts/ContractAdapter.cjs.map +0 -1
  376. package/lib/cjs/contracts/ContractContext.cjs.map +0 -1
  377. package/lib/cjs/contracts/FabricContractDispatch.cjs.map +0 -1
  378. package/lib/cjs/contracts/FabricContractPaginator.cjs.map +0 -1
  379. package/lib/cjs/contracts/FabricContractRepository.cjs.map +0 -1
  380. package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.cjs.map +0 -1
  381. package/lib/cjs/contracts/FabricContractSequence.cjs.map +0 -1
  382. package/lib/cjs/contracts/FabricContractStatement.cjs.map +0 -1
  383. package/lib/cjs/contracts/MigrationContract.cjs.map +0 -1
  384. package/lib/cjs/contracts/PrivateSequence.cjs.map +0 -1
  385. package/lib/cjs/contracts/auth/decorators.cjs.map +0 -1
  386. package/lib/cjs/contracts/auth/index.cjs.map +0 -1
  387. package/lib/cjs/contracts/bootstrap.cjs.map +0 -1
  388. package/lib/cjs/contracts/crud/crud-contract.cjs.map +0 -1
  389. package/lib/cjs/contracts/crud/index.cjs.map +0 -1
  390. package/lib/cjs/contracts/crud/serialized-crud-contract.cjs.map +0 -1
  391. package/lib/cjs/contracts/erc20/erc20contract.cjs.map +0 -1
  392. package/lib/cjs/contracts/erc20/index.cjs.map +0 -1
  393. package/lib/cjs/contracts/erc20/models.cjs.map +0 -1
  394. package/lib/cjs/contracts/fabric-overrides.cjs.map +0 -1
  395. package/lib/cjs/contracts/index.cjs.map +0 -1
  396. package/lib/cjs/contracts/logging.cjs.map +0 -1
  397. package/lib/cjs/contracts/overrides.cjs.map +0 -1
  398. package/lib/cjs/contracts/types.cjs.map +0 -1
  399. package/lib/cjs/contracts/uuid.cjs.map +0 -1
  400. package/lib/cjs/index.cjs.map +0 -1
  401. package/lib/cjs/shared/ClientSerializer.cjs.map +0 -1
  402. package/lib/cjs/shared/DeterministicSerializer.cjs.map +0 -1
  403. package/lib/cjs/shared/SimpleDeterministicSerializer.cjs.map +0 -1
  404. package/lib/cjs/shared/constants.cjs.map +0 -1
  405. package/lib/cjs/shared/decorators.cjs.map +0 -1
  406. package/lib/cjs/shared/erc20/erc20-constants.cjs.map +0 -1
  407. package/lib/cjs/shared/erc20/index.cjs.map +0 -1
  408. package/lib/cjs/shared/errors.cjs.map +0 -1
  409. package/lib/cjs/shared/events.cjs.map +0 -1
  410. package/lib/cjs/shared/fabric-types.cjs.map +0 -1
  411. package/lib/cjs/shared/index.cjs.map +0 -1
  412. package/lib/cjs/shared/interfaces/Checkable.cjs.map +0 -1
  413. package/lib/cjs/shared/interfaces/index.cjs.map +0 -1
  414. package/lib/cjs/shared/math.cjs.map +0 -1
  415. package/lib/cjs/shared/model/FabricBaseModel.cjs.map +0 -1
  416. package/lib/cjs/shared/model/FabricIdentifiedBaseModel.cjs.map +0 -1
  417. package/lib/cjs/shared/model/Identity.cjs.map +0 -1
  418. package/lib/cjs/shared/model/IdentityCredentials.cjs.map +0 -1
  419. package/lib/cjs/shared/model/index.cjs.map +0 -1
  420. package/lib/cjs/shared/overrides/Model.cjs.map +0 -1
  421. package/lib/cjs/shared/overrides/index.cjs.map +0 -1
  422. package/lib/cjs/shared/overrides/overrides.cjs.map +0 -1
  423. package/lib/cjs/shared/types.cjs.map +0 -1
  424. package/lib/cjs/version.cjs.map +0 -1
  425. package/lib/esm/bin/cli.js.map +0 -1
  426. package/lib/esm/cli-module.js.map +0 -1
  427. package/lib/esm/cli-utils.js.map +0 -1
  428. package/lib/esm/client/FabricClientAdapter.js.map +0 -1
  429. package/lib/esm/client/FabricClientContext.js.map +0 -1
  430. package/lib/esm/client/FabricClientDispatch.js.map +0 -1
  431. package/lib/esm/client/FabricClientPaginator.js.map +0 -1
  432. package/lib/esm/client/FabricClientRepository.js.map +0 -1
  433. package/lib/esm/client/FabricClientStatement.js.map +0 -1
  434. package/lib/esm/client/collections/generation.js.map +0 -1
  435. package/lib/esm/client/collections/index.js.map +0 -1
  436. package/lib/esm/client/constants.js.map +0 -1
  437. package/lib/esm/client/crypto.js.map +0 -1
  438. package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +0 -1
  439. package/lib/esm/client/erc20/index.js.map +0 -1
  440. package/lib/esm/client/fabric-fs.js.map +0 -1
  441. package/lib/esm/client/fabric-hsm.js.map +0 -1
  442. package/lib/esm/client/ids/id-extraction.js.map +0 -1
  443. package/lib/esm/client/ids/index.js.map +0 -1
  444. package/lib/esm/client/index.js.map +0 -1
  445. package/lib/esm/client/indexes/generation.js.map +0 -1
  446. package/lib/esm/client/indexes/index.js.map +0 -1
  447. package/lib/esm/client/logging.js.map +0 -1
  448. package/lib/esm/client/services/FabricEnrollmentService.js.map +0 -1
  449. package/lib/esm/client/services/FabricIdentityService.js.map +0 -1
  450. package/lib/esm/client/services/RegistrationRequestBuilder.js.map +0 -1
  451. package/lib/esm/client/services/constants.js.map +0 -1
  452. package/lib/esm/client/services/index.js.map +0 -1
  453. package/lib/esm/client/types.js.map +0 -1
  454. package/lib/esm/client/utils.js.map +0 -1
  455. package/lib/esm/contract/Address.js.map +0 -1
  456. package/lib/esm/contract/AddressContract.js.map +0 -1
  457. package/lib/esm/contract/AuditContract.js.map +0 -1
  458. package/lib/esm/contract/BatchContract.js.map +0 -1
  459. package/lib/esm/contract/MarketContract.js.map +0 -1
  460. package/lib/esm/contract/OtherAuditContract.js.map +0 -1
  461. package/lib/esm/contract/OtherBatchContract.js.map +0 -1
  462. package/lib/esm/contract/OtherLeafletContract.js.map +0 -1
  463. package/lib/esm/contract/OtherLeafletFileContract.js.map +0 -1
  464. package/lib/esm/contract/OtherMarketContract.js.map +0 -1
  465. package/lib/esm/contract/OtherProductContract.js.map +0 -1
  466. package/lib/esm/contract/OtherProductImageContract.js.map +0 -1
  467. package/lib/esm/contract/OtherProductSharedContract.js.map +0 -1
  468. package/lib/esm/contract/OtherProductStrengthContract.js.map +0 -1
  469. package/lib/esm/contract/Product.js.map +0 -1
  470. package/lib/esm/contract/ProductContract.js.map +0 -1
  471. package/lib/esm/contract/ProductStrengthContract.js.map +0 -1
  472. package/lib/esm/contract/SegregatedPrivateDocumentContract.js.map +0 -1
  473. package/lib/esm/contract/SegregatedSharedDocumentContract.js.map +0 -1
  474. package/lib/esm/contract/User.js.map +0 -1
  475. package/lib/esm/contract/UserContract.js.map +0 -1
  476. package/lib/esm/contract/index.js.map +0 -1
  477. package/lib/esm/contract/logging-context.js.map +0 -1
  478. package/lib/esm/contract/models/Audit.js.map +0 -1
  479. package/lib/esm/contract/models/BaseIdentifiedModel.js.map +0 -1
  480. package/lib/esm/contract/models/BaseModel.js.map +0 -1
  481. package/lib/esm/contract/models/Batch.js.map +0 -1
  482. package/lib/esm/contract/models/GtinOwner.js.map +0 -1
  483. package/lib/esm/contract/models/History.js.map +0 -1
  484. package/lib/esm/contract/models/Leaflet.js.map +0 -1
  485. package/lib/esm/contract/models/LeafletFile.js.map +0 -1
  486. package/lib/esm/contract/models/Market.js.map +0 -1
  487. package/lib/esm/contract/models/OtherAudit.js.map +0 -1
  488. package/lib/esm/contract/models/OtherBatchShared.js.map +0 -1
  489. package/lib/esm/contract/models/OtherLeaflet.js.map +0 -1
  490. package/lib/esm/contract/models/OtherLeafletFile.js.map +0 -1
  491. package/lib/esm/contract/models/OtherMarket.js.map +0 -1
  492. package/lib/esm/contract/models/OtherProduct.js.map +0 -1
  493. package/lib/esm/contract/models/OtherProductImage.js.map +0 -1
  494. package/lib/esm/contract/models/OtherProductShared.js.map +0 -1
  495. package/lib/esm/contract/models/OtherProductStrength.js.map +0 -1
  496. package/lib/esm/contract/models/Product.js.map +0 -1
  497. package/lib/esm/contract/models/ProductStrength.js.map +0 -1
  498. package/lib/esm/contract/models/SegregatedDocument.js.map +0 -1
  499. package/lib/esm/contract/models/constants.js.map +0 -1
  500. package/lib/esm/contract/models/decorators-private.js.map +0 -1
  501. package/lib/esm/contract/models/decorators.js.map +0 -1
  502. package/lib/esm/contract/models/gtin.js.map +0 -1
  503. package/lib/esm/contract/models/history-dec.js.map +0 -1
  504. package/lib/esm/contract/trackedModels/History.js.map +0 -1
  505. package/lib/esm/contract/trackedModels/OtherAudit.js.map +0 -1
  506. package/lib/esm/contract/trackedModels/OtherBatchShared.js.map +0 -1
  507. package/lib/esm/contract/trackedModels/OtherLeaflet.js.map +0 -1
  508. package/lib/esm/contract/trackedModels/OtherLeafletFile.js.map +0 -1
  509. package/lib/esm/contract/trackedModels/OtherMarket.js.map +0 -1
  510. package/lib/esm/contract/trackedModels/OtherProduct.js.map +0 -1
  511. package/lib/esm/contract/trackedModels/OtherProductImage.js.map +0 -1
  512. package/lib/esm/contract/trackedModels/OtherProductShared.js.map +0 -1
  513. package/lib/esm/contract/trackedModels/OtherProductStrength.js.map +0 -1
  514. package/lib/esm/contracts/ContractAdapter.js.map +0 -1
  515. package/lib/esm/contracts/ContractContext.js.map +0 -1
  516. package/lib/esm/contracts/FabricContractDispatch.js.map +0 -1
  517. package/lib/esm/contracts/FabricContractPaginator.js.map +0 -1
  518. package/lib/esm/contracts/FabricContractRepository.js.map +0 -1
  519. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +0 -1
  520. package/lib/esm/contracts/FabricContractSequence.js.map +0 -1
  521. package/lib/esm/contracts/FabricContractStatement.js.map +0 -1
  522. package/lib/esm/contracts/MigrationContract.js.map +0 -1
  523. package/lib/esm/contracts/PrivateSequence.js.map +0 -1
  524. package/lib/esm/contracts/auth/decorators.js.map +0 -1
  525. package/lib/esm/contracts/auth/index.js.map +0 -1
  526. package/lib/esm/contracts/bootstrap.js.map +0 -1
  527. package/lib/esm/contracts/crud/crud-contract.js.map +0 -1
  528. package/lib/esm/contracts/crud/index.js.map +0 -1
  529. package/lib/esm/contracts/crud/serialized-crud-contract.js.map +0 -1
  530. package/lib/esm/contracts/erc20/erc20contract.js.map +0 -1
  531. package/lib/esm/contracts/erc20/index.js.map +0 -1
  532. package/lib/esm/contracts/erc20/models.js.map +0 -1
  533. package/lib/esm/contracts/fabric-overrides.js.map +0 -1
  534. package/lib/esm/contracts/index.js.map +0 -1
  535. package/lib/esm/contracts/logging.js.map +0 -1
  536. package/lib/esm/contracts/overrides.js.map +0 -1
  537. package/lib/esm/contracts/types.js.map +0 -1
  538. package/lib/esm/contracts/uuid.js.map +0 -1
  539. package/lib/esm/index.js.map +0 -1
  540. package/lib/esm/shared/ClientSerializer.js.map +0 -1
  541. package/lib/esm/shared/DeterministicSerializer.js.map +0 -1
  542. package/lib/esm/shared/SimpleDeterministicSerializer.js.map +0 -1
  543. package/lib/esm/shared/constants.js.map +0 -1
  544. package/lib/esm/shared/decorators.js.map +0 -1
  545. package/lib/esm/shared/erc20/erc20-constants.js.map +0 -1
  546. package/lib/esm/shared/erc20/index.js.map +0 -1
  547. package/lib/esm/shared/errors.js.map +0 -1
  548. package/lib/esm/shared/events.js.map +0 -1
  549. package/lib/esm/shared/fabric-types.js.map +0 -1
  550. package/lib/esm/shared/index.js.map +0 -1
  551. package/lib/esm/shared/interfaces/Checkable.js.map +0 -1
  552. package/lib/esm/shared/interfaces/index.js.map +0 -1
  553. package/lib/esm/shared/math.js.map +0 -1
  554. package/lib/esm/shared/model/FabricBaseModel.js.map +0 -1
  555. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +0 -1
  556. package/lib/esm/shared/model/Identity.js.map +0 -1
  557. package/lib/esm/shared/model/IdentityCredentials.js.map +0 -1
  558. package/lib/esm/shared/model/index.js.map +0 -1
  559. package/lib/esm/shared/overrides/Model.js.map +0 -1
  560. package/lib/esm/shared/overrides/index.js.map +0 -1
  561. package/lib/esm/shared/overrides/overrides.js.map +0 -1
  562. package/lib/esm/shared/types.js.map +0 -1
  563. package/lib/esm/version.js.map +0 -1
@@ -94,4 +94,4 @@ OtherProductShared = __decorate([
94
94
  __metadata("design:paramtypes", [Object])
95
95
  ], OtherProductShared);
96
96
  export { OtherProductShared };
97
- //# sourceMappingURL=OtherProductShared.js.map
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3RoZXJQcm9kdWN0U2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyYWN0L3RyYWNrZWRNb2RlbHMvT3RoZXJQcm9kdWN0U2hhcmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUNMLE9BQU8sRUFDUCxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLEtBQUssRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLGNBQWMsRUFDZCxFQUFFLEVBQ0YsS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLG9GQUFvRjtBQUNwRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDJDQUFzQztBQUNwRSxPQUFPLEVBQUUsSUFBSSxFQUFFLDRCQUF1QjtBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLDBDQUFxQztBQUNyRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLFVBQVUsR0FDWCxnQ0FBMkI7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtDQUErQjtBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLHlCQUFzQjtBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0NBQTZCO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsbUNBQThCO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSwrQkFBNEI7QUFPakQsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBbUIsU0FBUSxtQkFBbUI7SUFnRnpELFlBQVksSUFBbUM7UUFDN0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBckRkLGtCQUFhLEdBQVksS0FBSyxDQUFDO0lBc0QvQixDQUFDO0NBQ0YsQ0FBQTtBQTNFQztJQVBDLEVBQUUsRUFBRTtJQUNKLElBQUksRUFBRTtJQUNOLFVBQVUsRUFBRTtJQUNaLGtCQUFrQixFQUFFO0lBQ3BCLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxzQkFBc0IsQ0FBQztJQUNuRCxLQUFLLENBQUMsa0JBQWtCLENBQUM7SUFDekIsZ0JBQWdCLEVBQUU7O3VEQUNFO0FBT3JCO0lBTEMsTUFBTSxFQUFFO0lBQ1IsUUFBUSxFQUFFO0lBQ1YsZ0JBQWdCLEVBQUU7SUFDbEIsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7d0RBQzNDO0FBTXRCO0lBSkMsTUFBTSxFQUFFO0lBQ1IsUUFBUSxFQUFFO0lBQ1YsZ0JBQWdCLEVBQUU7SUFDbEIsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7O2dFQUNsQjtBQUc5QjtJQURDLE1BQU0sRUFBRTs7Z0VBQ3FCO0FBSTlCO0lBRkMsTUFBTSxFQUFFO0lBQ1IsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7O3lEQUNqQjtBQVUvQjtJQVJDLFFBQVEsQ0FDUCxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFDdkI7UUFDRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDdkIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPO0tBQ3hCLEVBQ0QsS0FBSyxDQUNOOztxREFDc0M7QUFzQnZDO0lBREMsT0FBTyxDQUFDLElBQUksQ0FBQzs7bURBQ0c7QUFPakI7SUFMQyxTQUFTLENBQ1IsR0FBRyxFQUFFLENBQUMsb0JBQW9CLEVBQzFCLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFDcEQsSUFBSSxDQUNMOztxREFDa0M7QUFPbkM7SUFMQyxTQUFTLENBQ1IsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUNqQixFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQ3BELElBQUksQ0FDTDs7bURBQ3VCO0FBSXhCO0lBRkMsTUFBTSxFQUFFO0lBQ1IsT0FBTyxFQUFFOzttREFDTztBQTlFTixrQkFBa0I7SUFMOUIsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUNwQiwyQ0FBMkM7O0lBQzFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztJQUM3QixLQUFLLEVBQUU7O0dBQ0ssa0JBQWtCLENBbUY5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTW9kZWxBcmcgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBtb2RlbCwgcmVxdWlyZWQgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBDYXNjYWRlLFxuICBjb2x1bW4sXG4gIGRlZmF1bHRRdWVyeUF0dHIsXG4gIGluZGV4LFxuICBvbmVUb01hbnksXG4gIG9uZVRvT25lLFxuICBPcmRlckRpcmVjdGlvbixcbiAgcGssXG4gIHRhYmxlLFxuICB2ZXJzaW9uLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbi8vIGltcG9ydCB7QmxvY2tPcGVyYXRpb25zLCBPcGVyYXRpb25LZXlzLCByZWFkb25seX0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyB1c2VzIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBCYXNlSWRlbnRpZmllZE1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9CYXNlSWRlbnRpZmllZE1vZGVsXCI7XG5pbXBvcnQgeyBndGluIH0gZnJvbSBcIi4uL21vZGVscy9ndGluXCI7XG5pbXBvcnQgeyBhdWRpdCB9IGZyb20gXCIuLi9tb2RlbHMvZGVjb3JhdG9ycy1wcml2YXRlXCI7XG5pbXBvcnQge1xuICBGYWJyaWNGbGF2b3VyLFxuICBtaXJyb3IsXG4gIE5hbWVzcGFjZUNvbGxlY3Rpb24sXG4gIG93bmVkQnksXG4gIHNoYXJlZERhdGEsXG59IGZyb20gXCIuLi8uLi9zaGFyZWQvaW5kZXhcIjtcbmltcG9ydCB7IE90aGVyUHJvZHVjdFN0cmVuZ3RoIH0gZnJvbSBcIi4vT3RoZXJQcm9kdWN0U3RyZW5ndGhcIjtcbmltcG9ydCB7IE90aGVyTWFya2V0IH0gZnJvbSBcIi4vT3RoZXJNYXJrZXRcIjtcbmltcG9ydCB7IGFzc2lnblByb2R1Y3RPd25lciB9IGZyb20gXCIuLi9tb2RlbHMvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgaGlzdG9yeURlYyB9IGZyb20gXCIuLi9tb2RlbHMvaGlzdG9yeS1kZWNcIjtcbmltcG9ydCB7IE90aGVyUHJvZHVjdEltYWdlIH0gZnJvbSBcIi4vT3RoZXJQcm9kdWN0SW1hZ2VcIjtcblxuQHNoYXJlZERhdGEoTmFtZXNwYWNlQ29sbGVjdGlvbihcImRlY2FmLW5hbWVzcGFjZVwiKSlcbkB1c2VzKEZhYnJpY0ZsYXZvdXIpXG4vLyBAQmxvY2tPcGVyYXRpb25zKFtPcGVyYXRpb25LZXlzLkRFTEVURV0pXG5AdGFibGUoXCJvdGhlcl9wcm9kdWN0X3NoYXJlZFwiKVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBPdGhlclByb2R1Y3RTaGFyZWQgZXh0ZW5kcyBCYXNlSWRlbnRpZmllZE1vZGVsIHtcbiAgQHBrKClcbiAgQGd0aW4oKVxuICBAaGlzdG9yeURlYygpXG4gIEBhc3NpZ25Qcm9kdWN0T3duZXIoKVxuICBAbWlycm9yKFwibWlycm9yLWNvbGxlY3Rpb25cIiwgXCJQaGFybWFsZWRnZXJhc3NvY01TUFwiKVxuICBAYXVkaXQoT3RoZXJQcm9kdWN0U2hhcmVkKVxuICBAZGVmYXVsdFF1ZXJ5QXR0cigpXG4gIHByb2R1Y3RDb2RlITogc3RyaW5nO1xuXG4gIEBjb2x1bW4oKVxuICBAcmVxdWlyZWQoKVxuICBAZGVmYXVsdFF1ZXJ5QXR0cigpXG4gIEBpbmRleChbT3JkZXJEaXJlY3Rpb24uQVNDLCBPcmRlckRpcmVjdGlvbi5EU0NdKVxuICBAaW5kZXgoW09yZGVyRGlyZWN0aW9uLkFTQywgT3JkZXJEaXJlY3Rpb24uRFNDXSwgW1wicHJvZHVjdENvZGVcIl0pXG4gIGludmVudGVkTmFtZSE6IHN0cmluZztcblxuICBAY29sdW1uKClcbiAgQHJlcXVpcmVkKClcbiAgQGRlZmF1bHRRdWVyeUF0dHIoKVxuICBAaW5kZXgoW09yZGVyRGlyZWN0aW9uLkFTQywgT3JkZXJEaXJlY3Rpb24uRFNDXSlcbiAgbmFtZU1lZGljaW5hbFByb2R1Y3QhOiBzdHJpbmc7XG5cbiAgQGNvbHVtbigpXG4gIGludGVybmFsTWF0ZXJpYWxDb2RlPzogc3RyaW5nO1xuXG4gIEBjb2x1bW4oKVxuICBAaW5kZXgoW09yZGVyRGlyZWN0aW9uLkFTQywgT3JkZXJEaXJlY3Rpb24uRFNDXSlcbiAgcHJvZHVjdFJlY2FsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBvbmVUb09uZShcbiAgICAoKSA9PiBPdGhlclByb2R1Y3RJbWFnZSxcbiAgICB7XG4gICAgICB1cGRhdGU6IENhc2NhZGUuQ0FTQ0FERSxcbiAgICAgIGRlbGV0ZTogQ2FzY2FkZS5DQVNDQURFLFxuICAgIH0sXG4gICAgZmFsc2VcbiAgKVxuICBpbWFnZURhdGE/OiBzdHJpbmcgfCBPdGhlclByb2R1Y3RJbWFnZTtcbiAgLy9cbiAgLy8gQGNvbHVtbigpXG4gIC8vIGZsYWdFbmFibGVBZHZlcnNlRXZlbnRSZXBvcnRpbmc/OiBib29sZWFuO1xuICAvL1xuICAvLyBAY29sdW1uKClcbiAgLy8gYWR2ZXJzZUV2ZW50UmVwb3J0aW5nVVJMPzogc3RyaW5nO1xuICAvL1xuICAvLyBAY29sdW1uKClcbiAgLy8gZmxhZ0VuYWJsZUFDRlByb2R1Y3RDaGVjaz86IGJvb2xlYW47XG4gIC8vXG4gIC8vIEBjb2x1bW4oKVxuICAvLyBAdXJsKClcbiAgLy8gYWNmUHJvZHVjdENoZWNrVVJMPzogc3RyaW5nO1xuICAvL1xuICAvLyBAY29sdW1uKClcbiAgLy8gcGF0aWVudFNwZWNpZmljTGVhZmxldD86IHN0cmluZztcbiAgLy9cbiAgLy8gQGNvbHVtbigpXG4gIC8vIGhlYWx0aGNhcmVQcmFjdGl0aW9uZXJJbmZvPzogc3RyaW5nO1xuXG4gIEB2ZXJzaW9uKHRydWUpXG4gIGNvdW50ZXI/OiBudW1iZXI7XG5cbiAgQG9uZVRvTWFueShcbiAgICAoKSA9PiBPdGhlclByb2R1Y3RTdHJlbmd0aCxcbiAgICB7IHVwZGF0ZTogQ2FzY2FkZS5DQVNDQURFLCBkZWxldGU6IENhc2NhZGUuQ0FTQ0FERSB9LFxuICAgIHRydWVcbiAgKVxuICBzdHJlbmd0aHMhOiBPdGhlclByb2R1Y3RTdHJlbmd0aFtdO1xuXG4gIEBvbmVUb01hbnkoXG4gICAgKCkgPT4gT3RoZXJNYXJrZXQsXG4gICAgeyB1cGRhdGU6IENhc2NhZGUuQ0FTQ0FERSwgZGVsZXRlOiBDYXNjYWRlLkNBU0NBREUgfSxcbiAgICB0cnVlXG4gIClcbiAgbWFya2V0cyE6IE90aGVyTWFya2V0W107XG5cbiAgQGNvbHVtbigpXG4gIEBvd25lZEJ5KClcbiAgb3duZWRCeT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihhcmdzPzogTW9kZWxBcmc8T3RoZXJQcm9kdWN0U2hhcmVkPikge1xuICAgIHN1cGVyKGFyZ3MpO1xuICB9XG59XG4iXX0=
@@ -80,4 +80,4 @@ OtherProductStrength = __decorate([
80
80
  __metadata("design:paramtypes", [Object])
81
81
  ], OtherProductStrength);
82
82
  export { OtherProductStrength };
83
- //# sourceMappingURL=OtherProductStrength.js.map
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3RoZXJQcm9kdWN0U3RyZW5ndGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJhY3QvdHJhY2tlZE1vZGVscy9PdGhlclByb2R1Y3RTdHJlbmd0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFDTCxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLEtBQUssRUFDTCxjQUFjLEVBQ2QsRUFBRSxFQUNGLEtBQUssRUFDTCxJQUFJLEdBQ0wsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSwyQ0FBc0M7QUFFcEUsT0FBTyxFQUNMLGFBQWEsRUFDYixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxnQ0FBMkI7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0UsT0FBTyxFQUFFLElBQUksRUFBRSw0QkFBdUI7QUFFdEMsU0FBUyxZQUFZLENBQUMsQ0FBdUI7SUFDM0MsSUFBSSxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxRSxDQUFDO0lBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksYUFBYSxDQUFDLDBDQUEwQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7QUFDSCxDQUFDO0FBT00sSUFBTSxvQkFBb0IsR0FBMUIsTUFBTSxvQkFBcUIsU0FBUSxtQkFBbUI7SUEyQzNELFlBQVksS0FBc0M7UUFDaEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUNGLENBQUE7QUF6Q0M7SUFKQyxFQUFFLEVBQUU7SUFDSixNQUFNLENBQUMsbUJBQW1CLEVBQUUsc0JBQXNCLENBQUM7SUFDbkQsUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUN0QyxXQUFXLENBQUMsNENBQTRDLENBQUM7O2dEQUM5QztBQUtaO0lBSEMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNsQixRQUFRLEVBQUU7SUFDVixXQUFXLENBQUMsd0NBQXdDLENBQUM7O2tEQUN4QztBQVdkO0lBSkMsSUFBSSxFQUFFO0lBQ04sZ0JBQWdCLEVBQUU7SUFDbEIsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsV0FBVyxDQUFDLG1EQUFtRCxDQUFDOzt5REFDNUM7QUFRckI7SUFOQyxNQUFNLEVBQUU7SUFDUixRQUFRLEVBQUU7SUFDVixnQkFBZ0IsRUFBRTtJQUNsQixLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsQ0FBQyxxREFBcUQsQ0FBQzs7c0RBQ2pEO0FBS2xCO0lBSEMsTUFBTSxFQUFFO0lBQ1IsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsV0FBVyxDQUFDLG9EQUFvRCxDQUFDOzt1REFDL0M7QUFJbkI7SUFGQyxNQUFNLEVBQUU7SUFDUixXQUFXLENBQUMsZ0RBQWdELENBQUM7OzZEQUNyQztBQUd6QjtJQURDLE9BQU8sRUFBRTs7cURBQ087QUF6Q04sb0JBQW9CO0lBTGhDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELElBQUksQ0FBQyxhQUFhLENBQUM7SUFDbkIsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0lBQy9CLEtBQUssRUFBRTtJQUNQLFdBQVcsQ0FBQyw0REFBNEQsQ0FBQzs7R0FDN0Qsb0JBQW9CLENBOENoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTW9kZWxBcmcgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBtb2RlbCwgcmVxdWlyZWQgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBjb2x1bW4sXG4gIGRlZmF1bHRRdWVyeUF0dHIsXG4gIGluZGV4LFxuICBPcmRlckRpcmVjdGlvbixcbiAgcGssXG4gIHRhYmxlLFxuICB1dWlkLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IGRlc2NyaXB0aW9uLCB1c2VzIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBCYXNlSWRlbnRpZmllZE1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9CYXNlSWRlbnRpZmllZE1vZGVsXCI7XG5cbmltcG9ydCB7XG4gIEZhYnJpY0ZsYXZvdXIsXG4gIG1pcnJvcixcbiAgTmFtZXNwYWNlQ29sbGVjdGlvbixcbiAgc2hhcmVkRGF0YSxcbn0gZnJvbSBcIi4uLy4uL3NoYXJlZC9pbmRleFwiO1xuaW1wb3J0IHsgY29tcG9zZWQsIEludGVybmFsRXJyb3IsIHZlcnNpb24gfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IGd0aW4gfSBmcm9tIFwiLi4vbW9kZWxzL2d0aW5cIjtcblxuZnVuY3Rpb24gc3RyZW5ndGhTZWVkKG06IE90aGVyUHJvZHVjdFN0cmVuZ3RoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGAke20ucHJvZHVjdENvZGV9JHttLnN0cmVuZ3RofSR7bS5zdWJzdGFuY2UgPyBtLnN1YnN0YW5jZSA6IFwiXCJ9YDtcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgZGV0ZXJtaW5pc3RpYyB1dWlkOiAke2V9YCk7XG4gIH1cbn1cblxuQHNoYXJlZERhdGEoTmFtZXNwYWNlQ29sbGVjdGlvbihcImRlY2FmLW5hbWVzcGFjZVwiKSlcbkB1c2VzKEZhYnJpY0ZsYXZvdXIpXG5AdGFibGUoXCJvdGhlcl9wcm9kdWN0X3N0cmVuZ3RoXCIpXG5AbW9kZWwoKVxuQGRlc2NyaXB0aW9uKFwiUmVwcmVzZW50cyB0aGUgcHJvZHVjdOKAmXMgc3RyZW5ndGggYW5kIGNvbXBvc2l0aW9uIGRldGFpbHMuXCIpXG5leHBvcnQgY2xhc3MgT3RoZXJQcm9kdWN0U3RyZW5ndGggZXh0ZW5kcyBCYXNlSWRlbnRpZmllZE1vZGVsIHtcbiAgQHBrKClcbiAgQG1pcnJvcihcIm1pcnJvci1jb2xsZWN0aW9uXCIsIFwiUGhhcm1hbGVkZ2VyYXNzb2NNU1BcIilcbiAgQGNvbXBvc2VkKFtcInByb2R1Y3RDb2RlXCIsIFwidXVpZFwiXSwgXCI6XCIpXG4gIEBkZXNjcmlwdGlvbihcIlVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBwcm9kdWN0IHN0cmVuZ3RoLlwiKVxuICBpZCE6IHN0cmluZztcblxuICBAdXVpZChzdHJlbmd0aFNlZWQpXG4gIEByZXF1aXJlZCgpXG4gIEBkZXNjcmlwdGlvbihcIlVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBhdWRpdCByZWNvcmQuXCIpXG4gIHV1aWQhOiBzdHJpbmc7XG5cbiAgLy8gQG1hbnlUb09uZShcbiAgLy8gICAoKSA9PiBQcm9kdWN0LFxuICAvLyAgIHsgdXBkYXRlOiBDYXNjYWRlLk5PTkUsIGRlbGV0ZTogQ2FzY2FkZS5OT05FIH0sXG4gIC8vICAgZmFsc2VcbiAgLy8gKVxuICBAZ3RpbigpXG4gIEBkZWZhdWx0UXVlcnlBdHRyKClcbiAgQGluZGV4KFtPcmRlckRpcmVjdGlvbi5BU0MsIE9yZGVyRGlyZWN0aW9uLkRTQ10pXG4gIEBkZXNjcmlwdGlvbihcIlByb2R1Y3QgY29kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdHJlbmd0aCBlbnRyeS5cIilcbiAgcHJvZHVjdENvZGUhOiBzdHJpbmc7XG5cbiAgQGNvbHVtbigpXG4gIEByZXF1aXJlZCgpXG4gIEBkZWZhdWx0UXVlcnlBdHRyKClcbiAgQGluZGV4KFtPcmRlckRpcmVjdGlvbi5BU0MsIE9yZGVyRGlyZWN0aW9uLkRTQ10pXG4gIEBpbmRleChbT3JkZXJEaXJlY3Rpb24uQVNDLCBPcmRlckRpcmVjdGlvbi5EU0NdLCBbXCJpZFwiXSlcbiAgQGRlc2NyaXB0aW9uKFwiUHJvZHVjdCBjb25jZW50cmF0aW9uIG9yIGRvc2FnZSAoZS5nLiwgNTAwbWcsIDEwJSkuXCIpXG4gIHN0cmVuZ3RoITogc3RyaW5nO1xuXG4gIEBjb2x1bW4oKVxuICBAaW5kZXgoW09yZGVyRGlyZWN0aW9uLkFTQywgT3JkZXJEaXJlY3Rpb24uRFNDXSlcbiAgQGRlc2NyaXB0aW9uKFwiQWN0aXZlIHN1YnN0YW5jZSByZWxhdGVkIHRvIHRoaXMgcHJvZHVjdCBzdHJlbmd0aC5cIilcbiAgc3Vic3RhbmNlPzogc3RyaW5nO1xuXG4gIEBjb2x1bW4oKVxuICBAZGVzY3JpcHRpb24oXCJMZWdhbCBlbnRpdHkgbmFtZSByZXNwb25zaWJsZSBmb3IgdGhlIHByb2R1Y3QuXCIpXG4gIGxlZ2FsRW50aXR5TmFtZT86IHN0cmluZztcblxuICBAdmVyc2lvbigpXG4gIGNvdW50ZXI/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IobW9kZWw/OiBNb2RlbEFyZzxPdGhlclByb2R1Y3RTdHJlbmd0aD4pIHtcbiAgICBzdXBlcihtb2RlbCk7XG4gIH1cbn1cbiJdfQ==
@@ -1645,4 +1645,4 @@ export class FabricContractAdapter extends CouchDBAdapter {
1645
1645
  }
1646
1646
  FabricContractAdapter.decoration();
1647
1647
  Adapter.setCurrent(FabricFlavour);
1648
- //# sourceMappingURL=ContractAdapter.js.map
1648
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJhY3RBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyYWN0cy9Db250cmFjdEFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxXQUFXLEVBR1gsd0JBQXdCLEVBQ3hCLHVCQUF1QixJQUFJLDRCQUE0QixFQUN2RCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLDJCQUEyQixHQUM1QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVwQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsNkJBQTBCO0FBQzFELE9BQU8sRUFDTCxlQUFlLEVBRWYscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixhQUFhLEVBQ2IsYUFBYSxFQUNiLFFBQVEsRUFDUixjQUFjLEVBR2Qsa0JBQWtCLEdBQ25CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUVMLE1BQU0sSUFBSSxZQUFZLEVBQ3RCLFFBQVEsRUFDUixRQUFRLElBQUksY0FBYyxHQUMzQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBVSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsZUFBZSxFQUlmLGdCQUFnQixFQUNoQixPQUFPLEVBSVAsVUFBVSxFQUNWLFdBQVcsRUFDWCxjQUFjLEVBQ2QsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsZUFBZSxFQUVmLE9BQU8sRUFTUCxjQUFjLEVBQ2Qsd0JBQXdCLEVBR3hCLGVBQWUsRUFDZix5QkFBeUIsR0FDMUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsc0NBQW1DO0FBT3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUscUNBQWtD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R0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUzQyx3REFBd0Q7WUFDeEQsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDOUMsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUVELE9BQU8sWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxFQUFFLENBQUM7SUFDYixDQUFDOztBQUdILHFCQUFxQixDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ25DLE9BQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb3VjaERCQWRhcHRlcixcbiAgQ291Y2hEQktleXMsXG4gIE1hbmdvUXVlcnksXG4gIFZpZXdSZXNwb25zZSxcbiAgcmVxdWlyZUdlbmVyYXRlZFVzZUluZGV4LFxuICBlbnN1cmVEZXRlcm1pbmlzdGljU29ydCBhcyBjb3VjaEVuc3VyZURldGVybWluaXN0aWNTb3J0LFxuICBnZXRTb3J0RGlyZWN0aW9uLFxuICBnZXRTb3J0RmllbGRzLFxuICB3YXJuU2NhblByb25lTWFuZ29PcGVyYXRvcnMsXG59IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcbmltcG9ydCB7IE1vZGVsLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdEZsYWdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0Q29udGV4dCB9IGZyb20gXCIuL0NvbnRyYWN0Q29udGV4dFwiO1xuaW1wb3J0IHtcbiAgQmFkUmVxdWVzdEVycm9yLFxuICBCYXNlRXJyb3IsXG4gIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyxcbiAgQ29uZmxpY3RFcnJvcixcbiAgSW50ZXJuYWxFcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbiAgb25DcmVhdGUsXG4gIG9uQ3JlYXRlVXBkYXRlLFxuICBPcGVyYXRpb25LZXlzLFxuICBQcmltYXJ5S2V5VHlwZSxcbiAgU2VyaWFsaXphdGlvbkVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7XG4gIENvbnRleHQgYXMgQ3R4LFxuICBPYmplY3QgYXMgRmFicmljT2JqZWN0LFxuICBQcm9wZXJ0eSxcbiAgUHJvcGVydHkgYXMgRmFicmljUHJvcGVydHksXG59IGZyb20gXCJmYWJyaWMtY29udHJhY3QtYXBpXCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7XG4gIFBlcnNpc3RlbmNlS2V5cyxcbiAgUmVsYXRpb25zTWV0YWRhdGEsXG4gIFNlcXVlbmNlLFxuICBTZXF1ZW5jZU9wdGlvbnMsXG4gIFVuc3VwcG9ydGVkRXJyb3IsXG4gIEFkYXB0ZXIsXG4gIEFkYXB0ZXJGbGFncyxcbiAgUHJlcGFyZWRNb2RlbCxcbiAgUmVwb3NpdG9yeSxcbiAgUXVlcnlFcnJvcixcbiAgUGFnaW5nRXJyb3IsXG4gIE1pZ3JhdGlvbkVycm9yLFxuICBPYnNlcnZlckVycm9yLFxuICBBdXRob3JpemF0aW9uRXJyb3IsXG4gIEZvcmJpZGRlbkVycm9yLFxuICBDb25uZWN0aW9uRXJyb3IsXG4gIENvbnRleHR1YWxpemVkQXJncyxcbiAgQ29udGV4dCxcbiAgUmF3UmVzdWx0LFxuICBQYWdpbmF0b3IsXG4gIENvbnRleHR1YWxBcmdzLFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG4gIE1ldGhvZE9yT3BlcmF0aW9uLFxuICBBbGxPcGVyYXRpb25LZXlzLFxuICBGbGFnc09mLFxuICBDb250ZXh0T2YsXG4gIE9yZGVyRGlyZWN0aW9uLFxuICBUcmFuc2FjdGlvbk9wZXJhdGlvbktleXMsXG4gIEV2ZW50SWRzLFxuICBEaXNwYXRjaCxcbiAgcHJvbWlzZVNlcXVlbmNlLFxuICByZXNvbHZlQnVsa1NlcXVlbmNlUmVzdWx0LFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeSB9IGZyb20gXCIuL0ZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeVwiO1xuaW1wb3J0IHtcbiAgQ2hhaW5jb2RlU3R1YixcbiAgQ2xpZW50SWRlbnRpdHksXG4gIEl0ZXJhdG9ycyxcbiAgU3RhdGVRdWVyeVJlc3BvbnNlLFxufSBmcm9tIFwiZmFicmljLXNoaW0tYXBpXCI7XG5pbXBvcnQgeyBGYWJyaWNTdGF0ZW1lbnQgfSBmcm9tIFwiLi9GYWJyaWNDb250cmFjdFN0YXRlbWVudFwiO1xuaW1wb3J0IHsgRmFicmljQ29udHJhY3RTZXF1ZW5jZSB9IGZyb20gXCIuL0ZhYnJpY0NvbnRyYWN0U2VxdWVuY2VcIjtcbmltcG9ydCB7IEZhYnJpY0ZsYXZvdXIsIEZhYnJpY01vZGVsS2V5cyB9IGZyb20gXCIuLi9zaGFyZWQvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBTaW1wbGVEZXRlcm1pbmlzdGljU2VyaWFsaXplciB9IGZyb20gXCIuLi9zaGFyZWQvU2ltcGxlRGV0ZXJtaW5pc3RpY1NlcmlhbGl6ZXJcIjtcbmltcG9ydCB7XG4gIGFwcGx5LFxuICBDb25zdHJ1Y3RvcixcbiAgRGVjb3JhdGlvbixcbiAgTWV0YWRhdGEsXG4gIHByb3BNZXRhZGF0YSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdFBhZ2luYXRvciB9IGZyb20gXCIuL0ZhYnJpY0NvbnRyYWN0UGFnaW5hdG9yXCI7XG5pbXBvcnQgeyBNaXNzaW5nQ29udGV4dEVycm9yIH0gZnJvbSBcIi4uL3NoYXJlZC9lcnJvcnNcIjtcbmltcG9ydCB7IFNlZ3JlZ2F0ZWRNb2RlbCB9IGZyb20gXCIuLi9zaGFyZWQvaW5kZXhcIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0RGlzcGF0Y2ggfSBmcm9tIFwiLi9GYWJyaWNDb250cmFjdERpc3BhdGNoXCI7XG5cbmV4cG9ydCB0eXBlIEZhYnJpY0NvbnRleHR1YWxpemVkQXJnczxcbiAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gIEVYVEVORCBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSxcbj4gPSBDb250ZXh0dWFsaXplZEFyZ3M8RmFicmljQ29udHJhY3RDb250ZXh0LCBBUkdTLCBFWFRFTkQ+ICYge1xuICBzdHViOiBDaGFpbmNvZGVTdHViO1xuICBpZGVudGl0eTogQ2xpZW50SWRlbnRpdHk7XG59O1xuXG50eXBlIFByaXZhdGVTeW50aGV0aWNCb29rbWFyayA9IHtcbiAgc29ydEZpZWxkOiBzdHJpbmc7XG4gIGRpcmVjdGlvbjogXCJhc2NcIiB8IFwiZGVzY1wiO1xuICBpZEZpZWxkOiBzdHJpbmc7XG4gIGxhc3RWYWx1ZTogYW55O1xuICBsYXN0SWQ6IHN0cmluZztcbiAgcXVlcnlIYXNoOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjcmVhdG9yIG9yIHVwZGF0ZXIgZmllbGQgaW4gYSBtb2RlbCBiYXNlZCBvbiB0aGUgdXNlciBpbiB0aGUgY29udGV4dFxuICogQHN1bW1hcnkgQ2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBpbiBkZWNvcmF0b3JzIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBjcmVhdGVkX2J5IG9yIHVwZGF0ZWRfYnkgZmllbGRzXG4gKiB3aXRoIHRoZSB1c2VybmFtZSBmcm9tIHRoZSBjb250ZXh0IHdoZW4gYSBkb2N1bWVudCBpcyBjcmVhdGVkIG9yIHVwZGF0ZWRcbiAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVHlwZSBleHRlbmRpbmcgTmFub1JlcG9zaXRvcnk8TT5cbiAqIEB0ZW1wbGF0ZSBWIC0gVHlwZSBleHRlbmRpbmcgUmVsYXRpb25zTWV0YWRhdGFcbiAqIEBwYXJhbSB7Un0gdGhpcyAtIFRoZSByZXBvc2l0b3J5IGluc3RhbmNlXG4gKiBAcGFyYW0ge0ZhYnJpY0NvbnRyYWN0Q29udGV4dH0gY29udGV4dCAtIFRoZSBvcGVyYXRpb24gY29udGV4dCBjb250YWluaW5nIHVzZXIgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSByZWxhdGlvbiBtZXRhZGF0YVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gc2V0IHdpdGggdGhlIHVzZXJuYW1lXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIGJlaW5nIGNyZWF0ZWQgb3IgdXBkYXRlZFxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlXG4gKiBAZnVuY3Rpb24gY3JlYXRlZEJ5T25GYWJyaWNDcmVhdGVVcGRhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZmFicmljLmNvbnRyYWN0c1xuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBGIGFzIGNyZWF0ZWRCeU9uTmFub0NyZWF0ZVVwZGF0ZVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENvbnRleHRcbiAqICAgcGFydGljaXBhbnQgTSBhcyBNb2RlbFxuICogICBGLT4+QzogZ2V0KFwidXNlclwiKVxuICogICBDLS0+PkY6IHVzZXIgb2JqZWN0XG4gKiAgIEYtPj5NOiBzZXQga2V5IHRvIHVzZXIubmFtZVxuICogICBOb3RlIG92ZXIgRjogSWYgbm8gdXNlciBpbiBjb250ZXh0XG4gKiAgIEYtLT4+RjogdGhyb3cgVW5zdXBwb3J0ZWRFcnJvclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlZEJ5T25GYWJyaWNDcmVhdGVVcGRhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIEZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeTxNPixcbiAgViBleHRlbmRzIFJlbGF0aW9uc01ldGFkYXRhLFxuPihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBWLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VyID0gY29udGV4dC5nZXQoXCJpZGVudGl0eVwiKSBhcyBDbGllbnRJZGVudGl0eTtcbiAgICBtb2RlbFtrZXldID0gdXNlci5nZXRJRCgpIGFzIE1bdHlwZW9mIGtleV07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICBcIk5vIFVzZXIgZm91bmQgaW4gY29udGV4dC4gUGxlYXNlIHByb3ZpZGUgYSB1c2VyIGluIHRoZSBjb250ZXh0XCJcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFkYXB0ZXIgZm9yIEh5cGVybGVkZ2VyIEZhYnJpYyBjaGFpbmNvZGUgc3RhdGUgZGF0YWJhc2Ugb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBDb3VjaERCLWxpa2UgaW50ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBGYWJyaWMgc3RhdGUgZGF0YWJhc2UgZnJvbSB3aXRoaW4gYSBjaGFpbmNvZGUgY29udHJhY3RcbiAqIEB0ZW1wbGF0ZSB2b2lkIC0gTm8gY29uZmlndXJhdGlvbiBuZWVkZWQgZm9yIGNvbnRyYWN0IGFkYXB0ZXJcbiAqIEB0ZW1wbGF0ZSBGYWJyaWNDb250cmFjdEZsYWdzIC0gRmxhZ3Mgc3BlY2lmaWMgdG8gRmFicmljIGNvbnRyYWN0IG9wZXJhdGlvbnNcbiAqIEB0ZW1wbGF0ZSBGYWJyaWNDb250cmFjdENvbnRleHQgLSBDb250ZXh0IHR5cGUgZm9yIEZhYnJpYyBjb250cmFjdCBvcGVyYXRpb25zXG4gKiBAY2xhc3MgRmFicmljQ29udHJhY3RBZGFwdGVyXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gSW4gYSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRyYWN0IGNsYXNzXG4gKiBpbXBvcnQgeyBGYWJyaWNDb250cmFjdEFkYXB0ZXIgfSBmcm9tICdAZGVjYWYtdHMvZm9yLWZhYnJpYyc7XG4gKlxuICogZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7XG4gKiAgIHByaXZhdGUgYWRhcHRlciA9IG5ldyBGYWJyaWNDb250cmFjdEFkYXB0ZXIoKTtcbiAqXG4gKiAgIEBUcmFuc2FjdGlvbigpXG4gKiAgIGFzeW5jIGNyZWF0ZUFzc2V0KGN0eDogQ29udGV4dCwgaWQ6IHN0cmluZywgZGF0YTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gKiAgICAgY29uc3QgbW9kZWwgPSB7IGlkLCBkYXRhLCB0aW1lc3RhbXA6IERhdGUubm93KCkgfTtcbiAqICAgICBhd2FpdCB0aGlzLmFkYXB0ZXIuY3JlYXRlKCdhc3NldHMnLCBpZCwgbW9kZWwsIHt9LCB7IHN0dWI6IGN0eC5zdHViIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ29udHJhY3RcbiAqICAgcGFydGljaXBhbnQgRmFicmljQ29udHJhY3RBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IFN0dWJcbiAqICAgcGFydGljaXBhbnQgU3RhdGVEQlxuICpcbiAqICAgQ29udHJhY3QtPj5GYWJyaWNDb250cmFjdEFkYXB0ZXI6IGNyZWF0ZSh0YWJsZU5hbWUsIGlkLCBtb2RlbCwgdHJhbnNpZW50LCBjdHgpXG4gKiAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci0+PkZhYnJpY0NvbnRyYWN0QWRhcHRlcjogU2VyaWFsaXplIG1vZGVsIHRvIEpTT05cbiAqICAgRmFicmljQ29udHJhY3RBZGFwdGVyLT4+U3R1YjogcHV0U3RhdGUoaWQsIHNlcmlhbGl6ZWREYXRhKVxuICogICBTdHViLT4+U3RhdGVEQjogV3JpdGUgZGF0YVxuICogICBTdGF0ZURCLS0+PlN0dWI6IFN1Y2Nlc3NcbiAqICAgU3R1Yi0tPj5GYWJyaWNDb250cmFjdEFkYXB0ZXI6IFN1Y2Nlc3NcbiAqICAgRmFicmljQ29udHJhY3RBZGFwdGVyLS0+PkNvbnRyYWN0OiBtb2RlbFxuICovXG5leHBvcnQgY2xhc3MgRmFicmljQ29udHJhY3RBZGFwdGVyIGV4dGVuZHMgQ291Y2hEQkFkYXB0ZXI8XG4gIGFueSxcbiAgdm9pZCxcbiAgRmFicmljQ29udHJhY3RDb250ZXh0XG4+IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUFJJVkFURV9CT09LTUFSS19QUkVGSVggPSBcIl9fZGNmX3B2dGJtX19cIjtcblxuICBwcml2YXRlIHN0YXRpYyBzdGFibGVTdHJpbmdpZnkodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYFske3ZhbHVlXG4gICAgICAgIC5tYXAoKHYpID0+IEZhYnJpY0NvbnRyYWN0QWRhcHRlci5zdGFibGVTdHJpbmdpZnkodikpXG4gICAgICAgIC5qb2luKFwiLFwiKX1dYDtcbiAgICB9XG5cbiAgICBjb25zdCBvYmogPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gYHske09iamVjdC5rZXlzKG9iailcbiAgICAgIC5zb3J0KClcbiAgICAgIC5tYXAoXG4gICAgICAgIChrZXkpID0+XG4gICAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoa2V5KX06JHtGYWJyaWNDb250cmFjdEFkYXB0ZXIuc3RhYmxlU3RyaW5naWZ5KG9ialtrZXldKX1gXG4gICAgICApXG4gICAgICAuam9pbihcIixcIil9fWA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0b0J1ZmZlcih2YWx1ZTogdW5rbm93bik6IEJ1ZmZlciB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgXCJ1dGY4XCIpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHZhbHVlICYmXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIFwiYnVmZmVyXCIgaW4gdmFsdWUgJiZcbiAgICAgICh2YWx1ZSBhcyBhbnkpLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyXG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlZCA9IHZhbHVlIGFzIHtcbiAgICAgICAgYnVmZmVyOiBBcnJheUJ1ZmZlcjtcbiAgICAgICAgYnl0ZU9mZnNldD86IG51bWJlcjtcbiAgICAgICAgYnl0ZUxlbmd0aD86IG51bWJlcjtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0eXBlZC5idWZmZXIsIHR5cGVkLmJ5dGVPZmZzZXQgfHwgMCwgdHlwZWQuYnl0ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihcbiAgICAgIGBDYW5ub3QgY29udmVydCBwcml2YXRlIHF1ZXJ5IHZhbHVlIHRvIEJ1ZmZlcjogJHtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXG4gICAgICAgIHZhbHVlXG4gICAgICApfWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcHJpdmF0ZVF1ZXJ5SGFzaChxdWVyeTogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZyB7XG4gICAgY29uc3QgcmVsZXZhbnQgPSB7XG4gICAgICBzZWxlY3RvcjogcXVlcnkuc2VsZWN0b3IgfHwge30sXG4gICAgICBzb3J0OiBxdWVyeS5zb3J0IHx8IFtdLFxuICAgICAgZmllbGRzOiBxdWVyeS5maWVsZHMgfHwgdW5kZWZpbmVkLFxuICAgICAgdXNlX2luZGV4OiBxdWVyeS51c2VfaW5kZXggfHwgdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTI1NlwiKVxuICAgICAgLnVwZGF0ZShGYWJyaWNDb250cmFjdEFkYXB0ZXIuc3RhYmxlU3RyaW5naWZ5KHJlbGV2YW50KSlcbiAgICAgIC5kaWdlc3QoXCJiYXNlNjR1cmxcIik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhdHRhY2hHZW5lcmF0ZWRQcml2YXRlVXNlSW5kZXgoXG4gICAgcXVlcnk6IE1hbmdvUXVlcnksXG4gICAgbG9nPzogTG9nZ2VyXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcXVlcnkuc2VsZWN0b3IgYXMgUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBzZWxlY3Rvcj8uW0NvdWNoREJLZXlzLlRBQkxFXTtcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZSAhPT0gXCJzdHJpbmdcIiB8fCAhdGFibGVOYW1lLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjbGF6ejogQ29uc3RydWN0b3I8TW9kZWw+IHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjbGF6eiA9IE1vZGVsLmZyb21UYWJsZSh0YWJsZU5hbWUpIGFzIENvbnN0cnVjdG9yPE1vZGVsPjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXF1aXJlR2VuZXJhdGVkVXNlSW5kZXgoY2xhenosIHF1ZXJ5LCBsb2csIHtcbiAgICAgIHJlcXVpcmVTb3J0Q292ZXJhZ2U6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb3VudFNlbGVjdG9yRmllbGRPY2N1cnJlbmNlcyhcbiAgICBzZWxlY3RvcjogdW5rbm93bixcbiAgICBjb3VudHM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpXG4gICk6IE1hcDxzdHJpbmcsIG51bWJlcj4ge1xuICAgIGlmICghc2VsZWN0b3IgfHwgdHlwZW9mIHNlbGVjdG9yICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gY291bnRzO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdG9yKSkge1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBzZWxlY3Rvcikge1xuICAgICAgICBGYWJyaWNDb250cmFjdEFkYXB0ZXIuY291bnRTZWxlY3RvckZpZWxkT2NjdXJyZW5jZXMoZW50cnksIGNvdW50cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY291bnRzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgc2VsZWN0b3IgYXMgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICkpIHtcbiAgICAgIGlmICghW1wiJGFuZFwiLCBcIiRvclwiLCBcIiRub3RcIl0uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBjb3VudHMuc2V0KGtleSwgKGNvdW50cy5nZXQoa2V5KSB8fCAwKSArIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci5jb3VudFNlbGVjdG9yRmllbGRPY2N1cnJlbmNlcyh2YWx1ZSwgY291bnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY291bnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNOdWxsTG93ZXJCb3VuZE1hcmtlcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pO1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IFtvcGVyYXRvciwgYm91bmRdID0gZW50cmllc1swXTtcbiAgICByZXR1cm4gKG9wZXJhdG9yID09PSBcIiRndFwiIHx8IG9wZXJhdG9yID09PSBcIiRndGVcIikgJiYgYm91bmQgPT09IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBub3JtYWxpemVNYW5nb1F1ZXJ5Rm9yRXhlY3V0aW9uKFxuICAgIHF1ZXJ5OiBNYW5nb1F1ZXJ5XG4gICk6IE1hbmdvUXVlcnkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IE1hbmdvUXVlcnkgPSB7XG4gICAgICAuLi5xdWVyeSxcbiAgICAgIHNlbGVjdG9yOlxuICAgICAgICBxdWVyeS5zZWxlY3RvciAmJiB0eXBlb2YgcXVlcnkuc2VsZWN0b3IgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICA/IHsgLi4uKHF1ZXJ5LnNlbGVjdG9yIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pIH1cbiAgICAgICAgICA6IHF1ZXJ5LnNlbGVjdG9yLFxuICAgIH07XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWQuc2VsZWN0b3IgfHwgdHlwZW9mIG5vcm1hbGl6ZWQuc2VsZWN0b3IgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50cyA9IEZhYnJpY0NvbnRyYWN0QWRhcHRlci5jb3VudFNlbGVjdG9yRmllbGRPY2N1cnJlbmNlcyhcbiAgICAgIG5vcm1hbGl6ZWQuc2VsZWN0b3JcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBbZmllbGQsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgIG5vcm1hbGl6ZWQuc2VsZWN0b3IgYXMgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIUZhYnJpY0NvbnRyYWN0QWRhcHRlci5pc051bGxMb3dlckJvdW5kTWFya2VyKHZhbHVlKSB8fFxuICAgICAgICAoY291bnRzLmdldChmaWVsZCkgfHwgMCkgPD0gMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgKG5vcm1hbGl6ZWQuc2VsZWN0b3IgYXMgUmVjb3JkPHN0cmluZywgYW55PilbZmllbGRdO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRQcml2YXRlQ29udGludWF0aW9uU2VsZWN0b3IoXG4gICAgc2VsZWN0b3I6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgc29ydEZpZWxkOiBzdHJpbmcsXG4gICAgZGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCIsXG4gICAgaWRGaWVsZDogc3RyaW5nLFxuICAgIGxhc3RWYWx1ZTogYW55LFxuICAgIGxhc3RJZDogc3RyaW5nLFxuICAgIHZhcmlhbnQ6IFwic2FtZVwiIHwgXCJuZXh0XCJcbiAgKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgY21wID0gZGlyZWN0aW9uID09PSBcImRlc2NcIiA/IFwiJGx0XCIgOiBcIiRndFwiO1xuICAgIGNvbnN0IGlkQ21wID0gZGlyZWN0aW9uID09PSBcImRlc2NcIiA/IFwiJGx0XCIgOiBcIiRndFwiO1xuXG4gICAgaWYgKGlkRmllbGQgPT09IHNvcnRGaWVsZCkge1xuICAgICAgY29uc3QgY29udGludWF0aW9uID0ge1xuICAgICAgICBbc29ydEZpZWxkXToge1xuICAgICAgICAgIFtjbXBdOiBsYXN0VmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXNlbGVjdG9yIHx8ICFPYmplY3Qua2V5cyhzZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjb250aW51YXRpb247XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgICRhbmQ6IFtzZWxlY3RvciwgY29udGludWF0aW9uXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgY2xhdXNlcyA9XG4gICAgICB2YXJpYW50ID09PSBcInNhbWVcIlxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3NvcnRGaWVsZF06IHtcbiAgICAgICAgICAgICAgICAkZXE6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtpZEZpZWxkXToge1xuICAgICAgICAgICAgICAgIFtpZENtcF06IGxhc3RJZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3NvcnRGaWVsZF06IHtcbiAgICAgICAgICAgICAgICBbY21wXTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuXG4gICAgaWYgKCFzZWxlY3RvciB8fCAhT2JqZWN0LmtleXMoc2VsZWN0b3IpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNsYXVzZXMubGVuZ3RoID09PSAxXG4gICAgICAgID8gY2xhdXNlc1swXVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICRhbmQ6IGNsYXVzZXMsXG4gICAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgJGFuZDogW3NlbGVjdG9yLCAuLi5jbGF1c2VzXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRPcmxlc3NLZXlzZXRDb250aW51YXRpb25RdWVyaWVzKFxuICAgIHF1ZXJ5OiBNYW5nb1F1ZXJ5LFxuICAgIGN1cnNvcjogUHJpdmF0ZVN5bnRoZXRpY0Jvb2ttYXJrLFxuICAgIHBhZ2VTaXplOiBudW1iZXJcbiAgKTogTWFuZ29RdWVyeVtdIHtcbiAgICBjb25zdCBiYXNlUXVlcnk6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLnF1ZXJ5IH07XG4gICAgZGVsZXRlIGJhc2VRdWVyeS5za2lwO1xuICAgIGRlbGV0ZSBiYXNlUXVlcnkuYm9va21hcms7XG4gICAgZGVsZXRlIGJhc2VRdWVyeS5saW1pdDtcblxuICAgIGlmIChjdXJzb3IuaWRGaWVsZCA9PT0gY3Vyc29yLnNvcnRGaWVsZCkge1xuICAgICAgY29uc3Qgc2luZ2xlOiBNYW5nb1F1ZXJ5ID0ge1xuICAgICAgICAuLi5iYXNlUXVlcnksXG4gICAgICAgIHNlbGVjdG9yOiBGYWJyaWNDb250cmFjdEFkYXB0ZXIuYnVpbGRQcml2YXRlQ29udGludWF0aW9uU2VsZWN0b3IoXG4gICAgICAgICAgKGJhc2VRdWVyeS5zZWxlY3RvciB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgICAgICBjdXJzb3Iuc29ydEZpZWxkLFxuICAgICAgICAgIGN1cnNvci5kaXJlY3Rpb24sXG4gICAgICAgICAgY3Vyc29yLmlkRmllbGQsXG4gICAgICAgICAgY3Vyc29yLmxhc3RWYWx1ZSxcbiAgICAgICAgICBjdXJzb3IubGFzdElkLFxuICAgICAgICAgIFwic2FtZVwiXG4gICAgICAgICkgYXMgYW55LFxuICAgICAgICBsaW1pdDogcGFnZVNpemUgKyAxLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFtzaW5nbGVdO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0OiBNYW5nb1F1ZXJ5ID0ge1xuICAgICAgLi4uYmFzZVF1ZXJ5LFxuICAgICAgc2VsZWN0b3I6IEZhYnJpY0NvbnRyYWN0QWRhcHRlci5idWlsZFByaXZhdGVDb250aW51YXRpb25TZWxlY3RvcihcbiAgICAgICAgKGJhc2VRdWVyeS5zZWxlY3RvciB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgICAgY3Vyc29yLnNvcnRGaWVsZCxcbiAgICAgICAgY3Vyc29yLmRpcmVjdGlvbixcbiAgICAgICAgY3Vyc29yLmlkRmllbGQsXG4gICAgICAgIGN1cnNvci5sYXN0VmFsdWUsXG4gICAgICAgIGN1cnNvci5sYXN0SWQsXG4gICAgICAgIFwic2FtZVwiXG4gICAgICApIGFzIGFueSxcbiAgICAgIGxpbWl0OiBwYWdlU2l6ZSArIDEsXG4gICAgfTtcblxuICAgIGNvbnN0IHNlY29uZDogTWFuZ29RdWVyeSA9IHtcbiAgICAgIC4uLmJhc2VRdWVyeSxcbiAgICAgIHNlbGVjdG9yOiBGYWJyaWNDb250cmFjdEFkYXB0ZXIuYnVpbGRQcml2YXRlQ29udGludWF0aW9uU2VsZWN0b3IoXG4gICAgICAgIChiYXNlUXVlcnkuc2VsZWN0b3IgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAgIGN1cnNvci5zb3J0RmllbGQsXG4gICAgICAgIGN1cnNvci5kaXJlY3Rpb24sXG4gICAgICAgIGN1cnNvci5pZEZpZWxkLFxuICAgICAgICBjdXJzb3IubGFzdFZhbHVlLFxuICAgICAgICBjdXJzb3IubGFzdElkLFxuICAgICAgICBcIm5leHRcIlxuICAgICAgKSBhcyBhbnksXG4gICAgICBsaW1pdDogcGFnZVNpemUgKyAxLFxuICAgIH07XG5cbiAgICByZXR1cm4gW2ZpcnN0LCBzZWNvbmRdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZW5zdXJlRGV0ZXJtaW5pc3RpY1ByaXZhdGVTb3J0KFxuICAgIHF1ZXJ5OiBNYW5nb1F1ZXJ5LFxuICAgIHRpZUJyZWFrZXI6IHN0cmluZ1xuICApOiB7XG4gICAgc29ydEZpZWxkOiBzdHJpbmc7XG4gICAgZGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCI7XG4gICAgaWRGaWVsZDogc3RyaW5nO1xuICB9IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocXVlcnkuc29ydCkgfHwgIXF1ZXJ5LnNvcnQubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgIFwiUHJpdmF0ZSBNYW5nbyBwYWdpbmF0aW9uIHJlcXVpcmVzIGFuIGV4cGxpY2l0IHNvcnQuIEFkZCBvcmRlckJ5KC4uLikgc28gYSBzdGFibGUgZ2VuZXJhdGVkIGluZGV4IGNhbiBiZSBzZWxlY3RlZC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXJlY3Rpb24gPSAoZ2V0U29ydERpcmVjdGlvbihxdWVyeSkgfHxcbiAgICAgIE9yZGVyRGlyZWN0aW9uLkFTQykgYXMgT3JkZXJEaXJlY3Rpb247XG4gICAgY291Y2hFbnN1cmVEZXRlcm1pbmlzdGljU29ydChxdWVyeSwgdGllQnJlYWtlciwgZGlyZWN0aW9uKTtcblxuICAgIGNvbnN0IHNvcnRGaWVsZHMgPSBnZXRTb3J0RmllbGRzKHF1ZXJ5KTtcbiAgICBjb25zdCBzb3J0RmllbGQgPSBzb3J0RmllbGRzWzBdO1xuICAgIGlmICghc29ydEZpZWxkKSB7XG4gICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgIFwiUHJpdmF0ZSBNYW5nbyBwYWdpbmF0aW9uIHJlcXVpcmVzIGEgdmFsaWQgZmlyc3Qgc29ydCBmaWVsZC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXNvcnRGaWVsZHMuaW5jbHVkZXModGllQnJlYWtlcikpIHtcbiAgICAgIHRocm93IG5ldyBQYWdpbmdFcnJvcihcbiAgICAgICAgYFByaXZhdGUgTWFuZ28gcGFnaW5hdGlvbiByZXF1aXJlcyB0aWUtYnJlYWtlciBzb3J0IGZpZWxkIFwiJHt0aWVCcmVha2VyfVwiLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNvcnRGaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uIGFzIFwiYXNjXCIgfCBcImRlc2NcIixcbiAgICAgIGlkRmllbGQ6IHRpZUJyZWFrZXIsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlUHJpdmF0ZVJlc3VsdFZhbHVlKHZhbHVlOiBCdWZmZXIpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh2YWx1ZS50b1N0cmluZyhcInV0ZjhcIikpO1xuXG4gICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcml2YXRlIHF1ZXJ5IHJlc3VsdCBpcyBub3QgYSBKU09OIG9iamVjdFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgcHJpdmF0ZSBxdWVyeSByZXN1bHQgd2hpbGUgYnVpbGRpbmcgYm9va21hcms6ICR7ZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIGV4ZWN1dGVQcml2YXRlTWFuZ29QYWdlUXVlcmllcyhcbiAgICBzdHViOiBDaGFpbmNvZGVTdHViLFxuICAgIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgICBxdWVyaWVzOiBNYW5nb1F1ZXJ5W10sXG4gICAgcGFnZVNpemU6IG51bWJlcixcbiAgICBsb2c6IExvZ2dlclxuICApOiBQcm9taXNlPEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBCdWZmZXIgfT4+IHtcbiAgICBjb25zdCBwYWdlZDogQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IEJ1ZmZlciB9PiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBxIG9mIHF1ZXJpZXMpIHtcbiAgICAgIGlmIChwYWdlZC5sZW5ndGggPj0gcGFnZVNpemUgKyAxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBwYWdlU2l6ZSArIDEgLSBwYWdlZC5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IHF1ZXJ5Rm9yRXhlY3V0aW9uOiBNYW5nb1F1ZXJ5ID0ge1xuICAgICAgICAuLi5xLFxuICAgICAgICBsaW1pdDogcmVtYWluaW5nLFxuICAgICAgfTtcblxuICAgICAgZGVsZXRlIHF1ZXJ5Rm9yRXhlY3V0aW9uLnNraXA7XG4gICAgICBkZWxldGUgcXVlcnlGb3JFeGVjdXRpb24uYm9va21hcms7XG5cbiAgICAgIGNvbnN0IHF1ZXJ5SnNvbiA9IEpTT04uc3RyaW5naWZ5KHF1ZXJ5Rm9yRXhlY3V0aW9uKTtcblxuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgUXVlcnlpbmcgcHJpdmF0ZSBjb2xsZWN0aW9uICR7Y29sbGVjdGlvbn0gd2l0aCBNYW5nbyBxdWVyeTogJHtxdWVyeUpzb259YFxuICAgICAgKTtcblxuICAgICAgbGV0IHJlc3BvbnNlOiB1bmtub3duO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHN0dWIuZ2V0UHJpdmF0ZURhdGFRdWVyeVJlc3VsdChjb2xsZWN0aW9uLCBxdWVyeUpzb24pO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYFByaXZhdGUgTWFuZ28gcGFnaW5hdGVkIHF1ZXJ5IGZhaWxlZGAsXG4gICAgICAgICAgICBgY29sbGVjdGlvbj0ke2NvbGxlY3Rpb259YCxcbiAgICAgICAgICAgIGBxdWVyeT0ke3F1ZXJ5SnNvbn1gLFxuICAgICAgICAgICAgYGVycm9yPSR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5zdGFjayB8fCBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICAgICAgICBdLmpvaW4oXCJcXG5cIilcbiAgICAgICAgKTtcblxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpdGVyYXRvciA9ICgocmVzcG9uc2UgYXMgYW55KS5pdGVyYXRvciB8fFxuICAgICAgICByZXNwb25zZSkgYXMgSXRlcmF0b3JzLlN0YXRlUXVlcnlJdGVyYXRvcjtcblxuICAgICAgaWYgKCFpdGVyYXRvciB8fCB0eXBlb2YgaXRlcmF0b3IubmV4dCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgICAgICAgIGBQcml2YXRlIHBhZ2luYXRlZCBxdWVyeSBvbiBjb2xsZWN0aW9uICR7Y29sbGVjdGlvbn0gZGlkIG5vdCByZXR1cm4gYSB2YWxpZCBpdGVyYXRvcmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKHBhZ2VkLmxlbmd0aCA8IHBhZ2VTaXplICsgMSkge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICAgIGlmIChyZXMuZG9uZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFyZXMudmFsdWUgfHwgIXJlcy52YWx1ZS52YWx1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFnZWQucHVzaCh7XG4gICAgICAgICAgICBrZXk6IHJlcy52YWx1ZS5rZXkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgdmFsdWU6IEZhYnJpY0NvbnRyYWN0QWRhcHRlci50b0J1ZmZlcihyZXMudmFsdWUudmFsdWUpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGxvZy5lcnJvcihcbiAgICAgICAgICBbXG4gICAgICAgICAgICBgRmFpbGVkIHdoaWxlIHJlYWRpbmcgcHJpdmF0ZSBNYW5nbyBpdGVyYXRvcmAsXG4gICAgICAgICAgICBgY29sbGVjdGlvbj0ke2NvbGxlY3Rpb259YCxcbiAgICAgICAgICAgIGBxdWVyeT0ke3F1ZXJ5SnNvbn1gLFxuICAgICAgICAgICAgYGVycm9yPSR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5zdGFjayB8fCBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICAgICAgICBdLmpvaW4oXCJcXG5cIilcbiAgICAgICAgKTtcblxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBpdGVyYXRvci5jbG9zZSgpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBgRmFpbGVkIHRvIGNsb3NlIHByaXZhdGUgTWFuZ28gaXRlcmF0b3JgLFxuICAgICAgICAgICAgICBgY29sbGVjdGlvbj0ke2NvbGxlY3Rpb259YCxcbiAgICAgICAgICAgICAgYHF1ZXJ5PSR7cXVlcnlKc29ufWAsXG4gICAgICAgICAgICAgIGBlcnJvcj0ke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUuc3RhY2sgfHwgZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgICBdLmpvaW4oXCJcXG5cIilcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1maW5hbGx5XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYWdlZDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHRvRmFicmljUGFnaW5hdGlvblJlc3BvbnNlKFxuICAgIGRvY3M6IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBCdWZmZXIgfT4sXG4gICAgYm9va21hcms6IHN0cmluZ1xuICApOiB7XG4gICAgaXRlcmF0b3I6IEl0ZXJhdG9ycy5TdGF0ZVF1ZXJ5SXRlcmF0b3I7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIGZldGNoZWRSZWNvcmRzQ291bnQ6IG51bWJlcjtcbiAgICAgIGJvb2ttYXJrOiBzdHJpbmc7XG4gICAgfTtcbiAgfSB7XG4gICAgbGV0IGlkeCA9IDA7XG5cbiAgICBjb25zdCBpdGVyYXRvciA9IHtcbiAgICAgIGFzeW5jIG5leHQoKSB7XG4gICAgICAgIGlmIChpZHggPCBkb2NzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogZG9jc1tpZHgrK10sXG4gICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkIGFzIGFueSxcbiAgICAgICAgICBkb25lOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGFzeW5jIGNsb3NlKCkge30sXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IgYXMgdW5rbm93biBhcyBJdGVyYXRvcnMuU3RhdGVRdWVyeUl0ZXJhdG9yLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZmV0Y2hlZFJlY29yZHNDb3VudDogZG9jcy5sZW5ndGgsXG4gICAgICAgIGJvb2ttYXJrLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VTeW50aGV0aWNQcml2YXRlQm9va21hcmsoXG4gICAgYm9va21hcms6IHVua25vd25cbiAgKTogUHJpdmF0ZVN5bnRoZXRpY0Jvb2ttYXJrIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIGJvb2ttYXJrICE9PSBcInN0cmluZ1wiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICghYm9va21hcmsuc3RhcnRzV2l0aChGYWJyaWNDb250cmFjdEFkYXB0ZXIuUFJJVkFURV9CT09LTUFSS19QUkVGSVgpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCByYXcgPSBib29rbWFyay5zbGljZShcbiAgICAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci5QUklWQVRFX0JPT0tNQVJLX1BSRUZJWC5sZW5ndGhcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKHJhdywgXCJiYXNlNjR1cmxcIikudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXBhcnNlZCB8fFxuICAgICAgICB0eXBlb2YgcGFyc2VkICE9PSBcIm9iamVjdFwiIHx8XG4gICAgICAgIHR5cGVvZiBwYXJzZWQuc29ydEZpZWxkICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIHR5cGVvZiBwYXJzZWQuZGlyZWN0aW9uICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgIHR5cGVvZiBwYXJzZWQuaWRGaWVsZCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgcGFyc2VkLmxhc3RJZCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICB0eXBlb2YgcGFyc2VkLnF1ZXJ5SGFzaCAhPT0gXCJzdHJpbmdcIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3J0RmllbGQ6IHBhcnNlZC5zb3J0RmllbGQsXG4gICAgICAgIGRpcmVjdGlvbjogcGFyc2VkLmRpcmVjdGlvbiA9PT0gXCJkZXNjXCIgPyBcImRlc2NcIiA6IFwiYXNjXCIsXG4gICAgICAgIGlkRmllbGQ6IHBhcnNlZC5pZEZpZWxkLFxuICAgICAgICBsYXN0VmFsdWU6IChwYXJzZWQgYXMgYW55KS5sYXN0VmFsdWUsXG4gICAgICAgIGxhc3RJZDogcGFyc2VkLmxhc3RJZCxcbiAgICAgICAgcXVlcnlIYXNoOiBwYXJzZWQucXVlcnlIYXNoLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRTeW50aGV0aWNQcml2YXRlQm9va21hcmsoY3Vyc29yOiB7XG4gICAgc29ydEZpZWxkOiBzdHJpbmc7XG4gICAgZGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCI7XG4gICAgaWRGaWVsZDogc3RyaW5nO1xuICAgIGxhc3RWYWx1ZTogYW55O1xuICAgIGxhc3RJZDogc3RyaW5nO1xuICAgIHF1ZXJ5SGFzaDogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7RmFicmljQ29udHJhY3RBZGFwdGVyLlBSSVZBVEVfQk9PS01BUktfUFJFRklYfSR7QnVmZmVyLmZyb20oXG4gICAgICBKU09OLnN0cmluZ2lmeShjdXJzb3IpXG4gICAgKS50b1N0cmluZyhcImJhc2U2NHVybFwiKX1gO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldENsaWVudCgpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcIkNsaWVudCBpcyBub3Qgc3VwcG9ydGVkIGluIEZhYnJpYyBjb250cmFjdHNcIik7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUZXh0IGRlY29kZXIgZm9yIGNvbnZlcnRpbmcgYmluYXJ5IGRhdGEgdG8gc3RyaW5nc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGY4XCIpO1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgc2VyaWFsaXplciA9IG5ldyBTaW1wbGVEZXRlcm1pbmlzdGljU2VyaWFsaXplcigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udGV4dCBjb25zdHJ1Y3RvciBmb3IgdGhpcyBhZGFwdGVyXG4gICAqIEBzdW1tYXJ5IE92ZXJyaWRlcyB0aGUgYmFzZSBDb250ZXh0IGNvbnN0cnVjdG9yIHdpdGggRmFicmljQ29udHJhY3RDb250ZXh0XG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0IENvbnRleHQoKTogQ29uc3RydWN0b3I8RmFicmljQ29udHJhY3RDb250ZXh0PiB7XG4gICAgcmV0dXJuIEZhYnJpY0NvbnRyYWN0Q29udGV4dDtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHJlcG9zaXRvcnkgY29uc3RydWN0b3IgZm9yIHRoaXMgYWRhcHRlclxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBGYWJyaWNDb250cmFjdFJlcG9zaXRvcnkgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIHJlcG9zaXRvcmllc1xuICAgKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gICAqIEByZXR1cm4ge0NvbnN0cnVjdG9yPFJlcG9zaXRvcnk8TSwgTWFuZ29RdWVyeSwgRmFicmljQ29udHJhY3RBZGFwdGVyLCBGYWJyaWNDb250cmFjdEZsYWdzLCBGYWJyaWNDb250cmFjdENvbnRleHQ+Pn0gVGhlIHJlcG9zaXRvcnkgY29uc3RydWN0b3JcbiAgICovXG4gIG92ZXJyaWRlIHJlcG9zaXRvcnk8XG4gICAgUiBleHRlbmRzIFJlcG9zaXRvcnk8XG4gICAgICBhbnksXG4gICAgICBBZGFwdGVyPGFueSwgdm9pZCwgTWFuZ29RdWVyeSwgQ29udGV4dDxGYWJyaWNDb250cmFjdEZsYWdzPj5cbiAgICA+LFxuICA+KCk6IENvbnN0cnVjdG9yPFI+IHtcbiAgICByZXR1cm4gRmFicmljQ29udHJhY3RSZXBvc2l0b3J5IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8Uj47XG4gIH1cblxuICBvdmVycmlkZSBQYWdpbmF0b3I8TSBleHRlbmRzIE1vZGVsPihcbiAgICBxdWVyeTogTWFuZ29RdWVyeSxcbiAgICBzaXplOiBudW1iZXIsXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+XG4gICk6IFBhZ2luYXRvcjxNLCBhbnksIE1hbmdvUXVlcnk+IHtcbiAgICByZXR1cm4gbmV3IEZhYnJpY0NvbnRyYWN0UGFnaW5hdG9yKHRoaXMsIHF1ZXJ5LCBzaXplLCBjbGF6eik7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBTZXF1ZW5jZShvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpOiBQcm9taXNlPFNlcXVlbmNlPiB7XG4gICAgcmV0dXJuIG5ldyBGYWJyaWNDb250cmFjdFNlcXVlbmNlKG9wdGlvbnMsIHRoaXMgYXMgYW55KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBEaXNwYXRjaCgpOiBEaXNwYXRjaDxGYWJyaWNDb250cmFjdEFkYXB0ZXI+IHtcbiAgICByZXR1cm4gbmV3IEZhYnJpY0NvbnRyYWN0RGlzcGF0Y2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBGYWJyaWNDb250cmFjdEFkYXB0ZXIgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYW4gYWRhcHRlciBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRmFicmljIHN0YXRlIGRhdGFiYXNlXG4gICAqIEBwYXJhbSB7dm9pZH0gc2NvcGUgLSBOb3QgdXNlZCBpbiB0aGlzIGFkYXB0ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc10gLSBPcHRpb25hbCBhbGlhcyBmb3IgdGhlIGFkYXB0ZXIgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiB2b2lkLCBhbGlhcz86IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBGYWJyaWNGbGF2b3VyLCBhbGlhcyk7XG4gIH1cblxuICBvdmVycmlkZSBmb3IoY29uZmlnOiBQYXJ0aWFsPGFueT4sIC4uLmFyZ3M6IGFueSk6IHR5cGVvZiB0aGlzIHtcbiAgICByZXR1cm4gc3VwZXIuZm9yKGNvbmZpZywgLi4uYXJncyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWxEZWZhdWx0czxNIGV4dGVuZHMgTW9kZWw+KGNsYXp6OiBDb25zdHJ1Y3RvcjxNPikge1xuICAgIGNvbnN0IG0gPSBuZXcgY2xhenooKTtcbiAgICByZXR1cm4gKE1ldGFkYXRhLnByb3BlcnRpZXMoY2xhenopIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBwKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbVtwIGFzIGtleW9mIE1dICE9PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgIGFjY1twIGFzIGtleW9mIE1dID0gbVtwIGFzIGtleW9mIE1dO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxrZXlvZiBNLCBhbnk+XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHJlY29yZCBpbiB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgU2VyaWFsaXplcyBhIG1vZGVsIGFuZCBzdG9yZXMgaXQgaW4gdGhlIEZhYnJpYyBzdGF0ZSBkYXRhYmFzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgcmVjb3JkIGRhdGFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSB0cmFuc2llbnQgLSBUcmFuc2llbnQgZGF0YSAobm90IHVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbilcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLCBpbmNsdWRpbmcgdGhlIGNoYWluY29kZSBzdHViIGFuZCBsb2dnZXJcbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNyZWF0ZWQgcmVjb3JkXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBjcmVhdGU8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ29udHJhY3RGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuY3JlYXRlKTtcbiAgICB0aGlzLmVuZm9yY2VNaXJyb3JBdXRob3JpemF0aW9uKGNsYXp6LCBjdHgpO1xuICAgIGxvZy5pbmZvKGBpbiBBREFQVEVSIGNyZWF0ZSB3aXRoIGFyZ3MgJHthcmdzfWApO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgY29uc3QgY29tcG9zZWRLZXkgPSBjdHguc3R1Yi5jcmVhdGVDb21wb3NpdGVLZXkodGFibGVOYW1lLCBbU3RyaW5nKGlkKV0pO1xuICAgIGNvbnN0IG1pcnJvckNvbGxlY3Rpb24gPSBjdHguZ2V0T3JVbmRlZmluZWQoXCJtaXJyb3JDb2xsZWN0aW9uXCIpIGFzXG4gICAgICB8IHN0cmluZ1xuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVsbHlTZWdyZWdhdGVkID0gY3R4LmlzRnVsbHlTZWdyZWdhdGVkICYmICFtaXJyb3JDb2xsZWN0aW9uO1xuXG4gICAgaWYgKCFtaXJyb3JDb2xsZWN0aW9uKSB7XG4gICAgICBsZXQgZXhpc3Rpbmc6IGFueTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4aXN0aW5nID0gYXdhaXQgdGhpcy5yZWFkU3RhdGUoY29tcG9zZWRLZXksIGN0eCk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leC1hc3NpZ25cbiAgICAgICAgZSA9IHRoaXMucGFyc2VFcnJvcihlIGFzIEVycm9yKTtcbiAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpKSB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgaWYgKGV4aXN0aW5nKVxuICAgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RFcnJvcihcbiAgICAgICAgICBgcmVjb3JkIHdpdGggaWQgJHtpZH0gaW4gdGFibGUgJHt0YWJsZU5hbWV9IGFscmVhZHkgZXhpc3RzYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsb2cuaW5mbyhgYWRkaW5nIGVudHJ5IHRvICR7dGFibGVOYW1lfSB0YWJsZSB3aXRoIHBrICR7aWR9YCk7XG5cbiAgICAgIGlmIChtaXJyb3JDb2xsZWN0aW9uKSB7XG4gICAgICAgIG1vZGVsID0gYXdhaXQgdGhpcy5mb3JQcml2YXRlKG1pcnJvckNvbGxlY3Rpb24pLnB1dFN0YXRlKFxuICAgICAgICAgIGNvbXBvc2VkS2V5LFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIGN0eFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB0aGlzLmdldE1vZGVsRGVmYXVsdHMoY2xhenopO1xuICAgICAgICAvLyBoYW5kbGUgcHVibGljIGRhdGEgaWYgbm90IGZ1bGx5IHNlZ3JlZ2F0ZWRcbiAgICAgICAgaWYgKCFmdWxseVNlZ3JlZ2F0ZWQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtb2RlbCkuZmlsdGVyKChrKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChrID09PSBDb3VjaERCS2V5cy5UQUJMRSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gIShcbiAgICAgICAgICAgICAgICBkZWZhdWx0cyAmJlxuICAgICAgICAgICAgICAgIGsgaW4gZGVmYXVsdHMgJiZcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1trIGFzIGtleW9mIE1dID09PSBtb2RlbFtrXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSkubGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbW9kZWwgPSBhd2FpdCB0aGlzLnB1dFN0YXRlKGNvbXBvc2VkS2V5LCBtb2RlbCwgY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBzZWdyZWdhdGVkIHdyaXRlc1xuICAgICAgICBjb25zdCBkYXRhID0gY3R4LmdldEZyb21DaGlsZHJlbihcInNlZ3JlZ2F0ZWREYXRhXCIpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBpbiBkYXRhKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mb3JQcml2YXRlKGNvbGxlY3Rpb24pLnB1dFN0YXRlKFxuICAgICAgICAgICAgICAgIGNvbXBvc2VkS2V5LFxuICAgICAgICAgICAgICAgIGRhdGFbY29sbGVjdGlvbl1baWQgYXMgYW55XSxcbiAgICAgICAgICAgICAgICBjdHhcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlQWxsPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgdGFibGVOYW1lOiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGVbXSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPEZhYnJpY0NvbnRyYWN0Q29udGV4dD5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBpZiAoaWQubGVuZ3RoICE9PSBtb2RlbC5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuY3JlYXRlQWxsKTtcbiAgICBjb25zdCB0YWJsZUxhYmVsID0gTW9kZWwudGFibGVOYW1lKHRhYmxlTmFtZSk7XG4gICAgbG9nLmRlYnVnKGBDcmVhdGluZyAke2lkLmxlbmd0aH0gZW50cmllcyAke3RhYmxlTGFiZWx9IHRhYmxlYCk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgaWQubWFwKChpLCBjb3VudCkgPT4gdGhpcy5jcmVhdGUodGFibGVOYW1lLCBpLCBtb2RlbFtjb3VudF0sIC4uLmN0eEFyZ3MpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlYWRzIGEgcmVjb3JkIGZyb20gdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhbmQgZGVzZXJpYWxpemVzIGEgcmVjb3JkIGZyb20gdGhlIEZhYnJpYyBzdGF0ZSBkYXRhYmFzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cywgaW5jbHVkaW5nIHRoZSBjaGFpbmNvZGUgc3R1YiBhbmQgbG9nZ2VyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXRyaWV2ZWQgcmVjb3JkXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyByZWFkPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NvbnRyYWN0RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnJlYWQpO1xuICAgIGxvZy5pbmZvKGBpbiBBREFQVEVSIHJlYWQgd2l0aCBhcmdzICR7YXJnc31gKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuXG4gICAgY29uc3QgY29tcG9zZWRLZXkgPSBjdHguc3R1Yi5jcmVhdGVDb21wb3NpdGVLZXkodGFibGVOYW1lLCBbU3RyaW5nKGlkKV0pO1xuICAgIGNvbnN0IG1pcnJvckNvbGxlY3Rpb24gPSBjdHguZ2V0T3JVbmRlZmluZWQoXCJtaXJyb3JDb2xsZWN0aW9uXCIpIGFzXG4gICAgICB8IHN0cmluZ1xuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNNaXJyb3IgPSBjdHguZ2V0T3JVbmRlZmluZWQoXCJtaXJyb3JcIikgYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNNaXJyb3IgJiYgbWlycm9yQ29sbGVjdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZm9yUHJpdmF0ZShtaXJyb3JDb2xsZWN0aW9uKS5yZWFkU3RhdGUoXG4gICAgICAgICAgY29tcG9zZWRLZXksXG4gICAgICAgICAgY3R4XG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlIGFzIEVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGN0eC5wdXQoXCJtaXJyb3JcIiBhcyBhbnksIHVuZGVmaW5lZCk7XG4gICAgICAgIGN0eC5wdXQoXCJtaXJyb3JDb2xsZWN0aW9uXCIgYXMgYW55LCB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICAgIHRyeSB7XG4gICAgICBtb2RlbCA9IGN0eC5pc0Z1bGx5U2VncmVnYXRlZFxuICAgICAgICA/IHt9XG4gICAgICAgIDogYXdhaXQgdGhpcy5yZWFkU3RhdGUoY29tcG9zZWRLZXksIGN0eCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRDb2xsZWN0aW9ucyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgICAuLi4oY3R4LmdldFJlYWRDb2xsZWN0aW9ucygpIHx8IFtdKSxcbiAgICAgIC4uLihjdHguY29uc3VtZVJlYWRDb2xsZWN0aW9ucygpIHx8IFtdKSxcbiAgICBdKTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiByZWFkQ29sbGVjdGlvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgYXdhaXQgdGhpcy5mb3JQcml2YXRlKGNvbCkucmVhZFN0YXRlKGNvbXBvc2VkS2V5LCBjdHgpXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VFcnJvcihlIGFzIEVycm9yKTtcbiAgICAgICAgaWYgKHBhcnNlZCBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpIGNvbnRpbnVlO1xuICAgICAgICB0aHJvdyBwYXJzZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMobW9kZWwpLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXG4gICAgICAgIGByZWNvcmQgd2l0aCBpZCAke2lkfSBpbiB0YWJsZSAke3RhYmxlTmFtZX0gZG9lcyBub3QgZXhpc3RgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBtdWx0aXBsZSByZWNvcmRzIGZyb20gdGhlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IEZldGNoZXMgbXVsdGlwbGUgcmVjb3JkcyB3aXRoIHRoZSBnaXZlbiBJRHMgZnJvbSB0aGUgc3BlY2lmaWVkIHRhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdG8gcmVhZCBmcm9tXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZGVudGlmaWVycyBvZiB0aGUgcmVjb3JkcyB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgc3BlY2lmaWMgdG8gdGhlIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25cbiAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiByZXRyaWV2ZWQgcmVjb3Jkc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgcmVhZEFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGVbXSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NvbnRyYWN0RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucmVhZEFsbCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cuZGVidWcoYFJlYWRpbmcgJHtpZC5sZW5ndGh9IGVudHJpZXMgJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgY29uc3QgYnJlYWtPblNpbmdsZUZhaWx1cmUgPSBjdHguZ2V0KFwiYnJlYWtPblNpbmdsZUZhaWx1cmVJbkJ1bGtcIikgPz8gdHJ1ZTtcbiAgICBjb25zdCBjb250aW51ZU9uRXJyb3IgPSAhYnJlYWtPblNpbmdsZUZhaWx1cmU7XG5cbiAgICBjb25zdCBtaXJyb3JDb2xsZWN0aW9uID0gY3R4LmdldE9yVW5kZWZpbmVkKFwibWlycm9yQ29sbGVjdGlvblwiKSBhc1xuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzTWlycm9yID0gY3R4LmdldE9yVW5kZWZpbmVkKFwibWlycm9yXCIpIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCByZWFkTWlycm9yID0gYXN5bmMgPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NvbnRyYWN0RmxhZ3M+PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCFtaXJyb3JDb2xsZWN0aW9uKVxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKFwiTWlzc2luZyBtaXJyb3IgY29sbGVjdGlvbiBmb3IgbWlycm9yIHJlYWRcIik7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCByZWFkTWlycm9yKTtcbiAgICAgICAgbG9nLmluZm8oYGluIEFEQVBURVIgcmVhZCB3aXRoIGFyZ3MgJHthcmdzfWApO1xuICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuXG4gICAgICAgIGNvbnN0IGNvbXBvc2VkS2V5ID0gY3R4LnN0dWIuY3JlYXRlQ29tcG9zaXRlS2V5KHRhYmxlTmFtZSwgW1xuICAgICAgICAgIFN0cmluZyhpZCksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZvclByaXZhdGUobWlycm9yQ29sbGVjdGlvbikucmVhZFN0YXRlKFxuICAgICAgICAgIGNvbXBvc2VkS2V5LFxuICAgICAgICAgIGN0eFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0YXNrcyA9IGlkLm1hcChcbiAgICAgICAgKGkpID0+ICgpID0+XG4gICAgICAgICAgaXNNaXJyb3IgJiYgbWlycm9yQ29sbGVjdGlvblxuICAgICAgICAgICAgPyByZWFkTWlycm9yKFxuICAgICAgICAgICAgICAgIGNsYXp6LFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgLi4uYXJncyxcbiAgICAgICAgICAgICAgICAoY3R4IGFzIGFueSkub3ZlcnJpZGUoeyBub0VtaXRTaW5nbGU6IHRydWUgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLnJlYWQoXG4gICAgICAgICAgICAgICAgY2xhenosXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgICAgICAgIChjdHggYXMgYW55KS5vdmVycmlkZSh7IG5vRW1pdFNpbmdsZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICApXG4gICAgICApO1xuXG4gICAgICBjb25zdCByYXdSZXN1bHQgPSBjb250aW51ZU9uRXJyb3JcbiAgICAgICAgPyBhd2FpdCBwcm9taXNlU2VxdWVuY2UodGFza3MsIHRydWUpXG4gICAgICAgIDogYXdhaXQgcHJvbWlzZVNlcXVlbmNlKHRhc2tzKTtcbiAgICAgIHJldHVybiByZXNvbHZlQnVsa1NlcXVlbmNlUmVzdWx0KFxuICAgICAgICByYXdSZXN1bHQsXG4gICAgICAgIGNvbnRpbnVlT25FcnJvcixcbiAgICAgICAgbG9nLFxuICAgICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuUkVBRF9BTExcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjdHgucHV0KFwibWlycm9yXCIgYXMgYW55LCB1bmRlZmluZWQpO1xuICAgICAgY3R4LnB1dChcIm1pcnJvckNvbGxlY3Rpb25cIiBhcyBhbnksIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIGEgcmVjb3JkIGluIHRoZSBzdGF0ZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBTZXJpYWxpemVzIGEgbW9kZWwgYW5kIHVwZGF0ZXMgaXQgaW4gdGhlIEZhYnJpYyBzdGF0ZSBkYXRhYmFzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgdXBkYXRlZCByZWNvcmQgZGF0YVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHRyYW5zaWVudCAtIFRyYW5zaWVudCBkYXRhIChub3QgdXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uKVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMsIGluY2x1ZGluZyB0aGUgY2hhaW5jb2RlIHN0dWIgYW5kIGxvZ2dlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdXBkYXRlZCByZWNvcmRcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDb250cmFjdEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy51cGRhdGUpO1xuXG4gICAgdGhpcy5lbmZvcmNlTWlycm9yQXV0aG9yaXphdGlvbihjbGF6eiwgY3R4KTtcbiAgICBsb2cuaW5mbyhgaW4gQURBUFRFUiB1cGRhdGUgd2l0aCBhcmdzICR7YXJnc31gKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGNvbnN0IGNvbXBvc2VkS2V5ID0gY3R4LnN0dWIuY3JlYXRlQ29tcG9zaXRlS2V5KHRhYmxlTmFtZSwgW1N0cmluZyhpZCldKTtcbiAgICBjb25zdCBtaXJyb3JDb2xsZWN0aW9uID0gY3R4LmdldE9yVW5kZWZpbmVkKFwibWlycm9yQ29sbGVjdGlvblwiKSBhc1xuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvZy5pbmZvKGB1cGRhdGluZyBlbnRyeSBpbiAke3RhYmxlTmFtZX0gdGFibGUgd2l0aCBwayAke2lkfWApO1xuXG4gICAgICBpZiAobWlycm9yQ29sbGVjdGlvbikge1xuICAgICAgICBtb2RlbCA9IGF3YWl0IHRoaXMuZm9yUHJpdmF0ZShtaXJyb3JDb2xsZWN0aW9uKS5wdXRTdGF0ZShcbiAgICAgICAgICBjb21wb3NlZEtleSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBjdHhcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gdGhpcy5nZXRNb2RlbERlZmF1bHRzKGNsYXp6KTtcbiAgICAgICAgLy8gaGFuZGxlIHB1YmxpYyBkYXRhXG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3Qua2V5cyhtb2RlbCkuZmlsdGVyKChrKSA9PiB7XG4gICAgICAgICAgICBpZiAoayA9PT0gQ291Y2hEQktleXMuVEFCTEUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICBkZWZhdWx0cyAmJlxuICAgICAgICAgICAgICBrIGluIGRlZmF1bHRzICYmXG4gICAgICAgICAgICAgIGRlZmF1bHRzW2sgYXMga2V5b2YgTV0gPT09IG1vZGVsW2tdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLmxlbmd0aFxuICAgICAgICApXG4gICAgICAgICAgbW9kZWwgPSBhd2FpdCB0aGlzLnB1dFN0YXRlKGNvbXBvc2VkS2V5LCBtb2RlbCwgY3R4KTtcblxuICAgICAgICAvLyBoYW5kbGUgc2VncmVnYXRlZCB3cml0ZXNcbiAgICAgICAgY29uc3QgZGF0YSA9IGN0eC5nZXRGcm9tQ2hpbGRyZW4oXCJzZWdyZWdhdGVkRGF0YVwiKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gaW4gZGF0YSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZm9yUHJpdmF0ZShjb2xsZWN0aW9uKS5wdXRTdGF0ZShcbiAgICAgICAgICAgICAgICBjb21wb3NlZEtleSxcbiAgICAgICAgICAgICAgICBkYXRhW2NvbGxlY3Rpb25dW2lkIGFzIGFueV0sXG4gICAgICAgICAgICAgICAgY3R4XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIHJlY29yZCBmcm9tIHRoZSBzdGF0ZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYSByZWNvcmQgYW5kIHRoZW4gcmVtb3ZlcyBpdCBmcm9tIHRoZSBGYWJyaWMgc3RhdGUgZGF0YWJhc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSByZWNvcmQgaWRlbnRpZmllciB0byBkZWxldGVcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLCBpbmNsdWRpbmcgdGhlIGNoYWluY29kZSBzdHViIGFuZCBsb2dnZXJcbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGRlbGV0ZWQgcmVjb3JkXG4gICAqL1xuICBhc3luYyBkZWxldGU8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ29udHJhY3RGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuZGVsZXRlKTtcblxuICAgIHRoaXMuZW5mb3JjZU1pcnJvckF1dGhvcml6YXRpb24oY2xhenosIGN0eCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcblxuICAgIGNvbnN0IGNvbXBvc2VkS2V5ID0gY3R4LnN0dWIuY3JlYXRlQ29tcG9zaXRlS2V5KHRhYmxlTmFtZSwgW1N0cmluZyhpZCldKTtcbiAgICBjb25zdCBtaXJyb3JDb2xsZWN0aW9uID0gY3R4LmdldE9yVW5kZWZpbmVkKFwibWlycm9yQ29sbGVjdGlvblwiKSBhc1xuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGxldCBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICAgIGlmIChtaXJyb3JDb2xsZWN0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBtb2RlbCA9IGF3YWl0IHRoaXMuZm9yUHJpdmF0ZShtaXJyb3JDb2xsZWN0aW9uKS5yZWFkU3RhdGUoXG4gICAgICAgICAgY29tcG9zZWRLZXksXG4gICAgICAgICAgY3R4XG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuZm9yUHJpdmF0ZShtaXJyb3JDb2xsZWN0aW9uKS5kZWxldGVTdGF0ZShjb21wb3NlZEtleSwgY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBtb2RlbCA9IGN0eC5pc0Z1bGx5U2VncmVnYXRlZFxuICAgICAgICAgID8ge31cbiAgICAgICAgICA6IGF3YWl0IHRoaXMucmVhZFN0YXRlKGNvbXBvc2VkS2V5LCBjdHgpO1xuICAgICAgICBpZiAoIWN0eC5pc0Z1bGx5U2VncmVnYXRlZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgZW50cnkgJHtjb21wb3NlZEtleX0gZnJvbSBwdWJsaWMgbGVkZ2VyYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTdGF0ZShjb21wb3NlZEtleSwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gY3R4LmdldFJlYWRDb2xsZWN0aW9ucygpO1xuICAgICAgaWYgKGNvbGxlY3Rpb25zICYmIGNvbGxlY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICAgIGBlbnN1cmluZyBjb2xsZWN0aW9uICR7Y29sfSBoYXMgZW50cnkgZm9yIGlkICR7Y29tcG9zZWRLZXl9IGJlZm9yZSBkZWxldGluZ2BcbiAgICAgICAgICApO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZm9yUHJpdmF0ZShjb2wpLnJlYWRTdGF0ZShjb21wb3NlZEtleSwgY3R4KVxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9nLmRlYnVnKFxuICAgICAgICAgICAgYERlbGV0aW5nIHByaXZhdGUgY29sbGVjdGlvbiAke2NvbH0gZW50cnkgZm9yIGlkICR7Y29tcG9zZWRLZXl9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5mb3JQcml2YXRlKGNvbCkuZGVsZXRlU3RhdGUoY29tcG9zZWRLZXksIGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRlbGV0ZVN0YXRlKGlkOiBzdHJpbmcsIGNvbnRleHQ6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCkge1xuICAgIGF3YWl0IGNvbnRleHQuc3R1Yi5kZWxldGVTdGF0ZShpZCk7XG4gIH1cblxuICBmb3JQcml2YXRlKGNvbGxlY3Rpb246IHN0cmluZyk6IEZhYnJpY0NvbnRyYWN0QWRhcHRlciB7XG4gICAgY29uc3QgdG9PdmVycmlkZSA9IFtcbiAgICAgIHRoaXMucHV0U3RhdGUsXG4gICAgICB0aGlzLnJlYWRTdGF0ZSxcbiAgICAgIHRoaXMuZGVsZXRlU3RhdGUsXG4gICAgICB0aGlzLnF1ZXJ5UmVzdWx0LFxuICAgICAgdGhpcy5xdWVyeVJlc3VsdFBhZ2luYXRlZCxcbiAgICBdLm1hcCgoZm4pID0+IGZuLm5hbWUpO1xuICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgaWYgKCF0b092ZXJyaWRlLmluY2x1ZGVzKHByb3AgYXMgc3RyaW5nKSlcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkoKHRhcmdldCBhcyBhbnkpW3Byb3BdLCB7XG4gICAgICAgICAgYXN5bmMgYXBwbHkoZm4sIHRoaXNBcmcsIGFyZ3NMaXN0KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHByb3ApIHtcbiAgICAgICAgICAgICAgY2FzZSBcInB1dFN0YXRlXCI6IHtcbiAgICAgICAgICAgICAgICAvLyBwdXRTdGF0ZSBzaWduYXR1cmU6IChpZDogc3RyaW5nLCBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PiwgY3R4OiBGYWJyaWNDb250cmFjdENvbnRleHQpXG4gICAgICAgICAgICAgICAgY29uc3QgW2lkLCBtb2RlbCwgY3R4XSA9IGFyZ3NMaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvZyA9IGN0eC5sb2dnZXIuZm9yKHByb3ApO1xuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICAgICAgICAgIGBQcml2YXRlIHdyaXRlIHRvICR7Y29sbGVjdGlvbn0gZm9yICR7aWQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmZyb20oXG4gICAgICAgICAgICAgICAgICBGYWJyaWNDb250cmFjdEFkYXB0ZXIuc2VyaWFsaXplci5zZXJpYWxpemUoXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsIGFzIE1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYXdhaXQgY3R4LnN0dWIucHV0UHJpdmF0ZURhdGEoY29sbGVjdGlvbiwgaWQudG9TdHJpbmcoKSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgXCJkZWxldGVTdGF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgLy8gZGVsZXRlU3RhdGUgc2lnbmF0dXJlOiAoaWQ6IHN0cmluZywgY29udGV4dDogRmFicmljQ29udHJhY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgIGNvbnN0IFtpZCwgY3R4XSA9IGFyZ3NMaXN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvZyA9IGN0eC5sb2dnZXIuZm9yKHByb3ApO1xuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICAgICAgICAgIGBQcml2YXRlIGRlbGV0ZSBvbiAke2NvbGxlY3Rpb259IGZvciAke2lkLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYXdhaXQgY3R4LnN0dWIuZGVsZXRlUHJpdmF0ZURhdGEoY29sbGVjdGlvbiwgaWQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgXCJyZWFkU3RhdGVcIjoge1xuICAgICAgICAgICAgICAgIC8vIHJlYWRTdGF0ZSBzaWduYXR1cmU6IChpZDogc3RyaW5nLCBjdHg6IEZhYnJpY0NvbnRyYWN0Q29udGV4dClcbiAgICAgICAgICAgICAgICBjb25zdCBbaWQsIGN0eF0gPSBhcmdzTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2cgPSBjdHgubG9nZ2VyLmZvcihwcm9wKTtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgICAgICAgICBgUHJpdmF0ZSByZWFkIGZyb20gJHtjb2xsZWN0aW9ufSBmb3IgJHtpZC50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBjdHguc3R1Yi5nZXRQcml2YXRlRGF0YShjb2xsZWN0aW9uLCBpZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLnRvU3RyaW5nKCkubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYFJlY29yZCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZGApO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gRmFicmljQ29udHJhY3RBZGFwdGVyLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFwicXVlcnlSZXN1bHRcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtzdHViLCByYXdJbnB1dCwgLi4uYXJnc10gPSBhcmdzTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGxvZyB9ID0gdGhpc0FyZ1tcImxvZ0N0eFwiXShhcmdzLCBwcm9wKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRJbnB1dCA9XG4gICAgICAgICAgICAgICAgICBGYWJyaWNDb250cmFjdEFkYXB0ZXIubm9ybWFsaXplTWFuZ29RdWVyeUZvckV4ZWN1dGlvbihcbiAgICAgICAgICAgICAgICAgICAgcmF3SW5wdXRcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeUpzb24gPSBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFxuICAgICAgICAgICAgICAgICAgYFF1ZXJ5aW5nIHByaXZhdGUgY29sbGVjdGlvbiAke2NvbGxlY3Rpb259IHdpdGggTWFuZ28gcXVlcnk6ICR7cXVlcnlKc29ufWBcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IChcbiAgICAgICAgICAgICAgICAgICAgc3R1YiBhcyBDaGFpbmNvZGVTdHViXG4gICAgICAgICAgICAgICAgICApLmdldFByaXZhdGVEYXRhUXVlcnlSZXN1bHQoY29sbGVjdGlvbiwgcXVlcnlKc29uKTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlcmF0b3IgPSAocmVzIGFzIGFueSkuaXRlcmF0b3IgfHwgcmVzO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yIHx8IHR5cGVvZiBpdGVyYXRvci5uZXh0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgYFByaXZhdGUgcXVlcnkgb24gY29sbGVjdGlvbiAke2NvbGxlY3Rpb259IGRpZCBub3QgcmV0dXJuIGEgdmFsaWQgaXRlcmF0b3JgXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBgUHJpdmF0ZSBNYW5nbyBxdWVyeSBmYWlsZWRgLFxuICAgICAgICAgICAgICAgICAgICAgIGBjb2xsZWN0aW9uPSR7Y29sbGVjdGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICAgIGBxdWVyeT0ke3F1ZXJ5SnNvbn1gLFxuICAgICAgICAgICAgICAgICAgICAgIGBlcnJvcj0ke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUuc3RhY2sgfHwgZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgICAgICAgICAgIF0uam9pbihcIlxcblwiKVxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpc0FyZy5wYXJzZUVycm9yID8gdGhpc0FyZy5wYXJzZUVycm9yKGUgYXMgRXJyb3IpIDogZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBcInF1ZXJ5UmVzdWx0UGFnaW5hdGVkXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbc3R1YiwgcmF3SW5wdXQsIGxpbWl0LCBza2lwLCBib29rbWFyaywgLi4uYXJnc10gPVxuICAgICAgICAgICAgICAgICAgYXJnc0xpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpc0FyZ1tcImxvZ0N0eFwiXShhcmdzLCBwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcCAhPT0gdW5kZWZpbmVkICYmIHNraXAgIT09IG51bGwgJiYgTnVtYmVyKHNraXApID4gMCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhZ2luZ0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIlByaXZhdGUgTWFuZ28gcGFnaW5hdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHNraXAvb2Zmc2V0IHBhZ2luYXRpb24uIFVzZSB0aGUgcmV0dXJuZWQgc3ludGhldGljIGJvb2ttYXJrIGluc3RlYWQuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZVNpemUgPSBNYXRoLm1heCgxLCBOdW1iZXIobGltaXQpIHx8IDI1MCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnJhd0lucHV0IH0gYXMgTWFuZ29RdWVyeTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeUlucHV0ID0gcXVlcnkgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBrRmllbGQgPVxuICAgICAgICAgICAgICAgICAgdHlwZW9mIHF1ZXJ5SW5wdXRbXCJfX3BrRmllbGRcIl0gPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5SW5wdXRbXCJfX3BrRmllbGRcIl0udHJpbSgpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhxdWVyeUlucHV0W1wiX19wa0ZpZWxkXCJdKVxuICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eD8uZ2V0T3JVbmRlZmluZWQoXCJwcml2YXRlUGFnaW5hdGlvblRpZUJyZWFrZXJcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgcXVlcnlJbnB1dFtcIl9fcGtGaWVsZFwiXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHN5bnRoZXRpY0N1cnNvciA9XG4gICAgICAgICAgICAgICAgICBGYWJyaWNDb250cmFjdEFkYXB0ZXIucGFyc2VTeW50aGV0aWNQcml2YXRlQm9va21hcmsoYm9va21hcmspO1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgYm9va21hcmsgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgYm9va21hcmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIGJvb2ttYXJrICE9PSBcIlwiICYmXG4gICAgICAgICAgICAgICAgICAhc3ludGhldGljQ3Vyc29yXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiUHJpdmF0ZSBNYW5nbyBwYWdpbmF0aW9uIG9ubHkgc3VwcG9ydHMgYWRhcHRlci1nZW5lcmF0ZWQgc3ludGhldGljIGJvb2ttYXJrcy5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocXVlcnkuc29ydCkgfHwgIXF1ZXJ5LnNvcnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiUHJpdmF0ZSBNYW5nbyBwYWdpbmF0aW9uIHJlcXVpcmVzIGFuIGV4cGxpY2l0IHNvcnQuIEFkZCBvcmRlckJ5KC4uLikgc28gYSBzdGFibGUgZ2VuZXJhdGVkIGluZGV4IGNhbiBiZSBzZWxlY3RlZC5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICBzb3J0RmllbGQsXG4gICAgICAgICAgICAgICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgICBpZEZpZWxkLFxuICAgICAgICAgICAgICAgIH0gPSBGYWJyaWNDb250cmFjdEFkYXB0ZXIuZW5zdXJlRGV0ZXJtaW5pc3RpY1ByaXZhdGVTb3J0KFxuICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICBxdWVyeVBrRmllbGRcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgd2FyblNjYW5Qcm9uZU1hbmdvT3BlcmF0b3JzKHF1ZXJ5LnNlbGVjdG9yIHx8IHt9LCBsb2cpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID1cbiAgICAgICAgICAgICAgICAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci5ub3JtYWxpemVNYW5nb1F1ZXJ5Rm9yRXhlY3V0aW9uKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBGYWJyaWNDb250cmFjdEFkYXB0ZXIuYXR0YWNoR2VuZXJhdGVkUHJpdmF0ZVVzZUluZGV4KFxuICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgbG9nXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICAgICAgICAgIGBQcml2YXRlIHBhZ2luYXRlZCBxdWVyeSBpbnB1dCBjb2xsZWN0aW9uPSR7Y29sbGVjdGlvbn0gbGltaXQ9JHtsaW1pdH0gc2tpcD0ke3NraXB9IGJvb2ttYXJrPSR7Ym9va21hcmt9IHNvcnRGaWVsZD0ke3NvcnRGaWVsZH0gZGlyZWN0aW9uPSR7c29ydERpcmVjdGlvbn0gc3ludGhldGljPSR7Qm9vbGVhbihcbiAgICAgICAgICAgICAgICAgICAgc3ludGhldGljQ3Vyc29yXG4gICAgICAgICAgICAgICAgICApfWBcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFF1ZXJ5LmxpbWl0ID0gcGFnZVNpemUgKyAxO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlIYXNoID1cbiAgICAgICAgICAgICAgICAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci5wcml2YXRlUXVlcnlIYXNoKG5vcm1hbGl6ZWRRdWVyeSk7XG4gICAgICAgICAgICAgICAgaWYgKHN5bnRoZXRpY0N1cnNvcikge1xuICAgICAgICAgICAgICAgICAgaWYgKHN5bnRoZXRpY0N1cnNvci5xdWVyeUhhc2ggIT09IHF1ZXJ5SGFzaCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJQcml2YXRlIE1hbmdvIGJvb2ttYXJrIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHF1ZXJ5LlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcmllcyA9IHN5bnRoZXRpY0N1cnNvclxuICAgICAgICAgICAgICAgICAgPyBGYWJyaWNDb250cmFjdEFkYXB0ZXIuYnVpbGRPcmxlc3NLZXlzZXRDb250aW51YXRpb25RdWVyaWVzKFxuICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICBzeW50aGV0aWNDdXJzb3IsXG4gICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemVcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBbeyAuLi5ub3JtYWxpemVkUXVlcnksIGxpbWl0OiBwYWdlU2l6ZSArIDEgfSBhcyBNYW5nb1F1ZXJ5XTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VkID1cbiAgICAgICAgICAgICAgICAgIGF3YWl0IEZhYnJpY0NvbnRyYWN0QWRhcHRlci5leGVjdXRlUHJpdmF0ZU1hbmdvUGFnZVF1ZXJpZXMoXG4gICAgICAgICAgICAgICAgICAgIHN0dWIgYXMgQ2hhaW5jb2RlU3R1YixcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcXVlcmllcyxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc01vcmUgPSBwYWdlZC5sZW5ndGggPiBwYWdlU2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2NzID0gaGFzTW9yZSA/IHBhZ2VkLnNsaWNlKDAsIHBhZ2VTaXplKSA6IHBhZ2VkO1xuXG4gICAgICAgICAgICAgICAgbGV0IG5leHRCb29rbWFyayA9IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKGhhc01vcmUgJiYgZG9jcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBkb2NzW2RvY3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICBjb25zdCBsYXN0RG9jID0gRmFicmljQ29udHJhY3RBZGFwdGVyLnBhcnNlUHJpdmF0ZVJlc3VsdFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBsYXN0LnZhbHVlXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoIShzb3J0RmllbGQgaW4gbGFzdERvYykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhZ2luZ0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIGBDYW5ub3QgYnVpbGQgcHJpdmF0ZSBwYWdpbmF0aW9uIGJvb2ttYXJrOiBzb3J0ZWQgZmllbGQgXCIke3NvcnRGaWVsZH1cIiBpcyBtaXNzaW5nIGZyb20gdGhlIGxhc3QgcmVzdWx0YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBsYXN0SWRWYWx1ZSA9IGxhc3REb2NbaWRGaWVsZF07XG4gICAgICAgICAgICAgICAgICBpZiAobGFzdElkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBsYXN0SWRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgYENhbm5vdCBidWlsZCBwcml2YXRlIHBhZ2luYXRpb24gYm9va21hcms6IGlkIGZpZWxkIFwiJHtpZEZpZWxkfVwiIGlzIG1pc3NpbmcgZnJvbSB0aGUgbGFzdCByZXN1bHRgXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIG5leHRCb29rbWFyayA9XG4gICAgICAgICAgICAgICAgICAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci5idWlsZFN5bnRoZXRpY1ByaXZhdGVCb29rbWFyayh7XG4gICAgICAgICAgICAgICAgICAgICAgc29ydEZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpZEZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdERvY1tzb3J0RmllbGRdLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RJZDogU3RyaW5nKGxhc3RJZFZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICBxdWVyeUhhc2gsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBGYWJyaWNDb250cmFjdEFkYXB0ZXIudG9GYWJyaWNQYWdpbmF0aW9uUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICBkb2NzLFxuICAgICAgICAgICAgICAgICAgbmV4dEJvb2ttYXJrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgICAgICAgYFVuc3VwcG9ydGVkIG1ldGhvZCBvdmVycmlkZSAke1N0cmluZyhwcm9wKX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcHV0U3RhdGUoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjdHg6IEZhYnJpY0NvbnRyYWN0Q29udGV4dFxuICApIHtcbiAgICBsZXQgZGF0YTogQnVmZmVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShcbiAgICAgICAgRmFicmljQ29udHJhY3RBZGFwdGVyLnNlcmlhbGl6ZXIuc2VyaWFsaXplKG1vZGVsIGFzIE1vZGVsLCBmYWxzZSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBzZXJpYWxpemUgcmVjb3JkIHdpdGggaWQgJHtpZH06ICR7ZX1gXG4gICAgICApO1xuICAgIH1cbiAgICBhd2FpdCBjdHguc3R1Yi5wdXRTdGF0ZShpZC50b1N0cmluZygpLCBkYXRhKTtcblxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWFkU3RhdGUoaWQ6IHN0cmluZywgY3R4OiBGYWJyaWNDb250cmFjdENvbnRleHQpIHtcbiAgICBsZXQgcmVzdWx0OiBhbnk7XG5cbiAgICBjb25zdCB7IGxvZyB9ID0gdGhpcy5sb2dDdHgoW2N0eF0sIHRoaXMucmVhZFN0YXRlKTtcbiAgICBjb25zdCByZXMgPSAoYXdhaXQgY3R4LnN0dWIuZ2V0U3RhdGUoaWQudG9TdHJpbmcoKSkpLnRvU3RyaW5nKCk7XG4gICAgaWYgKCFyZXMpIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGBSZWNvcmQgd2l0aCBpZCAke2lkfSBub3QgZm91bmRgKTtcbiAgICBsb2cuc2lsbHkoYHN0YXRlIHJldHJpZXZlZCB1bmRlciBpZCAke2lkfWApO1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBGYWJyaWNDb250cmFjdEFkYXB0ZXIuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShyZXMudG9TdHJpbmcoKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgRmFpbGVkIHRvIHBhcnNlIHJlY29yZDogJHtlfWApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcXVlcnlSZXN1bHQoXG4gICAgc3R1YjogQ2hhaW5jb2RlU3R1YixcbiAgICByYXdJbnB1dDogYW55LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxGYWJyaWNDb250cmFjdENvbnRleHQ+XG4gICk6IFByb21pc2U8SXRlcmF0b3JzLlN0YXRlUXVlcnlJdGVyYXRvcj4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRJbnB1dCA9XG4gICAgICBGYWJyaWNDb250cmFjdEFkYXB0ZXIubm9ybWFsaXplTWFuZ29RdWVyeUZvckV4ZWN1dGlvbihyYXdJbnB1dCk7XG4gICAgRmFicmljQ29udHJhY3RBZGFwdGVyLmF0dGFjaEdlbmVyYXRlZFByaXZhdGVVc2VJbmRleChub3JtYWxpemVkSW5wdXQpO1xuICAgIHJldHVybiBzdHViLmdldFF1ZXJ5UmVzdWx0KEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRJbnB1dCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHF1ZXJ5UmVzdWx0UGFnaW5hdGVkKFxuICAgIHN0dWI6IENoYWluY29kZVN0dWIsXG4gICAgcmF3SW5wdXQ6IGFueSxcbiAgICBsaW1pdDogbnVtYmVyID0gMjUwLFxuICAgIHBhZ2U/OiBudW1iZXIsXG4gICAgYm9va21hcms/OiBzdHJpbmcgfCBudW1iZXIsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8U3RhdGVRdWVyeVJlc3BvbnNlPEl0ZXJhdG9ycy5TdGF0ZVF1ZXJ5SXRlcmF0b3I+PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZElucHV0ID1cbiAgICAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci5ub3JtYWxpemVNYW5nb1F1ZXJ5Rm9yRXhlY3V0aW9uKHJhd0lucHV0KTtcbiAgICBGYWJyaWNDb250cmFjdEFkYXB0ZXIuYXR0YWNoR2VuZXJhdGVkUHJpdmF0ZVVzZUluZGV4KG5vcm1hbGl6ZWRJbnB1dCk7XG4gICAgcmV0dXJuIHN0dWIuZ2V0UXVlcnlSZXN1bHRXaXRoUGFnaW5hdGlvbihcbiAgICAgIEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRJbnB1dCksXG4gICAgICBsaW1pdCxcbiAgICAgIGJvb2ttYXJrPy50b1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVjb2RlcyBiaW5hcnkgZGF0YSB0byBzdHJpbmdcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYSBVaW50OEFycmF5IHRvIGEgc3RyaW5nIHVzaW5nIFVURi04IGVuY29kaW5nXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIC0gVGhlIGJpbmFyeSBkYXRhIHRvIGRlY29kZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZWNvZGVkIHN0cmluZ1xuICAgKi9cbiAgcHJvdGVjdGVkIGRlY29kZShidWZmZXI6IFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gRmFicmljQ29udHJhY3RBZGFwdGVyLnRleHREZWNvZGVyLmRlY29kZShidWZmZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG9wZXJhdGlvbiBmbGFncyBmb3IgRmFicmljIGNvbnRyYWN0IG9wZXJhdGlvbnNcbiAgICogQHN1bW1hcnkgTWVyZ2VzIGRlZmF1bHQgZmxhZ3Mgd2l0aCBGYWJyaWMtc3BlY2lmaWMgY29udGV4dCBpbmZvcm1hdGlvblxuICAgKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5c30gb3BlcmF0aW9uIC0gVGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWRcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtQYXJ0aWFsPEZhYnJpY0NvbnRyYWN0RmxhZ3M+fSBmbGFncyAtIFBhcnRpYWwgZmxhZ3MgdG8gbWVyZ2Ugd2l0aCBkZWZhdWx0c1xuICAgKiBAcGFyYW0ge0N0eH0gY3R4IC0gVGhlIEZhYnJpYyBjaGFpbmNvZGUgY29udGV4dFxuICAgKiBAcmV0dXJuIHtGYWJyaWNDb250cmFjdEZsYWdzfSBUaGUgbWVyZ2VkIGZsYWdzXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZmxhZ3M8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvcGVyYXRpb246IEFsbE9wZXJhdGlvbktleXMsXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+IHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiBQYXJ0aWFsPEZhYnJpY0NvbnRyYWN0RmxhZ3M+IHwgRmFicmljQ29udHJhY3RDb250ZXh0IHwgQ3R4IHwgYW55XG4gICk6IFByb21pc2U8RmFicmljQ29udHJhY3RGbGFncz4ge1xuICAgIGxldCBiYXNlRmxhZ3MgPSB7XG4gICAgICBzZWdyZWdhdGVkOiBmYWxzZSxcbiAgICAgIHJlYnVpbGRXaXRoVHJhbnNpZW50OiBmYWxzZSxcbiAgICAgIGZ1bGx5U2VncmVnYXRlZDogZmFsc2UsXG4gICAgICBzdHJpY3RQcml2YXRlTWFuZ29QYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgcHJpdmF0ZVBhZ2luYXRpb25UaWVCcmVha2VyOiBcImlkXCIsXG4gICAgfTtcbiAgICBpZiAoZmxhZ3MgaW5zdGFuY2VvZiBGYWJyaWNDb250cmFjdENvbnRleHQgfHwgZmxhZ3MgaW5zdGFuY2VvZiBDb250ZXh0KSB7XG4gICAgICBmbGFncyA9IGZsYWdzLnRvT3ZlcnJpZGVzKCk7XG4gICAgfVxuXG4gICAgYmFzZUZsYWdzID0gT2JqZWN0LmFzc2lnbihiYXNlRmxhZ3MsIGZsYWdzKTtcbiAgICBjb25zdCBzdHViRnJvbUZsYWdzID1cbiAgICAgIChmbGFncyBhcyBGYWJyaWNDb250cmFjdENvbnRleHQpLnN0dWIgfHwgKGZsYWdzIGFzIEN0eCkuc3R1YjtcbiAgICBjb25zdCBpZGVudGl0eUZyb21GbGFncyA9XG4gICAgICAoZmxhZ3MgYXMgRmFicmljQ29udHJhY3RDb250ZXh0KS5pZGVudGl0eSB8fFxuICAgICAgKGZsYWdzIGFzIEN0eCkuY2xpZW50SWRlbnRpdHk7XG4gICAgaWYgKHN0dWJGcm9tRmxhZ3MgJiYgaWRlbnRpdHlGcm9tRmxhZ3MpIHtcbiAgICAgIGNvbnN0IHR4SWQgPSBzdHViRnJvbUZsYWdzLmdldFR4SUQoKTtcbiAgICAgIE9iamVjdC5hc3NpZ24oYmFzZUZsYWdzLCB7XG4gICAgICAgIHN0dWI6IHN0dWJGcm9tRmxhZ3MsXG4gICAgICAgIGlkZW50aXR5OiBpZGVudGl0eUZyb21GbGFncyxcbiAgICAgICAgY2VydDogaWRlbnRpdHlGcm9tRmxhZ3MuZ2V0SURCeXRlcygpLnRvU3RyaW5nKCksXG4gICAgICAgIHJvbGVzOiBpZGVudGl0eUZyb21GbGFncy5nZXRBdHRyaWJ1dGVWYWx1ZShcInJvbGVzXCIpLFxuICAgICAgICBsb2dnZXI6IExvZ2dpbmcuZm9yKFxuICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsb2dMZXZlbDogZmFsc2UsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGZhbHNlLFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHhJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZsYWdzXG4gICAgICAgICksXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR4SWQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZUZsYWdzID0gT2JqZWN0LmFzc2lnbihiYXNlRmxhZ3MsIGZsYWdzIHx8IHt9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGF3YWl0IHN1cGVyLmZsYWdzKFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgbW9kZWwsXG4gICAgICBiYXNlRmxhZ3MgYXMgYW55XG4gICAgKSkgYXMgRmFicmljQ29udHJhY3RGbGFncztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbmRleCBmb3IgYSBtb2RlbFxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIEZhYnJpYyBjb250cmFjdHMgYW5kIHJldHVybnMgYSByZXNvbHZlZCBwcm9taXNlXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gbW9kZWxzIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyBpbW1lZGlhdGVseVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgaW5kZXg8TT4obW9kZWxzOiBDb25zdHJ1Y3RvcjxNPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJvY2Vzc2VzIHJlc3VsdHMgZnJvbSBhIHN0YXRlIHF1ZXJ5IGl0ZXJhdG9yXG4gICAqIEBzdW1tYXJ5IEl0ZXJhdGVzIHRocm91Z2ggcXVlcnkgcmVzdWx0cyBhbmQgY29udmVydHMgdGhlbSB0byBhIHN0cnVjdHVyZWQgZm9ybWF0XG4gICAqIEBwYXJhbSB7TG9nZ2VyfSBsb2cgLSBMb2dnZXIgaW5zdGFuY2UgZm9yIGRlYnVnZ2luZ1xuICAgKiBAcGFyYW0ge0l0ZXJhdG9ycy5TdGF0ZVF1ZXJ5SXRlcmF0b3J9IGl0ZXJhdG9yIC0gVGhlIHN0YXRlIHF1ZXJ5IGl0ZXJhdG9yXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzSGlzdG9yeT1mYWxzZV0gLSBXaGV0aGVyIHRoaXMgaXMgYSBoaXN0b3J5IHF1ZXJ5XG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55W10+fSBQcm9taXNlIHJlc29sdmluZyB0byBhbiBhcnJheSBvZiBwcm9jZXNzZWQgcmVzdWx0c1xuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBSZXN1bHRJdGVyYXRvclxuICAgKiAgIHBhcnRpY2lwYW50IEl0ZXJhdG9yXG4gICAqXG4gICAqICAgQ2FsbGVyLT4+UmVzdWx0SXRlcmF0b3I6IHJlc3VsdEl0ZXJhdG9yKGxvZywgaXRlcmF0b3IsIGlzSGlzdG9yeSlcbiAgICogICBsb29wIFVudGlsIGRvbmVcbiAgICogICAgIFJlc3VsdEl0ZXJhdG9yLT4+SXRlcmF0b3I6IG5leHQoKVxuICAgKiAgICAgSXRlcmF0b3ItLT4+UmVzdWx0SXRlcmF0b3I6IHsgdmFsdWUsIGRvbmUgfVxuICAgKiAgICAgYWx0IEhhcyB2YWx1ZVxuICAgKiAgICAgICBSZXN1bHRJdGVyYXRvci0+PlJlc3VsdEl0ZXJhdG9yOiBQcm9jZXNzIHZhbHVlIGJhc2VkIG9uIGlzSGlzdG9yeVxuICAgKiAgICAgICBSZXN1bHRJdGVyYXRvci0+PlJlc3VsdEl0ZXJhdG9yOiBBZGQgdG8gcmVzdWx0cyBhcnJheVxuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqICAgUmVzdWx0SXRlcmF0b3ItPj5JdGVyYXRvcjogY2xvc2UoKVxuICAgKiAgIFJlc3VsdEl0ZXJhdG9yLS0+PkNhbGxlcjogYWxsUmVzdWx0c1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3VsdEl0ZXJhdG9yKFxuICAgIGxvZzogTG9nZ2VyLFxuICAgIGl0ZXJhdG9yOiBJdGVyYXRvcnMuU3RhdGVRdWVyeUl0ZXJhdG9yLFxuICAgIGlzSGlzdG9yeSA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IGFsbFJlc3VsdHMgPSBbXTtcbiAgICBsZXQgcmVzOiB7IHZhbHVlOiBhbnk7IGRvbmU6IGJvb2xlYW4gfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcbiAgICB3aGlsZSAoIXJlcy5kb25lKSB7XG4gICAgICBpZiAocmVzLnZhbHVlICYmIHJlcy52YWx1ZS52YWx1ZS50b1N0cmluZygpKSB7XG4gICAgICAgIGxldCBqc29uUmVzOiBhbnkgPSB7fTtcbiAgICAgICAgbG9nLmRlYnVnKHJlcy52YWx1ZS52YWx1ZS50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgICAgICBpZiAoaXNIaXN0b3J5IC8qICYmIGlzSGlzdG9yeSA9PT0gdHJ1ZSovKSB7XG4gICAgICAgICAganNvblJlcy5UeElkID0gcmVzLnZhbHVlLnR4SWQ7XG4gICAgICAgICAganNvblJlcy5UaW1lc3RhbXAgPSByZXMudmFsdWUudGltZXN0YW1wO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBqc29uUmVzLlZhbHVlID0gSlNPTi5wYXJzZShyZXMudmFsdWUudmFsdWUudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKGVycik7XG4gICAgICAgICAgICBqc29uUmVzLlZhbHVlID0gcmVzLnZhbHVlLnZhbHVlLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGpzb25SZXMgPSBKU09OLnBhcnNlKHJlcy52YWx1ZS52YWx1ZS50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIGpzb25SZXMgPSByZXMudmFsdWUudmFsdWUudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhbGxSZXN1bHRzLnB1c2goanNvblJlcyk7XG4gICAgICB9XG4gICAgICByZXMgPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgQ2xvc2luZyBpdGVyYXRvciBhZnRlciAke2FsbFJlc3VsdHMubGVuZ3RofSByZXN1bHRzYCk7XG4gICAgYXdhaXQgaXRlcmF0b3IuY2xvc2UoKTtcbiAgICByZXR1cm4gYWxsUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSByYXcgcXVlcnkgYWdhaW5zdCB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgUGVyZm9ybXMgYSByaWNoIHF1ZXJ5IHVzaW5nIENvdWNoREIgc3ludGF4IGFnYWluc3QgdGhlIEZhYnJpYyBzdGF0ZSBkYXRhYmFzZVxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSByZXR1cm4gdHlwZVxuICAgKiBAcGFyYW0ge01hbmdvUXVlcnl9IHJhd0lucHV0IC0gVGhlIE1hbmdvIFF1ZXJ5IHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIHtib29sZWFufSBkb2NzT25seSAtIFdoZXRoZXIgdG8gcmV0dXJuIG9ubHkgZG9jdW1lbnRzIChub3QgdXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uKVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMsIGluY2x1ZGluZyB0aGUgY2hhaW5jb2RlIHN0dWIgYW5kIGxvZ2dlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFI+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcXVlcnkgcmVzdWx0c1xuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBGYWJyaWNDb250cmFjdEFkYXB0ZXJcbiAgICogICBwYXJ0aWNpcGFudCBTdHViXG4gICAqICAgcGFydGljaXBhbnQgU3RhdGVEQlxuICAgKlxuICAgKiAgIENhbGxlci0+PkZhYnJpY0NvbnRyYWN0QWRhcHRlcjogcmF3KHJhd0lucHV0LCBkb2NzT25seSwgY3R4KVxuICAgKiAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci0+PkZhYnJpY0NvbnRyYWN0QWRhcHRlcjogRXh0cmFjdCBsaW1pdCBhbmQgc2tpcFxuICAgKiAgIGFsdCBXaXRoIHBhZ2luYXRpb25cbiAgICogICAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci0+PlN0dWI6IGdldFF1ZXJ5UmVzdWx0V2l0aFBhZ2luYXRpb24ocXVlcnksIGxpbWl0LCBza2lwKVxuICAgKiAgIGVsc2UgV2l0aG91dCBwYWdpbmF0aW9uXG4gICAqICAgICBGYWJyaWNDb250cmFjdEFkYXB0ZXItPj5TdHViOiBnZXRRdWVyeVJlc3VsdChxdWVyeSlcbiAgICogICBlbmRcbiAgICogICBTdHViLT4+U3RhdGVEQjogRXhlY3V0ZSBxdWVyeVxuICAgKiAgIFN0YXRlREItLT4+U3R1YjogSXRlcmF0b3JcbiAgICogICBTdHViLS0+PkZhYnJpY0NvbnRyYWN0QWRhcHRlcjogSXRlcmF0b3JcbiAgICogICBGYWJyaWNDb250cmFjdEFkYXB0ZXItPj5GYWJyaWNDb250cmFjdEFkYXB0ZXI6IHJlc3VsdEl0ZXJhdG9yKGxvZywgaXRlcmF0b3IpXG4gICAqICAgRmFicmljQ29udHJhY3RBZGFwdGVyLS0+PkNhbGxlcjogcmVzdWx0c1xuICAgKi9cbiAgYXN5bmMgcmF3PFIsIEQgZXh0ZW5kcyBib29sZWFuPihcbiAgICByYXdJbnB1dDogTWFuZ29RdWVyeSxcbiAgICBkb2NzT25seTogRCA9IHRydWUgYXMgRCxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxGYWJyaWNDb250cmFjdENvbnRleHQ+XG4gICk6IFByb21pc2U8UmF3UmVzdWx0PFIsIEQ+PiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCwgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yYXcpO1xuXG4gICAgY29uc3QgZW5hYmxlU2VncmVnYXRlcyA9ICFhcmdzLmxlbmd0aCB8fCBhcmdzWzBdICE9PSB0cnVlO1xuICAgIGNvbnN0IGZ1bGx5U2VncmVnYXRlZCA9IGVuYWJsZVNlZ3JlZ2F0ZXMgJiYgY3R4LmlzRnVsbHlTZWdyZWdhdGVkO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxJbnB1dCA9IHsgLi4uKHJhd0lucHV0IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pIH07XG4gICAgY29uc3QgeyBza2lwLCBsaW1pdCB9ID0gb3JpZ2luYWxJbnB1dDtcbiAgICBjb25zdCBib29rbWFyayA9IG9yaWdpbmFsSW5wdXRbXCJib29rbWFya1wiXTtcbiAgICBjb25zdCBoYXNTb3J0ID1cbiAgICAgIEFycmF5LmlzQXJyYXkoKG9yaWdpbmFsSW5wdXQgYXMgUmVjb3JkPHN0cmluZywgYW55Pikuc29ydCkgJiZcbiAgICAgIChvcmlnaW5hbElucHV0IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLnNvcnQubGVuZ3RoID4gMDtcbiAgICBjb25zdCBwa0ZpZWxkID1cbiAgICAgIHR5cGVvZiBvcmlnaW5hbElucHV0W1wiX19wa0ZpZWxkXCJdID09PSBcInN0cmluZ1wiICYmXG4gICAgICBvcmlnaW5hbElucHV0W1wiX19wa0ZpZWxkXCJdLnRyaW0oKS5sZW5ndGhcbiAgICAgICAgPyBTdHJpbmcob3JpZ2luYWxJbnB1dFtcIl9fcGtGaWVsZFwiXSlcbiAgICAgICAgOiBTdHJpbmcoY3R4Py5nZXRPclVuZGVmaW5lZChcInByaXZhdGVQYWdpbmF0aW9uVGllQnJlYWtlclwiKSB8fCBcImlkXCIpO1xuICAgIGNvbnN0IGhhc1NraXAgPSBza2lwICE9PSB1bmRlZmluZWQgJiYgc2tpcCAhPT0gbnVsbCAmJiBOdW1iZXIoc2tpcCkgPiAwO1xuICAgIGNvbnN0IGhhc0Jvb2ttYXJrID1cbiAgICAgIGJvb2ttYXJrICE9PSB1bmRlZmluZWQgJiYgYm9va21hcmsgIT09IG51bGwgJiYgYm9va21hcmsgIT09IFwiXCI7XG4gICAgY29uc3QgcGFnaW5hdGlvbkFjdGl2ZSA9IEJvb2xlYW4obGltaXQgfHwgaGFzU2tpcCB8fCBoYXNCb29rbWFyayk7XG4gICAgY29uc3Qgc2hvdWxkUGFnaW5hdGUgPSBCb29sZWFuKFxuICAgICAgcGFnaW5hdGlvbkFjdGl2ZSAmJlxuICAgICAgICAoZW5hYmxlU2VncmVnYXRlcyB8fCBoYXNTa2lwIHx8IGhhc0Jvb2ttYXJrIHx8IGhhc1NvcnQpXG4gICAgKTtcbiAgICBjb25zdCBiYXNlSW5wdXQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLm9yaWdpbmFsSW5wdXQgfTtcbiAgICBkZWxldGUgYmFzZUlucHV0W1wic2tpcFwiXTtcbiAgICBkZWxldGUgYmFzZUlucHV0W1wiYm9va21hcmtcIl07XG4gICAgZGVsZXRlIGJhc2VJbnB1dFtcIl9fcGtGaWVsZFwiXTtcbiAgICBsZXQgcmVzcCA9IHsgZG9jczogW10sIGJvb2ttYXJrOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkIH07XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJhdyBxdWVyeSBzdGFydCBmdWxseVNlZ3JlZ2F0ZWQ9JHtmdWxseVNlZ3JlZ2F0ZWR9IGVuYWJsZVNlZ3JlZ2F0ZXM9JHtlbmFibGVTZWdyZWdhdGVzfSBwYWdpbmF0aW9uQWN0aXZlPSR7cGFnaW5hdGlvbkFjdGl2ZX0gbGltaXQ9JHtsaW1pdH0gc2tpcD0ke3NraXB9IGJvb2ttYXJrPSR7Ym9va21hcmt9IHBrRmllbGQ9JHtwa0ZpZWxkfSBxdWVyeT0ke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBvcmlnaW5hbElucHV0XG4gICAgICApfWBcbiAgICApO1xuXG4gICAgLy8gUXVlcnkgcHVibGljIHN0YXRlIG9ubHkgd2hlbiB0aGUgbW9kZWwgaXMgTk9UIGZ1bGx5IHNlZ3JlZ2F0ZWRcbiAgICBpZiAoIWZ1bGx5U2VncmVnYXRlZCkge1xuICAgICAgbGV0IGl0ZXJhdG9yOiBJdGVyYXRvcnMuU3RhdGVRdWVyeUl0ZXJhdG9yO1xuICAgICAgaWYgKHNob3VsZFBhZ2luYXRlKSB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRlZElucHV0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0geyAuLi5iYXNlSW5wdXQgfTtcbiAgICAgICAgZGVsZXRlIHBhZ2luYXRlZElucHV0W1wibGltaXRcIl07XG4gICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICBgUmV0cmlldmluZyBwdWJsaWMgcGFnaW5hdGVkIGl0ZXJhdG9yOiBsaW1pdDogJHtsaW1pdH0vIHNraXA6ICR7c2tpcH0gYm9va21hcms9JHtib29rbWFya31gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBTdGF0ZVF1ZXJ5UmVzcG9uc2U8SXRlcmF0b3JzLlN0YXRlUXVlcnlJdGVyYXRvcj4gPVxuICAgICAgICAgIChhd2FpdCB0aGlzLnF1ZXJ5UmVzdWx0UGFnaW5hdGVkKFxuICAgICAgICAgICAgY3R4LnN0dWIsXG4gICAgICAgICAgICBwYWdpbmF0ZWRJbnB1dCxcbiAgICAgICAgICAgIGxpbWl0IHx8IDI1MCxcbiAgICAgICAgICAgIChza2lwIGFzIGFueSk/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBib29rbWFyayxcbiAgICAgICAgICAgIC4uLltjdHggYXMgRmFicmljQ29udHJhY3RDb250ZXh0XVxuICAgICAgICAgICkpIGFzIFN0YXRlUXVlcnlSZXNwb25zZTxJdGVyYXRvcnMuU3RhdGVRdWVyeUl0ZXJhdG9yPjtcbiAgICAgICAgcmVzcC5ib29rbWFyayA9IHJlc3BvbnNlLm1ldGFkYXRhLmJvb2ttYXJrO1xuICAgICAgICBpdGVyYXRvciA9IHJlc3BvbnNlLml0ZXJhdG9yO1xuICAgICAgICBsb2cuZGVidWcoYFJldHJpZXZlZCBwdWJsaWMgcGFnaW5nIGl0ZXJhdG9yYCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICBgcHVibGljIHBhZ2luYXRlZCByZXNwb25zZSBib29rbWFyaz0ke3Jlc3AuYm9va21hcmt9IHF1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBwYWdpbmF0ZWRJbnB1dFxuICAgICAgICAgICl9YFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKFwiUmV0cmlldmluZyBsaXN0aW5nIHB1YmxpYyBpdGVyYXRvclwiKTtcbiAgICAgICAgaXRlcmF0b3IgPSAoYXdhaXQgdGhpcy5xdWVyeVJlc3VsdChcbiAgICAgICAgICBjdHguc3R1YixcbiAgICAgICAgICB7IC4uLmJhc2VJbnB1dCB9LFxuICAgICAgICAgIGN0eFxuICAgICAgICApKSBhcyBJdGVyYXRvcnMuU3RhdGVRdWVyeUl0ZXJhdG9yO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBSZXRyaWV2ZWQgcHVibGljIGxpc3RpbmcgaXRlcmF0b3JgKTtcblxuICAgICAgcmVzcC5kb2NzID0gKGF3YWl0IHRoaXMucmVzdWx0SXRlcmF0b3IobG9nLCBpdGVyYXRvcikpIGFzIGFueTtcbiAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgYHJldHVybmluZyAke0FycmF5LmlzQXJyYXkocmVzcC5kb2NzKSA/IHJlc3AuZG9jcy5sZW5ndGggOiAxfSByZXN1bHRzYFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKFwiU2tpcHBpbmcgcHVibGljIHN0YXRlIHF1ZXJ5IChmdWxseSBzZWdyZWdhdGVkIG1vZGVsKVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IGVuYWJsZVNlZ3JlZ2F0ZXMgPyBjdHguZ2V0UmVhZENvbGxlY3Rpb25zKCkgOiB1bmRlZmluZWQ7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJlYWQgY29sbGVjdGlvbnMgZm9yIHJhdyBxdWVyeTogJHtKU09OLnN0cmluZ2lmeShjb2xsZWN0aW9ucyB8fCBbXSl9YFxuICAgICk7XG5cbiAgICBpZiAoY29sbGVjdGlvbnMgJiYgY29sbGVjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAvLyBCdWlsZCBhIGZyZXNoIGlucHV0IHdpdGggbGltaXQvc2tpcC9ib29rbWFyayByZXN0b3JlZFxuICAgICAgY29uc3Qgc2VncmVnYXRlZElucHV0ID0geyAuLi5iYXNlSW5wdXQgfTtcbiAgICAgIGlmIChsaW1pdCkgc2VncmVnYXRlZElucHV0LmxpbWl0ID0gbGltaXQ7XG4gICAgICBpZiAoc2tpcCkgc2VncmVnYXRlZElucHV0LnNraXAgPSBza2lwO1xuICAgICAgaWYgKGJvb2ttYXJrKSBzZWdyZWdhdGVkSW5wdXRbXCJib29rbWFya1wiXSA9IGJvb2ttYXJrO1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgc2VncmVnYXRlZCBpbnB1dCBwcmVwYXJlZDogJHtKU09OLnN0cmluZ2lmeShzZWdyZWdhdGVkSW5wdXQpfWBcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNlZ3JlZ2F0ZWQ6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBRdWVyeWluZyBmcm9tICR7Y29sbGVjdGlvbn1gKTtcbiAgICAgICAgY29uc3QgZnJvbUNvbHMgPSBhd2FpdCB0aGlzLmZvclByaXZhdGUoY29sbGVjdGlvbikucmF3KFxuICAgICAgICAgIHsgLi4uc2VncmVnYXRlZElucHV0IH0gYXMgTWFuZ29RdWVyeSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIC4uLmN0eEFyZ3NcbiAgICAgICAgKTtcbiAgICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgICAgYHJlY2VpdmVkICR7KGZyb21Db2xzIGFzIHVua25vd24gYXMgYW55W10pLmxlbmd0aH0gZnJvbSAke2NvbGxlY3Rpb259YFxuICAgICAgICApO1xuICAgICAgICBzZWdyZWdhdGVkLnB1c2goZnJvbUNvbHMpO1xuICAgICAgfVxuICAgICAgLy8gUHJlZmVyIHRoZSByZXNwb25zZSB3aXRoIHRoZSBtb3N0IHJlc3VsdHMgc28gbWl4ZWQgYW5kIGZ1bGx5IHNlZ3JlZ2F0ZWRcbiAgICAgIC8vIHJlYWRzIHJldHVybiB0aGUgY29sbGVjdGlvbiB0aGF0IGFjdHVhbGx5IG1hdGNoZWQgdGhlIHF1ZXJ5LlxuICAgICAgcmVzcCA9IHNlZ3JlZ2F0ZWQucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgaWYgKCFhY2MpIHJldHVybiBjdXJyO1xuICAgICAgICBpZiAoY3Vyci5kb2NzICYmIGN1cnIuZG9jcy5sZW5ndGggPj0gYWNjPy5kb2NzLmxlbmd0aCkgcmV0dXJuIGN1cnI7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCByZXNwKTtcbiAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgYHNlZ3JlZ2F0ZWQgcXVlcnkgcmVzb2x2ZWQgZG9jcz0ke0FycmF5LmlzQXJyYXkocmVzcC5kb2NzKSA/IHJlc3AuZG9jcy5sZW5ndGggOiAwfSBib29rbWFyaz0ke3Jlc3AuYm9va21hcmt9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZG9jc09ubHkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgYHJhdyBxdWVyeSByZXR1cm5pbmcgZG9jc09ubHk9JHtkb2NzT25seX0gZG9jcz0ke0FycmF5LmlzQXJyYXkocmVzcC5kb2NzKSA/IHJlc3AuZG9jcy5sZW5ndGggOiAwfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcC5kb2NzIGFzIGFueTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJhdyBxdWVyeSByZXR1cm5pbmcgZG9jcy9ib29rbWFyayBkb2NzPSR7QXJyYXkuaXNBcnJheShyZXNwLmRvY3MpID8gcmVzcC5kb2NzLmxlbmd0aCA6IDB9IGJvb2ttYXJrPSR7cmVzcC5ib29rbWFya31gXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcCBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExpc3RzIGFsbCByZWNvcmRzIG9mIGEgbW9kZWwgdXNpbmcgcmFuZ2UgcXVlcmllcyAoZGV0ZXJtaW5pc3RpYywgd3JpdGUtc2FmZSlcbiAgICogQHN1bW1hcnkgSXRlcmF0ZXMgcmVjb3JkcyB2aWEgYGdldFN0YXRlQnlQYXJ0aWFsQ29tcG9zaXRlS2V5YCAocHVibGljKSBhbmRcbiAgICogYGdldFByaXZhdGVEYXRhQnlQYXJ0aWFsQ29tcG9zaXRlS2V5YCAocHJpdmF0ZS9zaGFyZWQpLCBmb2xsb3dpbmcgdGhlIHNhbWUgY29sbGVjdGlvbi1yb3V0aW5nXG4gICAqIGxvZ2ljIGFzIGByYXcoKWAgYnV0IHVzaW5nIEZhYnJpYyByYW5nZSBxdWVyaWVzIGluc3RlYWQgb2YgTWFuZ28gc2VsZWN0b3JzLlxuICAgKiBVbmxpa2UgYHJhdygpYCwgdGhpcyBtZXRob2QgaXMgc2FmZSB0byB1c2UgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMgd3JpdGVzIGJlY2F1c2VcbiAgICogcmFuZ2UgcXVlcmllcyBhcmUgZGV0ZXJtaW5pc3RpYyBhbmQgZG8gbm90IGJsb2NrIHN1YnNlcXVlbnQgYHB1dFN0YXRlYC9gcHV0UHJpdmF0ZURhdGFgIGNhbGxzLlxuICAgKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IGNsYXp6IC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthdHRyaWJ1dGVzPVtdXSAtIFBhcnRpYWwgY29tcG9zaXRlIGtleSBhdHRyaWJ1dGVzIHRvIGZpbHRlciBieSAoZW1wdHkgPSBhbGwgcmVjb3JkcylcbiAgICogQHBhcmFtIHsuLi5Db250ZXh0dWFsQXJnczxGYWJyaWNDb250cmFjdENvbnRleHQ+fSBhcmdzIC0gQ29udGV4dHVhbCBhcmd1bWVudHMgaW5jbHVkaW5nIHRoZSBjaGFpbmNvZGUgY29udGV4dFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5IG9mIHJlY29uc3RydWN0ZWQgbW9kZWwgaW5zdGFuY2VzXG4gICAqL1xuICBhc3luYyByYW5nZUxpc3Q8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgYXR0cmlidXRlczogc3RyaW5nW10gPSBbXSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxGYWJyaWNDb250cmFjdENvbnRleHQ+XG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yYW5nZUxpc3QpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgY29uc3QgZnVsbHlTZWdyZWdhdGVkID0gY3R4LmlzRnVsbHlTZWdyZWdhdGVkO1xuXG4gICAgY29uc3QgZGVzZXJpYWxpemVFbnRyeSA9IChyYXc6IFVpbnQ4QXJyYXkpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IEJ1ZmZlci5mcm9tKHJhdykudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgICAgaWYgKCFzdHIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gRmFicmljQ29udHJhY3RBZGFwdGVyLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoc3RyKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIENvbGxlY3QgcmF3IGRhdGEga2V5ZWQgYnkgY29tcG9zaXRlIGtleSwgbWVyZ2luZyBwdWJsaWMgKyBwcml2YXRlIGluIG9yZGVyIChzYW1lIGFzIHJlYWQoKSlcbiAgICBjb25zdCByYXdCeUtleSA9IG5ldyBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xuXG4gICAgaWYgKCFmdWxseVNlZ3JlZ2F0ZWQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgcmFuZ2VMaXN0IHB1YmxpYzogb2JqZWN0VHlwZT0ke3RhYmxlTmFtZX0gYXR0cmlidXRlcz0ke0pTT04uc3RyaW5naWZ5KGF0dHJpYnV0ZXMpfWApO1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBhd2FpdCBjdHguc3R1Yi5nZXRTdGF0ZUJ5UGFydGlhbENvbXBvc2l0ZUtleSh0YWJsZU5hbWUsIGF0dHJpYnV0ZXMpO1xuICAgICAgbGV0IG5leHQgPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICBpZiAobmV4dC52YWx1ZT8udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gZGVzZXJpYWxpemVFbnRyeShuZXh0LnZhbHVlLnZhbHVlKTtcbiAgICAgICAgICBpZiAoZGF0YSkgcmF3QnlLZXkuc2V0KG5leHQudmFsdWUua2V5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuICAgICAgfVxuICAgICAgYXdhaXQgaXRlcmF0b3IuY2xvc2UoKTtcbiAgICAgIGxvZy5kZWJ1ZyhgcmFuZ2VMaXN0IHB1YmxpYzogJHtyYXdCeUtleS5zaXplfSBlbnRyaWVzYCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29sbGVjdGlvbnMgPSBjdHguZ2V0UmVhZENvbGxlY3Rpb25zKCk7XG4gICAgaWYgKGNvbGxlY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgICBsb2cuZGVidWcoYHJhbmdlTGlzdCBwcml2YXRlOiBjb2xsZWN0aW9uPSR7Y29sbGVjdGlvbn0gb2JqZWN0VHlwZT0ke3RhYmxlTmFtZX0gYXR0cmlidXRlcz0ke0pTT04uc3RyaW5naWZ5KGF0dHJpYnV0ZXMpfWApO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGF3YWl0IGN0eC5zdHViLmdldFByaXZhdGVEYXRhQnlQYXJ0aWFsQ29tcG9zaXRlS2V5KGNvbGxlY3Rpb24sIHRhYmxlTmFtZSwgYXR0cmlidXRlcyk7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGxldCBuZXh0ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgIGlmIChuZXh0LnZhbHVlPy52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGRlc2VyaWFsaXplRW50cnkobmV4dC52YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHJhd0J5S2V5LmdldChuZXh0LnZhbHVlLmtleSk7XG4gICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXhpc3RpbmcsIGRhdGEpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhd0J5S2V5LnNldChuZXh0LnZhbHVlLmtleSwgZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBpdGVyYXRvci5jbG9zZSgpO1xuICAgICAgICBsb2cuZGVidWcoYHJhbmdlTGlzdCBwcml2YXRlOiBjb2xsZWN0aW9uPSR7Y29sbGVjdGlvbn0gJHtjb3VudH0gZW50cmllc2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHM6IE1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2NvbXBvc2l0ZUtleSwgZGF0YV0gb2YgcmF3QnlLZXkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgYXR0cmlidXRlczoga2V5UGFydHMgfSA9IGN0eC5zdHViLnNwbGl0Q29tcG9zaXRlS2V5KGNvbXBvc2l0ZUtleSk7XG4gICAgICAgIGNvbnN0IGlkID0ga2V5UGFydHNbMF07XG4gICAgICAgIGlmICghaWQpIGNvbnRpbnVlO1xuICAgICAgICByZXN1bHRzLnB1c2godGhpcy5yZXZlcnQoZGF0YSwgY2xhenosIGlkLCB1bmRlZmluZWQsIGN0eCkpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2cud2FybihgcmFuZ2VMaXN0OiBza2lwcGluZyBlbnRyeSAke2NvbXBvc2l0ZUtleX06ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYHJhbmdlTGlzdDogcmV0dXJuaW5nICR7cmVzdWx0cy5sZW5ndGh9ICR7Y2xhenoubmFtZX0gaW5zdGFuY2VzYCk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBhc3luYyB2aWV3PFI+KFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZG9jOiBzdHJpbmcsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHZpZXdOYW1lOiBzdHJpbmcsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIC4uLl9hcmdzOiBDb250ZXh0dWFsQXJnczxGYWJyaWNDb250cmFjdENvbnRleHQ+XG4gICk6IFByb21pc2U8Vmlld1Jlc3BvbnNlPFI+PiB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICBcIkZhYnJpYyBjb250cmFjdHMgZG8gbm90IHN1cHBvcnQgQ291Y2hEQiB2aWV3cy5cIlxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBTdGF0ZW1lbnQ8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvdmVycmlkZXM/OiBQYXJ0aWFsPEFkYXB0ZXJGbGFncz5cbiAgKTogRmFicmljU3RhdGVtZW50PE0sIGFueT4ge1xuICAgIHJldHVybiBuZXcgRmFicmljU3RhdGVtZW50KHRoaXMgYXMgYW55LCBvdmVycmlkZXMpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgdXBkYXRlQWxsPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgdGFibGVOYW1lOiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGVbXSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPEZhYnJpY0NvbnRyYWN0Q29udGV4dD5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBpZiAoaWQubGVuZ3RoICE9PSBtb2RlbC5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMudXBkYXRlQWxsKTtcbiAgICBjb25zdCB0YWJsZUxhYmVsID0gTW9kZWwudGFibGVOYW1lKHRhYmxlTmFtZSk7XG4gICAgbG9nLmRlYnVnKGBVcGRhdGluZyAke2lkLmxlbmd0aH0gZW50cmllcyAke3RhYmxlTGFiZWx9IHRhYmxlYCk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgaWQubWFwKChpLCBjb3VudCkgPT4gdGhpcy51cGRhdGUodGFibGVOYW1lLCBpLCBtb2RlbFtjb3VudF0sIC4uLmN0eEFyZ3MpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG1vZGVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa1xuICAgKiBAcGFyYW0gYXJnc1xuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcGFyZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPEZhYnJpY0NvbnRyYWN0Q29udGV4dD5cbiAgKTogUHJlcGFyZWRNb2RlbCAmIHtcbiAgICBzZWdyZWdhdGVkPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj47XG4gIH0ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucHJlcGFyZSk7XG4gICAgY29uc3Qgc3BsaXQ6IFNlZ3JlZ2F0ZWRNb2RlbDxNPiA9IE1vZGVsLnNlZ3JlZ2F0ZShtb2RlbCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKG1vZGVsLmNvbnN0cnVjdG9yIGFzIGFueSk7XG4gICAgY29uc3QgcGsgPSBNb2RlbC5wayhtb2RlbC5jb25zdHJ1Y3RvciBhcyBhbnkpO1xuICAgIGNvbnN0IGlkID0gbW9kZWxbcGsgYXMga2V5b2YgTV07XG5cbiAgICBjb25zdCBpc01pcnJvciA9IGN0eC5nZXRPclVuZGVmaW5lZChcIm1pcnJvclwiKSBhcyBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgbWFwVG9SZWNvcmQgPSBmdW5jdGlvbiAoXG4gICAgICB0aGlzOiBGYWJyaWNDb250cmFjdEFkYXB0ZXIsXG4gICAgICBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICBrZXlzT3ZlcnJpZGU/OiBzdHJpbmdbXVxuICAgICkge1xuICAgICAgaWYgKGtleXNPdmVycmlkZSlcbiAgICAgICAga2V5c092ZXJyaWRlID0gWy4uLm5ldyBTZXQoWy4uLmtleXNPdmVycmlkZSwgcGsgYXMgc3RyaW5nXSldO1xuICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmVudHJpZXMob2JqKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1bTogUmVjb3JkPHN0cmluZywgYW55PiwgW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gYWNjdW07XG4gICAgICAgICAgaWYgKGtleXNPdmVycmlkZSAmJiAha2V5c092ZXJyaWRlLmluY2x1ZGVzKGtleSkpIHJldHVybiBhY2N1bTtcbiAgICAgICAgICBjb25zdCBtYXBwZWRQcm9wID0gTW9kZWwuY29sdW1uTmFtZShtb2RlbCwga2V5IGFzIGFueSk7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZXNlcnZlZChtYXBwZWRQcm9wKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBQcm9wZXJ0eSBuYW1lICR7bWFwcGVkUHJvcH0gaXMgcmVzZXJ2ZWRgKTtcbiAgICAgICAgICB2YWwgPSB2YWwgaW5zdGFuY2VvZiBEYXRlID8gbmV3IERhdGUodmFsKSA6IHZhbDtcbiAgICAgICAgICBhY2N1bVttYXBwZWRQcm9wXSA9IHZhbDtcbiAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3VsdCkuZmlsdGVyKChrKSA9PiBCb29sZWFuKHJlc3VsdFtrXSkpLmxlbmd0aCkge1xuICAgICAgICAvLyBBZGQgdGFibGUgaWRlbnRpZmllclxuICAgICAgICByZXN1bHRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LmJpbmQodGhpcyk7XG5cbiAgICBsb2cuc2lsbHkoXG4gICAgICBgUHJlcGFyaW5nIHJlY29yZCBmb3IgJHt0YWJsZU5hbWV9IHRhYmxlIHdpdGggcGsgJHsobW9kZWwgYXMgYW55KVtwa119YFxuICAgICk7XG5cbiAgICBjb25zdCBzZWdyZWdhdGVkV3JpdGVLZXlzID0gY3R4LmdldFNlZ3JlZ2F0ZWRXcml0ZXMoKTtcbiAgICBjb25zdCBzZWdyZWdhdGVkV3JpdGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgLy8gT25seSBhcHBseSBzZWdyZWdhdGVkIHdyaXRlcyB3aGVuIHRoZSBjdXJyZW50IG1vZGVsIGFjdHVhbGx5IGhhcyBhIHRyYW5zaWVudCBzcGxpdC5cbiAgICAvLyBUaGUgc2FtZSBGYWJyaWNDb250cmFjdENvbnRleHQgY2FuIGJlIHJldXNlZCBhY3Jvc3MgbmVzdGVkIG9wZXJhdGlvbnMgKGZvciBleGFtcGxlXG4gICAgLy8gc2VxdWVuY2UgdXBzZXJ0cyBkdXJpbmcgcGVyc2lzdGVudCB2ZXJzaW9uIGdlbmVyYXRpb24pLiBJbiB0aG9zZSBjYXNlcywgd2UgbXVzdCBub3RcbiAgICAvLyBhdHRlbXB0IHRvIGFwcGx5IHBhcmVudC1tb2RlbCBzZWdyZWdhdGVkIHdyaXRlIGtleXMgdG8gdW5yZWxhdGVkIG1vZGVscy5cbiAgICBpZiAoXG4gICAgICBzZWdyZWdhdGVkV3JpdGVLZXlzICYmXG4gICAgICBzcGxpdC50cmFuc2llbnQgJiZcbiAgICAgIHR5cGVvZiBzcGxpdC50cmFuc2llbnQgPT09IFwib2JqZWN0XCJcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBpbiBzZWdyZWdhdGVkV3JpdGVLZXlzKSB7XG4gICAgICAgIHNlZ3JlZ2F0ZWRXcml0ZXNbY29sbGVjdGlvbl0gPSBzZWdyZWdhdGVkV3JpdGVzW2NvbGxlY3Rpb25dIHx8IHt9O1xuICAgICAgICBzZWdyZWdhdGVkV3JpdGVzW2NvbGxlY3Rpb25dW2lkIGFzIGFueV0gPSBtYXBUb1JlY29yZChcbiAgICAgICAgICBjdHguZ2V0T3JVbmRlZmluZWQoXCJmb3JjZVNlZ3JlZ2F0ZVdyaXRlXCIpXG4gICAgICAgICAgICA/IHNwbGl0Lm1vZGVsXG4gICAgICAgICAgICA6IChzcGxpdC50cmFuc2llbnQgYXMgYW55KSB8fCB7fSxcbiAgICAgICAgICBzZWdyZWdhdGVkV3JpdGVLZXlzW2NvbGxlY3Rpb25dXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW4gbWlycm9yIG1vZGUsIHRoZSByZWNvcmQgc2hvdWxkIGNvbnRhaW4gQUxMIG1vZGVsIHByb3BlcnRpZXMgKGZ1bGwgY29weSlcbiAgICBjb25zdCByZWNvcmQgPSBpc01pcnJvciA/IG1hcFRvUmVjb3JkKG1vZGVsKSA6IG1hcFRvUmVjb3JkKHNwbGl0Lm1vZGVsKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZWNvcmQsXG4gICAgICBpZDogKG1vZGVsIGFzIGFueSlbcGtdIGFzIHN0cmluZyxcbiAgICAgIHRyYW5zaWVudDpcbiAgICAgICAgIWlzTWlycm9yICYmIHNwbGl0LnRyYW5zaWVudCAmJiBPYmplY3Qua2V5cyhzcGxpdC50cmFuc2llbnQpLmxlbmd0aFxuICAgICAgICAgID8gbWFwVG9SZWNvcmQoc3BsaXQudHJhbnNpZW50KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgc2VncmVnYXRlZDogaXNNaXJyb3IgPyB1bmRlZmluZWQgOiBzZWdyZWdhdGVkV3JpdGVzLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSByZXZlcnQ8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICB0cmFuc2llbnQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPEZhYnJpY0NvbnRyYWN0Q29udGV4dD5cbiAgKTogTSB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZXZlcnQpO1xuICAgIGNvbnN0IG9iOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgY29uc3QgcGsgPSBNb2RlbC5wayhjbGF6eik7XG4gICAgY29uc3QgcGtQcm9wcyA9IE1vZGVsLnBrUHJvcHMoY2xhenopO1xuICAgIGlmIChwa1Byb3BzPy50eXBlID09PSBOdW1iZXIgJiYgdHlwZW9mIGlkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZCA9IE51bWJlcihpZCk7XG4gICAgfVxuICAgIG9iW3BrIGFzIHN0cmluZ10gPSBpZDtcbiAgICBsb2cuc2lsbHkoYFJlYnVpbGRpbmcgbW9kZWwgJHtjbGF6ei5uYW1lfSBpZCAke2lkfWApO1xuXG4gICAgZnVuY3Rpb24gbWFwVG9Nb2RlbChyOiBSZWNvcmQ8YW55LCBhbnk+KSB7XG4gICAgICBjb25zdCBtID0gKFxuICAgICAgICB0eXBlb2YgY2xhenogPT09IFwic3RyaW5nXCIgPyBNb2RlbC5idWlsZChvYiwgY2xhenopIDogbmV3IGNsYXp6KG9iKVxuICAgICAgKSBhcyBNO1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IE1vZGVsLmdldEF0dHJpYnV0ZXMoY2xhenopO1xuICAgICAgY29uc3Qga2V5cyA9IGF0dHJpYnV0ZXMubGVuZ3RoID8gYXR0cmlidXRlcyA6IE9iamVjdC5rZXlzKG0pO1xuICAgICAgcmV0dXJuIGtleXNcbiAgICAgICAgLmZpbHRlcigoaykgPT4gayAhPT0gKHBrIGFzIHN0cmluZykpXG4gICAgICAgIC5yZWR1Y2UoKGFjY3VtOiBNLCBrZXkpID0+IHtcbiAgICAgICAgICAoYWNjdW0gYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XSA9XG4gICAgICAgICAgICByW01vZGVsLmNvbHVtbk5hbWUoYWNjdW0sIGtleSBhcyBhbnkpXTtcbiAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgIH0sIG0pO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSBtYXBUb01vZGVsKG9iaik7XG5cbiAgICBpZiAodHJhbnNpZW50ICYmICF0aGlzLnNob3VsZFJlYnVpbGRXaXRoVHJhbnNpZW50KGN0eCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgYGZpbHRlcmluZyB0cmFuc2llbnQgcHJvcGVydGllczogJHtPYmplY3Qua2V5cyh0cmFuc2llbnQpLmpvaW4oXCIsIFwiKX1gXG4gICAgICApO1xuICAgICAgcmVzdWx0ID0gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKGFjYywgW2tleSwgdl0pID0+IHtcbiAgICAgICAgaWYgKGtleSA9PT0gcGsgfHwgIShrZXkgaW4gdHJhbnNpZW50KSkge1xuICAgICAgICAgIGFjY1trZXkgYXMga2V5b2YgTV0gPSB2O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBuZXcgY2xhenooKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVidWlsZFdpdGhUcmFuc2llbnQoY3R4OiBGYWJyaWNDb250cmFjdENvbnRleHQpOiBib29sZWFuIHtcbiAgICBpZiAoIWN0eCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjdHguZ2V0T3JVbmRlZmluZWQoXCJyZWJ1aWxkV2l0aFRyYW5zaWVudFwiKSkgcmV0dXJuIHRydWU7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gY3R4LmdldE9yVW5kZWZpbmVkKFwib3BlcmF0aW9uXCIpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIW9wZXJhdGlvbikgcmV0dXJuIHRydWU7XG4gICAgY29uc3Qgb3AgPSBvcGVyYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAhVHJhbnNhY3Rpb25PcGVyYXRpb25LZXlzLm1hcCgoaykgPT4gay50b0xvd2VyQ2FzZSgpKS5pbmNsdWRlcyhvcCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHRNc3AoY29udGV4dDogRmFicmljQ29udHJhY3RDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpZGVudGl0eSA9IGNvbnRleHQuZ2V0KFwiaWRlbnRpdHlcIikgYXNcbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IENsaWVudElkZW50aXR5XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWlkZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgaWRlbnRpdHkgPT09IFwic3RyaW5nXCIpIHJldHVybiBpZGVudGl0eTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGlkZW50aXR5LmdldE1TUElEKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW5mb3JjZU1pcnJvckF1dGhvcml6YXRpb248TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgY3R4OiBGYWJyaWNDb250cmFjdENvbnRleHRcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbWlycm9yTWV0YSA9IE1vZGVsLm1pcnJvcmVkQXQoY2xhenopO1xuICAgIGlmICghbWlycm9yTWV0YSkgcmV0dXJuO1xuICAgIGNvbnN0IG1zcCA9IHRoaXMuZ2V0Q29udGV4dE1zcChjdHgpO1xuICAgIGlmICghbXNwKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgbXNwID09PSBtaXJyb3JNZXRhLm1zcElkIHx8XG4gICAgICAobWlycm9yTWV0YS5jb25kaXRpb24gJiYgbWlycm9yTWV0YS5jb25kaXRpb24obXNwKSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXG4gICAgICAgIGBPcmdhbml6YXRpb24gJHttc3B9IGlzIG5vdCBhdXRob3JpemVkIHRvIG1vZGlmeSBtaXJyb3JlZCBkYXRhYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBjcmVhdGVQcmVmaXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICB0YWJsZU5hbWU6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApIHtcbiAgICBjb25zdCB7IGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuY3JlYXRlUHJlZml4KTtcbiAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gTW9kZWwudGFibGVOYW1lKHRhYmxlTmFtZSk7XG4gICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsKTtcblxuICAgIHJldHVybiBbdGFibGVOYW1lLCBpZCwgcmVjb3JkLCAuLi5jdHhBcmdzXSBhcyBbXG4gICAgICBDb25zdHJ1Y3RvcjxNPixcbiAgICAgIFByaW1hcnlLZXlUeXBlLFxuICAgICAgUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgIC4uLmFueVtdLFxuICAgICAgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIF07XG4gIH1cblxuICBvdmVycmlkZSB1cGRhdGVQcmVmaXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICB0YWJsZU5hbWU6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApOiBhbnlbXSB7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnVwZGF0ZVByZWZpeCk7XG4gICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgcmVjb3JkW0NvdWNoREJLZXlzLlRBQkxFXSA9IE1vZGVsLnRhYmxlTmFtZSh0YWJsZU5hbWUpO1xuICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbCk7XG5cbiAgICByZXR1cm4gW3RhYmxlTmFtZSwgaWQsIHJlY29yZCwgLi4uY3R4QXJnc10gYXMgW1xuICAgICAgQ29uc3RydWN0b3I8TT4sXG4gICAgICBQcmltYXJ5S2V5VHlwZSxcbiAgICAgIFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAuLi5hbnlbXSxcbiAgICAgIEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBdO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNyZWF0ZUFsbFByZWZpeDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIHRhYmxlTmFtZTogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IFsuLi5hbnksIEZhYnJpY0NvbnRyYWN0Q29udGV4dF1cbiAgKTogKHN0cmluZyB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+W10pW10ge1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSBtb2RlbHMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuXG4gICAgY29uc3QgY3R4OiBGYWJyaWNDb250cmFjdENvbnRleHQgPSBhcmdzLnBvcCgpO1xuXG4gICAgY29uc3QgcmVjb3JkcyA9IGlkcy5tYXAoKGlkLCBjb3VudCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gTW9kZWwudGFibGVOYW1lKHRhYmxlTmFtZSk7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWxzW2NvdW50XSk7XG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH0pO1xuICAgIHJldHVybiBbdGFibGVOYW1lLCBpZHMsIHJlY29yZHMsIGN0eCBhcyBhbnldO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZUFsbFByZWZpeDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIHRhYmxlTmFtZTogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IFsuLi5hbnksIEZhYnJpY0NvbnRyYWN0Q29udGV4dF1cbiAgKSB7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG5cbiAgICBjb25zdCBjdHg6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCA9IGFyZ3MucG9wKCk7XG5cbiAgICBjb25zdCByZWNvcmRzID0gaWRzLm1hcCgoaWQsIGNvdW50KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSBNb2RlbC50YWJsZU5hbWUodGFibGVOYW1lKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbHNbY291bnRdKTtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIFt0YWJsZU5hbWUsIGlkcywgcmVjb3JkcywgY3R4IGFzIGFueV07XG4gIH1cblxuICBvdmVycmlkZSBwYXJzZUVycm9yPEUgZXh0ZW5kcyBCYXNlRXJyb3I+KFxuICAgIGVycjogRXJyb3IgfCBzdHJpbmcsXG4gICAgcmVhc29uPzogc3RyaW5nXG4gICk6IEUge1xuICAgIHJldHVybiBGYWJyaWNDb250cmFjdEFkYXB0ZXIucGFyc2VFcnJvcihyZWFzb24gfHwgZXJyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRFxuICApOiBGYWJyaWNDb250ZXh0dWFsaXplZEFyZ3M8QVJHUywgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlPjtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxGYWJyaWNDb250cmFjdENvbnRleHQsIEFSR1M+LFxuICAgIG9wZXJhdGlvbjogTUVUSE9ELFxuICAgIGFsbG93Q3JlYXRlOiBmYWxzZVxuICApOiBGYWJyaWNDb250ZXh0dWFsaXplZEFyZ3M8QVJHUywgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlPjtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxGYWJyaWNDb250cmFjdENvbnRleHQsIEFSR1M+LFxuICAgIG9wZXJhdGlvbjogTUVUSE9ELFxuICAgIGFsbG93Q3JlYXRlOiB0cnVlLFxuICAgIG92ZXJyaWRlcz86IFBhcnRpYWw8RmxhZ3NPZjxGYWJyaWNDb250cmFjdENvbnRleHQ+PlxuICApOiBQcm9taXNlPFxuICAgIEZhYnJpY0NvbnRleHR1YWxpemVkQXJnczxBUkdTLCBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2U+XG4gID47XG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRCxcbiAgICBhbGxvd0NyZWF0ZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG92ZXJyaWRlcz86IFBhcnRpYWw8RmxhZ3NPZjxGYWJyaWNDb250cmFjdENvbnRleHQ+PiB8IEN0eFxuICApOlxuICAgIHwgUHJvbWlzZTxcbiAgICAgICAgRmFicmljQ29udGV4dHVhbGl6ZWRBcmdzPEFSR1MsIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZT5cbiAgICAgID5cbiAgICB8IEZhYnJpY0NvbnRleHR1YWxpemVkQXJnczxBUkdTLCBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2U+IHtcbiAgICBjb25zdCBjdHggPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgbGV0IG1lcmdlZE92ZXJyaWRlcyA9IG92ZXJyaWRlcyBhc1xuICAgICAgfCBQYXJ0aWFsPEZsYWdzT2Y8RmFicmljQ29udHJhY3RDb250ZXh0Pj5cbiAgICAgIHwgQ3R4XG4gICAgICB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChcbiAgICAgIGN0eCBpbnN0YW5jZW9mIEZhYnJpY0NvbnRyYWN0Q29udGV4dCAmJlxuICAgICAgY3R4LmdldE9yVW5kZWZpbmVkKFwiYWxsb3dDb250ZXh0VHJhbnNpZW50TWFwXCIpICYmXG4gICAgICBjdHguZ2V0T3JVbmRlZmluZWQoXCJzdHViXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCB0cmFuc2llbnRPdmVycmlkZXMgPSB0aGlzLnJlYWRUcmFuc2llbnRPdmVycmlkZXMoY3R4KTtcbiAgICAgIGlmICh0cmFuc2llbnRPdmVycmlkZXMpIHtcbiAgICAgICAgbWVyZ2VkT3ZlcnJpZGVzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBvdmVycmlkZXMgfHwge30sXG4gICAgICAgICAgdHJhbnNpZW50T3ZlcnJpZGVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhbGxvd0NyZWF0ZSlcbiAgICAgIHJldHVybiBzdXBlci5sb2dDdHg8QVJHUywgTUVUSE9EPihcbiAgICAgICAgYXJncyxcbiAgICAgICAgb3BlcmF0aW9uIGFzIGFueSxcbiAgICAgICAgYWxsb3dDcmVhdGUgYXMgYW55LFxuICAgICAgICBtZXJnZWRPdmVycmlkZXMgYXMgYW55XG4gICAgICApIGFzIGFueTtcblxuICAgIHJldHVybiBzdXBlci5sb2dDdHhcbiAgICAgIC5jYWxsKHRoaXMsIGFyZ3MsIG9wZXJhdGlvbiBhcyBhbnksIGFsbG93Q3JlYXRlLCBtZXJnZWRPdmVycmlkZXMgYXMgYW55KVxuICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBpZiAoIShyZXMuY3R4IGluc3RhbmNlb2YgRmFicmljQ29udHJhY3RDb250ZXh0KSlcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgSW52YWxpZCBjb250ZXh0IGJpbmRpbmdgKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocmVzLCB7XG4gICAgICAgICAgLi4uKHJlcy5jdHguZ2V0T3JVbmRlZmluZWQoXCJzdHViXCIpXG4gICAgICAgICAgICA/IHsgc3R1YjogcmVzLmN0eC5nZXRPclVuZGVmaW5lZChcInN0dWJcIikgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgLi4uKHJlcy5jdHguZ2V0T3JVbmRlZmluZWQoXCJpZGVudGl0eVwiKVxuICAgICAgICAgICAgPyB7IGlkZW50aXR5OiByZXMuY3R4LmdldE9yVW5kZWZpbmVkKFwiaWRlbnRpdHlcIikgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgfSkgYXMgYW55O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkVHJhbnNpZW50T3ZlcnJpZGVzKFxuICAgIGN0eDogRmFicmljQ29udHJhY3RDb250ZXh0XG4gICk6IFBhcnRpYWw8RmxhZ3NPZjxGYWJyaWNDb250cmFjdENvbnRleHQ+PiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFjdHguZ2V0T3JVbmRlZmluZWQoXCJhbGxvd0NvbnRleHRUcmFuc2llbnRNYXBcIikpIHJldHVybjtcbiAgICBjb25zdCBzdHViID0gY3R4LmdldE9yVW5kZWZpbmVkKFwic3R1YlwiKSBhcyBDaGFpbmNvZGVTdHViIHwgdW5kZWZpbmVkO1xuICAgIGlmICghc3R1YikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB0cmFuc2llbnRNYXAgPSBzdHViLmdldFRyYW5zaWVudCgpO1xuICAgIGlmICghdHJhbnNpZW50TWFwLmhhcyhGYWJyaWNNb2RlbEtleXMuT1ZFUlJJREVTKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCByYXcgPSB0cmFuc2llbnRNYXAuZ2V0KEZhYnJpY01vZGVsS2V5cy5PVkVSUklERVMpO1xuICAgIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKHJhdykudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZU9ic2VydmVycyhcbiAgICB0YWJsZTogQ29uc3RydWN0b3I8YW55PiB8IHN0cmluZyxcbiAgICBldmVudDogT3BlcmF0aW9uS2V5cyB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyB8IHN0cmluZyxcbiAgICBpZDogRXZlbnRJZHMsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJIYW5kbGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIFwiT2JzZXJ2ZXJIYW5kbGVyIG5vdCBpbml0aWFsaXplZC4gRGlkIHlvdSByZWdpc3RlciBhbnkgb2JzZXJ2YWJsZXM/XCJcbiAgICAgICk7XG4gICAgY29uc3QgeyBjdHgsIGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMudXBkYXRlT2JzZXJ2ZXJzKTtcbiAgICBpZiAoY3R4LmlzRnVsbHlTZWdyZWdhdGVkKSByZXR1cm47XG4gICAgaWYgKGN0eC5nZXRPclVuZGVmaW5lZChcIm5vRW1pdFwiKSkgcmV0dXJuO1xuICAgIGlmICghY3R4LnN0dWIpIHJldHVybjtcbiAgICBjb25zdCBpc0J1bGsgPSBBcnJheS5pc0FycmF5KGlkKTtcbiAgICBjb25zdCBlbWl0U2luZ2xlID0gIWN0eC5nZXRPclVuZGVmaW5lZChcIm5vRW1pdFNpbmdsZVwiKTtcbiAgICBjb25zdCBlbWl0QnVsayA9ICFjdHguZ2V0T3JVbmRlZmluZWQoXCJub0VtaXRCdWxrXCIpO1xuICAgIGlmICgoaXNCdWxrICYmIGVtaXRCdWxrKSB8fCAoIWlzQnVsayAmJiBlbWl0U2luZ2xlKSkge1xuICAgICAgLy8gUGFzcyB0aGUgTVNQIG93bmVyIGZyb20gc3R1YiBhbmQgdGhlIHJlc3VsdCBwYXlsb2FkIChpZiBhbnkpIGluIHRoZVxuICAgICAgLy8gcG9zaXRpb25zIHRoZSBoYW5kbGVyIGV4cGVjdHM6ICh0YWJsZSwgZXZlbnQsIGlkLCBvd25lcj8sIHBheWxvYWQ/LCBjdHgpXG4gICAgICBjb25zdCBtc3BJZCA9IGN0eC5zdHViLmdldE1zcElEID8gY3R4LnN0dWIuZ2V0TXNwSUQoKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG5vbkN0eEFyZ3MgPSBjdHhBcmdzLnNsaWNlKDAsIC0xKTsgLy8gZXZlcnl0aGluZyBiZWZvcmUgY3R4XG4gICAgICBjb25zdCBwYXlsb2FkID0gbm9uQ3R4QXJncy5sZW5ndGggPiAwID8gbm9uQ3R4QXJnc1swXSA6IHVuZGVmaW5lZDtcbiAgICAgIGF3YWl0IHRoaXMub2JzZXJ2ZXJIYW5kbGVyLnVwZGF0ZU9ic2VydmVycyhcbiAgICAgICAgdGFibGUsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBpZCxcbiAgICAgICAgbXNwSWQsXG4gICAgICAgIHBheWxvYWQsXG4gICAgICAgIGN0eFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgb3ZlcnJpZGUgcGFyc2VFcnJvcjxFIGV4dGVuZHMgQmFzZUVycm9yPihlcnI6IEVycm9yIHwgc3RyaW5nKTogRSB7XG4gICAgLy8gaWYgKFxuICAgIC8vICAgTUlTU0lOR19QUklWQVRFX0RBVEFfUkVHRVgudGVzdChcbiAgICAvLyAgICAgdHlwZW9mIGVyciA9PT0gXCJzdHJpbmdcIiA/IGVyciA6IGVyci5tZXNzYWdlXG4gICAgLy8gICApXG4gICAgLy8gKVxuICAgIC8vICAgcmV0dXJuIG5ldyBVbmF1dGhvcml6ZWRQcml2YXRlRGF0YUFjY2VzcyhlcnIpIGFzIEU7XG4gICAgY29uc3QgbXNnID0gdHlwZW9mIGVyciA9PT0gXCJzdHJpbmdcIiA/IGVyciA6IGVyci5tZXNzYWdlO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoTm90Rm91bmRFcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKENvbmZsaWN0RXJyb3IubmFtZSkpIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhCYWRSZXF1ZXN0RXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IEJhZFJlcXVlc3RFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhRdWVyeUVycm9yLm5hbWUpKSByZXR1cm4gbmV3IFF1ZXJ5RXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoUGFnaW5nRXJyb3IubmFtZSkpIHJldHVybiBuZXcgUGFnaW5nRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoVW5zdXBwb3J0ZWRFcnJvci5uYW1lKSlcbiAgICAgIHJldHVybiBuZXcgVW5zdXBwb3J0ZWRFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhNaWdyYXRpb25FcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBNaWdyYXRpb25FcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhPYnNlcnZlckVycm9yLm5hbWUpKSByZXR1cm4gbmV3IE9ic2VydmVyRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoQXV0aG9yaXphdGlvbkVycm9yLm5hbWUpKVxuICAgICAgcmV0dXJuIG5ldyBBdXRob3JpemF0aW9uRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoRm9yYmlkZGVuRXJyb3IubmFtZSkpIHJldHVybiBuZXcgRm9yYmlkZGVuRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoQ29ubmVjdGlvbkVycm9yLm5hbWUpKVxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoU2VyaWFsaXphdGlvbkVycm9yLm5hbWUpKVxuICAgICAgcmV0dXJuIG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoXCJubyBsZWRnZXIgY29udGV4dFwiKSlcbiAgICAgIHJldHVybiBuZXcgTWlzc2luZ0NvbnRleHRFcnJvcihcbiAgICAgICAgYE5vIGNvbnRleHQgZm91bmQuIHRoaXMgY2FuIGJlIGNhdXNlZCBieSBkZWJ1Z2dpbmc6ICR7bXNnfWBcbiAgICAgICkgYXMgRTtcblxuICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpIGFzIEU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRpYyBtZXRob2QgZm9yIGRlY29yYXRpb24gb3ZlcnJpZGVzXG4gICAqIEBzdW1tYXJ5IE92ZXJyaWRlcy9leHRlbmRzIGRlY2FmIGRlY29yYXRpb24gd2l0aCBGYWJyaWMtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eVxuICAgKiBAc3RhdGljXG4gICAqIEBvdmVycmlkZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIG92ZXJyaWRlIGRlY29yYXRpb24oKTogdm9pZCB7XG4gICAgc3VwZXIuZGVjb3JhdGlvbigpO1xuICAgIERlY29yYXRpb24uZmxhdm91cmVkQXMoRmFicmljRmxhdm91cilcbiAgICAgIC5mb3IoUGVyc2lzdGVuY2VLZXlzLkNSRUFURURfQlkpXG4gICAgICAuZGVmaW5lKHtcbiAgICAgICAgZGVjb3JhdG9yOiBmdW5jdGlvbiBjcmVhdGVkQnkoKSB7XG4gICAgICAgICAgcmV0dXJuIGFwcGx5KFxuICAgICAgICAgICAgb25DcmVhdGUoY3JlYXRlZEJ5T25GYWJyaWNDcmVhdGVVcGRhdGUpLFxuICAgICAgICAgICAgcHJvcE1ldGFkYXRhKFBlcnNpc3RlbmNlS2V5cy5DUkVBVEVEX0JZLCB7fSlcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfSBhcyBhbnkpXG4gICAgICAuYXBwbHkoKTtcblxuICAgIERlY29yYXRpb24uZmxhdm91cmVkQXMoRmFicmljRmxhdm91cilcbiAgICAgIC5mb3IoUGVyc2lzdGVuY2VLZXlzLlVQREFURURfQlkpXG4gICAgICAuZGVmaW5lKHtcbiAgICAgICAgZGVjb3JhdG9yOiBmdW5jdGlvbiBjcmVhdGVkQnkoKSB7XG4gICAgICAgICAgcmV0dXJuIGFwcGx5KFxuICAgICAgICAgICAgb25DcmVhdGVVcGRhdGUoY3JlYXRlZEJ5T25GYWJyaWNDcmVhdGVVcGRhdGUpLFxuICAgICAgICAgICAgcHJvcE1ldGFkYXRhKFBlcnNpc3RlbmNlS2V5cy5VUERBVEVEX0JZLCB7fSlcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfSBhcyBhbnkpXG4gICAgICAuYXBwbHkoKTtcblxuICAgIERlY29yYXRpb24uZmxhdm91cmVkQXMoRmFicmljRmxhdm91cilcbiAgICAgIC5mb3IoUGVyc2lzdGVuY2VLZXlzLkNPTFVNTilcbiAgICAgIC5leHRlbmQoRmFicmljUHJvcGVydHkoKSlcbiAgICAgIC5hcHBseSgpO1xuXG4gICAgRGVjb3JhdGlvbi5mbGF2b3VyZWRBcyhGYWJyaWNGbGF2b3VyKVxuICAgICAgLmZvcihWYWxpZGF0aW9uS2V5cy5EQVRFKVxuICAgICAgLmV4dGVuZChmdW5jdGlvbiBmYWJyaWNQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcD86IGFueSkgPT4ge1xuICAgICAgICAgIFByb3BlcnR5KHByb3AsIFwic3RyaW5nOmRhdGVcIikodGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgRGVjb3JhdGlvbi5mbGF2b3VyZWRBcyhGYWJyaWNGbGF2b3VyKVxuICAgICAgLmZvcihQZXJzaXN0ZW5jZUtleXMuVEFCTEUpXG4gICAgICAuZXh0ZW5kKGZ1bmN0aW9uIHRhYmxlKG9iajogYW55KSB7XG4gICAgICAgIGNvbnN0IGNoYWluOiBhbnlbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudCA9XG4gICAgICAgICAgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IE1ldGFkYXRhLmNvbnN0cihvYmopXG4gICAgICAgICAgICA6IE1ldGFkYXRhLmNvbnN0cihvYmouY29uc3RydWN0b3IpO1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT09IE9iamVjdCAmJiBjdXJyZW50LnByb3RvdHlwZSkge1xuICAgICAgICAgIGNoYWluLnB1c2goY3VycmVudCk7XG4gICAgICAgICAgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWluLm1hcCgoYykgPT4gYy5uYW1lIHx8IGMpKTtcblxuICAgICAgICAvLyBBcHBseSBmcm9tIHRoZSBiYXNlIGNsYXNzIGRvd24gdG8gdGhlIGRlY29yYXRlZCBjbGFzc1xuICAgICAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gY2hhaW4ucG9wKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYENhbGxpbmcgb24gJHtjb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICAgIEZhYnJpY09iamVjdCgpKGNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBGYWJyaWNPYmplY3QoKShvYmopO1xuICAgICAgfSlcbiAgICAgIC5hcHBseSgpO1xuICB9XG59XG5cbkZhYnJpY0NvbnRyYWN0QWRhcHRlci5kZWNvcmF0aW9uKCk7XG5BZGFwdGVyLnNldEN1cnJlbnQoRmFicmljRmxhdm91cik7XG4iXX0=
@@ -150,4 +150,4 @@ export class FabricContractContext extends Context {
150
150
  return `fabric ctx${this.stub ? " with stub" : "without stub"}`;
151
151
  }
152
152
  }
153
- //# sourceMappingURL=ContractContext.js.map
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJhY3RDb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyYWN0cy9Db250cmFjdENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxPQUE0QjtJQUNyRTs7O09BR0c7SUFDSCxZQUFZLEdBQTJCO1FBQ3JDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxTQUFTO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxFQUFFO0lBQ0Ysd0VBQXdFO0lBQ3hFLHlDQUF5QztJQUN6Qyw2Q0FBNkM7SUFDN0MsRUFBRTtJQUNGLHFDQUFxQztJQUNyQyxZQUFZO0lBQ1osd0RBQXdEO0lBQ3hELGlCQUFpQjtJQUVqQjs7Ozs7T0FLRztJQUNILHNCQUFzQixDQUNwQixPQUFlLEVBQ2YsZUFBd0IsRUFDeEIsV0FBcUI7UUFFckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3RELEdBQUcsR0FBRyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDM0MsTUFBTSxR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LENBQUMsR0FBRyxTQUFTLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyQyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFUSxRQUFRO1FBQ2YsT0FBTyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDbEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgRmFicmljQ29udHJhY3RGbGFncyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDaGFpbmNvZGVTdHViLCBDbGllbnRJZGVudGl0eSB9IGZyb20gXCJmYWJyaWMtc2hpbS1hcGlcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udGV4dCBjbGFzcyBmb3IgRmFicmljIGNoYWluY29kZSBvcGVyYXRpb25zXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhY2Nlc3MgdG8gRmFicmljLXNwZWNpZmljIGNvbnRleHQgZWxlbWVudHMgbGlrZSBzdHViLCBpZGVudGl0eSwgYW5kIGxvZ2dlciB0byBiZSB1c2VkIGJ5IHJlcG9zaXRvcmllcyBhbmQgYWRhcHRlcnMgZHVyaW5nIGNvbnRyYWN0IGV4ZWN1dGlvbi5cbiAqIEB0ZW1wbGF0ZSBGIC0gRmxhZ3Mgc3BlY2lmaWMgdG8gRmFicmljIGNvbnRyYWN0IG9wZXJhdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBPcHRpb25hbCBpbml0aWFsaXphdGlvbiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBiYXNlIENvbnRleHRcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAY2xhc3MgRmFicmljQ29udHJhY3RDb250ZXh0XG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gSW4gYSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRyYWN0IG1ldGhvZFxuICogY29uc3QgY29udGV4dCA9IG5ldyBGYWJyaWNDb250cmFjdENvbnRleHQoKTtcbiAqIC8vIE9wdGlvbmFsbHkgc2V0IHZhbHVlcyB2aWEgdGhlIGJhc2UgQ29udGV4dCBBUElcbiAqIGNvbnRleHQuc2V0KCdzdHViJywgY3R4LnN0dWIpO1xuICogY29udGV4dC5zZXQoJ2NsaWVudElkZW50aXR5JywgY3R4LmNsaWVudElkZW50aXR5KTtcbiAqIGNvbnRleHQuc2V0KCdsb2dnZXInLCBjb250cmFjdExvZ2dlcik7XG4gKlxuICogLy8gQWNjZXNzIGNvbnRleHQgcHJvcGVydGllc1xuICogY29uc3QgdGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXA7XG4gKiBjb25zdCBjcmVhdG9yID0gY29udGV4dC5pZGVudGl0eS5nZXRJRCgpO1xuICogYGBgXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENvbnRyYWN0XG4gKiAgIHBhcnRpY2lwYW50IENvbnRleHRcbiAqICAgcGFydGljaXBhbnQgTGVkZ2VyXG4gKiAgIENvbnRyYWN0LT4+Q29udGV4dDogbmV3IEZhYnJpY0NvbnRyYWN0Q29udGV4dCgpXG4gKiAgIENvbnRyYWN0LT4+Q29udGV4dDogc2V0KCdzdHViJ3wnY2xpZW50SWRlbnRpdHknfCdsb2dnZXInLCAuLi4pXG4gKiAgIENvbnRleHQtLT4+Q29udHJhY3Q6IHRpbWVzdGFtcCwgaWRlbnRpdHksIGxvZ2dlclxuICogICBDb250cmFjdC0+PkxlZGdlcjogSW50ZXJhY3QgdmlhIHN0dWJcbiAqL1xuZXhwb3J0IGNsYXNzIEZhYnJpY0NvbnRyYWN0Q29udGV4dCBleHRlbmRzIENvbnRleHQ8RmFicmljQ29udHJhY3RGbGFncz4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgRmFicmljQ29udHJhY3RDb250ZXh0IGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIHRoZSBjb250ZXh0IHdpdGggRmFicmljLXNwZWNpZmljIGZsYWdzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjdHg/OiBGYWJyaWNDb250cmFjdENvbnRleHQpIHtcbiAgICBzdXBlcihjdHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBjaGFpbmNvZGUgc3R1YlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBDaGFpbmNvZGVTdHViIGluc3RhbmNlIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBsZWRnZXJcbiAgICogQHJldHVybiB7Q2hhaW5jb2RlU3R1Yn0gVGhlIGNoYWluY29kZSBzdHViXG4gICAqL1xuICBnZXQgc3R1YigpOiBDaGFpbmNvZGVTdHViIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCJzdHViXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSB0cmFuc2FjdGlvbiB0aW1lc3RhbXBcbiAgICogQHN1bW1hcnkgT3ZlcnJpZGVzIHRoZSBiYXNlIHRpbWVzdGFtcCBnZXR0ZXIgdG8gdXNlIHRoZSBzdHViJ3MgdGltZXN0YW1wXG4gICAqIEByZXR1cm4ge0RhdGV9IFRoZSB0cmFuc2FjdGlvbiB0aW1lc3RhbXBcbiAgICovXG4gIG92ZXJyaWRlIGdldCB0aW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuc3R1Yi5nZXREYXRlVGltZXN0YW1wKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGNsaWVudCBpZGVudGl0eVxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBDbGllbnRJZGVudGl0eSBpbnN0YW5jZSBmb3IgdGhlIHRyYW5zYWN0aW9uIHN1Ym1pdHRlclxuICAgKiBAcmV0dXJuIHtDbGllbnRJZGVudGl0eX0gVGhlIGNsaWVudCBpZGVudGl0eVxuICAgKi9cbiAgZ2V0IGlkZW50aXR5KCk6IENsaWVudElkZW50aXR5IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCJpZGVudGl0eVwiKTtcbiAgfVxuICAvL1xuICAvLyBwcml2YXRlIF9zZWdyZWdhdGVXcml0ZTogUmVjb3JkPHN0cmluZywgU2VncmVnYXRlZFdyaXRlRW50cnlbXT4gPSB7fTtcbiAgLy8gcHJpdmF0ZSBfc2VncmVnYXRlUmVhZDogc3RyaW5nW10gPSBbXTtcbiAgLy8gcHJpdmF0ZSBfZnVsbHlTZWdyZWdhdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8vXG4gIC8vIHByaXZhdGUgX3NlcXVlbmNlU2VncmVnYXRpb246IE1hcDxcbiAgLy8gICBzdHJpbmcsXG4gIC8vICAgeyBmdWxseVNlZ3JlZ2F0ZWQ6IGJvb2xlYW47IGNvbGxlY3Rpb25zOiBzdHJpbmdbXSB9XG4gIC8vID4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdG9yZXMgc2VncmVnYXRpb24gbWV0YWRhdGEgcGVyIHNlcXVlbmNlIG5hbWVcbiAgICogQHN1bW1hcnkgTmVlZGVkIGJlY2F1c2UgdGhlIFNlcXVlbmNlIGNyZWF0ZXMgaXRzIG93biBjb250ZXh0ICh2aWEgbG9nQ3R4KSxcbiAgICogbG9zaW5nIGZsYWdzIHNldCBieSBleHRyYWN0U2VncmVnYXRlZENvbGxlY3Rpb25zIG9uIHRoZSBoYW5kbGVyIGNvbnRleHQuXG4gICAqIFRoZSBhZGFwdGVyIHBlcnNpc3RzIGFjcm9zcyBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYSByZWxpYWJsZSBzdG9yZS5cbiAgICovXG4gIHNldFNlcXVlbmNlU2VncmVnYXRpb24oXG4gICAgc2VxTmFtZTogc3RyaW5nLFxuICAgIGZ1bGx5U2VncmVnYXRlZDogYm9vbGVhbixcbiAgICBjb2xsZWN0aW9uczogc3RyaW5nW11cbiAgKTogdm9pZCB7XG4gICAgbGV0IG1hcCA9IHRoaXMuZ2V0RnJvbUNoaWxkcmVuKFwic2VxdWVuY2VTZWdyZWdhdGlvblwiKTtcbiAgICBtYXAgPSBtYXAgaW5zdGFuY2VvZiBNYXAgPyBtYXAgOiBuZXcgTWFwKCk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBtYXAuZ2V0KHNlcU5hbWUpO1xuICAgIGNvbnN0IG1lcmdlZENvbGxlY3Rpb25zID0gZXhpc3RpbmdcbiAgICAgID8gWy4uLm5ldyBTZXQoWy4uLihleGlzdGluZy5jb2xsZWN0aW9ucyB8fCBbXSksIC4uLihjb2xsZWN0aW9ucyB8fCBbXSldKV1cbiAgICAgIDogY29sbGVjdGlvbnM7XG4gICAgbWFwLnNldChzZXFOYW1lLCB7XG4gICAgICBmdWxseVNlZ3JlZ2F0ZWQ6IGZ1bGx5U2VncmVnYXRlZCB8fCAhIWV4aXN0aW5nPy5mdWxseVNlZ3JlZ2F0ZWQsXG4gICAgICBjb2xsZWN0aW9uczogbWVyZ2VkQ29sbGVjdGlvbnMsXG4gICAgfSk7XG4gICAgdGhpcy5wdXQoXCJzZXF1ZW5jZVNlZ3JlZ2F0aW9uXCIsIG1hcCk7XG4gIH1cblxuICBnZXRTZXF1ZW5jZVNlZ3JlZ2F0aW9uKFxuICAgIHNlcU5hbWU6IHN0cmluZ1xuICApOiB7IGZ1bGx5U2VncmVnYXRlZDogYm9vbGVhbjsgY29sbGVjdGlvbnM6IHN0cmluZ1tdIH0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldEZyb21DaGlsZHJlbihcInNlcXVlbmNlU2VncmVnYXRpb25cIik/LmdldChzZXFOYW1lKTtcbiAgfVxuXG4gIG1hcmtGdWxseVNlZ3JlZ2F0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5wdXQoXCJmdWxseVNlZ3JlZ2F0ZWRcIiwgdHJ1ZSk7XG4gIH1cblxuICBnZXQgaXNGdWxseVNlZ3JlZ2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRGcm9tQ2hpbGRyZW4oXCJmdWxseVNlZ3JlZ2F0ZWRcIik7XG4gIH1cblxuICB3cml0ZVRvKGNvbDogc3RyaW5nLCBlbnRyeTogc3RyaW5nW10pIHtcbiAgICBjb25zdCBzZWdyZWdhdGVXcml0ZSA9IHRoaXMuZ2V0RnJvbUNoaWxkcmVuKFwic2VncmVnYXRlV3JpdGVcIikgfHwge307XG4gICAgaWYgKCEoY29sIGluIHNlZ3JlZ2F0ZVdyaXRlKSkgc2VncmVnYXRlV3JpdGVbY29sXSA9IFtdO1xuICAgIHNlZ3JlZ2F0ZVdyaXRlW2NvbF0ucHVzaCguLi5lbnRyeSk7XG4gICAgdGhpcy5wdXQoXCJzZWdyZWdhdGVXcml0ZVwiLCBzZWdyZWdhdGVXcml0ZSk7XG4gIH1cblxuICBnZXRTZWdyZWdhdGVkV3JpdGVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEZyb21DaGlsZHJlbihcInNlZ3JlZ2F0ZVdyaXRlXCIpO1xuICB9XG5cbiAgcHV0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5hY2N1bXVsYXRlKHsgW2tleV06IHZhbHVlIH0pO1xuICB9XG5cbiAgcmVhZEZyb20oY29sczogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBjb2xzID0gQXJyYXkuaXNBcnJheShjb2xzKSA/IGNvbHMgOiBbY29sc107XG4gICAgY29uc3Qgc2VncmVnYXRlUmVhZCA9IFtcbiAgICAgIC4uLm5ldyBTZXQoWy4uLih0aGlzLmdldE9yVW5kZWZpbmVkKFwic2VncmVnYXRlUmVhZFwiKSB8fCBbXSksIC4uLmNvbHNdKSxcbiAgICBdO1xuICAgIHRoaXMucHV0KFwic2VncmVnYXRlUmVhZFwiLCBzZWdyZWdhdGVSZWFkKTtcblxuICAgIGNvbnN0IHJlYWRTdGFjayA9IHRoaXMuZ2V0T3JVbmRlZmluZWQoXCJzZWdyZWdhdGVSZWFkU3RhY2tcIikgfHwgW107XG4gICAgdGhpcy5wdXQoXCJzZWdyZWdhdGVSZWFkU3RhY2tcIiwgWy4uLnJlYWRTdGFjaywgY29sc10pO1xuICB9XG5cbiAgY29uc3VtZVJlYWRDb2xsZWN0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVhZFN0YWNrID0gdGhpcy5nZXRPclVuZGVmaW5lZChcInNlZ3JlZ2F0ZVJlYWRTdGFja1wiKSB8fCBbXTtcbiAgICBpZiAocmVhZFN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgW2N1cnJlbnQsIC4uLnJlc3RdID0gcmVhZFN0YWNrO1xuICAgICAgdGhpcy5wdXQoXCJzZWdyZWdhdGVSZWFkU3RhY2tcIiwgcmVzdCk7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVhZENvbGxlY3Rpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGNvbGxlY3Rpb25zIHJlZ2lzdGVyZWQgZm9yIHdyaXRpbmdcbiAgICogQHN1bW1hcnkgUmV0dXJucyBjb2xsZWN0aW9uIG5hbWVzIGZyb20gc2VncmVnYXRlV3JpdGUsIHVzZWQgYnkgc2VxdWVuY2VzIHRvIGtub3cgd2hlcmUgdG8gcmVwbGljYXRlLlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgb2YgY29sbGVjdGlvbiBuYW1lcywgZW1wdHkgaWYgbm9uZSByZWdpc3RlcmVkXG4gICAqL1xuICBnZXRXcml0ZUNvbGxlY3Rpb25zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5nZXRPclVuZGVmaW5lZChcInNlZ3JlZ2F0ZVdyaXRlXCIpIHx8IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY29sbGVjdGlvbnMgcmVnaXN0ZXJlZCBmb3IgcmVhZGluZ1xuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGNvbGxlY3Rpb24gbmFtZXMgZnJvbSBzZWdyZWdhdGVSZWFkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgb2YgY29sbGVjdGlvbiBuYW1lcywgZW1wdHkgaWYgbm9uZSByZWdpc3RlcmVkXG4gICAqL1xuICBnZXRSZWFkQ29sbGVjdGlvbnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLmdldE9yVW5kZWZpbmVkKFwic2VncmVnYXRlUmVhZFwiKSB8fCBbXTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb2xzKSA/IGNvbHMgOiBbY29sc107XG4gIH1cblxuICBvdmVycmlkZSB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYGZhYnJpYyBjdHgke3RoaXMuc3R1YiA/IFwiIHdpdGggc3R1YlwiIDogXCJ3aXRob3V0IHN0dWJcIn1gO1xuICB9XG59XG4iXX0=
@@ -72,4 +72,4 @@ export class FabricContractDispatch extends Dispatch {
72
72
  });
73
73
  }
74
74
  }
75
- //# sourceMappingURL=FabricContractDispatch.js.map
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ29udHJhY3REaXNwYXRjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cmFjdHMvRmFicmljQ29udHJhY3REaXNwYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBRUwsUUFBUSxHQUdULE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFFBQStCO0lBQ3pFO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRWtCLEtBQUssQ0FBQyxVQUFVO0lBQ2pDLDZEQUE2RDtJQUM3RCxHQUFHLElBQStDO1FBRWxELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sbUJBQW1CLENBQUMsQ0FBQztRQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBc0MsQ0FBQztRQUUxRDtZQUNFLGFBQWEsQ0FBQyxNQUFNO1lBQ3BCLGFBQWEsQ0FBQyxNQUFNO1lBQ3BCLGFBQWEsQ0FBQyxNQUFNO1lBQ3BCLHFCQUFxQixDQUFDLFVBQVU7WUFDaEMscUJBQXFCLENBQUMsVUFBVTtZQUNoQyxxQkFBcUIsQ0FBQyxVQUFVO1NBRW5DLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ2xCLE1BQU0sSUFBSSxhQUFhLENBQ3JCLFVBQVUsTUFBZ0IsaUJBQWlCLE9BQU8sQ0FBQyxLQUFLLHVD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Q2hCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyxcbiAgSW50ZXJuYWxFcnJvcixcbiAgT3BlcmF0aW9uS2V5cyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbmltcG9ydCB7XG4gIEFkYXB0ZXIsXG4gIERpc3BhdGNoLFxuICBFdmVudElkcyxcbiAgTWF5YmVDb250ZXh0dWFsQXJnLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IHR5cGUgRmFicmljQ29udHJhY3RBZGFwdGVyIH0gZnJvbSBcIi4vQ29udHJhY3RBZGFwdGVyXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdENvbnRleHQgfSBmcm9tIFwiLi9Db250cmFjdENvbnRleHRcIjtcblxuZXhwb3J0IGNsYXNzIEZhYnJpY0NvbnRyYWN0RGlzcGF0Y2ggZXh0ZW5kcyBEaXNwYXRjaDxGYWJyaWNDb250cmFjdEFkYXB0ZXI+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5pbml0aWFsaXplKTtcbiAgICBsb2cudmVyYm9zZShgSW5pdGlhbGl6aW5nICR7dGhpcy5hZGFwdGVyfSdzIGV2ZW50IERpc3BhdGNoYCk7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYWRhcHRlciBhcyBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT47XG4gICAgKFxuICAgICAgW1xuICAgICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICAgIE9wZXJhdGlvbktleXMuREVMRVRFLFxuICAgICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuQ1JFQVRFX0FMTCxcbiAgICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLlVQREFURV9BTEwsXG4gICAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5ERUxFVEVfQUxMLFxuICAgICAgXSBhcyAoa2V5b2YgQWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+KVtdXG4gICAgKS5mb3JFYWNoKCh0b1dyYXApID0+IHtcbiAgICAgIGlmICghYWRhcHRlclt0b1dyYXBdKVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBgTWV0aG9kICR7dG9XcmFwIGFzIHN0cmluZ30gbm90IGZvdW5kIGluICR7YWRhcHRlci5hbGlhc30gYWRhcHRlciB0byBiaW5kIE9ic2VydmFibGVzIERpc3BhdGNoYFxuICAgICAgICApO1xuXG4gICAgICBsZXQgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYWRhcHRlciwgdG9XcmFwKTtcbiAgICAgIGxldCBwcm90bzogYW55ID0gYWRhcHRlcjtcbiAgICAgIHdoaWxlICghZGVzY3JpcHRvciAmJiBwcm90byAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gICAgICAgIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCB0b1dyYXApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRlc2NyaXB0b3IgfHwgIWRlc2NyaXB0b3Iud3JpdGFibGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3IoXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIG1ldGhvZCAke3RvV3JhcCBhcyBzdHJpbmd9IHRvIGJpbmQgT2JzZXJ2YWJsZXMgRGlzcGF0Y2hgXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGJ1bGtUb1NpbmdsZShtZXRob2Q6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgIGNhc2UgQnVsa0NydWRPcGVyYXRpb25LZXlzLkNSRUFURV9BTEw6XG4gICAgICAgICAgICByZXR1cm4gT3BlcmF0aW9uS2V5cy5DUkVBVEU7XG4gICAgICAgICAgY2FzZSBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuVVBEQVRFX0FMTDpcbiAgICAgICAgICAgIHJldHVybiBPcGVyYXRpb25LZXlzLlVQREFURTtcbiAgICAgICAgICBjYXNlIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5ERUxFVEVfQUxMOlxuICAgICAgICAgICAgcmV0dXJuIE9wZXJhdGlvbktleXMuREVMRVRFO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIChhZGFwdGVyIGFzIGFueSlbdG9XcmFwXSA9IG5ldyBQcm94eShhZGFwdGVyW3RvV3JhcF0sIHtcbiAgICAgICAgYXBwbHk6IGFzeW5jICh0YXJnZXQ6IGFueSwgdGhpc0FyZzogYW55LCBhcmdBcnJheTogYW55W10pID0+IHtcbiAgICAgICAgICBjb25zdCB7IGxvZywgY3R4QXJncywgY3R4IH0gPSB0aGlzQXJnW1wibG9nQ3R4XCJdKFxuICAgICAgICAgICAgYXJnQXJyYXkuc2xpY2UoMyAtICg0IC0gYXJnQXJyYXkubGVuZ3RoKSwgYXJnQXJyYXkubGVuZ3RoKSxcbiAgICAgICAgICAgIHRhcmdldFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgW3RhYmxlTmFtZSwgaWRzLCBwYXlsb2FkXSA9IGFyZ0FycmF5O1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRhcmdldC5hcHBseSh0aGlzQXJnLCBbXG4gICAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgICBpZHMsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgLi4uY3R4QXJncyxcbiAgICAgICAgICBdKTtcblxuICAgICAgICAgIGNvbnN0IHJlc3VsdEFyZ3M6IFtzdHJpbmcsIHN0cmluZywgRXZlbnRJZHNdID0gW1xuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgYnVsa1RvU2luZ2xlKHRvV3JhcCBhcyBzdHJpbmcpLFxuICAgICAgICAgICAgaWRzLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgICBpZiAoY3R4LmdldChcIm9ic2VydmVGdWxsUmVzdWx0XCIpKSB7XG4gICAgICAgICAgICByZXN1bHRBcmdzLnB1c2goXG4gICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVzdWx0KVxuICAgICAgICAgICAgICAgID8gcmVzdWx0Lm1hcCgocikgPT4gdGFibGVOYW1lKHIpKVxuICAgICAgICAgICAgICAgIDogdGFibGVOYW1lKHJlc3VsdClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlT2JzZXJ2ZXJzKC4uLnJlc3VsdEFyZ3MsIC4uLmN0eEFyZ3MpLmNhdGNoKChlOiB1bmtub3duKSA9PlxuICAgICAgICAgICAgbG9nLmVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIGRpc3BhdGNoIG9ic2VydmVyIHJlZnJlc2ggZm9yICR7dG9XcmFwIGFzIHN0cmluZ30gb24gJHt0YWJsZU5hbWUubmFtZSB8fCB0YWJsZU5hbWV9IGZvciAke2lkc306ICR7ZX1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -188,4 +188,4 @@ export class FabricContractPaginator extends CouchDBPaginator {
188
188
  return results;
189
189
  }
190
190
  }
191
- //# sourceMappingURL=FabricContractPaginator.js.map
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ29udHJhY3RQYWdpbmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJhY3RzL0ZhYnJpY0NvbnRyYWN0UGFnaW5hdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLE9BQU8sR0FDUixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkQsT0FBTyxFQUFlLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBYyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFlBQVksR0FDYixrQ0FBNkI7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQU0sT0FBTyx1QkFFWCxTQUFRLGdCQUFtQjtJQUMzQjs7Ozs7OztPQU9HO0lBQ0gsWUFDRSxPQUE4QixFQUM5QixLQUFpQixFQUNqQixJQUFZLEVBQ1osS0FBcUI7UUFFckIsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNnQixPQUFPLENBQUMsWUFBd0I7UUFDakQsTUFBTSxLQUFLLEdBQWUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUUxQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFFeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFD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LENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1heWJlQ29udGV4dHVhbEFyZyxcbiAgUGFnaW5nRXJyb3IsXG4gIFNlcXVlbmNlLFxuICBDb250ZXh0LFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IERCS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0QWRhcHRlciB9IGZyb20gXCIuL0NvbnRyYWN0QWRhcHRlclwiO1xuaW1wb3J0IHsgQ291Y2hEQlBhZ2luYXRvciwgTWFuZ29RdWVyeSB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcbmltcG9ydCB7XG4gIGFwcGx5TWlycm9yRmxhZ3MsXG4gIGFwcGx5U2VncmVnYXRpb25GbGFncyxcbiAgZXh0cmFjdE1zcElkLFxufSBmcm9tIFwiLi4vc2hhcmVkL2RlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFnaW5hdG9yIGZvciBDb3VjaERCIHF1ZXJ5IHJlc3VsdHNcbiAqIEBzdW1tYXJ5IEltcGxlbWVudHMgcGFnaW5hdGlvbiBmb3IgQ291Y2hEQiBxdWVyaWVzIHVzaW5nIGJvb2ttYXJrcyBmb3IgZWZmaWNpZW50IG5hdmlnYXRpb24gdGhyb3VnaCByZXN1bHQgc2V0c1xuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlXG4gKiBAcGFyYW0ge0ZhYnJpY0NvPGFueSwgYW55LCBhbnk+fSBhZGFwdGVyIC0gVGhlIENvdWNoREIgYWRhcHRlclxuICogQHBhcmFtIHtNYW5nb1F1ZXJ5fSBxdWVyeSAtIFRoZSBNYW5nbyBxdWVyeSB0byBwYWdpbmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHNpemUgLSBUaGUgcGFnZSBzaXplXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBjbGF6eiAtIFRoZSBtb2RlbCBjb25zdHJ1Y3RvclxuICogQGNsYXNzIENvdWNoREJQYWdpbmF0b3JcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIG9mIHVzaW5nIENvdWNoREJQYWdpbmF0b3JcbiAqIGNvbnN0IGFkYXB0ZXIgPSBuZXcgTXlDb3VjaERCQWRhcHRlcihzY29wZSk7XG4gKiBjb25zdCBxdWVyeSA9IHsgc2VsZWN0b3I6IHsgdHlwZTogXCJ1c2VyXCIgfSB9O1xuICogY29uc3QgcGFnaW5hdG9yID0gbmV3IENvdWNoREJQYWdpbmF0b3IoYWRhcHRlciwgcXVlcnksIDEwLCBVc2VyKTtcbiAqXG4gKiAvLyBHZXQgdGhlIGZpcnN0IHBhZ2VcbiAqIGNvbnN0IHBhZ2UxID0gYXdhaXQgcGFnaW5hdG9yLnBhZ2UoMSk7XG4gKlxuICogLy8gR2V0IHRoZSBuZXh0IHBhZ2VcbiAqIGNvbnN0IHBhZ2UyID0gYXdhaXQgcGFnaW5hdG9yLnBhZ2UoMik7XG4gKi9cbmV4cG9ydCBjbGFzcyBGYWJyaWNDb250cmFjdFBhZ2luYXRvcjxcbiAgTSBleHRlbmRzIE1vZGVsLFxuPiBleHRlbmRzIENvdWNoREJQYWdpbmF0b3I8TT4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgQ291Y2hEQlBhZ2luYXRvciBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIHBhZ2luYXRvciBmb3IgQ291Y2hEQiBxdWVyeSByZXN1bHRzXG4gICAqIEBwYXJhbSB7Q291Y2hEQkFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55Pn0gYWRhcHRlciAtIFRoZSBDb3VjaERCIGFkYXB0ZXJcbiAgICogQHBhcmFtIHtNYW5nb1F1ZXJ5fSBxdWVyeSAtIFRoZSBNYW5nbyBxdWVyeSB0byBwYWdpbmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFRoZSBwYWdlIHNpemVcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gY2xhenogLSBUaGUgbW9kZWwgY29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGFkYXB0ZXI6IEZhYnJpY0NvbnRyYWN0QWRhcHRlcixcbiAgICBxdWVyeTogTWFuZ29RdWVyeSxcbiAgICBzaXplOiBudW1iZXIsXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+XG4gICkge1xuICAgIHN1cGVyKGFkYXB0ZXIsIHF1ZXJ5LCBzaXplLCBjbGF6eik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgcXVlcnkgZm9yIHBhZ2luYXRpb25cbiAgICogQHN1bW1hcnkgTW9kaWZpZXMgdGhlIHJhdyBxdWVyeSB0byBpbmNsdWRlIHBhZ2luYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge01hbmdvUXVlcnl9IHJhd1N0YXRlbWVudCAtIFRoZSBvcmlnaW5hbCBNYW5nbyBxdWVyeVxuICAgKiBAcmV0dXJuIHtNYW5nb1F1ZXJ5fSBUaGUgcHJlcGFyZWQgcXVlcnkgd2l0aCBwYWdpbmF0aW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwcmVwYXJlKHJhd1N0YXRlbWVudDogTWFuZ29RdWVyeSk6IE1hbmdvUXVlcnkge1xuICAgIGNvbnN0IHF1ZXJ5OiBNYW5nb1F1ZXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgcmF3U3RhdGVtZW50KTtcbiAgICBpZiAocXVlcnkubGltaXQpIHRoaXMubGltaXQgPSBxdWVyeS5saW1pdDtcblxuICAgIHF1ZXJ5LmxpbWl0ID0gdGhpcy5zaXplO1xuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNCb29rbWFyayh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSBzcGVjaWZpYyBwYWdlIG9mIHJlc3VsdHNcbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgdGhlIHF1ZXJ5IHdpdGggcGFnaW5hdGlvbiBhbmQgcHJvY2Vzc2VzIHRoZSByZXN1bHRzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFnZT0xXSAtIFRoZSBwYWdlIG51bWJlciB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJbXT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIHJlc3VsdHNcbiAgICogQHRocm93cyB7UGFnaW5nRXJyb3J9IElmIHRyeWluZyB0byBhY2Nlc3MgYSBwYWdlIG90aGVyIHRoYW4gdGhlIGZpcnN0IHdpdGhvdXQgYSBib29rbWFyaywgb3IgaWYgbm8gY2xhc3MgaXMgZGVmaW5lZFxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAgICogICBwYXJ0aWNpcGFudCBDb3VjaERCUGFnaW5hdG9yXG4gICAqICAgcGFydGljaXBhbnQgQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IENvdWNoREJcbiAgICpcbiAgICogICBDbGllbnQtPj5Db3VjaERCUGFnaW5hdG9yOiBwYWdlKHBhZ2VOdW1iZXIpXG4gICAqICAgTm90ZSBvdmVyIENvdWNoREJQYWdpbmF0b3I6IENsb25lIHN0YXRlbWVudFxuICAgKiAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiB2YWxpZGF0ZVBhZ2UocGFnZSlcbiAgICpcbiAgICogICBhbHQgcGFnZSAhPT0gMVxuICAgKiAgICAgQ291Y2hEQlBhZ2luYXRvci0+PkNvdWNoREJQYWdpbmF0b3I6IENoZWNrIGJvb2ttYXJrXG4gICAqICAgICBhbHQgTm8gYm9va21hcmtcbiAgICogICAgICAgQ291Y2hEQlBhZ2luYXRvci0tPj5DbGllbnQ6IFRocm93IFBhZ2luZ0Vycm9yXG4gICAqICAgICBlbHNlIEhhcyBib29rbWFya1xuICAgKiAgICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogQWRkIGJvb2ttYXJrIHRvIHN0YXRlbWVudFxuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgQ291Y2hEQlBhZ2luYXRvci0+PkFkYXB0ZXI6IHJhdyhzdGF0ZW1lbnQsIGZhbHNlKVxuICAgKiAgIEFkYXB0ZXItPj5Db3VjaERCOiBFeGVjdXRlIHF1ZXJ5XG4gICAqICAgQ291Y2hEQi0tPj5BZGFwdGVyOiBSZXR1cm4gcmVzdWx0c1xuICAgKiAgIEFkYXB0ZXItLT4+Q291Y2hEQlBhZ2luYXRvcjogUmV0dXJuIE1hbmdvUmVzcG9uc2VcbiAgICpcbiAgICogICBOb3RlIG92ZXIgQ291Y2hEQlBhZ2luYXRvcjogUHJvY2VzcyByZXN1bHRzXG4gICAqXG4gICAqICAgYWx0IEhhcyB3YXJuaW5nXG4gICAqICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogTG9nIHdhcm5pbmdcbiAgICogICBlbmRcbiAgICpcbiAgICogICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogQ2hlY2sgZm9yIGNsYXp6XG4gICAqXG4gICAqICAgYWx0IE5vIGNsYXp6XG4gICAqICAgICBDb3VjaERCUGFnaW5hdG9yLS0+PkNsaWVudDogVGhyb3cgUGFnaW5nRXJyb3JcbiAgICogICBlbHNlIEhhcyBjbGF6elxuICAgKiAgICAgQ291Y2hEQlBhZ2luYXRvci0+PkNvdWNoREJQYWdpbmF0b3I6IEZpbmQgcHJpbWFyeSBrZXlcbiAgICpcbiAgICogICAgIGFsdCBIYXMgZmllbGRzIGluIHN0YXRlbWVudFxuICAgKiAgICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogVXNlIGRvY3MgZGlyZWN0bHlcbiAgICogICAgIGVsc2UgTm8gZmllbGRzXG4gICAqICAgICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBQcm9jZXNzIGVhY2ggZG9jdW1lbnRcbiAgICogICAgICAgbG9vcCBGb3IgZWFjaCBkb2N1bWVudFxuICAgKiAgICAgICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBFeHRyYWN0IG9yaWdpbmFsIElEXG4gICAqICAgICAgICAgQ291Y2hEQlBhZ2luYXRvci0+PkFkYXB0ZXI6IHJldmVydChkb2MsIGNsYXp6LCBwa0RlZi5pZCwgcGFyc2VkSWQpXG4gICAqICAgICAgIGVuZFxuICAgKiAgICAgZW5kXG4gICAqXG4gICAqICAgICBDb3VjaERCUGFnaW5hdG9yLT4+Q291Y2hEQlBhZ2luYXRvcjogU3RvcmUgYm9va21hcmtcbiAgICogICAgIENvdWNoREJQYWdpbmF0b3ItPj5Db3VjaERCUGFnaW5hdG9yOiBVcGRhdGUgY3VycmVudFBhZ2VcbiAgICogICAgIENvdWNoREJQYWdpbmF0b3ItLT4+Q2xpZW50OiBSZXR1cm4gcmVzdWx0c1xuICAgKiAgIGVuZFxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgcGFnZShcbiAgICBwYWdlOiBudW1iZXIgPSAxLFxuICAgIGJvb2ttYXJrPzogYW55LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzLCBjdHggfSA9IHRoaXMuYWRhcHRlcltcImxvZ0N0eFwiXShcbiAgICAgIFtib29rbWFyaywgLi4uYXJnc10uZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgdGhpcy5wYWdlXG4gICAgKTtcbiAgICBpZiAoYm9va21hcmsgJiYgYm9va21hcmsgaW5zdGFuY2VvZiBDb250ZXh0KSB7XG4gICAgICBib29rbWFyayA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBtc3AgPSBleHRyYWN0TXNwSWQoY3R4LmlkZW50aXR5KTtcbiAgICBjb25zdCB7IHByaXZhdGVDb2xzLCBzaGFyZWRDb2xzIH0gPSBNb2RlbC5jb2xsZWN0aW9uc0Zvcih0aGlzLmNsYXp6KTtcbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIFsuLi5wcml2YXRlQ29scywgLi4uc2hhcmVkQ29sc10ubWFwKChjKSA9PlxuICAgICAgICAgICAgdHlwZW9mIGMgPT09IFwic3RyaW5nXCIgPyBjIDogYyh0aGlzLmNsYXp6LCBtc3AsIGN0eClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICksXG4gICAgXTtcbiAgICBhcHBseVNlZ3JlZ2F0aW9uRmxhZ3MobmV3IHRoaXMuY2xhenooKSwgY29sbGVjdGlvbnMsIGN0eCk7XG4gICAgYXdhaXQgYXBwbHlNaXJyb3JGbGFncyh0aGlzLmNsYXp6LCBtc3AsIGN0eCk7XG5cbiAgICB0aGlzLl9ib29rbWFyayA9IGJvb2ttYXJrO1xuICAgIGlmICh0aGlzLmlzUHJlcGFyZWRTdGF0ZW1lbnQoKSlcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBhZ2VQcmVwYXJlZChwYWdlLCAuLi5jdHhBcmdzKTtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlbWVudCk7XG4gICAgcGFnZSA9IHRoaXMudmFsaWRhdGVQYWdlKHBhZ2UgPz8gMSk7XG4gICAgc3RhdGVtZW50LmxpbWl0ID0gdGhpcy5zaXplO1xuICAgIGlmIChwYWdlID09PSAxKSB7XG4gICAgICBpZiAodGhpcy5oYXNCb29rbWFyayhib29rbWFyaykpIHtcbiAgICAgICAgc3RhdGVtZW50LmJvb2ttYXJrID0gYm9va21hcms7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgc3RhdGVtZW50LmJvb2ttYXJrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleHBsaWNpdEJvb2ttYXJrID0gYm9va21hcmsgfHwgdGhpcy5fYm9va21hcmtzLmdldChwYWdlKTtcbiAgICAgIGlmICghdGhpcy5oYXNCb29rbWFyayhleHBsaWNpdEJvb2ttYXJrKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgICAgXCJSYW5kb20gcGFnZSBhY2Nlc3MgcmVxdWlyZXMgYSBjYWNoZWQgQ291Y2hEQiBib29rbWFyay4gU3RhcnQgYXQgcGFnZSAxIGFuZCBwYWdlIGZvcndhcmQsIG9yIHBhc3MgYW4gZXhwbGljaXQgYm9va21hcmsuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBzdGF0ZW1lbnQuc2tpcDtcbiAgICAgIHN0YXRlbWVudC5ib29rbWFyayA9IGV4cGxpY2l0Qm9va21hcms7XG4gICAgfVxuICAgIGRlbGV0ZSBzdGF0ZW1lbnQuc2tpcDtcbiAgICBjb25zdCB0aWVCcmVha2VyID0gTW9kZWwucGsodGhpcy5jbGF6eik7XG4gICAgY29uc3QgcHJldmlvdXNUaWVCcmVha2VyID0gY3R4LmdldE9yVW5kZWZpbmVkKFwicHJpdmF0ZVBhZ2luYXRpb25UaWVCcmVha2VyXCIpO1xuICAgIGN0eC5wdXQoXCJwcml2YXRlUGFnaW5hdGlvblRpZUJyZWFrZXJcIiwgdGllQnJlYWtlcik7XG4gICAgbGV0IHJhd1Jlc3VsdDogYW55O1xuICAgIHRyeSB7XG4gICAgICByYXdSZXN1bHQgPSAoYXdhaXQgdGhpcy5hZGFwdGVyLnJhdyhzdGF0ZW1lbnQsIGZhbHNlLCBjdHgpKSBhcyBhbnk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGN0eC5wdXQoXG4gICAgICAgIFwicHJpdmF0ZVBhZ2luYXRpb25UaWVCcmVha2VyXCIsXG4gICAgICAgIHByZXZpb3VzVGllQnJlYWtlciA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcHJldmlvdXNUaWVCcmVha2VyXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZG9jcywgYm9va21hcms6IG5leHRCb29rbWFyaywgd2FybmluZyB9ID0gcmF3UmVzdWx0O1xuICAgIGlmICh3YXJuaW5nKSB7XG4gICAgICBjdHgubG9nZ2VyPy53YXJuPy4od2FybmluZyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5jbGF6eikgdGhyb3cgbmV3IFBhZ2luZ0Vycm9yKFwiTm8gc3RhdGVtZW50IHRhcmdldCBkZWZpbmVkXCIpO1xuICAgIGNvbnN0IGlkID0gTW9kZWwucGsodGhpcy5jbGF6eik7XG4gICAgY29uc3QgdHlwZSA9IE1ldGFkYXRhLmdldChcbiAgICAgIHRoaXMuY2xhenosXG4gICAgICBNZXRhZGF0YS5rZXkoREJLZXlzLklELCBpZCBhcyBzdHJpbmcpXG4gICAgKT8udHlwZTtcbiAgICBjb25zdCByZXN1bHRzID1cbiAgICAgIHN0YXRlbWVudC5maWVsZHMgJiYgc3RhdGVtZW50LmZpZWxkcy5sZW5ndGhcbiAgICAgICAgPyBkb2NzIC8vIGhhcyBmaWVsZHMgbWVhbnMgaXRzIG5vdCBmdWxsIG1vZGVsXG4gICAgICAgIDogZG9jcy5tYXAoKGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQoXG4gICAgICAgICAgICAgIGQsXG4gICAgICAgICAgICAgIHRoaXMuY2xhenosXG4gICAgICAgICAgICAgIFNlcXVlbmNlLnBhcnNlVmFsdWUodHlwZSwgZFtpZF0pLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGN0eFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICBjb25zdCBoYXNOZXh0Qm9va21hcmsgPVxuICAgICAgdGhpcy5oYXNCb29rbWFyayhuZXh0Qm9va21hcmspICYmXG4gICAgICBkb2NzLmxlbmd0aCA+IDAgJiZcbiAgICAgIG5leHRCb29rbWFyayAhPT0gYm9va21hcms7XG4gICAgdGhpcy5fYm9va21hcmsgPSBoYXNOZXh0Qm9va21hcmsgPyBuZXh0Qm9va21hcmsgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGhhc05leHRCb29rbWFyaykge1xuICAgICAgdGhpcy5fYm9va21hcmtzLnNldChwYWdlICsgMSwgbmV4dEJvb2ttYXJrKTtcbiAgICAgIHRoaXMuX3RvdGFsUGFnZXMgPSBNYXRoLm1heCh0aGlzLl90b3RhbFBhZ2VzIHx8IDAsIHBhZ2UgKyAxKTtcbiAgICB9XG4gICAgdGhpcy5fY3VycmVudFBhZ2UgPSBwYWdlO1xuICAgIGlmICghaGFzTmV4dEJvb2ttYXJrKSB7XG4gICAgICB0aGlzLl9rbm93bkxhc3RQYWdlID0gcGFnZTtcbiAgICAgIHRoaXMuX3RvdGFsUGFnZXMgPSBwYWdlO1xuICAgICAgdGhpcy5fcmVjb3JkQ291bnQgPSAocGFnZSAtIDEpICogdGhpcy5zaXplICsgZG9jcy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG59XG4iXX0=