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,608 @@
1
+ 'use strict';
2
+
3
+ var chunkBO7Y6HNS_cjs = require('./chunk-BO7Y6HNS.cjs');
4
+ var chunkSWCU6OID_cjs = require('./chunk-SWCU6OID.cjs');
5
+ var chunkGGY7LCMQ_cjs = require('./chunk-GGY7LCMQ.cjs');
6
+ var promises = require('timers/promises');
7
+ var types = require('util/types');
8
+ var stream = require('stream');
9
+
10
+ // node_modules/randombytes/index.js
11
+ var require_randombytes = chunkGGY7LCMQ_cjs.__commonJS({
12
+ "node_modules/randombytes/index.js"(exports, module) {
13
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
14
+ module.exports = chunkGGY7LCMQ_cjs.__require("crypto").randomBytes;
15
+ }
16
+ });
17
+
18
+ // node_modules/randomstring/lib/charset.js
19
+ var require_charset = chunkGGY7LCMQ_cjs.__commonJS({
20
+ "node_modules/randomstring/lib/charset.js"(exports, module) {
21
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
22
+ function Charset() {
23
+ this.chars = "";
24
+ }
25
+ chunkGGY7LCMQ_cjs.__name(Charset, "Charset");
26
+ Charset.prototype.setType = function(type) {
27
+ if (Array.isArray(type)) {
28
+ for (var i = 0; i < type.length; i++) {
29
+ this.chars += this.getCharacters(type[i]);
30
+ }
31
+ } else {
32
+ this.chars = this.getCharacters(type);
33
+ }
34
+ };
35
+ Charset.prototype.getCharacters = function(type) {
36
+ var chars;
37
+ var numbers = "0123456789";
38
+ var charsLower = "abcdefghijklmnopqrstuvwxyz";
39
+ var charsUpper = charsLower.toUpperCase();
40
+ var hexChars = "abcdef";
41
+ var binaryChars = "01";
42
+ var octalChars = "01234567";
43
+ if (type === "alphanumeric") {
44
+ chars = numbers + charsLower + charsUpper;
45
+ } else if (type === "numeric") {
46
+ chars = numbers;
47
+ } else if (type === "alphabetic") {
48
+ chars = charsLower + charsUpper;
49
+ } else if (type === "hex") {
50
+ chars = numbers + hexChars;
51
+ } else if (type === "binary") {
52
+ chars = binaryChars;
53
+ } else if (type === "octal") {
54
+ chars = octalChars;
55
+ } else {
56
+ chars = type;
57
+ }
58
+ return chars;
59
+ };
60
+ Charset.prototype.removeUnreadable = function() {
61
+ var unreadableChars = /[0OIl]/g;
62
+ this.chars = this.chars.replace(unreadableChars, "");
63
+ };
64
+ Charset.prototype.setcapitalization = function(capitalization) {
65
+ if (capitalization === "uppercase") {
66
+ this.chars = this.chars.toUpperCase();
67
+ } else if (capitalization === "lowercase") {
68
+ this.chars = this.chars.toLowerCase();
69
+ }
70
+ };
71
+ Charset.prototype.removeDuplicates = function() {
72
+ var charMap = this.chars.split("");
73
+ charMap = [...new Set(charMap)];
74
+ this.chars = charMap.join("");
75
+ };
76
+ module.exports = Charset;
77
+ }
78
+ });
79
+
80
+ // node_modules/randomstring/lib/randomstring.js
81
+ var require_randomstring = chunkGGY7LCMQ_cjs.__commonJS({
82
+ "node_modules/randomstring/lib/randomstring.js"(exports) {
83
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
84
+ var randomBytes = require_randombytes();
85
+ var Charset = require_charset();
86
+ function unsafeRandomBytes(length) {
87
+ var stack = [];
88
+ for (var i = 0; i < length; i++) {
89
+ stack.push(Math.floor(Math.random() * 255));
90
+ }
91
+ return {
92
+ length,
93
+ readUInt8: function(index) {
94
+ return stack[index];
95
+ }
96
+ };
97
+ }
98
+ chunkGGY7LCMQ_cjs.__name(unsafeRandomBytes, "unsafeRandomBytes");
99
+ function safeRandomBytes(length) {
100
+ try {
101
+ return randomBytes(length);
102
+ } catch (e) {
103
+ return unsafeRandomBytes(length);
104
+ }
105
+ }
106
+ chunkGGY7LCMQ_cjs.__name(safeRandomBytes, "safeRandomBytes");
107
+ function processString(buf, initialString, chars, reqLen, maxByte) {
108
+ var string = initialString;
109
+ for (var i = 0; i < buf.length && string.length < reqLen; i++) {
110
+ var randomByte = buf.readUInt8(i);
111
+ if (randomByte < maxByte) {
112
+ string += chars.charAt(randomByte % chars.length);
113
+ }
114
+ }
115
+ return string;
116
+ }
117
+ chunkGGY7LCMQ_cjs.__name(processString, "processString");
118
+ function getAsyncString(string, chars, length, maxByte, cb) {
119
+ randomBytes(length, function(err, buf) {
120
+ if (err) {
121
+ cb(err);
122
+ }
123
+ var generatedString = processString(buf, string, chars, length, maxByte);
124
+ if (generatedString.length < length) {
125
+ getAsyncString(generatedString, chars, length, maxByte, cb);
126
+ } else {
127
+ cb(null, generatedString);
128
+ }
129
+ });
130
+ }
131
+ chunkGGY7LCMQ_cjs.__name(getAsyncString, "getAsyncString");
132
+ exports.generate = function(options, cb) {
133
+ var charset = new Charset();
134
+ var length, string = "";
135
+ if (typeof options === "object") {
136
+ length = typeof options.length === "number" ? options.length : 32;
137
+ if (options.charset) {
138
+ charset.setType(options.charset);
139
+ } else {
140
+ charset.setType("alphanumeric");
141
+ }
142
+ if (options.capitalization) {
143
+ charset.setcapitalization(options.capitalization);
144
+ }
145
+ if (options.readable) {
146
+ charset.removeUnreadable();
147
+ }
148
+ charset.removeDuplicates();
149
+ } else if (typeof options === "number") {
150
+ length = options;
151
+ charset.setType("alphanumeric");
152
+ } else {
153
+ length = 32;
154
+ charset.setType("alphanumeric");
155
+ }
156
+ var charsLen = charset.chars.length;
157
+ var maxByte = 256 - 256 % charsLen;
158
+ if (!cb) {
159
+ while (string.length < length) {
160
+ var buf = safeRandomBytes(Math.ceil(length * 256 / maxByte));
161
+ string = processString(buf, string, charset.chars, length, maxByte);
162
+ }
163
+ return string;
164
+ }
165
+ getAsyncString(string, charset.chars, length, maxByte, cb);
166
+ };
167
+ }
168
+ });
169
+
170
+ // node_modules/randomstring/index.js
171
+ var require_randomstring2 = chunkGGY7LCMQ_cjs.__commonJS({
172
+ "node_modules/randomstring/index.js"(exports, module) {
173
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
174
+ module.exports = require_randomstring();
175
+ }
176
+ });
177
+
178
+ // src/Utilities.ts
179
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
180
+
181
+ // node_modules/sort-array/index.mjs
182
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
183
+
184
+ // node_modules/array-back/index.mjs
185
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
186
+ function isObject(input) {
187
+ return typeof input === "object" && input !== null;
188
+ }
189
+ chunkGGY7LCMQ_cjs.__name(isObject, "isObject");
190
+ function isArrayLike(input) {
191
+ return isObject(input) && typeof input.length === "number";
192
+ }
193
+ chunkGGY7LCMQ_cjs.__name(isArrayLike, "isArrayLike");
194
+ function arrayify(input) {
195
+ if (Array.isArray(input)) {
196
+ return input;
197
+ } else if (input === void 0) {
198
+ return [];
199
+ } else if (isArrayLike(input) || input instanceof Set) {
200
+ return Array.from(input);
201
+ } else {
202
+ return [input];
203
+ }
204
+ }
205
+ chunkGGY7LCMQ_cjs.__name(arrayify, "arrayify");
206
+ var array_back_default = arrayify;
207
+
208
+ // node_modules/typical/index.mjs
209
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
210
+ function isNumber(n) {
211
+ return !isNaN(parseFloat(n)) && isFinite(n);
212
+ }
213
+ chunkGGY7LCMQ_cjs.__name(isNumber, "isNumber");
214
+ function isPlainObject(input) {
215
+ return input !== null && typeof input === "object" && input.constructor === Object;
216
+ }
217
+ chunkGGY7LCMQ_cjs.__name(isPlainObject, "isPlainObject");
218
+ function isArrayLike2(input) {
219
+ return isObject2(input) && typeof input.length === "number";
220
+ }
221
+ chunkGGY7LCMQ_cjs.__name(isArrayLike2, "isArrayLike");
222
+ function isObject2(input) {
223
+ return typeof input === "object" && input !== null;
224
+ }
225
+ chunkGGY7LCMQ_cjs.__name(isObject2, "isObject");
226
+ function isDefined(input) {
227
+ return typeof input !== "undefined";
228
+ }
229
+ chunkGGY7LCMQ_cjs.__name(isDefined, "isDefined");
230
+ function isUndefined(input) {
231
+ return !isDefined(input);
232
+ }
233
+ chunkGGY7LCMQ_cjs.__name(isUndefined, "isUndefined");
234
+ function isNull(input) {
235
+ return input === null;
236
+ }
237
+ chunkGGY7LCMQ_cjs.__name(isNull, "isNull");
238
+ function isDefinedValue(input) {
239
+ return isDefined(input) && !isNull(input) && !Number.isNaN(input);
240
+ }
241
+ chunkGGY7LCMQ_cjs.__name(isDefinedValue, "isDefinedValue");
242
+ function isClass(input) {
243
+ if (typeof input === "function") {
244
+ return /^class /.test(Function.prototype.toString.call(input));
245
+ } else {
246
+ return false;
247
+ }
248
+ }
249
+ chunkGGY7LCMQ_cjs.__name(isClass, "isClass");
250
+ function isPrimitive(input) {
251
+ if (input === null)
252
+ return true;
253
+ switch (typeof input) {
254
+ case "string":
255
+ case "number":
256
+ case "symbol":
257
+ case "undefined":
258
+ case "boolean":
259
+ return true;
260
+ default:
261
+ return false;
262
+ }
263
+ }
264
+ chunkGGY7LCMQ_cjs.__name(isPrimitive, "isPrimitive");
265
+ function isPromise(input) {
266
+ if (input) {
267
+ const isPromise3 = isDefined(Promise) && input instanceof Promise;
268
+ const isThenable = input.then && typeof input.then === "function";
269
+ return !!(isPromise3 || isThenable);
270
+ } else {
271
+ return false;
272
+ }
273
+ }
274
+ chunkGGY7LCMQ_cjs.__name(isPromise, "isPromise");
275
+ function isIterable(input) {
276
+ if (input === null || !isDefined(input)) {
277
+ return false;
278
+ } else {
279
+ return typeof input[Symbol.iterator] === "function" || typeof input[Symbol.asyncIterator] === "function";
280
+ }
281
+ }
282
+ chunkGGY7LCMQ_cjs.__name(isIterable, "isIterable");
283
+ function isString(input) {
284
+ return typeof input === "string";
285
+ }
286
+ chunkGGY7LCMQ_cjs.__name(isString, "isString");
287
+ function isFunction(input) {
288
+ return typeof input === "function";
289
+ }
290
+ chunkGGY7LCMQ_cjs.__name(isFunction, "isFunction");
291
+ var typical_default = {
292
+ isNumber,
293
+ isPlainObject,
294
+ isArrayLike: isArrayLike2,
295
+ isObject: isObject2,
296
+ isDefined,
297
+ isUndefined,
298
+ isNull,
299
+ isDefinedValue,
300
+ isClass,
301
+ isPrimitive,
302
+ isPromise,
303
+ isIterable,
304
+ isString,
305
+ isFunction
306
+ };
307
+
308
+ // node_modules/sort-array/index.mjs
309
+ function sortArray(arr, options = {}) {
310
+ options = Object.assign(
311
+ {
312
+ computed: {},
313
+ customOrders: {},
314
+ nullRank: 1,
315
+ undefinedRank: 1
316
+ },
317
+ options
318
+ );
319
+ arr.sort(getCompareFunc(options));
320
+ return arr;
321
+ }
322
+ chunkGGY7LCMQ_cjs.__name(sortArray, "sortArray");
323
+ function getCompareFunc(options = {}) {
324
+ const by = array_back_default(options.by);
325
+ const order = array_back_default(options.order);
326
+ const { customOrders, computed } = options;
327
+ return /* @__PURE__ */ chunkGGY7LCMQ_cjs.__name(function compareFunc(xIn, yIn, byIndex = 0) {
328
+ const currOrder = order[byIndex] || "asc";
329
+ if (!(currOrder === "asc" || currOrder === "desc" || customOrders[currOrder])) {
330
+ return 0;
331
+ }
332
+ let result, x, y;
333
+ if (by.length) {
334
+ x = typical_default.isDefined(xIn[by[byIndex]]) ? xIn[by[byIndex]] : computed[by[byIndex]] && computed[by[byIndex]](xIn);
335
+ y = typical_default.isDefined(yIn[by[byIndex]]) ? yIn[by[byIndex]] : computed[by[byIndex]] && computed[by[byIndex]](yIn);
336
+ } else {
337
+ x = xIn;
338
+ y = yIn;
339
+ }
340
+ if (customOrders && customOrders[currOrder]) {
341
+ result = customOrders[currOrder].indexOf(x) - customOrders[currOrder].indexOf(y);
342
+ } else if (x === y) {
343
+ result = 0;
344
+ } else if (typical_default.isNull(x) && typical_default.isUndefined(y)) {
345
+ result = currOrder === "asc" ? 1 : currOrder === "desc" ? -1 : 0;
346
+ } else if (typical_default.isUndefined(x) && typical_default.isNull(y)) {
347
+ result = currOrder === "asc" ? -1 : currOrder === "desc" ? 1 : 0;
348
+ } else if (typical_default.isNull(x) && typical_default.isDefinedValue(y)) {
349
+ result = options.nullRank;
350
+ } else if (typical_default.isUndefined(x) && typical_default.isDefinedValue(y)) {
351
+ result = options.undefinedRank;
352
+ } else if (typical_default.isNull(y) && typical_default.isDefinedValue(x)) {
353
+ result = -options.nullRank;
354
+ } else if (typical_default.isUndefined(y) && typical_default.isDefinedValue(x)) {
355
+ result = -options.undefinedRank;
356
+ } else {
357
+ result = x < y ? -1 : x > y ? 1 : 0;
358
+ if (currOrder === "desc") {
359
+ result = result * -1;
360
+ }
361
+ }
362
+ if (result === 0 && typical_default.isDefined(by[byIndex + 1])) {
363
+ result = compareFunc(xIn, yIn, byIndex + 1);
364
+ }
365
+ return result;
366
+ }, "compareFunc");
367
+ }
368
+ chunkGGY7LCMQ_cjs.__name(getCompareFunc, "getCompareFunc");
369
+ var sort_array_default = sortArray;
370
+
371
+ // node_modules/sort-keys/index.js
372
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
373
+
374
+ // node_modules/is-plain-obj/index.js
375
+ chunkGGY7LCMQ_cjs.init_cjs_shims();
376
+ function isPlainObject2(value) {
377
+ if (typeof value !== "object" || value === null) {
378
+ return false;
379
+ }
380
+ const prototype = Object.getPrototypeOf(value);
381
+ return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
382
+ }
383
+ chunkGGY7LCMQ_cjs.__name(isPlainObject2, "isPlainObject");
384
+
385
+ // node_modules/sort-keys/index.js
386
+ function sortKeys(object, options = {}) {
387
+ if (!isPlainObject2(object) && !Array.isArray(object)) {
388
+ throw new TypeError("Expected a plain object or array");
389
+ }
390
+ const { deep, compare } = options;
391
+ const seenInput = [];
392
+ const seenOutput = [];
393
+ const deepSortArray = /* @__PURE__ */ chunkGGY7LCMQ_cjs.__name((array) => {
394
+ const seenIndex = seenInput.indexOf(array);
395
+ if (seenIndex !== -1) {
396
+ return seenOutput[seenIndex];
397
+ }
398
+ const result = [];
399
+ seenInput.push(array);
400
+ seenOutput.push(result);
401
+ result.push(...array.map((item) => {
402
+ if (Array.isArray(item)) {
403
+ return deepSortArray(item);
404
+ }
405
+ if (isPlainObject2(item)) {
406
+ return _sortKeys(item);
407
+ }
408
+ return item;
409
+ }));
410
+ return result;
411
+ }, "deepSortArray");
412
+ const _sortKeys = /* @__PURE__ */ chunkGGY7LCMQ_cjs.__name((object2) => {
413
+ const seenIndex = seenInput.indexOf(object2);
414
+ if (seenIndex !== -1) {
415
+ return seenOutput[seenIndex];
416
+ }
417
+ const result = {};
418
+ const keys = Object.keys(object2).sort(compare);
419
+ seenInput.push(object2);
420
+ seenOutput.push(result);
421
+ for (const key of keys) {
422
+ const value = object2[key];
423
+ let newValue;
424
+ if (deep && Array.isArray(value)) {
425
+ newValue = deepSortArray(value);
426
+ } else {
427
+ newValue = deep && isPlainObject2(value) ? _sortKeys(value) : value;
428
+ }
429
+ Object.defineProperty(result, key, {
430
+ ...Object.getOwnPropertyDescriptor(object2, key),
431
+ value: newValue
432
+ });
433
+ }
434
+ return result;
435
+ }, "_sortKeys");
436
+ if (Array.isArray(object)) {
437
+ return deep ? deepSortArray(object) : object.slice();
438
+ }
439
+ return _sortKeys(object);
440
+ }
441
+ chunkGGY7LCMQ_cjs.__name(sortKeys, "sortKeys");
442
+
443
+ // src/Utilities.ts
444
+ var import_is_glob = chunkGGY7LCMQ_cjs.__toESM(chunkBO7Y6HNS_cjs.require_is_glob(), 1);
445
+ var randomString = chunkGGY7LCMQ_cjs.__toESM(require_randomstring2(), 1);
446
+ function IsEqual(val1, val2) {
447
+ const compareSet = /* @__PURE__ */ new Set();
448
+ compareSet.add(val1).add(val2);
449
+ return compareSet.size === 2;
450
+ }
451
+ chunkGGY7LCMQ_cjs.__name(IsEqual, "IsEqual");
452
+ function IsPath(inp) {
453
+ try {
454
+ const pathRegex = new RegExp('^(\\/|\\.\\.?\\/|([A-Za-z]:)?\\\\)([^\\\\\\/:*?"<>|\\r\\n]+[\\\\\\/])*[^\\\\\\/:*?"<>|\\r\\n]*$');
455
+ return pathRegex.test(As(inp));
456
+ } catch (e) {
457
+ return false;
458
+ }
459
+ }
460
+ chunkGGY7LCMQ_cjs.__name(IsPath, "IsPath");
461
+ function* ConvertToIterable(inp) {
462
+ for (let i = 0; i < inp.length; i++)
463
+ yield inp[i];
464
+ }
465
+ chunkGGY7LCMQ_cjs.__name(ConvertToIterable, "ConvertToIterable");
466
+ function ConvertToStream(inp, options) {
467
+ options = options ? options : {};
468
+ return stream.Stream.Readable.from(ConvertToIterable(inp), options);
469
+ }
470
+ chunkGGY7LCMQ_cjs.__name(ConvertToStream, "ConvertToStream");
471
+ function isPromise2(target) {
472
+ return types.isPromise(target) ? true : !!target && (typeof target === "object" || typeof target === "function") && typeof target.then === "function";
473
+ }
474
+ chunkGGY7LCMQ_cjs.__name(isPromise2, "isPromise");
475
+ async function Delay(ms = 1e3) {
476
+ return await promises.setTimeout(ms);
477
+ }
478
+ chunkGGY7LCMQ_cjs.__name(Delay, "Delay");
479
+ function ThrowIntoBlackHole(...args) {
480
+ }
481
+ chunkGGY7LCMQ_cjs.__name(ThrowIntoBlackHole, "ThrowIntoBlackHole");
482
+ function IsObjectInitialized(obj) {
483
+ return !!Reflect.getOwnMetadata(chunkSWCU6OID_cjs.OBJECT_INIT_MARK, obj);
484
+ }
485
+ chunkGGY7LCMQ_cjs.__name(IsObjectInitialized, "IsObjectInitialized");
486
+ function MergeSet(s1, s2) {
487
+ return /* @__PURE__ */ new Set([...s1, ...s2]);
488
+ }
489
+ chunkGGY7LCMQ_cjs.__name(MergeSet, "MergeSet");
490
+ function MergeArray(arr1, arr2) {
491
+ return [...arr1, ...arr2];
492
+ }
493
+ chunkGGY7LCMQ_cjs.__name(MergeArray, "MergeArray");
494
+ function MergeMap(m1, m2) {
495
+ return new Map([...m1, ...m2]);
496
+ }
497
+ chunkGGY7LCMQ_cjs.__name(MergeMap, "MergeMap");
498
+ function SetToArray(set) {
499
+ return Array.from(set);
500
+ }
501
+ chunkGGY7LCMQ_cjs.__name(SetToArray, "SetToArray");
502
+ function ArrayToSet(arr) {
503
+ return new Set(arr);
504
+ }
505
+ chunkGGY7LCMQ_cjs.__name(ArrayToSet, "ArrayToSet");
506
+ function UniqueArray(arr) {
507
+ return Array.from(new Set(arr));
508
+ }
509
+ chunkGGY7LCMQ_cjs.__name(UniqueArray, "UniqueArray");
510
+ function SortArray(arr, ...options) {
511
+ if (options.length < 2) {
512
+ let sortOptions = { order: "asc" };
513
+ if (options.length)
514
+ sortOptions = Object.assign(sortOptions, {
515
+ by: options[0].by,
516
+ order: options[0].order,
517
+ computed: options[0].computed
518
+ });
519
+ return sort_array_default(arr, sortOptions);
520
+ } else {
521
+ const sortsOptions = {
522
+ by: [],
523
+ order: [],
524
+ customOrders: {}
525
+ };
526
+ options.forEach((opt) => {
527
+ if (opt.by) {
528
+ const field = opt.by;
529
+ sortsOptions.by.push(field);
530
+ sortsOptions.order.push(field);
531
+ sortsOptions.customOrders[field] = SortArray(arr, opt).map((value) => value[field]);
532
+ }
533
+ });
534
+ return sort_array_default(arr, sortsOptions);
535
+ }
536
+ }
537
+ chunkGGY7LCMQ_cjs.__name(SortArray, "SortArray");
538
+ function SortObject(object, options) {
539
+ return sortKeys(object, {
540
+ deep: options == null ? void 0 : options.deep,
541
+ compare: (a, b) => {
542
+ switch (options == null ? void 0 : options.order) {
543
+ case "asc":
544
+ return a.localeCompare(b);
545
+ case "desc":
546
+ return -a.localeCompare(b);
547
+ default:
548
+ return a.localeCompare(b);
549
+ }
550
+ }
551
+ });
552
+ }
553
+ chunkGGY7LCMQ_cjs.__name(SortObject, "SortObject");
554
+ function ConfigureObjectProperties(target, properties) {
555
+ Object.keys(properties ? properties : {}).forEach((propertyKey) => target[propertyKey] = properties[propertyKey]);
556
+ }
557
+ chunkGGY7LCMQ_cjs.__name(ConfigureObjectProperties, "ConfigureObjectProperties");
558
+ function As(inp) {
559
+ return inp;
560
+ }
561
+ chunkGGY7LCMQ_cjs.__name(As, "As");
562
+ function IsGlobString(inp) {
563
+ return (0, import_is_glob.default)(inp);
564
+ }
565
+ chunkGGY7LCMQ_cjs.__name(IsGlobString, "IsGlobString");
566
+ function RandomString(length, charset) {
567
+ return randomString.generate({
568
+ length: length !== void 0 ? length : 32,
569
+ charset: As(charset !== void 0 ? charset : "alphanumeric")
570
+ });
571
+ }
572
+ chunkGGY7LCMQ_cjs.__name(RandomString, "RandomString");
573
+ function NonceStr() {
574
+ return RandomString(32, "alphanumeric");
575
+ }
576
+ chunkGGY7LCMQ_cjs.__name(NonceStr, "NonceStr");
577
+ function ParentConstructor(target) {
578
+ const rootProto = Symbol.constructor.prototype.constructor.__proto__;
579
+ const constructor = !!target[Symbol.hasInstance] && target.prototype ? target : target.constructor;
580
+ const proto = constructor.prototype.constructor.__proto__;
581
+ return proto === rootProto ? null : proto;
582
+ }
583
+ chunkGGY7LCMQ_cjs.__name(ParentConstructor, "ParentConstructor");
584
+
585
+ exports.ArrayToSet = ArrayToSet;
586
+ exports.As = As;
587
+ exports.ConfigureObjectProperties = ConfigureObjectProperties;
588
+ exports.ConvertToIterable = ConvertToIterable;
589
+ exports.ConvertToStream = ConvertToStream;
590
+ exports.Delay = Delay;
591
+ exports.IsEqual = IsEqual;
592
+ exports.IsGlobString = IsGlobString;
593
+ exports.IsObjectInitialized = IsObjectInitialized;
594
+ exports.IsPath = IsPath;
595
+ exports.MergeArray = MergeArray;
596
+ exports.MergeMap = MergeMap;
597
+ exports.MergeSet = MergeSet;
598
+ exports.NonceStr = NonceStr;
599
+ exports.ParentConstructor = ParentConstructor;
600
+ exports.RandomString = RandomString;
601
+ exports.SetToArray = SetToArray;
602
+ exports.SortArray = SortArray;
603
+ exports.SortObject = SortObject;
604
+ exports.ThrowIntoBlackHole = ThrowIntoBlackHole;
605
+ exports.UniqueArray = UniqueArray;
606
+ exports.isPromise = isPromise2;
607
+ //# sourceMappingURL=out.js.map
608
+ //# 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=