deepbox 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +344 -0
  3. package/dist/CSRMatrix-CwGwQRea.d.cts +219 -0
  4. package/dist/CSRMatrix-KzNt6QpS.d.ts +219 -0
  5. package/dist/Tensor-BQLk1ltW.d.cts +147 -0
  6. package/dist/Tensor-g8mUClel.d.ts +147 -0
  7. package/dist/chunk-4S73VUBD.js +677 -0
  8. package/dist/chunk-4S73VUBD.js.map +1 -0
  9. package/dist/chunk-5R4S63PF.js +2925 -0
  10. package/dist/chunk-5R4S63PF.js.map +1 -0
  11. package/dist/chunk-6AE5FKKQ.cjs +9264 -0
  12. package/dist/chunk-6AE5FKKQ.cjs.map +1 -0
  13. package/dist/chunk-AD436M45.js +3854 -0
  14. package/dist/chunk-AD436M45.js.map +1 -0
  15. package/dist/chunk-ALS7ETWZ.cjs +4263 -0
  16. package/dist/chunk-ALS7ETWZ.cjs.map +1 -0
  17. package/dist/chunk-AU7XHGKJ.js +2092 -0
  18. package/dist/chunk-AU7XHGKJ.js.map +1 -0
  19. package/dist/chunk-B5TNKUEY.js +1481 -0
  20. package/dist/chunk-B5TNKUEY.js.map +1 -0
  21. package/dist/chunk-BCR7G3A6.js +9136 -0
  22. package/dist/chunk-BCR7G3A6.js.map +1 -0
  23. package/dist/chunk-C4PKXY74.cjs +1917 -0
  24. package/dist/chunk-C4PKXY74.cjs.map +1 -0
  25. package/dist/chunk-DWZY6PIP.cjs +6400 -0
  26. package/dist/chunk-DWZY6PIP.cjs.map +1 -0
  27. package/dist/chunk-E3EU5FZO.cjs +2113 -0
  28. package/dist/chunk-E3EU5FZO.cjs.map +1 -0
  29. package/dist/chunk-F3JWBINJ.js +1054 -0
  30. package/dist/chunk-F3JWBINJ.js.map +1 -0
  31. package/dist/chunk-FJYLIGJX.js +1940 -0
  32. package/dist/chunk-FJYLIGJX.js.map +1 -0
  33. package/dist/chunk-JSCDE774.cjs +729 -0
  34. package/dist/chunk-JSCDE774.cjs.map +1 -0
  35. package/dist/chunk-LWECRCW2.cjs +2412 -0
  36. package/dist/chunk-LWECRCW2.cjs.map +1 -0
  37. package/dist/chunk-MLBMYKCG.js +6379 -0
  38. package/dist/chunk-MLBMYKCG.js.map +1 -0
  39. package/dist/chunk-OX6QXFMV.cjs +3874 -0
  40. package/dist/chunk-OX6QXFMV.cjs.map +1 -0
  41. package/dist/chunk-PHV2DKRS.cjs +1072 -0
  42. package/dist/chunk-PHV2DKRS.cjs.map +1 -0
  43. package/dist/chunk-PL7TAYKI.js +4056 -0
  44. package/dist/chunk-PL7TAYKI.js.map +1 -0
  45. package/dist/chunk-PR647I7R.js +1898 -0
  46. package/dist/chunk-PR647I7R.js.map +1 -0
  47. package/dist/chunk-QERHVCHC.cjs +2960 -0
  48. package/dist/chunk-QERHVCHC.cjs.map +1 -0
  49. package/dist/chunk-XEG44RF6.cjs +1514 -0
  50. package/dist/chunk-XEG44RF6.cjs.map +1 -0
  51. package/dist/chunk-XMWVME2W.js +2377 -0
  52. package/dist/chunk-XMWVME2W.js.map +1 -0
  53. package/dist/chunk-ZB75FESB.cjs +1979 -0
  54. package/dist/chunk-ZB75FESB.cjs.map +1 -0
  55. package/dist/chunk-ZLW62TJG.cjs +4061 -0
  56. package/dist/chunk-ZLW62TJG.cjs.map +1 -0
  57. package/dist/chunk-ZXKBDFP3.js +4235 -0
  58. package/dist/chunk-ZXKBDFP3.js.map +1 -0
  59. package/dist/core/index.cjs +204 -0
  60. package/dist/core/index.cjs.map +1 -0
  61. package/dist/core/index.d.cts +2 -0
  62. package/dist/core/index.d.ts +2 -0
  63. package/dist/core/index.js +3 -0
  64. package/dist/core/index.js.map +1 -0
  65. package/dist/dataframe/index.cjs +22 -0
  66. package/dist/dataframe/index.cjs.map +1 -0
  67. package/dist/dataframe/index.d.cts +3 -0
  68. package/dist/dataframe/index.d.ts +3 -0
  69. package/dist/dataframe/index.js +5 -0
  70. package/dist/dataframe/index.js.map +1 -0
  71. package/dist/datasets/index.cjs +134 -0
  72. package/dist/datasets/index.cjs.map +1 -0
  73. package/dist/datasets/index.d.cts +3 -0
  74. package/dist/datasets/index.d.ts +3 -0
  75. package/dist/datasets/index.js +5 -0
  76. package/dist/datasets/index.js.map +1 -0
  77. package/dist/index-74AB8Cyh.d.cts +1126 -0
  78. package/dist/index-9oQx1HgV.d.cts +1180 -0
  79. package/dist/index-BJY2SI4i.d.ts +483 -0
  80. package/dist/index-BWGhrDlr.d.ts +733 -0
  81. package/dist/index-B_DK4FKY.d.cts +242 -0
  82. package/dist/index-BbA2Gxfl.d.ts +456 -0
  83. package/dist/index-BgHYAoSS.d.cts +837 -0
  84. package/dist/index-BndMbqsM.d.ts +1439 -0
  85. package/dist/index-C1mfVYoo.d.ts +2517 -0
  86. package/dist/index-CCvlwAmL.d.cts +809 -0
  87. package/dist/index-CDw5CnOU.d.ts +785 -0
  88. package/dist/index-Cn3SdB0O.d.ts +1126 -0
  89. package/dist/index-CrqLlS-a.d.ts +776 -0
  90. package/dist/index-D61yaSMY.d.cts +483 -0
  91. package/dist/index-D9Loo1_A.d.cts +2517 -0
  92. package/dist/index-DIT_OO9C.d.cts +785 -0
  93. package/dist/index-DIp_RrRt.d.ts +242 -0
  94. package/dist/index-DbultU6X.d.cts +1427 -0
  95. package/dist/index-DmEg_LCm.d.cts +776 -0
  96. package/dist/index-DoPWVxPo.d.cts +1439 -0
  97. package/dist/index-DuCxd-8d.d.ts +837 -0
  98. package/dist/index-Dx42TZaY.d.ts +809 -0
  99. package/dist/index-DyZ4QQf5.d.cts +456 -0
  100. package/dist/index-GFAVyOWO.d.ts +1427 -0
  101. package/dist/index-WHQLn0e8.d.cts +733 -0
  102. package/dist/index-ZtI1Iy4L.d.ts +1180 -0
  103. package/dist/index-eJgeni9c.d.cts +1911 -0
  104. package/dist/index-tk4lSYod.d.ts +1911 -0
  105. package/dist/index.cjs +72 -0
  106. package/dist/index.cjs.map +1 -0
  107. package/dist/index.d.cts +17 -0
  108. package/dist/index.d.ts +17 -0
  109. package/dist/index.js +15 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/linalg/index.cjs +86 -0
  112. package/dist/linalg/index.cjs.map +1 -0
  113. package/dist/linalg/index.d.cts +3 -0
  114. package/dist/linalg/index.d.ts +3 -0
  115. package/dist/linalg/index.js +5 -0
  116. package/dist/linalg/index.js.map +1 -0
  117. package/dist/metrics/index.cjs +158 -0
  118. package/dist/metrics/index.cjs.map +1 -0
  119. package/dist/metrics/index.d.cts +3 -0
  120. package/dist/metrics/index.d.ts +3 -0
  121. package/dist/metrics/index.js +5 -0
  122. package/dist/metrics/index.js.map +1 -0
  123. package/dist/ml/index.cjs +87 -0
  124. package/dist/ml/index.cjs.map +1 -0
  125. package/dist/ml/index.d.cts +3 -0
  126. package/dist/ml/index.d.ts +3 -0
  127. package/dist/ml/index.js +6 -0
  128. package/dist/ml/index.js.map +1 -0
  129. package/dist/ndarray/index.cjs +501 -0
  130. package/dist/ndarray/index.cjs.map +1 -0
  131. package/dist/ndarray/index.d.cts +5 -0
  132. package/dist/ndarray/index.d.ts +5 -0
  133. package/dist/ndarray/index.js +4 -0
  134. package/dist/ndarray/index.js.map +1 -0
  135. package/dist/nn/index.cjs +142 -0
  136. package/dist/nn/index.cjs.map +1 -0
  137. package/dist/nn/index.d.cts +6 -0
  138. package/dist/nn/index.d.ts +6 -0
  139. package/dist/nn/index.js +5 -0
  140. package/dist/nn/index.js.map +1 -0
  141. package/dist/optim/index.cjs +77 -0
  142. package/dist/optim/index.cjs.map +1 -0
  143. package/dist/optim/index.d.cts +4 -0
  144. package/dist/optim/index.d.ts +4 -0
  145. package/dist/optim/index.js +4 -0
  146. package/dist/optim/index.js.map +1 -0
  147. package/dist/plot/index.cjs +114 -0
  148. package/dist/plot/index.cjs.map +1 -0
  149. package/dist/plot/index.d.cts +6 -0
  150. package/dist/plot/index.d.ts +6 -0
  151. package/dist/plot/index.js +5 -0
  152. package/dist/plot/index.js.map +1 -0
  153. package/dist/preprocess/index.cjs +82 -0
  154. package/dist/preprocess/index.cjs.map +1 -0
  155. package/dist/preprocess/index.d.cts +4 -0
  156. package/dist/preprocess/index.d.ts +4 -0
  157. package/dist/preprocess/index.js +5 -0
  158. package/dist/preprocess/index.js.map +1 -0
  159. package/dist/random/index.cjs +74 -0
  160. package/dist/random/index.cjs.map +1 -0
  161. package/dist/random/index.d.cts +3 -0
  162. package/dist/random/index.d.ts +3 -0
  163. package/dist/random/index.js +5 -0
  164. package/dist/random/index.js.map +1 -0
  165. package/dist/stats/index.cjs +142 -0
  166. package/dist/stats/index.cjs.map +1 -0
  167. package/dist/stats/index.d.cts +3 -0
  168. package/dist/stats/index.d.ts +3 -0
  169. package/dist/stats/index.js +5 -0
  170. package/dist/stats/index.js.map +1 -0
  171. package/dist/tensor-B96jjJLQ.d.cts +205 -0
  172. package/dist/tensor-B96jjJLQ.d.ts +205 -0
  173. package/package.json +226 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/preprocess/index.ts","../src/preprocess/_internal.ts","../src/preprocess/encoders.ts","../src/preprocess/scalers.ts","../src/preprocess/split.ts"],"names":["value","out","row","nClasses","classes","result","fittedClasses","getNumericData","q","base"],"mappings":";;;;AAAA,IAAA,kBAAA,GAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACiBO,SAAS,mBAAA,CAAoB,GAAW,IAAA,EAAoB;AACjE,EAAA,IAAI,CAAA,CAAE,UAAU,QAAA,EAAU;AACxB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,EAAG,IAAI,CAAA,gBAAA,CAAkB,CAAA;AAAA,EAChD;AACF;AAOO,SAAS,QAAA,CAAS,GAAW,IAAA,EAAoB;AACtD,EAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,EAAG,IAAI,CAAA,0BAAA,EAA6B,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACpE;AACF;AAOO,SAAS,WAAW,CAAA,EAA6B;AACtD,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,IAAK,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,IAAa,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,EAAW;AACxE,IAAA,MAAM,IAAI,WAAW,CAAA,gDAAA,EAAmD,CAAA,CAAE,MAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAC/F;AACA,EAAA,OAAO,CAAC,EAAE,KAAA,CAAM,CAAC,GAAG,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA;AAChC;AAOO,SAAS,YAAY,CAAA,EAAmB;AAC7C,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AAC1B,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAM,IAAI,aAAa,8CAA8C,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,aAAa,CAAA,EAA6B;AACxD,EAAA,MAAM,OAAA,GAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AAC3B,EAAA,MAAM,OAAA,GAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AAC3B,EAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,MAAA,EAAW;AAClD,IAAA,MAAM,IAAI,aAAa,+CAA+C,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,CAAC,SAAS,OAAO,CAAA;AAC1B;AAWO,SAAS,mBAAmB,IAAA,EAA4B;AAC7D,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,MAAM,CAAA,GAAI,KAAA;AACV,EAAA,MAAM,IAAI,CAAA,IAAK,EAAA;AAEf,EAAA,IACE,CAAC,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,IACrB,CAAC,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,IACtB,CAAC,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA,IAC1B,OAAO,CAAA,EACP;AACA,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,iDAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,QAAQ,IAAA,GAAO,CAAA;AAEnB,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,GAAA,CAAS,CAAA,GAAI,QAAQ,CAAA,IAAK,CAAA;AAC1B,IAAA,OAAO,KAAA,GAAQ,CAAA;AAAA,EACjB,CAAA;AACF;AAUO,SAAS,qBAAA,CAAsB,SAAmB,MAAA,EAA4B;AACnF,EAAA,KAAA,IAAS,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,IAAI,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,IAAK,IAAI,CAAA,CAAE,CAAA;AACvC,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,MAAM,IAAI,aAAa,8CAA8C,CAAA;AAAA,IACvE;AACA,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,MAAM,IAAI,aAAa,8CAA8C,CAAA;AAAA,IACvE;AACA,IAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,IAAA;AACb,IAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,IAAA;AAAA,EACf;AACF;;;AC3GA,SAAS,cAAc,CAAA,EAAqB;AAC1C,EAAA,IAAI,CAAA,CAAE,UAAU,QAAA,EAAU;AACxB,IAAA,MAAM,IAAI,WAAW,wBAAwB,CAAA;AAAA,EAC/C;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,aAAa,+CAA+C,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,CAAA,CAAE,IAAA;AACX;AAEA,SAAS,eAAe,CAAA,EAAuC;AAC7D,EAAA,IAAI,CAAA,CAAE,UAAU,QAAA,EAAU;AACxB,IAAA,MAAM,IAAI,WAAW,yBAAyB,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,CAAA,CAAE,IAAA;AACX;AAEA,SAAS,iBAAA,CAAkB,QAAoB,SAAA,EAAiC;AAC9E,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,QAAA,MAAM,IAAI,qBAAA,CAAsB,wCAAA,EAA0C,SAAA,EAAW,KAAK,CAAA;AAAA,MAC5F;AACA,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,MAAA,SAAA,GAAY,IAAA;AAAA,IACd;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAA,CAAa,YAAY,CAAA,GAAI,CAAA,KAAM,YAAY,CAAA,GAAI,CAAA,CAAA,IAAM,YAAY,CAAA,GAAI,CAAA,CAAA;AAE/E,EAAA,IAAI,cAAc,CAAA,EAAG;AACnB,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,MAAM,IAAI,qBAAA,CAAsB,wCAAA,EAA0C,SAAS,CAAA;AAAA,EACrF;AACA,EAAA,IAAI,WAAW,OAAO,QAAA;AACtB,EAAA,IAAI,WAAW,OAAO,QAAA;AACtB,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,cAAA,CAAe,QAA4B,SAAA,EAA+B;AACjF,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAC7B,EAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,GAAA;AAE7B,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,GAAA,EAAK,SAAS,CAAA;AAErD,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACjB,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,QAAA,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAAA,MACtE;AACA,MAAA,OAAO,CAAA,CAAE,cAAc,CAAC,CAAA;AAAA,IAC1B,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACjB,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,QAAA,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAAA,MACtE;AACA,MAAA,IAAI,CAAA,GAAI,GAAG,OAAO,EAAA;AAClB,MAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA;AAClB,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACjB,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,MAAA,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAAA,IACtE;AACA,IAAA,OAAO,CAAA,GAAI,CAAA;AAAA,EACb,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,sBAAA,CAAuB,QAAiC,SAAA,EAA+B;AAC9F,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,qBAAA,CAAsB,4CAAA,EAA8C,SAAS,CAAA;AAAA,EACzF;AACA,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAC7B,EAAA,iBAAA,CAAkB,KAAK,SAAS,CAAA;AAEhC,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAc;AAC/B,EAAA,KAAA,MAAW,SAAS,GAAA,EAAK;AACvB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACnB,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,CAAA,2CAAA,EAA8C,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QAC3D,SAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,uBAAA,CACP,gBAAA,EACA,SAAA,EACA,SAAA,EAC+C;AAC/C,EAAA,IAAI,qBAAqB,MAAA,EAAQ;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,gBAAgB,CAAA,EAAG;AACpC,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,0DAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,gBAAA,CAAiB,WAAW,SAAA,EAAW;AACzC,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,iDAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA,CAAiB;AAAA,KACnB;AAAA,EACF;AACA,EAAA,OAAO,gBAAA;AACT;AAUA,SAAS,WAAA,CAAY,GAAW,CAAA,EAAqB;AACnD,EAAA,MAAM,MAAA,GAAS,YAAY,CAAC,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,MAAA;AAC3B,EAAA,IAAI,CAAA,CAAE,UAAU,QAAA,EAAU;AACxB,IAAA,MAAMA,MAAAA,GAAQ,aAAA,CAAc,CAAC,CAAA,CAAE,GAAG,CAAA;AAClC,IAAA,IAAIA,WAAU,MAAA,EAAW;AACvB,MAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,IAC7E;AACA,IAAA,OAAOA,MAAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,CAAC,CAAA,CAAE,GAAG,CAAA;AACnC,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,EAC9E;AACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AACzD;AAWA,SAAS,WAAA,CAAY,CAAA,EAAW,GAAA,EAAa,GAAA,EAAuB;AAClE,EAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,MAAA,GAAS,GAAA,GAAM,UAAU,GAAA,GAAM,OAAA;AAC7C,EAAA,IAAI,CAAA,CAAE,UAAU,QAAA,EAAU;AACxB,IAAA,MAAMA,MAAAA,GAAQ,aAAA,CAAc,CAAC,CAAA,CAAE,GAAG,CAAA;AAClC,IAAA,IAAIA,WAAU,MAAA,EAAW;AACvB,MAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,IAC7E;AACA,IAAA,OAAOA,MAAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,CAAC,CAAA,CAAE,GAAG,CAAA;AACnC,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,EAC9E;AACA,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AACzD;AAEA,SAAS,QAAA,CAAS,GAAW,IAAA,EAAoB;AAC/C,EAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,EAAG,IAAI,CAAA,oBAAA,CAAsB,CAAA;AAAA,EACpD;AACF;AAEA,SAAS,eAAA,CAAgB,MAAA,EAAoB,KAAA,EAAe,OAAA,EAA2B;AACrF,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,MAAM,IAAI,YAAA,CAAa,CAAA,0CAAA,EAA6C,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1F;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,yBAAA,CAA0B,MAAoB,SAAA,EAAiC;AACtF,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,KAAA,MAAW,SAAS,GAAA,EAAK;AACvB,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,OAAO,iBAAA,CAAkB,QAAQ,SAAS,CAAA;AAC5C;AAEA,SAAS,8BAAA,CAA+B,SAAqB,SAAA,EAA2B;AACtF,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,OAAA,EAAS,SAAS,CAAA;AACzD,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAM,CAAC,CAAC,GAAG,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAM,CAAC,CAAC,GAAG,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,MAAM,CAAC,CAAC,GAAG,EAAE,KAAA,EAAO,WAAW,CAAA;AACxC;AAEA,SAAS,iCAAA,CACP,UAAA,EACA,SAAA,EACA,SAAA,EACQ;AACR,EAAA,MAAM,YAAA,GAAe,yBAAA,CAA0B,UAAA,EAAY,SAAS,CAAA;AACpE,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,GAAG,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,EAClD;AACA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,GAAG,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,GAAG,EAAE,KAAA,EAAO,WAAW,CAAA;AACnD;AAEA,SAAS,sBAAA,CAAuB,MAAA,EAAoB,SAAA,GAAY,GAAA,EAAa;AAC3E,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,MAAA,EAAQ,SAAS,CAAA;AAExD,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,MAAMC,IAAAA,GAAM,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC3C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,MACzE;AACA,MAAAA,IAAAA,CAAI,CAAC,CAAA,GAAI,KAAA;AAAA,IACX;AACA,IAAA,OAAO,OAAOA,IAAG,CAAA;AAAA,EACnB;AAEA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,MAAMA,IAAAA,GAAM,IAAI,aAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC3C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,MACzE;AACA,MAAAA,IAAAA,CAAI,CAAC,CAAA,GAAI,KAAA;AAAA,IACX;AACA,IAAA,OAAO,OAAOA,IAAG,CAAA;AAAA,EACnB;AAEA,EAAA,MAAM,GAAA,GAAM,IAAI,YAAA,CAAa,MAAA,CAAO,MAAM,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,OAAO,KAAA,KAAU,QAAA,EAAU;AACpD,MAAA,MAAM,IAAI,aAAa,iDAAiD,CAAA;AAAA,IAC1E;AACA,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,KAAA;AAAA,EACX;AACA,EAAA,OAAO,OAAO,GAAG,CAAA;AACnB;AAEA,SAAS,sBAAA,CAAuB,MAAA,EAAsB,SAAA,GAAY,GAAA,EAAa;AAC7E,EAAA,MAAM,OAAO,MAAA,CAAO,MAAA;AACpB,EAAA,MAAM,OAAO,IAAA,GAAO,CAAA,GAAK,OAAO,CAAC,CAAA,EAAG,UAAU,CAAA,GAAK,CAAA;AAEnD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,IAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,IACzE;AACA,IAAA,IAAI,GAAA,CAAI,WAAW,IAAA,EAAM;AACvB,MAAA,MAAM,IAAI,WAAW,sDAAsD,CAAA;AAAA,IAC7E;AAAA,EACF;AAEA,EAAA,MAAM,OAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,KAAA,MAAW,SAAS,GAAA,EAAK;AACvB,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,IAAA,EAAM,SAAS,CAAA;AACtD,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAgB,IAAI,CAAA;AACpC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,MAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,MACzE;AACA,MAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAc,IAAI,CAAA;AACrC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,QAAA,MAAM,KAAA,GAAQ,IAAI,CAAC,CAAA;AACnB,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,UAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,QACzE;AACA,QAAA,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA;AAAA,MACd;AACA,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA;AAAA,IACX;AACA,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB;AACA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAgB,IAAI,CAAA;AACpC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,MAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,MACzE;AACA,MAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAc,IAAI,CAAA;AACrC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,QAAA,MAAM,KAAA,GAAQ,IAAI,CAAC,CAAA;AACnB,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,UAAA,MAAM,IAAI,aAAa,iDAAiD,CAAA;AAAA,QAC1E;AACA,QAAA,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA;AAAA,MACd;AACA,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA;AAAA,IACX;AACA,IAAA,OAAO,MAAA,CAAO,GAAA,EAAK,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,EACzC;AAEA,EAAA,MAAM,IAAA,GAAO,IAAI,aAAA,CAAc,IAAA,GAAO,IAAI,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,IACzE;AACA,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,KAAA;AAAA,EACZ;AAEA,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,SAAA,EAAU;AACpC,EAAA,OAAO,OAAW,cAAA,CAAe;AAAA,IAC/B,IAAA;AAAA,IACA,KAAA,EAAO,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,IAClB,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;AA8BO,IAAM,eAAN,MAAmB;AAAA;AAAA,EAEhB,MAAA,GAAS,KAAA;AAAA;AAAA,EAET,QAAA;AAAA;AAAA,EAEA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR,IAAI,CAAA,EAAiB;AACnB,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,qBAAA,CAAsB,wCAAA,EAA0C,GAAG,CAAA;AAAA,IAC/E;AAGA,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAc;AACpC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAM,CAAA,EAAA,EAAK;AAC/B,MAAA,SAAA,CAAU,GAAA,CAAI,WAAA,CAAY,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACjC;AAGA,IAAA,IAAA,CAAK,QAAA,GAAW,cAAA,CAAe,SAAA,EAAW,GAAG,CAAA;AAG7C,IAAA,IAAA,CAAK,aAAA,uBAAoB,GAAA,EAAI;AAC7B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC7C,MAAA,IAAA,CAAK,aAAA,CAAc,IAAI,eAAA,CAAgB,IAAA,CAAK,UAAU,CAAA,EAAG,kBAAkB,GAAG,CAAC,CAAA;AAAA,IACjF;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,CAAA,EAAmB;AAC3B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,8CAA8C,CAAA;AAAA,IACzE;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,OAAO,MAAA,CAAO,EAAE,CAAA;AAAA,IAClB;AAEA,IAAA,MAAM,SAAS,IAAA,CAAK,aAAA;AACpB,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,CAAC,MAAA,EAAQ;AAC7B,MAAA,MAAM,IAAI,aAAa,mDAAmD,CAAA;AAAA,IAC5E;AAGA,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAc,CAAA,CAAE,IAAI,CAAA;AAGvC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAM,CAAA,EAAA,EAAK;AAC/B,MAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,EAAG,CAAC,CAAA;AAC5B,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,CAAA,eAAA,EAAkB,MAAA,CAAO,GAAG,CAAC,CAAA,mCAAA,CAAA;AAAA,UAC7B,GAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,GAAA;AAAA,IACd;AAEA,IAAA,OAAO,MAAA,CAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,CAAA,EAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,iBAAiB,CAAA,EAAmB;AAClC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,sDAAsD,CAAA;AAAA,IACjF;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,aAAa,mDAAmD,CAAA;AAAA,IAC5E;AACA,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,OAAO,8BAAA,CAA+B,SAAS,GAAG,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,aAAa,OAAA,CAAQ,MAAA;AAE3B,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAgB,CAAA,CAAE,IAAI,CAAA;AACzC,IAAA,MAAM,MAAA,GAAS,YAAY,CAAC,CAAA;AAC5B,IAAA,MAAM,IAAA,GAAO,eAAe,CAAC,CAAA;AAG7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAM,CAAA,EAAA,EAAK;AAC/B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,CAAA,CAAE,MAAA,GAAS,IAAI,MAAM,CAAA;AACtC,MAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,QAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,MAC9E;AACA,MAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AAGtB,MAAA,IAAI,GAAA,GAAM,KAAK,GAAA,IAAO,UAAA,IAAc,CAAC,MAAA,CAAO,SAAA,CAAU,GAAG,CAAA,EAAG;AAC1D,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,CAAA,qBAAA,EAAwB,GAAG,CAAA,yBAAA,EAA4B,UAAA,GAAa,CAAC,CAAA,CAAA,CAAA;AAAA,UACrE,GAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,eAAA,CAAgB,OAAA,EAAS,KAAK,+BAA+B,CAAA;AAAA,IAC3E;AAGA,IAAA,OAAO,sBAAA,CAAuB,QAAQ,GAAG,CAAA;AAAA,EAC3C;AACF;AA6BO,IAAM,gBAAN,MAAoB;AAAA;AAAA,EAEjB,MAAA,GAAS,KAAA;AAAA;AAAA,EAET,WAAA;AAAA;AAAA,EAEA,gBAAA;AAAA;AAAA,EAEA,MAAA;AAAA;AAAA,EAEA,aAAA;AAAA;AAAA,EAEA,IAAA;AAAA;AAAA,EAEA,YAAA;AAAA;AAAA,EAEA,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYR,WAAA,CACE,OAAA,GAMI,EAAC,EACL;AACA,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,YAAA,IAAgB,KAAA;AAC/D,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAa,OAAA,CAAQ,iBAAiB,MAAA,EAAW;AACtE,MAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,OAAA,CAAQ,YAAA,EAAc;AAC3C,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,2DAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,CAAQ;AAAA,SACV;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA;AACd,IAAA,IAAA,CAAK,aAAA,GAAgB,QAAQ,aAAA,IAAiB,OAAA;AAC9C,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,IAAA,IAAQ,IAAA;AAC5B,IAAA,IAAA,CAAK,gBAAA,GAAmB,QAAQ,UAAA,IAAc,MAAA;AAE9C,IAAA,IAAI,OAAO,IAAA,CAAK,MAAA,KAAW,SAAA,EAAW;AACpC,MAAA,MAAM,IAAI,qBAAA,CAAsB,0BAAA,EAA4B,QAAA,EAAU,KAAK,MAAM,CAAA;AAAA,IACnF;AACA,IAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,OAAA,IAAW,IAAA,CAAK,kBAAkB,QAAA,EAAU;AACrE,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,2CAAA;AAAA,QACA,eAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,IAAQ,IAAA,CAAK,SAAS,OAAA,IAAW,IAAA,CAAK,SAAS,WAAA,EAAa;AAC5E,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,4CAAA;AAAA,QACA,MAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAI,CAAA,EAAiB;AACnB,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAE1C,IAAA,IAAI,QAAA,KAAa,CAAA,IAAK,SAAA,KAAc,CAAA,EAAG;AACrC,MAAA,MAAM,IAAI,qBAAA,CAAsB,yCAAA,EAA2C,GAAG,CAAA;AAAA,IAChF;AAGA,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,mBAAmB,EAAC;AAEzB,IAAA,MAAM,kBAAA,GAAqB,uBAAA;AAAA,MACzB,IAAA,CAAK,gBAAA;AAAA,MACL,SAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,IAAI,IAAA;AAEJ,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,MAAM,WAAA,GAAc,mBAAmB,CAAC,CAAA;AACxC,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,MAAM,IAAI,qBAAA,CAAsB,gCAAA,EAAkC,YAAA,EAAc,CAAC,CAAA;AAAA,QACnF;AACA,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC/B,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,gDAAA;AAAA,YACA,YAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AACA,QAAA,IAAA,GAAO,sBAAA,CAAuB,aAAa,YAAY,CAAA;AAAA,MACzD,CAAA,MAAO;AACL,QAAA,MAAM,SAAA,uBAAgB,GAAA,EAAc;AAGpC,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,UAAA,SAAA,CAAU,GAAA,CAAI,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,QACpC;AAGA,QAAA,IAAA,GAAO,cAAA,CAAe,WAAW,GAAG,CAAA;AAAA,MACtC;AAEA,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,MAAM,IAAI,qBAAA,CAAsB,8CAAA,EAAgD,GAAA,EAAK,CAAC,CAAA;AAAA,MACxF;AAEA,MAAA,IAAA,CAAK,WAAA,CAAY,KAAK,IAAI,CAAA;AAG1B,MAAA,MAAM,GAAA,uBAAU,GAAA,EAAsB;AACtC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,QAAA,GAAA,CAAI,IAAI,eAAA,CAAgB,IAAA,EAAM,CAAA,EAAG,mBAAmB,GAAG,CAAC,CAAA;AAAA,MAC1D;AACA,MAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,GAAG,CAAA;AAG9B,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,UAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC/B,UAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,YAAA,MAAM,IAAI,qBAAA;AAAA,cACR,CAAA,kBAAA,EAAqB,MAAA,CAAO,GAAG,CAAC,eAAe,CAAC,CAAA,CAAA;AAAA,cAChD,GAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AACjD,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,IAAA,EAAM,OAAO,IAAA;AAC/B,MAAA,IAAI,KAAK,IAAA,KAAS,OAAA,SAAgB,IAAA,CAAK,MAAA,GAAS,IAAI,CAAA,GAAI,IAAA;AACxD,MAAA,IAAI,KAAK,IAAA,KAAS,WAAA,SAAoB,IAAA,CAAK,MAAA,KAAW,IAAI,CAAA,GAAI,IAAA;AAC9D,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,CAAA,EAA+B;AACvC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,+CAA+C,CAAA;AAAA,IAC1E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAE1C,IAAA,MAAM,aAAa,IAAA,CAAK,WAAA;AACxB,IAAA,MAAM,eAAe,IAAA,CAAK,gBAAA;AAC1B,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,YAAA,EAAc;AAChC,MAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,IAC7E;AACA,IAAA,MAAM,iBAAiB,UAAA,CAAW,MAAA;AAClC,IAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,iDAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,cAAc,IAAA,CAAK,YAAA,IAAgB,UAAA,CAAW,GAAA,CAAI,MAAM,IAAI,CAAA;AAGlE,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAC,CAAA,IAAK,IAAA;AACpC,MAAA,SAAA,IAAa,IAAA,CAAK,MAAA,IAAU,SAAA,KAAc,IAAA,GAAO,CAAA,GAAI,CAAA,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,QAAA,KAAa,CAAA,IAAK,SAAA,KAAc,CAAA,EAAG;AACrC,MAAA,OAAO,IAAA,CAAK,MAAA,GACR,SAAA,CAAU,OAAA,CAAQ;AAAA,QAChB,IAAA,EAAM,CAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,UAAA,EAAY,IAAI,UAAA,CAAW,CAAC,CAAA;AAAA,QAC5B,UAAA,EAAY,IAAI,UAAA,CAAW,CAAC,CAAA;AAAA,QAC5B,MAAA,EAAQ,IAAI,YAAA,CAAa,CAAC;AAAA,OAC3B,CAAA,GACD,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,CAAA,EAAG,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,MAAM,OAAiB,EAAC;AAExB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,IAAI,SAAA,GAAY,CAAA;AAChB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,UAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,UAAA,MAAM,GAAA,GAAM,aAAa,CAAC,CAAA;AAC1B,UAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAC,CAAA,IAAK,IAAA;AACpC,UAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,GAAA,EAAK;AACjB,YAAA,MAAM,IAAI,aAAa,yDAAyD,CAAA;AAAA,UAClF;AACA,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,IAAU,SAAA,KAAc,OAAO,CAAA,GAAI,CAAA,CAAA;AACxD,UAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC/B,UAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACvB,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,IAAI,IAAA,CAAK,kBAAkB,QAAA,EAAU;AACnC,cAAA,SAAA,IAAa,OAAA;AACb,cAAA;AAAA,YACF;AACA,YAAA,MAAM,IAAI,sBAAsB,CAAA,kBAAA,EAAqB,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,GAAG,CAAA;AAAA,UAC9E;AAEA,UAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,GAAA,KAAQ,SAAA,EAAW;AAC3C,YAAA,SAAA,IAAa,OAAA;AACb,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,WAAW,SAAA,KAAc,IAAA,IAAQ,GAAA,GAAM,SAAA,GAAY,MAAM,CAAA,GAAI,GAAA;AACnE,UAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AACb,UAAA,MAAA,CAAO,IAAA,CAAK,YAAY,QAAQ,CAAA;AAChC,UAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AACX,UAAA,SAAA,IAAa,OAAA;AAAA,QACf;AAAA,MACF;AAEA,MAAA,OAAO,UAAU,OAAA,CAAQ;AAAA,QACvB,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,UAAA,EAAY,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAAA,QAClC,UAAA,EAAY,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAAA,QAClC,MAAA,EAAQ,YAAA,CAAa,IAAA,CAAK,IAAI;AAAA,OAC/B,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,IAAI,SAAA,GAAY,CAAA;AAChB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,QAAA,MAAM,GAAA,GAAM,aAAa,CAAC,CAAA;AAC1B,QAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAC,CAAA,IAAK,IAAA;AACpC,QAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,GAAA,EAAK;AACjB,UAAA,MAAM,IAAI,aAAa,yDAAyD,CAAA;AAAA,QAClF;AACA,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,IAAU,SAAA,KAAc,OAAO,CAAA,GAAI,CAAA,CAAA;AACxD,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC/B,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACvB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,IAAI,IAAA,CAAK,kBAAkB,QAAA,EAAU;AACnC,YAAA,SAAA,IAAa,OAAA;AACb,YAAA;AAAA,UACF;AACA,UAAA,MAAM,IAAI,sBAAsB,CAAA,kBAAA,EAAqB,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,GAAG,CAAA;AAAA,QAC9E;AACA,QAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,GAAA,KAAQ,SAAA,EAAW;AAC3C,UAAA,SAAA,IAAa,OAAA;AACb,UAAA;AAAA,QACF;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,MAAM,WAAW,SAAA,KAAc,IAAA,IAAQ,GAAA,GAAM,SAAA,GAAY,MAAM,CAAA,GAAI,GAAA;AACnE,QAAA,GAAA,CAAI,SAAA,GAAY,QAAQ,CAAA,GAAI,CAAA;AAC5B,QAAA,SAAA,IAAa,OAAA;AAAA,MACf;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA,EAEA,aAAa,CAAA,EAA+B;AAC1C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AAAA,EAEA,iBAAiB,CAAA,EAA+B;AAC9C,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,uDAAuD,CAAA;AAAA,IAClF;AACA,IAAA,MAAM,KAAA,GAAQ,CAAA,YAAa,SAAA,GAAY,CAAA,CAAE,SAAQ,GAAI,CAAA;AACrD,IAAA,QAAA,CAAS,OAAO,GAAG,CAAA;AACnB,IAAA,mBAAA,CAAoB,OAAO,GAAG,CAAA;AAC9B,IAAA,MAAM,CAAC,QAAA,EAAU,KAAK,CAAA,GAAI,WAAW,KAAK,CAAA;AAC1C,IAAA,MAAM,aAAa,IAAA,CAAK,WAAA;AACxB,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,aAAa,yDAAyD,CAAA;AAAA,IAClF;AACA,IAAA,MAAM,YAAY,UAAA,CAAW,MAAA;AAC7B,IAAA,MAAM,cAAc,IAAA,CAAK,YAAA,IAAgB,UAAA,CAAW,GAAA,CAAI,MAAM,IAAI,CAAA;AAClE,IAAA,MAAM,YAAY,UAAA,CAAW,MAAA,CAAO,CAAC,GAAA,EAAK,MAAM,GAAA,KAAQ;AACtD,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAG,CAAA,IAAK,IAAA;AACtC,MAAA,OAAO,GAAA,GAAM,IAAA,CAAK,MAAA,IAAU,SAAA,KAAc,OAAO,CAAA,GAAI,CAAA,CAAA;AAAA,IACvD,GAAG,CAAC,CAAA;AACJ,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,MAAM,IAAI,qBAAA,CAAsB,+CAAA,EAAiD,GAAA,EAAK,KAAK,CAAA;AAAA,IAC7F;AACA,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO,iCAAA,CAAkC,UAAA,EAAY,SAAA,EAAW,GAAG,CAAA;AAAA,IACrE;AAEA,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAkB,QAAQ,CAAA;AAC7C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAI,KAAA,CAAgB,SAAS,CAAA;AAAA,IAC3C;AACA,IAAA,MAAM,SAAA,GAAY,eAAe,KAAK,CAAA;AACtC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,KAAK,CAAA;AAE7C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,IAAI,SAAA,GAAY,CAAA;AAChB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,QAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAC,CAAA,IAAK,IAAA;AACpC,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,MAAM,IAAI,aAAa,yDAAyD,CAAA;AAAA,QAClF;AACA,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,IAAU,SAAA,KAAc,OAAO,CAAA,GAAI,CAAA,CAAA;AACxD,QAAA,IAAI,YAAY,CAAA,EAAG;AACjB,UAAA,MAAMC,IAAAA,GAAM,OAAO,CAAC,CAAA;AACpB,UAAA,IAAI,CAACA,IAAAA,EAAK;AACR,YAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,UACnE;AACA,UAAAA,KAAI,CAAC,CAAA,GAAI,gBAAgB,IAAA,EAAM,SAAA,IAAa,GAAG,gCAAgC,CAAA;AAC/E,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,MAAA,GAAS,CAAA;AACb,QAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,UAAU,SAAA,GAAY,OAAA;AACzD,QAAA,MAAM,KAAA,GAAQ,UAAU,OAAO,CAAA;AAC/B,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,IAAI,MAAA,GAAS,OAAO,KAAK,CAAA;AACzB,QAAA,IAAI,cAAc,MAAA,GAAS,CAAA;AAE3B,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,EAAS,CAAA,EAAA,EAAK;AAChC,UAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AAC3C,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,UAC9E;AACA,UAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,UAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,YAAA,MAAA,GAAS,GAAA;AACT,YAAA,MAAA,GAAS,CAAA;AAAA,UACX;AACA,UAAA,IAAI,MAAM,CAAA,EAAG;AACX,YAAA,WAAA,GAAc,IAAA;AAAA,UAChB;AAAA,QACF;AAEA,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,IAAI,cAAc,IAAA,EAAM;AACtB,YAAA,GAAA,CAAI,CAAC,CAAA,GAAI,eAAA,CAAgB,IAAA,EAAM,WAAW,gCAAgC,CAAA;AAAA,UAC5E,CAAA,MAAA,IAAW,IAAA,CAAK,aAAA,KAAkB,QAAA,EAAU;AAC1C,YAAA,MAAM,IAAI,qBAAA;AAAA,cACR,gJAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAM,IAAI,qBAAA,CAAsB,qCAAA,EAAuC,GAAG,CAAA;AAAA,UAC5E;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAM,YAAY,SAAA,KAAc,IAAA,IAAQ,MAAA,IAAU,SAAA,GAAY,SAAS,CAAA,GAAI,MAAA;AAC3E,UAAA,GAAA,CAAI,CAAC,CAAA,GAAI,eAAA,CAAgB,IAAA,EAAM,WAAW,gCAAgC,CAAA;AAAA,QAC5E;AAEA,QAAA,SAAA,IAAa,OAAA;AAAA,MACf;AAAA,IACF;AAEA,IAAA,OAAO,sBAAA,CAAuB,QAAQ,GAAG,CAAA;AAAA,EAC3C;AACF;AA2BO,IAAM,iBAAN,MAAqB;AAAA;AAAA,EAElB,MAAA,GAAS,KAAA;AAAA;AAAA,EAET,WAAA;AAAA;AAAA,EAEA,gBAAA;AAAA;AAAA,EAEA,aAAA;AAAA;AAAA,EAEA,YAAA;AAAA;AAAA,EAEA,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR,WAAA,CACE,OAAA,GAII,EAAC,EACL;AACA,IAAA,IAAA,CAAK,aAAA,GAAgB,QAAQ,aAAA,IAAiB,OAAA;AAC9C,IAAA,IAAA,CAAK,YAAA,GAAe,QAAQ,YAAA,IAAgB,EAAA;AAC5C,IAAA,IAAA,CAAK,gBAAA,GAAmB,QAAQ,UAAA,IAAc,MAAA;AAE9C,IAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,OAAA,IAAW,IAAA,CAAK,kBAAkB,iBAAA,EAAmB;AAC9E,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,oDAAA;AAAA,QACA,eAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA,IAAK,CAAC,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA,EAAG;AAC3E,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,6CAAA;AAAA,QACA,cAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,YAAY,CAAA,EAAG;AAC9E,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,6CAAA;AAAA,QACA,cAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,CAAA,EAAiB;AACnB,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAE1C,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,MAAM,IAAI,qBAAA,CAAsB,0CAAA,EAA4C,GAAG,CAAA;AAAA,IACjF;AAEA,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,mBAAmB,EAAC;AAEzB,IAAA,MAAM,kBAAA,GAAqB,uBAAA;AAAA,MACzB,IAAA,CAAK,gBAAA;AAAA,MACL,SAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,IAAI,MAAA;AAEJ,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,MAAM,WAAA,GAAc,mBAAmB,CAAC,CAAA;AACxC,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,MAAM,IAAI,qBAAA,CAAsB,gCAAA,EAAkC,YAAA,EAAc,CAAC,CAAA;AAAA,QACnF;AACA,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC/B,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,gDAAA;AAAA,YACA,YAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AACA,QAAA,MAAA,GAAS,sBAAA,CAAuB,aAAa,YAAY,CAAA;AAAA,MAC3D,CAAA,MAAO;AACL,QAAA,MAAM,SAAA,uBAAgB,GAAA,EAAc;AAGpC,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,UAAA,SAAA,CAAU,GAAA,CAAI,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,QACpC;AAGA,QAAA,MAAA,GAAS,cAAA,CAAe,WAAW,GAAG,CAAA;AAAA,MACxC;AAEA,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,MAAM,IAAI,qBAAA,CAAsB,8CAAA,EAAgD,GAAA,EAAK,CAAC,CAAA;AAAA,MACxF;AAEA,MAAA,IAAA,CAAK,WAAA,CAAY,KAAK,MAAM,CAAA;AAG5B,MAAA,MAAM,GAAA,uBAAU,GAAA,EAAsB;AACtC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,QAAA,GAAA,CAAI,IAAI,eAAA,CAAgB,MAAA,EAAQ,CAAA,EAAG,oBAAoB,GAAG,CAAC,CAAA;AAAA,MAC7D;AACA,MAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,GAAG,CAAA;AAE9B,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,UAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC/B,UAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,YAAA,MAAM,IAAI,qBAAA;AAAA,cACR,CAAA,kBAAA,EAAqB,MAAA,CAAO,GAAG,CAAC,eAAe,CAAC,CAAA,CAAA;AAAA,cAChD,GAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,kBAAkB,iBAAA,EAAmB;AAC5C,QAAA,IACE,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA,IACjC,IAAA,CAAK,YAAA,IAAgB,CAAA,IACrB,IAAA,CAAK,YAAA,GAAe,MAAA,CAAO,MAAA,EAC3B;AACA,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,8DAAA;AAAA,YACA,cAAA;AAAA,YACA,IAAA,CAAK;AAAA,WACP;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,CAAA,EAAmB;AAC3B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,gDAAgD,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,WAAA,EAAa,MAAA,IAAU,CAAA;AACnD,IAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,iDAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,GAAG,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,IACnD;AAGA,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAgB,QAAQ,CAAA;AAC3C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAI,KAAA,CAAc,SAAS,CAAA;AAAA,IACzC;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC/B,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,gBAAA,GAAmB,CAAC,CAAA;AACrC,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,MAAM,IAAI,aAAa,0DAA0D,CAAA;AAAA,QACnF;AAGA,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACvB,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,IAAI,IAAA,CAAK,kBAAkB,iBAAA,EAAmB;AAC5C,YAAA,GAAA,CAAI,CAAC,IAAI,IAAA,CAAK,YAAA;AACd,YAAA;AAAA,UACF;AACA,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,CAAA,kBAAA,EAAqB,MAAA,CAAO,GAAG,CAAC,eAAe,CAAC,CAAA,CAAA;AAAA,YAChD,GAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAEA,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,CAAA,EAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,iBAAiB,CAAA,EAAmB;AAClC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,wDAAwD,CAAA;AAAA,IACnF;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,WAAA,EAAa,MAAA,IAAU,CAAA;AACnD,IAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,iDAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,KAAa,CAAA,IAAK,SAAA,KAAc,CAAA,EAAG;AACrC,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,WAAA,IAAe,EAAC;AAC1C,MAAA,MAAM,YAAA,GAAe,yBAAA,CAA0B,YAAA,EAAc,GAAG,CAAA;AAChE,MAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,QAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,GAAG,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,MAClD;AACA,MAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,QAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,GAAG,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,MACjD;AACA,MAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,GAAG,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,IACnD;AAGA,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAkB,QAAQ,CAAA;AAC7C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAI,KAAA,CAAgB,SAAS,CAAA;AAAA,IAC3C;AAGA,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,eAAe,CAAC,CAAA;AAC7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,MAAM,cAAA,GACJ,IAAA,CAAK,aAAA,KAAkB,iBAAA,KACtB,OAAO,KAAA,CAAM,GAAG,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA,GAAI,QAAQ,IAAA,CAAK,YAAA,CAAA;AACtE,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,gDAAA;AAAA,YACA,GAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AACA,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAA;AAGjC,QAAA,IAAI,CAAC,IAAA,IAAQ,GAAA,GAAM,CAAA,IAAK,GAAA,IAAO,IAAA,CAAK,MAAA,IAAU,CAAC,MAAA,CAAO,SAAA,CAAU,GAAG,CAAA,EAAG;AACpE,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,CAAA,uBAAA,EAA0B,GAAG,CAAA,aAAA,EAAgB,CAAC,6BAA6B,IAAA,EAAM,MAAA,IAAU,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,YACjG,GAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAEA,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,MAAM,MAAA,GAAS,KAAK,GAAG,CAAA;AACvB,QAAA,IAAI,WAAW,MAAA,EAAW;AACxB,UAAA,MAAM,IAAI,aAAa,wCAAwC,CAAA;AAAA,QACjE;AACA,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,OAAO,sBAAA,CAAuB,QAAQ,GAAG,CAAA;AAAA,EAC3C;AACF;AAyBO,IAAM,iBAAN,MAAqB;AAAA;AAAA,EAElB,MAAA,GAAS,KAAA;AAAA;AAAA,EAET,QAAA;AAAA;AAAA,EAEA,aAAA;AAAA;AAAA,EAEA,QAAA;AAAA;AAAA,EAEA,QAAA;AAAA;AAAA,EAEA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWR,WAAA,CACE,OAAA,GAKI,EAAC,EACL;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,QAAA,IAAY,CAAA;AACpC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,QAAA,IAAY,CAAA;AACpC,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,YAAA,IAAgB,KAAA;AAC/D,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,EAAG;AACtE,MAAA,MAAM,IAAI,qBAAA,CAAsB,8CAAA,EAAgD,UAAU,CAAA;AAAA,IAC5F;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,EAAU;AAClC,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,wCAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAa,OAAA,CAAQ,iBAAiB,MAAA,EAAW;AACtE,MAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,OAAA,CAAQ,YAAA,EAAc;AAC3C,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,2DAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,CAAQ;AAAA,SACV;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,OAAO,iBAAiB,SAAA,EAAW;AACrC,MAAA,MAAM,IAAI,qBAAA,CAAsB,0BAAA,EAA4B,QAAA,EAAU,YAAY,CAAA;AAAA,IACpF;AACA,IAAA,IAAI,YAAA,IAAgB,IAAA,CAAK,QAAA,KAAa,CAAA,EAAG;AACvC,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,yCAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,CAAA,EAAiB;AACnB,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,qBAAA,CAAsB,0CAAA,EAA4C,GAAG,CAAA;AAAA,IACjF;AAGA,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAc;AACpC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAM,CAAA,EAAA,EAAK;AAC/B,MAAA,SAAA,CAAU,GAAA,CAAI,WAAA,CAAY,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACjC;AAGA,IAAA,IAAA,CAAK,QAAA,GAAW,cAAA,CAAe,SAAA,EAAW,GAAG,CAAA;AAC7C,IAAA,IAAA,CAAK,aAAA,uBAAoB,GAAA,EAAI;AAC7B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC7C,MAAA,IAAA,CAAK,aAAA,CAAc,IAAI,eAAA,CAAgB,IAAA,CAAK,UAAU,CAAA,EAAG,oBAAoB,GAAG,CAAC,CAAA;AAAA,IACnF;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,CAAA,EAA+B;AACvC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,gDAAgD,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAMC,SAAAA,GAAW,IAAA,CAAK,QAAA,EAAU,MAAA,IAAU,CAAA;AAC1C,MAAA,OAAO,IAAA,CAAK,MAAA,GACR,SAAA,CAAU,OAAA,CAAQ;AAAA,QAChB,IAAA,EAAM,CAAA;AAAA,QACN,IAAA,EAAMA,SAAAA;AAAA,QACN,UAAA,EAAY,IAAI,UAAA,CAAW,CAAC,CAAA;AAAA,QAC5B,UAAA,EAAY,IAAI,UAAA,CAAW,CAAC,CAAA;AAAA,QAC5B,MAAA,EAAQ,IAAI,YAAA,CAAa,CAAC;AAAA,OAC3B,CAAA,GACD,KAAA,CAAM,CAAC,CAAA,EAAGA,SAAQ,CAAA,EAAG,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,WAAW,CAAA,CAAE,IAAA;AACnB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,EAAU,MAAA,IAAU,CAAA;AAC1C,IAAA,MAAM,SAAS,IAAA,CAAK,aAAA;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,aAAa,sDAAsD,CAAA;AAAA,IAC/E;AAEA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,MAAM,OAAiB,EAAC;AAExB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,EAAG,CAAC,CAAA;AAC5B,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAE1B,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,CAAA,eAAA,EAAkB,MAAA,CAAO,GAAG,CAAC,CAAA,mCAAA,CAAA;AAAA,YAC7B,GAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAEA,QAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AACb,QAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AACf,QAAA,IAAA,CAAK,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,MACzB;AAEA,MAAA,OAAO,UAAU,OAAA,CAAQ;AAAA,QACvB,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAAA,QAClC,UAAA,EAAY,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAAA,QAClC,MAAA,EAAQ,YAAA,CAAa,IAAA,CAAK,IAAI;AAAA,OAC/B,CAAA;AAAA,IACH;AAGA,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAgB,QAAQ,CAAA;AAC3C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAA,CAAO,CAAC,IAAI,IAAI,KAAA,CAAc,QAAQ,CAAA,CAAE,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,IAC5D;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,EAAG,CAAC,CAAA;AAC5B,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAE1B,MAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,CAAA,eAAA,EAAkB,MAAA,CAAO,GAAG,CAAC,CAAA,mCAAA,CAAA;AAAA,UAC7B,GAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,MACnE;AACA,MAAA,GAAA,CAAI,GAAG,IAAI,IAAA,CAAK,QAAA;AAAA,IAClB;AAEA,IAAA,OAAO,MAAA,CAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,CAAA,EAA+B;AAC1C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,iBAAiB,CAAA,EAA+B;AAC9C,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,wDAAwD,CAAA;AAAA,IACnF;AACA,IAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,MAAA,IAAI,IAAA,CAAK,aAAa,CAAA,EAAG;AACvB,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,oDAAA;AAAA,UACA,UAAA;AAAA,UACA,IAAA,CAAK;AAAA,SACP;AAAA,MACF;AACA,MAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,CAAA,CAAE,KAAA;AACvB,MAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,MAAA,EAAW;AAC5C,QAAA,MAAM,IAAI,WAAW,yBAAyB,CAAA;AAAA,MAChD;AACA,MAAA,MAAMA,SAAAA,GAAW,IAAA,CAAK,QAAA,EAAU,MAAA,IAAU,CAAA;AAC1C,MAAA,IAAI,SAASA,SAAAA,EAAU;AACrB,QAAA,MAAM,IAAI,qBAAA,CAAsB,+CAAA,EAAiD,GAAA,EAAK,IAAI,CAAA;AAAA,MAC5F;AACA,MAAA,MAAMC,WAAU,IAAA,CAAK,QAAA;AACrB,MAAA,IAAI,CAACA,QAAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAa,uDAAuD,CAAA;AAAA,MAChF;AACA,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAO,8BAAA,CAA+BA,UAAS,GAAG,CAAA;AAAA,MACpD;AAEA,MAAA,MAAMC,OAAAA,GAAS,IAAI,KAAA,CAAgB,IAAI,CAAA;AACvC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,QAAA,IAAI,MAAA,GAAS,CAAA;AACb,QAAA,IAAI,SAAS,IAAA,CAAK,QAAA;AAClB,QAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAC7B,QAAA,MAAM,GAAA,GAAM,CAAA,CAAE,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,IAAK,KAAA;AAC/B,QAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAChC,UAAA,MAAM,GAAA,GAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AACvB,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAAA,UACtE;AACA,UAAA,IAAI,GAAA,GAAM,CAAA,IAAK,GAAA,IAAOF,SAAAA,EAAU;AAC9B,YAAA,MAAM,IAAI,qBAAA;AAAA,cACR,+CAAA;AAAA,cACA,GAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AACA,UAAA,MAAM,GAAA,GAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AACpB,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,sCAAsC,CAAA;AAAA,UAC/D;AACA,UAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,UAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,YAAA,MAAA,GAAS,GAAA;AACT,YAAA,MAAA,GAAS,GAAA;AAAA,UACX;AAAA,QACF;AAEA,QAAA,IAAI,MAAA,IAAU,KAAK,QAAA,EAAU;AAC3B,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,oCAAoC,CAAC,CAAA,kDAAA,CAAA;AAAA,YACrC;AAAA,WACF;AAAA,QACF;AACA,QAAAE,QAAO,CAAC,CAAA,GAAI,eAAA,CAAgBD,QAAAA,EAAS,QAAQ,iCAAiC,CAAA;AAAA,MAChF;AACA,MAAA,OAAO,sBAAA,CAAuBC,SAAQ,GAAG,CAAA;AAAA,IAC3C;AAEA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,MAAM,CAAC,QAAA,EAAU,KAAK,CAAA,GAAI,WAAW,CAAC,CAAA;AAEtC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,EAAU,MAAA,IAAU,CAAA;AAC1C,IAAA,IAAI,UAAU,QAAA,EAAU;AACtB,MAAA,MAAM,IAAI,qBAAA,CAAsB,+CAAA,EAAiD,GAAA,EAAK,KAAK,CAAA;AAAA,IAC7F;AACA,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,aAAa,uDAAuD,CAAA;AAAA,IAChF;AACA,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO,8BAAA,CAA+B,SAAS,GAAG,CAAA;AAAA,IACpD;AACA,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAgB,QAAQ,CAAA;AAC3C,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,eAAe,CAAC,CAAA;AAG7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,IAAI,MAAA,GAAS,CAAA;AACb,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,MAAM,KAAA,GAAQ,KAAK,OAAO,CAAA;AAC1B,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,MAC9E;AACA,MAAA,IAAI,MAAA,GAAS,OAAO,KAAK,CAAA;AAGzB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,UAAA,MAAA,GAAS,GAAA;AACT,UAAA,MAAA,GAAS,CAAA;AAAA,QACX;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,IAAU,KAAK,QAAA,EAAU;AAC3B,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,oCAAoC,CAAC,CAAA,kDAAA,CAAA;AAAA,UACrC;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,eAAA,CAAgB,OAAA,EAAS,QAAQ,iCAAiC,CAAA;AAAA,IAChF;AAGA,IAAA,OAAO,sBAAA,CAAuB,QAAQ,GAAG,CAAA;AAAA,EAC3C;AACF;AA0BO,IAAM,sBAAN,MAA0B;AAAA;AAAA,EAEvB,MAAA,GAAS,KAAA;AAAA;AAAA,EAET,QAAA;AAAA;AAAA,EAEA,aAAA;AAAA;AAAA,EAEA,MAAA;AAAA;AAAA,EAEA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR,WAAA,CACE,OAAA,GAII,EAAC,EACL;AACA,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,YAAA,IAAgB,KAAA;AAC/D,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAa,OAAA,CAAQ,iBAAiB,MAAA,EAAW;AACtE,MAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,OAAA,CAAQ,YAAA,EAAc;AAC3C,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,2DAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,CAAQ;AAAA,SACV;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA;AACd,IAAA,IAAI,OAAO,IAAA,CAAK,MAAA,KAAW,SAAA,EAAW;AACpC,MAAA,MAAM,IAAI,qBAAA,CAAsB,0BAAA,EAA4B,QAAA,EAAU,KAAK,MAAM,CAAA;AAAA,IACnF;AACA,IAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,MAAA,IAAA,CAAK,aAAA,GAAgB,sBAAA,CAAuB,OAAA,CAAQ,OAAA,EAAS,SAAS,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,CAAA,EAAiD;AACnD,IAAA,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AAClB,MAAA,MAAM,IAAI,qBAAA,CAAsB,+CAAA,EAAiD,GAAG,CAAA;AAAA,IACtF;AACA,IAAA,KAAA,MAAW,UAAU,CAAA,EAAG;AACtB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1B,QAAA,MAAM,IAAI,qBAAA,CAAsB,0CAAA,EAA4C,GAAA,EAAK,MAAM,CAAA;AAAA,MACzF;AACA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AACvF,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,iEAAA;AAAA,YACA,GAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA,EAAG;AACzD,MAAA,MAAM,IAAI,qBAAA,CAAsB,yCAAA,EAA2C,SAAS,CAAA;AAAA,IACtF;AAEA,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,IAAA,CAAK,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA;AAAA,IAC/C,CAAA,MAAO;AAEL,MAAA,MAAM,SAAA,uBAAgB,GAAA,EAAc;AACpC,MAAA,KAAA,MAAW,UAAU,CAAA,EAAG;AACtB,QAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,QACrB;AAAA,MACF;AAGA,MAAA,IAAA,CAAK,QAAA,GAAW,cAAA,CAAe,SAAA,EAAW,GAAG,CAAA;AAAA,IAC/C;AACA,IAAA,IAAA,CAAK,aAAA,uBAAoB,GAAA,EAAI;AAC7B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC7C,MAAA,IAAA,CAAK,aAAA,CAAc,IAAI,eAAA,CAAgB,IAAA,CAAK,UAAU,CAAA,EAAG,yBAAyB,GAAG,CAAC,CAAA;AAAA,IACxF;AACA,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,KAAA,MAAW,UAAU,CAAA,EAAG;AACtB,QAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,EAAG;AAClC,YAAA,MAAM,IAAI,qBAAA;AAAA,cACR,CAAA,eAAA,EAAkB,MAAA,CAAO,KAAK,CAAC,CAAA,mCAAA,CAAA;AAAA,cAC/B,GAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,CAAA,EAA+D;AACvE,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,qDAAqD,CAAA;AAAA,IAChF;AACA,IAAA,KAAA,MAAW,UAAU,CAAA,EAAG;AACtB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1B,QAAA,MAAM,IAAI,qBAAA,CAAsB,0CAAA,EAA4C,GAAA,EAAK,MAAM,CAAA;AAAA,MACzF;AACA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AACvF,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,iEAAA;AAAA,YACA,GAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AAClB,MAAA,MAAMF,SAAAA,GAAW,IAAA,CAAK,QAAA,EAAU,MAAA,IAAU,CAAA;AAC1C,MAAA,OAAO,IAAA,CAAK,MAAA,GACR,SAAA,CAAU,OAAA,CAAQ;AAAA,QAChB,IAAA,EAAM,CAAA;AAAA,QACN,IAAA,EAAMA,SAAAA;AAAA,QACN,UAAA,EAAY,IAAI,UAAA,CAAW,CAAC,CAAA;AAAA,QAC5B,UAAA,EAAY,IAAI,UAAA,CAAW,CAAC,CAAA;AAAA,QAC5B,MAAA,EAAQ,IAAI,YAAA,CAAa,CAAC;AAAA,OAC3B,CAAA,GACD,KAAA,CAAM,CAAC,CAAA,EAAGA,SAAQ,CAAA,EAAG,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,WAAW,CAAA,CAAE,MAAA;AACnB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,EAAU,MAAA,IAAU,CAAA;AAC1C,IAAA,MAAM,SAAS,IAAA,CAAK,aAAA;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,aAAa,2DAA2D,CAAA;AAAA,IACpF;AAEA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,MAAM,OAAiB,EAAC;AAExB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,MAAM,IAAA,GAAO,EAAE,CAAC,CAAA;AAChB,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,QAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,UAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAC5B,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,qBAAA;AAAA,cACR,CAAA,eAAA,EAAkB,MAAA,CAAO,KAAK,CAAC,CAAA,mCAAA,CAAA;AAAA,cAC/B,GAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AACA,UAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,UAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,UAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AACb,UAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AACf,UAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,QACb;AAAA,MACF;AAEA,MAAA,OAAO,UAAU,OAAA,CAAQ;AAAA,QACvB,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAAA,QAClC,UAAA,EAAY,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAAA,QAClC,MAAA,EAAQ,YAAA,CAAa,IAAA,CAAK,IAAI;AAAA,OAC/B,CAAA;AAAA,IACH;AAGA,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAgB,QAAQ,CAAA;AAC3C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAI,MAAc,QAAQ,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,IAChD;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,IAAA,GAAO,EAAE,CAAC,CAAA;AAChB,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAC5B,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,CAAA,eAAA,EAAkB,MAAA,CAAO,KAAK,CAAC,CAAA,mCAAA,CAAA;AAAA,YAC/B,GAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAEA,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,CAAA;AAAA,MACb;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,CAAA,EAA+D;AAC1E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,iBAAiB,CAAA,EAAqC;AACpD,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,6DAA6D,CAAA;AAAA,IACxF;AACA,IAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,MAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,CAAA,CAAE,KAAA;AACvB,MAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,MAAA,EAAW;AAC5C,QAAA,MAAM,IAAI,WAAW,yBAAyB,CAAA;AAAA,MAChD;AACA,MAAA,MAAMG,cAAAA,GAAgB,IAAA,CAAK,QAAA,EAAU,MAAA,IAAU,CAAA;AAC/C,MAAA,IAAI,SAASA,cAAAA,EAAe;AAC1B,QAAA,MAAM,IAAI,qBAAA,CAAsB,+CAAA,EAAiD,GAAA,EAAK,IAAI,CAAA;AAAA,MAC5F;AACA,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,MAAMF,WAAU,IAAA,CAAK,QAAA;AACrB,MAAA,IAAI,CAACA,QAAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAa,4DAA4D,CAAA;AAAA,MACrF;AAEA,MAAA,MAAMC,UAAuB,EAAC;AAC9B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,QAAA,MAAM,SAAqB,EAAC;AAC5B,QAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAC7B,QAAA,MAAM,GAAA,GAAM,CAAA,CAAE,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,IAAK,KAAA;AAC/B,QAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAChC,UAAA,MAAM,GAAA,GAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AACvB,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAAA,UACtE;AACA,UAAA,IAAI,GAAA,GAAM,CAAA,IAAK,GAAA,IAAOC,cAAAA,EAAe;AACnC,YAAA,MAAM,IAAI,qBAAA;AAAA,cACR,+CAAA;AAAA,cACA,GAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AACA,UAAA,MAAM,GAAA,GAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AACpB,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,sCAAsC,CAAA;AAAA,UAC/D;AACA,UAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,UAAA,IAAI,QAAQ,CAAA,EAAG;AACb,YAAA,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgBF,QAAAA,EAAS,GAAA,EAAK,sCAAsC,CAAC,CAAA;AAAA,UACnF;AAAA,QACF;AACA,QAAAC,OAAAA,CAAO,KAAK,MAAM,CAAA;AAAA,MACpB;AACA,MAAA,OAAOA,OAAAA;AAAA,IACT;AAEA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,MAAM,QAAA,GAAW,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA;AAC/B,IAAA,MAAM,QAAA,GAAW,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA;AAC/B,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,EAAU,MAAA,IAAU,CAAA;AAC/C,IAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,+CAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,aAAa,4DAA4D,CAAA;AAAA,IACrF;AAEA,IAAA,MAAM,SAAuB,EAAC;AAC9B,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,eAAe,CAAC,CAAA;AAG7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,SAAqB,EAAC;AAC5B,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAG/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AAEtB,QAAA,IAAI,MAAM,CAAA,EAAG;AACX,UAAA,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,CAAA,EAAG,sCAAsC,CAAC,CAAA;AAAA,QACjF;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,IACpB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACpgEA,SAASE,eAAAA,CAAe,GAAW,IAAA,EAA0C;AAC3E,EAAA,IAAI,CAAA,CAAE,UAAU,QAAA,EAAU;AACxB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,EAAG,IAAI,CAAA,gBAAA,CAAkB,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,CAAA,CAAE,IAAA;AACX;AAEA,SAAS,kBAAA,CAAmB,KAAA,EAAgB,IAAA,EAAc,YAAA,EAAgC;AACxF,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,YAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,MAAM,IAAI,qBAAA,CAAsB,CAAA,EAAG,IAAI,CAAA,kBAAA,CAAA,EAAsB,MAAM,KAAK,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,GAAW,IAAA,EAAoB;AACzD,EAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,IAAI,CAAA;AACnC,EAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,IAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,MAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,QAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,MAC9E;AACA,MAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,QAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,EAAG,IAAI,CAAA,mCAAA,EAAsC,SAAS,CAAA,CAAE,CAAA;AAAA,MACxF;AACA,MAAA,SAAA,IAAa,CAAA;AAAA,IACf;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,KAAA,EAAuB;AAC/C,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,GAAG,OAAO,KAAA;AACpC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAChC,EAAA,IAAI,KAAK,GAAA,CAAI,KAAA,GAAQ,OAAO,CAAA,GAAI,OAAO,OAAO,OAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,IAAI,CAAA,GAAI,IAAA;AAC1C,EAAA,IAAI,KAAK,GAAA,CAAI,KAAA,GAAQ,MAAM,CAAA,GAAI,OAAO,OAAO,MAAA;AAC7C,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAe,CAAA,EAAmB;AACzC,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,CAAC,KAAK,CAAA,IAAK,CAAA,IAAK,KAAK,CAAA,EAAG;AAC3C,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,uDAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,EAAA,GAAK,kBAAA;AACX,EAAA,MAAM,EAAA,GAAK,iBAAA;AACX,EAAA,MAAM,EAAA,GAAK,kBAAA;AACX,EAAA,MAAM,EAAA,GAAK,gBAAA;AACX,EAAA,MAAM,EAAA,GAAK,kBAAA;AACX,EAAA,MAAM,EAAA,GAAK,iBAAA;AAEX,EAAA,MAAM,EAAA,GAAK,kBAAA;AACX,EAAA,MAAM,EAAA,GAAK,iBAAA;AACX,EAAA,MAAM,EAAA,GAAK,kBAAA;AACX,EAAA,MAAM,EAAA,GAAK,iBAAA;AACX,EAAA,MAAM,EAAA,GAAK,kBAAA;AAEX,EAAA,MAAM,EAAA,GAAK,qBAAA;AACX,EAAA,MAAM,EAAA,GAAK,mBAAA;AACX,EAAA,MAAM,EAAA,GAAK,kBAAA;AACX,EAAA,MAAM,EAAA,GAAK,kBAAA;AACX,EAAA,MAAM,EAAA,GAAK,iBAAA;AACX,EAAA,MAAM,EAAA,GAAK,iBAAA;AAEX,EAAA,MAAM,EAAA,GAAK,oBAAA;AACX,EAAA,MAAM,EAAA,GAAK,kBAAA;AACX,EAAA,MAAM,EAAA,GAAK,iBAAA;AACX,EAAA,MAAM,EAAA,GAAK,iBAAA;AAEX,EAAA,MAAM,IAAA,GAAO,OAAA;AACb,EAAA,MAAM,QAAQ,CAAA,GAAI,IAAA;AAElB,EAAA,IAAI,IAAI,IAAA,EAAM;AACZ,IAAA,MAAMC,KAAI,IAAA,CAAK,IAAA,CAAK,KAAK,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AACpC,IAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CACO,KAAKA,EAAAA,GAAI,EAAA,IAAMA,KAAI,EAAA,IAAMA,EAAAA,GAAI,MAAMA,EAAAA,GAAI,EAAA,IAAMA,EAAAA,GAAI,EAAA,KAAA,CAAA,CAAA,CAClD,KAAKA,EAAAA,GAAI,EAAA,IAAMA,KAAI,EAAA,IAAMA,EAAAA,GAAI,MAAMA,EAAAA,GAAI,CAAA,CAAA;AAAA,EAE/C;AACA,EAAA,IAAI,IAAI,KAAA,EAAO;AACb,IAAA,MAAMA,EAAAA,GAAI,KAAK,IAAA,CAAK,EAAA,GAAK,KAAK,GAAA,CAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AACxC,IAAA,OAAO,OACA,EAAA,GAAKA,EAAAA,GAAI,MAAMA,EAAAA,GAAI,EAAA,IAAMA,KAAI,EAAA,IAAMA,EAAAA,GAAI,MAAMA,EAAAA,GAAI,EAAA,KAAA,CAAA,CAAA,CAClD,KAAKA,EAAAA,GAAI,EAAA,IAAMA,KAAI,EAAA,IAAMA,EAAAA,GAAI,MAAMA,EAAAA,GAAI,CAAA,CAAA,CAAA;AAAA,EAE/C;AAEA,EAAA,MAAM,IAAI,CAAA,GAAI,GAAA;AACd,EAAA,MAAM,IAAI,CAAA,GAAI,CAAA;AACd,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CACQ,EAAA,GAAK,IAAI,EAAA,IAAM,CAAA,GAAI,MAAM,CAAA,GAAI,EAAA,IAAM,IAAI,EAAA,IAAM,CAAA,GAAI,MAAM,CAAA,IAAA,CAAA,CAAA,CAAA,CACxD,EAAA,GAAK,IAAI,EAAA,IAAM,CAAA,GAAI,MAAM,CAAA,GAAI,EAAA,IAAM,CAAA,GAAI,EAAA,IAAM,CAAA,GAAI,CAAA,CAAA;AAE1D;AAwBO,IAAM,iBAAN,MAAqB;AAAA,EAClB,MAAA,GAAS,KAAA;AAAA,EACT,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR,WAAA,CAAY,OAAA,GAAqE,EAAC,EAAG;AACnF,IAAA,IAAA,CAAK,QAAA,GAAW,kBAAA,CAAmB,OAAA,CAAQ,QAAA,EAAU,YAAY,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,OAAA,GAAU,kBAAA,CAAmB,OAAA,CAAQ,OAAA,EAAS,WAAW,IAAI,CAAA;AAClE,IAAA,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,EAC/C;AAAA,EAEA,IAAI,CAAA,EAAiB;AACnB,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,qBAAA,CAAsB,oCAAA,EAAsC,GAAG,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOD,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,OAAA,EAAS;AACjC,MAAA,KAAA,GAAQ,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,KAAK,CAAC,CAAA;AAC3C,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,IAAI,GAAA,GAAM,CAAA;AACV,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,UAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,UAC9E;AACA,UAAA,GAAA,IAAO,OAAO,GAAG,CAAA;AAAA,QACnB;AACA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,KAAA,CAAM,CAAC,IAAI,GAAA,GAAM,QAAA;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,MAAM,OAAO,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,KAAK,CAAC,CAAA;AAChD,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,IAAA,GAAO,KAAA,GAAS,KAAA,CAAM,CAAC,KAAK,CAAA,GAAK,CAAA;AACvC,QAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,UAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,UAC9E;AACA,UAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAC1B,UAAA,KAAA,IAAS,GAAA,GAAM,GAAA;AAAA,QACjB;AACA,QAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAAA,MACtC;AACA,MAAA,IAAA,CAAK,SAAS,MAAA,CAAO,IAAA,EAAM,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,IAChB;AAEA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,QAAA,IAAY,KAAA,GAAQ,MAAA,CAAO,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA,GAAI,MAAA;AAE5E,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,CAAA,EAAmB;AAC3B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,gDAAgD,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA;AAClB,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,MAAM,QAAA,GAAW,IAAA,GAAOA,eAAAA,CAAe,IAAA,EAAM,OAAO,CAAA,GAAI,MAAA;AACxD,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQA,eAAAA,CAAe,KAAA,EAAO,QAAQ,CAAA,GAAI,MAAA;AAC5D,IAAA,MAAM,UAAA,GAAa,IAAA,GAAO,WAAA,CAAY,IAAI,CAAA,GAAI,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,KAAA,GAAQ,WAAA,CAAY,KAAK,CAAA,GAAI,CAAA;AAEjD,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,CAAC,IAAA,EAAM;AAC1B,MAAA,MAAM,IAAI,aAAa,8CAA8C,CAAA;AAAA,IACvE;AACA,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,CAAC,KAAA,EAAO;AAC1B,MAAA,MAAM,IAAI,aAAa,+CAA+C,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,IAAI,GAAA,GAAM,OAAO,GAAG,CAAA;AAEpB,QAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,IAAQ,QAAA,EAAU;AACrC,UAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,IAAI,UAAU,CAAA;AACvD,UAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,YAAA,MAAM,IAAI,aAAa,kDAAkD,CAAA;AAAA,UAC3E;AACA,UAAA,GAAA,IAAO,OAAO,SAAS,CAAA;AAAA,QACzB;AAEA,QAAA,IAAI,IAAA,CAAK,OAAA,IAAW,KAAA,IAAS,SAAA,EAAW;AACtC,UAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,MAAA,GAAS,IAAI,WAAW,CAAA;AACzD,UAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,YAAA,MAAM,IAAI,aAAa,mDAAmD,CAAA;AAAA,UAC5E;AACA,UAAA,MAAM,GAAA,GAAM,OAAO,QAAQ,CAAA;AAC3B,UAAA,MAAM,OAAA,GAAU,GAAA,KAAQ,CAAA,GAAI,CAAA,GAAI,GAAA;AAChC,UAAA,GAAA,IAAO,OAAA;AAAA,QACT;AAEA,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA,EAEA,aAAa,CAAA,EAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AAAA,EAEA,iBAAiB,CAAA,EAAmB;AAClC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,wDAAwD,CAAA;AAAA,IACnF;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA;AAClB,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,MAAM,QAAA,GAAW,IAAA,GAAOA,eAAAA,CAAe,IAAA,EAAM,OAAO,CAAA,GAAI,MAAA;AACxD,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQA,eAAAA,CAAe,KAAA,EAAO,QAAQ,CAAA,GAAI,MAAA;AAC5D,IAAA,MAAM,UAAA,GAAa,IAAA,GAAO,WAAA,CAAY,IAAI,CAAA,GAAI,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,KAAA,GAAQ,WAAA,CAAY,KAAK,CAAA,GAAI,CAAA;AAEjD,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,CAAC,IAAA,EAAM;AAC1B,MAAA,MAAM,IAAI,aAAa,8CAA8C,CAAA;AAAA,IACvE;AACA,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,CAAC,KAAA,EAAO;AAC1B,MAAA,MAAM,IAAI,aAAa,+CAA+C,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,IAAI,GAAA,GAAM,OAAO,GAAG,CAAA;AAEpB,QAAA,IAAI,IAAA,CAAK,OAAA,IAAW,KAAA,IAAS,SAAA,EAAW;AACtC,UAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,MAAA,GAAS,IAAI,WAAW,CAAA;AACzD,UAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,YAAA,MAAM,IAAI,aAAa,mDAAmD,CAAA;AAAA,UAC5E;AACA,UAAA,MAAM,GAAA,GAAM,OAAO,QAAQ,CAAA;AAC3B,UAAA,MAAM,OAAA,GAAU,GAAA,KAAQ,CAAA,GAAI,CAAA,GAAI,GAAA;AAChC,UAAA,GAAA,IAAO,OAAA;AAAA,QACT;AAEA,QAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,IAAQ,QAAA,EAAU;AACrC,UAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,IAAI,UAAU,CAAA;AACvD,UAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,YAAA,MAAM,IAAI,aAAa,kDAAkD,CAAA;AAAA,UAC3E;AACA,UAAA,GAAA,IAAO,OAAO,SAAS,CAAA;AAAA,QACzB;AAEA,QAAA,MAAM,SAAA,GAAY,OAAO,CAAC,CAAA;AAC1B,QAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,SAAA,CAAU,CAAC,CAAA,GAAI,gBAAA,CAAiB,GAAG,CAAA;AAAA,MACrC;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AACF;AASO,IAAM,eAAN,MAAmB;AAAA,EAChB,MAAA,GAAS,KAAA;AAAA,EACT,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR,WAAA,CACE,OAAA,GAII,EAAC,EACL;AACA,IAAA,IAAA,CAAK,YAAA,GAAe,OAAA,CAAQ,YAAA,IAAgB,CAAC,GAAG,CAAC,CAAA;AACjD,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,QAAQ,KAAK,CAAA;AAC1D,IAAA,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA;AAC7C,IAAA,MAAM,CAAC,QAAA,EAAU,QAAQ,CAAA,GAAI,IAAA,CAAK,YAAA;AAClC,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA,IAAY,QAAA,EAAU;AACpF,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,gDAAA;AAAA,QACA,cAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,CAAA,EAAiB;AACnB,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,qBAAA,CAAsB,oCAAA,EAAsC,GAAG,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,MAAM,OAAO,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,OAAO,iBAAiB,CAAA;AACvE,IAAA,MAAM,OAAO,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,OAAO,iBAAiB,CAAA;AAEvE,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,MAAM,UAAA,GAAa,KAAK,CAAC,CAAA;AACzB,QAAA,MAAM,UAAA,GAAa,KAAK,CAAC,CAAA;AACzB,QAAA,IAAI,UAAA,KAAe,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW;AACxD,UAAA,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAAA,QACtE;AACA,QAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,YAAY,GAAG,CAAA;AAClC,QAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,YAAY,GAAG,CAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,IAAA,EAAM,EAAE,KAAA,EAAO,WAAW,CAAA;AACjD,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,IAAA,EAAM,EAAE,KAAA,EAAO,WAAW,CAAA;AACjD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,CAAA,EAAmB;AAC3B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,8CAA8C,CAAA;AAAA,IACzE;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,CAAC,QAAA,EAAU,QAAQ,CAAA,GAAI,IAAA,CAAK,YAAA;AAClC,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AAErB,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AACxB,MAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,IAC9E;AACA,IAAA,MAAM,OAAA,GAAUA,eAAAA,CAAe,OAAA,EAAS,UAAU,CAAA;AAClD,IAAA,MAAM,OAAA,GAAUA,eAAAA,CAAe,OAAA,EAAS,UAAU,CAAA;AAClD,IAAA,MAAM,SAAA,GAAY,YAAY,OAAO,CAAA;AACrC,IAAA,MAAM,SAAA,GAAY,YAAY,OAAO,CAAA;AAErC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,IAAI,SAAS,CAAA;AACrD,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,IAAI,SAAS,CAAA;AACrD,QAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,MAAA,EAAW;AAChD,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,MAAM,CAAA;AACzB,QAAA,MAAM,GAAA,GAAM,OAAO,MAAM,CAAA;AACzB,QAAA,MAAM,QAAQ,GAAA,GAAM,GAAA;AAEpB,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,IAAI,MAAA,GACF,UAAU,CAAA,GAAA,CAAM,GAAA,GAAM,OAAO,KAAA,IAAU,QAAA,GAAW,YAAY,QAAA,GAAW,QAAA;AAC3E,QAAA,IAAI,KAAK,IAAA,EAAM;AACb,UAAA,MAAA,GAAS,KAAK,GAAA,CAAI,QAAA,EAAU,KAAK,GAAA,CAAI,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,QACxD;AACA,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA,EAEA,aAAa,CAAA,EAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AAAA,EAEA,iBAAiB,CAAA,EAAmB;AAClC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,sDAAsD,CAAA;AAAA,IACjF;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,CAAC,QAAA,EAAU,QAAQ,CAAA,GAAI,IAAA,CAAK,YAAA;AAClC,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AAErB,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AACxB,MAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,IAC9E;AACA,IAAA,MAAM,OAAA,GAAUA,eAAAA,CAAe,OAAA,EAAS,UAAU,CAAA;AAClD,IAAA,MAAM,OAAA,GAAUA,eAAAA,CAAe,OAAA,EAAS,UAAU,CAAA;AAClD,IAAA,MAAM,SAAA,GAAY,YAAY,OAAO,CAAA;AACrC,IAAA,MAAM,SAAA,GAAY,YAAY,OAAO,CAAA;AAErC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,IAAI,SAAS,CAAA;AACrD,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,IAAI,SAAS,CAAA;AACrD,QAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,MAAA,EAAW;AAChD,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,MAAM,CAAA;AACzB,QAAA,MAAM,GAAA,GAAM,OAAO,MAAM,CAAA;AACzB,QAAA,MAAM,QAAQ,GAAA,GAAM,GAAA;AAEpB,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,GAAA,CAAI,CAAC,CAAA,GAAA,CAAM,GAAA,GAAM,QAAA,KAAa,QAAA,GAAW,YAAa,KAAA,GAAQ,GAAA;AAAA,MAChE;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AACF;AASO,IAAM,eAAN,MAAmB;AAAA,EAChB,MAAA,GAAS,KAAA;AAAA,EACT,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQR,WAAA,CAAY,OAAA,GAA8B,EAAC,EAAG;AAC5C,IAAA,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,EAC/C;AAAA,EAEA,IAAI,CAAA,EAAiB;AACnB,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,qBAAA,CAAsB,oCAAA,EAAsC,GAAG,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,MAAM,SAAS,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,KAAK,CAAC,CAAA;AAElD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;AAC3B,QAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,UAAA,MAAM,IAAI,aAAa,4CAA4C,CAAA;AAAA,QACrE;AACA,QAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,KAAK,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAAA,MACxD;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAW,CAAA;AAClD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,CAAA,EAAmB;AAC3B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,8CAA8C,CAAA;AAAA,IACzE;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,IAC7E;AACA,IAAA,MAAM,OAAA,GAAUA,eAAAA,CAAe,MAAA,EAAQ,SAAS,CAAA;AAChD,IAAA,MAAM,SAAA,GAAY,YAAY,MAAM,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,IAAI,SAAS,CAAA;AACtD,QAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,UAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,QAC7E;AACA,QAAA,MAAM,KAAA,GAAQ,OAAO,QAAQ,CAAA;AAC7B,QAAA,MAAM,SAAA,GAAY,KAAA,KAAU,CAAA,GAAI,CAAA,GAAI,KAAA;AACpC,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,GAAA,CAAI,CAAC,IAAI,GAAA,GAAM,SAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA,EAEA,aAAa,CAAA,EAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AAAA,EAEA,iBAAiB,CAAA,EAAmB;AAClC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,sDAAsD,CAAA;AAAA,IACjF;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,IAC7E;AACA,IAAA,MAAM,OAAA,GAAUA,eAAAA,CAAe,MAAA,EAAQ,SAAS,CAAA;AAChD,IAAA,MAAM,SAAA,GAAY,YAAY,MAAM,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,IAAI,SAAS,CAAA;AACtD,QAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,UAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,QAC7E;AACA,QAAA,MAAM,KAAA,GAAQ,OAAO,QAAQ,CAAA;AAC7B,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,GAAA,CAAI,CAAC,IAAI,GAAA,GAAM,KAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AACF;AASO,IAAM,eAAN,MAAmB;AAAA,EAChB,MAAA,GAAS,KAAA;AAAA,EACT,OAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYR,WAAA,CACE,OAAA,GAMI,EAAC,EACL;AACA,IAAA,IAAA,CAAK,aAAA,GAAgB,kBAAA,CAAmB,OAAA,CAAQ,aAAA,EAAe,iBAAiB,IAAI,CAAA;AACpF,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,OAAA,CAAQ,WAAA,EAAa,eAAe,IAAI,CAAA;AAC9E,IAAA,IAAA,CAAK,aAAA,GAAgB,OAAA,CAAQ,aAAA,IAAiB,CAAC,IAAI,EAAE,CAAA;AACrD,IAAA,IAAA,CAAK,YAAA,GAAe,kBAAA,CAAmB,OAAA,CAAQ,YAAA,EAAc,gBAAgB,KAAK,CAAA;AAClF,IAAA,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA;AAC7C,IAAA,MAAM,CAAC,KAAA,EAAO,KAAK,CAAA,GAAI,IAAA,CAAK,aAAA;AAC5B,IAAA,IACE,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,KACtB,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,KACtB,KAAA,GAAQ,CAAA,IACR,KAAA,GAAQ,GAAA,IACR,SAAS,KAAA,EACT;AACA,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,0DAAA;AAAA,QACA,eAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,CAAA,EAAiB;AACnB,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,qBAAA,CAAsB,oCAAA,EAAsC,GAAG,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,MAAM,UAAU,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,KAAK,CAAC,CAAA;AACnD,IAAA,MAAM,SAAS,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,KAAK,CAAC,CAAA;AAGlD,IAAA,MAAM,CAAC,eAAA,EAAiB,eAAe,CAAA,GAAI,IAAA,CAAK,aAAA;AAChD,IAAA,MAAM,gBAAgB,eAAA,GAAkB,GAAA;AACxC,IAAA,MAAM,gBAAgB,eAAA,GAAkB,GAAA;AACxC,IAAA,MAAM,UAAA,GAAa,KAAK,YAAA,GACpB,cAAA,CAAe,aAAa,CAAA,GAAI,cAAA,CAAe,aAAa,CAAA,GAC5D,CAAA;AACJ,IAAA,IAAI,IAAA,CAAK,iBAAiB,CAAC,MAAA,CAAO,SAAS,UAAU,CAAA,IAAK,cAAc,CAAA,CAAA,EAAI;AAC1E,MAAA,MAAM,IAAI,aAAa,+DAA+D,CAAA;AAAA,IACxF;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACzB;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AAE3B,MAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAsB;AACzC,QAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,UAAA,MAAM,IAAI,aAAa,iDAAiD,CAAA;AAAA,QAC1E;AACA,QAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,UAAA,MAAM,IAAA,GAAO,OAAO,CAAC,CAAA;AACrB,UAAA,IAAI,SAAS,MAAA,EAAW;AACtB,YAAA,MAAM,IAAI,aAAa,sCAAsC,CAAA;AAAA,UAC/D;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AAEA,QAAA,MAAM,QAAA,GAAW,CAAA,IAAK,MAAA,CAAO,MAAA,GAAS,CAAA,CAAA;AACtC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACjC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA;AAChC,QAAA,MAAM,UAAA,GAAa,OAAO,KAAK,CAAA;AAC/B,QAAA,MAAM,UAAA,GAAa,OAAO,KAAK,CAAA;AAC/B,QAAA,IAAI,UAAA,KAAe,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW;AACxD,UAAA,MAAM,IAAI,aAAa,4DAA4D,CAAA;AAAA,QACrF;AACA,QAAA,IAAI,UAAU,KAAA,EAAO;AACnB,UAAA,OAAO,UAAA;AAAA,QACT;AACA,QAAA,MAAM,SAAS,QAAA,GAAW,KAAA;AAC1B,QAAA,OAAO,UAAA,IAAc,CAAA,GAAI,MAAA,CAAA,GAAU,UAAA,GAAa,MAAA;AAAA,MAClD,CAAA;AAGA,MAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,WAAA,CAAY,GAAG,CAAA;AAC5B,MAAA,MAAM,MAAA,GAAS,YAAY,aAAa,CAAA;AACxC,MAAA,MAAM,MAAA,GAAS,YAAY,aAAa,CAAA;AACxC,MAAA,MAAM,MAAM,MAAA,GAAS,MAAA;AACrB,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAA,CAAK,YAAA,GAAe,MAAM,UAAA,GAAa,GAAA;AAAA,IACrD;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,KAAK,aAAA,GAAgB,MAAA,CAAO,SAAS,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA,GAAI,MAAA;AAC5E,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,WAAA,GAAc,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA,GAAI,MAAA;AACxE,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,CAAA,EAAmB;AAC3B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,8CAA8C,CAAA;AAAA,IACzE;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA;AACpB,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,MAAM,UAAA,GAAa,MAAA,GAASA,eAAAA,CAAe,MAAA,EAAQ,SAAS,CAAA,GAAI,MAAA;AAChE,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQA,eAAAA,CAAe,KAAA,EAAO,QAAQ,CAAA,GAAI,MAAA;AAC5D,IAAA,MAAM,YAAA,GAAe,MAAA,GAAS,WAAA,CAAY,MAAM,CAAA,GAAI,CAAA;AACpD,IAAA,MAAM,WAAA,GAAc,KAAA,GAAQ,WAAA,CAAY,KAAK,CAAA,GAAI,CAAA;AAEjD,IAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,CAAC,MAAA,EAAQ;AACjC,MAAA,MAAM,IAAI,aAAa,8CAA8C,CAAA;AAAA,IACvE;AACA,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,CAAC,KAAA,EAAO;AAC9B,MAAA,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,IAAI,GAAA,GAAM,OAAO,GAAG,CAAA;AAEpB,QAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,MAAA,IAAU,UAAA,EAAY;AAC9C,UAAA,MAAM,SAAA,GAAY,UAAA,CAAW,MAAA,CAAO,MAAA,GAAS,IAAI,YAAY,CAAA;AAC7D,UAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,YAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,UAC7E;AACA,UAAA,GAAA,IAAO,OAAO,SAAS,CAAA;AAAA,QACzB;AAEA,QAAA,IAAI,IAAA,CAAK,WAAA,IAAe,KAAA,IAAS,SAAA,EAAW;AAC1C,UAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,MAAA,GAAS,IAAI,WAAW,CAAA;AACzD,UAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,YAAA,MAAM,IAAI,aAAa,mDAAmD,CAAA;AAAA,UAC5E;AACA,UAAA,MAAM,UAAA,GAAa,OAAO,QAAQ,CAAA;AAClC,UAAA,MAAM,SAAA,GAAY,UAAA,KAAe,CAAA,GAAI,CAAA,GAAI,UAAA;AACzC,UAAA,GAAA,IAAO,SAAA;AAAA,QACT;AAEA,QAAA,MAAM,SAAA,GAAY,OAAO,CAAC,CAAA;AAC1B,QAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA,EAEA,aAAa,CAAA,EAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AAAA,EAEA,iBAAiB,CAAA,EAAmB;AAClC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,eAAe,sDAAsD,CAAA;AAAA,IACjF;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AACzC,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA;AACpB,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,MAAM,UAAA,GAAa,MAAA,GAASA,eAAAA,CAAe,MAAA,EAAQ,SAAS,CAAA,GAAI,MAAA;AAChE,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQA,eAAAA,CAAe,KAAA,EAAO,QAAQ,CAAA,GAAI,MAAA;AAC5D,IAAA,MAAM,YAAA,GAAe,MAAA,GAAS,WAAA,CAAY,MAAM,CAAA,GAAI,CAAA;AACpD,IAAA,MAAM,WAAA,GAAc,KAAA,GAAQ,WAAA,CAAY,KAAK,CAAA,GAAI,CAAA;AAEjD,IAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,CAAC,MAAA,EAAQ;AACjC,MAAA,MAAM,IAAI,aAAa,8CAA8C,CAAA;AAAA,IACvE;AACA,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,CAAC,KAAA,EAAO;AAC9B,MAAA,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,IAAI,GAAA,GAAM,OAAO,GAAG,CAAA;AAEpB,QAAA,IAAI,IAAA,CAAK,WAAA,IAAe,KAAA,IAAS,SAAA,EAAW;AAC1C,UAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,MAAA,GAAS,IAAI,WAAW,CAAA;AACzD,UAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,YAAA,MAAM,IAAI,aAAa,mDAAmD,CAAA;AAAA,UAC5E;AACA,UAAA,MAAM,UAAA,GAAa,OAAO,QAAQ,CAAA;AAClC,UAAA,MAAM,SAAA,GAAY,UAAA,KAAe,CAAA,GAAI,CAAA,GAAI,UAAA;AACzC,UAAA,GAAA,IAAO,SAAA;AAAA,QACT;AAEA,QAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,MAAA,IAAU,UAAA,EAAY;AAC9C,UAAA,MAAM,SAAA,GAAY,UAAA,CAAW,MAAA,CAAO,MAAA,GAAS,IAAI,YAAY,CAAA;AAC7D,UAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,YAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,UAC7E;AACA,UAAA,GAAA,IAAO,OAAO,SAAS,CAAA;AAAA,QACzB;AAEA,QAAA,MAAM,SAAA,GAAY,OAAO,CAAC,CAAA;AAC1B,QAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,SAAA,CAAU,CAAC,CAAA,GAAI,GAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AACF;AASO,IAAM,aAAN,MAAiB;AAAA,EACd,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASR,WAAA,CAAY,OAAA,GAA0D,EAAC,EAAG;AACxE,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,IAAA,IAAQ,IAAA;AAC5B,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,IAAQ,IAAA,CAAK,SAAS,IAAA,IAAQ,IAAA,CAAK,SAAS,KAAA,EAAO;AACnE,MAAA,MAAM,IAAI,qBAAA,CAAsB,kCAAA,EAAoC,MAAA,EAAQ,KAAK,IAAI,CAAA;AAAA,IACvF;AACA,IAAA,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,EAC/C;AAAA,EAEA,IAAI,EAAA,EAAkB;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,CAAA,EAAmB;AAC3B,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,IAAI,IAAA,GAAO,CAAA;AACX,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAE/B,MAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACtB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,UAC9E;AACA,UAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,UAAA,IAAA,IAAQ,GAAA,GAAM,GAAA;AAAA,QAChB;AACA,QAAA,IAAA,GAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,MACvB,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,IAAA,EAAM;AAC7B,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,UAC9E;AACA,UAAA,IAAA,IAAQ,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,QAC9B;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,KAAA,EAAO;AAC9B,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,UAC9E;AACA,UAAA,IAAA,GAAO,IAAA,CAAK,IAAI,IAAA,EAAM,IAAA,CAAK,IAAI,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAAA,QAC7C;AAAA,MACF;AAEA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,KAAS,CAAA,GAAI,MAAM,GAAA,GAAM,IAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA,EAEA,aAAa,CAAA,EAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,EACzB;AACF;AASO,IAAM,sBAAN,MAA0B;AAAA,EACvB,MAAA,GAAS,KAAA;AAAA,EACT,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYR,WAAA,CACE,OAAA,GAMI,EAAC,EACL;AACA,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,IAAc,GAAA;AACxC,IAAA,IAAA,CAAK,kBAAA,GAAqB,QAAQ,kBAAA,IAAsB,SAAA;AACxD,IAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,SAAA;AACzB,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA;AAC7C,IAAA,IACE,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA,IAChC,CAAC,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,UAAU,CAAA,IACjC,IAAA,CAAK,aAAa,CAAA,EAClB;AACA,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,+BAAA;AAAA,QACA,YAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,kBAAA,KAAuB,SAAA,IAAa,IAAA,CAAK,uBAAuB,QAAA,EAAU;AACjF,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,kDAAA;AAAA,QACA,oBAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAW;AAChC,MAAA,IACE,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,IAC/B,CAAC,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,IAChC,IAAA,CAAK,YAAY,CAAA,EACjB;AACA,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,mCAAA;AAAA,UACA,WAAA;AAAA,UACA,IAAA,CAAK;AAAA,SACP;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,CAAA,EAAiB;AACnB,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,qBAAA,CAAsB,oCAAA,EAAsC,GAAG,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,IAAA,CAAK,UAAA,uBAAiB,GAAA,EAAI;AAC1B,IAAA,MAAM,WAAA,GACJ,KAAK,SAAA,KAAc,MAAA,GAAY,KAAK,GAAA,CAAI,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAA,GAAI,QAAA;AACtE,IAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,YAAY,WAAW,CAAA;AACjE,IAAA,MAAM,aACJ,mBAAA,IAAuB,CAAA,GACnB,CAAC,GAAG,IACJ,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,qBAAoB,EAAG,CAAC,GAAG,CAAA,KAAM,CAAA,IAAK,sBAAsB,CAAA,CAAE,CAAA;AAEzF,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,aAAA,GAAgB,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,UAAS,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AAC5D,MAAA,MAAM,MAAA,GACJ,KAAK,WAAA,KAAgB,MAAA,GAAY,mBAAmB,IAAA,CAAK,WAAW,IAAI,IAAA,CAAK,MAAA;AAC/E,MAAA,qBAAA,CAAsB,eAAe,MAAM,CAAA;AAC3C,MAAA,aAAA,GAAgB,aAAA,CAAc,KAAA,CAAM,CAAA,EAAG,WAAW,CAAA;AAAA,IACpD;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,UAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,GAAA,GAAM,OAAA,GAAU,IAAI,OAAO,CAAA;AACvD,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,UAC9E;AACA,UAAA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,QACzB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,UAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,UAC9E;AACA,UAAA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,QACzB;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,CAAC,GAAG,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC/C,MAAA,MAAM,SAAA,GAAY,WAAW,GAAA,CAAI,CAAC,MAAM,IAAA,CAAK,qBAAA,CAAsB,MAAA,EAAQ,CAAC,CAAC,CAAA;AAC7E,MAAA,IAAA,CAAK,WAAW,GAAA,CAAI,CAAA,EAAG,EAAE,SAAA,EAAW,YAAY,CAAA;AAAA,IAClD;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,CAAA,EAAmB;AAC3B,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,UAAA,EAAY;AACpC,MAAA,MAAM,IAAI,eAAe,qDAAqD,CAAA;AAAA,IAChF;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,GAAG,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAgB,QAAQ,CAAA;AAC3C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAI,KAAA,CAAc,SAAS,CAAA;AAAA,IACzC;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA;AACrC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,YAAA,CAAa,CAAA,qDAAA,EAAwD,CAAC,CAAA,CAAE,CAAA;AAAA,MACpF;AAEA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,MAAM,WAAW,IAAA,CAAK,kBAAA,CAAmB,KAAK,OAAA,CAAQ,SAAA,EAAW,QAAQ,UAAU,CAAA;AAEnF,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AAEA,QAAA,IAAI,IAAA,CAAK,uBAAuB,SAAA,EAAW;AACzC,UAAA,GAAA,CAAI,CAAC,CAAA,GAAI,QAAA;AAAA,QACX,CAAA,MAAO;AAGL,UAAA,MAAM,eAAA,GAAkB,KAAK,GAAA,CAAI,IAAA,EAAM,KAAK,GAAA,CAAI,CAAA,GAAI,IAAA,EAAM,QAAQ,CAAC,CAAA;AACnE,UAAA,MAAM,CAAA,GAAI,KAAK,IAAA,CAAK,CAAC,IAAI,IAAA,CAAK,MAAA,CAAO,CAAA,GAAI,eAAA,GAAkB,CAAC,CAAA;AAC5D,UAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,iBAAiB,CAAA,EAAmB;AAClC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,UAAA,EAAY;AACpC,MAAA,MAAM,IAAI,eAAe,6DAA6D,CAAA;AAAA,IACxF;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,SAAS,GAAG,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAgB,QAAQ,CAAA;AAC3C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAI,KAAA,CAAc,SAAS,CAAA;AAAA,IACzC;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA;AACrC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,YAAA,CAAa,CAAA,qDAAA,EAAwD,CAAC,CAAA,CAAE,CAAA;AAAA,MACpF;AAEA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,QAAA,IAAI,WAAW,IAAA,CAAK,kBAAA,KAAuB,WAAW,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,KAAA;AAE9E,QAAA,QAAA,GAAW,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAA;AAC5C,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,GAAA,CAAI,CAAC,IAAI,IAAA,CAAK,kBAAA,CAAmB,UAAU,OAAA,CAAQ,SAAA,EAAW,QAAQ,UAAU,CAAA;AAAA,MAClF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA,EAEQ,IAAI,CAAA,EAAmB;AAE7B,IAAA,MAAM,IAAA,GAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA;AAC1B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACvB,IAAA,MAAM,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,SAAA,GAAY,IAAA,CAAA;AAC/B,IAAA,MAAM,EAAA,GAAK,WAAA;AACX,IAAA,MAAM,EAAA,GAAK,YAAA;AACX,IAAA,MAAM,EAAA,GAAK,WAAA;AACX,IAAA,MAAM,EAAA,GAAK,YAAA;AACX,IAAA,MAAM,EAAA,GAAK,WAAA;AACX,IAAA,MAAM,IAAA,GAAA,CAAA,CAAA,CAAA,CAAW,KAAK,CAAA,GAAI,EAAA,IAAM,IAAI,EAAA,IAAM,CAAA,GAAI,EAAA,IAAM,CAAA,GAAI,EAAA,IAAM,CAAA;AAC9D,IAAA,OAAO,QAAQ,CAAA,GAAI,IAAA,GAAO,KAAK,GAAA,CAAI,CAAC,OAAO,IAAI,CAAA,CAAA;AAAA,EACjD;AAAA,EAEQ,UAAU,CAAA,EAAmB;AACnC,IAAA,OAAO,GAAA,IAAO,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AAAA,EAC7C;AAAA,EAEQ,OAAO,CAAA,EAAmB;AAChC,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,MAAM,CAAA,GAAI,CAAA,IAAK,IAAA,CAAK,EAAA,GAAK,CAAA,CAAA,GAAK,KAAK,GAAA,CAAI,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AACpD,IAAA,MAAM,IAAA,GAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA;AAC1B,IAAA,OAAO,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,CAAC,CAAA,GAAI,CAAC,IAAI,CAAC,CAAA;AAAA,EACxE;AAAA,EAEQ,qBAAA,CAAsB,QAAkB,CAAA,EAAmB;AACjE,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,MAAM,IAAI,aAAa,wDAAwD,CAAA;AAAA,IACjF;AACA,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,MAAM,IAAA,GAAO,OAAO,CAAC,CAAA;AACrB,MAAA,IAAI,SAAS,MAAA,EAAW;AACtB,QAAA,MAAM,IAAI,aAAa,sCAAsC,CAAA;AAAA,MAC/D;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,CAAA,IAAK,MAAA,CAAO,MAAA,GAAS,CAAA,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA;AAChC,IAAA,MAAM,UAAA,GAAa,OAAO,KAAK,CAAA;AAC/B,IAAA,MAAM,UAAA,GAAa,OAAO,KAAK,CAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW;AACxD,MAAA,MAAM,IAAI,aAAa,4DAA4D,CAAA;AAAA,IACrF;AAEA,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,OAAO,UAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAS,QAAA,GAAW,KAAA;AAC1B,IAAA,OAAO,UAAA,IAAc,CAAA,GAAI,MAAA,CAAA,GAAU,UAAA,GAAa,MAAA;AAAA,EAClD;AAAA,EAEQ,kBAAA,CAAmB,KAAA,EAAe,SAAA,EAAqB,UAAA,EAA8B;AAC3F,IAAA,MAAM,IAAI,SAAA,CAAU,MAAA;AACpB,IAAA,IAAI,MAAM,CAAA,EAAG;AACX,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,MAAM,CAAA,EAAG;AACX,MAAA,MAAM,aAAA,GAAgB,WAAW,CAAC,CAAA;AAClC,MAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,QAAA,MAAM,IAAI,aAAa,4CAA4C,CAAA;AAAA,MACrE;AACA,MAAA,OAAO,aAAA;AAAA,IACT;AAEA,IAAA,MAAM,aAAA,GAAgB,UAAU,CAAC,CAAA;AACjC,IAAA,MAAM,YAAA,GAAe,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA;AACpC,IAAA,IAAI,aAAA,KAAkB,MAAA,IAAa,YAAA,KAAiB,MAAA,EAAW;AAC7D,MAAA,MAAM,IAAI,aAAa,4CAA4C,CAAA;AAAA,IACrE;AACA,IAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,SAAS,YAAA,EAAc;AACzB,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,IAAI,QAAQ,CAAA,GAAI,CAAA;AAChB,IAAA,OAAO,IAAA,GAAO,IAAI,KAAA,EAAO;AACvB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,GAAO,SAAS,CAAC,CAAA;AACzC,MAAA,MAAM,QAAA,GAAW,UAAU,GAAG,CAAA;AAC9B,MAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,QAAA,MAAM,IAAI,aAAa,2CAA2C,CAAA;AAAA,MACpE;AACA,MAAA,IAAI,YAAY,KAAA,EAAO;AACrB,QAAA,IAAA,GAAO,GAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,KAAA,GAAQ,GAAA;AAAA,MACV;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAC5B,IAAA,MAAM,MAAA,GAAS,UAAU,KAAK,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,WAAW,IAAI,CAAA;AAC7B,IAAA,MAAM,MAAA,GAAS,WAAW,KAAK,CAAA;AAC/B,IAAA,IACE,UAAU,MAAA,IACV,MAAA,KAAW,UACX,KAAA,KAAU,MAAA,IACV,WAAW,MAAA,EACX;AACA,MAAA,MAAM,IAAI,aAAa,uDAAuD,CAAA;AAAA,IAChF;AACA,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,OAAA,CAAQ,QAAQ,MAAA,IAAU,CAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,KAAA,GAAA,CAAS,KAAA,GAAQ,KAAA,KAAU,MAAA,GAAS,KAAA,CAAA;AAC1C,IAAA,OAAO,KAAA,GAAQ,SAAS,MAAA,GAAS,KAAA,CAAA;AAAA,EACnC;AAAA,EAEQ,kBAAA,CAAmB,QAAA,EAAkB,SAAA,EAAqB,UAAA,EAA8B;AAC9F,IAAA,MAAM,IAAI,UAAA,CAAW,MAAA;AACrB,IAAA,IAAI,MAAM,CAAA,EAAG;AACX,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,MAAM,CAAA,EAAG;AACX,MAAA,MAAM,YAAA,GAAe,UAAU,CAAC,CAAA;AAChC,MAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,QAAA,MAAM,IAAI,aAAa,wCAAwC,CAAA;AAAA,MACjE;AACA,MAAA,OAAO,YAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,WAAW,CAAC,CAAA;AAC7B,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,CAAA,GAAI,CAAC,CAAA;AAChC,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,OAAA,KAAY,MAAA,EAAW;AACnD,MAAA,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAAA,IACtE;AACA,IAAA,IAAI,YAAY,QAAA,EAAU;AACxB,MAAA,MAAM,aAAA,GAAgB,UAAU,CAAC,CAAA;AACjC,MAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,QAAA,MAAM,IAAI,aAAa,4CAA4C,CAAA;AAAA,MACrE;AACA,MAAA,OAAO,aAAA;AAAA,IACT;AACA,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,MAAM,YAAA,GAAe,SAAA,CAAU,CAAA,GAAI,CAAC,CAAA;AACpC,MAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,QAAA,MAAM,IAAI,aAAa,4CAA4C,CAAA;AAAA,MACrE;AACA,MAAA,OAAO,YAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,IAAI,QAAQ,CAAA,GAAI,CAAA;AAChB,IAAA,OAAO,IAAA,GAAO,IAAI,KAAA,EAAO;AACvB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,GAAO,SAAS,CAAC,CAAA;AACzC,MAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,MAAA,IAAI,WAAW,MAAA,EAAW;AACxB,QAAA,MAAM,IAAI,aAAa,4CAA4C,CAAA;AAAA,MACrE;AACA,MAAA,IAAI,UAAU,QAAA,EAAU;AACtB,QAAA,IAAA,GAAO,GAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,KAAA,GAAQ,GAAA;AAAA,MACV;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,WAAW,IAAI,CAAA;AAC7B,IAAA,MAAM,MAAA,GAAS,WAAW,KAAK,CAAA;AAC/B,IAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAC5B,IAAA,MAAM,MAAA,GAAS,UAAU,KAAK,CAAA;AAC9B,IAAA,IACE,UAAU,MAAA,IACV,MAAA,KAAW,UACX,KAAA,KAAU,MAAA,IACV,WAAW,MAAA,EACX;AACA,MAAA,MAAM,IAAI,aAAa,uDAAuD,CAAA;AAAA,IAChF;AACA,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,OAAA,CAAQ,QAAQ,MAAA,IAAU,CAAA;AAAA,IAC5B;AACA,IAAA,MAAM,KAAA,GAAA,CAAS,QAAA,GAAW,KAAA,KAAU,MAAA,GAAS,KAAA,CAAA;AAC7C,IAAA,OAAO,KAAA,GAAQ,SAAS,MAAA,GAAS,KAAA,CAAA;AAAA,EACnC;AAAA,EAEA,aAAa,CAAA,EAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AACF;AASO,IAAM,mBAAN,MAAuB;AAAA,EACpB,MAAA,GAAS,KAAA;AAAA,EACT,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR,WAAA,CACE,OAAA,GAII,EAAC,EACL;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,QAAQ,MAAA,IAAU,aAAA;AAChC,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,SAAA,IAAa,IAAA,CAAK,WAAW,aAAA,EAAe;AAC9D,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,2CAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,OAAA,CAAQ,WAAA,EAAa,eAAe,KAAK,CAAA;AAC/E,IAAA,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,EAC/C;AAAA,EAEA,IAAI,CAAA,EAAiB;AACnB,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,qBAAA,CAAsB,oCAAA,EAAsC,GAAG,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,MAAM,OAAA,GAAU,IAAI,KAAA,CAAc,SAAS,CAAA;AAC3C,IAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,GAAc,IAAI,MAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA;AACxE,IAAA,MAAM,MAAA,GAAS,KAAK,WAAA,GAAc,IAAI,MAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA;AAEzE,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,aAAA,GAAgB,IAAI,KAAA,CAAc,QAAQ,CAAA;AAChD,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,QAAA,MAAM,MAAM,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA;AACrD,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,QAAA,IAAI,IAAA,CAAK,MAAA,KAAW,SAAA,IAAa,KAAA,IAAS,CAAA,EAAG;AAC3C,UAAA,MAAM,IAAI,qBAAA;AAAA,YACR,kEAAkE,CAAC,CAAA,CAAA,CAAA;AAAA,YACnE,GAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AACA,QAAA,aAAA,CAAc,CAAC,CAAA,GAAI,KAAA;AAAA,MACrB;AACA,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,aAAa,CAAA;AAChD,MAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAEb,MAAA,IAAI,IAAA,CAAK,WAAA,IAAe,KAAA,IAAS,MAAA,EAAQ;AACvC,QAAA,IAAI,GAAA,GAAM,CAAA;AAEV,QAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,UAAA,MAAM,WAAA,GACJ,IAAA,CAAK,MAAA,KAAW,SAAA,GACZ,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,MAAM,CAAA,GACvC,IAAA,CAAK,wBAAA,CAAyB,KAAA,EAAO,MAAM,CAAA;AACjD,UAAA,GAAA,IAAO,WAAA;AAAA,QACT;AACA,QAAA,MAAM,OAAO,GAAA,GAAM,QAAA;AACnB,QAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAGX,QAAA,IAAI,SAAA,GAAY,CAAA;AAChB,QAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,UAAA,MAAM,WAAA,GACJ,IAAA,CAAK,MAAA,KAAW,SAAA,GACZ,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,MAAM,CAAA,GACvC,IAAA,CAAK,wBAAA,CAAyB,KAAA,EAAO,MAAM,CAAA;AACjD,UAAA,MAAM,OAAO,WAAA,GAAc,IAAA;AAC3B,UAAA,SAAA,IAAa,IAAA,GAAO,IAAA;AAAA,QACtB;AACA,QAAA,MAAM,WAAW,SAAA,GAAY,QAAA;AAC7B,QAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,KAAK,GAAA,CAAI,QAAA,EAAU,CAAC,CAAC,CAAA;AAC3C,QAAA,MAAA,CAAO,CAAC,CAAA,GAAI,GAAA,KAAQ,CAAA,GAAI,CAAA,GAAI,GAAA;AAAA,MAC9B;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,WAAA,GAAc,KAAA,GAAQ,MAAA;AACxC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,WAAA,GAAc,MAAA,GAAS,MAAA;AAC1C,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,CAAA,EAAmB;AAC3B,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,QAAA,EAAU;AAClC,MAAA,MAAM,IAAI,eAAe,kDAAkD,CAAA;AAAA,IAC7E;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,IAAI,KAAK,WAAA,KAAgB,CAAC,KAAK,KAAA,IAAS,CAAC,KAAK,MAAA,CAAA,EAAS;AACrD,MAAA,MAAM,IAAI,aAAa,gEAAgE,CAAA;AAAA,IACzF;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,IAAI,WAAW,MAAA,EAAW;AACxB,UAAA,MAAM,IAAI,YAAA,CAAa,CAAA,kDAAA,EAAqD,CAAC,CAAA,CAAE,CAAA;AAAA,QACjF;AAEA,QAAA,IAAI,WAAA;AACJ,QAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC7B,UAAA,IAAI,OAAO,CAAA,EAAG;AACZ,YAAA,MAAM,IAAI,qBAAA,CAAsB,2CAAA,EAA6C,GAAA,EAAK,GAAG,CAAA;AAAA,UACvF;AACA,UAAA,WAAA,GAAc,IAAA,CAAK,oBAAA,CAAqB,GAAA,EAAK,MAAM,CAAA;AAAA,QACrD,CAAA,MAAO;AACL,UAAA,WAAA,GAAc,IAAA,CAAK,wBAAA,CAAyB,GAAA,EAAK,MAAM,CAAA;AAAA,QACzD;AAEA,QAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,KAAA,IAAS,KAAK,MAAA,EAAQ;AACjD,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA;AAC9B,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAChC,UAAA,WAAA,GAAA,CAAe,cAAc,IAAA,IAAQ,KAAA;AAAA,QACvC;AAEA,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,WAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iBAAiB,CAAA,EAAmB;AAClC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,QAAA,EAAU;AAClC,MAAA,MAAM,IAAI,eAAe,0DAA0D,CAAA;AAAA,IACrF;AACA,IAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AACf,IAAA,mBAAA,CAAoB,GAAG,GAAG,CAAA;AAC1B,IAAA,kBAAA,CAAmB,GAAG,GAAG,CAAA;AACzB,IAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAe,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,aAAa,CAAC,CAAA;AAEzC,IAAA,IAAI,KAAK,WAAA,KAAgB,CAAC,KAAK,KAAA,IAAS,CAAC,KAAK,MAAA,CAAA,EAAS;AACrD,MAAA,MAAM,IAAI,aAAa,gEAAgE,CAAA;AAAA,IACzF;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,EAAS,EAAG,MAAM,IAAI,KAAA,CAAc,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,CAAA;AAE1F,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,OAAO,CAAA;AACtC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAAA,QAC9E;AACA,QAAA,IAAI,GAAA,GAAM,OAAO,GAAG,CAAA;AAEpB,QAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,KAAA,IAAS,KAAK,MAAA,EAAQ;AACjD,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA;AAC9B,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAChC,UAAA,GAAA,GAAM,MAAM,KAAA,GAAQ,IAAA;AAAA,QACtB;AAEA,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAC9B,QAAA,IAAI,WAAW,MAAA,EAAW;AACxB,UAAA,MAAM,IAAI,YAAA,CAAa,CAAA,kDAAA,EAAqD,CAAC,CAAA,CAAE,CAAA;AAAA,QACjF;AAEA,QAAA,IAAI,QAAA;AACJ,QAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC7B,UAAA,QAAA,GAAW,IAAA,CAAK,kBAAA,CAAmB,GAAA,EAAK,MAAM,CAAA;AAAA,QAChD,CAAA,MAAO;AACL,UAAA,QAAA,GAAW,IAAA,CAAK,sBAAA,CAAuB,GAAA,EAAK,MAAM,CAAA;AAAA,QACpD;AAEA,QAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,QAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,UAAA,MAAM,IAAI,aAAa,0CAA0C,CAAA;AAAA,QACnE;AACA,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,QAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC9D;AAAA,EAEQ,oBAAA,CAAqB,OAAe,MAAA,EAAwB;AAClE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAA,CAAK,KAAA,IAAS,MAAA,GAAS,CAAA,IAAK,MAAA;AAAA,EAC9E;AAAA,EAEQ,wBAAA,CAAyB,OAAe,MAAA,EAAwB;AACtE,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,CAAC,CAAA,GAAA,CAAA,CAAM,KAAA,GAAQ,CAAA,KAAM,SAAS,CAAA,IAAK,MAAA;AAAA,IACxF;AACA,IAAA,MAAM,iBAAiB,CAAA,GAAI,MAAA;AAC3B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,cAAc,CAAA,GAAI,QAC9B,CAAC,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,KAAK,CAAA,GACnB,EAAA,CAAG,CAAA,GAAI,KAAA,KAAU,iBAAiB,CAAA,CAAA,GAAK,cAAA;AAAA,EAC7C;AAAA,EAEQ,kBAAA,CAAmB,OAAe,MAAA,EAAwB;AAChE,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA,EAAO;AAC5B,MAAA,OAAO,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,IACvB;AACA,IAAA,MAAM,IAAA,GAAO,QAAQ,MAAA,GAAS,CAAA;AAC9B,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,MAAM,IAAI,qBAAA,CAAsB,2CAAA,EAA6C,GAAA,EAAK,KAAK,CAAA;AAAA,IACzF;AACA,IAAA,OAAO,SAAS,CAAA,GAAI,MAAA,CAAA;AAAA,EACtB;AAAA,EAEQ,sBAAA,CAAuB,OAAe,MAAA,EAAwB;AACpE,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA,EAAO;AAC5B,QAAA,OAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,CAAA;AAAA,MAC3B;AACA,MAAA,MAAME,KAAAA,GAAO,QAAQ,MAAA,GAAS,CAAA;AAC9B,MAAA,IAAIA,SAAQ,CAAA,EAAG;AACb,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,+CAAA;AAAA,UACA,GAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAOA,KAAAA,KAAS,IAAI,MAAA,CAAA,GAAU,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,iBAAiB,CAAA,GAAI,MAAA;AAC3B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,cAAc,CAAA,GAAI,KAAA,EAAO;AACpC,MAAA,OAAO,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,KAAK,CAAA;AAAA,IAC5B;AACA,IAAA,MAAM,IAAA,GAAO,IAAI,KAAA,GAAQ,cAAA;AACzB,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,MAAM,IAAI,qBAAA,CAAsB,+CAAA,EAAiD,GAAA,EAAK,KAAK,CAAA;AAAA,IAC7F;AACA,IAAA,OAAO,CAAA,GAAI,SAAS,CAAA,GAAI,cAAA,CAAA;AAAA,EAC1B;AAAA,EAEQ,aAAA,CAAc,QAA2B,MAAA,EAAwB;AACvE,IAAA,MAAM,WAAA,GAAc,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AACnD,IAAA,IAAI,QAAA,GAAW,CAAA;AAEf,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,MAAM,IAAI,aAAa,2DAA2D,CAAA;AAAA,MACpF;AAEA,MAAA,IAAI,gBAAA;AACJ,MAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC7B,QAAA,IAAI,SAAS,CAAA,EAAG;AACd,UAAA,OAAO,MAAA,CAAO,iBAAA;AAAA,QAChB;AACA,QAAA,gBAAA,GAAmB,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,MAAM,CAAA;AAC1D,QAAA,QAAA,IAAA,CAAa,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAAA,MAC3C,CAAA,MAAO;AACL,QAAA,gBAAA,GAAmB,IAAA,CAAK,wBAAA,CAAyB,KAAA,EAAO,MAAM,CAAA;AAC9D,QAAA,QAAA,IACE,KAAA,IAAS,CAAA,GAAA,CAAK,MAAA,GAAS,CAAA,IAAK,KAAK,GAAA,CAAI,KAAA,GAAQ,CAAC,CAAA,GAAA,CAAK,CAAA,GAAI,MAAA,IAAU,IAAA,CAAK,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,MACvF;AAEA,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACtC,QAAA,OAAO,MAAA,CAAO,iBAAA;AAAA,MAChB;AACA,MAAA,WAAA,CAAY,CAAC,CAAA,GAAI,gBAAA;AAAA,IACnB;AAEA,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,MAAA,GAAA,IAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,MAAA;AAE/B,IAAA,IAAI,WAAA,GAAc,CAAA;AAClB,IAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,MAAA,MAAM,QAAQ,KAAA,GAAQ,IAAA;AACtB,MAAA,WAAA,IAAe,KAAA,GAAQ,KAAA;AAAA,IACzB;AACA,IAAA,MAAM,QAAA,GAAW,cAAc,WAAA,CAAY,MAAA;AAC3C,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,YAAY,KAAA,EAAO;AACnD,MAAA,OAAO,MAAA,CAAO,iBAAA;AAAA,IAChB;AAEA,IAAA,OAAO,OAAO,WAAA,CAAY,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,GAAI,QAAA;AAAA,EAC1D;AAAA,EAEQ,eAAe,MAAA,EAAmC;AACxD,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI,WAAW,MAAA,CAAO,iBAAA;AACtB,IAAA,IAAI,WAAW,MAAA,CAAO,iBAAA;AACtB,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,KAAA,GAAQ,UAAU,QAAA,GAAW,KAAA;AACjC,MAAA,IAAI,KAAA,GAAQ,UAAU,QAAA,GAAW,KAAA;AAAA,IACnC;AAEA,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA,GAAW,QAAA,IAAY,KAAA,EAAO;AAC5F,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,GAAO,EAAA;AACX,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,MAAM,GAAA,GAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAC,IAAI,CAAA,IAAK,CAAA;AACjC,IAAA,IAAI,CAAA,GAAI,KAAA,GAAQ,GAAA,IAAO,KAAA,GAAQ,IAAA,CAAA;AAC/B,IAAA,IAAI,CAAA,GAAI,IAAA,GAAO,GAAA,IAAO,KAAA,GAAQ,IAAA,CAAA;AAC9B,IAAA,IAAI,EAAA,GAAK,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,CAAC,CAAA;AACrC,IAAA,IAAI,EAAA,GAAK,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,CAAC,CAAA;AAErC,IAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,EAAA,EAAI,IAAA,EAAA,EAAQ;AACpC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,IAAI,IAAI,IAAA,EAAM;AACnC,MAAA,IAAI,KAAK,EAAA,EAAI;AACX,QAAA,KAAA,GAAQ,CAAA;AACR,QAAA,CAAA,GAAI,CAAA;AACJ,QAAA,EAAA,GAAK,EAAA;AACL,QAAA,CAAA,GAAI,KAAA,GAAQ,OAAO,KAAA,GAAQ,IAAA,CAAA;AAC3B,QAAA,EAAA,GAAK,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,CAAC,CAAA;AAAA,MACnC,CAAA,MAAO;AACL,QAAA,IAAA,GAAO,CAAA;AACP,QAAA,CAAA,GAAI,CAAA;AACJ,QAAA,EAAA,GAAK,EAAA;AACL,QAAA,CAAA,GAAI,IAAA,GAAO,OAAO,KAAA,GAAQ,IAAA,CAAA;AAC1B,QAAA,EAAA,GAAK,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,CAAC,CAAA;AAAA,MACnC;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,IAAA,EAAM,KAAA,EAAA,CAAQ,IAAA,GAAO,SAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA;AAChE,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,YAAY,MAAA,CAAO,iBAAA;AACvB,IAAA,KAAA,MAAW,UAAU,UAAA,EAAY;AAC/B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,MAAM,CAAA;AAC/C,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,SAAA,GAAY,KAAA;AACZ,QAAA,UAAA,GAAa,MAAA;AAAA,MACf;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,GAAI,UAAA,GAAa,CAAA;AAAA,EACpD;AAAA,EAEA,aAAa,CAAA,EAAmB;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAAA,EAChC;AACF;;;ACz0DA,SAAS,gBAAgB,OAAA,EAAuB;AAC9C,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,IAAK,OAAA,GAAU,CAAA,EAAG;AAC1E,IAAA,MAAM,IAAI,qBAAA,CAAsB,uCAAA,EAAyC,SAAA,EAAW,OAAO,CAAA;AAAA,EAC7F;AACF;AAOA,SAAS,cAAA,CAAe,OAA2B,IAAA,EAAqC;AACtF,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,SAAS,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,qBAAA,CAAsB,CAAA,EAAG,IAAI,CAAA,0BAAA,CAAA,EAA8B,MAAM,KAAK,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAM;AAAA,EACnC;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,GAAG,IAAI,CAAA,qDAAA,CAAA;AAAA,MACP,IAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAM;AAChC;AAEA,SAAS,iBAAA,CAAkB,IAAA,EAAiB,QAAA,EAAkB,OAAA,EAA0B;AACtF,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AACA,EAAA,MAAM,KAAA,GAAQ,WAAW,IAAA,CAAK,KAAA;AAC9B,EAAA,OAAO,UAAU,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA,CAAK,KAAK,KAAK,CAAA;AACtD;AAEA,SAAS,sBAAA,CACP,QAAA,EACA,SAAA,EACA,QAAA,EACkB;AAClB,EAAA,MAAM,eAAA,GAAkB,SAAA,KAAc,MAAA,IAAa,QAAA,KAAa,SAAY,IAAA,GAAO,QAAA;AACnF,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,SAAA,EAAW,WAAW,CAAA;AACvD,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,eAAA,EAAiB,UAAU,CAAA;AAE3D,EAAA,IAAI,SAAA,EAAW,IAAA,KAAS,OAAA,IAAW,SAAA,CAAU,QAAQ,QAAA,EAAU;AAC7D,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,6CAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,CAAU;AAAA,KACZ;AAAA,EACF;AACA,EAAA,IAAI,QAAA,EAAU,IAAA,KAAS,OAAA,IAAW,QAAA,CAAS,QAAQ,QAAA,EAAU;AAC3D,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,4CAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA,CAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,IACE,SAAA,EAAW,IAAA,KAAS,UAAA,IACpB,QAAA,EAAU,IAAA,KAAS,cACnB,SAAA,CAAU,KAAA,GAAQ,QAAA,CAAS,KAAA,GAAQ,CAAA,EACnC;AACA,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,wDAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,CAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,SAAA,KAAc,MAAA,GAAY,SAAY,iBAAA,CAAkB,SAAA,EAAW,UAAU,IAAI,CAAA;AAC9F,EAAA,IAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,SAAY,iBAAA,CAAkB,QAAA,EAAU,UAAU,KAAK,CAAA;AAE5F,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,KAAA,KAAU,MAAA,EAAW;AAC/C,IAAA,MAAM,IAAI,aAAa,+CAA+C,CAAA;AAAA,EACxE;AAEA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAA,GAAS,YAAY,KAAA,IAAS,CAAA,CAAA;AAAA,EAChC;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,KAAA,GAAQ,QAAA,GAAW,MAAA;AAAA,EACrB;AAEA,EAAA,IAAI,MAAA,GAAS,QAAQ,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,iDAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,qBAAA,CAAsB,qCAAA,EAAuC,WAAA,EAAa,SAAS,CAAA;AAAA,EAC/F;AACA,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,MAAM,IAAI,qBAAA,CAAsB,oCAAA,EAAsC,UAAA,EAAY,QAAQ,CAAA;AAAA,EAC5F;AAEA,EAAA,OAAO,CAAC,QAAQ,KAAK,CAAA;AACvB;AAEA,SAAS,aAAA,CAAc,GAAY,CAAA,EAAoB;AACrD,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,SAAiB,CAAA,GAAI,CAAA;AAC/D,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,IAAA,IAAI,CAAA,GAAI,GAAG,OAAO,EAAA;AAClB,IAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA;AAClB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,CAAC,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA;AAC1C;AAEA,SAAS,aAAA,CAAc,OAAe,OAAA,EAA2B;AAC/D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,OAAO,CAAA;AACvC,EAAA,MAAM,YAAY,KAAA,GAAQ,OAAA;AAC1B,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAA,EAAQ,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,IAAA,IAAQ,CAAA,GAAI,SAAA,GAAY,IAAI,CAAA,CAAE,CAAA;AACjF;AAEA,SAAS,eAAA,CAAgB,GAAW,OAAA,EAA6C;AAC/E,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,EAAA,CAAG,GAAG,OAAO,CAAA;AAC7B,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AACvF,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,aAAa,+CAA+C,CAAA;AACxE;AAEA,SAAS,gBAAA,CAAiB,CAAA,EAAW,SAAA,EAAmB,KAAA,EAAuC;AAC7F,EAAA,IAAI,CAAA,CAAE,UAAU,QAAA,EAAU;AACxB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAI,aAAa,yDAAyD,CAAA;AAAA,IAClF;AACA,IAAA,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA,GAAI,KAAA;AACpB,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAI,aAAa,4DAA4D,CAAA;AAAA,EACrF;AAEA,EAAA,IAAI,CAAA,CAAE,gBAAgB,aAAA,EAAe;AACnC,IAAA,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA,GAAI,OAAO,UAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AACpE,IAAA;AAAA,EACF;AAEA,EAAA,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAClC;AAEA,SAAS,UAAA,CAAW,GAAW,aAAA,EAAiC;AAC9D,EAAA,MAAM,GAAG,SAAS,CAAA,GAAI,WAAW,CAAC,CAAA;AAClC,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,CAAC,aAAA,CAAc,MAAA,EAAQ,SAAS,CAAA,EAAG,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,CAAA;AAEvE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,aAAA,CAAc,QAAQ,CAAA,EAAA,EAAK;AAC7C,IAAA,MAAM,WAAA,GAAc,cAAc,CAAC,CAAA;AACnC,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,MAAM,IAAI,aAAa,4CAA4C,CAAA;AAAA,IACrE;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,QAAQ,eAAA,CAAgB,CAAA,EAAG,CAAC,WAAA,EAAa,CAAC,CAAC,CAAA;AACjD,MAAA,gBAAA,CAAiB,KAAK,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,SAAA,GAAY,GAAG,KAAK,CAAA;AAAA,IAC7D;AAAA,EACF;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,UAAA,CAAW,GAAW,aAAA,EAAiC;AAC9D,EAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,2BAAA,EAA8B,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9D;AACA,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,CAAC,aAAA,CAAc,MAAM,GAAG,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,CAAA;AAE5D,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,aAAA,CAAc,QAAQ,CAAA,EAAA,EAAK;AAC7C,IAAA,MAAM,WAAA,GAAc,cAAc,CAAC,CAAA;AACnC,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,MAAM,IAAI,aAAa,4CAA4C,CAAA;AAAA,IACrE;AACA,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAC9C,IAAA,gBAAA,CAAiB,GAAA,EAAK,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA;AAAA,EAC7C;AAEA,EAAA,OAAO,GAAA;AACT;AA0BO,SAAS,cAAA,CACd,CAAA,EACA,CAAA,EACA,OAAA,EAOU;AACV,EAAA,MAAM,IAAA,GAAO,WAAW,EAAC;AACzB,EAAA,MAAM,OAAA,GAAU,KAAK,OAAA,IAAW,IAAA;AAChC,EAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AAEzB,EAAA,MAAM,CAAC,QAAQ,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA;AAE/B,EAAA,IAAI,aAAa,CAAA,EAAG;AAClB,IAAA,MAAM,IAAI,qBAAA,CAAsB,0BAAA,EAA4B,GAAG,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,CAAA,EAAG;AACL,IAAA,MAAM,OAAA,GAAU,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACzB,IAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,QAAA,EAAU;AACjD,MAAA,MAAM,IAAI,qBAAA,CAAsB,0CAAA,EAA4C,GAAA,EAAK,OAAO,CAAA;AAAA,IAC1F;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,kCAAA,EAAqC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IACjF;AACA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA;AAC5C,IAAA,IAAI,cAAA,KAAmB,MAAA,IAAa,cAAA,KAAmB,QAAA,EAAU;AAC/D,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,gDAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,CAAC,QAAQ,KAAK,CAAA,GAAI,uBAAuB,QAAA,EAAU,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,QAAQ,CAAA;AAEtF,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,UAAS,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AAC5D,EAAA,MAAM,SAAS,WAAA,KAAgB,MAAA,GAAY,kBAAA,CAAmB,WAAW,IAAI,IAAA,CAAK,MAAA;AAClF,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAAwB;AAC5C,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,qBAAA,CAAsB,KAAK,MAAM,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,IAAI,eAAyB,EAAC;AAC9B,EAAA,IAAI,cAAwB,EAAC;AAE7B,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAuB;AAC5C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,QAAA,EAAU,CAAC,CAAC,CAAC,CAAA;AAC3C,MAAA,IAAI,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AAC/B,MAAA,IAAI,WAAW,MAAA,EAAW;AACxB,QAAA,MAAA,GAAS,EAAC;AACV,QAAA,QAAA,CAAS,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,MAC5B;AACA,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACf;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAE,KAAK,aAAa,CAAA;AAC7D,IAAA,MAAM,WAAW,MAAA,CAAO,MAAA;AACxB,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,SAAS,GAAA,CAAI,KAAK,CAAA,EAAG,MAAA,IAAU,CAAC,CAAA;AACzE,IAAA,MAAM,eAAe,UAAA,CAAW,IAAA,CAAK,CAAC,IAAA,KAAS,OAAO,CAAC,CAAA;AAEvD,IAAA,IAAI,YAAA,IAAgB,OAAA,IAAW,WAAA,KAAgB,MAAA,EAAW;AACxD,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,gDAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,SAAA,KAAc,MAAA,IAAa,MAAA,GAAS,QAAA,EAAU;AACrD,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,mEAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,kEAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,eAAe,KAAA,GAAQ,QAAA;AAC7B,IAAA,MAAM,wBAAwB,MAAA,GAAS,QAAA;AACvC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACnC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,KAAK,GAAG,MAAA,IAAU,CAAA;AAC5C,MAAA,MAAM,QAAQ,IAAA,GAAO,YAAA;AACrB,MAAA,IAAI,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAChC,MAAA,IAAI,YAAY,KAAA,GAAQ,SAAA;AACxB,MAAA,IAAI,GAAA,GAAM,wBAAwB,CAAA,GAAI,CAAA;AACtC,MAAA,IAAI,GAAA,GAAM,qBAAA,GAAwB,IAAA,GAAO,IAAA,GAAO,CAAA;AAChD,MAAA,IAAI,OAAO,CAAA,EAAG;AACZ,QAAA,GAAA,GAAM,CAAA;AACN,QAAA,GAAA,GAAM,wBAAwB,IAAA,GAAO,CAAA;AACrC,QAAA,SAAA,GAAY,CAAA;AACZ,QAAA,SAAA,GAAY,CAAA;AAAA,MACd,CAAA,MAAO;AACL,QAAA,IAAI,SAAA,GAAY,KAAK,SAAA,GAAY,GAAA;AACjC,QAAA,IAAI,SAAA,GAAY,KAAK,SAAA,GAAY,GAAA;AAAA,MACnC;AACA,MAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,IACvD,CAAC,CAAA;AAED,IAAA,IAAI,SAAA,GAAY,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,SAAA,EAAW,CAAC,CAAA;AACtE,IAAA,IAAI,cAAc,CAAA,EAAG;AACnB,MAAA,MAAM,KAAA,GACJ,SAAA,GAAY,CAAA,GACR,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACzB,QAAA,IAAI,EAAE,SAAA,KAAc,CAAA,CAAE,WAAW,OAAO,CAAA,CAAE,YAAY,CAAA,CAAE,SAAA;AACxD,QAAA,OAAO,aAAA,CAAc,CAAA,CAAE,KAAA,EAAO,CAAA,CAAE,KAAK,CAAA;AAAA,MACvC,CAAC,IACD,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACzB,QAAA,IAAI,EAAE,SAAA,KAAc,CAAA,CAAE,WAAW,OAAO,CAAA,CAAE,YAAY,CAAA,CAAE,SAAA;AACxD,QAAA,OAAO,aAAA,CAAc,CAAA,CAAE,KAAA,EAAO,CAAA,CAAE,KAAK,CAAA;AAAA,MACvC,CAAC,CAAA;AAEP,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,OAAO,SAAA,KAAc,CAAA,IAAK,KAAA,GAAQ,MAAA,CAAO,SAAS,CAAA,EAAG;AACnD,QAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,UAAA,IAAI,cAAc,CAAA,EAAG;AACrB,UAAA,IAAI,SAAA,GAAY,CAAA,IAAK,KAAA,CAAM,SAAA,GAAY,MAAM,GAAA,EAAK;AAChD,YAAA,KAAA,CAAM,SAAA,IAAa,CAAA;AACnB,YAAA,SAAA,IAAa,CAAA;AAAA,UACf,WAAW,SAAA,GAAY,CAAA,IAAK,KAAA,CAAM,SAAA,GAAY,MAAM,GAAA,EAAK;AACvD,YAAA,KAAA,CAAM,SAAA,IAAa,CAAA;AACnB,YAAA,SAAA,IAAa,CAAA;AAAA,UACf;AAAA,QACF;AACA,QAAA,KAAA,IAAS,CAAA;AAAA,MACX;AAEA,MAAA,IAAI,cAAc,CAAA,EAAG;AACnB,QAAA,MAAM,IAAI,aAAa,2DAA2D,CAAA;AAAA,MACpF;AAAA,IACF;AAEA,IAAA,MAAM,qBAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,YAAA,GAAe,CAAC,GAAI,QAAA,CAAS,IAAI,KAAA,CAAM,KAAK,CAAA,IAAK,EAAG,CAAA;AAC1D,MAAA,YAAA,CAAa,YAAY,CAAA;AACzB,MAAA,WAAA,CAAY,KAAK,GAAG,YAAA,CAAa,MAAM,CAAA,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA;AAC1D,MAAA,kBAAA,CAAmB,KAAK,GAAG,YAAA,CAAa,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,IAChE;AAEA,IAAA,YAAA,CAAa,WAAW,CAAA;AACxB,IAAA,YAAA,CAAa,kBAAkB,CAAA;AAC/B,IAAA,YAAA,GAAe,kBAAA,CAAmB,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA;AAAA,EACnD,CAAA,MAAO;AACL,IAAA,YAAA,CAAa,OAAO,CAAA;AACpB,IAAA,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA;AACtC,IAAA,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAA;AAAA,EACpD;AAEA,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,MAAA,IAAU,WAAA,CAAY,WAAW,KAAA,EAAO;AAClE,IAAA,MAAM,IAAI,aAAa,qEAAqE,CAAA;AAAA,EAC9F;AAEA,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,CAAA,EAAG,YAAY,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,CAAA,EAAG,WAAW,CAAA;AAEvC,EAAA,IAAI,CAAA,EAAG;AACL,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,CAAA,EAAG,YAAY,CAAA;AACzC,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,CAAA,EAAG,WAAW,CAAA;AACvC,IAAA,OAAO,CAAC,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAK,CAAA;AAAA,EACtC;AAEA,EAAA,OAAO,CAAC,QAAQ,KAAK,CAAA;AACvB;AASO,IAAM,QAAN,MAAY;AAAA,EACT,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EAER,WAAA,CACE,OAAA,GAII,EAAC,EACL;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,CAAA;AAClC,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,KAAA;AAClC,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAAA,EAC7B;AAAA,EAEA,MAAM,CAAA,EAAwC;AAC5C,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACxB,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,MAAM,IAAI,WAAW,4BAA4B,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,QAAA,GAAW,MAAA;AACjB,IAAA,eAAA,CAAgB,KAAK,OAAO,CAAA;AAC5B,IAAA,IAAI,IAAA,CAAK,UAAU,QAAA,EAAU;AAC3B,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,oDAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,UAAS,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AAE5D,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,MAAM,MAAA,GACJ,KAAK,WAAA,KAAgB,MAAA,GAAY,mBAAmB,IAAA,CAAK,WAAW,IAAI,IAAA,CAAK,MAAA;AAC/E,MAAA,qBAAA,CAAsB,SAAS,MAAM,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,SAAsC,EAAC;AAC7C,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,QAAA,EAAU,IAAA,CAAK,OAAO,CAAA;AACtD,IAAA,IAAI,OAAA,GAAU,CAAA;AAEd,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,SAAS,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,QAAA,GAAW,SAAA,CAAU,CAAC,CAAA,IAAK,CAAA;AACjC,MAAA,MAAM,SAAA,GAAY,OAAA;AAClB,MAAA,MAAM,UAAU,OAAA,GAAU,QAAA;AAE1B,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,SAAA,EAAW,OAAO,CAAA;AACpD,MAAA,MAAM,YAAA,GAAe,CAAC,GAAG,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,EAAG,GAAG,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAC,CAAA;AAE/E,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,YAAA,EAAc,WAAW,CAAC,CAAA;AACvC,MAAA,OAAA,GAAU,OAAA;AAAA,IACZ;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AACF;AASO,IAAM,kBAAN,MAAsB;AAAA,EACnB,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EAER,WAAA,CACE,OAAA,GAII,EAAC,EACL;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,CAAA;AAClC,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,KAAA;AAClC,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAAA,EAC7B;AAAA,EAEA,KAAA,CAAM,GAAW,CAAA,EAAwC;AACvD,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACxB,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,MAAM,IAAI,WAAW,4BAA4B,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,QAAA,GAAW,MAAA;AACjB,IAAA,eAAA,CAAgB,KAAK,OAAO,CAAA;AAC5B,IAAA,IAAI,IAAA,CAAK,UAAU,QAAA,EAAU;AAC3B,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,oDAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACzB,IAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,QAAA,EAAU;AACjD,MAAA,MAAM,IAAI,qBAAA,CAAsB,0CAAA,EAA4C,GAAA,EAAK,OAAO,CAAA;AAAA,IAC1F;AACA,IAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,2BAAA,EAA8B,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IAC9D;AACA,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAwC;AAC7D,IAAA,MAAM,MAAA,GACJ,KAAK,WAAA,KAAgB,MAAA,GAAY,mBAAmB,IAAA,CAAK,WAAW,IAAI,IAAA,CAAK,MAAA;AAE/E,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AACpC,MAAA,IAAI,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AAC/B,MAAA,IAAI,WAAW,MAAA,EAAW;AACxB,QAAA,MAAA,GAAS,EAAC;AACV,QAAA,QAAA,CAAS,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,MAC5B;AACA,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACf;AAEA,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,CAAA,IAAK,QAAA,CAAS,SAAQ,EAAG;AACjD,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,qBAAA,CAAsB,SAAS,MAAM,CAAA;AAAA,MACvC;AACA,MAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,IAAA,CAAK,OAAA,EAAS;AACjC,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,CAAA,qDAAA,EAAwD,KAAK,CAAA,KAAA,EAAQ,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,UACnF,SAAA;AAAA,UACA,IAAA,CAAK;AAAA,SACP;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAA0B,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAK,OAAA,EAAQ,EAAG,MAAM,EAAE,CAAA;AAE7E,IAAA,KAAA,MAAW,OAAA,IAAW,QAAA,CAAS,MAAA,EAAO,EAAG;AACvC,MAAA,MAAM,SAAA,GAAY,aAAA,CAAc,OAAA,CAAQ,MAAA,EAAQ,KAAK,OAAO,CAAA;AAC5D,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,SAAS,IAAA,EAAA,EAAQ;AAC9C,QAAA,MAAM,IAAA,GAAO,SAAA,CAAU,IAAI,CAAA,IAAK,CAAA;AAChC,QAAA,MAAM,MAAM,KAAA,GAAQ,IAAA;AACpB,QAAA,MAAM,MAAA,GAAS,YAAY,IAAI,CAAA;AAC/B,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,MAAM,IAAI,aAAa,iDAAiD,CAAA;AAAA,QAC1E;AACA,QAAA,MAAA,CAAO,KAAK,GAAG,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA;AACxC,QAAA,KAAA,GAAQ,GAAA;AAAA,MACV;AAAA,IACF;AAEA,IAAA,MAAM,SAAsC,EAAC;AAE7C,IAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,SAAS,IAAA,EAAA,EAAQ;AAC9C,MAAA,MAAM,WAAA,GAAc,WAAA,CAAY,IAAI,CAAA,IAAK,EAAC;AAC1C,MAAA,MAAM,eAAyB,EAAC;AAChC,MAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,SAAS,KAAA,EAAA,EAAS;AACjD,QAAA,IAAI,UAAU,IAAA,EAAM;AACpB,QAAA,YAAA,CAAa,KAAK,GAAI,WAAA,CAAY,KAAK,CAAA,IAAK,EAAG,CAAA;AAAA,MACjD;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,YAAA,EAAc,WAAW,CAAC,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AACF;AASO,IAAM,aAAN,MAAiB;AAAA,EACd,OAAA;AAAA,EAER,WAAA,CAAY,OAAA,GAAgC,EAAC,EAAG;AAC9C,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,CAAA;AAAA,EACpC;AAAA,EAEA,KAAA,CAAM,CAAA,EAAW,EAAA,EAAwB,MAAA,EAA6C;AACpF,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACxB,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,MAAM,IAAI,WAAW,4BAA4B,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,QAAA,GAAW,MAAA;AACjB,IAAA,eAAA,CAAgB,KAAK,OAAO,CAAA;AAC5B,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,gCAAA,EAAmC,MAAA,CAAO,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AACnC,IAAA,IAAI,YAAA,KAAiB,MAAA,IAAa,YAAA,KAAiB,QAAA,EAAU;AAC3D,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,+CAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAwC;AAE7D,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,MAAA,EAAQ,CAAC,CAAC,CAAC,CAAA;AACzC,MAAA,IAAI,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AAC/B,MAAA,IAAI,WAAW,MAAA,EAAW;AACxB,QAAA,MAAA,GAAS,EAAC;AACV,QAAA,QAAA,CAAS,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,MAC5B;AACA,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACf;AAEA,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,OAAO,CAAA,MAAO;AAAA,MAC7E,KAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAM,OAAA,CAAQ;AAAA,KAChB,CAAE,CAAA;AACF,IAAA,IAAI,IAAA,CAAK,OAAA,GAAU,YAAA,CAAa,MAAA,EAAQ;AACtC,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,2CAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AACA,IAAA,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AAC1B,MAAA,IAAI,EAAE,IAAA,KAAS,CAAA,CAAE,MAAM,OAAO,CAAA,CAAE,OAAO,CAAA,CAAE,IAAA;AACzC,MAAA,OAAO,aAAA,CAAc,CAAA,CAAE,KAAA,EAAO,CAAA,CAAE,KAAK,CAAA;AAAA,IACvC,CAAC,CAAA;AAED,IAAA,MAAM,WAAA,GAA0B,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAK,OAAA,EAAQ,EAAG,MAAM,EAAE,CAAA;AAC7E,IAAA,MAAM,YAAY,IAAI,KAAA,CAAc,KAAK,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA;AAExD,IAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,MAAA,IAAI,QAAA,GAAW,CAAA;AACf,MAAA,IAAI,QAAA,GAAW,SAAA,CAAU,CAAC,CAAA,IAAK,CAAA;AAC/B,MAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,SAAS,IAAA,EAAA,EAAQ;AAC9C,QAAA,MAAM,IAAA,GAAO,SAAA,CAAU,IAAI,CAAA,IAAK,CAAA;AAChC,QAAA,IAAI,OAAO,QAAA,EAAU;AACnB,UAAA,QAAA,GAAW,IAAA;AACX,UAAA,QAAA,GAAW,IAAA;AAAA,QACb;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,YAAY,QAAQ,CAAA;AACnC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,aAAa,4CAA4C,CAAA;AAAA,MACrE;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,KAAA,CAAM,OAAO,CAAA;AAC5B,MAAA,SAAA,CAAU,QAAQ,CAAA,GAAI,QAAA,GAAW,KAAA,CAAM,IAAA;AAAA,IACzC;AAEA,IAAA,MAAM,SAAsC,EAAC;AAC7C,IAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,SAAS,IAAA,EAAA,EAAQ;AAC9C,MAAA,MAAM,WAAA,GAAc,WAAA,CAAY,IAAI,CAAA,IAAK,EAAC;AAC1C,MAAA,MAAM,eAAyB,EAAC;AAChC,MAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,SAAS,KAAA,EAAA,EAAS;AACjD,QAAA,IAAI,UAAU,IAAA,EAAM;AACpB,QAAA,YAAA,CAAa,KAAK,GAAI,WAAA,CAAY,KAAK,CAAA,IAAK,EAAG,CAAA;AAAA,MACjD;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,YAAA,EAAc,WAAW,CAAC,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AACF;AAOO,IAAM,cAAN,MAAkB;AAAA,EACvB,MAAM,CAAA,EAAwC;AAC5C,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACxB,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,MAAM,IAAI,WAAW,4BAA4B,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,QAAA,GAAW,MAAA;AACjB,IAAA,MAAM,SAAsC,EAAC;AAE7C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACjC,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,GAAG,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,GAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AAAA,QACxC,GAAG,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,QAAA,GAAW,CAAA,GAAI,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,IAAI,CAAC;AAAA,OACjE;AACA,MAAA,MAAM,WAAA,GAAc,CAAC,CAAC,CAAA;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,YAAA,EAAc,WAAW,CAAC,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,WAAW,CAAA,EAAmB;AAC5B,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACxB,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,MAAM,IAAI,WAAW,4BAA4B,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAOO,IAAM,YAAN,MAAgB;AAAA,EACb,CAAA;AAAA,EAER,YAAY,CAAA,EAAW;AACrB,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,IAAK,CAAA,IAAK,CAAA,EAAG;AACzD,MAAA,MAAM,IAAI,qBAAA,CAAsB,8BAAA,EAAgC,GAAA,EAAK,CAAC,CAAA;AAAA,IACxE;AACA,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AAAA,EACX;AAAA,EAEA,MAAM,CAAA,EAAwC;AAC5C,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACxB,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,MAAM,IAAI,WAAW,4BAA4B,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,QAAA,GAAW,MAAA;AACjB,IAAA,IAAI,IAAA,CAAK,IAAI,QAAA,EAAU;AACrB,MAAA,MAAM,IAAI,qBAAA,CAAsB,8CAAA,EAAgD,GAAA,EAAK,KAAK,CAAC,CAAA;AAAA,IAC7F;AAGA,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,MAAM,CAAA,GAAI,KAAK,CAAA,GAAI,QAAA,GAAW,IAAI,QAAA,GAAW,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA;AAC3D,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,OAAA,GAAW,OAAA,IAAW,QAAA,GAAW,CAAA,CAAA,IAAO,CAAA,GAAI,CAAA,CAAA;AAAA,IAC9C;AAIA,IAAA,IAAI,UAAU,GAAA,EAAQ;AACpB,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,CAAA,mBAAA,EAAsB,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA,qDAAA,CAAA;AAAA,QACzC,GAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,MAAM,SAAsC,EAAC;AAC7C,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,UAAS,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AAG/D,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,EAAe,YAAA,KAA2B;AACzD,MAAA,IAAI,YAAA,CAAa,MAAA,KAAW,IAAA,CAAK,CAAA,EAAG;AAClC,QAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,YAAY,CAAA;AACpC,QAAA,MAAM,WAAA,GAAc,CAAC,GAAG,YAAY,CAAA;AACpC,QAAA,MAAM,YAAA,GAAe,WAAW,MAAA,CAAO,CAAC,MAAM,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,CAAA;AAC7D,QAAA,MAAA,CAAO,IAAA,CAAK,CAAC,YAAA,EAAc,WAAW,CAAC,CAAA;AACvC,QAAA;AAAA,MACF;AACA,MAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAAK;AACrC,QAAA,YAAA,CAAa,KAAK,CAAC,CAAA;AACnB,QAAA,OAAA,CAAQ,CAAA,GAAI,GAAG,YAAY,CAAA;AAC3B,QAAA,YAAA,CAAa,GAAA,EAAI;AAAA,MACnB;AAAA,IACF,CAAA;AAEA,IAAA,OAAA,CAAQ,CAAA,EAAG,EAAE,CAAA;AAEb,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,WAAW,CAAA,EAAmB;AAC5B,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACxB,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,MAAM,IAAI,WAAW,4BAA4B,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,CAAA,GAAI,MAAA;AACV,IAAA,IAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AACd,MAAA,MAAM,IAAI,qBAAA,CAAsB,8CAAA,EAAgD,GAAA,EAAK,KAAK,CAAC,CAAA;AAAA,IAC7F;AAEA,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,MAAM,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA,GAAI,IAAI,CAAA,GAAI,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA;AAC7C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,MAAA,GAAU,MAAA,IAAU,CAAA,GAAI,CAAA,CAAA,IAAO,CAAA,GAAI,CAAA,CAAA;AAAA,IACrC;AACA,IAAA,OAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,EAC1B;AACF","file":"chunk-AD436M45.js","sourcesContent":["// Encoders\nexport {\n LabelBinarizer,\n LabelEncoder,\n MultiLabelBinarizer,\n OneHotEncoder,\n OrdinalEncoder,\n} from \"./encoders\";\n\n// Scalers\nexport {\n MaxAbsScaler,\n MinMaxScaler,\n Normalizer,\n PowerTransformer,\n QuantileTransformer,\n RobustScaler,\n StandardScaler,\n} from \"./scalers\";\n\n// Splitting\nexport {\n GroupKFold,\n KFold,\n LeaveOneOut,\n LeavePOut,\n StratifiedKFold,\n trainTestSplit,\n} from \"./split\";\n","/**\n * Shared internal helpers for the preprocess module.\n *\n * These functions are used across scalers and splitting utilities\n * to handle tensor shape validation, seeded RNG, and index shuffling.\n *\n * @internal\n */\n\nimport { DeepboxError, DTypeError, InvalidParameterError, ShapeError } from \"../core/errors\";\nimport type { Tensor } from \"../ndarray\";\n\n/**\n * Assert that a tensor has numeric dtype (not string).\n *\n * @internal\n */\nexport function assertNumericTensor(X: Tensor, name: string): void {\n if (X.dtype === \"string\") {\n throw new DTypeError(`${name} must be numeric`);\n }\n}\n\n/**\n * Assert that a tensor is 2-dimensional.\n *\n * @internal\n */\nexport function assert2D(X: Tensor, name: string): void {\n if (X.ndim !== 2) {\n throw new ShapeError(`${name} must be a 2D tensor, got ${X.ndim}D`);\n }\n}\n\n/**\n * Extract and validate the shape of a 2D tensor.\n *\n * @internal\n */\nexport function getShape2D(X: Tensor): [number, number] {\n if (X.ndim !== 2 || X.shape[0] === undefined || X.shape[1] === undefined) {\n throw new ShapeError(`Expected 2D tensor with valid shape, got shape [${X.shape.join(\", \")}]`);\n }\n return [X.shape[0], X.shape[1]];\n}\n\n/**\n * Extract the stride of a 1D tensor.\n *\n * @internal\n */\nexport function getStride1D(X: Tensor): number {\n const stride = X.strides[0];\n if (stride === undefined) {\n throw new DeepboxError(\"Internal error: missing stride for 1D tensor\");\n }\n return stride;\n}\n\n/**\n * Extract the strides of a 2D tensor.\n *\n * @internal\n */\nexport function getStrides2D(X: Tensor): [number, number] {\n const stride0 = X.strides[0];\n const stride1 = X.strides[1];\n if (stride0 === undefined || stride1 === undefined) {\n throw new DeepboxError(\"Internal error: missing strides for 2D tensor\");\n }\n return [stride0, stride1];\n}\n\n/**\n * Simple seeded random number generator using Linear Congruential Generator (LCG).\n * Provides reproducible pseudo-random sequences when given a seed.\n *\n * @param seed - Non-negative safe integer seed value\n * @returns Function that generates random numbers in [0, 1)\n *\n * @internal\n */\nexport function createSeededRandom(seed: number): () => number {\n const a = 1103515245;\n const c = 12345;\n const m = 2 ** 31;\n\n if (\n !Number.isFinite(seed) ||\n !Number.isInteger(seed) ||\n !Number.isSafeInteger(seed) ||\n seed < 0\n ) {\n throw new InvalidParameterError(\n \"randomState must be a non-negative safe integer\",\n \"randomState\",\n seed\n );\n }\n\n let state = seed % m;\n\n return () => {\n state = (a * state + c) % m;\n return state / m;\n };\n}\n\n/**\n * Shuffle an array of indices in-place using Fisher-Yates algorithm.\n *\n * @param indices - Array of integer indices to shuffle\n * @param random - Random number generator returning values in [0, 1)\n *\n * @internal\n */\nexport function shuffleIndicesInPlace(indices: number[], random: () => number): void {\n for (let i = indices.length - 1; i > 0; i--) {\n const j = Math.floor(random() * (i + 1));\n const temp = indices[i];\n if (temp === undefined) {\n throw new DeepboxError(\"Internal error: shuffle source index missing\");\n }\n const swap = indices[j];\n if (swap === undefined) {\n throw new DeepboxError(\"Internal error: shuffle target index missing\");\n }\n indices[i] = swap;\n indices[j] = temp;\n }\n}\n","import {\n DeepboxError,\n DTypeError,\n getConfig,\n InvalidParameterError,\n NotFittedError,\n ShapeError,\n} from \"../core\";\nimport { CSRMatrix, empty, type Tensor, Tensor as TensorImpl, tensor, zeros } from \"../ndarray\";\nimport { assert2D, assertNumericTensor, getShape2D, getStride1D, getStrides2D } from \"./_internal\";\n\n/**\n * Type representing a category value that can be a string, number, or bigint.\n * Used for categorical encoding operations.\n */\ntype Category = number | string | bigint;\n\ntype CategoryType = \"string\" | \"number\" | \"bigint\";\n\ntype CategoriesOption = \"auto\" | ReadonlyArray<ReadonlyArray<Category>>;\n\ntype DropOption = \"first\" | \"if_binary\" | null;\n\nfunction getStringData(t: Tensor): string[] {\n if (t.dtype !== \"string\") {\n throw new DTypeError(\"Expected string tensor\");\n }\n if (!Array.isArray(t.data)) {\n throw new DeepboxError(\"Internal error: invalid string tensor storage\");\n }\n return t.data;\n}\n\nfunction getNumericData(t: Tensor): ArrayLike<number | bigint> {\n if (t.dtype === \"string\") {\n throw new DTypeError(\"Expected numeric tensor\");\n }\n if (Array.isArray(t.data)) {\n throw new DeepboxError(\"Internal error: invalid numeric tensor storage\");\n }\n return t.data;\n}\n\nfunction inferCategoryType(values: Category[], paramName: string): CategoryType {\n let hasString = false;\n let hasNumber = false;\n let hasBigInt = false;\n\n for (const value of values) {\n if (typeof value === \"string\") {\n hasString = true;\n } else if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new InvalidParameterError(\"Category values must be finite numbers\", paramName, value);\n }\n hasNumber = true;\n } else if (typeof value === \"bigint\") {\n hasBigInt = true;\n }\n }\n\n const typeCount = (hasString ? 1 : 0) + (hasNumber ? 1 : 0) + (hasBigInt ? 1 : 0);\n\n if (typeCount === 0) {\n return \"number\";\n }\n if (typeCount > 1) {\n throw new InvalidParameterError(\"Mixed category types are not supported\", paramName);\n }\n if (hasString) return \"string\";\n if (hasBigInt) return \"bigint\";\n return \"number\";\n}\n\nfunction sortCategories(values: Iterable<Category>, paramName: string): Category[] {\n const arr = Array.from(values);\n if (arr.length === 0) return arr;\n\n const categoryType = inferCategoryType(arr, paramName);\n\n if (categoryType === \"string\") {\n arr.sort((a, b) => {\n if (typeof a !== \"string\" || typeof b !== \"string\") {\n throw new DeepboxError(\"Internal error: inconsistent category types\");\n }\n return a.localeCompare(b);\n });\n return arr;\n }\n\n if (categoryType === \"bigint\") {\n arr.sort((a, b) => {\n if (typeof a !== \"bigint\" || typeof b !== \"bigint\") {\n throw new DeepboxError(\"Internal error: inconsistent category types\");\n }\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n });\n return arr;\n }\n\n arr.sort((a, b) => {\n if (typeof a !== \"number\" || typeof b !== \"number\") {\n throw new DeepboxError(\"Internal error: inconsistent category types\");\n }\n return a - b;\n });\n return arr;\n}\n\nfunction validateCategoryValues(values: ReadonlyArray<Category>, paramName: string): Category[] {\n if (values.length === 0) {\n throw new InvalidParameterError(\"categories must contain at least one value\", paramName);\n }\n const arr = Array.from(values);\n inferCategoryType(arr, paramName);\n\n const seen = new Set<Category>();\n for (const value of arr) {\n if (seen.has(value)) {\n throw new InvalidParameterError(\n `categories must be unique; duplicate value ${String(value)}`,\n paramName,\n value\n );\n }\n seen.add(value);\n }\n return arr;\n}\n\nfunction resolveCategoriesOption(\n categoriesOption: CategoriesOption,\n nFeatures: number,\n paramName: string\n): ReadonlyArray<ReadonlyArray<Category>> | null {\n if (categoriesOption === \"auto\") {\n return null;\n }\n if (!Array.isArray(categoriesOption)) {\n throw new InvalidParameterError(\n \"categories must be 'auto' or an array of category arrays\",\n paramName,\n categoriesOption\n );\n }\n if (categoriesOption.length !== nFeatures) {\n throw new InvalidParameterError(\n \"categories length must match number of features\",\n paramName,\n categoriesOption.length\n );\n }\n return categoriesOption;\n}\n\n/**\n * Reads a single value from a 1D tensor at the specified index.\n * Handles both string and numeric dtypes safely.\n *\n * @param t - The tensor to read from\n * @param i - The index to read at\n * @returns The value as a string, number, or bigint\n */\nfunction read1DValue(t: Tensor, i: number): Category {\n const stride = getStride1D(t);\n const idx = t.offset + i * stride;\n if (t.dtype === \"string\") {\n const value = getStringData(t)[idx];\n if (value === undefined) {\n throw new DeepboxError(\"Internal error: string tensor access out of bounds\");\n }\n return value;\n }\n const value = getNumericData(t)[idx];\n if (value === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n return typeof value === \"bigint\" ? value : Number(value);\n}\n\n/**\n * Reads a value from a 2D tensor at the specified row and column.\n * Handles both string and numeric dtypes safely.\n *\n * @param t - The tensor to read from\n * @param row - The row index\n * @param col - The column index\n * @returns The value as a string, number, or bigint\n */\nfunction read2DValue(t: Tensor, row: number, col: number): Category {\n const [stride0, stride1] = getStrides2D(t);\n const idx = t.offset + row * stride0 + col * stride1;\n if (t.dtype === \"string\") {\n const value = getStringData(t)[idx];\n if (value === undefined) {\n throw new DeepboxError(\"Internal error: string tensor access out of bounds\");\n }\n return value;\n }\n const value = getNumericData(t)[idx];\n if (value === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n return typeof value === \"bigint\" ? value : Number(value);\n}\n\nfunction assert1D(t: Tensor, name: string): void {\n if (t.ndim !== 1) {\n throw new ShapeError(`${name} must be a 1D tensor`);\n }\n}\n\nfunction categoryValueAt(values: Category[], index: number, context: string): Category {\n const value = values[index];\n if (value === undefined) {\n throw new DeepboxError(`Internal error: missing category at index ${index} (${context})`);\n }\n return value;\n}\n\nfunction inferCategoryTypeFromRows(rows: Category[][], paramName: string): CategoryType {\n const values: Category[] = [];\n for (const row of rows) {\n for (const value of row) {\n values.push(value);\n }\n }\n return inferCategoryType(values, paramName);\n}\n\nfunction emptyCategoryVectorFromClasses(classes: Category[], paramName: string): Tensor {\n const categoryType = inferCategoryType(classes, paramName);\n if (categoryType === \"string\") {\n return empty([0], { dtype: \"string\" });\n }\n if (categoryType === \"bigint\") {\n return empty([0], { dtype: \"int64\" });\n }\n return zeros([0], { dtype: \"float64\" });\n}\n\nfunction emptyCategoryMatrixFromCategories(\n categories: Category[][],\n nFeatures: number,\n paramName: string\n): Tensor {\n const categoryType = inferCategoryTypeFromRows(categories, paramName);\n if (categoryType === \"string\") {\n return empty([0, nFeatures], { dtype: \"string\" });\n }\n if (categoryType === \"bigint\") {\n return empty([0, nFeatures], { dtype: \"int64\" });\n }\n return zeros([0, nFeatures], { dtype: \"float64\" });\n}\n\nfunction toCategoryVectorTensor(values: Category[], paramName = \"y\"): Tensor {\n const categoryType = inferCategoryType(values, paramName);\n\n if (categoryType === \"string\") {\n const out = new Array<string>(values.length);\n for (let i = 0; i < values.length; i++) {\n const value = values[i];\n if (typeof value !== \"string\") {\n throw new DeepboxError(\"Internal error: expected string category value\");\n }\n out[i] = value;\n }\n return tensor(out);\n }\n\n if (categoryType === \"bigint\") {\n const out = new BigInt64Array(values.length);\n for (let i = 0; i < values.length; i++) {\n const value = values[i];\n if (typeof value !== \"bigint\") {\n throw new DeepboxError(\"Internal error: expected bigint category value\");\n }\n out[i] = value;\n }\n return tensor(out);\n }\n\n const out = new Float64Array(values.length);\n for (let i = 0; i < values.length; i++) {\n const value = values[i];\n if (value === undefined || typeof value !== \"number\") {\n throw new DeepboxError(\"Internal error: expected numeric category value\");\n }\n out[i] = value;\n }\n return tensor(out);\n}\n\nfunction toCategoryMatrixTensor(values: Category[][], paramName = \"X\"): Tensor {\n const rows = values.length;\n const cols = rows > 0 ? (values[0]?.length ?? 0) : 0;\n\n for (let i = 0; i < rows; i++) {\n const row = values[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: missing row in category matrix\");\n }\n if (row.length !== cols) {\n throw new ShapeError(\"Ragged category matrix cannot be converted to tensor\");\n }\n }\n\n const flat: Category[] = [];\n for (const row of values) {\n for (const value of row) {\n flat.push(value);\n }\n }\n\n const categoryType = inferCategoryType(flat, paramName);\n if (categoryType === \"string\") {\n const out = new Array<string[]>(rows);\n for (let i = 0; i < rows; i++) {\n const row = values[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: missing row in category matrix\");\n }\n const outRow = new Array<string>(cols);\n for (let j = 0; j < cols; j++) {\n const value = row[j];\n if (typeof value !== \"string\") {\n throw new DeepboxError(\"Internal error: expected string category value\");\n }\n outRow[j] = value;\n }\n out[i] = outRow;\n }\n return tensor(out);\n }\n if (categoryType === \"number\") {\n const out = new Array<number[]>(rows);\n for (let i = 0; i < rows; i++) {\n const row = values[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: missing row in category matrix\");\n }\n const outRow = new Array<number>(cols);\n for (let j = 0; j < cols; j++) {\n const value = row[j];\n if (typeof value !== \"number\") {\n throw new DeepboxError(\"Internal error: expected numeric category value\");\n }\n outRow[j] = value;\n }\n out[i] = outRow;\n }\n return tensor(out, { dtype: \"float64\" });\n }\n\n const data = new BigInt64Array(rows * cols);\n for (let i = 0; i < flat.length; i++) {\n const value = flat[i];\n if (typeof value !== \"bigint\") {\n throw new DeepboxError(\"Internal error: expected bigint category value\");\n }\n data[i] = value;\n }\n\n const { defaultDevice } = getConfig();\n return TensorImpl.fromTypedArray({\n data,\n shape: [rows, cols],\n dtype: \"int64\",\n device: defaultDevice,\n });\n}\n\n/**\n * Encode target labels with value between 0 and n_classes-1.\n *\n * This transformer encodes categorical labels (strings or numbers) into integers\n * in the range [0, n_classes-1]. It maintains a mapping of unique classes to\n * their integer representations and can reverse the transformation.\n *\n * **Time Complexity:**\n * - fit: O(n) where n is the number of samples\n * - transform: O(n) with O(1) lookup per sample\n * - inverseTransform: O(n)\n *\n * **Space Complexity:** O(k) where k is the number of unique classes\n *\n * @example\n * ```js\n * import { LabelEncoder } from 'deepbox/preprocess';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const y = tensor(['cat', 'dog', 'cat', 'bird']);\n * const encoder = new LabelEncoder();\n * encoder.fit(y);\n * const yEncoded = encoder.transform(y); // [1, 2, 1, 0]\n * const yDecoded = encoder.inverseTransform(yEncoded); // ['cat', 'dog', 'cat', 'bird']\n * ```\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html | Scikit-learn LabelEncoder}\n */\nexport class LabelEncoder {\n /** Indicates whether the encoder has been fitted to data */\n private fitted = false;\n /** Array of unique classes found during fitting, sorted for consistency */\n private classes_?: Category[];\n /** Map from class value to encoded integer index for O(1) lookup */\n private classToIndex_?: Map<Category, number>;\n\n /**\n * Fit label encoder to a set of labels.\n * Extracts unique classes and creates an index mapping.\n *\n * @param y - Target labels (1D tensor of strings or numbers)\n * @returns this - Returns self for method chaining\n * @throws {InvalidParameterError} If y is empty\n */\n fit(y: Tensor): this {\n assert1D(y, \"y\");\n if (y.size === 0) {\n throw new InvalidParameterError(\"Cannot fit LabelEncoder on empty array\", \"y\");\n }\n\n // Collect unique classes using a Set for O(n) complexity\n const uniqueSet = new Set<Category>();\n for (let i = 0; i < y.size; i++) {\n uniqueSet.add(read1DValue(y, i));\n }\n\n // Sort classes for consistent ordering across fits\n this.classes_ = sortCategories(uniqueSet, \"y\");\n\n // Build index map for O(1) transform lookups\n this.classToIndex_ = new Map();\n for (let i = 0; i < this.classes_.length; i++) {\n this.classToIndex_.set(categoryValueAt(this.classes_, i, \"LabelEncoder.fit\"), i);\n }\n\n this.fitted = true;\n return this;\n }\n\n /**\n * Transform labels to normalized encoding.\n * Each unique label is mapped to an integer in [0, n_classes-1].\n *\n * @param y - Target labels to encode (1D tensor)\n * @returns Encoded labels as integer tensor\n * @throws {NotFittedError} If encoder is not fitted\n * @throws {InvalidParameterError} If y contains labels not seen during fit\n */\n transform(y: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"LabelEncoder must be fitted before transform\");\n }\n assert1D(y, \"y\");\n if (y.size === 0) {\n return tensor([]);\n }\n\n const lookup = this.classToIndex_;\n if (!this.classes_ || !lookup) {\n throw new DeepboxError(\"LabelEncoder internal error: missing fitted state\");\n }\n\n // Pre-allocate result array for better performance\n const result = new Array<number>(y.size);\n\n // Transform each label using O(1) map lookup\n for (let i = 0; i < y.size; i++) {\n const val = read1DValue(y, i);\n const idx = lookup.get(val);\n if (idx === undefined) {\n throw new InvalidParameterError(\n `Unknown label: ${String(val)}. Label must be present during fit.`,\n \"y\",\n val\n );\n }\n result[i] = idx;\n }\n\n return tensor(result, { dtype: \"float64\" });\n }\n\n /**\n * Fit label encoder and return encoded labels in one step.\n * Convenience method equivalent to calling fit(y).transform(y).\n *\n * @param y - Target labels (1D tensor)\n * @returns Encoded labels as integer tensor\n */\n fitTransform(y: Tensor): Tensor {\n return this.fit(y).transform(y);\n }\n\n /**\n * Transform integer labels back to original encoding.\n * Reverses the encoding performed by transform().\n *\n * @param y - Encoded labels (1D integer tensor)\n * @returns Original labels (strings or numbers)\n * @throws {NotFittedError} If encoder is not fitted\n * @throws {InvalidParameterError} If y contains invalid indices\n */\n inverseTransform(y: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"LabelEncoder must be fitted before inverse_transform\");\n }\n assert1D(y, \"y\");\n assertNumericTensor(y, \"y\");\n const classes = this.classes_;\n if (!classes) {\n throw new DeepboxError(\"LabelEncoder internal error: missing fitted state\");\n }\n if (y.size === 0) {\n return emptyCategoryVectorFromClasses(classes, \"y\");\n }\n\n const classesLen = classes.length;\n\n const result = new Array<Category>(y.size);\n const stride = getStride1D(y);\n const data = getNumericData(y);\n\n // Map each encoded index back to its original class\n for (let i = 0; i < y.size; i++) {\n const raw = data[y.offset + i * stride];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const idx = Number(raw);\n\n // Validate index is in valid range\n if (idx < 0 || idx >= classesLen || !Number.isInteger(idx)) {\n throw new InvalidParameterError(\n `Invalid label index: ${idx}. Must be integer in [0, ${classesLen - 1}]`,\n \"y\",\n idx\n );\n }\n\n result[i] = categoryValueAt(classes, idx, \"LabelEncoder.inverseTransform\");\n }\n\n // Return tensor with appropriate dtype\n return toCategoryVectorTensor(result, \"y\");\n }\n}\n\n/**\n * Encode categorical features as one-hot numeric array.\n *\n * This encoder transforms categorical features into a binary one-hot encoding.\n * Each categorical feature with n unique values is transformed into n binary features,\n * with only one active (set to 1) per sample.\n *\n * **Time Complexity:**\n * - fit: O(n*m) where n is samples, m is features\n * - transform: O(n*m*k) where k is average categories per feature\n * - Sparse mode is more efficient for high-cardinality features\n *\n * **Space Complexity:**\n * - Dense: O(n * sum(k_i)) where k_i is unique categories for feature i\n * - Sparse: O(nnz) where nnz is number of non-zero elements\n *\n * @example\n * ```js\n * const X = tensor([['red', 'S'], ['blue', 'M'], ['red', 'L']]);\n * const encoder = new OneHotEncoder({ sparse: false });\n * encoder.fit(X);\n * const encoded = encoder.transform(X);\n * // Result: [[1,0,1,0,0], [0,1,0,1,0], [1,0,0,0,1]]\n * ```\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html | Scikit-learn OneHotEncoder}\n */\nexport class OneHotEncoder {\n /** Indicates whether the encoder has been fitted to data */\n private fitted = false;\n /** Array of unique categories for each feature */\n private categories_?: Category[][];\n /** Maps from category value to index for each feature (for O(1) lookup) */\n private categoryToIndex_?: Array<Map<Category, number>>;\n /** Whether to return sparse matrix (CSR) or dense array */\n private sparse: boolean;\n /** How to handle unknown categories during transform */\n private handleUnknown: \"error\" | \"ignore\";\n /** Drop policy to avoid collinearity */\n private drop: DropOption;\n /** Per-feature dropped category index */\n private dropIndices_?: Array<number | null>;\n /** Categories configuration */\n private categoriesOption: CategoriesOption;\n\n /**\n * Creates a new OneHotEncoder instance.\n *\n * @param options - Configuration options\n * @param options.sparse - If true, returns CSRMatrix; if false, returns dense Tensor (default: false)\n * @param options.sparseOutput - Alias for sparse (default: false)\n * @param options.handleUnknown - How to handle unknown categories (default: \"error\")\n * @param options.drop - If set, drops the first or binary category per feature\n * @param options.categories - \"auto\" or explicit category list per feature\n */\n constructor(\n options: {\n sparse?: boolean;\n sparseOutput?: boolean;\n handleUnknown?: \"error\" | \"ignore\";\n drop?: \"first\" | \"if_binary\" | null;\n categories?: CategoriesOption;\n } = {}\n ) {\n const sparseOption = options.sparse ?? options.sparseOutput ?? false;\n if (options.sparse !== undefined && options.sparseOutput !== undefined) {\n if (options.sparse !== options.sparseOutput) {\n throw new InvalidParameterError(\n \"sparse and sparseOutput must match when both are provided\",\n \"sparse\",\n options.sparse\n );\n }\n }\n this.sparse = sparseOption;\n this.handleUnknown = options.handleUnknown ?? \"error\";\n this.drop = options.drop ?? null;\n this.categoriesOption = options.categories ?? \"auto\";\n\n if (typeof this.sparse !== \"boolean\") {\n throw new InvalidParameterError(\"sparse must be a boolean\", \"sparse\", this.sparse);\n }\n if (this.handleUnknown !== \"error\" && this.handleUnknown !== \"ignore\") {\n throw new InvalidParameterError(\n \"handleUnknown must be 'error' or 'ignore'\",\n \"handleUnknown\",\n this.handleUnknown\n );\n }\n if (this.drop !== null && this.drop !== \"first\" && this.drop !== \"if_binary\") {\n throw new InvalidParameterError(\n \"drop must be 'first', 'if_binary', or null\",\n \"drop\",\n this.drop\n );\n }\n }\n\n /**\n * Fit OneHotEncoder to X.\n * Learns the unique categories for each feature.\n *\n * @param X - Training data (2D tensor of categorical features)\n * @returns this - Returns self for method chaining\n * @throws {ShapeError} If X is not a 2D tensor\n * @throws {InvalidParameterError} If X is empty\n */\n fit(X: Tensor): this {\n assert2D(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n\n if (nSamples === 0 || nFeatures === 0) {\n throw new InvalidParameterError(\"Cannot fit OneHotEncoder on empty array\", \"X\");\n }\n\n // Initialize storage for categories and lookup maps\n this.categories_ = [];\n this.categoryToIndex_ = [];\n\n const explicitCategories = resolveCategoriesOption(\n this.categoriesOption,\n nFeatures,\n \"categories\"\n );\n\n // For each feature, collect or validate categories\n for (let j = 0; j < nFeatures; j++) {\n let cats: Category[];\n\n if (explicitCategories) {\n const featureCats = explicitCategories[j];\n if (!featureCats) {\n throw new InvalidParameterError(\"Missing categories for feature\", \"categories\", j);\n }\n if (!Array.isArray(featureCats)) {\n throw new InvalidParameterError(\n \"categories must be an array of category arrays\",\n \"categories\",\n featureCats\n );\n }\n cats = validateCategoryValues(featureCats, \"categories\");\n } else {\n const uniqueSet = new Set<Category>();\n\n // Scan all samples to find unique values in this feature\n for (let i = 0; i < nSamples; i++) {\n uniqueSet.add(read2DValue(X, i, j));\n }\n\n // Sort categories for consistent ordering\n cats = sortCategories(uniqueSet, \"X\");\n }\n\n if (cats.length === 0) {\n throw new InvalidParameterError(\"Each feature must have at least one category\", \"X\", j);\n }\n\n this.categories_.push(cats);\n\n // Build index map for O(1) transform lookups\n const map = new Map<Category, number>();\n for (let k = 0; k < cats.length; k++) {\n map.set(categoryValueAt(cats, k, \"OneHotEncoder.fit\"), k);\n }\n this.categoryToIndex_.push(map);\n\n // Validate training data against explicit categories\n if (explicitCategories) {\n for (let i = 0; i < nSamples; i++) {\n const val = read2DValue(X, i, j);\n if (!map.has(val)) {\n throw new InvalidParameterError(\n `Unknown category: ${String(val)} in feature ${j}`,\n \"X\",\n val\n );\n }\n }\n }\n }\n\n this.dropIndices_ = this.categories_.map((cats) => {\n if (this.drop === null) return null;\n if (this.drop === \"first\") return cats.length > 0 ? 0 : null;\n if (this.drop === \"if_binary\") return cats.length === 2 ? 0 : null;\n return null;\n });\n\n this.fitted = true;\n return this;\n }\n\n /**\n * Transform X using one-hot encoding.\n * Each categorical value is converted to a binary vector.\n *\n * @param X - Data to transform (2D tensor)\n * @returns Encoded data as dense Tensor or sparse CSRMatrix\n * @throws {NotFittedError} If encoder is not fitted\n * @throws {InvalidParameterError} If X contains unknown categories\n */\n transform(X: Tensor): Tensor | CSRMatrix {\n if (!this.fitted) {\n throw new NotFittedError(\"OneHotEncoder must be fitted before transform\");\n }\n assert2D(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n\n const categories = this.categories_;\n const categoryMaps = this.categoryToIndex_;\n if (!categories || !categoryMaps) {\n throw new DeepboxError(\"OneHotEncoder internal error: missing fitted state\");\n }\n const fittedFeatures = categories.length;\n if (nFeatures !== fittedFeatures) {\n throw new InvalidParameterError(\n \"X has a different feature count than during fit\",\n \"X\",\n nFeatures\n );\n }\n\n const dropIndices = this.dropIndices_ ?? categories.map(() => null);\n\n // Calculate total output columns (sum of all category counts minus drops)\n let totalCols = 0;\n for (let j = 0; j < categories.length; j++) {\n const cats = categories[j];\n if (!cats) continue;\n const dropIndex = dropIndices[j] ?? null;\n totalCols += cats.length - (dropIndex === null ? 0 : 1);\n }\n\n if (nSamples === 0 || nFeatures === 0) {\n return this.sparse\n ? CSRMatrix.fromCOO({\n rows: 0,\n cols: totalCols,\n rowIndices: new Int32Array(0),\n colIndices: new Int32Array(0),\n values: new Float64Array(0),\n })\n : zeros([0, totalCols], { dtype: \"float64\" });\n }\n\n if (this.sparse) {\n const rowIdx: number[] = [];\n const colIdx: number[] = [];\n const vals: number[] = [];\n\n for (let i = 0; i < nSamples; i++) {\n let colOffset = 0;\n for (let j = 0; j < nFeatures; j++) {\n const cats = categories[j];\n const map = categoryMaps[j];\n const dropIndex = dropIndices[j] ?? null;\n if (!cats || !map) {\n throw new DeepboxError(\"OneHotEncoder internal error: missing fitted categories\");\n }\n const outSize = cats.length - (dropIndex === null ? 0 : 1);\n const val = read2DValue(X, i, j);\n const idx = map.get(val);\n if (idx === undefined) {\n if (this.handleUnknown === \"ignore\") {\n colOffset += outSize;\n continue;\n }\n throw new InvalidParameterError(`Unknown category: ${String(val)}`, \"X\", val);\n }\n\n if (dropIndex !== null && idx === dropIndex) {\n colOffset += outSize;\n continue;\n }\n\n const adjusted = dropIndex !== null && idx > dropIndex ? idx - 1 : idx;\n rowIdx.push(i);\n colIdx.push(colOffset + adjusted);\n vals.push(1);\n colOffset += outSize;\n }\n }\n\n return CSRMatrix.fromCOO({\n rows: nSamples,\n cols: totalCols,\n rowIndices: Int32Array.from(rowIdx),\n colIndices: Int32Array.from(colIdx),\n values: Float64Array.from(vals),\n });\n }\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(totalCols).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n let colOffset = 0;\n for (let j = 0; j < nFeatures; j++) {\n const cats = categories[j];\n const map = categoryMaps[j];\n const dropIndex = dropIndices[j] ?? null;\n if (!cats || !map) {\n throw new DeepboxError(\"OneHotEncoder internal error: missing fitted categories\");\n }\n const outSize = cats.length - (dropIndex === null ? 0 : 1);\n const val = read2DValue(X, i, j);\n const idx = map.get(val);\n if (idx === undefined) {\n if (this.handleUnknown === \"ignore\") {\n colOffset += outSize;\n continue;\n }\n throw new InvalidParameterError(`Unknown category: ${String(val)}`, \"X\", val);\n }\n if (dropIndex !== null && idx === dropIndex) {\n colOffset += outSize;\n continue;\n }\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n const adjusted = dropIndex !== null && idx > dropIndex ? idx - 1 : idx;\n row[colOffset + adjusted] = 1;\n colOffset += outSize;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n fitTransform(X: Tensor): Tensor | CSRMatrix {\n return this.fit(X).transform(X);\n }\n\n inverseTransform(X: Tensor | CSRMatrix): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"OneHotEncoder must be fitted before inverse_transform\");\n }\n const dense = X instanceof CSRMatrix ? X.toDense() : X;\n assert2D(dense, \"X\");\n assertNumericTensor(dense, \"X\");\n const [nSamples, nCols] = getShape2D(dense);\n const categories = this.categories_;\n if (!categories) {\n throw new DeepboxError(\"OneHotEncoder internal error: missing fitted categories\");\n }\n const nFeatures = categories.length;\n const dropIndices = this.dropIndices_ ?? categories.map(() => null);\n const totalCols = categories.reduce((sum, cats, idx) => {\n const dropIndex = dropIndices[idx] ?? null;\n return sum + cats.length - (dropIndex === null ? 0 : 1);\n }, 0);\n if (nCols !== totalCols) {\n throw new InvalidParameterError(\"column count does not match fitted categories\", \"X\", nCols);\n }\n if (nSamples === 0) {\n return emptyCategoryMatrixFromCategories(categories, nFeatures, \"X\");\n }\n\n const result = new Array<Category[]>(nSamples);\n for (let i = 0; i < nSamples; i++) {\n result[i] = new Array<Category>(nFeatures);\n }\n const denseData = getNumericData(dense);\n const [stride0, stride1] = getStrides2D(dense);\n\n for (let i = 0; i < nSamples; i++) {\n let colOffset = 0;\n for (let j = 0; j < nFeatures; j++) {\n const cats = categories[j];\n const dropIndex = dropIndices[j] ?? null;\n if (!cats) {\n throw new DeepboxError(\"OneHotEncoder internal error: missing fitted categories\");\n }\n const outSize = cats.length - (dropIndex === null ? 0 : 1);\n if (outSize === 0) {\n const row = result[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[j] = categoryValueAt(cats, dropIndex ?? 0, \"OneHotEncoder.inverseTransform\");\n continue;\n }\n\n let maxIdx = 0;\n const rowBase = dense.offset + i * stride0 + colOffset * stride1;\n const first = denseData[rowBase];\n if (first === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n let maxVal = Number(first);\n let hasPositive = maxVal > 0;\n\n for (let k = 1; k < outSize; k++) {\n const raw = denseData[rowBase + k * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n if (val > maxVal) {\n maxVal = val;\n maxIdx = k;\n }\n if (val > 0) {\n hasPositive = true;\n }\n }\n\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n if (!hasPositive) {\n if (dropIndex !== null) {\n row[j] = categoryValueAt(cats, dropIndex, \"OneHotEncoder.inverseTransform\");\n } else if (this.handleUnknown === \"ignore\") {\n throw new InvalidParameterError(\n \"Cannot inverse-transform: sample contains no active category (all zeros). This may happen if unknown categories were ignored during transform.\",\n \"X\"\n );\n } else {\n throw new InvalidParameterError(\"Invalid one-hot encoding: all zeros\", \"X\");\n }\n } else {\n const actualIdx = dropIndex !== null && maxIdx >= dropIndex ? maxIdx + 1 : maxIdx;\n row[j] = categoryValueAt(cats, actualIdx, \"OneHotEncoder.inverseTransform\");\n }\n\n colOffset += outSize;\n }\n }\n\n return toCategoryMatrixTensor(result, \"X\");\n }\n}\n\n/**\n * Encode categorical features as integer array.\n *\n * This encoder transforms categorical features into ordinal integers.\n * Each feature's categories are mapped to integers [0, n_categories-1]\n * based on their sorted order. Unlike OneHotEncoder, this maintains\n * a single column per feature.\n *\n * **Time Complexity:**\n * - fit: O(n*m*log(k)) where n=samples, m=features, k=avg categories\n * - transform: O(n*m*log(k)) due to indexOf lookup\n *\n * **Space Complexity:** O(m*k) where m=features, k=avg categories per feature\n *\n * @example\n * ```js\n * const X = tensor([['low', 'red'], ['high', 'blue'], ['medium', 'red']]);\n * const encoder = new OrdinalEncoder();\n * encoder.fit(X);\n * const encoded = encoder.transform(X);\n * // Result: [[1, 1], [0, 0], [2, 1]] (alphabetically sorted)\n * ```\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OrdinalEncoder.html | Scikit-learn OrdinalEncoder}\n */\nexport class OrdinalEncoder {\n /** Indicates whether the encoder has been fitted to data */\n private fitted = false;\n /** Array of unique categories for each feature, sorted */\n private categories_?: Category[][];\n /** Maps from category value to index for each feature (for O(1) lookup) */\n private categoryToIndex_?: Array<Map<Category, number>>;\n /** How to handle unknown categories during transform */\n private handleUnknown: \"error\" | \"useEncodedValue\";\n /** Value used for unknown categories when handleUnknown = \"useEncodedValue\" */\n private unknownValue: number;\n /** Categories configuration */\n private categoriesOption: CategoriesOption;\n\n /**\n * Creates a new OrdinalEncoder instance.\n *\n * @param options - Configuration options\n * @param options.handleUnknown - How to handle unknown categories\n * @param options.unknownValue - Encoded value for unknown categories when handleUnknown=\"useEncodedValue\"\n * @param options.categories - \"auto\" or explicit categories per feature\n */\n constructor(\n options: {\n handleUnknown?: \"error\" | \"useEncodedValue\";\n unknownValue?: number;\n categories?: CategoriesOption;\n } = {}\n ) {\n this.handleUnknown = options.handleUnknown ?? \"error\";\n this.unknownValue = options.unknownValue ?? -1;\n this.categoriesOption = options.categories ?? \"auto\";\n\n if (this.handleUnknown !== \"error\" && this.handleUnknown !== \"useEncodedValue\") {\n throw new InvalidParameterError(\n \"handleUnknown must be 'error' or 'useEncodedValue'\",\n \"handleUnknown\",\n this.handleUnknown\n );\n }\n if (!Number.isFinite(this.unknownValue) && !Number.isNaN(this.unknownValue)) {\n throw new InvalidParameterError(\n \"unknownValue must be a finite number or NaN\",\n \"unknownValue\",\n this.unknownValue\n );\n }\n if (Number.isFinite(this.unknownValue) && !Number.isInteger(this.unknownValue)) {\n throw new InvalidParameterError(\n \"unknownValue must be an integer when finite\",\n \"unknownValue\",\n this.unknownValue\n );\n }\n }\n\n /**\n * Fit OrdinalEncoder to X.\n * Learns the unique categories for each feature and their ordering.\n *\n * @param X - Training data (2D tensor of categorical features)\n * @returns this - Returns self for method chaining\n * @throws {InvalidParameterError} If X is empty\n */\n fit(X: Tensor): this {\n assert2D(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n\n if (nSamples === 0) {\n throw new InvalidParameterError(\"Cannot fit OrdinalEncoder on empty array\", \"X\");\n }\n\n this.categories_ = [];\n this.categoryToIndex_ = [];\n\n const explicitCategories = resolveCategoriesOption(\n this.categoriesOption,\n nFeatures,\n \"categories\"\n );\n\n // For each feature, collect and sort unique categories\n for (let j = 0; j < nFeatures; j++) {\n let sorted: Category[];\n\n if (explicitCategories) {\n const featureCats = explicitCategories[j];\n if (!featureCats) {\n throw new InvalidParameterError(\"Missing categories for feature\", \"categories\", j);\n }\n if (!Array.isArray(featureCats)) {\n throw new InvalidParameterError(\n \"categories must be an array of category arrays\",\n \"categories\",\n featureCats\n );\n }\n sorted = validateCategoryValues(featureCats, \"categories\");\n } else {\n const uniqueSet = new Set<Category>();\n\n // Collect all unique values in this feature\n for (let i = 0; i < nSamples; i++) {\n uniqueSet.add(read2DValue(X, i, j));\n }\n\n // Sort categories for consistent ordering\n sorted = sortCategories(uniqueSet, \"X\");\n }\n\n if (sorted.length === 0) {\n throw new InvalidParameterError(\"Each feature must have at least one category\", \"X\", j);\n }\n\n this.categories_.push(sorted);\n\n // Build index map for O(1) transform lookups\n const map = new Map<Category, number>();\n for (let k = 0; k < sorted.length; k++) {\n map.set(categoryValueAt(sorted, k, \"OrdinalEncoder.fit\"), k);\n }\n this.categoryToIndex_.push(map);\n\n if (explicitCategories) {\n for (let i = 0; i < nSamples; i++) {\n const val = read2DValue(X, i, j);\n if (!map.has(val)) {\n throw new InvalidParameterError(\n `Unknown category: ${String(val)} in feature ${j}`,\n \"X\",\n val\n );\n }\n }\n }\n\n if (this.handleUnknown === \"useEncodedValue\") {\n if (\n Number.isFinite(this.unknownValue) &&\n this.unknownValue >= 0 &&\n this.unknownValue < sorted.length\n ) {\n throw new InvalidParameterError(\n \"unknownValue must be outside the range of encoded categories\",\n \"unknownValue\",\n this.unknownValue\n );\n }\n }\n }\n\n this.fitted = true;\n return this;\n }\n\n /**\n * Transform X using ordinal encoding.\n * Each category is mapped to its index in the sorted categories array.\n *\n * @param X - Data to transform (2D tensor)\n * @returns Encoded data with integer values\n * @throws {NotFittedError} If encoder is not fitted\n * @throws {InvalidParameterError} If X contains unknown categories\n */\n transform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"OrdinalEncoder must be fitted before transform\");\n }\n assert2D(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const fittedFeatures = this.categories_?.length ?? 0;\n if (nFeatures !== fittedFeatures) {\n throw new InvalidParameterError(\n \"X has a different feature count than during fit\",\n \"X\",\n nFeatures\n );\n }\n\n if (nSamples === 0) {\n return zeros([0, nFeatures], { dtype: \"float64\" });\n }\n\n // Pre-allocate result array\n const result = new Array<number[]>(nSamples);\n for (let i = 0; i < nSamples; i++) {\n result[i] = new Array<number>(nFeatures);\n }\n\n // Transform each value to its ordinal index using O(1) map lookup\n for (let i = 0; i < nSamples; i++) {\n for (let j = 0; j < nFeatures; j++) {\n const val = read2DValue(X, i, j);\n const map = this.categoryToIndex_?.[j];\n if (!map) {\n throw new DeepboxError(\"OrdinalEncoder internal error: missing fitted categories\");\n }\n\n // Use O(1) map lookup instead of O(n) indexOf\n const idx = map.get(val);\n const row = result[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n if (idx === undefined) {\n if (this.handleUnknown === \"useEncodedValue\") {\n row[j] = this.unknownValue;\n continue;\n }\n throw new InvalidParameterError(\n `Unknown category: ${String(val)} in feature ${j}`,\n \"X\",\n val\n );\n }\n\n row[j] = idx;\n }\n }\n\n return tensor(result, { dtype: \"float64\" });\n }\n\n /**\n * Fit encoder and transform X in one step.\n * Convenience method equivalent to calling fit(X).transform(X).\n *\n * @param X - Training data (2D tensor)\n * @returns Encoded data\n */\n fitTransform(X: Tensor): Tensor {\n return this.fit(X).transform(X);\n }\n\n /**\n * Transform ordinal integers back to original categories.\n * Reverses the encoding performed by transform().\n *\n * @param X - Encoded data (2D integer tensor)\n * @returns Original categorical data\n * @throws {NotFittedError} If encoder is not fitted\n * @throws {InvalidParameterError} If X contains invalid indices\n */\n inverseTransform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"OrdinalEncoder must be fitted before inverse_transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const fittedFeatures = this.categories_?.length ?? 0;\n if (nFeatures !== fittedFeatures) {\n throw new InvalidParameterError(\n \"X has a different feature count than during fit\",\n \"X\",\n nFeatures\n );\n }\n\n if (nSamples === 0 || nFeatures === 0) {\n const categoryRows = this.categories_ ?? [];\n const categoryType = inferCategoryTypeFromRows(categoryRows, \"X\");\n if (categoryType === \"string\") {\n return empty([0, nFeatures], { dtype: \"string\" });\n }\n if (categoryType === \"bigint\") {\n return empty([0, nFeatures], { dtype: \"int64\" });\n }\n return zeros([0, nFeatures], { dtype: \"float64\" });\n }\n\n // Pre-allocate result array\n const result = new Array<Category[]>(nSamples);\n for (let i = 0; i < nSamples; i++) {\n result[i] = new Array<Category>(nFeatures);\n }\n\n // Map each ordinal index back to its original category\n const [stride0, stride1] = getStrides2D(X);\n const data = getNumericData(X);\n for (let i = 0; i < nSamples; i++) {\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const idx = Number(raw);\n const isUnknownValue =\n this.handleUnknown === \"useEncodedValue\" &&\n (Number.isNaN(idx) ? Number.isNaN(this.unknownValue) : idx === this.unknownValue);\n if (isUnknownValue) {\n throw new InvalidParameterError(\n \"Cannot inverse-transform unknown encoded value\",\n \"X\",\n idx\n );\n }\n const cats = this.categories_?.[j];\n\n // Validate index is in valid range\n if (!cats || idx < 0 || idx >= cats.length || !Number.isInteger(idx)) {\n throw new InvalidParameterError(\n `Invalid encoded value: ${idx} for feature ${j}. Must be integer in [0, ${(cats?.length ?? 0) - 1}]`,\n \"X\",\n idx\n );\n }\n\n const row = result[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n const catVal = cats[idx];\n if (catVal === undefined) {\n throw new DeepboxError(\"Internal error: category value missing\");\n }\n row[j] = catVal;\n }\n }\n\n return toCategoryMatrixTensor(result, \"X\");\n }\n}\n\n/**\n * Binarize labels in a one-vs-all fashion.\n *\n * This transformer creates a binary matrix representation of labels where\n * each class gets its own column. For multi-class problems, this creates\n * a one-hot encoding of the labels.\n *\n * **Time Complexity:**\n * - fit: O(n) where n is the number of samples\n * - transform: O(n*k) where k is the number of classes\n *\n * **Space Complexity:** O(n*k) for the output matrix\n *\n * @example\n * ```js\n * const y = tensor([0, 1, 2, 0, 1]);\n * const binarizer = new LabelBinarizer();\n * const yBin = binarizer.fitTransform(y);\n * // Result shape: [5, 3] with one-hot encoding\n * ```\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelBinarizer.html | Scikit-learn LabelBinarizer}\n */\nexport class LabelBinarizer {\n /** Indicates whether the binarizer has been fitted to data */\n private fitted = false;\n /** Array of unique classes found during fitting, sorted */\n private classes_?: Category[];\n /** Map from class value to index for O(1) lookups */\n private classToIndex_?: Map<Category, number>;\n /** Value used for positive class */\n private posLabel: number;\n /** Value used for negative class */\n private negLabel: number;\n /** Whether to return sparse matrix output */\n private sparse: boolean;\n\n /**\n * Creates a new LabelBinarizer instance.\n *\n * @param options - Configuration options\n * @param options.posLabel - Value for positive class (default: 1)\n * @param options.negLabel - Value for negative class (default: 0)\n * @param options.sparse - If true, returns CSRMatrix (default: false)\n * @param options.sparseOutput - Alias for sparse (default: false)\n */\n constructor(\n options: {\n posLabel?: number;\n negLabel?: number;\n sparse?: boolean;\n sparseOutput?: boolean;\n } = {}\n ) {\n this.posLabel = options.posLabel ?? 1;\n this.negLabel = options.negLabel ?? 0;\n const sparseOption = options.sparse ?? options.sparseOutput ?? false;\n if (!Number.isFinite(this.posLabel) || !Number.isFinite(this.negLabel)) {\n throw new InvalidParameterError(\"posLabel and negLabel must be finite numbers\", \"posLabel\");\n }\n if (this.posLabel <= this.negLabel) {\n throw new InvalidParameterError(\n \"posLabel must be greater than negLabel\",\n \"posLabel\",\n this.posLabel\n );\n }\n if (options.sparse !== undefined && options.sparseOutput !== undefined) {\n if (options.sparse !== options.sparseOutput) {\n throw new InvalidParameterError(\n \"sparse and sparseOutput must match when both are provided\",\n \"sparse\",\n options.sparse\n );\n }\n }\n if (typeof sparseOption !== \"boolean\") {\n throw new InvalidParameterError(\"sparse must be a boolean\", \"sparse\", sparseOption);\n }\n if (sparseOption && this.negLabel !== 0) {\n throw new InvalidParameterError(\n \"sparse output requires negLabel to be 0\",\n \"negLabel\",\n this.negLabel\n );\n }\n this.sparse = sparseOption;\n }\n\n /**\n * Fit label binarizer to a set of labels.\n * Learns the unique classes present in the data.\n *\n * @param y - Target labels (1D tensor)\n * @returns this - Returns self for method chaining\n * @throws {InvalidParameterError} If y is empty\n */\n fit(y: Tensor): this {\n assert1D(y, \"y\");\n if (y.size === 0) {\n throw new InvalidParameterError(\"Cannot fit LabelBinarizer on empty array\", \"y\");\n }\n\n // Collect unique classes\n const uniqueSet = new Set<Category>();\n for (let i = 0; i < y.size; i++) {\n uniqueSet.add(read1DValue(y, i));\n }\n\n // Sort classes for consistent ordering\n this.classes_ = sortCategories(uniqueSet, \"y\");\n this.classToIndex_ = new Map();\n for (let i = 0; i < this.classes_.length; i++) {\n this.classToIndex_.set(categoryValueAt(this.classes_, i, \"LabelBinarizer.fit\"), i);\n }\n\n this.fitted = true;\n return this;\n }\n\n /**\n * Transform labels to binary matrix.\n * Each label is converted to a binary vector with a single 1.\n *\n * @param y - Labels to transform (1D tensor)\n * @returns Binary matrix (Tensor or CSRMatrix) with shape [n_samples, n_classes]\n * @throws {NotFittedError} If binarizer is not fitted\n * @throws {InvalidParameterError} If y contains unknown labels\n */\n transform(y: Tensor): Tensor | CSRMatrix {\n if (!this.fitted) {\n throw new NotFittedError(\"LabelBinarizer must be fitted before transform\");\n }\n assert1D(y, \"y\");\n if (y.size === 0) {\n const nClasses = this.classes_?.length ?? 0;\n return this.sparse\n ? CSRMatrix.fromCOO({\n rows: 0,\n cols: nClasses,\n rowIndices: new Int32Array(0),\n colIndices: new Int32Array(0),\n values: new Float64Array(0),\n })\n : zeros([0, nClasses], { dtype: \"float64\" });\n }\n\n const nSamples = y.size;\n const nClasses = this.classes_?.length ?? 0;\n const lookup = this.classToIndex_;\n if (!lookup) {\n throw new DeepboxError(\"LabelBinarizer internal error: missing fitted lookup\");\n }\n\n if (this.sparse) {\n const rowIdx: number[] = [];\n const colIdx: number[] = [];\n const vals: number[] = [];\n\n for (let i = 0; i < nSamples; i++) {\n const val = read1DValue(y, i);\n const idx = lookup.get(val);\n\n if (idx === undefined) {\n throw new InvalidParameterError(\n `Unknown label: ${String(val)}. Label must be present during fit.`,\n \"y\",\n val\n );\n }\n\n rowIdx.push(i);\n colIdx.push(idx);\n vals.push(this.posLabel);\n }\n\n return CSRMatrix.fromCOO({\n rows: nSamples,\n cols: nClasses,\n rowIndices: Int32Array.from(rowIdx),\n colIndices: Int32Array.from(colIdx),\n values: Float64Array.from(vals),\n });\n }\n\n // Pre-allocate binary matrix\n const result = new Array<number[]>(nSamples);\n for (let i = 0; i < nSamples; i++) {\n result[i] = new Array<number>(nClasses).fill(this.negLabel);\n }\n\n // Set appropriate bit for each label\n for (let i = 0; i < nSamples; i++) {\n const val = read1DValue(y, i);\n const idx = lookup.get(val);\n\n if (idx === undefined) {\n throw new InvalidParameterError(\n `Unknown label: ${String(val)}. Label must be present during fit.`,\n \"y\",\n val\n );\n }\n\n const row = result[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[idx] = this.posLabel;\n }\n\n return tensor(result, { dtype: \"float64\" });\n }\n\n /**\n * Fit binarizer and transform labels in one step.\n * Convenience method equivalent to calling fit(y).transform(y).\n *\n * @param y - Target labels (1D tensor)\n * @returns Binary matrix (Tensor or CSRMatrix)\n */\n fitTransform(y: Tensor): Tensor | CSRMatrix {\n return this.fit(y).transform(y);\n }\n\n /**\n * Transform binary matrix back to labels.\n * Finds the column with maximum value for each row.\n *\n * @param Y - Binary matrix (2D tensor or CSRMatrix)\n * @returns Original labels (1D tensor)\n * @throws {NotFittedError} If binarizer is not fitted\n * @throws {InvalidParameterError} If Y has invalid shape\n */\n inverseTransform(Y: Tensor | CSRMatrix): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"LabelBinarizer must be fitted before inverse_transform\");\n }\n if (Y instanceof CSRMatrix) {\n if (this.negLabel !== 0) {\n throw new InvalidParameterError(\n \"Sparse inverse transform requires negLabel to be 0\",\n \"negLabel\",\n this.negLabel\n );\n }\n const [rows, cols] = Y.shape;\n if (rows === undefined || cols === undefined) {\n throw new ShapeError(\"Y must have valid shape\");\n }\n const nClasses = this.classes_?.length ?? 0;\n if (cols !== nClasses) {\n throw new InvalidParameterError(\"column count does not match number of classes\", \"Y\", cols);\n }\n const classes = this.classes_;\n if (!classes) {\n throw new DeepboxError(\"LabelBinarizer internal error: missing fitted classes\");\n }\n if (rows === 0) {\n return emptyCategoryVectorFromClasses(classes, \"y\");\n }\n\n const result = new Array<Category>(rows);\n for (let i = 0; i < rows; i++) {\n let maxIdx = 0;\n let maxVal = this.negLabel;\n const start = Y.indptr[i] ?? 0;\n const end = Y.indptr[i + 1] ?? start;\n for (let p = start; p < end; p++) {\n const col = Y.indices[p];\n if (col === undefined) {\n throw new DeepboxError(\"Internal error: sparse column index missing\");\n }\n if (col < 0 || col >= nClasses) {\n throw new InvalidParameterError(\n \"column index out of bounds for fitted classes\",\n \"Y\",\n col\n );\n }\n const raw = Y.data[p];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: sparse value missing\");\n }\n const val = Number(raw);\n if (val > maxVal) {\n maxVal = val;\n maxIdx = col;\n }\n }\n\n if (maxVal <= this.negLabel) {\n throw new InvalidParameterError(\n `No active label found for sample ${i}. LabelBinarizer expects exactly one active label.`,\n \"Y\"\n );\n }\n result[i] = categoryValueAt(classes, maxIdx, \"LabelBinarizer.inverseTransform\");\n }\n return toCategoryVectorTensor(result, \"y\");\n }\n\n assert2D(Y, \"Y\");\n assertNumericTensor(Y, \"Y\");\n const [nSamples, nCols] = getShape2D(Y);\n\n const nClasses = this.classes_?.length ?? 0;\n if (nCols !== nClasses) {\n throw new InvalidParameterError(\"column count does not match number of classes\", \"Y\", nCols);\n }\n const classes = this.classes_;\n if (!classes) {\n throw new DeepboxError(\"LabelBinarizer internal error: missing fitted classes\");\n }\n if (nSamples === 0) {\n return emptyCategoryVectorFromClasses(classes, \"y\");\n }\n const result = new Array<Category>(nSamples);\n const [stride0, stride1] = getStrides2D(Y);\n const data = getNumericData(Y);\n\n // For each sample, find the class with maximum activation\n for (let i = 0; i < nSamples; i++) {\n let maxIdx = 0;\n const rowBase = Y.offset + i * stride0;\n const first = data[rowBase];\n if (first === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n let maxVal = Number(first);\n\n // Find column with highest value\n for (let j = 1; j < nCols; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n if (val > maxVal) {\n maxVal = val;\n maxIdx = j;\n }\n }\n\n if (maxVal <= this.negLabel) {\n throw new InvalidParameterError(\n `No active label found for sample ${i}. LabelBinarizer expects exactly one active label.`,\n \"Y\"\n );\n }\n\n result[i] = categoryValueAt(classes, maxIdx, \"LabelBinarizer.inverseTransform\");\n }\n\n // Return tensor with appropriate dtype\n return toCategoryVectorTensor(result, \"y\");\n }\n}\n\n/**\n * Transform multi-label classification data to binary format.\n *\n * This transformer handles multi-label classification where each sample\n * can belong to multiple classes simultaneously. It creates a binary\n * matrix where each column represents a class and multiple columns can\n * be active (set to 1) for a single sample.\n *\n * **Time Complexity:**\n * - fit: O(n*k) where n is samples, k is avg labels per sample\n * - transform: O(n*k*c) where c is total unique classes\n *\n * **Space Complexity:** O(n*c) for the output matrix\n *\n * @example\n * ```js\n * const y = [['sci-fi', 'action'], ['comedy'], ['action', 'drama']];\n * const binarizer = new MultiLabelBinarizer();\n * const yBin = binarizer.fitTransform(y);\n * // Each row can have multiple 1s\n * ```\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MultiLabelBinarizer.html | Scikit-learn MultiLabelBinarizer}\n */\nexport class MultiLabelBinarizer {\n /** Indicates whether the binarizer has been fitted to data */\n private fitted = false;\n /** Array of all unique classes found across all samples, sorted */\n private classes_?: Category[];\n /** Map from class value to index for O(1) lookups */\n private classToIndex_?: Map<Category, number>;\n /** Whether to return sparse matrix (CSR) or dense array */\n private sparse: boolean;\n /** Optional explicit class ordering */\n private classesOption?: Category[];\n\n /**\n * Creates a new MultiLabelBinarizer instance.\n *\n * @param options - Configuration options\n * @param options.sparse - If true, returns CSRMatrix; if false, returns dense Tensor (default: false)\n * @param options.sparseOutput - Alias for sparse (default: false)\n * @param options.classes - Explicit class ordering to use instead of sorting\n */\n constructor(\n options: {\n sparse?: boolean;\n sparseOutput?: boolean;\n classes?: ReadonlyArray<Category>;\n } = {}\n ) {\n const sparseOption = options.sparse ?? options.sparseOutput ?? false;\n if (options.sparse !== undefined && options.sparseOutput !== undefined) {\n if (options.sparse !== options.sparseOutput) {\n throw new InvalidParameterError(\n \"sparse and sparseOutput must match when both are provided\",\n \"sparse\",\n options.sparse\n );\n }\n }\n this.sparse = sparseOption;\n if (typeof this.sparse !== \"boolean\") {\n throw new InvalidParameterError(\"sparse must be a boolean\", \"sparse\", this.sparse);\n }\n if (options.classes !== undefined) {\n this.classesOption = validateCategoryValues(options.classes, \"classes\");\n }\n }\n\n /**\n * Fit multi-label binarizer to label sets.\n * Learns all unique classes present across all samples.\n *\n * @param y - Array of label sets, where each element is an array of string/number/bigint labels\n * @returns this - Returns self for method chaining\n * @throws {InvalidParameterError} If y is empty\n */\n fit(y: ReadonlyArray<ReadonlyArray<Category>>): this {\n if (y.length === 0) {\n throw new InvalidParameterError(\"Cannot fit MultiLabelBinarizer on empty array\", \"y\");\n }\n for (const labels of y) {\n if (!Array.isArray(labels)) {\n throw new InvalidParameterError(\"MultiLabelBinarizer expects label arrays\", \"y\", labels);\n }\n for (const label of labels) {\n if (typeof label !== \"string\" && typeof label !== \"number\" && typeof label !== \"bigint\") {\n throw new InvalidParameterError(\n \"MultiLabelBinarizer labels must be strings, numbers, or bigints\",\n \"y\",\n label\n );\n }\n }\n }\n\n if (this.classesOption && this.classesOption.length === 0) {\n throw new InvalidParameterError(\"classes must contain at least one value\", \"classes\");\n }\n\n if (this.classesOption) {\n this.classes_ = Array.from(this.classesOption);\n } else {\n // Collect all unique labels across all samples\n const uniqueSet = new Set<Category>();\n for (const labels of y) {\n for (const label of labels) {\n uniqueSet.add(label);\n }\n }\n\n // Sort classes for consistent ordering\n this.classes_ = sortCategories(uniqueSet, \"y\");\n }\n this.classToIndex_ = new Map();\n for (let i = 0; i < this.classes_.length; i++) {\n this.classToIndex_.set(categoryValueAt(this.classes_, i, \"MultiLabelBinarizer.fit\"), i);\n }\n if (this.classesOption) {\n for (const labels of y) {\n for (const label of labels) {\n if (!this.classToIndex_.has(label)) {\n throw new InvalidParameterError(\n `Unknown label: ${String(label)}. Label must be present in classes.`,\n \"y\",\n label\n );\n }\n }\n }\n }\n\n this.fitted = true;\n return this;\n }\n\n /**\n * Transform label sets to binary matrix.\n * Each sample can have multiple active (1) columns.\n *\n * @param y - Array of label sets to transform (string/number/bigint labels)\n * @returns Binary matrix (Tensor or CSRMatrix) with shape [n_samples, n_classes]\n * @throws {NotFittedError} If binarizer is not fitted\n * @throws {InvalidParameterError} If y contains unknown labels\n */\n transform(y: ReadonlyArray<ReadonlyArray<Category>>): Tensor | CSRMatrix {\n if (!this.fitted) {\n throw new NotFittedError(\"MultiLabelBinarizer must be fitted before transform\");\n }\n for (const labels of y) {\n if (!Array.isArray(labels)) {\n throw new InvalidParameterError(\"MultiLabelBinarizer expects label arrays\", \"y\", labels);\n }\n for (const label of labels) {\n if (typeof label !== \"string\" && typeof label !== \"number\" && typeof label !== \"bigint\") {\n throw new InvalidParameterError(\n \"MultiLabelBinarizer labels must be strings, numbers, or bigints\",\n \"y\",\n label\n );\n }\n }\n }\n if (y.length === 0) {\n const nClasses = this.classes_?.length ?? 0;\n return this.sparse\n ? CSRMatrix.fromCOO({\n rows: 0,\n cols: nClasses,\n rowIndices: new Int32Array(0),\n colIndices: new Int32Array(0),\n values: new Float64Array(0),\n })\n : zeros([0, nClasses], { dtype: \"float64\" });\n }\n\n const nSamples = y.length;\n const nClasses = this.classes_?.length ?? 0;\n const lookup = this.classToIndex_;\n if (!lookup) {\n throw new DeepboxError(\"MultiLabelBinarizer internal error: missing fitted lookup\");\n }\n\n if (this.sparse) {\n const rowIdx: number[] = [];\n const colIdx: number[] = [];\n const vals: number[] = [];\n\n for (let i = 0; i < nSamples; i++) {\n const yRow = y[i];\n if (!yRow) continue;\n const seen = new Set<number>();\n for (const label of yRow) {\n const idx = lookup.get(label);\n if (idx === undefined) {\n throw new InvalidParameterError(\n `Unknown label: ${String(label)}. Label must be present during fit.`,\n \"y\",\n label\n );\n }\n if (seen.has(idx)) continue;\n seen.add(idx);\n rowIdx.push(i);\n colIdx.push(idx);\n vals.push(1);\n }\n }\n\n return CSRMatrix.fromCOO({\n rows: nSamples,\n cols: nClasses,\n rowIndices: Int32Array.from(rowIdx),\n colIndices: Int32Array.from(colIdx),\n values: Float64Array.from(vals),\n });\n }\n\n // Pre-allocate binary matrix\n const result = new Array<number[]>(nSamples);\n for (let i = 0; i < nSamples; i++) {\n result[i] = new Array<number>(nClasses).fill(0);\n }\n\n // Set bits for all labels in each sample\n for (let i = 0; i < nSamples; i++) {\n const yRow = y[i];\n if (!yRow) continue;\n\n for (const label of yRow) {\n const idx = lookup.get(label);\n if (idx === undefined) {\n throw new InvalidParameterError(\n `Unknown label: ${String(label)}. Label must be present during fit.`,\n \"y\",\n label\n );\n }\n\n const row = result[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[idx] = 1;\n }\n }\n\n return tensor(result, { dtype: \"float64\" });\n }\n\n /**\n * Fit binarizer and transform label sets in one step.\n * Convenience method equivalent to calling fit(y).transform(y).\n *\n * @param y - Array of label sets (string/number/bigint labels)\n * @returns Binary matrix (Tensor or CSRMatrix)\n */\n fitTransform(y: ReadonlyArray<ReadonlyArray<Category>>): Tensor | CSRMatrix {\n return this.fit(y).transform(y);\n }\n\n /**\n * Transform binary matrix back to label sets.\n * Finds all active (1) columns for each row.\n *\n * @param Y - Binary matrix (Tensor or CSRMatrix)\n * @returns Array of label sets, one per sample\n * @throws {NotFittedError} If binarizer is not fitted\n * @throws {InvalidParameterError} If Y has invalid shape\n */\n inverseTransform(Y: Tensor | CSRMatrix): Category[][] {\n if (!this.fitted) {\n throw new NotFittedError(\"MultiLabelBinarizer must be fitted before inverse_transform\");\n }\n if (Y instanceof CSRMatrix) {\n const [rows, cols] = Y.shape;\n if (rows === undefined || cols === undefined) {\n throw new ShapeError(\"Y must have valid shape\");\n }\n const fittedClasses = this.classes_?.length ?? 0;\n if (cols !== fittedClasses) {\n throw new InvalidParameterError(\"column count does not match number of classes\", \"Y\", cols);\n }\n if (rows === 0) {\n return [];\n }\n\n const classes = this.classes_;\n if (!classes) {\n throw new DeepboxError(\"MultiLabelBinarizer internal error: missing fitted classes\");\n }\n\n const result: Category[][] = [];\n for (let i = 0; i < rows; i++) {\n const labels: Category[] = [];\n const start = Y.indptr[i] ?? 0;\n const end = Y.indptr[i + 1] ?? start;\n for (let p = start; p < end; p++) {\n const col = Y.indices[p];\n if (col === undefined) {\n throw new DeepboxError(\"Internal error: sparse column index missing\");\n }\n if (col < 0 || col >= fittedClasses) {\n throw new InvalidParameterError(\n \"column index out of bounds for fitted classes\",\n \"Y\",\n col\n );\n }\n const raw = Y.data[p];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: sparse value missing\");\n }\n const value = Number(raw);\n if (value > 0) {\n labels.push(categoryValueAt(classes, col, \"MultiLabelBinarizer.inverseTransform\"));\n }\n }\n result.push(labels);\n }\n return result;\n }\n\n assert2D(Y, \"Y\");\n assertNumericTensor(Y, \"Y\");\n const nSamples = Y.shape[0] ?? 0;\n const nClasses = Y.shape[1] ?? 0;\n const fittedClasses = this.classes_?.length ?? 0;\n if (nClasses !== fittedClasses) {\n throw new InvalidParameterError(\n \"column count does not match number of classes\",\n \"Y\",\n nClasses\n );\n }\n\n if (nSamples === 0) {\n return [];\n }\n\n const classes = this.classes_;\n if (!classes) {\n throw new DeepboxError(\"MultiLabelBinarizer internal error: missing fitted classes\");\n }\n\n const result: Category[][] = [];\n const [stride0, stride1] = getStrides2D(Y);\n const data = getNumericData(Y);\n\n // For each sample, collect all active classes\n for (let i = 0; i < nSamples; i++) {\n const labels: Category[] = [];\n const rowBase = Y.offset + i * stride0;\n\n // Check each class column\n for (let j = 0; j < nClasses; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n // If this class is active (typically 1, but allow any positive value)\n if (val > 0) {\n labels.push(categoryValueAt(classes, j, \"MultiLabelBinarizer.inverseTransform\"));\n }\n }\n\n result.push(labels);\n }\n\n return result;\n }\n}\n","import {\n DataValidationError,\n DeepboxError,\n DTypeError,\n InvalidParameterError,\n NotFittedError,\n} from \"../core/errors\";\nimport { type Tensor, tensor, zeros } from \"../ndarray\";\nimport {\n assert2D,\n assertNumericTensor,\n createSeededRandom,\n getShape2D,\n getStride1D,\n getStrides2D,\n shuffleIndicesInPlace,\n} from \"./_internal\";\n\nfunction getNumericData(X: Tensor, name: string): ArrayLike<number | bigint> {\n if (X.dtype === \"string\") {\n throw new DTypeError(`${name} must be numeric`);\n }\n if (Array.isArray(X.data)) {\n throw new DeepboxError(\"Internal error: invalid numeric tensor storage\");\n }\n return X.data;\n}\n\nfunction parseBooleanOption(value: unknown, name: string, defaultValue: boolean): boolean {\n if (value === undefined) {\n return defaultValue;\n }\n if (typeof value !== \"boolean\") {\n throw new InvalidParameterError(`${name} must be a boolean`, name, value);\n }\n return value;\n}\n\nfunction validateFiniteData(X: Tensor, name: string): void {\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, name);\n const [stride0, stride1] = getStrides2D(X);\n let flatIndex = 0;\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n if (!Number.isFinite(val)) {\n throw new DataValidationError(`${name} contains NaN or Infinity at index ${flatIndex}`);\n }\n flatIndex += 1;\n }\n }\n}\n\nfunction snapInverseValue(value: number): number {\n if (!Number.isFinite(value)) return value;\n const rounded = Math.round(value);\n if (Math.abs(value - rounded) < 1e-12) return rounded;\n const scaled = Math.round(value * 1e12) / 1e12;\n if (Math.abs(value - scaled) < 1e-12) return scaled;\n return value;\n}\n\nfunction normalQuantile(p: number): number {\n if (!Number.isFinite(p) || p <= 0 || p >= 1) {\n throw new InvalidParameterError(\n \"normalQuantile requires p in the open interval (0, 1)\",\n \"p\",\n p\n );\n }\n // Acklam's inverse normal CDF approximation.\n const a1 = -3.969683028665376e1;\n const a2 = 2.209460984245205e2;\n const a3 = -2.759285104469687e2;\n const a4 = 1.38357751867269e2;\n const a5 = -3.066479806614716e1;\n const a6 = 2.506628277459239;\n\n const b1 = -5.447609879822406e1;\n const b2 = 1.615858368580409e2;\n const b3 = -1.556989798598866e2;\n const b4 = 6.680131188771972e1;\n const b5 = -1.328068155288572e1;\n\n const c1 = -7.784894002430293e-3;\n const c2 = -3.223964580411365e-1;\n const c3 = -2.400758277161838;\n const c4 = -2.549732539343734;\n const c5 = 4.374664141464968;\n const c6 = 2.938163982698783;\n\n const d1 = 7.784695709041462e-3;\n const d2 = 3.224671290700398e-1;\n const d3 = 2.445134137142996;\n const d4 = 3.754408661907416;\n\n const plow = 0.02425;\n const phigh = 1 - plow;\n\n if (p < plow) {\n const q = Math.sqrt(-2 * Math.log(p));\n return (\n (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) /\n ((((d1 * q + d2) * q + d3) * q + d4) * q + 1)\n );\n }\n if (p > phigh) {\n const q = Math.sqrt(-2 * Math.log(1 - p));\n return -(\n (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) /\n ((((d1 * q + d2) * q + d3) * q + d4) * q + 1)\n );\n }\n\n const q = p - 0.5;\n const r = q * q;\n return (\n ((((((a1 * r + a2) * r + a3) * r + a4) * r + a5) * r + a6) * q) /\n (((((b1 * r + b2) * r + b3) * r + b4) * r + b5) * r + 1)\n );\n}\n\n/**\n * Standardize features by removing mean and scaling to unit variance.\n *\n * **Formula**: z = (x - μ) / σ\n *\n * **Attributes** (after fitting):\n * - `mean_`: Mean of each feature\n * - `scale_`: Standard deviation of each feature\n *\n * @example\n * ```js\n * import { StandardScaler } from 'deepbox/preprocess';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const X = tensor([[1, 2], [3, 4], [5, 6]]);\n * const scaler = new StandardScaler();\n * scaler.fit(X);\n * const XScaled = scaler.transform(X);\n * ```\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html | Scikit-learn StandardScaler}\n */\nexport class StandardScaler {\n private fitted = false;\n private mean_: Tensor | undefined;\n private scale_: Tensor | undefined;\n private withMean: boolean;\n private withStd: boolean;\n\n /**\n * Creates a new StandardScaler.\n *\n * @param options - Configuration options\n * @param options.withMean - Center data before scaling (default: true)\n * @param options.withStd - Scale data to unit variance (default: true)\n * @param options.copy - Accepted for API parity; transforms are always out-of-place (default: true)\n */\n constructor(options: { withMean?: boolean; withStd?: boolean; copy?: boolean } = {}) {\n this.withMean = parseBooleanOption(options.withMean, \"withMean\", true);\n this.withStd = parseBooleanOption(options.withStd, \"withStd\", true);\n parseBooleanOption(options.copy, \"copy\", true);\n }\n\n fit(X: Tensor): this {\n if (X.size === 0) {\n throw new InvalidParameterError(\"X must contain at least one sample\", \"X\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n let means: number[] | undefined;\n if (this.withMean || this.withStd) {\n means = new Array<number>(nFeatures).fill(0);\n for (let j = 0; j < nFeatures; j++) {\n let sum = 0;\n for (let i = 0; i < nSamples; i++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n sum += Number(raw);\n }\n if (means) {\n means[j] = sum / nSamples;\n }\n }\n }\n\n if (this.withStd) {\n const stds = new Array<number>(nFeatures).fill(0);\n for (let j = 0; j < nFeatures; j++) {\n const mean = means ? (means[j] ?? 0) : 0;\n let sumSq = 0;\n for (let i = 0; i < nSamples; i++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw) - mean;\n sumSq += val * val;\n }\n stds[j] = Math.sqrt(sumSq / nSamples);\n }\n this.scale_ = tensor(stds, { dtype: \"float64\" });\n } else {\n this.scale_ = undefined;\n }\n\n this.mean_ = this.withMean && means ? tensor(means, { dtype: \"float64\" }) : undefined;\n\n this.fitted = true;\n return this;\n }\n\n transform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"StandardScaler must be fitted before transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n const mean = this.mean_;\n const scale = this.scale_;\n const meanData = mean ? getNumericData(mean, \"mean_\") : undefined;\n const scaleData = scale ? getNumericData(scale, \"scale_\") : undefined;\n const meanStride = mean ? getStride1D(mean) : 0;\n const scaleStride = scale ? getStride1D(scale) : 0;\n\n if (this.withMean && !mean) {\n throw new DeepboxError(\"StandardScaler internal error: missing mean_\");\n }\n if (this.withStd && !scale) {\n throw new DeepboxError(\"StandardScaler internal error: missing scale_\");\n }\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n let val = Number(raw);\n\n if (this.withMean && mean && meanData) {\n const meanValue = meanData[mean.offset + j * meanStride];\n if (meanValue === undefined) {\n throw new DeepboxError(\"Internal error: mean tensor access out of bounds\");\n }\n val -= Number(meanValue);\n }\n\n if (this.withStd && scale && scaleData) {\n const rawScale = scaleData[scale.offset + j * scaleStride];\n if (rawScale === undefined) {\n throw new DeepboxError(\"Internal error: scale tensor access out of bounds\");\n }\n const std = Number(rawScale);\n const safeStd = std === 0 ? 1 : std;\n val /= safeStd;\n }\n\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[j] = val;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n fitTransform(X: Tensor): Tensor {\n return this.fit(X).transform(X);\n }\n\n inverseTransform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"StandardScaler must be fitted before inverse_transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n const mean = this.mean_;\n const scale = this.scale_;\n const meanData = mean ? getNumericData(mean, \"mean_\") : undefined;\n const scaleData = scale ? getNumericData(scale, \"scale_\") : undefined;\n const meanStride = mean ? getStride1D(mean) : 0;\n const scaleStride = scale ? getStride1D(scale) : 0;\n\n if (this.withMean && !mean) {\n throw new DeepboxError(\"StandardScaler internal error: missing mean_\");\n }\n if (this.withStd && !scale) {\n throw new DeepboxError(\"StandardScaler internal error: missing scale_\");\n }\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n let val = Number(raw);\n\n if (this.withStd && scale && scaleData) {\n const rawScale = scaleData[scale.offset + j * scaleStride];\n if (rawScale === undefined) {\n throw new DeepboxError(\"Internal error: scale tensor access out of bounds\");\n }\n const std = Number(rawScale);\n const safeStd = std === 0 ? 1 : std;\n val *= safeStd;\n }\n\n if (this.withMean && mean && meanData) {\n const meanValue = meanData[mean.offset + j * meanStride];\n if (meanValue === undefined) {\n throw new DeepboxError(\"Internal error: mean tensor access out of bounds\");\n }\n val += Number(meanValue);\n }\n\n const resultRow = result[i];\n if (resultRow === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n resultRow[j] = snapInverseValue(val);\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n}\n\n/**\n * Scale features to a range [min, max].\n *\n * **Formula**: X_scaled = (X - X.min) / (X.max - X.min) * (max - min) + min\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html | Scikit-learn MinMaxScaler}\n */\nexport class MinMaxScaler {\n private fitted = false;\n private dataMin_?: Tensor;\n private dataMax_?: Tensor;\n private featureRange: [number, number];\n private clip: boolean;\n\n /**\n * Creates a new MinMaxScaler.\n *\n * @param options - Configuration options\n * @param options.featureRange - Desired feature range [min, max] (default: [0, 1])\n * @param options.clip - Clip transformed values to featureRange (default: false)\n * @param options.copy - Accepted for API parity; transforms are always out-of-place (default: true)\n */\n constructor(\n options: {\n featureRange?: [number, number];\n clip?: boolean;\n copy?: boolean;\n } = {}\n ) {\n this.featureRange = options.featureRange ?? [0, 1];\n this.clip = parseBooleanOption(options.clip, \"clip\", false);\n parseBooleanOption(options.copy, \"copy\", true);\n const [minRange, maxRange] = this.featureRange;\n if (!Number.isFinite(minRange) || !Number.isFinite(maxRange) || minRange >= maxRange) {\n throw new InvalidParameterError(\n \"featureRange must be [min, max] with min < max\",\n \"featureRange\",\n this.featureRange\n );\n }\n }\n\n fit(X: Tensor): this {\n if (X.size === 0) {\n throw new InvalidParameterError(\"X must contain at least one sample\", \"X\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n const mins = new Array<number>(nFeatures).fill(Number.POSITIVE_INFINITY);\n const maxs = new Array<number>(nFeatures).fill(Number.NEGATIVE_INFINITY);\n\n for (let j = 0; j < nFeatures; j++) {\n for (let i = 0; i < nSamples; i++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n const currentMin = mins[j];\n const currentMax = maxs[j];\n if (currentMin === undefined || currentMax === undefined) {\n throw new DeepboxError(\"Internal error: min/max array access failed\");\n }\n mins[j] = Math.min(currentMin, val);\n maxs[j] = Math.max(currentMax, val);\n }\n }\n\n this.dataMin_ = tensor(mins, { dtype: \"float64\" });\n this.dataMax_ = tensor(maxs, { dtype: \"float64\" });\n this.fitted = true;\n return this;\n }\n\n transform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"MinMaxScaler must be fitted before transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const [minRange, maxRange] = this.featureRange;\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n const dataMin = this.dataMin_;\n const dataMax = this.dataMax_;\n\n if (!dataMin || !dataMax) {\n throw new DeepboxError(\"MinMaxScaler internal error: missing fitted min/max\");\n }\n const minData = getNumericData(dataMin, \"dataMin_\");\n const maxData = getNumericData(dataMax, \"dataMax_\");\n const minStride = getStride1D(dataMin);\n const maxStride = getStride1D(dataMax);\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n const rawMin = minData[dataMin.offset + j * minStride];\n const rawMax = maxData[dataMax.offset + j * maxStride];\n if (rawMin === undefined || rawMax === undefined) {\n throw new DeepboxError(\"Internal error: min/max tensor access out of bounds\");\n }\n const min = Number(rawMin);\n const max = Number(rawMax);\n const range = max - min;\n\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n let scaled =\n range !== 0 ? ((val - min) / range) * (maxRange - minRange) + minRange : minRange;\n if (this.clip) {\n scaled = Math.max(minRange, Math.min(maxRange, scaled));\n }\n row[j] = scaled;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n fitTransform(X: Tensor): Tensor {\n return this.fit(X).transform(X);\n }\n\n inverseTransform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"MinMaxScaler must be fitted before inverse_transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const [minRange, maxRange] = this.featureRange;\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n const dataMin = this.dataMin_;\n const dataMax = this.dataMax_;\n\n if (!dataMin || !dataMax) {\n throw new DeepboxError(\"MinMaxScaler internal error: missing fitted min/max\");\n }\n const minData = getNumericData(dataMin, \"dataMin_\");\n const maxData = getNumericData(dataMax, \"dataMax_\");\n const minStride = getStride1D(dataMin);\n const maxStride = getStride1D(dataMax);\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n const rawMin = minData[dataMin.offset + j * minStride];\n const rawMax = maxData[dataMax.offset + j * maxStride];\n if (rawMin === undefined || rawMax === undefined) {\n throw new DeepboxError(\"Internal error: min/max tensor access out of bounds\");\n }\n const min = Number(rawMin);\n const max = Number(rawMax);\n const range = max - min;\n\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[j] = ((val - minRange) / (maxRange - minRange)) * range + min;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n}\n\n/**\n * Scale features by maximum absolute value.\n *\n * Scales to range [-1, 1]. Suitable for data that is already centered at zero.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MaxAbsScaler.html | Scikit-learn MaxAbsScaler}\n */\nexport class MaxAbsScaler {\n private fitted = false;\n private maxAbs_?: Tensor;\n\n /**\n * Creates a new MaxAbsScaler.\n *\n * @param options - Configuration options\n * @param options.copy - Accepted for API parity; transforms are always out-of-place (default: true)\n */\n constructor(options: { copy?: boolean } = {}) {\n parseBooleanOption(options.copy, \"copy\", true);\n }\n\n fit(X: Tensor): this {\n if (X.size === 0) {\n throw new InvalidParameterError(\"X must contain at least one sample\", \"X\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n const maxAbs = new Array<number>(nFeatures).fill(0);\n\n for (let j = 0; j < nFeatures; j++) {\n for (let i = 0; i < nSamples; i++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const currentMax = maxAbs[j];\n if (currentMax === undefined) {\n throw new DeepboxError(\"Internal error: maxAbs array access failed\");\n }\n maxAbs[j] = Math.max(currentMax, Math.abs(Number(raw)));\n }\n }\n\n this.maxAbs_ = tensor(maxAbs, { dtype: \"float64\" });\n this.fitted = true;\n return this;\n }\n\n transform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"MaxAbsScaler must be fitted before transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n const maxAbs = this.maxAbs_;\n if (!maxAbs) {\n throw new DeepboxError(\"MaxAbsScaler internal error: missing fitted maxAbs\");\n }\n const maxData = getNumericData(maxAbs, \"maxAbs_\");\n const maxStride = getStride1D(maxAbs);\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n const rawScale = maxData[maxAbs.offset + j * maxStride];\n if (rawScale === undefined) {\n throw new DeepboxError(\"Internal error: maxAbs tensor access out of bounds\");\n }\n const scale = Number(rawScale);\n const safeScale = scale === 0 ? 1 : scale;\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[j] = val / safeScale;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n fitTransform(X: Tensor): Tensor {\n return this.fit(X).transform(X);\n }\n\n inverseTransform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"MaxAbsScaler must be fitted before inverse_transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n const maxAbs = this.maxAbs_;\n if (!maxAbs) {\n throw new DeepboxError(\"MaxAbsScaler internal error: missing fitted maxAbs\");\n }\n const maxData = getNumericData(maxAbs, \"maxAbs_\");\n const maxStride = getStride1D(maxAbs);\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n const rawScale = maxData[maxAbs.offset + j * maxStride];\n if (rawScale === undefined) {\n throw new DeepboxError(\"Internal error: maxAbs tensor access out of bounds\");\n }\n const scale = Number(rawScale);\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[j] = val * scale;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n}\n\n/**\n * Robust scaler using median and IQR.\n *\n * Robust to outliers.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.RobustScaler.html | Scikit-learn RobustScaler}\n */\nexport class RobustScaler {\n private fitted = false;\n private center_: Tensor | undefined;\n private scale_: Tensor | undefined;\n private withCentering: boolean;\n private withScaling: boolean;\n private quantileRange: [number, number];\n private unitVariance: boolean;\n\n /**\n * Creates a new RobustScaler.\n *\n * @param options - Configuration options\n * @param options.withCentering - Center data using median (default: true)\n * @param options.withScaling - Scale data using IQR (default: true)\n * @param options.quantileRange - Quantile range for IQR as percentiles (default: [25, 75])\n * @param options.unitVariance - Scale so that features have unit variance under normality (default: false)\n * @param options.copy - Accepted for API parity; transforms are always out-of-place (default: true)\n */\n constructor(\n options: {\n withCentering?: boolean;\n withScaling?: boolean;\n quantileRange?: [number, number];\n unitVariance?: boolean;\n copy?: boolean;\n } = {}\n ) {\n this.withCentering = parseBooleanOption(options.withCentering, \"withCentering\", true);\n this.withScaling = parseBooleanOption(options.withScaling, \"withScaling\", true);\n this.quantileRange = options.quantileRange ?? [25, 75];\n this.unitVariance = parseBooleanOption(options.unitVariance, \"unitVariance\", false);\n parseBooleanOption(options.copy, \"copy\", true);\n const [lower, upper] = this.quantileRange;\n if (\n !Number.isFinite(lower) ||\n !Number.isFinite(upper) ||\n lower < 0 ||\n upper > 100 ||\n lower >= upper\n ) {\n throw new InvalidParameterError(\n \"quantileRange must be a valid ascending percentile range\",\n \"quantileRange\",\n this.quantileRange\n );\n }\n }\n\n fit(X: Tensor): this {\n if (X.size === 0) {\n throw new InvalidParameterError(\"X must contain at least one sample\", \"X\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n const centers = new Array<number>(nFeatures).fill(0);\n const scales = new Array<number>(nFeatures).fill(0);\n\n // Convert quantile range from percentiles to fractions\n const [lowerPercentile, upperPercentile] = this.quantileRange;\n const lowerFraction = lowerPercentile / 100;\n const upperFraction = upperPercentile / 100;\n const normalizer = this.unitVariance\n ? normalQuantile(upperFraction) - normalQuantile(lowerFraction)\n : 1;\n if (this.unitVariance && (!Number.isFinite(normalizer) || normalizer <= 0)) {\n throw new DeepboxError(\"RobustScaler internal error: invalid unit variance normalizer\");\n }\n\n for (let j = 0; j < nFeatures; j++) {\n const values: number[] = [];\n for (let i = 0; i < nSamples; i++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n values.push(Number(raw));\n }\n values.sort((a, b) => a - b);\n\n const interpolate = (q: number): number => {\n if (values.length === 0) {\n throw new DeepboxError(\"Internal error: cannot interpolate empty values\");\n }\n if (values.length === 1) {\n const only = values[0];\n if (only === undefined) {\n throw new DeepboxError(\"Internal error: missing sorted value\");\n }\n return only;\n }\n\n const position = q * (values.length - 1);\n const lower = Math.floor(position);\n const upper = Math.ceil(position);\n const lowerValue = values[lower];\n const upperValue = values[upper];\n if (lowerValue === undefined || upperValue === undefined) {\n throw new DeepboxError(\"Internal error: quantile interpolation index out of bounds\");\n }\n if (upper === lower) {\n return lowerValue;\n }\n const weight = position - lower;\n return lowerValue * (1 - weight) + upperValue * weight;\n };\n\n // Median for centering and IQR for scaling\n centers[j] = interpolate(0.5);\n const qLower = interpolate(lowerFraction);\n const qUpper = interpolate(upperFraction);\n const iqr = qUpper - qLower;\n scales[j] = this.unitVariance ? iqr / normalizer : iqr;\n }\n\n this.center_ = this.withCentering ? tensor(centers, { dtype: \"float64\" }) : undefined;\n this.scale_ = this.withScaling ? tensor(scales, { dtype: \"float64\" }) : undefined;\n this.fitted = true;\n return this;\n }\n\n transform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"RobustScaler must be fitted before transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n const center = this.center_;\n const scale = this.scale_;\n const centerData = center ? getNumericData(center, \"center_\") : undefined;\n const scaleData = scale ? getNumericData(scale, \"scale_\") : undefined;\n const centerStride = center ? getStride1D(center) : 0;\n const scaleStride = scale ? getStride1D(scale) : 0;\n\n if (this.withCentering && !center) {\n throw new DeepboxError(\"RobustScaler internal error: missing center_\");\n }\n if (this.withScaling && !scale) {\n throw new DeepboxError(\"RobustScaler internal error: missing scale_\");\n }\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n let val = Number(raw);\n\n if (this.withCentering && center && centerData) {\n const rawCenter = centerData[center.offset + j * centerStride];\n if (rawCenter === undefined) {\n throw new DeepboxError(\"Internal error: center tensor access out of bounds\");\n }\n val -= Number(rawCenter);\n }\n\n if (this.withScaling && scale && scaleData) {\n const rawScale = scaleData[scale.offset + j * scaleStride];\n if (rawScale === undefined) {\n throw new DeepboxError(\"Internal error: scale tensor access out of bounds\");\n }\n const scaleValue = Number(rawScale);\n const safeScale = scaleValue === 0 ? 1 : scaleValue;\n val /= safeScale;\n }\n\n const resultRow = result[i];\n if (resultRow === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n resultRow[j] = val;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n fitTransform(X: Tensor): Tensor {\n return this.fit(X).transform(X);\n }\n\n inverseTransform(X: Tensor): Tensor {\n if (!this.fitted) {\n throw new NotFittedError(\"RobustScaler must be fitted before inverse_transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n const center = this.center_;\n const scale = this.scale_;\n const centerData = center ? getNumericData(center, \"center_\") : undefined;\n const scaleData = scale ? getNumericData(scale, \"scale_\") : undefined;\n const centerStride = center ? getStride1D(center) : 0;\n const scaleStride = scale ? getStride1D(scale) : 0;\n\n if (this.withCentering && !center) {\n throw new DeepboxError(\"RobustScaler internal error: missing center_\");\n }\n if (this.withScaling && !scale) {\n throw new DeepboxError(\"RobustScaler internal error: missing scale_\");\n }\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n let val = Number(raw);\n\n if (this.withScaling && scale && scaleData) {\n const rawScale = scaleData[scale.offset + j * scaleStride];\n if (rawScale === undefined) {\n throw new DeepboxError(\"Internal error: scale tensor access out of bounds\");\n }\n const scaleValue = Number(rawScale);\n const safeScale = scaleValue === 0 ? 1 : scaleValue;\n val *= safeScale;\n }\n\n if (this.withCentering && center && centerData) {\n const rawCenter = centerData[center.offset + j * centerStride];\n if (rawCenter === undefined) {\n throw new DeepboxError(\"Internal error: center tensor access out of bounds\");\n }\n val += Number(rawCenter);\n }\n\n const resultRow = result[i];\n if (resultRow === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n resultRow[j] = val;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n}\n\n/**\n * Normalize samples to unit norm.\n *\n * Scales each sample (row) to have unit norm.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Normalizer.html | Scikit-learn Normalizer}\n */\nexport class Normalizer {\n private norm: \"l1\" | \"l2\" | \"max\";\n\n /**\n * Creates a new Normalizer.\n *\n * @param options - Configuration options\n * @param options.norm - Norm to use (default: \"l2\")\n * @param options.copy - Accepted for API parity; transforms are always out-of-place (default: true)\n */\n constructor(options: { norm?: \"l1\" | \"l2\" | \"max\"; copy?: boolean } = {}) {\n this.norm = options.norm ?? \"l2\";\n if (this.norm !== \"l1\" && this.norm !== \"l2\" && this.norm !== \"max\") {\n throw new InvalidParameterError(\"norm must be one of: l1, l2, max\", \"norm\", this.norm);\n }\n parseBooleanOption(options.copy, \"copy\", true);\n }\n\n fit(_X: Tensor): this {\n return this;\n }\n\n transform(X: Tensor): Tensor {\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n let norm = 0;\n const rowBase = X.offset + i * stride0;\n\n if (this.norm === \"l2\") {\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n norm += val * val;\n }\n norm = Math.sqrt(norm);\n } else if (this.norm === \"l1\") {\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n norm += Math.abs(Number(raw));\n }\n } else if (this.norm === \"max\") {\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n norm = Math.max(norm, Math.abs(Number(raw)));\n }\n }\n\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[j] = norm === 0 ? val : val / norm;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n fitTransform(X: Tensor): Tensor {\n return this.transform(X);\n }\n}\n\n/**\n * Transform features using quantiles.\n *\n * Maps to uniform or normal distribution.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.QuantileTransformer.html | Scikit-learn QuantileTransformer}\n */\nexport class QuantileTransformer {\n private fitted = false;\n private nQuantiles: number;\n private outputDistribution: \"uniform\" | \"normal\";\n private quantiles_?: Map<number, { quantiles: number[]; references: number[] }>;\n private subsample: number | undefined;\n private randomState: number | undefined;\n\n /**\n * Creates a new QuantileTransformer.\n *\n * @param options - Configuration options\n * @param options.nQuantiles - Number of quantiles to use (default: 1000)\n * @param options.outputDistribution - \"uniform\" or \"normal\" (default: \"uniform\")\n * @param options.subsample - Subsample size for quantile estimation (default: use all samples)\n * @param options.randomState - Seed for subsampling reproducibility\n * @param options.copy - Accepted for API parity; transforms are always out-of-place (default: true)\n */\n constructor(\n options: {\n nQuantiles?: number;\n outputDistribution?: \"uniform\" | \"normal\";\n subsample?: number;\n randomState?: number;\n copy?: boolean;\n } = {}\n ) {\n this.nQuantiles = options.nQuantiles ?? 1000;\n this.outputDistribution = options.outputDistribution ?? \"uniform\";\n this.subsample = options.subsample;\n this.randomState = options.randomState;\n parseBooleanOption(options.copy, \"copy\", true);\n if (\n !Number.isFinite(this.nQuantiles) ||\n !Number.isInteger(this.nQuantiles) ||\n this.nQuantiles < 2\n ) {\n throw new InvalidParameterError(\n \"nQuantiles must be at least 2\",\n \"nQuantiles\",\n this.nQuantiles\n );\n }\n if (this.outputDistribution !== \"uniform\" && this.outputDistribution !== \"normal\") {\n throw new InvalidParameterError(\n \"outputDistribution must be 'uniform' or 'normal'\",\n \"outputDistribution\",\n this.outputDistribution\n );\n }\n if (this.subsample !== undefined) {\n if (\n !Number.isFinite(this.subsample) ||\n !Number.isInteger(this.subsample) ||\n this.subsample < 2\n ) {\n throw new InvalidParameterError(\n \"subsample must be an integer >= 2\",\n \"subsample\",\n this.subsample\n );\n }\n }\n }\n\n fit(X: Tensor): this {\n if (X.size === 0) {\n throw new InvalidParameterError(\"X must contain at least one sample\", \"X\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n this.quantiles_ = new Map();\n const sampleCount =\n this.subsample !== undefined ? Math.min(this.subsample, nSamples) : nSamples;\n const nQuantilesEffective = Math.min(this.nQuantiles, sampleCount);\n const references =\n nQuantilesEffective <= 1\n ? [0.5]\n : Array.from({ length: nQuantilesEffective }, (_, i) => i / (nQuantilesEffective - 1));\n\n let sampleIndices: number[] | undefined;\n if (sampleCount < nSamples) {\n sampleIndices = Array.from({ length: nSamples }, (_, i) => i);\n const random =\n this.randomState !== undefined ? createSeededRandom(this.randomState) : Math.random;\n shuffleIndicesInPlace(sampleIndices, random);\n sampleIndices = sampleIndices.slice(0, sampleCount);\n }\n\n for (let j = 0; j < nFeatures; j++) {\n const values: number[] = [];\n if (sampleIndices) {\n for (const idx of sampleIndices) {\n const raw = data[X.offset + idx * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n values.push(Number(raw));\n }\n } else {\n for (let i = 0; i < nSamples; i++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n values.push(Number(raw));\n }\n }\n const sorted = [...values].sort((a, b) => a - b);\n const quantiles = references.map((q) => this.interpolateFromSorted(sorted, q));\n this.quantiles_.set(j, { quantiles, references });\n }\n\n this.fitted = true;\n return this;\n }\n\n transform(X: Tensor): Tensor {\n if (!this.fitted || !this.quantiles_) {\n throw new NotFittedError(\"QuantileTransformer must be fitted before transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n if (nSamples === 0) {\n return zeros([0, nFeatures], { dtype: \"float64\" });\n }\n\n const result = new Array<number[]>(nSamples);\n for (let i = 0; i < nSamples; i++) {\n result[i] = new Array<number>(nFeatures);\n }\n\n for (let j = 0; j < nFeatures; j++) {\n const feature = this.quantiles_.get(j);\n if (!feature) {\n throw new DeepboxError(`Internal error: missing fitted quantiles for feature ${j}`);\n }\n\n for (let i = 0; i < nSamples; i++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n const quantile = this.mapValueToQuantile(val, feature.quantiles, feature.references);\n\n const row = result[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n\n if (this.outputDistribution === \"uniform\") {\n row[j] = quantile;\n } else {\n // Transform to normal distribution using inverse error function\n // Clamp quantile to avoid numerical issues at boundaries\n const clampedQuantile = Math.max(1e-7, Math.min(1 - 1e-7, quantile));\n const z = Math.sqrt(2) * this.erfInv(2 * clampedQuantile - 1);\n row[j] = z;\n }\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n /**\n * Inverse transform data back to the original feature space.\n *\n * If `outputDistribution=\"normal\"`, values are first mapped back to uniform\n * quantiles before being projected into the original data distribution.\n *\n * @param X - Transformed data (2D tensor)\n * @returns Data in the original feature space\n * @throws {NotFittedError} If transformer is not fitted\n */\n inverseTransform(X: Tensor): Tensor {\n if (!this.fitted || !this.quantiles_) {\n throw new NotFittedError(\"QuantileTransformer must be fitted before inverse_transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n if (nSamples === 0) {\n return zeros([0, nFeatures], { dtype: \"float64\" });\n }\n\n const result = new Array<number[]>(nSamples);\n for (let i = 0; i < nSamples; i++) {\n result[i] = new Array<number>(nFeatures);\n }\n\n for (let j = 0; j < nFeatures; j++) {\n const feature = this.quantiles_.get(j);\n if (!feature) {\n throw new DeepboxError(`Internal error: missing fitted quantiles for feature ${j}`);\n }\n\n for (let i = 0; i < nSamples; i++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const value = Number(raw);\n let quantile = this.outputDistribution === \"normal\" ? this.normalCdf(value) : value;\n\n quantile = Math.max(0, Math.min(1, quantile));\n const row = result[i];\n if (!row) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[j] = this.mapQuantileToValue(quantile, feature.quantiles, feature.references);\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n private erf(x: number): number {\n // Abramowitz and Stegun approximation\n const sign = x < 0 ? -1 : 1;\n const absX = Math.abs(x);\n const t = 1 / (1 + 0.3275911 * absX);\n const a1 = 0.254829592;\n const a2 = -0.284496736;\n const a3 = 1.421413741;\n const a4 = -1.453152027;\n const a5 = 1.061405429;\n const poly = ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t;\n return sign * (1 - poly * Math.exp(-absX * absX));\n }\n\n private normalCdf(z: number): number {\n return 0.5 * (1 + this.erf(z / Math.sqrt(2)));\n }\n\n private erfInv(x: number): number {\n const a = 0.147;\n const b = 2 / (Math.PI * a) + Math.log(1 - x * x) / 2;\n const sign = x < 0 ? -1 : 1;\n return sign * Math.sqrt(Math.sqrt(b * b - Math.log(1 - x * x) / a) - b);\n }\n\n private interpolateFromSorted(sorted: number[], q: number): number {\n if (sorted.length === 0) {\n throw new DeepboxError(\"Internal error: cannot interpolate empty sorted values\");\n }\n if (sorted.length === 1) {\n const only = sorted[0];\n if (only === undefined) {\n throw new DeepboxError(\"Internal error: missing sorted value\");\n }\n return only;\n }\n\n const position = q * (sorted.length - 1);\n const lower = Math.floor(position);\n const upper = Math.ceil(position);\n const lowerValue = sorted[lower];\n const upperValue = sorted[upper];\n if (lowerValue === undefined || upperValue === undefined) {\n throw new DeepboxError(\"Internal error: quantile interpolation index out of bounds\");\n }\n\n if (upper === lower) {\n return lowerValue;\n }\n\n const weight = position - lower;\n return lowerValue * (1 - weight) + upperValue * weight;\n }\n\n private mapValueToQuantile(value: number, quantiles: number[], references: number[]): number {\n const n = quantiles.length;\n if (n === 0) {\n return 0;\n }\n if (n === 1) {\n const onlyReference = references[0];\n if (onlyReference === undefined) {\n throw new DeepboxError(\"Internal error: missing quantile reference\");\n }\n return onlyReference;\n }\n\n const firstQuantile = quantiles[0];\n const lastQuantile = quantiles[n - 1];\n if (firstQuantile === undefined || lastQuantile === undefined) {\n throw new DeepboxError(\"Internal error: missing quantile endpoints\");\n }\n if (value <= firstQuantile) {\n return 0;\n }\n if (value >= lastQuantile) {\n return 1;\n }\n\n let left = 0;\n let right = n - 1;\n while (left + 1 < right) {\n const mid = Math.floor((left + right) / 2);\n const midValue = quantiles[mid];\n if (midValue === undefined) {\n throw new DeepboxError(\"Internal error: missing quantile midpoint\");\n }\n if (midValue <= value) {\n left = mid;\n } else {\n right = mid;\n }\n }\n\n const qLeft = quantiles[left];\n const qRight = quantiles[right];\n const rLeft = references[left];\n const rRight = references[right];\n if (\n qLeft === undefined ||\n qRight === undefined ||\n rLeft === undefined ||\n rRight === undefined\n ) {\n throw new DeepboxError(\"Internal error: missing quantile interpolation points\");\n }\n if (qRight <= qLeft) {\n return (rLeft + rRight) / 2;\n }\n\n const ratio = (value - qLeft) / (qRight - qLeft);\n return rLeft + ratio * (rRight - rLeft);\n }\n\n private mapQuantileToValue(quantile: number, quantiles: number[], references: number[]): number {\n const n = references.length;\n if (n === 0) {\n return 0;\n }\n if (n === 1) {\n const onlyQuantile = quantiles[0];\n if (onlyQuantile === undefined) {\n throw new DeepboxError(\"Internal error: missing quantile value\");\n }\n return onlyQuantile;\n }\n\n const firstRef = references[0];\n const lastRef = references[n - 1];\n if (firstRef === undefined || lastRef === undefined) {\n throw new DeepboxError(\"Internal error: missing reference endpoints\");\n }\n if (quantile <= firstRef) {\n const firstQuantile = quantiles[0];\n if (firstQuantile === undefined) {\n throw new DeepboxError(\"Internal error: missing quantile endpoints\");\n }\n return firstQuantile;\n }\n if (quantile >= lastRef) {\n const lastQuantile = quantiles[n - 1];\n if (lastQuantile === undefined) {\n throw new DeepboxError(\"Internal error: missing quantile endpoints\");\n }\n return lastQuantile;\n }\n\n let left = 0;\n let right = n - 1;\n while (left + 1 < right) {\n const mid = Math.floor((left + right) / 2);\n const midRef = references[mid];\n if (midRef === undefined) {\n throw new DeepboxError(\"Internal error: missing quantile reference\");\n }\n if (midRef <= quantile) {\n left = mid;\n } else {\n right = mid;\n }\n }\n\n const rLeft = references[left];\n const rRight = references[right];\n const qLeft = quantiles[left];\n const qRight = quantiles[right];\n if (\n rLeft === undefined ||\n rRight === undefined ||\n qLeft === undefined ||\n qRight === undefined\n ) {\n throw new DeepboxError(\"Internal error: missing quantile interpolation points\");\n }\n if (rRight <= rLeft) {\n return (qLeft + qRight) / 2;\n }\n const ratio = (quantile - rLeft) / (rRight - rLeft);\n return qLeft + ratio * (qRight - qLeft);\n }\n\n fitTransform(X: Tensor): Tensor {\n return this.fit(X).transform(X);\n }\n}\n\n/**\n * Apply power transform to make data more Gaussian-like.\n *\n * Supports Box-Cox and Yeo-Johnson transforms, with optional standardization.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PowerTransformer.html | Scikit-learn PowerTransformer}\n */\nexport class PowerTransformer {\n private fitted = false;\n private method: \"box-cox\" | \"yeo-johnson\";\n private lambdas_: number[] | undefined;\n private standardize: boolean;\n private mean_: number[] | undefined;\n private scale_: number[] | undefined;\n\n /**\n * Creates a new PowerTransformer.\n *\n * @param options - Configuration options\n * @param options.method - \"box-cox\" or \"yeo-johnson\" (default: \"yeo-johnson\")\n * @param options.standardize - Whether to standardize transformed features (default: false)\n * @param options.copy - Accepted for API parity; transforms are always out-of-place (default: true)\n */\n constructor(\n options: {\n method?: \"box-cox\" | \"yeo-johnson\";\n standardize?: boolean;\n copy?: boolean;\n } = {}\n ) {\n this.method = options.method ?? \"yeo-johnson\";\n if (this.method !== \"box-cox\" && this.method !== \"yeo-johnson\") {\n throw new InvalidParameterError(\n \"method must be 'box-cox' or 'yeo-johnson'\",\n \"method\",\n this.method\n );\n }\n this.standardize = parseBooleanOption(options.standardize, \"standardize\", false);\n parseBooleanOption(options.copy, \"copy\", true);\n }\n\n fit(X: Tensor): this {\n if (X.size === 0) {\n throw new InvalidParameterError(\"X must contain at least one sample\", \"X\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n const lambdas = new Array<number>(nFeatures);\n const means = this.standardize ? new Array<number>(nFeatures).fill(0) : undefined;\n const scales = this.standardize ? new Array<number>(nFeatures).fill(0) : undefined;\n\n for (let j = 0; j < nFeatures; j++) {\n const featureValues = new Array<number>(nSamples);\n for (let i = 0; i < nSamples; i++) {\n const raw = data[X.offset + i * stride0 + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const value = Number(raw);\n if (this.method === \"box-cox\" && value <= 0) {\n throw new InvalidParameterError(\n `Box-Cox requires strictly positive values in fit data (feature ${j})`,\n \"X\",\n value\n );\n }\n featureValues[i] = value;\n }\n const lambda = this.optimizeLambda(featureValues);\n lambdas[j] = lambda;\n\n if (this.standardize && means && scales) {\n let sum = 0;\n // Pass 1: Mean\n for (const value of featureValues) {\n const transformed =\n this.method === \"box-cox\"\n ? this.boxCoxTransformValue(value, lambda)\n : this.yeoJohnsonTransformValue(value, lambda);\n sum += transformed;\n }\n const mean = sum / nSamples;\n means[j] = mean;\n\n // Pass 2: Variance (stable)\n let sumSqDiff = 0;\n for (const value of featureValues) {\n const transformed =\n this.method === \"box-cox\"\n ? this.boxCoxTransformValue(value, lambda)\n : this.yeoJohnsonTransformValue(value, lambda);\n const diff = transformed - mean;\n sumSqDiff += diff * diff;\n }\n const variance = sumSqDiff / nSamples;\n const std = Math.sqrt(Math.max(variance, 0));\n scales[j] = std === 0 ? 1 : std;\n }\n }\n\n this.lambdas_ = lambdas;\n this.mean_ = this.standardize ? means : undefined;\n this.scale_ = this.standardize ? scales : undefined;\n this.fitted = true;\n return this;\n }\n\n transform(X: Tensor): Tensor {\n if (!this.fitted || !this.lambdas_) {\n throw new NotFittedError(\"PowerTransformer must be fitted before transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n if (this.standardize && (!this.mean_ || !this.scale_)) {\n throw new DeepboxError(\"PowerTransformer internal error: missing standardization stats\");\n }\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n const val = Number(raw);\n const lambda = this.lambdas_[j];\n if (lambda === undefined) {\n throw new DeepboxError(`Internal error: missing fitted lambda for feature ${j}`);\n }\n\n let transformed: number;\n if (this.method === \"box-cox\") {\n if (val <= 0) {\n throw new InvalidParameterError(\"Box-Cox requires strictly positive values\", \"X\", val);\n }\n transformed = this.boxCoxTransformValue(val, lambda);\n } else {\n transformed = this.yeoJohnsonTransformValue(val, lambda);\n }\n\n if (this.standardize && this.mean_ && this.scale_) {\n const mean = this.mean_[j] ?? 0;\n const scale = this.scale_[j] ?? 1;\n transformed = (transformed - mean) / scale;\n }\n\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[j] = transformed;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n /**\n * Inverse transform data back to the original feature space.\n * If `standardize=true`, de-standardizes before applying the inverse power transform.\n *\n * @param X - Transformed data (2D tensor)\n * @returns Data in the original feature space\n * @throws {NotFittedError} If transformer is not fitted\n */\n inverseTransform(X: Tensor): Tensor {\n if (!this.fitted || !this.lambdas_) {\n throw new NotFittedError(\"PowerTransformer must be fitted before inverse_transform\");\n }\n assert2D(X, \"X\");\n assertNumericTensor(X, \"X\");\n validateFiniteData(X, \"X\");\n const [nSamples, nFeatures] = getShape2D(X);\n const data = getNumericData(X, \"X\");\n const [stride0, stride1] = getStrides2D(X);\n\n if (this.standardize && (!this.mean_ || !this.scale_)) {\n throw new DeepboxError(\"PowerTransformer internal error: missing standardization stats\");\n }\n\n const result = Array.from({ length: nSamples }, () => new Array<number>(nFeatures).fill(0));\n\n for (let i = 0; i < nSamples; i++) {\n const rowBase = X.offset + i * stride0;\n for (let j = 0; j < nFeatures; j++) {\n const raw = data[rowBase + j * stride1];\n if (raw === undefined) {\n throw new DeepboxError(\"Internal error: numeric tensor access out of bounds\");\n }\n let val = Number(raw);\n\n if (this.standardize && this.mean_ && this.scale_) {\n const mean = this.mean_[j] ?? 0;\n const scale = this.scale_[j] ?? 1;\n val = val * scale + mean;\n }\n\n const lambda = this.lambdas_[j];\n if (lambda === undefined) {\n throw new DeepboxError(`Internal error: missing fitted lambda for feature ${j}`);\n }\n\n let inverted: number;\n if (this.method === \"box-cox\") {\n inverted = this.boxCoxInverseValue(val, lambda);\n } else {\n inverted = this.yeoJohnsonInverseValue(val, lambda);\n }\n\n const row = result[i];\n if (row === undefined) {\n throw new DeepboxError(\"Internal error: result row access failed\");\n }\n row[j] = inverted;\n }\n }\n\n return tensor(result, { dtype: \"float64\", device: X.device });\n }\n\n private boxCoxTransformValue(value: number, lambda: number): number {\n return Math.abs(lambda) < 1e-12 ? Math.log(value) : (value ** lambda - 1) / lambda;\n }\n\n private yeoJohnsonTransformValue(value: number, lambda: number): number {\n if (value >= 0) {\n return Math.abs(lambda) < 1e-12 ? Math.log(value + 1) : ((value + 1) ** lambda - 1) / lambda;\n }\n const twoMinusLambda = 2 - lambda;\n return Math.abs(twoMinusLambda) < 1e-12\n ? -Math.log(1 - value)\n : -((1 - value) ** twoMinusLambda - 1) / twoMinusLambda;\n }\n\n private boxCoxInverseValue(value: number, lambda: number): number {\n if (Math.abs(lambda) < 1e-12) {\n return Math.exp(value);\n }\n const base = value * lambda + 1;\n if (base <= 0) {\n throw new InvalidParameterError(\"Box-Cox inverse encountered invalid value\", \"X\", value);\n }\n return base ** (1 / lambda);\n }\n\n private yeoJohnsonInverseValue(value: number, lambda: number): number {\n if (value >= 0) {\n if (Math.abs(lambda) < 1e-12) {\n return Math.exp(value) - 1;\n }\n const base = value * lambda + 1;\n if (base <= 0) {\n throw new InvalidParameterError(\n \"Yeo-Johnson inverse encountered invalid value\",\n \"X\",\n value\n );\n }\n return base ** (1 / lambda) - 1;\n }\n\n const twoMinusLambda = 2 - lambda;\n if (Math.abs(twoMinusLambda) < 1e-12) {\n return 1 - Math.exp(-value);\n }\n const base = 1 - value * twoMinusLambda;\n if (base <= 0) {\n throw new InvalidParameterError(\"Yeo-Johnson inverse encountered invalid value\", \"X\", value);\n }\n return 1 - base ** (1 / twoMinusLambda);\n }\n\n private logLikelihood(values: readonly number[], lambda: number): number {\n const transformed = new Array<number>(values.length);\n let jacobian = 0;\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i];\n if (value === undefined) {\n throw new DeepboxError(\"Internal error: missing feature value during optimization\");\n }\n\n let transformedValue: number;\n if (this.method === \"box-cox\") {\n if (value <= 0) {\n return Number.NEGATIVE_INFINITY;\n }\n transformedValue = this.boxCoxTransformValue(value, lambda);\n jacobian += (lambda - 1) * Math.log(value);\n } else {\n transformedValue = this.yeoJohnsonTransformValue(value, lambda);\n jacobian +=\n value >= 0 ? (lambda - 1) * Math.log(value + 1) : (1 - lambda) * Math.log(1 - value);\n }\n\n if (!Number.isFinite(transformedValue)) {\n return Number.NEGATIVE_INFINITY;\n }\n transformed[i] = transformedValue;\n }\n\n let sum = 0;\n for (const value of transformed) {\n sum += value;\n }\n const mean = sum / transformed.length;\n\n let varianceSum = 0;\n for (const value of transformed) {\n const delta = value - mean;\n varianceSum += delta * delta;\n }\n const variance = varianceSum / transformed.length;\n if (!Number.isFinite(variance) || variance <= 1e-15) {\n return Number.NEGATIVE_INFINITY;\n }\n\n return -0.5 * transformed.length * Math.log(variance) + jacobian;\n }\n\n private optimizeLambda(values: readonly number[]): number {\n if (values.length < 2) {\n return 1;\n }\n\n let minValue = Number.POSITIVE_INFINITY;\n let maxValue = Number.NEGATIVE_INFINITY;\n for (const value of values) {\n if (value < minValue) minValue = value;\n if (value > maxValue) maxValue = value;\n }\n\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue) || maxValue - minValue <= 1e-15) {\n return 1;\n }\n\n let left = -5;\n let right = 5;\n const phi = (Math.sqrt(5) - 1) / 2;\n let c = right - phi * (right - left);\n let d = left + phi * (right - left);\n let fc = this.logLikelihood(values, c);\n let fd = this.logLikelihood(values, d);\n\n for (let iter = 0; iter < 80; iter++) {\n if (Math.abs(right - left) < 1e-6) break;\n if (fc > fd) {\n right = d;\n d = c;\n fd = fc;\n c = right - phi * (right - left);\n fc = this.logLikelihood(values, c);\n } else {\n left = c;\n c = d;\n fc = fd;\n d = left + phi * (right - left);\n fd = this.logLikelihood(values, d);\n }\n }\n\n const candidates = [left, right, (left + right) / 2, 0, 1, 2, -2];\n let bestLambda = 1;\n let bestScore = Number.NEGATIVE_INFINITY;\n for (const lambda of candidates) {\n const score = this.logLikelihood(values, lambda);\n if (score > bestScore) {\n bestScore = score;\n bestLambda = lambda;\n }\n }\n\n return Number.isFinite(bestLambda) ? bestLambda : 1;\n }\n\n fitTransform(X: Tensor): Tensor {\n return this.fit(X).transform(X);\n }\n}\n","import { DeepboxError, InvalidParameterError, ShapeError } from \"../core/errors\";\nimport { type Tensor, zeros } from \"../ndarray\";\nimport { createSeededRandom, getShape2D, shuffleIndicesInPlace } from \"./_internal\";\n\nfunction validateNSplits(nSplits: number): void {\n if (!Number.isFinite(nSplits) || !Number.isInteger(nSplits) || nSplits < 2) {\n throw new InvalidParameterError(\"nSplits must be an integer at least 2\", \"nSplits\", nSplits);\n }\n}\n\ntype SplitSpec = {\n kind: \"fraction\" | \"count\";\n value: number;\n};\n\nfunction parseSplitSpec(value: number | undefined, name: string): SplitSpec | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (!Number.isFinite(value) || value <= 0) {\n throw new InvalidParameterError(`${name} must be a positive number`, name, value);\n }\n if (value < 1) {\n return { kind: \"fraction\", value };\n }\n if (!Number.isInteger(value)) {\n throw new InvalidParameterError(\n `${name} must be an integer when provided as an absolute size`,\n name,\n value\n );\n }\n return { kind: \"count\", value };\n}\n\nfunction resolveSplitCount(spec: SplitSpec, nSamples: number, isTrain: boolean): number {\n if (spec.kind === \"count\") {\n return spec.value;\n }\n const exact = nSamples * spec.value;\n return isTrain ? Math.floor(exact) : Math.ceil(exact);\n}\n\nfunction resolveTrainTestCounts(\n nSamples: number,\n trainSize: number | undefined,\n testSize: number | undefined\n): [number, number] {\n const defaultTestSize = trainSize === undefined && testSize === undefined ? 0.25 : testSize;\n const trainSpec = parseSplitSpec(trainSize, \"trainSize\");\n const testSpec = parseSplitSpec(defaultTestSize, \"testSize\");\n\n if (trainSpec?.kind === \"count\" && trainSpec.value > nSamples) {\n throw new InvalidParameterError(\n \"trainSize must not exceed number of samples\",\n \"trainSize\",\n trainSpec.value\n );\n }\n if (testSpec?.kind === \"count\" && testSpec.value > nSamples) {\n throw new InvalidParameterError(\n \"testSize must not exceed number of samples\",\n \"testSize\",\n testSpec.value\n );\n }\n\n if (\n trainSpec?.kind === \"fraction\" &&\n testSpec?.kind === \"fraction\" &&\n trainSpec.value + testSpec.value > 1\n ) {\n throw new InvalidParameterError(\n \"trainSize and testSize fractions must sum to at most 1\",\n \"trainSize\",\n trainSpec.value\n );\n }\n\n let nTrain = trainSpec === undefined ? undefined : resolveSplitCount(trainSpec, nSamples, true);\n let nTest = testSpec === undefined ? undefined : resolveSplitCount(testSpec, nSamples, false);\n\n if (nTrain === undefined && nTest === undefined) {\n throw new DeepboxError(\"Internal error: failed to resolve split sizes\");\n }\n\n if (nTrain === undefined) {\n nTrain = nSamples - (nTest ?? 0);\n }\n if (nTest === undefined) {\n nTest = nSamples - nTrain;\n }\n\n if (nTrain + nTest > nSamples) {\n throw new InvalidParameterError(\n \"trainSize and testSize exceed number of samples\",\n \"trainSize\",\n trainSize\n );\n }\n\n if (nTrain < 1) {\n throw new InvalidParameterError(\"trainSize must be at least 1 sample\", \"trainSize\", trainSize);\n }\n if (nTest < 1) {\n throw new InvalidParameterError(\"testSize must be at least 1 sample\", \"testSize\", testSize);\n }\n\n return [nTrain, nTest];\n}\n\nfunction compareLabels(a: unknown, b: unknown): number {\n if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n if (typeof a === \"bigint\" && typeof b === \"bigint\") {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n }\n return String(a).localeCompare(String(b));\n}\n\nfunction makeFoldSizes(total: number, nSplits: number): number[] {\n const base = Math.floor(total / nSplits);\n const remainder = total % nSplits;\n return Array.from({ length: nSplits }, (_, i) => base + (i < remainder ? 1 : 0));\n}\n\nfunction readTensorValue(t: Tensor, indices: number[]): string | number | bigint {\n const value = t.at(...indices);\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\") {\n return value;\n }\n throw new DeepboxError(\"Internal error: unsupported tensor value type\");\n}\n\nfunction writeTensorValue(t: Tensor, flatIndex: number, value: string | number | bigint): void {\n if (t.dtype === \"string\") {\n if (typeof value !== \"string\") {\n throw new DeepboxError(\"Internal error: expected string value for string tensor\");\n }\n t.data[flatIndex] = value;\n return;\n }\n\n if (typeof value === \"string\") {\n throw new DeepboxError(\"Internal error: encountered string value in numeric tensor\");\n }\n\n if (t.data instanceof BigInt64Array) {\n t.data[flatIndex] = typeof value === \"bigint\" ? value : BigInt(value);\n return;\n }\n\n t.data[flatIndex] = Number(value);\n}\n\nfunction takeRows2D(X: Tensor, sampleIndices: number[]): Tensor {\n const [, nFeatures] = getShape2D(X);\n const out = zeros([sampleIndices.length, nFeatures], { dtype: X.dtype });\n\n for (let i = 0; i < sampleIndices.length; i++) {\n const sampleIndex = sampleIndices[i];\n if (sampleIndex === undefined) {\n throw new DeepboxError(\"Internal error: sample index access failed\");\n }\n for (let j = 0; j < nFeatures; j++) {\n const value = readTensorValue(X, [sampleIndex, j]);\n writeTensorValue(out, out.offset + i * nFeatures + j, value);\n }\n }\n\n return out;\n}\n\nfunction takeVector(y: Tensor, sampleIndices: number[]): Tensor {\n if (y.ndim !== 1) {\n throw new ShapeError(`y must be a 1D tensor, got ${y.ndim}D`);\n }\n const out = zeros([sampleIndices.length], { dtype: y.dtype });\n\n for (let i = 0; i < sampleIndices.length; i++) {\n const sampleIndex = sampleIndices[i];\n if (sampleIndex === undefined) {\n throw new DeepboxError(\"Internal error: sample index access failed\");\n }\n const value = readTensorValue(y, [sampleIndex]);\n writeTensorValue(out, out.offset + i, value);\n }\n\n return out;\n}\n\n/**\n * Split arrays into random train and test subsets.\n *\n * @param X - Feature matrix (2D tensor)\n * @param y - Optional target labels (1D tensor)\n * @param options - Split configuration options\n * @param options.testSize - Proportion or absolute number of test samples\n * @param options.trainSize - Proportion or absolute number of train samples\n * @param options.randomState - Random seed\n * @param options.shuffle - Whether to shuffle data before splitting\n * @param options.stratify - If not undefined, data is split in stratified fashion using this as class labels\n *\n * @example\n * ```js\n * import { trainTestSplit } from 'deepbox/preprocess';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const X = tensor([[1, 2], [3, 4], [5, 6], [7, 8]]);\n * const y = tensor([0, 1, 0, 1]);\n * const [XTrain, XTest, yTrain, yTest] = trainTestSplit(X, y, { testSize: 0.25 });\n * ```\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html | Scikit-learn train_test_split}\n */\nexport function trainTestSplit(\n X: Tensor,\n y?: Tensor,\n options?: {\n testSize?: number;\n trainSize?: number;\n randomState?: number;\n shuffle?: boolean;\n stratify?: Tensor;\n }\n): Tensor[] {\n const opts = options ?? {};\n const shuffle = opts.shuffle ?? true;\n const randomState = opts.randomState;\n\n const [nSamples] = getShape2D(X);\n\n if (nSamples === 0) {\n throw new InvalidParameterError(\"Cannot split empty array\", \"X\");\n }\n\n if (y) {\n const yShape0 = y.shape[0];\n if (yShape0 === undefined || yShape0 !== nSamples) {\n throw new InvalidParameterError(\"X and y must have same number of samples\", \"y\", yShape0);\n }\n }\n\n if (opts.stratify) {\n if (opts.stratify.ndim !== 1) {\n throw new ShapeError(`stratify must be a 1D tensor, got ${opts.stratify.ndim}D`);\n }\n const stratifyShape0 = opts.stratify.shape[0];\n if (stratifyShape0 === undefined || stratifyShape0 !== nSamples) {\n throw new InvalidParameterError(\n \"stratify must have same number of samples as X\",\n \"stratify\",\n stratifyShape0\n );\n }\n }\n\n const [nTrain, nTest] = resolveTrainTestCounts(nSamples, opts.trainSize, opts.testSize);\n\n const indices = Array.from({ length: nSamples }, (_, i) => i);\n const random = randomState !== undefined ? createSeededRandom(randomState) : Math.random;\n const maybeShuffle = (arr: number[]): void => {\n if (!shuffle) return;\n shuffleIndicesInPlace(arr, random);\n };\n\n let trainIndices: number[] = [];\n let testIndices: number[] = [];\n\n if (opts.stratify) {\n const stratify = opts.stratify;\n const labelMap = new Map<unknown, number[]>();\n for (let i = 0; i < nSamples; i++) {\n const label = readTensorValue(stratify, [i]);\n let bucket = labelMap.get(label);\n if (bucket === undefined) {\n bucket = [];\n labelMap.set(label, bucket);\n }\n bucket.push(i);\n }\n\n const labels = Array.from(labelMap.keys()).sort(compareLabels);\n const nClasses = labels.length;\n const classSizes = labels.map((label) => labelMap.get(label)?.length ?? 0);\n const hasSingleton = classSizes.some((size) => size < 2);\n\n if (hasSingleton && shuffle && randomState === undefined) {\n throw new InvalidParameterError(\n \"stratify requires at least 2 samples per class\",\n \"stratify\",\n classSizes\n );\n }\n\n if (opts.trainSize !== undefined && nTrain < nClasses) {\n throw new InvalidParameterError(\n \"trainSize must be at least the number of classes when stratifying\",\n \"trainSize\",\n nTrain\n );\n }\n if (nTest < nClasses) {\n throw new InvalidParameterError(\n \"testSize must be at least the number of classes when stratifying\",\n \"testSize\",\n nTest\n );\n }\n\n const testFraction = nTest / nSamples;\n const allowEmptyClassSplits = nTrain < nClasses;\n const counts = labels.map((label) => {\n const size = labelMap.get(label)?.length ?? 0;\n const exact = size * testFraction;\n let testCount = Math.floor(exact);\n let remainder = exact - testCount;\n let min = allowEmptyClassSplits ? 0 : 1;\n let max = allowEmptyClassSplits ? size : size - 1;\n if (size < 2) {\n min = 0;\n max = allowEmptyClassSplits ? size : 0;\n testCount = 0;\n remainder = 0;\n } else {\n if (testCount < min) testCount = min;\n if (testCount > max) testCount = max;\n }\n return { label, size, testCount, remainder, min, max };\n });\n\n let remaining = nTest - counts.reduce((sum, c) => sum + c.testCount, 0);\n if (remaining !== 0) {\n const order =\n remaining > 0\n ? [...counts].sort((a, b) => {\n if (b.remainder !== a.remainder) return b.remainder - a.remainder;\n return compareLabels(a.label, b.label);\n })\n : [...counts].sort((a, b) => {\n if (a.remainder !== b.remainder) return a.remainder - b.remainder;\n return compareLabels(a.label, b.label);\n });\n\n let guard = 0;\n while (remaining !== 0 && guard < counts.length * 2) {\n for (const entry of order) {\n if (remaining === 0) break;\n if (remaining > 0 && entry.testCount < entry.max) {\n entry.testCount += 1;\n remaining -= 1;\n } else if (remaining < 0 && entry.testCount > entry.min) {\n entry.testCount -= 1;\n remaining += 1;\n }\n }\n guard += 1;\n }\n\n if (remaining !== 0) {\n throw new DeepboxError(\"Internal error: unable to allocate stratified split sizes\");\n }\n }\n\n const remainingTrainPool: number[] = [];\n for (const entry of counts) {\n const labelIndices = [...(labelMap.get(entry.label) ?? [])];\n maybeShuffle(labelIndices);\n testIndices.push(...labelIndices.slice(0, entry.testCount));\n remainingTrainPool.push(...labelIndices.slice(entry.testCount));\n }\n\n maybeShuffle(testIndices);\n maybeShuffle(remainingTrainPool);\n trainIndices = remainingTrainPool.slice(0, nTrain);\n } else {\n maybeShuffle(indices);\n trainIndices = indices.slice(0, nTrain);\n testIndices = indices.slice(nTrain, nTrain + nTest);\n }\n\n if (trainIndices.length !== nTrain || testIndices.length !== nTest) {\n throw new DeepboxError(\"Internal error: resolved split indices do not match requested sizes\");\n }\n\n const XTrain = takeRows2D(X, trainIndices);\n const XTest = takeRows2D(X, testIndices);\n\n if (y) {\n const yTrain = takeVector(y, trainIndices);\n const yTest = takeVector(y, testIndices);\n return [XTrain, XTest, yTrain, yTest];\n }\n\n return [XTrain, XTest];\n}\n\n/**\n * K-Folds cross-validator.\n *\n * Provides train/test indices to split data in train/test sets.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html | Scikit-learn KFold}\n */\nexport class KFold {\n private nSplits: number;\n private shuffle: boolean;\n private randomState: number | undefined;\n\n constructor(\n options: {\n nSplits?: number;\n shuffle?: boolean;\n randomState?: number;\n } = {}\n ) {\n this.nSplits = options.nSplits ?? 5;\n this.shuffle = options.shuffle ?? false;\n this.randomState = options.randomState;\n }\n\n split(X: Tensor): Array<[number[], number[]]> {\n const shape0 = X.shape[0];\n if (shape0 === undefined) {\n throw new ShapeError(\"X must have valid shape[0]\");\n }\n const nSamples = shape0;\n validateNSplits(this.nSplits);\n if (this.nSplits > nSamples) {\n throw new InvalidParameterError(\n \"nSplits must not be greater than number of samples\",\n \"nSplits\",\n this.nSplits\n );\n }\n const indices = Array.from({ length: nSamples }, (_, i) => i);\n\n if (this.shuffle) {\n const random =\n this.randomState !== undefined ? createSeededRandom(this.randomState) : Math.random;\n shuffleIndicesInPlace(indices, random);\n }\n\n const splits: Array<[number[], number[]]> = [];\n const foldSizes = makeFoldSizes(nSamples, this.nSplits);\n let current = 0;\n\n for (let i = 0; i < this.nSplits; i++) {\n const foldSize = foldSizes[i] ?? 0;\n const testStart = current;\n const testEnd = current + foldSize;\n\n const testIndices = indices.slice(testStart, testEnd);\n const trainIndices = [...indices.slice(0, testStart), ...indices.slice(testEnd)];\n\n splits.push([trainIndices, testIndices]);\n current = testEnd;\n }\n\n return splits;\n }\n\n getNSplits(): number {\n return this.nSplits;\n }\n}\n\n/**\n * Stratified K-Folds cross-validator.\n *\n * Provides train/test indices while preserving class distribution.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html | Scikit-learn StratifiedKFold}\n */\nexport class StratifiedKFold {\n private nSplits: number;\n private shuffle: boolean;\n private randomState: number | undefined;\n\n constructor(\n options: {\n nSplits?: number;\n shuffle?: boolean;\n randomState?: number;\n } = {}\n ) {\n this.nSplits = options.nSplits ?? 5;\n this.shuffle = options.shuffle ?? false;\n this.randomState = options.randomState;\n }\n\n split(X: Tensor, y: Tensor): Array<[number[], number[]]> {\n const shape0 = X.shape[0];\n if (shape0 === undefined) {\n throw new ShapeError(\"X must have valid shape[0]\");\n }\n const nSamples = shape0;\n validateNSplits(this.nSplits);\n if (this.nSplits > nSamples) {\n throw new InvalidParameterError(\n \"nSplits must not be greater than number of samples\",\n \"nSplits\",\n this.nSplits\n );\n }\n const yShape0 = y.shape[0];\n if (yShape0 === undefined || yShape0 !== nSamples) {\n throw new InvalidParameterError(\"X and y must have same number of samples\", \"y\", yShape0);\n }\n if (y.ndim !== 1) {\n throw new ShapeError(`y must be a 1D tensor, got ${y.ndim}D`);\n }\n const labelMap = new Map<string | number | bigint, number[]>();\n const random =\n this.randomState !== undefined ? createSeededRandom(this.randomState) : Math.random;\n\n for (let i = 0; i < nSamples; i++) {\n const label = readTensorValue(y, [i]);\n let bucket = labelMap.get(label);\n if (bucket === undefined) {\n bucket = [];\n labelMap.set(label, bucket);\n }\n bucket.push(i);\n }\n\n for (const [label, indices] of labelMap.entries()) {\n if (this.shuffle) {\n shuffleIndicesInPlace(indices, random);\n }\n if (indices.length < this.nSplits) {\n throw new InvalidParameterError(\n `Each class must have at least nSplits samples; class ${label} has ${indices.length}`,\n \"nSplits\",\n this.nSplits\n );\n }\n }\n\n const foldIndices: number[][] = Array.from({ length: this.nSplits }, () => []);\n\n for (const indices of labelMap.values()) {\n const foldSizes = makeFoldSizes(indices.length, this.nSplits);\n let start = 0;\n for (let fold = 0; fold < this.nSplits; fold++) {\n const size = foldSizes[fold] ?? 0;\n const end = start + size;\n const target = foldIndices[fold];\n if (!target) {\n throw new DeepboxError(\"Internal error: stratified fold storage missing\");\n }\n target.push(...indices.slice(start, end));\n start = end;\n }\n }\n\n const splits: Array<[number[], number[]]> = [];\n\n for (let fold = 0; fold < this.nSplits; fold++) {\n const testIndices = foldIndices[fold] ?? [];\n const trainIndices: number[] = [];\n for (let other = 0; other < this.nSplits; other++) {\n if (other === fold) continue;\n trainIndices.push(...(foldIndices[other] ?? []));\n }\n splits.push([trainIndices, testIndices]);\n }\n\n return splits;\n }\n\n getNSplits(): number {\n return this.nSplits;\n }\n}\n\n/**\n * Group K-Fold cross-validator.\n *\n * Ensures same group is not in both train and test.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GroupKFold.html | Scikit-learn GroupKFold}\n */\nexport class GroupKFold {\n private nSplits: number;\n\n constructor(options: { nSplits?: number } = {}) {\n this.nSplits = options.nSplits ?? 5;\n }\n\n split(X: Tensor, _y: Tensor | undefined, groups: Tensor): Array<[number[], number[]]> {\n const shape0 = X.shape[0];\n if (shape0 === undefined) {\n throw new ShapeError(\"X must have valid shape[0]\");\n }\n const nSamples = shape0;\n validateNSplits(this.nSplits);\n if (groups.ndim !== 1) {\n throw new ShapeError(`groups must be a 1D tensor, got ${groups.ndim}D`);\n }\n const groupsShape0 = groups.shape[0];\n if (groupsShape0 === undefined || groupsShape0 !== nSamples) {\n throw new InvalidParameterError(\n \"X and groups must have same number of samples\",\n \"groups\",\n groupsShape0\n );\n }\n const groupMap = new Map<string | number | bigint, number[]>();\n\n for (let i = 0; i < nSamples; i++) {\n const group = readTensorValue(groups, [i]);\n let bucket = groupMap.get(group);\n if (bucket === undefined) {\n bucket = [];\n groupMap.set(group, bucket);\n }\n bucket.push(i);\n }\n\n const groupEntries = Array.from(groupMap.entries()).map(([group, indices]) => ({\n group,\n indices,\n size: indices.length,\n }));\n if (this.nSplits > groupEntries.length) {\n throw new InvalidParameterError(\n \"Number of groups must be at least nSplits\",\n \"nSplits\",\n this.nSplits\n );\n }\n groupEntries.sort((a, b) => {\n if (b.size !== a.size) return b.size - a.size;\n return compareLabels(a.group, b.group);\n });\n\n const foldIndices: number[][] = Array.from({ length: this.nSplits }, () => []);\n const foldSizes = new Array<number>(this.nSplits).fill(0);\n\n for (const entry of groupEntries) {\n let bestFold = 0;\n let bestSize = foldSizes[0] ?? 0;\n for (let fold = 1; fold < this.nSplits; fold++) {\n const size = foldSizes[fold] ?? 0;\n if (size < bestSize) {\n bestSize = size;\n bestFold = fold;\n }\n }\n const target = foldIndices[bestFold];\n if (!target) {\n throw new DeepboxError(\"Internal error: group fold storage missing\");\n }\n target.push(...entry.indices);\n foldSizes[bestFold] = bestSize + entry.size;\n }\n\n const splits: Array<[number[], number[]]> = [];\n for (let fold = 0; fold < this.nSplits; fold++) {\n const testIndices = foldIndices[fold] ?? [];\n const trainIndices: number[] = [];\n for (let other = 0; other < this.nSplits; other++) {\n if (other === fold) continue;\n trainIndices.push(...(foldIndices[other] ?? []));\n }\n splits.push([trainIndices, testIndices]);\n }\n\n return splits;\n }\n\n getNSplits(): number {\n return this.nSplits;\n }\n}\n\n/**\n * Leave-One-Out cross-validator.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.LeaveOneOut.html | Scikit-learn LeaveOneOut}\n */\nexport class LeaveOneOut {\n split(X: Tensor): Array<[number[], number[]]> {\n const shape0 = X.shape[0];\n if (shape0 === undefined) {\n throw new ShapeError(\"X must have valid shape[0]\");\n }\n const nSamples = shape0;\n const splits: Array<[number[], number[]]> = [];\n\n for (let i = 0; i < nSamples; i++) {\n const trainIndices = [\n ...Array.from({ length: i }, (_, j) => j),\n ...Array.from({ length: nSamples - i - 1 }, (_, j) => i + 1 + j),\n ];\n const testIndices = [i];\n splits.push([trainIndices, testIndices]);\n }\n\n return splits;\n }\n\n getNSplits(X: Tensor): number {\n const shape0 = X.shape[0];\n if (shape0 === undefined) {\n throw new ShapeError(\"X must have valid shape[0]\");\n }\n return shape0;\n }\n}\n\n/**\n * Leave-P-Out cross-validator.\n *\n * @see {@link https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.LeavePOut.html | Scikit-learn LeavePOut}\n */\nexport class LeavePOut {\n private p: number;\n\n constructor(p: number) {\n if (!Number.isFinite(p) || !Number.isInteger(p) || p <= 0) {\n throw new InvalidParameterError(\"p must be a positive integer\", \"p\", p);\n }\n this.p = p;\n }\n\n split(X: Tensor): Array<[number[], number[]]> {\n const shape0 = X.shape[0];\n if (shape0 === undefined) {\n throw new ShapeError(\"X must have valid shape[0]\");\n }\n const nSamples = shape0;\n if (this.p > nSamples) {\n throw new InvalidParameterError(\"p must not be greater than number of samples\", \"p\", this.p);\n }\n\n // Calculate number of combinations to prevent memory explosion\n let nCombos = 1;\n const k = this.p > nSamples / 2 ? nSamples - this.p : this.p;\n for (let i = 0; i < k; i++) {\n nCombos = (nCombos * (nSamples - i)) / (i + 1);\n }\n\n // Safety limit: 100,000 splits is generous for in-memory JS arrays\n // For larger splits, a generator approach would be needed, but split() returns Array.\n if (nCombos > 100000) {\n throw new InvalidParameterError(\n `LeavePOut produces ${Math.floor(nCombos)} splits, which exceeds memory safety limit of 100,000`,\n \"p\",\n this.p\n );\n }\n\n const splits: Array<[number[], number[]]> = [];\n const allIndices = Array.from({ length: nSamples }, (_, i) => i);\n\n // Iterative combination generator\n const combine = (start: number, currentCombo: number[]) => {\n if (currentCombo.length === this.p) {\n const testSet = new Set(currentCombo);\n const testIndices = [...currentCombo];\n const trainIndices = allIndices.filter((i) => !testSet.has(i));\n splits.push([trainIndices, testIndices]);\n return;\n }\n for (let i = start; i < nSamples; i++) {\n currentCombo.push(i);\n combine(i + 1, currentCombo);\n currentCombo.pop();\n }\n };\n\n combine(0, []);\n\n return splits;\n }\n\n getNSplits(X: Tensor): number {\n const shape0 = X.shape[0];\n if (shape0 === undefined) {\n throw new ShapeError(\"X must have valid shape[0]\");\n }\n const n = shape0;\n if (this.p > n) {\n throw new InvalidParameterError(\"p must not be greater than number of samples\", \"p\", this.p);\n }\n // C(n, p) = n! / (p! * (n-p)!)\n let result = 1;\n const k = this.p > n / 2 ? n - this.p : this.p;\n for (let i = 0; i < k; i++) {\n result = (result * (n - i)) / (i + 1);\n }\n return Math.round(result);\n }\n}\n"]}