lakutata 0.0.1

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 (594) hide show
  1. package/.idea/codeStyles/Project.xml +18 -0
  2. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  3. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  4. package/.idea/lakutata.iml +13 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/vcs.xml +6 -0
  7. package/LICENSE +21 -0
  8. package/README.md +1 -0
  9. package/build/Application-78a416de.d.ts +387 -0
  10. package/build/Application-b5e19e08.d.ts +387 -0
  11. package/build/Components.cjs +55 -0
  12. package/build/Components.d.cts +9 -0
  13. package/build/Components.d.ts +9 -0
  14. package/build/Components.js +44 -0
  15. package/build/Core.cjs +148 -0
  16. package/build/Core.d.cts +33 -0
  17. package/build/Core.d.ts +33 -0
  18. package/build/Core.js +71 -0
  19. package/build/Crypto.cjs +96 -0
  20. package/build/Crypto.d.cts +19 -0
  21. package/build/Crypto.d.ts +19 -0
  22. package/build/Crypto.js +41 -0
  23. package/build/Decorators.cjs +100 -0
  24. package/build/Decorators.d.cts +23 -0
  25. package/build/Decorators.d.ts +23 -0
  26. package/build/Decorators.js +45 -0
  27. package/build/DependencyInjectionContainer-871a6c03.d.ts +340 -0
  28. package/build/DependencyInjectionContainer-f037ac36.d.ts +340 -0
  29. package/build/Exceptions.cjs +144 -0
  30. package/build/Exceptions.d.cts +28 -0
  31. package/build/Exceptions.d.ts +28 -0
  32. package/build/Exceptions.js +37 -0
  33. package/build/Hash.cjs +223 -0
  34. package/build/Hash.d.cts +535 -0
  35. package/build/Hash.d.ts +535 -0
  36. package/build/Hash.js +10 -0
  37. package/build/Time.cjs +14 -0
  38. package/build/Time.d.cts +5 -0
  39. package/build/Time.d.ts +5 -0
  40. package/build/Time.js +5 -0
  41. package/build/TimeInput-24fced42.d.ts +243 -0
  42. package/build/TimeInput-4401fc58.d.ts +243 -0
  43. package/build/Utilities.cjs +100 -0
  44. package/build/Utilities.d.cts +212 -0
  45. package/build/Utilities.d.ts +212 -0
  46. package/build/Utilities.js +7 -0
  47. package/build/Validator.cjs +24 -0
  48. package/build/Validator.d.cts +1851 -0
  49. package/build/Validator.d.ts +1851 -0
  50. package/build/Validator.js +11 -0
  51. package/build/chunk-26TQI22I.js +196 -0
  52. package/build/chunk-27OFA7C3.js +16 -0
  53. package/build/chunk-2C2UILFN.js +23 -0
  54. package/build/chunk-2CHYQHWR.cjs +16 -0
  55. package/build/chunk-2DN35UQB.cjs +10947 -0
  56. package/build/chunk-2E4TF6LU.cjs +16 -0
  57. package/build/chunk-2PLJEW2R.js +14 -0
  58. package/build/chunk-2RW3VMNS.js +45 -0
  59. package/build/chunk-2T6JU2UH.js +14 -0
  60. package/build/chunk-3CX3GCQF.js +32 -0
  61. package/build/chunk-3JIQCDQG.cjs +25 -0
  62. package/build/chunk-3KLEN3PR.js +14 -0
  63. package/build/chunk-3LZRQPJ5.js +14 -0
  64. package/build/chunk-3NHHHZFR.cjs +870 -0
  65. package/build/chunk-4332C5BW.js +30 -0
  66. package/build/chunk-46V7GHKE.cjs +25 -0
  67. package/build/chunk-4EPPSZ7L.js +14 -0
  68. package/build/chunk-4FEEQIQ4.js +23 -0
  69. package/build/chunk-4G2ZCUBN.js +5570 -0
  70. package/build/chunk-4KTVY73U.js +15 -0
  71. package/build/chunk-4MQXSUTL.cjs +14 -0
  72. package/build/chunk-4OHSPWRQ.js +34 -0
  73. package/build/chunk-4PK4TGU4.cjs +16 -0
  74. package/build/chunk-4YXUEJSO.js +23 -0
  75. package/build/chunk-5475IFR4.cjs +16 -0
  76. package/build/chunk-5B5Z4GCR.cjs +17 -0
  77. package/build/chunk-5FPTDIKI.cjs +16 -0
  78. package/build/chunk-5NK7E2HA.js +69 -0
  79. package/build/chunk-67F5WP5Z.cjs +8 -0
  80. package/build/chunk-6BJTKEXZ.cjs +25 -0
  81. package/build/chunk-6WNLPTDY.cjs +8 -0
  82. package/build/chunk-7G7FCNEG.cjs +8 -0
  83. package/build/chunk-7IVNTVYK.cjs +16 -0
  84. package/build/chunk-7MJAWOWL.js +22896 -0
  85. package/build/chunk-7MTOK62N.js +767 -0
  86. package/build/chunk-7PADGZPI.cjs +129 -0
  87. package/build/chunk-7ZUM53G6.js +14 -0
  88. package/build/chunk-A4BYNKYF.js +42 -0
  89. package/build/chunk-A7F6LCRA.cjs +16 -0
  90. package/build/chunk-AFV3VN3X.cjs +8 -0
  91. package/build/chunk-AGHMOCC3.cjs +16 -0
  92. package/build/chunk-AHUH4FWQ.cjs +29 -0
  93. package/build/chunk-AM4YMG2S.js +6 -0
  94. package/build/chunk-ANDEVIKJ.cjs +16 -0
  95. package/build/chunk-APETX7ZT.cjs +16 -0
  96. package/build/chunk-ASMC7EUP.js +6 -0
  97. package/build/chunk-BDCRHGKN.js +6 -0
  98. package/build/chunk-BDJXMO44.js +2920 -0
  99. package/build/chunk-BE7ICF5R.js +32 -0
  100. package/build/chunk-BEDKPRVX.cjs +17 -0
  101. package/build/chunk-BFE66ADZ.cjs +34 -0
  102. package/build/chunk-BKCT2HSQ.js +178 -0
  103. package/build/chunk-BMNC4W46.js +20 -0
  104. package/build/chunk-BO7Y6HNS.cjs +176 -0
  105. package/build/chunk-D4H35ART.cjs +53 -0
  106. package/build/chunk-D5DE7Z4J.js +29 -0
  107. package/build/chunk-DHSSJJMD.cjs +25 -0
  108. package/build/chunk-DIMOR6NE.cjs +8 -0
  109. package/build/chunk-DN5TSX6S.cjs +244 -0
  110. package/build/chunk-EEH5LCBP.cjs +16 -0
  111. package/build/chunk-EFYDUUXT.cjs +92 -0
  112. package/build/chunk-ENJSEFE4.js +14 -0
  113. package/build/chunk-EPYJVQHQ.js +6 -0
  114. package/build/chunk-EUVLTNDV.js +32 -0
  115. package/build/chunk-EXQVCESB.cjs +20 -0
  116. package/build/chunk-EYPPC6HP.js +18 -0
  117. package/build/chunk-F5NKGQDL.cjs +16 -0
  118. package/build/chunk-F7RNH2H2.js +266 -0
  119. package/build/chunk-FCTV4OB7.cjs +50 -0
  120. package/build/chunk-FHEXUE67.js +29 -0
  121. package/build/chunk-FJP3KNXK.js +23 -0
  122. package/build/chunk-FJQSLRIP.js +14 -0
  123. package/build/chunk-FSFWPTIC.js +6 -0
  124. package/build/chunk-FTKFMQHJ.cjs +16 -0
  125. package/build/chunk-FW26MPE4.js +69 -0
  126. package/build/chunk-FZNRGZGE.js +6372 -0
  127. package/build/chunk-G7EDOLQ7.cjs +100 -0
  128. package/build/chunk-GGY7LCMQ.cjs +73 -0
  129. package/build/chunk-GLWUJIMW.cjs +8 -0
  130. package/build/chunk-GZ5KN2PE.js +6 -0
  131. package/build/chunk-HBPRX3WA.cjs +202 -0
  132. package/build/chunk-HJAQ6WJM.cjs +288 -0
  133. package/build/chunk-HJSJA5CF.js +14 -0
  134. package/build/chunk-HKAY7FWM.js +28 -0
  135. package/build/chunk-HMKTNRQF.js +14 -0
  136. package/build/chunk-HODDA5D5.js +199 -0
  137. package/build/chunk-HPKJUFTM.js +14 -0
  138. package/build/chunk-HWCTWIVZ.cjs +30 -0
  139. package/build/chunk-HXWC4YN6.cjs +22908 -0
  140. package/build/chunk-HZJ7XFHQ.cjs +8 -0
  141. package/build/chunk-I5TGKTX6.js +18 -0
  142. package/build/chunk-I7J6V3EU.cjs +34 -0
  143. package/build/chunk-IKWXYUGY.js +14 -0
  144. package/build/chunk-IYGGR65W.cjs +16 -0
  145. package/build/chunk-J6RXNX2K.js +174 -0
  146. package/build/chunk-JAEEMFEZ.cjs +24 -0
  147. package/build/chunk-JFOMNL5I.cjs +22 -0
  148. package/build/chunk-JPV2PUHF.cjs +8 -0
  149. package/build/chunk-JR726PDZ.cjs +70 -0
  150. package/build/chunk-JTKOYDJB.js +5914 -0
  151. package/build/chunk-JU53NOVA.cjs +31 -0
  152. package/build/chunk-JVSBYHUY.js +10944 -0
  153. package/build/chunk-JYBISTRN.cjs +25 -0
  154. package/build/chunk-K2ALA7QI.js +12 -0
  155. package/build/chunk-KG6DPM4B.js +14 -0
  156. package/build/chunk-KNSBLLL2.cjs +32 -0
  157. package/build/chunk-KNTGBUSY.js +6 -0
  158. package/build/chunk-KWOHVRRL.js +6 -0
  159. package/build/chunk-L3IVYIVA.js +23 -0
  160. package/build/chunk-LBL5XNWX.js +221 -0
  161. package/build/chunk-LBOBUFWZ.js +6 -0
  162. package/build/chunk-LEJXJUBE.js +6 -0
  163. package/build/chunk-LJTCXKC4.js +242 -0
  164. package/build/chunk-MBKTJ3KM.cjs +118 -0
  165. package/build/chunk-MDE5SRLT.cjs +16 -0
  166. package/build/chunk-MEKICSEL.js +22 -0
  167. package/build/chunk-MNDBRDT2.cjs +608 -0
  168. package/build/chunk-MSWZLYS7.cjs +5916 -0
  169. package/build/chunk-MT2OB376.js +14 -0
  170. package/build/chunk-MVWB4XDJ.js +14 -0
  171. package/build/chunk-MXAAAL2S.js +53 -0
  172. package/build/chunk-N37KV2VV.cjs +199 -0
  173. package/build/chunk-NZ5IZMM5.cjs +2922 -0
  174. package/build/chunk-O2NOYN65.js +54 -0
  175. package/build/chunk-OAD22QZQ.js +6 -0
  176. package/build/chunk-OIFILR4I.js +125 -0
  177. package/build/chunk-OJGBPS2B.cjs +16 -0
  178. package/build/chunk-OMPATIMZ.cjs +71 -0
  179. package/build/chunk-P3Z7ZEGJ.cjs +18 -0
  180. package/build/chunk-P6BBXCBD.cjs +6425 -0
  181. package/build/chunk-PE4C2TIO.cjs +16 -0
  182. package/build/chunk-PF2WAZLH.cjs +52 -0
  183. package/build/chunk-PFFTGOAR.cjs +25 -0
  184. package/build/chunk-PFUZLHWJ.cjs +25 -0
  185. package/build/chunk-POE7A7NF.cjs +180 -0
  186. package/build/chunk-PQSDA5BN.js +50 -0
  187. package/build/chunk-PR5TPAGH.js +14 -0
  188. package/build/chunk-PXMWVOKK.cjs +16 -0
  189. package/build/chunk-PZ5OJC4I.cjs +16 -0
  190. package/build/chunk-Q4LNTPEI.cjs +34 -0
  191. package/build/chunk-QCA5YGYV.js +14 -0
  192. package/build/chunk-QGGML4PP.js +17 -0
  193. package/build/chunk-QHW273SN.js +32 -0
  194. package/build/chunk-QJJRQMA6.cjs +8 -0
  195. package/build/chunk-QKB76MIV.cjs +769 -0
  196. package/build/chunk-QKVPGRI5.cjs +8 -0
  197. package/build/chunk-QME47CJL.cjs +8 -0
  198. package/build/chunk-QNJ6XBYQ.js +14 -0
  199. package/build/chunk-QWYKUNU5.js +14 -0
  200. package/build/chunk-QXTBP6TW.js +116 -0
  201. package/build/chunk-RH3LAIQS.js +32 -0
  202. package/build/chunk-RMAXG5F7.js +118 -0
  203. package/build/chunk-RUHAPGDE.js +14 -0
  204. package/build/chunk-S4KA3ZGO.js +6 -0
  205. package/build/chunk-SAGMV3YX.cjs +16 -0
  206. package/build/chunk-SCWEQ5JA.cjs +34 -0
  207. package/build/chunk-SEKBDIJH.cjs +16 -0
  208. package/build/chunk-SGWWTKLW.cjs +16 -0
  209. package/build/chunk-SWCU6OID.cjs +61 -0
  210. package/build/chunk-T4C7UJEZ.js +29 -0
  211. package/build/chunk-TBWIKIS3.cjs +8 -0
  212. package/build/chunk-TS74DN3N.cjs +229 -0
  213. package/build/chunk-TXTNUC7S.cjs +16 -0
  214. package/build/chunk-UEGDBJEG.cjs +127 -0
  215. package/build/chunk-UR2ZK7MI.cjs +16 -0
  216. package/build/chunk-VAOR6JOP.js +14 -0
  217. package/build/chunk-VELZ3KJY.cjs +45 -0
  218. package/build/chunk-VHTAHAD6.cjs +34 -0
  219. package/build/chunk-VISA22LF.js +14 -0
  220. package/build/chunk-VOFRWVGM.js +23 -0
  221. package/build/chunk-VPRNM6FU.cjs +118 -0
  222. package/build/chunk-VTFNEUOF.js +14 -0
  223. package/build/chunk-VVNU27G2.js +868 -0
  224. package/build/chunk-W3TQER3B.cjs +31 -0
  225. package/build/chunk-WINISBV4.js +70 -0
  226. package/build/chunk-WSEZ7DZV.js +14 -0
  227. package/build/chunk-WW57G6RG.js +124 -0
  228. package/build/chunk-WYJCE3KY.cjs +5593 -0
  229. package/build/chunk-WZI5UPER.cjs +61 -0
  230. package/build/chunk-WZZF2IEV.js +14 -0
  231. package/build/chunk-X4AIZSIY.cjs +47 -0
  232. package/build/chunk-XO6M5AYN.js +585 -0
  233. package/build/chunk-XWP76C6E.js +25 -0
  234. package/build/chunk-Y7O5SCF6.cjs +16 -0
  235. package/build/chunk-YEBPQG7X.js +96 -0
  236. package/build/chunk-YT4CYDJ3.js +14 -0
  237. package/build/chunk-ZG3PHRVQ.cjs +20 -0
  238. package/build/chunk-ZG7QF5S2.cjs +16 -0
  239. package/build/chunk-ZJYLWSBE.js +90 -0
  240. package/build/chunk-ZYBMNLGI.js +48 -0
  241. package/build/constants/DefaultValue.cjs +14 -0
  242. package/build/constants/DefaultValue.d.cts +9 -0
  243. package/build/constants/DefaultValue.d.ts +9 -0
  244. package/build/constants/DefaultValue.js +5 -0
  245. package/build/constants/MetadataKey.cjs +114 -0
  246. package/build/constants/MetadataKey.d.cts +30 -0
  247. package/build/constants/MetadataKey.d.ts +30 -0
  248. package/build/constants/MetadataKey.js +5 -0
  249. package/build/decorators/ControllerDecorators.cjs +21 -0
  250. package/build/decorators/ControllerDecorators.d.cts +32 -0
  251. package/build/decorators/ControllerDecorators.d.ts +32 -0
  252. package/build/decorators/ControllerDecorators.js +12 -0
  253. package/build/decorators/DependencyInjectionDecorators.cjs +78 -0
  254. package/build/decorators/DependencyInjectionDecorators.d.cts +75 -0
  255. package/build/decorators/DependencyInjectionDecorators.d.ts +75 -0
  256. package/build/decorators/DependencyInjectionDecorators.js +41 -0
  257. package/build/decorators/ValidationDecorators.cjs +35 -0
  258. package/build/decorators/ValidationDecorators.d.cts +36 -0
  259. package/build/decorators/ValidationDecorators.d.ts +36 -0
  260. package/build/decorators/ValidationDecorators.js +14 -0
  261. package/build/exceptions/DependencyInjectionException.cjs +18 -0
  262. package/build/exceptions/DependencyInjectionException.d.cts +8 -0
  263. package/build/exceptions/DependencyInjectionException.d.ts +8 -0
  264. package/build/exceptions/DependencyInjectionException.js +9 -0
  265. package/build/exceptions/InvalidConfigurableValueException.cjs +18 -0
  266. package/build/exceptions/InvalidConfigurableValueException.d.cts +8 -0
  267. package/build/exceptions/InvalidConfigurableValueException.d.ts +8 -0
  268. package/build/exceptions/InvalidConfigurableValueException.js +9 -0
  269. package/build/exceptions/InvalidDTOValueException.cjs +18 -0
  270. package/build/exceptions/InvalidDTOValueException.d.cts +8 -0
  271. package/build/exceptions/InvalidDTOValueException.d.ts +8 -0
  272. package/build/exceptions/InvalidDTOValueException.js +9 -0
  273. package/build/exceptions/InvalidGlobStringException.cjs +18 -0
  274. package/build/exceptions/InvalidGlobStringException.d.cts +8 -0
  275. package/build/exceptions/InvalidGlobStringException.d.ts +8 -0
  276. package/build/exceptions/InvalidGlobStringException.js +9 -0
  277. package/build/exceptions/MethodNotFoundException.cjs +18 -0
  278. package/build/exceptions/MethodNotFoundException.d.cts +8 -0
  279. package/build/exceptions/MethodNotFoundException.d.ts +8 -0
  280. package/build/exceptions/MethodNotFoundException.js +9 -0
  281. package/build/exceptions/NotSupportHashException.cjs +18 -0
  282. package/build/exceptions/NotSupportHashException.d.cts +8 -0
  283. package/build/exceptions/NotSupportHashException.d.ts +8 -0
  284. package/build/exceptions/NotSupportHashException.js +9 -0
  285. package/build/exceptions/controller/DuplicateControllerActionPatternException.cjs +18 -0
  286. package/build/exceptions/controller/DuplicateControllerActionPatternException.d.cts +8 -0
  287. package/build/exceptions/controller/DuplicateControllerActionPatternException.d.ts +8 -0
  288. package/build/exceptions/controller/DuplicateControllerActionPatternException.js +9 -0
  289. package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.cjs +18 -0
  290. package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.d.cts +8 -0
  291. package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.d.ts +8 -0
  292. package/build/exceptions/controller/DynamicRegisterControllerNotAllowException.js +9 -0
  293. package/build/exceptions/controller/NoMatchedControllerActionPatternException.cjs +18 -0
  294. package/build/exceptions/controller/NoMatchedControllerActionPatternException.d.cts +8 -0
  295. package/build/exceptions/controller/NoMatchedControllerActionPatternException.d.ts +8 -0
  296. package/build/exceptions/controller/NoMatchedControllerActionPatternException.js +9 -0
  297. package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.cjs +18 -0
  298. package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.d.cts +8 -0
  299. package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.d.ts +8 -0
  300. package/build/exceptions/crypto/asymmetric/AsymmetricDecryptException.js +9 -0
  301. package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.cjs +18 -0
  302. package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.d.cts +8 -0
  303. package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.d.ts +8 -0
  304. package/build/exceptions/crypto/asymmetric/AsymmetricEncryptException.js +9 -0
  305. package/build/exceptions/crypto/asymmetric/AsymmetricSignException.cjs +18 -0
  306. package/build/exceptions/crypto/asymmetric/AsymmetricSignException.d.cts +8 -0
  307. package/build/exceptions/crypto/asymmetric/AsymmetricSignException.d.ts +8 -0
  308. package/build/exceptions/crypto/asymmetric/AsymmetricSignException.js +9 -0
  309. package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.cjs +18 -0
  310. package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.d.cts +8 -0
  311. package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.d.ts +8 -0
  312. package/build/exceptions/crypto/asymmetric/AsymmetricVerifyException.js +9 -0
  313. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.cjs +18 -0
  314. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.d.cts +8 -0
  315. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.d.ts +8 -0
  316. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptKeyPairException.js +9 -0
  317. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.cjs +18 -0
  318. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.d.cts +8 -0
  319. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.d.ts +8 -0
  320. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPrivateKeyException.js +9 -0
  321. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.cjs +18 -0
  322. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.d.cts +8 -0
  323. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.d.ts +8 -0
  324. package/build/exceptions/crypto/asymmetric/InvalidAsymmetricEncryptPublicKeyException.js +9 -0
  325. package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.cjs +18 -0
  326. package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.d.cts +8 -0
  327. package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.d.ts +8 -0
  328. package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPrivateKeyException.js +9 -0
  329. package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.cjs +18 -0
  330. package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.d.cts +8 -0
  331. package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.d.ts +8 -0
  332. package/build/exceptions/crypto/asymmetric/NoAsymmetricEncryptPublicKeyException.js +9 -0
  333. package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.cjs +18 -0
  334. package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.d.cts +8 -0
  335. package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.d.ts +8 -0
  336. package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherIVLengthException.js +9 -0
  337. package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.cjs +18 -0
  338. package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.d.cts +8 -0
  339. package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.d.ts +8 -0
  340. package/build/exceptions/crypto/symmetric/InvalidSymmetricCipherKeyLengthException.js +9 -0
  341. package/build/exceptions/crypto/symmetric/NotSupportCipherException.cjs +18 -0
  342. package/build/exceptions/crypto/symmetric/NotSupportCipherException.d.cts +8 -0
  343. package/build/exceptions/crypto/symmetric/NotSupportCipherException.d.ts +8 -0
  344. package/build/exceptions/crypto/symmetric/NotSupportCipherException.js +9 -0
  345. package/build/exceptions/crypto/symmetric/SymmetricDecryptException.cjs +18 -0
  346. package/build/exceptions/crypto/symmetric/SymmetricDecryptException.d.cts +8 -0
  347. package/build/exceptions/crypto/symmetric/SymmetricDecryptException.d.ts +8 -0
  348. package/build/exceptions/crypto/symmetric/SymmetricDecryptException.js +9 -0
  349. package/build/exceptions/crypto/symmetric/SymmetricEncryptException.cjs +18 -0
  350. package/build/exceptions/crypto/symmetric/SymmetricEncryptException.d.cts +8 -0
  351. package/build/exceptions/crypto/symmetric/SymmetricEncryptException.d.ts +8 -0
  352. package/build/exceptions/crypto/symmetric/SymmetricEncryptException.js +9 -0
  353. package/build/exceptions/validation/InvalidMethodAcceptException.cjs +18 -0
  354. package/build/exceptions/validation/InvalidMethodAcceptException.d.cts +8 -0
  355. package/build/exceptions/validation/InvalidMethodAcceptException.d.ts +8 -0
  356. package/build/exceptions/validation/InvalidMethodAcceptException.js +9 -0
  357. package/build/exceptions/validation/InvalidMethodReturnException.cjs +18 -0
  358. package/build/exceptions/validation/InvalidMethodReturnException.d.cts +8 -0
  359. package/build/exceptions/validation/InvalidMethodReturnException.d.ts +8 -0
  360. package/build/exceptions/validation/InvalidMethodReturnException.js +9 -0
  361. package/build/exceptions/validation/InvalidValueException.cjs +18 -0
  362. package/build/exceptions/validation/InvalidValueException.d.cts +8 -0
  363. package/build/exceptions/validation/InvalidValueException.d.ts +8 -0
  364. package/build/exceptions/validation/InvalidValueException.js +9 -0
  365. package/build/index.d-e5279fea.d.ts +872 -0
  366. package/build/interfaces/IConstructor.cjs +7 -0
  367. package/build/interfaces/IConstructor.d.cts +6 -0
  368. package/build/interfaces/IConstructor.d.ts +6 -0
  369. package/build/interfaces/IConstructor.js +4 -0
  370. package/build/interfaces/ILogger.cjs +7 -0
  371. package/build/interfaces/ILogger.d.cts +22 -0
  372. package/build/interfaces/ILogger.d.ts +22 -0
  373. package/build/interfaces/ILogger.js +4 -0
  374. package/build/interfaces/IPatRun.cjs +7 -0
  375. package/build/interfaces/IPatRun.d.cts +12 -0
  376. package/build/interfaces/IPatRun.d.ts +12 -0
  377. package/build/interfaces/IPatRun.js +4 -0
  378. package/build/interfaces/ISortArrayOptions.cjs +7 -0
  379. package/build/interfaces/ISortArrayOptions.d.cts +12 -0
  380. package/build/interfaces/ISortArrayOptions.d.ts +12 -0
  381. package/build/interfaces/ISortArrayOptions.js +4 -0
  382. package/build/interfaces/ISortObjectOptions.cjs +7 -0
  383. package/build/interfaces/ISortObjectOptions.d.cts +6 -0
  384. package/build/interfaces/ISortObjectOptions.d.ts +6 -0
  385. package/build/interfaces/ISortObjectOptions.js +4 -0
  386. package/build/lib/Application.cjs +50 -0
  387. package/build/lib/Application.d.cts +20 -0
  388. package/build/lib/Application.d.ts +20 -0
  389. package/build/lib/Application.js +41 -0
  390. package/build/lib/base/BaseObject.cjs +50 -0
  391. package/build/lib/base/BaseObject.d.cts +112 -0
  392. package/build/lib/base/BaseObject.d.ts +112 -0
  393. package/build/lib/base/BaseObject.js +41 -0
  394. package/build/lib/base/Component.cjs +50 -0
  395. package/build/lib/base/Component.d.cts +116 -0
  396. package/build/lib/base/Component.d.ts +116 -0
  397. package/build/lib/base/Component.js +41 -0
  398. package/build/lib/base/Container.cjs +50 -0
  399. package/build/lib/base/Container.d.cts +20 -0
  400. package/build/lib/base/Container.d.ts +20 -0
  401. package/build/lib/base/Container.js +41 -0
  402. package/build/lib/base/Controller.cjs +50 -0
  403. package/build/lib/base/Controller.d.cts +20 -0
  404. package/build/lib/base/Controller.d.ts +20 -0
  405. package/build/lib/base/Controller.js +41 -0
  406. package/build/lib/base/DTO.cjs +23 -0
  407. package/build/lib/base/DTO.d.cts +59 -0
  408. package/build/lib/base/DTO.d.ts +59 -0
  409. package/build/lib/base/DTO.js +14 -0
  410. package/build/lib/base/Model.cjs +51 -0
  411. package/build/lib/base/Model.d.cts +30 -0
  412. package/build/lib/base/Model.d.ts +30 -0
  413. package/build/lib/base/Model.js +42 -0
  414. package/build/lib/base/Module.cjs +50 -0
  415. package/build/lib/base/Module.d.cts +20 -0
  416. package/build/lib/base/Module.d.ts +20 -0
  417. package/build/lib/base/Module.js +41 -0
  418. package/build/lib/base/abstracts/AsymmetricEncryption.cjs +27 -0
  419. package/build/lib/base/abstracts/AsymmetricEncryption.d.cts +172 -0
  420. package/build/lib/base/abstracts/AsymmetricEncryption.d.ts +172 -0
  421. package/build/lib/base/abstracts/AsymmetricEncryption.js +18 -0
  422. package/build/lib/base/abstracts/Exception.cjs +17 -0
  423. package/build/lib/base/abstracts/Exception.d.cts +23 -0
  424. package/build/lib/base/abstracts/Exception.d.ts +23 -0
  425. package/build/lib/base/abstracts/Exception.js +8 -0
  426. package/build/lib/base/abstracts/Interval.cjs +51 -0
  427. package/build/lib/base/abstracts/Interval.d.cts +76 -0
  428. package/build/lib/base/abstracts/Interval.d.ts +76 -0
  429. package/build/lib/base/abstracts/Interval.js +42 -0
  430. package/build/lib/base/abstracts/SymmetricEncryption.cjs +23 -0
  431. package/build/lib/base/abstracts/SymmetricEncryption.d.cts +149 -0
  432. package/build/lib/base/abstracts/SymmetricEncryption.d.ts +149 -0
  433. package/build/lib/base/abstracts/SymmetricEncryption.js +14 -0
  434. package/build/lib/base/async-constructor/Append.cjs +14 -0
  435. package/build/lib/base/async-constructor/Append.d.cts +5 -0
  436. package/build/lib/base/async-constructor/Append.d.ts +5 -0
  437. package/build/lib/base/async-constructor/Append.js +5 -0
  438. package/build/lib/base/async-constructor/AsyncConstructor.cjs +15 -0
  439. package/build/lib/base/async-constructor/AsyncConstructor.d.cts +7 -0
  440. package/build/lib/base/async-constructor/AsyncConstructor.d.ts +7 -0
  441. package/build/lib/base/async-constructor/AsyncConstructor.js +6 -0
  442. package/build/lib/components/Formatter.cjs +50 -0
  443. package/build/lib/components/Formatter.d.cts +203 -0
  444. package/build/lib/components/Formatter.d.ts +203 -0
  445. package/build/lib/components/Formatter.js +41 -0
  446. package/build/lib/components/Logger.cjs +50 -0
  447. package/build/lib/components/Logger.d.cts +61 -0
  448. package/build/lib/components/Logger.d.ts +61 -0
  449. package/build/lib/components/Logger.js +41 -0
  450. package/build/lib/crypto/RSA.cjs +28 -0
  451. package/build/lib/crypto/RSA.d.cts +61 -0
  452. package/build/lib/crypto/RSA.d.ts +61 -0
  453. package/build/lib/crypto/RSA.js +19 -0
  454. package/build/lib/crypto/SM2.cjs +28 -0
  455. package/build/lib/crypto/SM2.d.cts +47 -0
  456. package/build/lib/crypto/SM2.d.ts +47 -0
  457. package/build/lib/crypto/SM2.js +19 -0
  458. package/build/lib/crypto/aes/AES128.cjs +25 -0
  459. package/build/lib/crypto/aes/AES128.d.cts +14 -0
  460. package/build/lib/crypto/aes/AES128.d.ts +14 -0
  461. package/build/lib/crypto/aes/AES128.js +16 -0
  462. package/build/lib/crypto/aes/AES192.cjs +25 -0
  463. package/build/lib/crypto/aes/AES192.d.cts +14 -0
  464. package/build/lib/crypto/aes/AES192.d.ts +14 -0
  465. package/build/lib/crypto/aes/AES192.js +16 -0
  466. package/build/lib/crypto/aes/AES256.cjs +25 -0
  467. package/build/lib/crypto/aes/AES256.d.cts +14 -0
  468. package/build/lib/crypto/aes/AES256.d.ts +14 -0
  469. package/build/lib/crypto/aes/AES256.js +16 -0
  470. package/build/lib/crypto/aria/ARIA128.cjs +24 -0
  471. package/build/lib/crypto/aria/ARIA128.d.cts +13 -0
  472. package/build/lib/crypto/aria/ARIA128.d.ts +13 -0
  473. package/build/lib/crypto/aria/ARIA128.js +15 -0
  474. package/build/lib/crypto/aria/ARIA192.cjs +24 -0
  475. package/build/lib/crypto/aria/ARIA192.d.cts +13 -0
  476. package/build/lib/crypto/aria/ARIA192.d.ts +13 -0
  477. package/build/lib/crypto/aria/ARIA192.js +15 -0
  478. package/build/lib/crypto/aria/ARIA256.cjs +24 -0
  479. package/build/lib/crypto/aria/ARIA256.d.cts +13 -0
  480. package/build/lib/crypto/aria/ARIA256.d.ts +13 -0
  481. package/build/lib/crypto/aria/ARIA256.js +15 -0
  482. package/build/lib/crypto/camellia/CAMELLIA128.cjs +24 -0
  483. package/build/lib/crypto/camellia/CAMELLIA128.d.cts +13 -0
  484. package/build/lib/crypto/camellia/CAMELLIA128.d.ts +13 -0
  485. package/build/lib/crypto/camellia/CAMELLIA128.js +15 -0
  486. package/build/lib/crypto/camellia/CAMELLIA192.cjs +24 -0
  487. package/build/lib/crypto/camellia/CAMELLIA192.d.cts +13 -0
  488. package/build/lib/crypto/camellia/CAMELLIA192.d.ts +13 -0
  489. package/build/lib/crypto/camellia/CAMELLIA192.js +15 -0
  490. package/build/lib/crypto/camellia/CAMELLIA256.cjs +24 -0
  491. package/build/lib/crypto/camellia/CAMELLIA256.d.cts +13 -0
  492. package/build/lib/crypto/camellia/CAMELLIA256.d.ts +13 -0
  493. package/build/lib/crypto/camellia/CAMELLIA256.js +15 -0
  494. package/build/lib/crypto/des/DES.cjs +25 -0
  495. package/build/lib/crypto/des/DES.d.cts +14 -0
  496. package/build/lib/crypto/des/DES.d.ts +14 -0
  497. package/build/lib/crypto/des/DES.js +16 -0
  498. package/build/lib/crypto/des/TripleDES.cjs +25 -0
  499. package/build/lib/crypto/des/TripleDES.d.cts +14 -0
  500. package/build/lib/crypto/des/TripleDES.d.ts +14 -0
  501. package/build/lib/crypto/des/TripleDES.js +16 -0
  502. package/build/lib/ioc/DependencyInjectionContainer.cjs +29 -0
  503. package/build/lib/ioc/DependencyInjectionContainer.d.cts +4 -0
  504. package/build/lib/ioc/DependencyInjectionContainer.d.ts +4 -0
  505. package/build/lib/ioc/DependencyInjectionContainer.js +20 -0
  506. package/build/lib/ioc/Errors.cjs +27 -0
  507. package/build/lib/ioc/Errors.d.cts +53 -0
  508. package/build/lib/ioc/Errors.d.ts +53 -0
  509. package/build/lib/ioc/Errors.js +10 -0
  510. package/build/lib/ioc/FunctionTokenizer.cjs +18 -0
  511. package/build/lib/ioc/FunctionTokenizer.d.cts +33 -0
  512. package/build/lib/ioc/FunctionTokenizer.d.ts +33 -0
  513. package/build/lib/ioc/FunctionTokenizer.js +5 -0
  514. package/build/lib/ioc/InjectionMode.cjs +14 -0
  515. package/build/lib/ioc/InjectionMode.d.cts +12 -0
  516. package/build/lib/ioc/InjectionMode.d.ts +12 -0
  517. package/build/lib/ioc/InjectionMode.js +5 -0
  518. package/build/lib/ioc/Lifetime.cjs +14 -0
  519. package/build/lib/ioc/Lifetime.d.cts +12 -0
  520. package/build/lib/ioc/Lifetime.d.ts +12 -0
  521. package/build/lib/ioc/Lifetime.js +5 -0
  522. package/build/lib/ioc/ListModules.cjs +17 -0
  523. package/build/lib/ioc/ListModules.d.cts +4 -0
  524. package/build/lib/ioc/ListModules.d.ts +4 -0
  525. package/build/lib/ioc/ListModules.js +8 -0
  526. package/build/lib/ioc/LoadModuleNative.cjs +14 -0
  527. package/build/lib/ioc/LoadModuleNative.d.cts +9 -0
  528. package/build/lib/ioc/LoadModuleNative.d.ts +9 -0
  529. package/build/lib/ioc/LoadModuleNative.js +5 -0
  530. package/build/lib/ioc/LoadModules.cjs +26 -0
  531. package/build/lib/ioc/LoadModules.d.cts +4 -0
  532. package/build/lib/ioc/LoadModules.d.ts +4 -0
  533. package/build/lib/ioc/LoadModules.js +17 -0
  534. package/build/lib/ioc/ParamParser.cjs +15 -0
  535. package/build/lib/ioc/ParamParser.d.cts +25 -0
  536. package/build/lib/ioc/ParamParser.d.ts +25 -0
  537. package/build/lib/ioc/ParamParser.js +6 -0
  538. package/build/lib/ioc/Resolvers.cjs +49 -0
  539. package/build/lib/ioc/Resolvers.d.cts +4 -0
  540. package/build/lib/ioc/Resolvers.d.ts +4 -0
  541. package/build/lib/ioc/Resolvers.js +16 -0
  542. package/build/lib/ioc/Utils.cjs +35 -0
  543. package/build/lib/ioc/Utils.d.cts +38 -0
  544. package/build/lib/ioc/Utils.d.ts +38 -0
  545. package/build/lib/ioc/Utils.js +6 -0
  546. package/build/options/ApplicationOptions.cjs +50 -0
  547. package/build/options/ApplicationOptions.d.cts +20 -0
  548. package/build/options/ApplicationOptions.d.ts +20 -0
  549. package/build/options/ApplicationOptions.js +41 -0
  550. package/build/options/LoadComponentOptions.cjs +50 -0
  551. package/build/options/LoadComponentOptions.d.cts +22 -0
  552. package/build/options/LoadComponentOptions.d.ts +22 -0
  553. package/build/options/LoadComponentOptions.js +41 -0
  554. package/build/options/LoadEntryClassOptions.cjs +50 -0
  555. package/build/options/LoadEntryClassOptions.d.cts +16 -0
  556. package/build/options/LoadEntryClassOptions.d.ts +16 -0
  557. package/build/options/LoadEntryClassOptions.js +41 -0
  558. package/build/options/LoadEntryCommonOptions.cjs +27 -0
  559. package/build/options/LoadEntryCommonOptions.d.cts +13 -0
  560. package/build/options/LoadEntryCommonOptions.d.ts +13 -0
  561. package/build/options/LoadEntryCommonOptions.js +18 -0
  562. package/build/options/LoadModuleOptions.cjs +50 -0
  563. package/build/options/LoadModuleOptions.d.cts +20 -0
  564. package/build/options/LoadModuleOptions.d.ts +20 -0
  565. package/build/options/LoadModuleOptions.js +41 -0
  566. package/build/options/ModuleOptions.cjs +50 -0
  567. package/build/options/ModuleOptions.d.cts +20 -0
  568. package/build/options/ModuleOptions.d.ts +20 -0
  569. package/build/options/ModuleOptions.js +41 -0
  570. package/build/types/AsyncFunction.cjs +7 -0
  571. package/build/types/AsyncFunction.d.cts +3 -0
  572. package/build/types/AsyncFunction.d.ts +3 -0
  573. package/build/types/AsyncFunction.js +4 -0
  574. package/build/types/ControllerActionMapItem.cjs +7 -0
  575. package/build/types/ControllerActionMapItem.d.cts +20 -0
  576. package/build/types/ControllerActionMapItem.d.ts +20 -0
  577. package/build/types/ControllerActionMapItem.js +4 -0
  578. package/build/types/InjectionProperties.cjs +7 -0
  579. package/build/types/InjectionProperties.d.cts +3 -0
  580. package/build/types/InjectionProperties.d.ts +3 -0
  581. package/build/types/InjectionProperties.js +4 -0
  582. package/build/types/TimeInput.cjs +7 -0
  583. package/build/types/TimeInput.d.cts +5 -0
  584. package/build/types/TimeInput.d.ts +5 -0
  585. package/build/types/TimeInput.js +4 -0
  586. package/build/types/TimeObject.cjs +7 -0
  587. package/build/types/TimeObject.d.cts +11 -0
  588. package/build/types/TimeObject.d.ts +11 -0
  589. package/build/types/TimeObject.js +4 -0
  590. package/build/types/UnitOfTime.cjs +7 -0
  591. package/build/types/UnitOfTime.d.cts +14 -0
  592. package/build/types/UnitOfTime.d.ts +14 -0
  593. package/build/types/UnitOfTime.js +4 -0
  594. package/package.json +145 -0
@@ -0,0 +1,585 @@
1
+ import { require_is_glob } from './chunk-J6RXNX2K.js';
2
+ import { OBJECT_INIT_MARK } from './chunk-4OHSPWRQ.js';
3
+ import { __commonJS, init_esm_shims, __require, __name, __toESM } from './chunk-5NK7E2HA.js';
4
+ import { setTimeout } from 'timers/promises';
5
+ import { isPromise as isPromise$1 } from 'util/types';
6
+ import { Stream } from 'stream';
7
+
8
+ // node_modules/randombytes/index.js
9
+ var require_randombytes = __commonJS({
10
+ "node_modules/randombytes/index.js"(exports, module) {
11
+ init_esm_shims();
12
+ module.exports = __require("crypto").randomBytes;
13
+ }
14
+ });
15
+
16
+ // node_modules/randomstring/lib/charset.js
17
+ var require_charset = __commonJS({
18
+ "node_modules/randomstring/lib/charset.js"(exports, module) {
19
+ init_esm_shims();
20
+ function Charset() {
21
+ this.chars = "";
22
+ }
23
+ __name(Charset, "Charset");
24
+ Charset.prototype.setType = function(type) {
25
+ if (Array.isArray(type)) {
26
+ for (var i = 0; i < type.length; i++) {
27
+ this.chars += this.getCharacters(type[i]);
28
+ }
29
+ } else {
30
+ this.chars = this.getCharacters(type);
31
+ }
32
+ };
33
+ Charset.prototype.getCharacters = function(type) {
34
+ var chars;
35
+ var numbers = "0123456789";
36
+ var charsLower = "abcdefghijklmnopqrstuvwxyz";
37
+ var charsUpper = charsLower.toUpperCase();
38
+ var hexChars = "abcdef";
39
+ var binaryChars = "01";
40
+ var octalChars = "01234567";
41
+ if (type === "alphanumeric") {
42
+ chars = numbers + charsLower + charsUpper;
43
+ } else if (type === "numeric") {
44
+ chars = numbers;
45
+ } else if (type === "alphabetic") {
46
+ chars = charsLower + charsUpper;
47
+ } else if (type === "hex") {
48
+ chars = numbers + hexChars;
49
+ } else if (type === "binary") {
50
+ chars = binaryChars;
51
+ } else if (type === "octal") {
52
+ chars = octalChars;
53
+ } else {
54
+ chars = type;
55
+ }
56
+ return chars;
57
+ };
58
+ Charset.prototype.removeUnreadable = function() {
59
+ var unreadableChars = /[0OIl]/g;
60
+ this.chars = this.chars.replace(unreadableChars, "");
61
+ };
62
+ Charset.prototype.setcapitalization = function(capitalization) {
63
+ if (capitalization === "uppercase") {
64
+ this.chars = this.chars.toUpperCase();
65
+ } else if (capitalization === "lowercase") {
66
+ this.chars = this.chars.toLowerCase();
67
+ }
68
+ };
69
+ Charset.prototype.removeDuplicates = function() {
70
+ var charMap = this.chars.split("");
71
+ charMap = [...new Set(charMap)];
72
+ this.chars = charMap.join("");
73
+ };
74
+ module.exports = Charset;
75
+ }
76
+ });
77
+
78
+ // node_modules/randomstring/lib/randomstring.js
79
+ var require_randomstring = __commonJS({
80
+ "node_modules/randomstring/lib/randomstring.js"(exports) {
81
+ init_esm_shims();
82
+ var randomBytes = require_randombytes();
83
+ var Charset = require_charset();
84
+ function unsafeRandomBytes(length) {
85
+ var stack = [];
86
+ for (var i = 0; i < length; i++) {
87
+ stack.push(Math.floor(Math.random() * 255));
88
+ }
89
+ return {
90
+ length,
91
+ readUInt8: function(index) {
92
+ return stack[index];
93
+ }
94
+ };
95
+ }
96
+ __name(unsafeRandomBytes, "unsafeRandomBytes");
97
+ function safeRandomBytes(length) {
98
+ try {
99
+ return randomBytes(length);
100
+ } catch (e) {
101
+ return unsafeRandomBytes(length);
102
+ }
103
+ }
104
+ __name(safeRandomBytes, "safeRandomBytes");
105
+ function processString(buf, initialString, chars, reqLen, maxByte) {
106
+ var string = initialString;
107
+ for (var i = 0; i < buf.length && string.length < reqLen; i++) {
108
+ var randomByte = buf.readUInt8(i);
109
+ if (randomByte < maxByte) {
110
+ string += chars.charAt(randomByte % chars.length);
111
+ }
112
+ }
113
+ return string;
114
+ }
115
+ __name(processString, "processString");
116
+ function getAsyncString(string, chars, length, maxByte, cb) {
117
+ randomBytes(length, function(err, buf) {
118
+ if (err) {
119
+ cb(err);
120
+ }
121
+ var generatedString = processString(buf, string, chars, length, maxByte);
122
+ if (generatedString.length < length) {
123
+ getAsyncString(generatedString, chars, length, maxByte, cb);
124
+ } else {
125
+ cb(null, generatedString);
126
+ }
127
+ });
128
+ }
129
+ __name(getAsyncString, "getAsyncString");
130
+ exports.generate = function(options, cb) {
131
+ var charset = new Charset();
132
+ var length, string = "";
133
+ if (typeof options === "object") {
134
+ length = typeof options.length === "number" ? options.length : 32;
135
+ if (options.charset) {
136
+ charset.setType(options.charset);
137
+ } else {
138
+ charset.setType("alphanumeric");
139
+ }
140
+ if (options.capitalization) {
141
+ charset.setcapitalization(options.capitalization);
142
+ }
143
+ if (options.readable) {
144
+ charset.removeUnreadable();
145
+ }
146
+ charset.removeDuplicates();
147
+ } else if (typeof options === "number") {
148
+ length = options;
149
+ charset.setType("alphanumeric");
150
+ } else {
151
+ length = 32;
152
+ charset.setType("alphanumeric");
153
+ }
154
+ var charsLen = charset.chars.length;
155
+ var maxByte = 256 - 256 % charsLen;
156
+ if (!cb) {
157
+ while (string.length < length) {
158
+ var buf = safeRandomBytes(Math.ceil(length * 256 / maxByte));
159
+ string = processString(buf, string, charset.chars, length, maxByte);
160
+ }
161
+ return string;
162
+ }
163
+ getAsyncString(string, charset.chars, length, maxByte, cb);
164
+ };
165
+ }
166
+ });
167
+
168
+ // node_modules/randomstring/index.js
169
+ var require_randomstring2 = __commonJS({
170
+ "node_modules/randomstring/index.js"(exports, module) {
171
+ init_esm_shims();
172
+ module.exports = require_randomstring();
173
+ }
174
+ });
175
+
176
+ // src/Utilities.ts
177
+ init_esm_shims();
178
+
179
+ // node_modules/sort-array/index.mjs
180
+ init_esm_shims();
181
+
182
+ // node_modules/array-back/index.mjs
183
+ init_esm_shims();
184
+ function isObject(input) {
185
+ return typeof input === "object" && input !== null;
186
+ }
187
+ __name(isObject, "isObject");
188
+ function isArrayLike(input) {
189
+ return isObject(input) && typeof input.length === "number";
190
+ }
191
+ __name(isArrayLike, "isArrayLike");
192
+ function arrayify(input) {
193
+ if (Array.isArray(input)) {
194
+ return input;
195
+ } else if (input === void 0) {
196
+ return [];
197
+ } else if (isArrayLike(input) || input instanceof Set) {
198
+ return Array.from(input);
199
+ } else {
200
+ return [input];
201
+ }
202
+ }
203
+ __name(arrayify, "arrayify");
204
+ var array_back_default = arrayify;
205
+
206
+ // node_modules/typical/index.mjs
207
+ init_esm_shims();
208
+ function isNumber(n) {
209
+ return !isNaN(parseFloat(n)) && isFinite(n);
210
+ }
211
+ __name(isNumber, "isNumber");
212
+ function isPlainObject(input) {
213
+ return input !== null && typeof input === "object" && input.constructor === Object;
214
+ }
215
+ __name(isPlainObject, "isPlainObject");
216
+ function isArrayLike2(input) {
217
+ return isObject2(input) && typeof input.length === "number";
218
+ }
219
+ __name(isArrayLike2, "isArrayLike");
220
+ function isObject2(input) {
221
+ return typeof input === "object" && input !== null;
222
+ }
223
+ __name(isObject2, "isObject");
224
+ function isDefined(input) {
225
+ return typeof input !== "undefined";
226
+ }
227
+ __name(isDefined, "isDefined");
228
+ function isUndefined(input) {
229
+ return !isDefined(input);
230
+ }
231
+ __name(isUndefined, "isUndefined");
232
+ function isNull(input) {
233
+ return input === null;
234
+ }
235
+ __name(isNull, "isNull");
236
+ function isDefinedValue(input) {
237
+ return isDefined(input) && !isNull(input) && !Number.isNaN(input);
238
+ }
239
+ __name(isDefinedValue, "isDefinedValue");
240
+ function isClass(input) {
241
+ if (typeof input === "function") {
242
+ return /^class /.test(Function.prototype.toString.call(input));
243
+ } else {
244
+ return false;
245
+ }
246
+ }
247
+ __name(isClass, "isClass");
248
+ function isPrimitive(input) {
249
+ if (input === null)
250
+ return true;
251
+ switch (typeof input) {
252
+ case "string":
253
+ case "number":
254
+ case "symbol":
255
+ case "undefined":
256
+ case "boolean":
257
+ return true;
258
+ default:
259
+ return false;
260
+ }
261
+ }
262
+ __name(isPrimitive, "isPrimitive");
263
+ function isPromise(input) {
264
+ if (input) {
265
+ const isPromise3 = isDefined(Promise) && input instanceof Promise;
266
+ const isThenable = input.then && typeof input.then === "function";
267
+ return !!(isPromise3 || isThenable);
268
+ } else {
269
+ return false;
270
+ }
271
+ }
272
+ __name(isPromise, "isPromise");
273
+ function isIterable(input) {
274
+ if (input === null || !isDefined(input)) {
275
+ return false;
276
+ } else {
277
+ return typeof input[Symbol.iterator] === "function" || typeof input[Symbol.asyncIterator] === "function";
278
+ }
279
+ }
280
+ __name(isIterable, "isIterable");
281
+ function isString(input) {
282
+ return typeof input === "string";
283
+ }
284
+ __name(isString, "isString");
285
+ function isFunction(input) {
286
+ return typeof input === "function";
287
+ }
288
+ __name(isFunction, "isFunction");
289
+ var typical_default = {
290
+ isNumber,
291
+ isPlainObject,
292
+ isArrayLike: isArrayLike2,
293
+ isObject: isObject2,
294
+ isDefined,
295
+ isUndefined,
296
+ isNull,
297
+ isDefinedValue,
298
+ isClass,
299
+ isPrimitive,
300
+ isPromise,
301
+ isIterable,
302
+ isString,
303
+ isFunction
304
+ };
305
+
306
+ // node_modules/sort-array/index.mjs
307
+ function sortArray(arr, options = {}) {
308
+ options = Object.assign(
309
+ {
310
+ computed: {},
311
+ customOrders: {},
312
+ nullRank: 1,
313
+ undefinedRank: 1
314
+ },
315
+ options
316
+ );
317
+ arr.sort(getCompareFunc(options));
318
+ return arr;
319
+ }
320
+ __name(sortArray, "sortArray");
321
+ function getCompareFunc(options = {}) {
322
+ const by = array_back_default(options.by);
323
+ const order = array_back_default(options.order);
324
+ const { customOrders, computed } = options;
325
+ return /* @__PURE__ */ __name(function compareFunc(xIn, yIn, byIndex = 0) {
326
+ const currOrder = order[byIndex] || "asc";
327
+ if (!(currOrder === "asc" || currOrder === "desc" || customOrders[currOrder])) {
328
+ return 0;
329
+ }
330
+ let result, x, y;
331
+ if (by.length) {
332
+ x = typical_default.isDefined(xIn[by[byIndex]]) ? xIn[by[byIndex]] : computed[by[byIndex]] && computed[by[byIndex]](xIn);
333
+ y = typical_default.isDefined(yIn[by[byIndex]]) ? yIn[by[byIndex]] : computed[by[byIndex]] && computed[by[byIndex]](yIn);
334
+ } else {
335
+ x = xIn;
336
+ y = yIn;
337
+ }
338
+ if (customOrders && customOrders[currOrder]) {
339
+ result = customOrders[currOrder].indexOf(x) - customOrders[currOrder].indexOf(y);
340
+ } else if (x === y) {
341
+ result = 0;
342
+ } else if (typical_default.isNull(x) && typical_default.isUndefined(y)) {
343
+ result = currOrder === "asc" ? 1 : currOrder === "desc" ? -1 : 0;
344
+ } else if (typical_default.isUndefined(x) && typical_default.isNull(y)) {
345
+ result = currOrder === "asc" ? -1 : currOrder === "desc" ? 1 : 0;
346
+ } else if (typical_default.isNull(x) && typical_default.isDefinedValue(y)) {
347
+ result = options.nullRank;
348
+ } else if (typical_default.isUndefined(x) && typical_default.isDefinedValue(y)) {
349
+ result = options.undefinedRank;
350
+ } else if (typical_default.isNull(y) && typical_default.isDefinedValue(x)) {
351
+ result = -options.nullRank;
352
+ } else if (typical_default.isUndefined(y) && typical_default.isDefinedValue(x)) {
353
+ result = -options.undefinedRank;
354
+ } else {
355
+ result = x < y ? -1 : x > y ? 1 : 0;
356
+ if (currOrder === "desc") {
357
+ result = result * -1;
358
+ }
359
+ }
360
+ if (result === 0 && typical_default.isDefined(by[byIndex + 1])) {
361
+ result = compareFunc(xIn, yIn, byIndex + 1);
362
+ }
363
+ return result;
364
+ }, "compareFunc");
365
+ }
366
+ __name(getCompareFunc, "getCompareFunc");
367
+ var sort_array_default = sortArray;
368
+
369
+ // node_modules/sort-keys/index.js
370
+ init_esm_shims();
371
+
372
+ // node_modules/is-plain-obj/index.js
373
+ init_esm_shims();
374
+ function isPlainObject2(value) {
375
+ if (typeof value !== "object" || value === null) {
376
+ return false;
377
+ }
378
+ const prototype = Object.getPrototypeOf(value);
379
+ return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
380
+ }
381
+ __name(isPlainObject2, "isPlainObject");
382
+
383
+ // node_modules/sort-keys/index.js
384
+ function sortKeys(object, options = {}) {
385
+ if (!isPlainObject2(object) && !Array.isArray(object)) {
386
+ throw new TypeError("Expected a plain object or array");
387
+ }
388
+ const { deep, compare } = options;
389
+ const seenInput = [];
390
+ const seenOutput = [];
391
+ const deepSortArray = /* @__PURE__ */ __name((array) => {
392
+ const seenIndex = seenInput.indexOf(array);
393
+ if (seenIndex !== -1) {
394
+ return seenOutput[seenIndex];
395
+ }
396
+ const result = [];
397
+ seenInput.push(array);
398
+ seenOutput.push(result);
399
+ result.push(...array.map((item) => {
400
+ if (Array.isArray(item)) {
401
+ return deepSortArray(item);
402
+ }
403
+ if (isPlainObject2(item)) {
404
+ return _sortKeys(item);
405
+ }
406
+ return item;
407
+ }));
408
+ return result;
409
+ }, "deepSortArray");
410
+ const _sortKeys = /* @__PURE__ */ __name((object2) => {
411
+ const seenIndex = seenInput.indexOf(object2);
412
+ if (seenIndex !== -1) {
413
+ return seenOutput[seenIndex];
414
+ }
415
+ const result = {};
416
+ const keys = Object.keys(object2).sort(compare);
417
+ seenInput.push(object2);
418
+ seenOutput.push(result);
419
+ for (const key of keys) {
420
+ const value = object2[key];
421
+ let newValue;
422
+ if (deep && Array.isArray(value)) {
423
+ newValue = deepSortArray(value);
424
+ } else {
425
+ newValue = deep && isPlainObject2(value) ? _sortKeys(value) : value;
426
+ }
427
+ Object.defineProperty(result, key, {
428
+ ...Object.getOwnPropertyDescriptor(object2, key),
429
+ value: newValue
430
+ });
431
+ }
432
+ return result;
433
+ }, "_sortKeys");
434
+ if (Array.isArray(object)) {
435
+ return deep ? deepSortArray(object) : object.slice();
436
+ }
437
+ return _sortKeys(object);
438
+ }
439
+ __name(sortKeys, "sortKeys");
440
+
441
+ // src/Utilities.ts
442
+ var import_is_glob = __toESM(require_is_glob(), 1);
443
+ var randomString = __toESM(require_randomstring2(), 1);
444
+ function IsEqual(val1, val2) {
445
+ const compareSet = /* @__PURE__ */ new Set();
446
+ compareSet.add(val1).add(val2);
447
+ return compareSet.size === 2;
448
+ }
449
+ __name(IsEqual, "IsEqual");
450
+ function IsPath(inp) {
451
+ try {
452
+ const pathRegex = new RegExp('^(\\/|\\.\\.?\\/|([A-Za-z]:)?\\\\)([^\\\\\\/:*?"<>|\\r\\n]+[\\\\\\/])*[^\\\\\\/:*?"<>|\\r\\n]*$');
453
+ return pathRegex.test(As(inp));
454
+ } catch (e) {
455
+ return false;
456
+ }
457
+ }
458
+ __name(IsPath, "IsPath");
459
+ function* ConvertToIterable(inp) {
460
+ for (let i = 0; i < inp.length; i++)
461
+ yield inp[i];
462
+ }
463
+ __name(ConvertToIterable, "ConvertToIterable");
464
+ function ConvertToStream(inp, options) {
465
+ options = options ? options : {};
466
+ return Stream.Readable.from(ConvertToIterable(inp), options);
467
+ }
468
+ __name(ConvertToStream, "ConvertToStream");
469
+ function isPromise2(target) {
470
+ return isPromise$1(target) ? true : !!target && (typeof target === "object" || typeof target === "function") && typeof target.then === "function";
471
+ }
472
+ __name(isPromise2, "isPromise");
473
+ async function Delay(ms = 1e3) {
474
+ return await setTimeout(ms);
475
+ }
476
+ __name(Delay, "Delay");
477
+ function ThrowIntoBlackHole(...args) {
478
+ }
479
+ __name(ThrowIntoBlackHole, "ThrowIntoBlackHole");
480
+ function IsObjectInitialized(obj) {
481
+ return !!Reflect.getOwnMetadata(OBJECT_INIT_MARK, obj);
482
+ }
483
+ __name(IsObjectInitialized, "IsObjectInitialized");
484
+ function MergeSet(s1, s2) {
485
+ return /* @__PURE__ */ new Set([...s1, ...s2]);
486
+ }
487
+ __name(MergeSet, "MergeSet");
488
+ function MergeArray(arr1, arr2) {
489
+ return [...arr1, ...arr2];
490
+ }
491
+ __name(MergeArray, "MergeArray");
492
+ function MergeMap(m1, m2) {
493
+ return new Map([...m1, ...m2]);
494
+ }
495
+ __name(MergeMap, "MergeMap");
496
+ function SetToArray(set) {
497
+ return Array.from(set);
498
+ }
499
+ __name(SetToArray, "SetToArray");
500
+ function ArrayToSet(arr) {
501
+ return new Set(arr);
502
+ }
503
+ __name(ArrayToSet, "ArrayToSet");
504
+ function UniqueArray(arr) {
505
+ return Array.from(new Set(arr));
506
+ }
507
+ __name(UniqueArray, "UniqueArray");
508
+ function SortArray(arr, ...options) {
509
+ if (options.length < 2) {
510
+ let sortOptions = { order: "asc" };
511
+ if (options.length)
512
+ sortOptions = Object.assign(sortOptions, {
513
+ by: options[0].by,
514
+ order: options[0].order,
515
+ computed: options[0].computed
516
+ });
517
+ return sort_array_default(arr, sortOptions);
518
+ } else {
519
+ const sortsOptions = {
520
+ by: [],
521
+ order: [],
522
+ customOrders: {}
523
+ };
524
+ options.forEach((opt) => {
525
+ if (opt.by) {
526
+ const field = opt.by;
527
+ sortsOptions.by.push(field);
528
+ sortsOptions.order.push(field);
529
+ sortsOptions.customOrders[field] = SortArray(arr, opt).map((value) => value[field]);
530
+ }
531
+ });
532
+ return sort_array_default(arr, sortsOptions);
533
+ }
534
+ }
535
+ __name(SortArray, "SortArray");
536
+ function SortObject(object, options) {
537
+ return sortKeys(object, {
538
+ deep: options == null ? void 0 : options.deep,
539
+ compare: (a, b) => {
540
+ switch (options == null ? void 0 : options.order) {
541
+ case "asc":
542
+ return a.localeCompare(b);
543
+ case "desc":
544
+ return -a.localeCompare(b);
545
+ default:
546
+ return a.localeCompare(b);
547
+ }
548
+ }
549
+ });
550
+ }
551
+ __name(SortObject, "SortObject");
552
+ function ConfigureObjectProperties(target, properties) {
553
+ Object.keys(properties ? properties : {}).forEach((propertyKey) => target[propertyKey] = properties[propertyKey]);
554
+ }
555
+ __name(ConfigureObjectProperties, "ConfigureObjectProperties");
556
+ function As(inp) {
557
+ return inp;
558
+ }
559
+ __name(As, "As");
560
+ function IsGlobString(inp) {
561
+ return (0, import_is_glob.default)(inp);
562
+ }
563
+ __name(IsGlobString, "IsGlobString");
564
+ function RandomString(length, charset) {
565
+ return randomString.generate({
566
+ length: length !== void 0 ? length : 32,
567
+ charset: As(charset !== void 0 ? charset : "alphanumeric")
568
+ });
569
+ }
570
+ __name(RandomString, "RandomString");
571
+ function NonceStr() {
572
+ return RandomString(32, "alphanumeric");
573
+ }
574
+ __name(NonceStr, "NonceStr");
575
+ function ParentConstructor(target) {
576
+ const rootProto = Symbol.constructor.prototype.constructor.__proto__;
577
+ const constructor = !!target[Symbol.hasInstance] && target.prototype ? target : target.constructor;
578
+ const proto = constructor.prototype.constructor.__proto__;
579
+ return proto === rootProto ? null : proto;
580
+ }
581
+ __name(ParentConstructor, "ParentConstructor");
582
+
583
+ export { ArrayToSet, As, ConfigureObjectProperties, ConvertToIterable, ConvertToStream, Delay, IsEqual, IsGlobString, IsObjectInitialized, IsPath, MergeArray, MergeMap, MergeSet, NonceStr, ParentConstructor, RandomString, SetToArray, SortArray, SortObject, ThrowIntoBlackHole, UniqueArray, isPromise2 as isPromise };
584
+ //# sourceMappingURL=out.js.map
585
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9yYW5kb21ieXRlcy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yYW5kb21zdHJpbmcvbGliL2NoYXJzZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvcmFuZG9tc3RyaW5nL2xpYi9yYW5kb21zdHJpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMvcmFuZG9tc3RyaW5nL2luZGV4LmpzIiwiLi4vc3JjL1V0aWxpdGllcy50cyIsIi4uL25vZGVfbW9kdWxlcy9zb3J0LWFycmF5L2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy9hcnJheS1iYWNrL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy90eXBpY2FsL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy9zb3J0LWtleXMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqL2luZGV4LmpzIl0sIm5hbWVzIjpbInJlcXVpcmVfcmFuZG9tc3RyaW5nIiwiaXNBcnJheUxpa2UiLCJpc09iamVjdCIsImlzUHJvbWlzZSIsImlzUGxhaW5PYmplY3QiLCJvYmplY3QiLCJpc0dsb2IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBTyxVQUFVLFVBQVEsUUFBUSxFQUFFO0FBQUE7QUFBQTs7O0FDQW5DO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFBUyxVQUFVO0FBQ2pCLFdBQUssUUFBUTtBQUFBLElBQ2Y7QUFGUztBQUlULFlBQVEsVUFBVSxVQUFVLFNBQVMsTUFBTTtBQUN6QyxVQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDdkIsaUJBQVMsSUFBRSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDbEMsZUFBSyxTQUFTLEtBQUssY0FBYyxLQUFLLENBQUMsQ0FBQztBQUFBLFFBQzFDO0FBQUEsTUFDRixPQUNLO0FBQ0gsYUFBSyxRQUFRLEtBQUssY0FBYyxJQUFJO0FBQUEsTUFDdEM7QUFBQSxJQUNGO0FBRUEs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QUFPLFVBQVUsWUFBWSxPQUFPO0FBQ3hDO0FBTGdCIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdjcnlwdG8nKS5yYW5kb21CeXRlc1xuIiwiZnVuY3Rpb24gQ2hhcnNldCgpIHtcbiAgdGhpcy5jaGFycyA9ICcnO1xufVxuXG5DaGFyc2V0LnByb3RvdHlwZS5zZXRUeXBlID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgIGZvciAodmFyIGk9MDsgaSA8IHR5cGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2hhcnMgKz0gdGhpcy5nZXRDaGFyYWN0ZXJzKHR5cGVbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLmNoYXJzID0gdGhpcy5nZXRDaGFyYWN0ZXJzKHR5cGUpO1xuICB9XG59XG5cbkNoYXJzZXQucHJvdG90eXBlLmdldENoYXJhY3RlcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBjaGFycztcblxuICB2YXIgbnVtYmVycyAgICAgPSAnMDEyMzQ1Njc4OSc7XG4gIHZhciBjaGFyc0xvd2VyICA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG4gIHZhciBjaGFyc1VwcGVyICA9IGNoYXJzTG93ZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGhleENoYXJzICAgID0gJ2FiY2RlZic7XG4gIHZhciBiaW5hcnlDaGFycyA9ICcwMSc7XG4gIHZhciBvY3RhbENoYXJzICA9ICcwMTIzNDU2Nyc7XG5cbiAgaWYgKHR5cGUgPT09ICdhbHBoYW51bWVyaWMnKSB7XG4gICAgY2hhcnMgPSBudW1iZXJzICsgY2hhcnNMb3dlciArIGNoYXJzVXBwZXI7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gJ251bWVyaWMnKSB7XG4gICAgY2hhcnMgPSBudW1iZXJzO1xuICB9XG4gIGVsc2UgaWYgKHR5cGUgPT09ICdhbHBoYWJldGljJykge1xuICAgIGNoYXJzID0gY2hhcnNMb3dlciArIGNoYXJzVXBwZXI7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gJ2hleCcpIHtcbiAgICBjaGFycyA9IG51bWJlcnMgKyBoZXhDaGFycztcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSAnYmluYXJ5Jykge1xuICAgIGNoYXJzID0gYmluYXJ5Q2hhcnM7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gJ29jdGFsJykge1xuICAgIGNoYXJzID0gb2N0YWxDaGFycztcbiAgfVxuICBlbHNlIHtcbiAgICBjaGFycyA9IHR5cGU7XG4gIH1cblxuICByZXR1cm4gY2hhcnM7XG59XG5cbkNoYXJzZXQucHJvdG90eXBlLnJlbW92ZVVucmVhZGFibGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHVucmVhZGFibGVDaGFycyA9IC9bME9JbF0vZztcbiAgdGhpcy5jaGFycyA9IHRoaXMuY2hhcnMucmVwbGFjZSh1bnJlYWRhYmxlQ2hhcnMsICcnKTtcbn1cblxuQ2hhcnNldC5wcm90b3R5cGUuc2V0Y2FwaXRhbGl6YXRpb24gPSBmdW5jdGlvbihjYXBpdGFsaXphdGlvbikge1xuICBpZiAoY2FwaXRhbGl6YXRpb24gPT09ICd1cHBlcmNhc2UnKSB7XG4gICAgdGhpcy5jaGFycyA9IHRoaXMuY2hhcnMudG9VcHBlckNhc2UoKTtcbiAgfVxuICBlbHNlIGlmIChjYXBpdGFsaXphdGlvbiA9PT0gJ2xvd2VyY2FzZScpIHtcbiAgICB0aGlzLmNoYXJzID0gdGhpcy5jaGFycy50b0xvd2VyQ2FzZSgpO1xuICB9XG59XG5cbkNoYXJzZXQucHJvdG90eXBlLnJlbW92ZUR1cGxpY2F0ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNoYXJNYXAgPSB0aGlzLmNoYXJzLnNwbGl0KCcnKTtcbiAgY2hhck1hcCA9IFsuLi5uZXcgU2V0KGNoYXJNYXApXTtcbiAgdGhpcy5jaGFycyA9IGNoYXJNYXAuam9pbignJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IENoYXJzZXQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHJhbmRvbUJ5dGVzID0gcmVxdWlyZSgncmFuZG9tYnl0ZXMnKTtcbnZhciBDaGFyc2V0ID0gcmVxdWlyZSgnLi9jaGFyc2V0LmpzJyk7XG5cblxuZnVuY3Rpb24gdW5zYWZlUmFuZG9tQnl0ZXMobGVuZ3RoKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgc3RhY2sucHVzaChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTUpKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGVuZ3RoLFxuICAgIHJlYWRVSW50ODogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICByZXR1cm4gc3RhY2tbaW5kZXhdO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gc2FmZVJhbmRvbUJ5dGVzKGxlbmd0aCkge1xuICB0cnkge1xuICAgIHJldHVybiByYW5kb21CeXRlcyhsZW5ndGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLyogUmVhY3QvUmVhY3QgTmF0aXZlIEZpeCArIEV0ZXJuYWwgbG9vcCByZW1vdmVkICovXG4gICAgcmV0dXJuIHVuc2FmZVJhbmRvbUJ5dGVzKGxlbmd0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1N0cmluZyhidWYsIGluaXRpYWxTdHJpbmcsIGNoYXJzLCByZXFMZW4sIG1heEJ5dGUpIHtcbiAgdmFyIHN0cmluZyA9IGluaXRpYWxTdHJpbmc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aCAmJiBzdHJpbmcubGVuZ3RoIDwgcmVxTGVuOyBpKyspIHtcbiAgICB2YXIgcmFuZG9tQnl0ZSA9IGJ1Zi5yZWFkVUludDgoaSk7XG4gICAgaWYgKHJhbmRvbUJ5dGUgPCBtYXhCeXRlKSB7XG4gICAgICBzdHJpbmcgKz0gY2hhcnMuY2hhckF0KHJhbmRvbUJ5dGUgJSBjaGFycy5sZW5ndGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRBc3luY1N0cmluZyhzdHJpbmcsIGNoYXJzLCBsZW5ndGgsIG1heEJ5dGUsIGNiKSB7XG4gIHJhbmRvbUJ5dGVzKGxlbmd0aCwgZnVuY3Rpb24oZXJyLCBidWYpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICAvLyBTaW5jZSBpdCBpcyB3YWl0aW5nIGZvciBlbnRyb3B5LCBlcnJvcnMgYXJlIGxlZ2l0IGFuZCB3ZSBzaG91bGRuJ3QganVzdCBrZWVwIHJldHJ5aW5nXG4gICAgICBjYihlcnIpO1xuICAgIH1cbiAgICB2YXIgZ2VuZXJhdGVkU3RyaW5nID0gcHJvY2Vzc1N0cmluZyhidWYsIHN0cmluZywgY2hhcnMsIGxlbmd0aCwgbWF4Qnl0ZSk7XG4gICAgaWYgKGdlbmVyYXRlZFN0cmluZy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgIGdldEFzeW5jU3RyaW5nKGdlbmVyYXRlZFN0cmluZywgY2hhcnMsIGxlbmd0aCwgbWF4Qnl0ZSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYihudWxsLCBnZW5lcmF0ZWRTdHJpbmcpO1xuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0cy5nZW5lcmF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNiKSB7XG4gIHZhciBjaGFyc2V0ID0gbmV3IENoYXJzZXQoKTtcblxuICB2YXIgbGVuZ3RoLCBjaGFycywgY2FwaXRhbGl6YXRpb24sIHN0cmluZyA9ICcnO1xuXG4gIC8vIEhhbmRsZSBvcHRpb25zXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICBsZW5ndGggPSB0eXBlb2Ygb3B0aW9ucy5sZW5ndGggPT09ICdudW1iZXInID8gb3B0aW9ucy5sZW5ndGggOiAzMjtcblxuICAgIGlmIChvcHRpb25zLmNoYXJzZXQpIHtcbiAgICAgIGNoYXJzZXQuc2V0VHlwZShvcHRpb25zLmNoYXJzZXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNoYXJzZXQuc2V0VHlwZSgnYWxwaGFudW1lcmljJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2FwaXRhbGl6YXRpb24pIHtcbiAgICAgIGNoYXJzZXQuc2V0Y2FwaXRhbGl6YXRpb24ob3B0aW9ucy5jYXBpdGFsaXphdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVhZGFibGUpIHtcbiAgICAgIGNoYXJzZXQucmVtb3ZlVW5yZWFkYWJsZSgpO1xuICAgIH1cblxuICAgIGNoYXJzZXQucmVtb3ZlRHVwbGljYXRlcygpO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgIGxlbmd0aCA9IG9wdGlvbnM7XG4gICAgY2hhcnNldC5zZXRUeXBlKCdhbHBoYW51bWVyaWMnKTtcbiAgfVxuICBlbHNlIHtcbiAgICBsZW5ndGggPSAzMjtcbiAgICBjaGFyc2V0LnNldFR5cGUoJ2FscGhhbnVtZXJpYycpO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgdGhlIHN0cmluZ1xuICB2YXIgY2hhcnNMZW4gPSBjaGFyc2V0LmNoYXJzLmxlbmd0aDtcbiAgdmFyIG1heEJ5dGUgPSAyNTYgLSAoMjU2ICUgY2hhcnNMZW4pO1xuXG4gIGlmICghY2IpIHtcbiAgICB3aGlsZSAoc3RyaW5nLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgdmFyIGJ1ZiA9IHNhZmVSYW5kb21CeXRlcyhNYXRoLmNlaWwobGVuZ3RoICogMjU2IC8gbWF4Qnl0ZSkpO1xuICAgICAgc3RyaW5nID0gcHJvY2Vzc1N0cmluZyhidWYsIHN0cmluZywgY2hhcnNldC5jaGFycywgbGVuZ3RoLCBtYXhCeXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgZ2V0QXN5bmNTdHJpbmcoc3RyaW5nLCBjaGFyc2V0LmNoYXJzLCBsZW5ndGgsIG1heEJ5dGUsIGNiKTtcblxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vbGliL3JhbmRvbXN0cmluZ1wiKTsiLCJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnXG5pbXBvcnQgc29ydEFycmF5IGZyb20gJ3NvcnQtYXJyYXknXG5pbXBvcnQge0lTb3J0QXJyYXlPcHRpb25zfSBmcm9tICcuL2ludGVyZmFjZXMvSVNvcnRBcnJheU9wdGlvbnMuanMnXG5pbXBvcnQgc29ydEtleXMgZnJvbSAnc29ydC1rZXlzJ1xuaW1wb3J0IHtJU29ydE9iamVjdE9wdGlvbnN9IGZyb20gJy4vaW50ZXJmYWNlcy9JU29ydE9iamVjdE9wdGlvbnMuanMnXG5pbXBvcnQgaXNHbG9iIGZyb20gJ2lzLWdsb2InXG5pbXBvcnQgKiBhcyByYW5kb21TdHJpbmcgZnJvbSAncmFuZG9tc3RyaW5nJ1xuaW1wb3J0IHtJQ29uc3RydWN0b3J9IGZyb20gJy4vaW50ZXJmYWNlcy9JQ29uc3RydWN0b3IuanMnXG5pbXBvcnQge0Jhc2VPYmplY3R9IGZyb20gJy4vbGliL2Jhc2UvQmFzZU9iamVjdC5qcydcbmltcG9ydCB7T0JKRUNUX0lOSVRfTUFSS30gZnJvbSAnLi9jb25zdGFudHMvTWV0YWRhdGFLZXkuanMnXG5pbXBvcnQge3NldFRpbWVvdXR9IGZyb20gJ3RpbWVycy9wcm9taXNlcydcbmltcG9ydCB7aXNQcm9taXNlIGFzIGlzQnVpbHRpblByb21pc2VzfSBmcm9tICd1dGlsL3R5cGVzJ1xuaW1wb3J0IHtSZWFkYWJsZSBhcyBSZWFkYWJsZVN0cmVhbSwgUmVhZGFibGVPcHRpb25zLCBTdHJlYW19IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB7UGF0aExpa2V9IGZyb20gJ2ZzJ1xuXG4vKipcbiAqIOWIpOaWreS4pOS4quS8oOWFpeeahOWAvOaYr+WQpuebuOetiVxuICogQHBhcmFtIHZhbDFcbiAqIEBwYXJhbSB2YWwyXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzRXF1YWwodmFsMTogYW55LCB2YWwyOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb21wYXJlU2V0OiBTZXQ8YW55PiA9IG5ldyBTZXQoKVxuICAgIGNvbXBhcmVTZXQuYWRkKHZhbDEpLmFkZCh2YWwyKVxuICAgIHJldHVybiBjb21wYXJlU2V0LnNpemUgPT09IDJcbn1cblxuLyoqXG4gKiDliKTmlq3ovpPlhaXnmoTlhoXlrrnmmK/lkKbkuLrot6/lvoRcbiAqIEBwYXJhbSBpbnBcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNQYXRoKGlucDogc3RyaW5nIHwgUGF0aExpa2UpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXRoUmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oXFxcXC98XFxcXC5cXFxcLj9cXFxcL3woW0EtWmEtel06KT9cXFxcXFxcXCkoW15cXFxcXFxcXFxcXFwvOio/XCI8PnxcXFxcclxcXFxuXStbXFxcXFxcXFxcXFxcL10pKlteXFxcXFxcXFxcXFxcLzoqP1wiPD58XFxcXHJcXFxcbl0qJCcpXG4gICAgICAgIHJldHVybiBwYXRoUmVnZXgudGVzdChBczxzdHJpbmc+KGlucCkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG59XG5cbi8qKlxuICog5bCG6L6T5YWl5a+56LGh6L2s5o2i5Li655Sf5oiQ5Zmo5a+56LGhXG4gKiBAcGFyYW0gaW5wXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBDb252ZXJ0VG9JdGVyYWJsZShpbnA6IHN0cmluZyB8IEJ1ZmZlciB8IE5vZGVKUy5UeXBlZEFycmF5KTogR2VuZXJhdG9yIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucC5sZW5ndGg7IGkrKykgeWllbGQgaW5wW2ldXG59XG5cbi8qKlxuICog6L2s5o2iQnVmZmVy5Li65Y+v6K+75rWBXG4gKiBAcGFyYW0gaW5wXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJ0VG9TdHJlYW0oaW5wOiBCdWZmZXIsIG9wdGlvbnM/OiBSZWFkYWJsZU9wdGlvbnMpOiBSZWFkYWJsZVN0cmVhbVxuLyoqXG4gKiDovazmjaJUeXBlZEFycmF55Li65Y+v6K+75rWBXG4gKiBAcGFyYW0gaW5wXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJ0VG9TdHJlYW0oaW5wOiBOb2RlSlMuVHlwZWRBcnJheSwgb3B0aW9ucz86IFJlYWRhYmxlT3B0aW9ucyk6IFJlYWRhYmxlU3RyZWFtXG4vKipcbiAqIOi9rOaNouWtl+espuS4suS4uuWPr+ivu+a1gVxuICogQHBhcmFtIGlucFxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29udmVydFRvU3RyZWFtKGlucDogc3RyaW5nLCBvcHRpb25zPzogUmVhZGFibGVPcHRpb25zKTogUmVhZGFibGVTdHJlYW1cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJ0VG9TdHJlYW0oaW5wOiBhbnksIG9wdGlvbnM/OiBSZWFkYWJsZU9wdGlvbnMpOiBSZWFkYWJsZVN0cmVhbSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBvcHRpb25zIDoge31cbiAgICByZXR1cm4gU3RyZWFtLlJlYWRhYmxlLmZyb20oQ29udmVydFRvSXRlcmFibGUoaW5wKSwgb3B0aW9ucylcbn1cblxuLyoqXG4gKiDliKTmlq3kuIDkuKrnm67moIflr7nosaHmmK/lkKbkuLpQcm9taXNlXG4gKiBAcGFyYW0gb2JqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2UodGFyZ2V0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNCdWlsdGluUHJvbWlzZXModGFyZ2V0KSA/IHRydWUgOiAhIXRhcmdldCAmJiAodHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIHRhcmdldC50aGVuID09PSAnZnVuY3Rpb24nXG59XG5cbi8qKlxuICog5byC5q2l562J5b6FXG4gKiBAcGFyYW0gbXNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gRGVsYXkobXM6IG51bWJlciA9IDEwMDApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgc2V0VGltZW91dChtcylcbn1cblxuLyoqXG4gKiDkvKDpgJLov5vmnaXnmoTlj4LmlbDkuI3kvJrmnInku7vkvZXkvZznlKhcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gVGhyb3dJbnRvQmxhY2tIb2xlKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICog5LuF5o6l5Y+X5Y+C5pWw77yM5L2G5LiN5a+55Y+C5pWw5YGa5Lu75L2V5aSE55CGXG4gICAgICovXG59XG5cbi8qKlxuICog5a+56LGh5piv5ZCm5bey6KKr5Yid5aeL5YyWXG4gKiBAcGFyYW0gb2JqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzT2JqZWN0SW5pdGlhbGl6ZWQ8VCBleHRlbmRzIEJhc2VPYmplY3Q+KG9iajogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIVJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoT0JKRUNUX0lOSVRfTUFSSywgb2JqKVxufVxuXG4vKipcbiAqIOWQiOW5tuS4pOS4qlNldFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0gczFcbiAqIEBwYXJhbSBzMlxuICovXG5leHBvcnQgZnVuY3Rpb24gTWVyZ2VTZXQ8VCA9IGFueSwgVSA9IGFueT4oczE6IFNldDxUPiwgczI6IFNldDxVPik6IFNldDxUIHwgVT4ge1xuICAgIHJldHVybiBuZXcgU2V0PFQgfCBVPihbLi4uczEsIC4uLnMyXSlcbn1cblxuLyoqXG4gKiDlkIjlubbkuKTkuKrmlbDnu4RcbiAqIEBwYXJhbSBhcnIxXG4gKiBAcGFyYW0gYXJyMlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNZXJnZUFycmF5PFQgPSBhbnksIFUgPSBhbnk+KGFycjE6IFRbXSwgYXJyMjogVVtdKTogKFQgfCBVKVtdIHtcbiAgICByZXR1cm4gWy4uLmFycjEsIC4uLmFycjJdXG59XG5cbi8qKlxuICog5ZCI5bm25Lik5LiqTWFwXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSBtMVxuICogQHBhcmFtIG0yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNZXJnZU1hcDxLMSwgVjEsIEsyLCBWMj4obTE6IE1hcDxLMSwgVjE+LCBtMjogTWFwPEsyLCBWMj4pOiBNYXA8SzEgfCBLMiwgVjEgfCBWMj4ge1xuICAgIHJldHVybiBuZXcgTWFwPEsxIHwgSzIsIFYxIHwgVjI+KFsuLi5tMSwgLi4ubTJdKVxufVxuXG4vKipcbiAqIOmbhuWQiOi9rOaVsOe7hFxuICogQHBhcmFtIHNldFxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTZXRUb0FycmF5PFQgPSBhbnk+KHNldDogU2V0PFQ+KTogVFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXQpXG59XG5cbi8qKlxuICog5pWw57uE6L2s6ZuG5ZCIXG4gKiBAcGFyYW0gYXJyXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFycmF5VG9TZXQ8VCA9IGFueT4oYXJyOiBUW10pOiBTZXQ8VD4ge1xuICAgIHJldHVybiBuZXcgU2V0KGFycilcbn1cblxuLyoqXG4gKiDmlbDnu4Tljrvph41cbiAqIEBwYXJhbSBhcnJcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gVW5pcXVlQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyKSlcbn1cblxuLyoqXG4gKiDmlbDnu4TmjpLluo9cbiAqIEBwYXJhbSBhcnJcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNvcnRBcnJheTxUID0gYW55PihhcnI6IFRbXSwgLi4ub3B0aW9uczogSVNvcnRBcnJheU9wdGlvbnM8VD5bXSk6IFRbXSB7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoIDwgMikge1xuICAgICAgICBsZXQgc29ydE9wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7b3JkZXI6ICdhc2MnfVxuICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHNvcnRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihzb3J0T3B0aW9ucywge1xuICAgICAgICAgICAgYnk6IG9wdGlvbnNbMF0uYnksXG4gICAgICAgICAgICBvcmRlcjogb3B0aW9uc1swXS5vcmRlcixcbiAgICAgICAgICAgIGNvbXB1dGVkOiBvcHRpb25zWzBdLmNvbXB1dGVkXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBzb3J0QXJyYXkoYXJyLCBzb3J0T3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzb3J0c09wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgICAgICAgICBieTogW10sXG4gICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICBjdXN0b21PcmRlcnM6IHt9XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHQ6IElTb3J0QXJyYXlPcHRpb25zPFQ+KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAob3B0LmJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IG9wdC5ieSBhcyBhbnlcbiAgICAgICAgICAgICAgICBzb3J0c09wdGlvbnMuYnkucHVzaChmaWVsZClcbiAgICAgICAgICAgICAgICBzb3J0c09wdGlvbnMub3JkZXIucHVzaChmaWVsZClcbiAgICAgICAgICAgICAgICBzb3J0c09wdGlvbnMuY3VzdG9tT3JkZXJzW2ZpZWxkXSA9IFNvcnRBcnJheShhcnIsIG9wdCkubWFwKHZhbHVlID0+IHZhbHVlW2ZpZWxkXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHNvcnRBcnJheShhcnIsIHNvcnRzT3B0aW9ucylcbiAgICB9XG59XG5cbi8qKlxuICog5a+56LGh5o6S5bqPXG4gKiBAcGFyYW0gb2JqZWN0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTb3J0T2JqZWN0PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvYmplY3Q6IFQsIG9wdGlvbnM/OiBJU29ydE9iamVjdE9wdGlvbnMpOiBUIHtcbiAgICByZXR1cm4gc29ydEtleXMob2JqZWN0LCB7XG4gICAgICAgIGRlZXA6IG9wdGlvbnM/LmRlZXAsIGNvbXBhcmU6IChhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbnM/Lm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYXNjJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKVxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rlc2MnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWEubG9jYWxlQ29tcGFyZShiKVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG59XG5cbi8qKlxuICog6YWN572u5a+56LGh5bGe5oCnXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gcHJvcGVydGllc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb25maWd1cmVPYmplY3RQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+KHRhcmdldDogVCwgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge30pLmZvckVhY2goKHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHRhcmdldFtwcm9wZXJ0eUtleV0gPSBwcm9wZXJ0aWVzIVtwcm9wZXJ0eUtleV0pXG59XG5cbi8qKlxuICog57G75Z6L6L2s5o2iXG4gKiBAcGFyYW0gaW5wXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFzPFQgPSBhbnk+KGlucDogYW55KTogVCB7XG4gICAgcmV0dXJuIGlucCBhcyBUXG59XG5cbi8qKlxuICog5Yik5pat5piv5ZCm5Li66YCa6YWN56ym5Yy56YWN5pON5L2c56ym5a2X56ym5LiyXG4gKiBAcGFyYW0gaW5wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJc0dsb2JTdHJpbmcoaW5wOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNHbG9iKGlucClcbn1cblxuLyoqXG4gKiDnlJ/miJDpmo/mnLrlrZfnrKbkuLJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhbmRvbVN0cmluZygpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5oyH5a6a6ZW/5bqm55qE6ZqP5py65a2X56ym5LiyXG4gKiBAcGFyYW0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5LuF5YyF5ZCr5a2X56ym6ZuG5YaF5a2X56ym55qE5oyH5a6a6ZW/5bqm5a2X56ym5LiyXG4gKiBAcGFyYW0gbGVuZ3RoXG4gKiBAcGFyYW0gY2hhcnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyLCBjaGFyc2V0OiBzdHJpbmcpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5LuF5YyF5ZCrWzAtOSBhLXogQS1aXeeahOaMh+WumumVv+W6puWtl+espuS4slxuICogQHBhcmFtIGxlbmd0aFxuICogQHBhcmFtIGNoYXJzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhbmRvbVN0cmluZyhsZW5ndGg6IG51bWJlciwgY2hhcnNldDogJ2FscGhhbnVtZXJpYycpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5LuF5YyF5ZCrW2EteiBBLVpd55qE5oyH5a6a6ZW/5bqm5a2X56ym5LiyXG4gKiBAcGFyYW0gbGVuZ3RoXG4gKiBAcGFyYW0gY2hhcnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyLCBjaGFyc2V0OiAnYWxwaGFiZXRpYycpOiBzdHJpbmdcbi8qKlxuICog55Sf5oiQ5LuF5YyF5ZCrWzAtOV3nmoTmjIflrprplb/luqblrZfnrKbkuLJcbiAqIEBwYXJhbSBsZW5ndGhcbiAqIEBwYXJhbSBjaGFyc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIsIGNoYXJzZXQ6ICdudW1lcmljJyk6IHN0cmluZ1xuLyoqXG4gKiDnlJ/miJDku4XljIXlkKtbMC05IGEtZl3nmoTmjIflrprplb/luqblrZfnrKbkuLJcbiAqIEBwYXJhbSBsZW5ndGhcbiAqIEBwYXJhbSBjaGFyc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIsIGNoYXJzZXQ6ICdoZXgnKTogc3RyaW5nXG4vKipcbiAqIOeUn+aIkOS7heWMheWQq1swMV3nmoTmjIflrprplb/luqblrZfnrKbkuLJcbiAqIEBwYXJhbSBsZW5ndGhcbiAqIEBwYXJhbSBjaGFyc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIsIGNoYXJzZXQ6ICdiaW5hcnknKTogc3RyaW5nXG4vKipcbiAqIOeUn+aIkOS7heWMheWQq1swLTdd55qE5oyH5a6a6ZW/5bqm5a2X56ym5LiyXG4gKiBAcGFyYW0gbGVuZ3RoXG4gKiBAcGFyYW0gY2hhcnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyLCBjaGFyc2V0OiAnb2N0YWwnKTogc3RyaW5nXG4vKipcbiAqIOeUn+aIkOS7heWMheWQq+Wtl+espumbhuaVsOe7hOWGheWtl+espuinhOWImeeahOaMh+WumumVv+W6puWtl+espuS4slxuICogQHBhcmFtIGxlbmd0aFxuICogQHBhcmFtIGNoYXJzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJhbmRvbVN0cmluZyhsZW5ndGg6IG51bWJlciwgY2hhcnNldDogKCdhbHBoYW51bWVyaWMnIHwgJ2FscGhhYmV0aWMnIHwgJ251bWVyaWMnIHwgJ2hleCcgfCAnYmluYXJ5JyB8ICdvY3RhbCcgfCBzdHJpbmcpW10pOiBzdHJpbmdcbmV4cG9ydCBmdW5jdGlvbiBSYW5kb21TdHJpbmcobGVuZ3RoPzogbnVtYmVyLCBjaGFyc2V0Pzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiByYW5kb21TdHJpbmcuZ2VuZXJhdGUoe1xuICAgICAgICBsZW5ndGg6IGxlbmd0aCAhPT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogMzIsXG4gICAgICAgIGNoYXJzZXQ6IEFzPHN0cmluZz4oY2hhcnNldCAhPT0gdW5kZWZpbmVkID8gY2hhcnNldCA6ICdhbHBoYW51bWVyaWMnKVxuICAgIH0pXG59XG5cbi8qKlxuICog55Sf5oiQMzLkvY3nmoTpmo/mnLrlrZfnrKbkuLJcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gTm9uY2VTdHIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUmFuZG9tU3RyaW5nKDMyLCAnYWxwaGFudW1lcmljJylcbn1cblxuLyoqXG4gKiDojrflj5bnsbvlrp7kvosv5p6E6YCg5Ye95pWw5omA57un5om/55qE54i257G755qE5p6E6YCg5Ye95pWwXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFBhcmVudENvbnN0cnVjdG9yPFQgZXh0ZW5kcyBGdW5jdGlvbiA9IGFueT4odGFyZ2V0OiBUKTogSUNvbnN0cnVjdG9yPGFueT4gfCBudWxsXG5leHBvcnQgZnVuY3Rpb24gUGFyZW50Q29uc3RydWN0b3I8VCBleHRlbmRzIEZ1bmN0aW9uID0gYW55Pih0YXJnZXQ6IElDb25zdHJ1Y3RvcjxUPik6IElDb25zdHJ1Y3Rvcjxhbnk+IHwgbnVsbCB7XG4gICAgY29uc3Qgcm9vdFByb3RvOiB1bmtub3duID0gU3ltYm9sLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5fX3Byb3RvX19cbiAgICBjb25zdCBjb25zdHJ1Y3RvcjogRnVuY3Rpb24gPSAoISF0YXJnZXRbU3ltYm9sLmhhc0luc3RhbmNlXSAmJiB0YXJnZXQucHJvdG90eXBlKSA/IHRhcmdldCA6IHRhcmdldC5jb25zdHJ1Y3RvclxuICAgIGNvbnN0IHByb3RvOiBJQ29uc3RydWN0b3I8YW55PiA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5fX3Byb3RvX19cbiAgICByZXR1cm4gcHJvdG8gPT09IHJvb3RQcm90byA/IG51bGwgOiBwcm90b1xufVxuIiwiaW1wb3J0IGFycmF5aWZ5IGZyb20gJ2FycmF5LWJhY2svaW5kZXgubWpzJ1xuaW1wb3J0IHQgZnJvbSAndHlwaWNhbC9pbmRleC5tanMnXG5cbi8qKlxuICogSXNvbW9ycGhpYywgbG9hZC1hbnl3aGVyZSBmdW5jdGlvbiB0byBzb3J0IGFuIGFycmF5IGJ5IHNjYWxhciwgZGVlcCBvciBjb21wdXRlZCB2YWx1ZXMgaW4gYW55IHN0YW5kYXJkIG9yIGN1c3RvbSBvcmRlci5cbiAqXG4gKiBAbW9kdWxlIHNvcnQtYXJyYXlcbiAqIEB0eXBpY2FsbmFtZSBzb3J0QXJyYXlcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzb3J0QXJyYXkgPSByZXF1aXJlKCdzb3J0LWFycmF5JylcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IC0gVGhlIGlucHV0IGFycmF5IHRvIHNvcnQuIEl0IGlzIHNvcnRlZCBpbiBwbGFjZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBTb3J0IG9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbb3B0aW9ucy5ieV0gLSBPbmUgb3IgbW9yZSBwcm9wZXJ0eSBuYW1lcyBvciBjb21wdXRlZCBmaWVsZHMgdG8gc29ydCBieS4gU3BlY2lmeWluZyBwcm9wZXJ0eSBuYW1lcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gc29ydGluZyBhbiBhcnJheSBvZiBvYmplY3RzLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW29wdGlvbnMub3JkZXJdIC0gT25lIG9yIG1vcmUgc29ydCBvcmRlcnMuIFNwZWNpZnkgYCdhc2MnYCwgYCdkZXNjJ2Agb3IgYSBwcm9wZXJ0eSBuYW1lIGZyb20gdGhlIGBvcHRpb25zLmN1c3RvbU9yZGVyc2Agb2JqZWN0LlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLmN1c3RvbU9yZGVyc10gLSBBIGRpY3Rpb25hcnkgb2JqZWN0IGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgY3VzdG9tIG9yZGVycy4gRWFjaCBjdXN0b20gb3JkZXIgdmFsdWUgbXVzdCBiZSBhbiBhcnJheSBkZWZpbmluZyB0aGUgb3JkZXIgZXhwZWN0ZWQgdmFsdWVzIG11c3QgYmUgc29ydGVkIGluLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLmNvbXB1dGVkXSAtIEEgZGljdGlvbmFyeSBvYmplY3QgY29udGFpbmluZyBvbmUgb3IgbW9yZSBjb21wdXRlZCBmaWVsZCBmdW5jdGlvbnMuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25jZSBwZXIgaXRlbSBpbiB0aGUgYXJyYXkuIEVhY2ggaW52b2NhdGlvbiB3aWxsIHJlY2VpdmUgdGhlIGFycmF5IGl0ZW0gYXMgaW5wdXQgYW5kIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlIGJ5IHdoaWNoIHRoZSBhcnJheSBjYW4gYmUgc29ydGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm51bGxSYW5rXSAtIENvbmZpZ3VyZXMgd2hldGhlciBgbnVsbGAgdmFsdWVzIHdpbGwgYmUgc29ydGVkIGJlZm9yZSBvciBhZnRlciBkZWZpbmVkIHZhbHVlcy4gU2V0IHRvIGAtMWAgZm9yIGJlZm9yZSwgYDFgIGZvciBhZnRlci4gRGVmYXVsdHMgdG8gYDFgLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnVuZGVmaW5lZFJhbmtdIC0gQ29uZmlndXJlcyB3aGV0aGVyIGB1bmRlZmluZWRgIHZhbHVlcyB3aWxsIGJlIHNvcnRlZCBiZWZvcmUgb3IgYWZ0ZXIgZGVmaW5lZCB2YWx1ZXMuIFNldCB0byBgLTFgIGZvciBiZWZvcmUsIGAxYCBmb3IgYWZ0ZXIuIERlZmF1bHRzIHRvIGAxYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgdGhhdCB3YXMgcGFzc2VkIGluLlxuICogQGFsaWFzIG1vZHVsZTpzb3J0LWFycmF5XG4gKi9cbmZ1bmN0aW9uIHNvcnRBcnJheSAoYXJyLCBvcHRpb25zID0ge30pIHtcbiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgY29tcHV0ZWQ6IHt9LFxuICAgICAgY3VzdG9tT3JkZXJzOiB7fSxcbiAgICAgIG51bGxSYW5rOiAxLFxuICAgICAgdW5kZWZpbmVkUmFuazogMVxuICAgIH0sXG4gICAgb3B0aW9uc1xuICApXG4gIGFyci5zb3J0KGdldENvbXBhcmVGdW5jKG9wdGlvbnMpKVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGdldENvbXBhcmVGdW5jIChvcHRpb25zID0ge30pIHtcbiAgY29uc3QgYnkgPSBhcnJheWlmeShvcHRpb25zLmJ5KVxuICBjb25zdCBvcmRlciA9IGFycmF5aWZ5KG9wdGlvbnMub3JkZXIpXG4gIGNvbnN0IHsgY3VzdG9tT3JkZXJzLCBjb21wdXRlZCB9ID0gb3B0aW9uc1xuICByZXR1cm4gZnVuY3Rpb24gY29tcGFyZUZ1bmMgKHhJbiwgeUluLCBieUluZGV4ID0gMCkge1xuICAgIGNvbnN0IGN1cnJPcmRlciA9IG9yZGVyW2J5SW5kZXhdIHx8ICdhc2MnXG4gICAgaWYgKCEoY3Vyck9yZGVyID09PSAnYXNjJyB8fCBjdXJyT3JkZXIgPT09ICdkZXNjJyB8fCBjdXN0b21PcmRlcnNbY3Vyck9yZGVyXSkpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCwgeCwgeVxuICAgIGlmIChieS5sZW5ndGgpIHtcbiAgICAgIHggPSB0LmlzRGVmaW5lZCh4SW5bYnlbYnlJbmRleF1dKVxuICAgICAgICA/IHhJbltieVtieUluZGV4XV1cbiAgICAgICAgOiBjb21wdXRlZFtieVtieUluZGV4XV0gJiYgY29tcHV0ZWRbYnlbYnlJbmRleF1dKHhJbilcbiAgICAgIHkgPSB0LmlzRGVmaW5lZCh5SW5bYnlbYnlJbmRleF1dKVxuICAgICAgICA/IHlJbltieVtieUluZGV4XV1cbiAgICAgICAgOiBjb21wdXRlZFtieVtieUluZGV4XV0gJiYgY29tcHV0ZWRbYnlbYnlJbmRleF1dKHlJbilcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHhJblxuICAgICAgeSA9IHlJblxuICAgIH1cblxuICAgIGlmIChjdXN0b21PcmRlcnMgJiYgY3VzdG9tT3JkZXJzW2N1cnJPcmRlcl0pIHtcbiAgICAgIHJlc3VsdCA9IGN1c3RvbU9yZGVyc1tjdXJyT3JkZXJdLmluZGV4T2YoeCkgLSBjdXN0b21PcmRlcnNbY3Vyck9yZGVyXS5pbmRleE9mKHkpXG4gICAgfSBlbHNlIGlmICh4ID09PSB5KSB7XG4gICAgICByZXN1bHQgPSAwXG4gICAgfSBlbHNlIGlmICh0LmlzTnVsbCh4KSAmJiB0LmlzVW5kZWZpbmVkKHkpKSB7XG4gICAgICByZXN1bHQgPSBjdXJyT3JkZXIgPT09ICdhc2MnXG4gICAgICAgID8gMVxuICAgICAgICA6IGN1cnJPcmRlciA9PT0gJ2Rlc2MnXG4gICAgICAgICAgPyAtMVxuICAgICAgICAgIDogMFxuICAgIH0gZWxzZSBpZiAodC5pc1VuZGVmaW5lZCh4KSAmJiB0LmlzTnVsbCh5KSkge1xuICAgICAgcmVzdWx0ID0gY3Vyck9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/IC0xXG4gICAgICAgIDogY3Vyck9yZGVyID09PSAnZGVzYydcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDBcbiAgICB9IGVsc2UgaWYgKHQuaXNOdWxsKHgpICYmIHQuaXNEZWZpbmVkVmFsdWUoeSkpIHtcbiAgICAgIHJlc3VsdCA9IG9wdGlvbnMubnVsbFJhbmtcbiAgICB9IGVsc2UgaWYgKHQuaXNVbmRlZmluZWQoeCkgJiYgdC5pc0RlZmluZWRWYWx1ZSh5KSkge1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy51bmRlZmluZWRSYW5rXG4gICAgfSBlbHNlIGlmICh0LmlzTnVsbCh5KSAmJiB0LmlzRGVmaW5lZFZhbHVlKHgpKSB7XG4gICAgICByZXN1bHQgPSAtb3B0aW9ucy5udWxsUmFua1xuICAgIH0gZWxzZSBpZiAodC5pc1VuZGVmaW5lZCh5KSAmJiB0LmlzRGVmaW5lZFZhbHVlKHgpKSB7XG4gICAgICByZXN1bHQgPSAtb3B0aW9ucy51bmRlZmluZWRSYW5rXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHggPCB5ID8gLTEgOiB4ID4geSA/IDEgOiAwXG4gICAgICBpZiAoY3Vyck9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogLTFcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlc3VsdCA9PT0gMCAmJiB0LmlzRGVmaW5lZChieVtieUluZGV4ICsgMV0pKSB7XG4gICAgICByZXN1bHQgPSBjb21wYXJlRnVuYyh4SW4sIHlJbiwgYnlJbmRleCArIDEpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzb3J0QXJyYXlcbiIsIi8qKlxuICogVGFrZXMgYW55IGlucHV0IGFuZCBndWFyYW50ZWVzIGFuIGFycmF5IGJhY2suXG4gKlxuICogLSBDb252ZXJ0cyBhcnJheS1saWtlIG9iamVjdHMgKGUuZy4gYGFyZ3VtZW50c2AsIGBTZXRgKSB0byBhIHJlYWwgYXJyYXkuXG4gKiAtIENvbnZlcnRzIGB1bmRlZmluZWRgIHRvIGFuIGVtcHR5IGFycmF5LlxuICogLSBDb252ZXJ0cyBhbnkgYW5vdGhlciBvdGhlciwgc2luZ3VsYXIgdmFsdWUgKGluY2x1ZGluZyBgbnVsbGAsIG9iamVjdHMgYW5kIGl0ZXJhYmxlcyBvdGhlciB0aGFuIGBTZXRgKSBpbnRvIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhhdCB2YWx1ZS5cbiAqIC0gSWdub3JlcyBpbnB1dCB3aGljaCBpcyBhbHJlYWR5IGFuIGFycmF5LlxuICpcbiAqIEBtb2R1bGUgYXJyYXktYmFja1xuICogQGV4YW1wbGVcbiAqID4gY29uc3QgYXJyYXlpZnkgPSByZXF1aXJlKCdhcnJheS1iYWNrJylcbiAqXG4gKiA+IGFycmF5aWZ5KHVuZGVmaW5lZClcbiAqIFtdXG4gKlxuICogPiBhcnJheWlmeShudWxsKVxuICogWyBudWxsIF1cbiAqXG4gKiA+IGFycmF5aWZ5KDApXG4gKiBbIDAgXVxuICpcbiAqID4gYXJyYXlpZnkoWyAxLCAyIF0pXG4gKiBbIDEsIDIgXVxuICpcbiAqID4gYXJyYXlpZnkobmV3IFNldChbIDEsIDIgXSkpXG4gKiBbIDEsIDIgXVxuICpcbiAqID4gZnVuY3Rpb24gZigpeyByZXR1cm4gYXJyYXlpZnkoYXJndW1lbnRzKTsgfVxuICogPiBmKDEsMiwzKVxuICogWyAxLCAyLCAzIF1cbiAqL1xuXG5mdW5jdGlvbiBpc09iamVjdCAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNBcnJheUxpa2UgKGlucHV0KSB7XG4gIHJldHVybiBpc09iamVjdChpbnB1dCkgJiYgdHlwZW9mIGlucHV0Lmxlbmd0aCA9PT0gJ251bWJlcidcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IC0gVGhlIGlucHV0IHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gYXJyYXlcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBhbGlhcyBtb2R1bGU6YXJyYXktYmFja1xuICovXG5mdW5jdGlvbiBhcnJheWlmeSAoaW5wdXQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0XG4gIH0gZWxzZSBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbXVxuICB9IGVsc2UgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSB8fCBpbnB1dCBpbnN0YW5jZW9mIFNldCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGlucHV0KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBbaW5wdXRdXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlpZnlcbiIsIi8qKlxuICogSXNvbW9ycGhpYywgZnVuY3Rpb25hbCB0eXBlLWNoZWNraW5nIGZvciBKYXZhc2NyaXB0LlxuICogQG1vZHVsZSB0eXBpY2FsXG4gKiBAdHlwaWNhbG5hbWUgdFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHQgPSByZXF1aXJlKCd0eXBpY2FsJylcbiAqIGNvbnN0IGFsbERlZmluZWQgPSBhcnJheS5ldmVyeSh0LmlzRGVmaW5lZClcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBpbnB1dCBpcyBhIG51bWJlci4gSXQgaXMgYSBtb3JlIHJlYXNvbmFibGUgYWx0ZXJuYXRpdmUgdG8gYHR5cGVvZiBuYCB3aGljaCByZXR1cm5zIGBudW1iZXJgIGZvciBgTmFOYCBhbmQgYEluZmluaXR5YC5cbiAqXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICogQGV4YW1wbGVcbiAqID4gdC5pc051bWJlcigwKVxuICogdHJ1ZVxuICogPiB0LmlzTnVtYmVyKDEpXG4gKiB0cnVlXG4gKiA+IHQuaXNOdW1iZXIoMS4xKVxuICogdHJ1ZVxuICogPiB0LmlzTnVtYmVyKDB4ZmYpXG4gKiB0cnVlXG4gKiA+IHQuaXNOdW1iZXIoMDY0NClcbiAqIHRydWVcbiAqID4gdC5pc051bWJlcig2LjJlNSlcbiAqIHRydWVcbiAqID4gdC5pc051bWJlcihOYU4pXG4gKiBmYWxzZVxuICogPiB0LmlzTnVtYmVyKEluZmluaXR5KVxuICogZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyIChuKSB7XG4gIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobilcbn1cblxuLyoqXG4gKiBBIHBsYWluIG9iamVjdCBpcyBhIHNpbXBsZSBvYmplY3QgbGl0ZXJhbCwgaXQgaXMgbm90IGFuIGluc3RhbmNlIG9mIGEgY2xhc3MuIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5wdXQgYHR5cGVvZmAgaXMgYG9iamVjdGAgYW5kIGRpcmVjdGx5IGRlY2VuZHMgZnJvbSBgT2JqZWN0YC5cbiAqXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICogQGV4YW1wbGVcbiAqID4gdC5pc1BsYWluT2JqZWN0KHsgc29tZXRoaW5nOiAnb25lJyB9KVxuICogdHJ1ZVxuICogPiB0LmlzUGxhaW5PYmplY3QobmV3IERhdGUoKSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNQbGFpbk9iamVjdChbIDAsIDEgXSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNQbGFpbk9iamVjdCgvdGVzdC8pXG4gKiBmYWxzZVxuICogPiB0LmlzUGxhaW5PYmplY3QoMSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNQbGFpbk9iamVjdCgnb25lJylcbiAqIGZhbHNlXG4gKiA+IHQuaXNQbGFpbk9iamVjdChudWxsKVxuICogZmFsc2VcbiAqID4gdC5pc1BsYWluT2JqZWN0KChmdW5jdGlvbiAqICgpIHt9KSgpKVxuICogZmFsc2VcbiAqID4gdC5pc1BsYWluT2JqZWN0KGZ1bmN0aW9uICogKCkge30pXG4gKiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCAoaW5wdXQpIHtcbiAgcmV0dXJuIGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQuY29uc3RydWN0b3IgPT09IE9iamVjdFxufVxuXG4vKipcbiAqIEFuIGFycmF5LWxpa2UgdmFsdWUgaGFzIGFsbCB0aGUgcHJvcGVydGllcyBvZiBhbiBhcnJheSB5ZXQgaXMgbm90IGFuIGFycmF5IGluc3RhbmNlLiBBbiBleGFtcGxlIGlzIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIFJldHVybnMgYHRydWVgYCBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYW4gb2JqZWN0LCBub3QgYG51bGxgYCBhbmQgaGFzIGEgYGxlbmd0aGAgcHJvcGVydHkgc2V0IHdpdGggYSBudW1lcmljIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gc3VtKHgsIHkpe1xuICogICBjb25zb2xlLmxvZyh0LmlzQXJyYXlMaWtlKGFyZ3VtZW50cykpXG4gKiAgIC8vIHByaW50cyBgdHJ1ZWBcbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlMaWtlIChpbnB1dCkge1xuICByZXR1cm4gaXNPYmplY3QoaW5wdXQpICYmIHR5cGVvZiBpbnB1dC5sZW5ndGggPT09ICdudW1iZXInXG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB0eXBlb2YgaW5wdXQgaXMgYCdvYmplY3QnYCBidXQgbm90IG51bGwuXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0ICE9PSBudWxsXG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBkZWZpbmVkLlxuICogQHBhcmFtIHsqfSAtIHRoZSBpbnB1dCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCAhPT0gJ3VuZGVmaW5lZCdcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIHVuZGVmaW5lZC5cbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZCAoaW5wdXQpIHtcbiAgcmV0dXJuICFpc0RlZmluZWQoaW5wdXQpXG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBudWxsLlxuICogQHBhcmFtIHsqfSAtIHRoZSBpbnB1dCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbCAoaW5wdXQpIHtcbiByZXR1cm4gaW5wdXQgPT09IG51bGxcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIG5vdCBvbmUgb2YgYHVuZGVmaW5lZGAsIGBudWxsYCwgb3IgYE5hTmAuXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkVmFsdWUgKGlucHV0KSB7XG4gcmV0dXJuIGlzRGVmaW5lZChpbnB1dCkgJiYgIWlzTnVsbChpbnB1dCkgJiYgIU51bWJlci5pc05hTihpbnB1dClcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGFuIEVTMjAxNSBgY2xhc3NgLlxuICogQHBhcmFtIHsqfSAtIHRoZSBpbnB1dCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3MgKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gL15jbGFzcyAvLnRlc3QoRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCBpcyBhIHN0cmluZywgbnVtYmVyLCBzeW1ib2wsIGJvb2xlYW4sIG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlLlxuICogQHBhcmFtIHsqfSAtIHRoZSBpbnB1dCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWl0aXZlIChpbnB1dCkge1xuICBpZiAoaW5wdXQgPT09IG51bGwpIHJldHVybiB0cnVlXG4gIHN3aXRjaCAodHlwZW9mIGlucHV0KSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCBpcyBhIFByb21pc2UuXG4gKiBAcGFyYW0geyp9IC0gdGhlIGlucHV0IHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHN0YXRpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlIChpbnB1dCkge1xuICBpZiAoaW5wdXQpIHtcbiAgICBjb25zdCBpc1Byb21pc2UgPSBpc0RlZmluZWQoUHJvbWlzZSkgJiYgaW5wdXQgaW5zdGFuY2VvZiBQcm9taXNlXG4gICAgY29uc3QgaXNUaGVuYWJsZSA9IGlucHV0LnRoZW4gJiYgdHlwZW9mIGlucHV0LnRoZW4gPT09ICdmdW5jdGlvbidcbiAgICByZXR1cm4gISEoaXNQcm9taXNlIHx8IGlzVGhlbmFibGUpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IGlzIGFuIGl0ZXJhYmxlIChgTWFwYCwgYFNldGAsIGBBcnJheWAsIEdlbmVyYXRvciBldGMuKS5cbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKiBAZXhhbXBsZVxuICogPiB0LmlzSXRlcmFibGUoJ3N0cmluZycpXG4gKiB0cnVlXG4gKiA+IHQuaXNJdGVyYWJsZShuZXcgTWFwKCkpXG4gKiB0cnVlXG4gKiA+IHQuaXNJdGVyYWJsZShbXSlcbiAqIHRydWVcbiAqID4gdC5pc0l0ZXJhYmxlKChmdW5jdGlvbiAqICgpIHt9KSgpKVxuICogdHJ1ZVxuICogPiB0LmlzSXRlcmFibGUoUHJvbWlzZS5yZXNvbHZlKCkpXG4gKiBmYWxzZVxuICogPiB0LmlzSXRlcmFibGUoUHJvbWlzZSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZSh0cnVlKVxuICogZmFsc2VcbiAqID4gdC5pc0l0ZXJhYmxlKHt9KVxuICogZmFsc2VcbiAqID4gdC5pc0l0ZXJhYmxlKDApXG4gKiBmYWxzZVxuICogPiB0LmlzSXRlcmFibGUoMS4xKVxuICogZmFsc2VcbiAqID4gdC5pc0l0ZXJhYmxlKE5hTilcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZShJbmZpbml0eSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZShmdW5jdGlvbiAoKSB7fSlcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZShEYXRlKVxuICogZmFsc2VcbiAqID4gdC5pc0l0ZXJhYmxlKClcbiAqIGZhbHNlXG4gKiA+IHQuaXNJdGVyYWJsZSh7IHRoZW46IGZ1bmN0aW9uICgpIHt9IH0pXG4gKiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVyYWJsZSAoaW5wdXQpIHtcbiAgaWYgKGlucHV0ID09PSBudWxsIHx8ICFpc0RlZmluZWQoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiBpbnB1dFtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2YgaW5wdXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIHN0cmluZy4gVGhlIGVxdWl2YWxlbnQgb2YgYHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydgIGZvciB1c2UgaW4gZnVuY2l0b25hbCBjb250ZXh0cy5cbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZydcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGEgZnVuY3Rpb24uIFRoZSBlcXVpdmFsZW50IG9mIGB0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbidgIGZvciB1c2UgaW4gZnVuY2l0b25hbCBjb250ZXh0cy5cbiAqIEBwYXJhbSB7Kn0gLSB0aGUgaW5wdXQgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uIChpbnB1dCkge1xuICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnZnVuY3Rpb24nXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNOdW1iZXIsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzQXJyYXlMaWtlLFxuICBpc09iamVjdCxcbiAgaXNEZWZpbmVkLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNOdWxsLFxuICBpc0RlZmluZWRWYWx1ZSxcbiAgaXNDbGFzcyxcbiAgaXNQcmltaXRpdmUsXG4gIGlzUHJvbWlzZSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb25cbn1cbiIsImltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJ2lzLXBsYWluLW9iaic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNvcnRLZXlzKG9iamVjdCwgb3B0aW9ucyA9IHt9KSB7XG5cdGlmICghaXNQbGFpbk9iamVjdChvYmplY3QpICYmICFBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHBsYWluIG9iamVjdCBvciBhcnJheScpO1xuXHR9XG5cblx0Y29uc3Qge2RlZXAsIGNvbXBhcmV9ID0gb3B0aW9ucztcblx0Y29uc3Qgc2VlbklucHV0ID0gW107XG5cdGNvbnN0IHNlZW5PdXRwdXQgPSBbXTtcblxuXHRjb25zdCBkZWVwU29ydEFycmF5ID0gYXJyYXkgPT4ge1xuXHRcdGNvbnN0IHNlZW5JbmRleCA9IHNlZW5JbnB1dC5pbmRleE9mKGFycmF5KTtcblx0XHRpZiAoc2VlbkluZGV4ICE9PSAtMSkge1xuXHRcdFx0cmV0dXJuIHNlZW5PdXRwdXRbc2VlbkluZGV4XTtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHRzZWVuSW5wdXQucHVzaChhcnJheSk7XG5cdFx0c2Vlbk91dHB1dC5wdXNoKHJlc3VsdCk7XG5cblx0XHRyZXN1bHQucHVzaCguLi5hcnJheS5tYXAoaXRlbSA9PiB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuXHRcdFx0XHRyZXR1cm4gZGVlcFNvcnRBcnJheShpdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzUGxhaW5PYmplY3QoaXRlbSkpIHtcblx0XHRcdFx0cmV0dXJuIF9zb3J0S2V5cyhpdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0fSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHRjb25zdCBfc29ydEtleXMgPSBvYmplY3QgPT4ge1xuXHRcdGNvbnN0IHNlZW5JbmRleCA9IHNlZW5JbnB1dC5pbmRleE9mKG9iamVjdCk7XG5cdFx0aWYgKHNlZW5JbmRleCAhPT0gLTEpIHtcblx0XHRcdHJldHVybiBzZWVuT3V0cHV0W3NlZW5JbmRleF07XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCkuc29ydChjb21wYXJlKTtcblxuXHRcdHNlZW5JbnB1dC5wdXNoKG9iamVjdCk7XG5cdFx0c2Vlbk91dHB1dC5wdXNoKHJlc3VsdCk7XG5cblx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXHRcdFx0bGV0IG5ld1ZhbHVlO1xuXG5cdFx0XHRpZiAoZGVlcCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRuZXdWYWx1ZSA9IGRlZXBTb3J0QXJyYXkodmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3VmFsdWUgPSBkZWVwICYmIGlzUGxhaW5PYmplY3QodmFsdWUpID8gX3NvcnRLZXlzKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBrZXksIHtcblx0XHRcdFx0Li4uT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSksXG5cdFx0XHRcdHZhbHVlOiBuZXdWYWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHRpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG5cdFx0cmV0dXJuIGRlZXAgPyBkZWVwU29ydEFycmF5KG9iamVjdCkgOiBvYmplY3Quc2xpY2UoKTtcblx0fVxuXG5cdHJldHVybiBfc29ydEtleXMob2JqZWN0KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuXHRyZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWx1ZSk7XG59XG4iXX0=