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,767 @@
1
+ import { __commonJS, init_esm_shims, __name } from './chunk-5NK7E2HA.js';
2
+
3
+ // node_modules/gex/dist/gex.js
4
+ var require_gex = __commonJS({
5
+ "node_modules/gex/dist/gex.js"(exports, module) {
6
+ init_esm_shims();
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.Gex = void 0;
9
+ var _Gexer = class _Gexer {
10
+ constructor(gexspec) {
11
+ this.desc = "";
12
+ this.gexmap = {};
13
+ if (null != gexspec) {
14
+ let gexstrs = Array.isArray(gexspec) ? gexspec : [gexspec];
15
+ gexstrs.forEach((str) => {
16
+ this.gexmap[str] = this.re(this.clean(str));
17
+ });
18
+ }
19
+ }
20
+ dodgy(obj) {
21
+ return null == obj || Number.isNaN(obj);
22
+ }
23
+ clean(gexexp) {
24
+ let gexstr = "" + gexexp;
25
+ return this.dodgy(gexexp) ? "" : gexstr;
26
+ }
27
+ match(str) {
28
+ str = "" + str;
29
+ let hasmatch = false;
30
+ let gexstrs = Object.keys(this.gexmap);
31
+ for (let i = 0; i < gexstrs.length && !hasmatch; i++) {
32
+ hasmatch = !!this.gexmap[gexstrs[i]].exec(str);
33
+ }
34
+ return hasmatch;
35
+ }
36
+ on(obj) {
37
+ if (null == obj) {
38
+ return null;
39
+ }
40
+ let typeof_obj = typeof obj;
41
+ if ("string" === typeof_obj || "number" === typeof_obj || "boolean" === typeof_obj || obj instanceof Date || obj instanceof RegExp) {
42
+ return this.match(obj) ? obj : null;
43
+ } else if (Array.isArray(obj)) {
44
+ let out = [];
45
+ for (let i = 0; i < obj.length; i++) {
46
+ if (!this.dodgy(obj[i]) && this.match(obj[i])) {
47
+ out.push(obj[i]);
48
+ }
49
+ }
50
+ return out;
51
+ } else {
52
+ let outobj = {};
53
+ for (let p in obj) {
54
+ if (Object.prototype.hasOwnProperty.call(obj, p)) {
55
+ if (this.match(p)) {
56
+ outobj[p] = obj[p];
57
+ }
58
+ }
59
+ }
60
+ return outobj;
61
+ }
62
+ }
63
+ esc(gexexp) {
64
+ let gexstr = this.clean(gexexp);
65
+ gexstr = gexstr.replace(/\*/g, "**");
66
+ gexstr = gexstr.replace(/\?/g, "*?");
67
+ return gexstr;
68
+ }
69
+ escregexp(restr) {
70
+ return restr ? ("" + restr).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") : "";
71
+ }
72
+ re(gs) {
73
+ if ("" === gs || gs) {
74
+ gs = this.escregexp(gs);
75
+ gs = gs.replace(/\\\*/g, "[\\s\\S]*");
76
+ gs = gs.replace(/\\\?/g, "[\\s\\S]");
77
+ gs = gs.replace(/\[\\s\\S\]\*\[\\s\\S\]\*/g, "\\*");
78
+ gs = gs.replace(/\[\\s\\S\]\*\[\\s\\S\]/g, "\\?");
79
+ gs = "^" + gs + "$";
80
+ return new RegExp(gs);
81
+ } else {
82
+ let gexstrs = Object.keys(this.gexmap);
83
+ return 1 == gexstrs.length ? this.gexmap[gexstrs[0]] : { ...this.gexmap };
84
+ }
85
+ }
86
+ toString() {
87
+ let d = this.desc;
88
+ return "" != d ? d : this.desc = "Gex[" + Object.keys(this.gexmap) + "]";
89
+ }
90
+ inspect() {
91
+ return this.toString();
92
+ }
93
+ };
94
+ __name(_Gexer, "Gexer");
95
+ var Gexer = _Gexer;
96
+ function Gex(gexspec) {
97
+ return new Gexer(gexspec);
98
+ }
99
+ __name(Gex, "Gex");
100
+ exports.Gex = Gex;
101
+ if ("undefined" !== typeof module) {
102
+ module.exports = Gex;
103
+ module.exports.Gex = Gex;
104
+ }
105
+ exports.default = Gex;
106
+ }
107
+ });
108
+
109
+ // node_modules/patrun/dist/lib/matchers.js
110
+ var require_matchers = __commonJS({
111
+ "node_modules/patrun/dist/lib/matchers.js"(exports) {
112
+ init_esm_shims();
113
+ var __classPrivateFieldGet = exports && exports.__classPrivateFieldGet || function(receiver, state, kind, f) {
114
+ if (kind === "a" && !f)
115
+ throw new TypeError("Private accessor was defined without a getter");
116
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
117
+ throw new TypeError("Cannot read private member from an object whose class did not declare it");
118
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
119
+ };
120
+ var _IntervalMatcher_and;
121
+ var _IntervalMatcher_or;
122
+ var _IntervalMatcher_nil;
123
+ var _IntervalMatcher_err;
124
+ var _IntervalMatcher_mgt;
125
+ var _IntervalMatcher_mgte;
126
+ var _IntervalMatcher_mlt;
127
+ var _IntervalMatcher_mlte;
128
+ var _IntervalMatcher_meq;
129
+ Object.defineProperty(exports, "__esModule", { value: true });
130
+ exports.IntervalMatcher = exports.GexMatcher = void 0;
131
+ var gex_1 = require_gex();
132
+ var _GexMatcher = class _GexMatcher {
133
+ constructor() {
134
+ }
135
+ make(key, fix) {
136
+ if ("string" === typeof fix && fix.match(/[*?]/)) {
137
+ let gex = (0, gex_1.Gex)(fix);
138
+ return {
139
+ kind: "gex",
140
+ match: (val) => null != gex.on(val),
141
+ fix,
142
+ meta: {},
143
+ same(mv) {
144
+ return null != mv && mv.kind === this.kind && mv.fix === this.fix;
145
+ }
146
+ };
147
+ } else
148
+ return void 0;
149
+ }
150
+ // TODO: pretty primitive, just looks for '*'
151
+ scan(mvs, opts) {
152
+ let has_match_any = mvs.filter((mv) => "*" === mv.fix).length > 0;
153
+ return {
154
+ complete: has_match_any,
155
+ sound: has_match_any,
156
+ gaps: [],
157
+ overs: [],
158
+ why: "no-star"
159
+ };
160
+ }
161
+ };
162
+ __name(_GexMatcher, "GexMatcher");
163
+ var GexMatcher = _GexMatcher;
164
+ exports.GexMatcher = GexMatcher;
165
+ var IntervalRE = new RegExp([
166
+ "^/s*",
167
+ "(=*[<>/(/[]?=*)?/s*([-+0-9a-fA-FeEoOxX]+(/.([0-9a-fA-FeEoOxX]+))?)([/)/]]?)(/s*(,|&+|/|+|/./.)/s*(=*[<>]?=*)/s*([-+.0-9a-fA-FeEoOxX]+)/s*([/)/]]?))?/s*$"
168
+ // optional whitespace
169
+ ].join("").replace(/\//g, "\\"));
170
+ var _IntervalMatcher = class _IntervalMatcher {
171
+ constructor() {
172
+ this.kind = "interval";
173
+ _IntervalMatcher_and.set(this, (lhs, rhs) => /* @__PURE__ */ __name(function and(x) {
174
+ return lhs(x) && rhs(x);
175
+ }, "and"));
176
+ _IntervalMatcher_or.set(this, (lhs, rhs) => /* @__PURE__ */ __name(function or(x) {
177
+ return lhs(x) || rhs(x);
178
+ }, "or"));
179
+ _IntervalMatcher_nil.set(this, (n) => /* @__PURE__ */ __name(function nil(x) {
180
+ return false;
181
+ }, "nil"));
182
+ _IntervalMatcher_err.set(this, (n) => /* @__PURE__ */ __name(function err(x) {
183
+ return false;
184
+ }, "err"));
185
+ _IntervalMatcher_mgt.set(this, (n) => /* @__PURE__ */ __name(function gt(x) {
186
+ return x > n;
187
+ }, "gt"));
188
+ _IntervalMatcher_mgte.set(this, (n) => /* @__PURE__ */ __name(function gte(x) {
189
+ return x >= n;
190
+ }, "gte"));
191
+ _IntervalMatcher_mlt.set(this, (n) => /* @__PURE__ */ __name(function lt(x) {
192
+ return x < n;
193
+ }, "lt"));
194
+ _IntervalMatcher_mlte.set(this, (n) => /* @__PURE__ */ __name(function lte(x) {
195
+ return x <= n;
196
+ }, "lte"));
197
+ _IntervalMatcher_meq.set(this, (n) => /* @__PURE__ */ __name(function eq(x) {
198
+ return x === n;
199
+ }, "eq"));
200
+ }
201
+ make(key, fix) {
202
+ if ("string" === typeof fix && // At least one interval operator is required.
203
+ // Exact numbers must be specified as '=X'
204
+ fix.match(/[=<>.[()\]]/)) {
205
+ let m = fix.match(IntervalRE);
206
+ let meta = { jo: "and", o0: "err", n0: NaN, o1: "err", n1: NaN };
207
+ let match = /* @__PURE__ */ __name((val) => false, "match");
208
+ if (null != m) {
209
+ let os0 = _IntervalMatcher.normop(m[1]) || _IntervalMatcher.normop(m[5]);
210
+ let os1 = _IntervalMatcher.normop(m[8]) || _IntervalMatcher.normop(m[10]);
211
+ let o0 = "=" === os0 ? __classPrivateFieldGet(this, _IntervalMatcher_meq, "f") : "<" === os0 ? __classPrivateFieldGet(this, _IntervalMatcher_mlt, "f") : ")" === os0 ? __classPrivateFieldGet(this, _IntervalMatcher_mlt, "f") : "<=" === os0 ? __classPrivateFieldGet(this, _IntervalMatcher_mlte, "f") : "]" === os0 ? __classPrivateFieldGet(this, _IntervalMatcher_mlte, "f") : ">" === os0 ? __classPrivateFieldGet(this, _IntervalMatcher_mgt, "f") : "(" === os0 ? __classPrivateFieldGet(this, _IntervalMatcher_mgt, "f") : ">=" === os0 ? __classPrivateFieldGet(this, _IntervalMatcher_mgte, "f") : "[" === os0 ? __classPrivateFieldGet(this, _IntervalMatcher_mgte, "f") : __classPrivateFieldGet(this, _IntervalMatcher_err, "f");
212
+ let n0 = Number(m[2]);
213
+ let n1 = null == m[9] ? NaN : Number(m[9]);
214
+ let jos = m[7];
215
+ let jo = null == jos ? __classPrivateFieldGet(this, _IntervalMatcher_or, "f") : "&" === jos.substring(0, 1) ? __classPrivateFieldGet(this, _IntervalMatcher_and, "f") : "," === jos.substring(0, 1) ? __classPrivateFieldGet(this, _IntervalMatcher_and, "f") : __classPrivateFieldGet(this, _IntervalMatcher_or, "f");
216
+ if (".." === jos) {
217
+ jo = __classPrivateFieldGet(this, _IntervalMatcher_and, "f");
218
+ o0 = __classPrivateFieldGet(this, _IntervalMatcher_err, "f") === o0 ? __classPrivateFieldGet(this, _IntervalMatcher_mgte, "f") : o0;
219
+ os1 = "" === os1 ? "<=" : os1;
220
+ }
221
+ let o1 = null == os1 ? __classPrivateFieldGet(this, _IntervalMatcher_nil, "f") : "=" === os1 ? __classPrivateFieldGet(this, _IntervalMatcher_meq, "f") : "<" === os1 ? __classPrivateFieldGet(this, _IntervalMatcher_mlt, "f") : ")" === os1 ? __classPrivateFieldGet(this, _IntervalMatcher_mlt, "f") : "<=" === os1 ? __classPrivateFieldGet(this, _IntervalMatcher_mlte, "f") : "]" === os1 ? __classPrivateFieldGet(this, _IntervalMatcher_mlte, "f") : ">" === os1 ? __classPrivateFieldGet(this, _IntervalMatcher_mgt, "f") : ">=" === os1 ? __classPrivateFieldGet(this, _IntervalMatcher_mgte, "f") : __classPrivateFieldGet(this, _IntervalMatcher_err, "f");
222
+ if (n0 === n1) {
223
+ if ("=" === os0 && null != os1) {
224
+ n1 = NaN;
225
+ o1 = __classPrivateFieldGet(this, _IntervalMatcher_nil, "f");
226
+ if (os1.includes("<")) {
227
+ o0 = __classPrivateFieldGet(this, _IntervalMatcher_mlte, "f");
228
+ } else if (os1.includes(">")) {
229
+ o0 = __classPrivateFieldGet(this, _IntervalMatcher_mgte, "f");
230
+ } else if (os1.includes("=")) {
231
+ o0 = __classPrivateFieldGet(this, _IntervalMatcher_meq, "f");
232
+ } else {
233
+ o0 = __classPrivateFieldGet(this, _IntervalMatcher_err, "f");
234
+ }
235
+ } else if ("=" === os1 && null != os0) {
236
+ n1 = NaN;
237
+ o1 = __classPrivateFieldGet(this, _IntervalMatcher_nil, "f");
238
+ if (os0.includes("<")) {
239
+ o0 = __classPrivateFieldGet(this, _IntervalMatcher_mlte, "f");
240
+ } else if (os0.includes(">")) {
241
+ o0 = __classPrivateFieldGet(this, _IntervalMatcher_mgte, "f");
242
+ } else {
243
+ o0 = __classPrivateFieldGet(this, _IntervalMatcher_err, "f");
244
+ }
245
+ }
246
+ }
247
+ if (__classPrivateFieldGet(this, _IntervalMatcher_err, "f") !== o0) {
248
+ if (__classPrivateFieldGet(this, _IntervalMatcher_nil, "f") === o1) {
249
+ if (__classPrivateFieldGet(this, _IntervalMatcher_mlt, "f") === o0 || __classPrivateFieldGet(this, _IntervalMatcher_mlte, "f") === o0) {
250
+ o1 = o0;
251
+ n1 = n0;
252
+ o0 = __classPrivateFieldGet(this, _IntervalMatcher_mgte, "f");
253
+ n0 = Number.NEGATIVE_INFINITY;
254
+ jo = __classPrivateFieldGet(this, _IntervalMatcher_and, "f");
255
+ } else if (__classPrivateFieldGet(this, _IntervalMatcher_mgt, "f") === o0 || __classPrivateFieldGet(this, _IntervalMatcher_mgte, "f") === o0) {
256
+ o1 = __classPrivateFieldGet(this, _IntervalMatcher_mlte, "f");
257
+ n1 = Number.POSITIVE_INFINITY;
258
+ jo = __classPrivateFieldGet(this, _IntervalMatcher_and, "f");
259
+ }
260
+ }
261
+ }
262
+ if (!isNaN(n1) && n1 < n0) {
263
+ let to = o1;
264
+ let tn = n1;
265
+ n1 = n0;
266
+ n0 = tn;
267
+ if (".." !== jos) {
268
+ o1 = o0;
269
+ o0 = to;
270
+ }
271
+ }
272
+ let o0f = o0(n0);
273
+ let o1f = o1(n1);
274
+ let check = jo(o0f, o1f);
275
+ meta = { jo: check.name, o0: o0f.name, n0, o1: o1f.name, n1 };
276
+ match = /* @__PURE__ */ __name((val) => {
277
+ let res = false;
278
+ let n = parseFloat(val);
279
+ if (!isNaN(n)) {
280
+ res = check(n);
281
+ }
282
+ return res;
283
+ }, "match");
284
+ return {
285
+ kind: "interval",
286
+ fix,
287
+ meta,
288
+ match,
289
+ same(mv) {
290
+ return null != mv && mv.kind === this.kind && mv.meta.jo === this.meta.jo && mv.meta.o0 === this.meta.o0 && mv.meta.n0 === this.meta.n0 && mv.meta.o1 === this.meta.o1 && mv.meta.n1 === this.meta.n1;
291
+ }
292
+ };
293
+ }
294
+ }
295
+ }
296
+ scan(mvs, opts) {
297
+ let scanres = {
298
+ complete: false,
299
+ sound: false,
300
+ gaps: [],
301
+ overs: [],
302
+ lower: null,
303
+ upper: null
304
+ };
305
+ let bottom = Number.NEGATIVE_INFINITY;
306
+ let top = Number.POSITIVE_INFINITY;
307
+ let half_intervals = this.half_intervals(mvs);
308
+ half_intervals.reduce((c, h) => {
309
+ let heq = "eq" === h.o;
310
+ let hlt = "lt" === h.o;
311
+ let hlte = "lte" === h.o;
312
+ let hgt = "gt" === h.o;
313
+ let hgte = "gte" === h.o;
314
+ let hn = h.n;
315
+ if (null == c.lower) {
316
+ let b = { n: bottom, o: "gte" };
317
+ c.lower = b;
318
+ c.upper = h;
319
+ if (!(bottom == hn && hgte)) {
320
+ if (hgt || hgte) {
321
+ c.gaps.push([b, { n: hn, o: hgt ? "lte" : "lt", m: 0 }]);
322
+ } else if (heq) {
323
+ c.gaps.push([b, { n: hn, o: "lte", m: 1 }]);
324
+ }
325
+ }
326
+ } else {
327
+ let ueq = "eq" === c.upper.o;
328
+ let ult = "lt" === c.upper.o;
329
+ let ulte = "lte" === c.upper.o;
330
+ "gt" === c.upper.o;
331
+ "hgte" === c.upper.o;
332
+ let un = c.upper.n;
333
+ let u = c.upper;
334
+ if (hn === un) {
335
+ if (ult && (hgte || heq) || (ulte || ueq) && hgt) ; else if (ueq || ult || ulte) {
336
+ c.gaps.push([
337
+ { n: un, o: ueq || ulte ? "gt" : "gte", m: 2, d: { u, h } },
338
+ { n: hn, o: heq || hgte ? "lt" : "lte", m: 3 }
339
+ ]);
340
+ } else ;
341
+ } else if (un < hn) {
342
+ if (hlt || hlte) ; else if (ueq || ult || ulte) {
343
+ c.gaps.push([
344
+ { n: un, o: ueq || ulte ? "gt" : "gte", m: 4 },
345
+ { n: hn, o: heq || hgte ? "lt" : "lte", m: 5 }
346
+ ]);
347
+ }
348
+ } else {
349
+ c.overs.push([
350
+ { n: hn, o: heq || hgte ? "gte" : "gt", m: 10 },
351
+ { n: un, o: ueq || ulte ? "lte" : "lt", m: 11 }
352
+ ]);
353
+ }
354
+ c.upper = h;
355
+ }
356
+ return c;
357
+ }, scanres);
358
+ let last = 0 < half_intervals.length && half_intervals[half_intervals.length - 1];
359
+ if (last && top !== last.n && last.o !== "gt" && last.o !== "gte") {
360
+ scanres.gaps.push([
361
+ { n: last.n, o: last.o === "eq" || last.o === "lte" ? "gt" : "gte", m: 6 },
362
+ { n: top, o: "lte", m: 7 }
363
+ ]);
364
+ }
365
+ scanres.complete = 0 === scanres.gaps.length;
366
+ scanres.sound = 0 === scanres.overs.length;
367
+ return scanres;
368
+ }
369
+ // NOTE: assumes n0<=n1
370
+ half_intervals(mvs) {
371
+ let half_intervals = [];
372
+ for (let mv of mvs) {
373
+ half_intervals.push([
374
+ { n: mv.meta.n0, o: mv.meta.o0 },
375
+ { n: mv.meta.n1, o: mv.meta.o1 }
376
+ ]);
377
+ }
378
+ var os = ["lt", "lte", "eq", "gte", "gt"];
379
+ var hi = half_intervals.map((hh) => [
380
+ isNaN(hh[0].n) || null == hh[0].n ? null : hh[0],
381
+ isNaN(hh[1].n) || null == hh[1].n ? null : hh[1]
382
+ ].filter((h) => null != h)).sort((a, b) => {
383
+ if (a[0].n < b[0].n) {
384
+ return -1;
385
+ } else if (b[0].n < a[0].n) {
386
+ return 1;
387
+ } else {
388
+ var a0i = os.indexOf(a[0].o);
389
+ var b0i = os.indexOf(b[0].o);
390
+ if (a0i < b0i) {
391
+ return -1;
392
+ } else if (b0i < a0i) {
393
+ return 1;
394
+ } else {
395
+ if (a[1].n < b[1].n) {
396
+ return -1;
397
+ } else if (b[1].n < a[1].n) {
398
+ return 1;
399
+ } else {
400
+ var a1i = os.indexOf(a[1].o);
401
+ var b1i = os.indexOf(b[1].o);
402
+ return a1i < b1i ? -1 : b1i < a1i ? 1 : 0;
403
+ }
404
+ }
405
+ }
406
+ }).reduce((hv, hh) => hv.concat(...hh), []);
407
+ return hi;
408
+ }
409
+ };
410
+ __name(_IntervalMatcher, "IntervalMatcher");
411
+ var IntervalMatcher = _IntervalMatcher;
412
+ exports.IntervalMatcher = IntervalMatcher;
413
+ _IntervalMatcher_and = /* @__PURE__ */ new WeakMap(), _IntervalMatcher_or = /* @__PURE__ */ new WeakMap(), _IntervalMatcher_nil = /* @__PURE__ */ new WeakMap(), _IntervalMatcher_err = /* @__PURE__ */ new WeakMap(), _IntervalMatcher_mgt = /* @__PURE__ */ new WeakMap(), _IntervalMatcher_mgte = /* @__PURE__ */ new WeakMap(), _IntervalMatcher_mlt = /* @__PURE__ */ new WeakMap(), _IntervalMatcher_mlte = /* @__PURE__ */ new WeakMap(), _IntervalMatcher_meq = /* @__PURE__ */ new WeakMap();
414
+ IntervalMatcher.normop = (op) => null == op ? null : ((op.match(/([<>\(\)\[\]])/) || [])[1] || "") + ((op.match(/(=)/) || [])[1] || "");
415
+ }
416
+ });
417
+
418
+ // node_modules/patrun/dist/patrun.js
419
+ var require_patrun = __commonJS({
420
+ "node_modules/patrun/dist/patrun.js"(exports, module) {
421
+ init_esm_shims();
422
+ Object.defineProperty(exports, "__esModule", { value: true });
423
+ exports.Gex = exports.Patrun = void 0;
424
+ var gex_1 = require_gex();
425
+ Object.defineProperty(exports, "Gex", { enumerable: true, get: function() {
426
+ return gex_1.Gex;
427
+ } });
428
+ var matchers_1 = require_matchers();
429
+ function Patrun(custom) {
430
+ custom = custom || {};
431
+ var self = {};
432
+ var top = {};
433
+ let matchers = [];
434
+ if (custom.gex) {
435
+ matchers.push(new matchers_1.GexMatcher());
436
+ }
437
+ if (custom.interval) {
438
+ matchers.push(new matchers_1.IntervalMatcher());
439
+ }
440
+ self.top = function() {
441
+ return top;
442
+ };
443
+ self.add = function(pat, data) {
444
+ pat = { ...pat };
445
+ var customizer = "function" === typeof custom ? custom.call(self, pat, data) : null;
446
+ var keys = Object.keys(pat).filter((key2) => null != pat[key2]).sort();
447
+ keys.forEach(function(key2) {
448
+ pat[key2] = String(pat[key2]);
449
+ });
450
+ var keymap = top;
451
+ var valmap;
452
+ for (var i = 0; i < keys.length; i++) {
453
+ var key = keys[i];
454
+ var fix = pat[key];
455
+ let mv = matchers.reduce((m, t) => m || t.make(key, fix), void 0);
456
+ valmap = keymap.v;
457
+ if (valmap && key == keymap.k) {
458
+ if (mv) {
459
+ var g = keymap.g = keymap.g || {};
460
+ var ga = g[key] = g[key] || [];
461
+ mv = ga.find((gmv) => gmv.same(mv)) || (ga.push(mv), mv);
462
+ keymap = mv.keymap || (mv.keymap = {});
463
+ } else {
464
+ keymap = valmap[fix] || (valmap[fix] = {});
465
+ }
466
+ } else if (!keymap.k) {
467
+ keymap.k = key;
468
+ keymap.v = {};
469
+ if (mv) {
470
+ var g = keymap.g = keymap.g || {};
471
+ var ga = g[key] = g[key] || [];
472
+ mv = ga.find((gmv) => gmv.same(mv)) || (ga.push(mv), mv);
473
+ keymap = mv.keymap || (mv.keymap = {});
474
+ } else {
475
+ keymap = keymap.v[fix] = {};
476
+ }
477
+ } else if (key < keymap.k) {
478
+ var s = keymap.s;
479
+ var g = keymap.g;
480
+ keymap.s = {
481
+ k: keymap.k,
482
+ // sk: keymap.sk,
483
+ v: keymap.v
484
+ };
485
+ if (s) {
486
+ keymap.s.s = s;
487
+ }
488
+ if (g) {
489
+ keymap.s.g = g;
490
+ }
491
+ if (keymap.g) {
492
+ keymap.g = {};
493
+ }
494
+ keymap.k = key;
495
+ keymap.v = {};
496
+ if (mv) {
497
+ var g = keymap.g = keymap.g || {};
498
+ var ga = g[key] = g[key] || [];
499
+ mv = ga.find((gmv) => gmv.same(mv)) || (ga.push(mv), mv);
500
+ keymap = mv.keymap || (mv.keymap = {});
501
+ } else {
502
+ keymap = keymap.v[fix] = {};
503
+ }
504
+ } else {
505
+ keymap = keymap.s || (keymap.s = {});
506
+ i--;
507
+ }
508
+ }
509
+ if (void 0 !== data && keymap) {
510
+ keymap.d = data;
511
+ if (customizer) {
512
+ keymap.f = "function" === typeof customizer ? customizer : customizer.find;
513
+ keymap.r = "function" === typeof customizer.remove ? customizer.remove : void 0;
514
+ }
515
+ }
516
+ return self;
517
+ };
518
+ self.findexact = function(pat) {
519
+ return self.find(pat, true);
520
+ };
521
+ self.find = function(pat, exact, collect) {
522
+ if (null == pat)
523
+ return null;
524
+ var keymap = top;
525
+ var data = void 0 === top.d ? null : top.d;
526
+ var finalfind = top.f;
527
+ var key = null;
528
+ var stars = [];
529
+ var foundkeys = {};
530
+ var patlen = Object.keys(pat).length;
531
+ var collection = [];
532
+ if (void 0 !== top.d) {
533
+ collection.push(top.d);
534
+ }
535
+ do {
536
+ key = keymap.k;
537
+ if (keymap.v) {
538
+ var val = pat[key];
539
+ var nextkeymap = keymap.v[val];
540
+ if (!nextkeymap && keymap.g && keymap.g[key]) {
541
+ var ga = keymap.g[key];
542
+ for (var gi = 0; gi < ga.length; gi++) {
543
+ if (ga[gi].match(val)) {
544
+ nextkeymap = ga[gi].keymap;
545
+ break;
546
+ }
547
+ }
548
+ }
549
+ if (nextkeymap) {
550
+ foundkeys[key] = true;
551
+ if (keymap.s) {
552
+ stars.push(keymap.s);
553
+ }
554
+ data = void 0 === nextkeymap.d ? exact ? null : data : nextkeymap.d;
555
+ if (collect && void 0 !== nextkeymap.d) {
556
+ collection.push(nextkeymap.d);
557
+ }
558
+ finalfind = nextkeymap.f;
559
+ keymap = nextkeymap;
560
+ } else {
561
+ keymap = keymap.s;
562
+ }
563
+ } else {
564
+ keymap = null;
565
+ }
566
+ if (null == keymap && 0 < stars.length && (null == data || collect && !exact)) {
567
+ keymap = stars.pop();
568
+ }
569
+ } while (keymap);
570
+ if (exact) {
571
+ if (Object.keys(foundkeys).length !== patlen) {
572
+ data = null;
573
+ }
574
+ } else {
575
+ if (null == data && void 0 !== top.d) {
576
+ data = top.d;
577
+ }
578
+ }
579
+ if (finalfind) {
580
+ data = finalfind.call(self, pat, data);
581
+ }
582
+ return collect ? collection : data;
583
+ };
584
+ self.remove = function(pat) {
585
+ var keymap = top;
586
+ var data = null;
587
+ var key;
588
+ var path = [];
589
+ do {
590
+ key = keymap.k;
591
+ if (keymap.v || keymap.g) {
592
+ if (keymap.v) {
593
+ var nextkeymap = keymap.v[pat[key]];
594
+ if (nextkeymap) {
595
+ path.push({ km: keymap, v: pat[key] });
596
+ }
597
+ }
598
+ if (null == nextkeymap && keymap.g) {
599
+ let mvs = keymap.g[key] || [];
600
+ for (let mvi = 0; mvi < mvs.length; mvi++) {
601
+ if (mvs[mvi].fix === pat[key]) {
602
+ path.push({ km: keymap, v: pat[key], mv: mvs[mvi] });
603
+ nextkeymap = mvs[mvi].keymap;
604
+ break;
605
+ }
606
+ }
607
+ }
608
+ if (nextkeymap) {
609
+ data = nextkeymap.d;
610
+ keymap = nextkeymap;
611
+ } else {
612
+ keymap = keymap.s;
613
+ }
614
+ } else {
615
+ keymap = null;
616
+ }
617
+ } while (keymap);
618
+ if (void 0 !== data) {
619
+ var part = path[path.length - 1];
620
+ if (part && part.km && part.km.v) {
621
+ var point = part.km.v[part.v] || part.mv && part.mv.keymap;
622
+ if (point && (!point.r || point.r(pat, point.d))) {
623
+ delete point.d;
624
+ }
625
+ }
626
+ }
627
+ };
628
+ self.list = function(pat, exact) {
629
+ pat = pat || {};
630
+ function descend(keymap, match, missing, acc2) {
631
+ if (keymap.v) {
632
+ var key = keymap.k;
633
+ var gexval = (0, gex_1.Gex)(pat ? null == pat[key] ? exact ? null : "*" : pat[key] : "*");
634
+ var itermatch = { ...match };
635
+ var itermissing = { ...missing };
636
+ var nextkeymap;
637
+ for (var val in keymap.v) {
638
+ if (val === pat[key] || !exact && null == pat[key] || gexval.on(val)) {
639
+ var valitermatch = { ...itermatch };
640
+ valitermatch[key] = val;
641
+ var valitermissing = { ...itermissing };
642
+ delete valitermissing[key];
643
+ nextkeymap = keymap.v[val];
644
+ if (0 === Object.keys(valitermissing).length && nextkeymap && nextkeymap.d) {
645
+ acc2.push({
646
+ match: valitermatch,
647
+ data: nextkeymap.d,
648
+ find: nextkeymap.f
649
+ });
650
+ }
651
+ if (nextkeymap && null != nextkeymap.v) {
652
+ descend(nextkeymap, { ...valitermatch }, { ...valitermissing }, acc2);
653
+ }
654
+ }
655
+ }
656
+ nextkeymap = keymap.s;
657
+ if (nextkeymap) {
658
+ descend(nextkeymap, { ...itermatch }, { ...itermissing }, acc2);
659
+ }
660
+ }
661
+ }
662
+ __name(descend, "descend");
663
+ var acc = [];
664
+ if (top.d) {
665
+ acc.push({
666
+ match: {},
667
+ data: top.d,
668
+ find: top.f
669
+ });
670
+ }
671
+ descend(top, {}, { ...pat }, acc);
672
+ return acc;
673
+ };
674
+ self.toString = function(first, second) {
675
+ var tree = true === first ? true : !!second;
676
+ var dstr = "function" === typeof first ? first : function(d) {
677
+ return "function" === typeof d ? "<" + d.name + ">" : "<" + d + ">";
678
+ };
679
+ function indent(o2, d) {
680
+ for (var i = 0; i < d; i++) {
681
+ o2.push(" ");
682
+ }
683
+ }
684
+ __name(indent, "indent");
685
+ var str = [];
686
+ function walk(n, o2, d, vs) {
687
+ var vsc;
688
+ if (void 0 !== n.d) {
689
+ o2.push(" " + dstr(n.d));
690
+ str.push(vs.join(", ") + " -> " + dstr(n.d));
691
+ }
692
+ if (n.k) {
693
+ o2.push("\n");
694
+ indent(o2, d);
695
+ o2.push(n.k + ":");
696
+ }
697
+ if (n.v || n.s || n.g) {
698
+ d++;
699
+ }
700
+ if (n.v) {
701
+ var pa = Object.keys(n.v).sort();
702
+ for (var pi = 0; pi < pa.length; pi++) {
703
+ var p = pa[pi];
704
+ o2.push("\n");
705
+ indent(o2, d);
706
+ o2.push(p + " ->");
707
+ vsc = vs.slice();
708
+ vsc.push(n.k + "=" + p);
709
+ walk(n.v[p], o2, d + 1, vsc);
710
+ }
711
+ }
712
+ if (n.g) {
713
+ var pa = Object.keys(n.g).sort();
714
+ for (var pi = 0; pi < pa.length; pi++) {
715
+ var mvs = n.g[pa[pi]];
716
+ for (var mvi = 0; mvi < mvs.length; mvi++) {
717
+ var mv = mvs[mvi];
718
+ o2.push("\n");
719
+ indent(o2, d);
720
+ o2.push(mv.fix + " ~>");
721
+ vsc = vs.slice();
722
+ vsc.push(n.k + "~" + mv.fix);
723
+ walk(mv.keymap, o2, d + 1, vsc);
724
+ }
725
+ }
726
+ }
727
+ if (n.s) {
728
+ o2.push("\n");
729
+ indent(o2, d);
730
+ o2.push("|");
731
+ vsc = vs.slice();
732
+ walk(n.s, o2, d + 1, vsc);
733
+ }
734
+ }
735
+ __name(walk, "walk");
736
+ var o = [];
737
+ walk(top, o, 0, []);
738
+ return tree ? o.join("") : str.join("\n");
739
+ };
740
+ self.inspect = self.toString;
741
+ self.toJSON = function(indent) {
742
+ return JSON.stringify(top, function(_key, val) {
743
+ if ("function" === typeof val)
744
+ return "[Function]";
745
+ return val;
746
+ }, indent);
747
+ };
748
+ return self;
749
+ }
750
+ __name(Patrun, "Patrun");
751
+ exports.Patrun = Patrun;
752
+ function make(custom) {
753
+ return new Patrun(custom);
754
+ }
755
+ __name(make, "make");
756
+ if ("undefined" !== typeof module) {
757
+ module.exports = make;
758
+ module.exports.Patrun = Patrun;
759
+ module.exports.Gex = gex_1.Gex;
760
+ }
761
+ exports.default = make;
762
+ }
763
+ });
764
+
765
+ export { require_patrun };
766
+ //# sourceMappingURL=out.js.map
767
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9nZXgvZ2V4LnRzIiwiLi4vbm9kZV9tb2R1bGVzL3BhdHJ1bi9saWIvbWF0Y2hlcnMudHMiLCIuLi9ub2RlX21vZHVsZXMvcGF0cnVuL3BhdHJ1bi50cyJdLCJuYW1lcyI6WyJrZXkiLCJhY2MiLCJvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRUEsUUFBTSxTQUFOLE1BQU0sT0FBSztNQUlULFlBQVksU0FBMEI7QUFGdEMsYUFBQSxPQUFlO0FBR2IsYUFBSyxTQUFTLENBQUE7QUFFZCxZQUFJLFFBQVEsU0FBUztBQUNuQixjQUFJLFVBQVUsTUFBTSxRQUFRLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTztBQUV6RCxrQkFBUSxRQUFRLENBQUMsUUFBTztBQUN0QixpQkFBSyxPQUFPLEdBQUcsSUFBSSxLQUFLLEdBQUcsS0FBSyxNQUFNLEdBQUcsQ0FBQztVQUM1QyxDQUFDOztNQUVMO01BRUEsTUFBTSxLQUFRO0FBQ1osZUFBTyxRQUFRLE9BQU8sT0FBTyxNQUFNLEdBQUc7TUFDeEM7TUFFQSxNQUFNLFFBQVc7QUFDZixZQUFJLFNBQVMsS0FBSztBQUNsQixlQUFPLEtBQUssTUFBTSxNQUFNLElBQUksS0FBSztNQUNuQztNQUVBLE1BQU0sS0FBUTtBQUNaLGNBQU0sS0FBSztBQUNYLFlBQUksV0FBVztBQUNmLFlBQUksVUFBVSxPQUFPLEtBQUssS0FBSyxNQUFNO0FBRXJDLGlCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsVUFBVSxDQUFDLFVBQVUsS0FBSztBQUNwRCxxQkFBVyxDQUFDLENBQUMsS0FBSyxPQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHOztBQUUvQyxlQUFPO01BQ1Q7TUFFQSxHQUFHLEtBQVE7QUFDVCxZQUFJLFFBQVEsS0FBSztBQUNmLGlCQUFPOztBQUdULFlBQUksYUFBYSxPQUFPO0FBQ3hCLFlBQ0UsYUFBYSxjQUNiLGFBQWEsY0FDYixjQUFjLGNBQ2QsZUFBZSxRQUNmLGVBQWUsUUFD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QUFHLEdBQUc7O1FBRTNCO0FBakVTO0FBbUVULFlBQUksSUFBUyxDQUFBO0FBQ2IsYUFBSyxLQUFLLEdBQUcsR0FBRyxDQUFBLENBQUU7QUFDbEIsZUFBTyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxLQUFLLElBQUk7TUFDMUM7QUFFQSxXQUFLLFVBQVUsS0FBSztBQUVwQixXQUFLLFNBQVMsU0FBVSxRQUFXO0FBQ2pDLGVBQU8sS0FBSyxVQUNWLEtBQ0EsU0FBVSxNQUFXLEtBQVE7QUFDM0IsY0FBSSxlQUFlLE9BQU87QUFBSyxtQkFBTztBQUN0QyxpQkFBTztRQUNULEdBQ0EsTUFBTTtNQUVWO0FBRUEsYUFBTztJQUNUO0FBdGRTO0FBb2VBLFlBQUEsU0FBQTtBQVpULGFBQVMsS0FBSyxRQUFXO0FBQ3ZCLGFBQU8sSUFBSyxPQUFlLE1BQU07SUFDbkM7QUFGUztBQUlULFFBQUksZ0JBQWdCLE9BQU8sUUFBUTtBQUNqQyxhQUFPLFVBQVU7QUFDakIsYUFBTyxRQUFRLFNBQVM7QUFDeEIsYUFBTyxRQUFRLE1BQU0sTUFBQTs7QUFHdkIsWUFBQSxVQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLyogQ29weXJpZ2h0IChjKSAyMDExLTIwMjAgUmljaGFyZCBSb2RnZXIsIE1JVCBMaWNlbnNlICovXG5cbmNsYXNzIEdleGVyIHtcbiAgZ2V4bWFwOiB7IFtrZXk6IHN0cmluZ106IFJlZ0V4cCB9XG4gIGRlc2M6IHN0cmluZyA9ICcnXG5cbiAgY29uc3RydWN0b3IoZ2V4c3BlYzogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICB0aGlzLmdleG1hcCA9IHt9XG5cbiAgICBpZiAobnVsbCAhPSBnZXhzcGVjKSB7XG4gICAgICBsZXQgZ2V4c3RycyA9IEFycmF5LmlzQXJyYXkoZ2V4c3BlYykgPyBnZXhzcGVjIDogW2dleHNwZWNdXG5cbiAgICAgIGdleHN0cnMuZm9yRWFjaCgoc3RyKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V4bWFwW3N0cl0gPSB0aGlzLnJlKHRoaXMuY2xlYW4oc3RyKSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZG9kZ3kob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gbnVsbCA9PSBvYmogfHwgTnVtYmVyLmlzTmFOKG9iailcbiAgfVxuXG4gIGNsZWFuKGdleGV4cDogYW55KSB7XG4gICAgbGV0IGdleHN0ciA9ICcnICsgZ2V4ZXhwXG4gICAgcmV0dXJuIHRoaXMuZG9kZ3koZ2V4ZXhwKSA/ICcnIDogZ2V4c3RyXG4gIH1cblxuICBtYXRjaChzdHI6IGFueSkge1xuICAgIHN0ciA9ICcnICsgc3RyXG4gICAgbGV0IGhhc21hdGNoID0gZmFsc2VcbiAgICBsZXQgZ2V4c3RycyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V4bWFwKVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnZXhzdHJzLmxlbmd0aCAmJiAhaGFzbWF0Y2g7IGkrKykge1xuICAgICAgaGFzbWF0Y2ggPSAhIXRoaXMuZ2V4bWFwW2dleHN0cnNbaV1dLmV4ZWMoc3RyKVxuICAgIH1cbiAgICByZXR1cm4gaGFzbWF0Y2hcbiAgfVxuXG4gIG9uKG9iajogYW55KSB7XG4gICAgaWYgKG51bGwgPT0gb2JqKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGxldCB0eXBlb2Zfb2JqID0gdHlwZW9mIG9ialxuICAgIGlmIChcbiAgICAgICdzdHJpbmcnID09PSB0eXBlb2Zfb2JqIHx8XG4gICAgICAnbnVtYmVyJyA9PT0gdHlwZW9mX29iaiB8fFxuICAgICAgJ2Jvb2xlYW4nID09PSB0eXBlb2Zfb2JqIHx8XG4gICAgICBvYmogaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICBvYmogaW5zdGFuY2VvZiBSZWdFeHBcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLm1hdGNoKG9iaikgPyBvYmogOiBudWxsXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIGxldCBvdXQgPSBbXVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvZGd5KG9ialtpXSkgJiYgdGhpcy5tYXRjaChvYmpbaV0pKSB7XG4gICAgICAgICAgb3V0LnB1c2gob2JqW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBvdXRvYmo6IGFueSA9IHt9XG4gICAgICBmb3IgKGxldCBwIGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5tYXRjaChwKSkge1xuICAgICAgICAgICAgb3V0b2JqW3BdID0gb2JqW3BdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0b2JqXG4gICAgfVxuICB9XG5cbiAgZXNjKGdleGV4cDogYW55KSB7XG4gICAgbGV0IGdleHN0ciA9IHRoaXMuY2xlYW4oZ2V4ZXhwKVxuICAgIGdleHN0ciA9IGdleHN0ci5yZXBsYWNlKC9cXCovZywgJyoqJylcbiAgICBnZXhzdHIgPSBnZXhzdHIucmVwbGFjZSgvXFw/L2csICcqPycpXG4gICAgcmV0dXJuIGdleHN0clxuICB9XG5cbiAgZXNjcmVnZXhwKHJlc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVzdHIgPyAoJycgKyByZXN0cikucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKSA6ICcnXG4gIH1cblxuICByZShnczogc3RyaW5nKTogUmVnRXhwIHwgYW55IHtcbiAgICBpZiAoJycgPT09IGdzIHx8IGdzKSB7XG4gICAgICBncyA9IHRoaXMuZXNjcmVnZXhwKGdzKVxuXG4gICAgICAvLyB1c2UgW1xcc1xcU10gaW5zdGVhZCBvZiAuIHRvIG1hdGNoIG5ld2xpbmVzXG4gICAgICBncyA9IGdzLnJlcGxhY2UoL1xcXFxcXCovZywgJ1tcXFxcc1xcXFxTXSonKVxuICAgICAgZ3MgPSBncy5yZXBsYWNlKC9cXFxcXFw/L2csICdbXFxcXHNcXFxcU10nKVxuXG4gICAgICAvLyBlc2NhcGVzICoqIGFuZCAqP1xuICAgICAgZ3MgPSBncy5yZXBsYWNlKC9cXFtcXFxcc1xcXFxTXFxdXFwqXFxbXFxcXHNcXFxcU1xcXVxcKi9nLCAnXFxcXConKVxuICAgICAgZ3MgPSBncy5yZXBsYWNlKC9cXFtcXFxcc1xcXFxTXFxdXFwqXFxbXFxcXHNcXFxcU1xcXS9nLCAnXFxcXD8nKVxuXG4gICAgICBncyA9ICdeJyArIGdzICsgJyQnXG5cbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKGdzKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZ2V4c3RycyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V4bWFwKVxuICAgICAgcmV0dXJuIDEgPT0gZ2V4c3Rycy5sZW5ndGggPyB0aGlzLmdleG1hcFtnZXhzdHJzWzBdXSA6IHsgLi4udGhpcy5nZXhtYXAgfVxuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBkID0gdGhpcy5kZXNjXG4gICAgcmV0dXJuICcnICE9IGQgPyBkIDogKHRoaXMuZGVzYyA9ICdHZXhbJyArIE9iamVjdC5rZXlzKHRoaXMuZ2V4bWFwKSArICddJylcbiAgfVxuXG4gIGluc3BlY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIEdleChnZXhzcGVjOiBzdHJpbmcgfCBzdHJpbmdbXSk6IEdleGVyIHtcbiAgcmV0dXJuIG5ldyBHZXhlcihnZXhzcGVjKVxufVxuXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBHZXhcbiAgbW9kdWxlLmV4cG9ydHMuR2V4ID0gR2V4XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdleFxuXG5leHBvcnQgeyBHZXggfVxuIixudWxsLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyMiBSaWNoYXJkIFJvZGdlciwgTUlUIExpY2Vuc2UgKi9cblxuLy8gVE9ETzogbWF0Y2hlcnMgc2hvdWxkIGFjY2VwdCBzdHJpbmdbXSBvZiBrZXkgbmFtZXMgLSBvbmx5IG9wZXJhdGUgb24gdGhlc2Uga2V5c1xuXG4vLyBUT0RPOiBleHBvc2Ugd2FsayBhcyBtZXRob2QgZm9yIGdlbmVyYWwgcHVycG9zZVxuXG5pbXBvcnQgeyBHZXggfSBmcm9tICdnZXgnXG5cbmltcG9ydCB7XG4gIE1hdGNoZXIsXG4gIE1hdGNoVmFsdWUsXG4gIEdleE1hdGNoZXIsXG4gIEludGVydmFsTWF0Y2hlcixcbn0gZnJvbSAnLi9saWIvbWF0Y2hlcnMnXG5cbmZ1bmN0aW9uIFBhdHJ1bihjdXN0b20/OiBhbnkpIHtcbiAgY3VzdG9tID0gY3VzdG9tIHx8IHt9XG5cbiAgdmFyIHNlbGY6IGFueSA9IHt9XG4gIHZhciB0b3A6IGFueSA9IHt9XG5cbiAgbGV0IG1hdGNoZXJzOiBNYXRjaGVyW10gPSBbXVxuXG4gIGlmIChjdXN0b20uZ2V4KSB7XG4gICAgbWF0Y2hlcnMucHVzaChuZXcgR2V4TWF0Y2hlcigpKVxuICB9XG5cbiAgaWYgKGN1c3RvbS5pbnRlcnZhbCkge1xuICAgIG1hdGNoZXJzLnB1c2gobmV3IEludGVydmFsTWF0Y2hlcigpKVxuICB9XG5cbiAgLy8gUHJvdmlkZSBpbnRlcm5hbCBzZWFyY2ggb3JkZXIgc3RydWN0dXJlXG4gIHNlbGYudG9wID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0b3BcbiAgfVxuXG4gIHNlbGYuYWRkID0gZnVuY3Rpb24gKHBhdDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBwYXQgPSB7IC4uLnBhdCB9XG5cbiAgICB2YXIgY3VzdG9taXplciA9XG4gICAgICAnZnVuY3Rpb24nID09PSB0eXBlb2YgY3VzdG9tID8gY3VzdG9tLmNhbGwoc2VsZiwgcGF0LCBkYXRhKSA6IG51bGxcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMocGF0KVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBudWxsICE9IHBhdFtrZXldKVxuICAgICAgLnNvcnQoKVxuXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHBhdFtrZXldID0gU3RyaW5nKHBhdFtrZXldKVxuICAgIH0pXG5cbiAgICB2YXIga2V5bWFwOiBhbnkgPSB0b3BcbiAgICB2YXIgdmFsbWFwOiBhbnlcblxuICAgIC8vIFBhcnRpYWwgbWF0Y2hlcyByZXR1cm4gbmV4dCB3aWRlciBtYXRjaCAtIHNlZSBwYXJ0aWFsLW1hdGNoIHRlc3QuXG4gICAgLy8gVHJhdmVyc2UgdGhlIGtleSBwYXRoIChrZXlzIGFyZSBvcmRlcmVkKSwgaW5zZXJ0IHByZXNlcnZlcyBvcmRlci5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdMJywgaSwga2V5cy5sZW5ndGgpXG5cbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldXG4gICAgICB2YXIgZml4ID0gcGF0W2tleV1cblxuICAgICAgbGV0IG12OiBNYXRjaFZhbHVlIHwgdW5kZWZpbmVkID0gbWF0Y2hlcnMucmVkdWNlKFxuICAgICAgICAobSwgdCkgPT4gbSB8fCB0Lm1ha2Uoa2V5LCBmaXgpLFxuICAgICAgICB1bmRlZmluZWRcbiAgICAgIClcblxuICAgICAgLy8gaWYgKG12KSBtdi52YWwkID0gZml4XG5cbiAgICAgIHZhbG1hcCA9IGtleW1hcC52XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdTMCcsa2V5LGZpeCxrZXltYXAsdmFsbWFwKVxuXG4gICAgICAvLyBBbiBleGlzdGluZyBrZXlcbiAgICAgIGlmICh2YWxtYXAgJiYga2V5ID09IGtleW1hcC5rKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTMS1hJylcbiAgICAgICAgLy8gYWRkX212KGtleW1hcCwga2V5LCBtdilcblxuICAgICAgICBpZiAobXYpIHtcbiAgICAgICAgICB2YXIgZyA9IChrZXltYXAuZyA9IGtleW1hcC5nIHx8IHt9KVxuICAgICAgICAgIHZhciBnYSA9IChnW2tleV0gPSBnW2tleV0gfHwgW10pXG4gICAgICAgICAgbXYgPSAoZ2EuZmluZCgoZ212OiBNYXRjaFZhbHVlKSA9PiBnbXYuc2FtZShtdikpIHx8XG4gICAgICAgICAgICAoZ2EucHVzaChtdiksIG12KSkgYXMgTWF0Y2hWYWx1ZVxuICAgICAgICAgIGtleW1hcCA9IG12LmtleW1hcCB8fCAobXYua2V5bWFwID0ge30pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5bWFwID0gdmFsbWFwW2ZpeF0gfHwgKHZhbG1hcFtmaXhdID0ge30pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRW5kIG9mIGtleSBwYXRoIHJlYWNoZWQsIHNvIHRoaXMgaXMgYSBuZXcga2V5LCBvcmRlcmVkIGxhc3RcbiAgICAgIGVsc2UgaWYgKCFrZXltYXAuaykge1xuICAgICAgICBrZXltYXAuayA9IGtleVxuICAgICAgICBrZXltYXAudiA9IHt9XG5cbiAgICAgICAgaWYgKG12KSB7XG4gICAgICAgICAgdmFyIGcgPSAoa2V5bWFwLmcgPSBrZXltYXAuZyB8fCB7fSlcbiAgICAgICAgICB2YXIgZ2EgPSAoZ1trZXldID0gZ1trZXldIHx8IFtdKVxuICAgICAgICAgIG12ID0gKGdhLmZpbmQoKGdtdjogTWF0Y2hWYWx1ZSkgPT4gZ212LnNhbWUobXYpKSB8fFxuICAgICAgICAgICAgKGdhLnB1c2gobXYpLCBtdikpIGFzIE1hdGNoVmFsdWVcbiAgICAgICAgICBrZXltYXAgPSBtdi5rZXltYXAgfHwgKG12LmtleW1hcCA9IHt9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleW1hcCA9IGtleW1hcC52W2ZpeF0gPSB7fVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluc2VydCBrZXkgb3JkZXJzIGJlZm9yZSBuZXh0IGV4aXN0aW5nIGtleSBpbiBwYXRoLCBzbyBpbnNlcnRcbiAgICAgIGVsc2UgaWYgKGtleSA8IGtleW1hcC5rKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTMS1jJywga2V5LCBrZXltYXAuaylcbiAgICAgICAgdmFyIHMgPSBrZXltYXAuc1xuICAgICAgICB2YXIgZyA9IGtleW1hcC5nXG5cbiAgICAgICAga2V5bWFwLnMgPSB7XG4gICAgICAgICAgazoga2V5bWFwLmssXG4gICAgICAgICAgLy8gc2s6IGtleW1hcC5zayxcbiAgICAgICAgICB2OiBrZXltYXAudixcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzKSB7XG4gICAgICAgICAga2V5bWFwLnMucyA9IHNcbiAgICAgICAgfVxuICAgICAgICBpZiAoZykge1xuICAgICAgICAgIGtleW1hcC5zLmcgPSBnXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5bWFwLmcpIHtcbiAgICAgICAgICBrZXltYXAuZyA9IHt9XG4gICAgICAgIH1cblxuICAgICAgICBrZXltYXAuayA9IGtleVxuICAgICAgICBrZXltYXAudiA9IHt9XG5cbiAgICAgICAgaWYgKG12KSB7XG4gICAgICAgICAgdmFyIGcgPSAoa2V5bWFwLmcgPSBrZXltYXAuZyB8fCB7fSlcbiAgICAgICAgICB2YXIgZ2EgPSAoZ1trZXldID0gZ1trZXldIHx8IFtdKVxuICAgICAgICAgIG12ID0gKGdhLmZpbmQoKGdtdjogTWF0Y2hWYWx1ZSkgPT4gZ212LnNhbWUobXYpKSB8fFxuICAgICAgICAgICAgKGdhLnB1c2gobXYpLCBtdikpIGFzIE1hdGNoVmFsdWVcbiAgICAgICAgICBrZXltYXAgPSBtdi5rZXltYXAgfHwgKG12LmtleW1hcCA9IHt9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleW1hcCA9IGtleW1hcC52W2ZpeF0gPSB7fVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvbGxvdyBzdGFyIHBhdGhcbiAgICAgIGVsc2Uge1xuICAgICAgICBrZXltYXAgPSBrZXltYXAucyB8fCAoa2V5bWFwLnMgPSB7fSlcblxuICAgICAgICAvLyBOT1RFOiBjdXJyZW50IGtleSBpcyBzdGlsbCBub3QgaW5zZXJ0ZWRcbiAgICAgICAgaS0tXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZvaWQgMCAhPT0gZGF0YSAmJiBrZXltYXApIHtcbiAgICAgIGtleW1hcC5kID0gZGF0YVxuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAga2V5bWFwLmYgPVxuICAgICAgICAgICdmdW5jdGlvbicgPT09IHR5cGVvZiBjdXN0b21pemVyID8gY3VzdG9taXplciA6IGN1c3RvbWl6ZXIuZmluZFxuICAgICAgICBrZXltYXAuciA9XG4gICAgICAgICAgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGN1c3RvbWl6ZXIucmVtb3ZlID8gY3VzdG9taXplci5yZW1vdmUgOiB2b2lkIDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZlxuICB9XG5cbiAgc2VsZi5maW5kZXhhY3QgPSBmdW5jdGlvbiAocGF0OiBhbnkpIHtcbiAgICByZXR1cm4gc2VsZi5maW5kKHBhdCwgdHJ1ZSlcbiAgfVxuXG4gIHNlbGYuZmluZCA9IGZ1bmN0aW9uIChwYXQ6IGFueSwgZXhhY3Q6IGFueSwgY29sbGVjdDogYW55KSB7XG4gICAgaWYgKG51bGwgPT0gcGF0KSByZXR1cm4gbnVsbFxuXG4gICAgdmFyIGtleW1hcDogYW55ID0gdG9wXG4gICAgdmFyIGRhdGE6IGFueSA9IHZvaWQgMCA9PT0gdG9wLmQgPyBudWxsIDogdG9wLmRcbiAgICB2YXIgZmluYWxmaW5kID0gdG9wLmZcbiAgICB2YXIga2V5ID0gbnVsbFxuICAgIHZhciBzdGFycyA9IFtdXG4gICAgdmFyIGZvdW5ka2V5czogYW55ID0ge31cbiAgICB2YXIgcGF0bGVuID0gT2JqZWN0LmtleXMocGF0KS5sZW5ndGhcbiAgICB2YXIgY29sbGVjdGlvbiA9IFtdXG5cbiAgICBpZiAodm9pZCAwICE9PSB0b3AuZCkge1xuICAgICAgY29sbGVjdGlvbi5wdXNoKHRvcC5kKVxuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIGtleSA9IGtleW1hcC5rXG5cbiAgICAgIGlmIChrZXltYXAudikge1xuICAgICAgICB2YXIgdmFsID0gcGF0W2tleV1cblxuICAgICAgICAvLyBNYXRjaGluZyBvcGVyYXRpb24gaXMgZWl0aGVyIHN0cmluZyBlcXVhbGl0eSAoYnkgcHJvcCBsb29rdXApXG4gICAgICAgIC8vIG9yIGdleCBtYXRjaC5cblxuICAgICAgICB2YXIgbmV4dGtleW1hcCA9IGtleW1hcC52W3ZhbF1cblxuICAgICAgICBpZiAoIW5leHRrZXltYXAgJiYga2V5bWFwLmcgJiYga2V5bWFwLmdba2V5XSkge1xuICAgICAgICAgIHZhciBnYSA9IGtleW1hcC5nW2tleV1cbiAgICAgICAgICBmb3IgKHZhciBnaSA9IDA7IGdpIDwgZ2EubGVuZ3RoOyBnaSsrKSB7XG4gICAgICAgICAgICBpZiAoZ2FbZ2ldLm1hdGNoKHZhbCkpIHtcbiAgICAgICAgICAgICAgbmV4dGtleW1hcCA9IGdhW2dpXS5rZXltYXBcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dGtleW1hcCkge1xuICAgICAgICAgIGZvdW5ka2V5c1trZXldID0gdHJ1ZVxuXG4gICAgICAgICAgaWYgKGtleW1hcC5zKSB7XG4gICAgICAgICAgICBzdGFycy5wdXNoKGtleW1hcC5zKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEgPSB2b2lkIDAgPT09IG5leHRrZXltYXAuZCA/IChleGFjdCA/IG51bGwgOiBkYXRhKSA6IG5leHRrZXltYXAuZFxuXG4gICAgICAgICAgaWYgKGNvbGxlY3QgJiYgdm9pZCAwICE9PSBuZXh0a2V5bWFwLmQpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChuZXh0a2V5bWFwLmQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmluYWxmaW5kID0gbmV4dGtleW1hcC5mXG4gICAgICAgICAga2V5bWFwID0gbmV4dGtleW1hcFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gbWF0Y2ggZm91bmQgZm9yIHRoaXMgdmFsdWUsIGZvbGxvdyBzdGFyIHRyYWlsXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGtleW1hcCA9IGtleW1hcC5zXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleW1hcCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBudWxsID09IGtleW1hcCAmJlxuICAgICAgICAwIDwgc3RhcnMubGVuZ3RoICYmXG4gICAgICAgIChudWxsID09IGRhdGEgfHwgKGNvbGxlY3QgJiYgIWV4YWN0KSlcbiAgICAgICkge1xuICAgICAgICBrZXltYXAgPSBzdGFycy5wb3AoKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKGtleW1hcClcblxuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZvdW5ka2V5cykubGVuZ3RoICE9PSBwYXRsZW4pIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUncyByb290IGRhdGEsIHJldHVybiBhcyBhIGNhdGNoIGFsbFxuICAgICAgaWYgKG51bGwgPT0gZGF0YSAmJiB2b2lkIDAgIT09IHRvcC5kKSB7XG4gICAgICAgIGRhdGEgPSB0b3AuZFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaW5hbGZpbmQpIHtcbiAgICAgIGRhdGEgPSBmaW5hbGZpbmQuY2FsbChzZWxmLCBwYXQsIGRhdGEpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbGxlY3QgPyBjb2xsZWN0aW9uIDogZGF0YVxuICB9XG5cbiAgc2VsZi5yZW1vdmUgPSBmdW5jdGlvbiAocGF0OiBhbnkpIHtcbiAgICB2YXIga2V5bWFwID0gdG9wXG4gICAgdmFyIGRhdGEgPSBudWxsXG4gICAgdmFyIGtleVxuICAgIHZhciBwYXRoID0gW11cblxuICAgIGRvIHtcbiAgICAgIGtleSA9IGtleW1hcC5rXG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdrZXltYXAgdiBnJywga2V5bWFwLnYsIGtleW1hcC5nKVxuICAgICAgaWYgKGtleW1hcC52IHx8IGtleW1hcC5nKSB7XG4gICAgICAgIGlmIChrZXltYXAudikge1xuICAgICAgICAgIHZhciBuZXh0a2V5bWFwID0ga2V5bWFwLnZbcGF0W2tleV1dXG5cbiAgICAgICAgICBpZiAobmV4dGtleW1hcCkge1xuICAgICAgICAgICAgcGF0aC5wdXNoKHsga206IGtleW1hcCwgdjogcGF0W2tleV0gfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobnVsbCA9PSBuZXh0a2V5bWFwICYmIGtleW1hcC5nKSB7XG4gICAgICAgICAgbGV0IG12czogTWF0Y2hWYWx1ZVtdID0ga2V5bWFwLmdba2V5XSB8fCBbXVxuICAgICAgICAgIGZvciAobGV0IG12aSA9IDA7IG12aSA8IG12cy5sZW5ndGg7IG12aSsrKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgcGFyc2UhXG4gICAgICAgICAgICBpZiAobXZzW212aV0uZml4ID09PSBwYXRba2V5XSkge1xuICAgICAgICAgICAgICBwYXRoLnB1c2goeyBrbToga2V5bWFwLCB2OiBwYXRba2V5XSwgbXY6IG12c1ttdmldIH0pXG4gICAgICAgICAgICAgIG5leHRrZXltYXAgPSBtdnNbbXZpXS5rZXltYXBcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dGtleW1hcCkge1xuICAgICAgICAgIGRhdGEgPSBuZXh0a2V5bWFwLmRcbiAgICAgICAgICBrZXltYXAgPSBuZXh0a2V5bWFwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5bWFwID0ga2V5bWFwLnNcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5bWFwID0gbnVsbFxuICAgICAgfVxuICAgIH0gd2hpbGUgKGtleW1hcClcblxuICAgIGlmICh2b2lkIDAgIT09IGRhdGEpIHtcbiAgICAgIHZhciBwYXJ0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAocGFydCAmJiBwYXJ0LmttICYmIHBhcnQua20udikge1xuICAgICAgICB2YXIgcG9pbnQgPSBwYXJ0LmttLnZbcGFydC52XSB8fCAocGFydC5tdiAmJiBwYXJ0Lm12LmtleW1hcClcbiAgICAgICAgaWYgKHBvaW50ICYmICghcG9pbnQuciB8fCBwb2ludC5yKHBhdCwgcG9pbnQuZCkpKSB7XG4gICAgICAgICAgZGVsZXRlIHBvaW50LmRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHZhbHVlcyBjYW4gYmUgdmVyYmF0aW0sIGdsb2IsIG9yIGFycmF5IG9mIGdsb2JzXG4gIHNlbGYubGlzdCA9IGZ1bmN0aW9uIChwYXQ6IGFueSwgZXhhY3Q6IGJvb2xlYW4pIHtcbiAgICBwYXQgPSBwYXQgfHwge31cblxuICAgIGZ1bmN0aW9uIGRlc2NlbmQoa2V5bWFwOiBhbnksIG1hdGNoOiBhbnksIG1pc3Npbmc6IGFueSwgYWNjOiBhbnkpIHtcbiAgICAgIGlmIChrZXltYXAudikge1xuICAgICAgICB2YXIga2V5ID0ga2V5bWFwLmtcbiAgICAgICAgdmFyIGdleHZhbCA9IEdleChcbiAgICAgICAgICBwYXQgPyAobnVsbCA9PSBwYXRba2V5XSA/IChleGFjdCA/IG51bGwgOiAnKicpIDogcGF0W2tleV0pIDogJyonXG4gICAgICAgIClcbiAgICAgICAgdmFyIGl0ZXJtYXRjaCA9IHsgLi4ubWF0Y2ggfVxuICAgICAgICB2YXIgaXRlcm1pc3NpbmcgPSB7IC4uLm1pc3NpbmcgfVxuICAgICAgICB2YXIgbmV4dGtleW1hcFxuXG4gICAgICAgIGZvciAodmFyIHZhbCBpbiBrZXltYXAudikge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHZhbCA9PT0gcGF0W2tleV0gfHxcbiAgICAgICAgICAgICghZXhhY3QgJiYgbnVsbCA9PSBwYXRba2V5XSkgfHxcbiAgICAgICAgICAgIGdleHZhbC5vbih2YWwpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgdmFsaXRlcm1hdGNoID0geyAuLi5pdGVybWF0Y2ggfVxuICAgICAgICAgICAgdmFsaXRlcm1hdGNoW2tleV0gPSB2YWxcblxuICAgICAgICAgICAgdmFyIHZhbGl0ZXJtaXNzaW5nID0geyAuLi5pdGVybWlzc2luZyB9XG4gICAgICAgICAgICBkZWxldGUgdmFsaXRlcm1pc3Npbmdba2V5XVxuXG4gICAgICAgICAgICBuZXh0a2V5bWFwID0ga2V5bWFwLnZbdmFsXVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIDAgPT09IE9iamVjdC5rZXlzKHZhbGl0ZXJtaXNzaW5nKS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgbmV4dGtleW1hcCAmJlxuICAgICAgICAgICAgICBuZXh0a2V5bWFwLmRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICAgICAgbWF0Y2g6IHZhbGl0ZXJtYXRjaCxcbiAgICAgICAgICAgICAgICBkYXRhOiBuZXh0a2V5bWFwLmQsXG4gICAgICAgICAgICAgICAgZmluZDogbmV4dGtleW1hcC5mLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV4dGtleW1hcCAmJiBudWxsICE9IG5leHRrZXltYXAudikge1xuICAgICAgICAgICAgICBkZXNjZW5kKFxuICAgICAgICAgICAgICAgIG5leHRrZXltYXAsXG4gICAgICAgICAgICAgICAgeyAuLi52YWxpdGVybWF0Y2ggfSxcbiAgICAgICAgICAgICAgICB7IC4uLnZhbGl0ZXJtaXNzaW5nIH0sXG4gICAgICAgICAgICAgICAgYWNjXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0a2V5bWFwID0ga2V5bWFwLnNcbiAgICAgICAgaWYgKG5leHRrZXltYXApIHtcbiAgICAgICAgICBkZXNjZW5kKG5leHRrZXltYXAsIHsgLi4uaXRlcm1hdGNoIH0sIHsgLi4uaXRlcm1pc3NpbmcgfSwgYWNjKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFjYyA9IFtdXG5cbiAgICBpZiAodG9wLmQpIHtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgbWF0Y2g6IHt9LFxuICAgICAgICBkYXRhOiB0b3AuZCxcbiAgICAgICAgZmluZDogdG9wLmYsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGRlc2NlbmQodG9wLCB7fSwgeyAuLi5wYXQgfSwgYWNjKVxuICAgIHJldHVybiBhY2NcbiAgfVxuXG4gIHNlbGYudG9TdHJpbmcgPSBmdW5jdGlvbiAoZmlyc3Q6IGFueSwgc2Vjb25kOiBhbnkpIHtcbiAgICB2YXIgdHJlZSA9IHRydWUgPT09IGZpcnN0ID8gdHJ1ZSA6ICEhc2Vjb25kXG5cbiAgICB2YXIgZHN0ciA9XG4gICAgICAnZnVuY3Rpb24nID09PSB0eXBlb2YgZmlyc3RcbiAgICAgICAgPyBmaXJzdFxuICAgICAgICA6IGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgIHJldHVybiAnZnVuY3Rpb24nID09PSB0eXBlb2YgZCA/ICc8JyArIGQubmFtZSArICc+JyA6ICc8JyArIGQgKyAnPidcbiAgICAgICAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmRlbnQobzogYW55LCBkOiBhbnkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZDsgaSsrKSB7XG4gICAgICAgIG8ucHVzaCgnICcpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0cjogYW55W10gPSBbXVxuXG4gICAgZnVuY3Rpb24gd2FsayhuOiBhbnksIG86IGFueSwgZDogYW55LCB2czogYW55KSB7XG4gICAgICB2YXIgdnNjXG5cbiAgICAgIGlmICh2b2lkIDAgIT09IG4uZCkge1xuICAgICAgICBvLnB1c2goJyAnICsgZHN0cihuLmQpKVxuXG4gICAgICAgIHN0ci5wdXNoKHZzLmpvaW4oJywgJykgKyAnIC0+ICcgKyBkc3RyKG4uZCkpXG4gICAgICB9XG5cbiAgICAgIGlmIChuLmspIHtcbiAgICAgICAgby5wdXNoKCdcXG4nKVxuICAgICAgICBpbmRlbnQobywgZClcbiAgICAgICAgby5wdXNoKG4uayArICc6JylcbiAgICAgIH1cblxuICAgICAgaWYgKG4udiB8fCBuLnMgfHwgbi5nKSB7XG4gICAgICAgIGQrK1xuICAgICAgfVxuXG4gICAgICBpZiAobi52KSB7XG4gICAgICAgIC8vIGQrK1xuICAgICAgICB2YXIgcGEgPSBPYmplY3Qua2V5cyhuLnYpLnNvcnQoKVxuXG4gICAgICAgIGZvciAodmFyIHBpID0gMDsgcGkgPCBwYS5sZW5ndGg7IHBpKyspIHtcbiAgICAgICAgICB2YXIgcCA9IHBhW3BpXVxuICAgICAgICAgIG8ucHVzaCgnXFxuJylcbiAgICAgICAgICBpbmRlbnQobywgZClcbiAgICAgICAgICBvLnB1c2gocCArICcgLT4nKVxuXG4gICAgICAgICAgdnNjID0gdnMuc2xpY2UoKVxuICAgICAgICAgIHZzYy5wdXNoKG4uayArICc9JyArIHApXG5cbiAgICAgICAgICB3YWxrKG4udltwXSwgbywgZCArIDEsIHZzYylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobi5nKSB7XG4gICAgICAgIHZhciBwYSA9IE9iamVjdC5rZXlzKG4uZykuc29ydCgpXG5cbiAgICAgICAgZm9yICh2YXIgcGkgPSAwOyBwaSA8IHBhLmxlbmd0aDsgcGkrKykge1xuICAgICAgICAgIHZhciBtdnMgPSBuLmdbcGFbcGldXVxuXG4gICAgICAgICAgZm9yICh2YXIgbXZpID0gMDsgbXZpIDwgbXZzLmxlbmd0aDsgbXZpKyspIHtcbiAgICAgICAgICAgIHZhciBtdiA9IG12c1ttdmldXG5cbiAgICAgICAgICAgIG8ucHVzaCgnXFxuJylcbiAgICAgICAgICAgIGluZGVudChvLCBkKVxuICAgICAgICAgICAgby5wdXNoKG12LmZpeCArICcgfj4nKVxuXG4gICAgICAgICAgICB2c2MgPSB2cy5zbGljZSgpXG4gICAgICAgICAgICB2c2MucHVzaChuLmsgKyAnficgKyBtdi5maXgpXG5cbiAgICAgICAgICAgIHdhbGsobXYua2V5bWFwLCBvLCBkICsgMSwgdnNjKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobi5zKSB7XG4gICAgICAgIG8ucHVzaCgnXFxuJylcbiAgICAgICAgaW5kZW50KG8sIGQpXG4gICAgICAgIG8ucHVzaCgnfCcpXG5cbiAgICAgICAgdnNjID0gdnMuc2xpY2UoKVxuICAgICAgICB3YWxrKG4ucywgbywgZCArIDEsIHZzYylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbzogYW55ID0gW11cbiAgICB3YWxrKHRvcCwgbywgMCwgW10pXG4gICAgcmV0dXJuIHRyZWUgPyBvLmpvaW4oJycpIDogc3RyLmpvaW4oJ1xcbicpXG4gIH1cblxuICBzZWxmLmluc3BlY3QgPSBzZWxmLnRvU3RyaW5nXG5cbiAgc2VsZi50b0pTT04gPSBmdW5jdGlvbiAoaW5kZW50OiBhbnkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB0b3AsXG4gICAgICBmdW5jdGlvbiAoX2tleTogYW55LCB2YWw6IGFueSkge1xuICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHZhbCkgcmV0dXJuICdbRnVuY3Rpb25dJ1xuICAgICAgICByZXR1cm4gdmFsXG4gICAgICB9LFxuICAgICAgaW5kZW50XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHNlbGZcbn1cblxuZnVuY3Rpb24gbWFrZShjdXN0b206IGFueSkge1xuICByZXR1cm4gbmV3IChQYXRydW4gYXMgYW55KShjdXN0b20pXG59XG5cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IG1ha2VcbiAgbW9kdWxlLmV4cG9ydHMuUGF0cnVuID0gUGF0cnVuXG4gIG1vZHVsZS5leHBvcnRzLkdleCA9IEdleFxufVxuXG5leHBvcnQgZGVmYXVsdCBtYWtlXG5cbmV4cG9ydCB7IFBhdHJ1biwgR2V4IH1cbiJdfQ==