fileviewer 2.0.0__py3-none-any.whl

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 (318) hide show
  1. cli.py +51 -0
  2. config.py +115 -0
  3. fileviewer-2.0.0.dist-info/METADATA +20 -0
  4. fileviewer-2.0.0.dist-info/RECORD +318 -0
  5. fileviewer-2.0.0.dist-info/WHEEL +5 -0
  6. fileviewer-2.0.0.dist-info/entry_points.txt +2 -0
  7. fileviewer-2.0.0.dist-info/licenses/LICENSE +201 -0
  8. fileviewer-2.0.0.dist-info/top_level.txt +6 -0
  9. kernel/__init__.py +0 -0
  10. kernel/builtins.py +46 -0
  11. kernel/context.py +31 -0
  12. kernel/event_bus.py +34 -0
  13. kernel/manifest.py +38 -0
  14. kernel/plugin_manager.py +69 -0
  15. kernel/service_registry.py +52 -0
  16. plugins/__init__.py +0 -0
  17. plugins/archive/__init__.py +0 -0
  18. plugins/archive/plugin.py +40 -0
  19. plugins/archive/plugin.toml +12 -0
  20. plugins/archive/router.py +1024 -0
  21. plugins/auth/__init__.py +0 -0
  22. plugins/auth/plugin.py +102 -0
  23. plugins/auth/plugin.toml +12 -0
  24. plugins/dataframe/__init__.py +0 -0
  25. plugins/dataframe/plugin.py +206 -0
  26. plugins/dataframe/plugin.toml +12 -0
  27. plugins/explorer/__init__.py +0 -0
  28. plugins/file-types/__init__.py +0 -0
  29. plugins/fs-ops/__init__.py +0 -0
  30. plugins/fs_local/__init__.py +0 -0
  31. plugins/fs_local/plugin.py +570 -0
  32. plugins/fs_local/plugin.toml +12 -0
  33. plugins/hex/__init__.py +0 -0
  34. plugins/hex/plugin.py +41 -0
  35. plugins/hex/plugin.toml +12 -0
  36. plugins/image/__init__.py +0 -0
  37. plugins/image/plugin.py +332 -0
  38. plugins/image/plugin.toml +12 -0
  39. plugins/keyboard/__init__.py +0 -0
  40. plugins/layout-list/__init__.py +0 -0
  41. plugins/layout-switcher/__init__.py +0 -0
  42. plugins/layout-waterfall/__init__.py +0 -0
  43. plugins/media/__init__.py +0 -0
  44. plugins/media/plugin.py +358 -0
  45. plugins/media/plugin.toml +12 -0
  46. plugins/midi/__init__.py +0 -0
  47. plugins/midi/plugin.py +67 -0
  48. plugins/midi/plugin.toml +12 -0
  49. plugins/midi/soundfonts/GeneralUserGS.sf3 +0 -0
  50. plugins/network/__init__.py +0 -0
  51. plugins/notification/__init__.py +0 -0
  52. plugins/open-with/__init__.py +0 -0
  53. plugins/task-panel/__init__.py +0 -0
  54. plugins/text/__init__.py +0 -0
  55. plugins/text/plugin.py +67 -0
  56. plugins/text/plugin.toml +12 -0
  57. plugins/theme/__init__.py +0 -0
  58. plugins/ui-kit/__init__.py +0 -0
  59. plugins/upload/__init__.py +0 -0
  60. plugins/upload/plugin.py +9 -0
  61. plugins/upload/plugin.toml +12 -0
  62. plugins/window-manager/__init__.py +0 -0
  63. server.py +77 -0
  64. static/__init__.py +0 -0
  65. static/assets/PluginContext-Dj8wwTZE.js +1 -0
  66. static/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  67. static/assets/codemirror-BJNn0OIM.js +36 -0
  68. static/assets/codemirror-CJyf71kZ.js +36 -0
  69. static/assets/codemirror-DBPnu2CC.js +36 -0
  70. static/assets/codemirror-DrPTYFDt.js +36 -0
  71. static/assets/codemirror-DxLbatpa.js +36 -0
  72. static/assets/index--408Tps8.js +1 -0
  73. static/assets/index--LYgIjG9.css +1 -0
  74. static/assets/index--bj06LVM.js +1 -0
  75. static/assets/index-0TIIzq5H.js +1 -0
  76. static/assets/index-0g7PjOGO.js +1 -0
  77. static/assets/index-1cRM08Wp.js +3 -0
  78. static/assets/index-2YKzS5uy.js +1 -0
  79. static/assets/index-2qiTrLXa.js +1 -0
  80. static/assets/index-4eFq23ik.css +1 -0
  81. static/assets/index-51Y88RMN.js +1 -0
  82. static/assets/index-5T3oghsB.js +1 -0
  83. static/assets/index-8kDqZgVo.js +7 -0
  84. static/assets/index-At1jwpmF.js +2 -0
  85. static/assets/index-B0y6zowL.js +1 -0
  86. static/assets/index-B2KEZUcl.js +1 -0
  87. static/assets/index-B4T8MK8W.js +1 -0
  88. static/assets/index-B5ZuFCdU.js +7 -0
  89. static/assets/index-B64Z-55s.css +1 -0
  90. static/assets/index-B7DRWOjH.js +1 -0
  91. static/assets/index-B7Hx78c6.js +1 -0
  92. static/assets/index-B8BLWV6D.js +1 -0
  93. static/assets/index-B978RfUM.js +2 -0
  94. static/assets/index-B9BHdEf0.css +1 -0
  95. static/assets/index-B9J9q497.js +1 -0
  96. static/assets/index-B9L4ZEC3.js +7 -0
  97. static/assets/index-BA5-tZIT.js +1 -0
  98. static/assets/index-BAoeWKG_.js +1 -0
  99. static/assets/index-BDIbxIBM.css +1 -0
  100. static/assets/index-BEPZmlCP.js +7 -0
  101. static/assets/index-BIJaWrn2.js +1 -0
  102. static/assets/index-BImrf9YK.js +1 -0
  103. static/assets/index-BL6Hi8Vf.js +1 -0
  104. static/assets/index-BLWFd4OJ.js +3 -0
  105. static/assets/index-BLhT7hAc.js +7 -0
  106. static/assets/index-BMxVmJJs.js +1 -0
  107. static/assets/index-BNdw7j9T.css +1 -0
  108. static/assets/index-BNpOgC4Q.js +2 -0
  109. static/assets/index-BPVXz8cc.js +1 -0
  110. static/assets/index-BPb4qpsX.js +3 -0
  111. static/assets/index-BQ-JoAoq.js +1 -0
  112. static/assets/index-BSnj44Jv.css +1 -0
  113. static/assets/index-BTXsjIzF.js +2 -0
  114. static/assets/index-BWVUxBWg.js +3 -0
  115. static/assets/index-BWoddhxN.js +1 -0
  116. static/assets/index-BWstOYAn.js +1 -0
  117. static/assets/index-BXaR_VWU.js +1 -0
  118. static/assets/index-BXfI57B_.js +1 -0
  119. static/assets/index-BXwxhRCQ.js +2 -0
  120. static/assets/index-BYB9c4pa.css +1 -0
  121. static/assets/index-BYJgMbZC.js +1 -0
  122. static/assets/index-BbLRFpVe.js +1 -0
  123. static/assets/index-BdQfDEE-.css +1 -0
  124. static/assets/index-BfDhk2x4.css +1 -0
  125. static/assets/index-Bg2v4Lyn.js +1 -0
  126. static/assets/index-BgSTEAWV.js +1 -0
  127. static/assets/index-BjlYtQhM.js +1 -0
  128. static/assets/index-BlFwryPw.js +1 -0
  129. static/assets/index-BmtOec2k.css +1 -0
  130. static/assets/index-BooWW64P.js +1 -0
  131. static/assets/index-BrCKwTlU.css +1 -0
  132. static/assets/index-BrIZV8QH.js +307 -0
  133. static/assets/index-Brc-UMYF.js +1 -0
  134. static/assets/index-BsMbPMbN.css +1 -0
  135. static/assets/index-Bt46o_ET.js +1 -0
  136. static/assets/index-BuIGFPni.js +1 -0
  137. static/assets/index-Bv2N4G0L.js +1 -0
  138. static/assets/index-Bv6JzpXe.js +2 -0
  139. static/assets/index-Bx_0hRFr.js +2 -0
  140. static/assets/index-BxclZM-v.js +1 -0
  141. static/assets/index-BzprIGhw.js +1 -0
  142. static/assets/index-C-__NUN8.js +1 -0
  143. static/assets/index-C-gO08xO.js +7 -0
  144. static/assets/index-C0Iul4E8.js +1 -0
  145. static/assets/index-C0R8SPP8.js +1 -0
  146. static/assets/index-C0Wtel8T.js +1 -0
  147. static/assets/index-C2hxE-GK.js +1 -0
  148. static/assets/index-C35x4cuC.js +2 -0
  149. static/assets/index-C38zlSHe.js +1 -0
  150. static/assets/index-C4svQ6Jm.js +307 -0
  151. static/assets/index-C5EV4PY2.js +1 -0
  152. static/assets/index-C5d7u9pX.js +2 -0
  153. static/assets/index-CApaKomN.css +1 -0
  154. static/assets/index-CBUV2lHv.css +1 -0
  155. static/assets/index-CBUkrO5I.js +1 -0
  156. static/assets/index-CCKYk5Cf.js +1 -0
  157. static/assets/index-CESragLM.js +1 -0
  158. static/assets/index-CF4wzh9L.js +7 -0
  159. static/assets/index-CGgZljxQ.js +1 -0
  160. static/assets/index-CHhUX9Cr.js +1 -0
  161. static/assets/index-CIBXPPLg.css +1 -0
  162. static/assets/index-CJO-g1BJ.js +1 -0
  163. static/assets/index-CJgij9cH.js +1 -0
  164. static/assets/index-CLPk4T4q.js +1 -0
  165. static/assets/index-CLeE2TSt.js +1 -0
  166. static/assets/index-CQd4Z9Xg.css +1 -0
  167. static/assets/index-CQpVCmoJ.js +1 -0
  168. static/assets/index-CR9b6iMx.js +1 -0
  169. static/assets/index-CRD_FhKj.js +1 -0
  170. static/assets/index-CSOq7QX5.js +7 -0
  171. static/assets/index-CSmUX-uX.js +1 -0
  172. static/assets/index-CX6kfJsb.js +1 -0
  173. static/assets/index-CarC2gxK.js +1 -0
  174. static/assets/index-CcObN8qG.css +1 -0
  175. static/assets/index-CcRteK-F.js +1 -0
  176. static/assets/index-CdcCtco9.js +1 -0
  177. static/assets/index-CddFfNbD.js +1 -0
  178. static/assets/index-CeZp2xoa.js +7 -0
  179. static/assets/index-CfI2spci.js +1 -0
  180. static/assets/index-CfZEnh1W.js +1 -0
  181. static/assets/index-Cgo7uPYD.js +307 -0
  182. static/assets/index-CiqCkKZQ.js +1 -0
  183. static/assets/index-Cjgudl71.js +1 -0
  184. static/assets/index-Cjjo-RlX.js +7 -0
  185. static/assets/index-CjyaPov5.js +1 -0
  186. static/assets/index-ClkoKhpk.css +1 -0
  187. static/assets/index-CmooHr0Z.js +1 -0
  188. static/assets/index-CneRMCk5.js +2 -0
  189. static/assets/index-CogIYhhf.js +1 -0
  190. static/assets/index-CosZnE4r.js +2 -0
  191. static/assets/index-CovC0IXq.js +2 -0
  192. static/assets/index-Cq4haV9k.js +1 -0
  193. static/assets/index-Cr6hRcjd.js +1 -0
  194. static/assets/index-CrJv20ML.js +1 -0
  195. static/assets/index-Crt-l_Zs.js +1 -0
  196. static/assets/index-Cs6EtPKm.js +1 -0
  197. static/assets/index-CtB4Dzpv.js +1 -0
  198. static/assets/index-Cvh-Cz4q.css +1 -0
  199. static/assets/index-Cw5SH0Dx.js +1 -0
  200. static/assets/index-Cy8MVPI6.css +1 -0
  201. static/assets/index-CyRE58Ev.js +1 -0
  202. static/assets/index-D1lCkaGH.js +1 -0
  203. static/assets/index-D20YXVz1.js +1 -0
  204. static/assets/index-D2tEVof8.js +1 -0
  205. static/assets/index-D32d3cBf.js +1 -0
  206. static/assets/index-D4Ydt1vZ.js +1 -0
  207. static/assets/index-D59zhyFw.js +1 -0
  208. static/assets/index-D6PlIxrR.js +1 -0
  209. static/assets/index-D8wUvUZm.js +1 -0
  210. static/assets/index-D9rdgWh9.css +1 -0
  211. static/assets/index-DC75hm2i.js +7 -0
  212. static/assets/index-DCQqTj-4.js +307 -0
  213. static/assets/index-DCc_1Ahb.css +1 -0
  214. static/assets/index-DE4LR7a7.js +7 -0
  215. static/assets/index-DGKRJgOg.js +1 -0
  216. static/assets/index-DGaYIYZR.js +2 -0
  217. static/assets/index-DGncsSU3.js +1 -0
  218. static/assets/index-DHXw0uSD.js +1 -0
  219. static/assets/index-DIW0peTB.css +1 -0
  220. static/assets/index-DJiOe7sd.js +1 -0
  221. static/assets/index-DK0Lpf9L.js +1 -0
  222. static/assets/index-DKSccoJo.js +1 -0
  223. static/assets/index-DMiT7xTT.js +2 -0
  224. static/assets/index-DOUCuIfH.js +1 -0
  225. static/assets/index-DObMQVjN.js +1 -0
  226. static/assets/index-DPa_qccV.js +1 -0
  227. static/assets/index-DQbKxowl.js +2 -0
  228. static/assets/index-DQcW8E9e.js +1 -0
  229. static/assets/index-DTOvF13c.js +1 -0
  230. static/assets/index-DTSq-cQR.js +1 -0
  231. static/assets/index-DTdro5JT.js +2 -0
  232. static/assets/index-DVY0jbkv.js +1 -0
  233. static/assets/index-DVbNKibQ.js +1 -0
  234. static/assets/index-DVzVl8kQ.js +1 -0
  235. static/assets/index-DW2-_nOb.css +1 -0
  236. static/assets/index-D_UwwbES.css +1 -0
  237. static/assets/index-DaFwWasN.js +1 -0
  238. static/assets/index-Dasv714F.js +1 -0
  239. static/assets/index-Dbj1EvcJ.css +1 -0
  240. static/assets/index-Dc-x2BCQ.js +7 -0
  241. static/assets/index-DcKT5B0m.js +1 -0
  242. static/assets/index-DhwRIBtg.js +2 -0
  243. static/assets/index-DkMMeyyi.js +1 -0
  244. static/assets/index-DkYSbky_.css +1 -0
  245. static/assets/index-Dm6aoOLr.js +1 -0
  246. static/assets/index-DnrfOTiV.js +7 -0
  247. static/assets/index-Do5zuoHk.js +2 -0
  248. static/assets/index-Dqi82BvV.js +2 -0
  249. static/assets/index-DqnlZjNL.css +1 -0
  250. static/assets/index-Dr2huMIF.js +1 -0
  251. static/assets/index-DrDoaEUk.js +2 -0
  252. static/assets/index-Ds2veE5s.js +2 -0
  253. static/assets/index-Ds9jXOBZ.js +1 -0
  254. static/assets/index-DslQjpEH.js +1 -0
  255. static/assets/index-DsyWoKFl.js +1 -0
  256. static/assets/index-DvECoxJE.js +7 -0
  257. static/assets/index-DxM7xeZO.js +1 -0
  258. static/assets/index-DyZBZcAR.js +1 -0
  259. static/assets/index-EWyFIirj.css +1 -0
  260. static/assets/index-GBs7rKhJ.js +1 -0
  261. static/assets/index-GQUI2tPy.css +1 -0
  262. static/assets/index-HeUnXrHF.css +1 -0
  263. static/assets/index-IIfJ404E.js +1 -0
  264. static/assets/index-JViVvDdX.js +1 -0
  265. static/assets/index-LbngjBHp.js +1 -0
  266. static/assets/index-NVaIim0y.js +3 -0
  267. static/assets/index-Nn3FU1z0.js +1 -0
  268. static/assets/index-QTGOdUET.js +307 -0
  269. static/assets/index-QYmHIo0z.js +1 -0
  270. static/assets/index-SVeInSJs.js +1 -0
  271. static/assets/index-SjtbrUZB.css +1 -0
  272. static/assets/index-Vtnl3KjI.js +1 -0
  273. static/assets/index-VxNaJkwa.js +2 -0
  274. static/assets/index-ZZaZ2JxW.js +1 -0
  275. static/assets/index-bl5aaT0R.css +1 -0
  276. static/assets/index-cT7YK32T.js +1 -0
  277. static/assets/index-cwnxsbxz.js +1 -0
  278. static/assets/index-e2duK0dh.css +1 -0
  279. static/assets/index-exsYV2vf.js +1 -0
  280. static/assets/index-eyCaBBCe.js +2 -0
  281. static/assets/index-iwsxNFDe.js +1 -0
  282. static/assets/index-j6Km188f.js +7 -0
  283. static/assets/index-lwHKcTVh.js +2 -0
  284. static/assets/index-m31wTW8O.js +2 -0
  285. static/assets/index-mMUEF1la.js +1 -0
  286. static/assets/index-nmC8Ba-k.js +1 -0
  287. static/assets/index-q31mdcT_.js +1 -0
  288. static/assets/index-rop_JNVb.css +1 -0
  289. static/assets/index-sGYA5got.js +2 -0
  290. static/assets/index-tUMg9YlW.js +1 -0
  291. static/assets/index-v5zQoP3D.js +1 -0
  292. static/assets/index-xV-tYcCz.css +1 -0
  293. static/assets/index-yR7amFQt.js +1 -0
  294. static/assets/index-yc0sWbuL.js +1 -0
  295. static/assets/index-zg77iWzZ.js +1 -0
  296. static/assets/materialdesignicons-webfont-B7mPwVP_.ttf +0 -0
  297. static/assets/materialdesignicons-webfont-CSr8KVlo.eot +0 -0
  298. static/assets/materialdesignicons-webfont-Dp5v-WZN.woff2 +0 -0
  299. static/assets/materialdesignicons-webfont-PXm3-2wK.woff +0 -0
  300. static/assets/preload-helper-CLcXU_4U.js +1 -0
  301. static/assets/spessasynth-CiCJFoS-.js +114 -0
  302. static/assets/spessasynth_processor.min-Dc6jvYKP.js +20 -0
  303. static/assets/vendor-2-PUxJ-A.js +109 -0
  304. static/assets/vendor-C-9xz5oV.js +109 -0
  305. static/assets/vendor-CgiAwjOU.js +109 -0
  306. static/assets/vendor-Ddpmd7Ot.css +1 -0
  307. static/assets/vendor-OGOEyasN.js +109 -0
  308. static/assets/vendor-akOE2j9A.js +109 -0
  309. static/assets/vuetify-4fGNviF3.js +15 -0
  310. static/assets/vuetify-4pen7Kuc.js +15 -0
  311. static/assets/vuetify-CXW7nbqp.js +15 -0
  312. static/assets/vuetify-CvNLpuOM.css +5 -0
  313. static/assets/vuetify-CwBrRr3R.js +15 -0
  314. static/assets/vuetify-CwWhwiUe.css +5 -0
  315. static/assets/vuetify-EHH5paiX.js +15 -0
  316. static/assets/vuetify-_KVfjYUB.css +5 -0
  317. static/assets/vuetify-_lamJc3G.js +15 -0
  318. static/index.html +61 -0
cli.py ADDED
@@ -0,0 +1,51 @@
1
+ import argparse
2
+ import os
3
+ import sys
4
+ import threading
5
+ import time
6
+ from pathlib import Path
7
+
8
+
9
+ def main():
10
+ parser = argparse.ArgumentParser(prog="fileviewer", description="File Viewer")
11
+ parser.add_argument("path", nargs="*", default=["."], help="Root directories to serve")
12
+ parser.add_argument("--host", default="127.0.0.1")
13
+ parser.add_argument("--port", type=int, default=8001)
14
+ parser.add_argument("--no-browser", action="store_true")
15
+ parser.add_argument("--write", action="store_true", help="Enable write operations")
16
+ parser.add_argument("--name", nargs="*", help="Display names for each root")
17
+ parser.add_argument("--user", default="", help="Username for auth")
18
+ parser.add_argument("--password", default="", help="Password for auth")
19
+ args = parser.parse_args()
20
+
21
+ roots = []
22
+ for i, p in enumerate(args.path):
23
+ abs_p = Path(p).resolve()
24
+ if not abs_p.is_dir():
25
+ print(f"Error: '{p}' is not a directory", file=sys.stderr)
26
+ sys.exit(1)
27
+ name = (args.name[i] if args.name and i < len(args.name) else abs_p.name) or str(abs_p)
28
+ roots.append(f"{abs_p}|{name}")
29
+
30
+ os.environ["FILE_VIEWER_ROOTS"] = ";".join(roots)
31
+ if args.write:
32
+ os.environ["FILE_VIEWER_WRITE"] = "1"
33
+ if args.user:
34
+ os.environ["FILE_VIEWER_USER"] = args.user
35
+ if args.password:
36
+ os.environ["FILE_VIEWER_PASS"] = args.password
37
+
38
+ if not args.no_browser:
39
+ url = f"http://localhost:{args.port}"
40
+ def _open():
41
+ time.sleep(1.2)
42
+ import webbrowser
43
+ webbrowser.open(url)
44
+ threading.Thread(target=_open, daemon=True).start()
45
+
46
+ import uvicorn
47
+ uvicorn.run("server:app", host=args.host, port=args.port, reload=False)
48
+
49
+
50
+ if __name__ == "__main__":
51
+ main()
config.py ADDED
@@ -0,0 +1,115 @@
1
+ """Pure utility functions: path validation, slug generation, disk usage.
2
+ No business logic — plugins own their domain knowledge."""
3
+ import os
4
+ import re
5
+ import shutil
6
+ from pathlib import Path
7
+
8
+
9
+ def _to_slug(text: str) -> str:
10
+ slug = text.strip().lower()
11
+ slug = re.sub(r"[^\w\u4e00-\u9fff]+", "_", slug)
12
+ slug = slug.strip("_")
13
+ return slug or "root"
14
+
15
+
16
+ def _make_slugs(bases: list[str]) -> list[str]:
17
+ count: dict[str, int] = {}
18
+ result = []
19
+ for b in bases:
20
+ if b not in count:
21
+ count[b] = 0
22
+ result.append(b)
23
+ else:
24
+ count[b] += 1
25
+ result.append(f"{b}_{count[b]}")
26
+ return result
27
+
28
+
29
+ def get_roots() -> list[tuple[str, str, Path]]:
30
+ raw = os.environ.get("FILE_VIEWER_ROOTS", "")
31
+ entries = [e.strip() for e in raw.split(";") if e.strip()]
32
+ if not entries:
33
+ entries = ["."]
34
+ parsed = []
35
+ for e in entries:
36
+ if "|" in e:
37
+ path_str, name = e.split("|", 1)
38
+ else:
39
+ path_str = e
40
+ name = Path(e).name or e
41
+ parsed.append((Path(path_str).resolve(), name.strip()))
42
+ bases = [_to_slug(name) for _, name in parsed]
43
+ slugs = _make_slugs(bases)
44
+ return [(slug, name, path) for (path, name), slug in zip(parsed, slugs)]
45
+
46
+
47
+ def _check_under(normalized: Path, root: Path) -> None:
48
+ from fastapi import HTTPException
49
+ try:
50
+ normalized.relative_to(root)
51
+ except ValueError:
52
+ raise HTTPException(status_code=403, detail="Access denied")
53
+
54
+
55
+ def parse_path(rel_path: str) -> tuple[Path, str, Path]:
56
+ """Split 'slug/sub/path' into (abs_path, slug, root_abs_path)."""
57
+ from fastapi import HTTPException
58
+ parts = rel_path.lstrip("/").split("/", 1)
59
+ slug = parts[0]
60
+ sub = parts[1] if len(parts) > 1 else ""
61
+ roots = get_roots()
62
+ match = next((r for r in roots if r[0] == slug), None)
63
+ if match is None:
64
+ raise HTTPException(status_code=404, detail=f"Root '{slug}' not found")
65
+ _, _, root_abs = match
66
+ if sub:
67
+ abs_path = Path(os.path.normpath(root_abs / sub))
68
+ else:
69
+ abs_path = root_abs
70
+ _check_under(abs_path, root_abs)
71
+ return abs_path, slug, root_abs
72
+
73
+
74
+ def validate_path(rel_path: str) -> Path:
75
+ abs_path, _, _ = parse_path(rel_path)
76
+ return abs_path
77
+
78
+
79
+ def validate_abs_path(abs_path_str: str) -> Path:
80
+ from fastapi import HTTPException
81
+ p = Path(abs_path_str).resolve()
82
+ roots = get_roots()
83
+ for _, _, root in roots:
84
+ try:
85
+ p.relative_to(root)
86
+ return p
87
+ except ValueError:
88
+ continue
89
+ raise HTTPException(status_code=403, detail="Access denied")
90
+
91
+
92
+ def build_entry_path(p: Path, slug: str | None, root: Path) -> str:
93
+ if slug is None:
94
+ return str(p).replace('\\', '/')
95
+ try:
96
+ rel = p.relative_to(root)
97
+ rel_str = str(rel).replace('\\', '/')
98
+ return f"{slug}/{rel_str}" if rel_str != "." else slug
99
+ except ValueError:
100
+ return str(p)
101
+
102
+
103
+ def get_disk_usage(path: Path) -> dict | None:
104
+ try:
105
+ u = shutil.disk_usage(path)
106
+ return {"total": u.total, "used": u.used, "free": u.free}
107
+ except Exception:
108
+ return None
109
+
110
+
111
+ def require_write() -> None:
112
+ from fastapi import HTTPException
113
+ import os
114
+ if os.environ.get("FILE_VIEWER_WRITE", "").lower() in ("", "0", "false", "no"):
115
+ raise HTTPException(status_code=403, detail="Write mode not enabled")
@@ -0,0 +1,20 @@
1
+ Metadata-Version: 2.4
2
+ Name: fileviewer
3
+ Version: 2.0.0
4
+ Summary: File Viewer — plugin-based architecture
5
+ Requires-Python: >=3.10
6
+ License-File: LICENSE
7
+ Requires-Dist: fastapi>=0.111
8
+ Requires-Dist: uvicorn[standard]>=0.30
9
+ Requires-Dist: python-multipart>=0.0.9
10
+ Requires-Dist: pillow>=10.0
11
+ Requires-Dist: polars>=0.20
12
+ Requires-Dist: httpx>=0.27
13
+ Requires-Dist: async-lru>=2.0
14
+ Requires-Dist: tomli>=2.0; python_version < "3.11"
15
+ Requires-Dist: pyzipper>=0.3
16
+ Requires-Dist: psd_tools>=1.16.0
17
+ Requires-Dist: mutagen>=1.47.0
18
+ Provides-Extra: archive
19
+ Requires-Dist: py7zr; extra == "archive"
20
+ Dynamic: license-file
@@ -0,0 +1,318 @@
1
+ cli.py,sha256=urE41o0AGYEsgzNSZonpqF73lfkwQj2o2CuHiefJGvU,1801
2
+ config.py,sha256=Akx7BCTTZL26NqQGog3HOJBwjysg94iPVBrefJnFZEE,3423
3
+ server.py,sha256=IdzDurStX_bhckF2KuAetp4Wr7s0Bvyv_XvTuBaePCo,2497
4
+ fileviewer-2.0.0.dist-info/licenses/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
5
+ kernel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ kernel/builtins.py,sha256=xppqez7ezSuGu4vEl9-ig_KAeb2fjtlsMplE_EmEWVA,1928
7
+ kernel/context.py,sha256=e3KYzEZNS-VxUwUepyXGU6ff5L7k735unbaJqJeiVZY,881
8
+ kernel/event_bus.py,sha256=HpgZ7VKo-68k2rwkEwuJOTWZrD6oqDQX1hoJrElnxzQ,1371
9
+ kernel/manifest.py,sha256=8RjJ6QAMnfw4yt-Kec-b_uPZx9uQa9fqI5mGG57Q_pw,979
10
+ kernel/plugin_manager.py,sha256=Dyw0wAnvC642Q2nwC6BYmpAwduGvqmiZ8TPFkmS3k7A,2554
11
+ kernel/service_registry.py,sha256=YjXSfkn03wDZ7Ce8RHpUgdlw_r3qgSQQ9Q6MR6oldfQ,1841
12
+ plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ plugins/archive/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ plugins/archive/plugin.py,sha256=2tn1h_hOTWA2XDkFqOPejme_qaGlvaVRE4Ft5hFTfR4,1173
15
+ plugins/archive/plugin.toml,sha256=4Pq8I7XEHIXC1DxGVA4I4E7g95v49Bb4M7EZW6yEXIk,231
16
+ plugins/archive/router.py,sha256=00k9ebWqcC48qc-NLXv0frTo6j_FNKgxeMMtIZ-uIlY,41147
17
+ plugins/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ plugins/auth/plugin.py,sha256=8C7BBRm-0McZ8oJlIeA3MgX2PmQzqkc4PJornSKjY0I,2759
19
+ plugins/auth/plugin.toml,sha256=91qW98ju_2La6t5hD-nkm91gsYLX20XD1fC6wmPF_xg,183
20
+ plugins/dataframe/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ plugins/dataframe/plugin.py,sha256=cimQEnEQ_cvO8mKqIzpqFtOVMNrOe6zLzGSSRcdvgVw,7556
22
+ plugins/dataframe/plugin.toml,sha256=QuAZpVO2I5PaBEQbWDKK10bb8x2C4ihT9_4F-Sll18g,186
23
+ plugins/explorer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ plugins/file-types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ plugins/fs-ops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ plugins/fs_local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ plugins/fs_local/plugin.py,sha256=LW9pQzZpgCgieDQdN8V_hVckK8FBGEsGqQCjtwfRAG8,22616
28
+ plugins/fs_local/plugin.toml,sha256=kRrS7KjMhR1UmgOnQMNhaRMnrVgViOtDNfc_xwY8hv4,211
29
+ plugins/hex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ plugins/hex/plugin.py,sha256=XaMfu7bPj4S7Bj6MF381z2doOx8jSScGqJ_e0HozKyU,1307
31
+ plugins/hex/plugin.toml,sha256=jSpbmWcWMW3tzFrarapRkZrd4oGVegf8cd4VvIby-1E,174
32
+ plugins/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ plugins/image/plugin.py,sha256=35JwRxpQ6L7Diuh3Sm8LrU98eMCb8OMcrHA0yze2EW8,12395
34
+ plugins/image/plugin.toml,sha256=0vYy_8Ma-rOaZOAmkBra9TS3ZtNflh6IU-dsvwugkxM,192
35
+ plugins/keyboard/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ plugins/layout-list/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ plugins/layout-switcher/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ plugins/layout-waterfall/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ plugins/media/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ plugins/media/plugin.py,sha256=oXjkEUwhm1QdkXo8Mms90vvCou_20Uw7bK7GmTW8Qws,13358
41
+ plugins/media/plugin.toml,sha256=6SXufqGbnU9UCsjYWu7hyHYR0oKcA40xDHTS2mO3GYQ,192
42
+ plugins/midi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ plugins/midi/plugin.py,sha256=H_V6MhNOZVSKUmCD-a1dEs1ZikxI3oiLGPuPYdBdNBA,2230
44
+ plugins/midi/plugin.toml,sha256=RhV9HJiOSeu6FZ9YD4mRSUnpwbOZERF70hxzYFTa4Qc,176
45
+ plugins/midi/soundfonts/GeneralUserGS.sf3,sha256=4u0yb_RNFfePL9xyQDtvprd-5yZtOq0NIZi8lXl7xmw,8423728
46
+ plugins/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ plugins/notification/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
+ plugins/open-with/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ plugins/task-panel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ plugins/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ plugins/text/plugin.py,sha256=WdMVwISmYqer_WK-K60bIHXBkMAIy6fw0j_9eW6MhN4,2319
52
+ plugins/text/plugin.toml,sha256=jz-7vdvVnfA5lyDf147UiEPBXK8SxzNouiJtfFWUvlM,188
53
+ plugins/theme/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ plugins/ui-kit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ plugins/upload/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ plugins/upload/plugin.py,sha256=_5OYwYfIrIx7TbcC5pQ6jRa1IAOJUmKhk4SLZeKRIYM,90
57
+ plugins/upload/plugin.toml,sha256=Bx6MKymRvu4B35weztiltJjN6wjD5R6-FhS5j8DmHsA,188
58
+ plugins/window-manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
+ static/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ static/index.html,sha256=uUJda4zDvPuj-V4ABC04pBlGT7LNEtVDbqrK2bMTFm4,4068
61
+ static/assets/PluginContext-Dj8wwTZE.js,sha256=yYnomrfaVoaxPExfG7xtCLCauGw3oHj5SBDLJNbggrs,102
62
+ static/assets/_plugin-vue_export-helper-DlAUqK2U.js,sha256=y4Ww8mPb4k6FczgwHAYnB2WS6fHxpWYpKfhtLBJkRKo,91
63
+ static/assets/codemirror-BJNn0OIM.js,sha256=PgcaH769eTqBmBq-e9B2RxkSCBlzNIKgn7SXSV0UlRQ,440401
64
+ static/assets/codemirror-CJyf71kZ.js,sha256=2zqdl_C_rtCtc8MTWLgdEEoVlBqKbe7FIz-nWdJK6C0,440401
65
+ static/assets/codemirror-DBPnu2CC.js,sha256=HlmG62SOn3vi0-NBckwOLgclKBHe7je0gAjQUBxQ2NE,440401
66
+ static/assets/codemirror-DrPTYFDt.js,sha256=hxwM4yJ-7x0qPAvVjaQI9tei_uh6j9wchWLhI70GqPU,440401
67
+ static/assets/codemirror-DxLbatpa.js,sha256=Jl23TFnc788SXTj6k_YNOYsoaFTVscQfhYOct77MasE,440404
68
+ static/assets/index--408Tps8.js,sha256=AhpC8hsEHXIyOADwOnVtLIyDcJQb-CcgnRMMcJJi0gg,1508
69
+ static/assets/index--LYgIjG9.css,sha256=51s5PDW5PaO6o7V2MgyUSBjfYK75AfBSPnhp5fY2np0,1520
70
+ static/assets/index--bj06LVM.js,sha256=AWDRmIwbwFCGFg7EBBRdNGuJj-Xh0Zp7glH9h8SVwnk,3830
71
+ static/assets/index-0TIIzq5H.js,sha256=c-vMYyXECyaZikwECZLCk-MxDT9CWvhla9cYd4EHo-g,1255
72
+ static/assets/index-0g7PjOGO.js,sha256=D3f4gw8_snlV0-_kHQ9ktM5sL_Lw5xnHlG1xa7RAS6I,7004
73
+ static/assets/index-1cRM08Wp.js,sha256=-X6T2MdM_XP-Ahr3J2EEkU4eBRXs1DrLB3kDvyMSi6E,1426
74
+ static/assets/index-2YKzS5uy.js,sha256=JGvq7S0TnlqAmQH1LpRIENGfyen47PF9o4aG9wV5POI,5383
75
+ static/assets/index-2qiTrLXa.js,sha256=kp0nM_4pT6dHMVYyZEINrNb62DD-Ucvq1T14lWMJ-6E,1606
76
+ static/assets/index-4eFq23ik.css,sha256=etvr6uGhQIzZQFzFv3pGrttRZpmoHQlHnpmywyyVsD4,1745
77
+ static/assets/index-51Y88RMN.js,sha256=BdXjlWtjGTutzdKRu2DDnMDGp1EoY6kOwjymrsAkPjM,2435
78
+ static/assets/index-5T3oghsB.js,sha256=Iow7dt0XzqSiJdQvQDHaHvrXUV0gotlJd3Vk3fvVA5k,3660
79
+ static/assets/index-8kDqZgVo.js,sha256=aYLpL8u3QX4y9L0lbJI51L-3EZ36x_555BtVGjbylag,16544
80
+ static/assets/index-At1jwpmF.js,sha256=OPr58eSBzbQ_t3s9xxtBkhVD5Ybnk4ZvyuHTwWtd3nU,13361
81
+ static/assets/index-B0y6zowL.js,sha256=WXPOJNIroJ24ccKQgqTCFQBHMCPgMYDDPvIXmXlanYo,7005
82
+ static/assets/index-B2KEZUcl.js,sha256=tq-6IWerIwQDWzAHZwO7vPNb7S21irI570hcSVcMuMM,11493
83
+ static/assets/index-B4T8MK8W.js,sha256=kio3mPa8r3m9WHj_3XvlScICoba3EHa_fSc3WrXm7nY,57312
84
+ static/assets/index-B5ZuFCdU.js,sha256=IQ-OoHAcNPLdSQfx_zTCSld_Mc3scNOob_CarL2r7VI,39433
85
+ static/assets/index-B64Z-55s.css,sha256=UtGoGgdz-beaNfN9sgDtTM-L1N7GSMgdLdxNNZo4w0A,3575
86
+ static/assets/index-B7DRWOjH.js,sha256=TCGJ0ENapuX0L-xLJQ7u6VI8Zz4i5SD2wuN17ZnluhU,1445
87
+ static/assets/index-B7Hx78c6.js,sha256=W8arErHaW4mz7ygPDm_ug_QypBklGBzuD9F2FjMhJzc,1444
88
+ static/assets/index-B8BLWV6D.js,sha256=Kt0qNYRxKHkaS1cS6V-MkvkkYbvptPSxiz0lU7aopVY,2435
89
+ static/assets/index-B978RfUM.js,sha256=HOmtROne50IBzdamQ3SGTrpe7iPEO3gnazDGd1-EP5A,10618
90
+ static/assets/index-B9BHdEf0.css,sha256=TlPEpl-FGyAW2ijAvQRq0BxBgOQpuujbOe_sxWtIWzc,3826
91
+ static/assets/index-B9J9q497.js,sha256=CiKOO3CQyIMim8r3GNY8dUAOZSrVpNxM1mErVajOkf4,3787
92
+ static/assets/index-B9L4ZEC3.js,sha256=YYHHEt1NdofQGnMQXF5ggSgtRkTbrsLJMSDQpVie6qw,16633
93
+ static/assets/index-BA5-tZIT.js,sha256=LBBMQgnP7KbddiiHo4XfT4Siz7Y-oHAQjBnXiKkVvoI,3973
94
+ static/assets/index-BAoeWKG_.js,sha256=2asya-qNz6oX8vwZ6g69hux9NtCEuO6k3c3Ow_0qrrI,14667
95
+ static/assets/index-BDIbxIBM.css,sha256=Mja3cLijRioETne6DvksFDHdBDhnfUtIk29t_qq-SO4,443
96
+ static/assets/index-BEPZmlCP.js,sha256=g_8m9xNvrEEdgcqjeSaaoqOaz3nME3ehdg3YT0O4_Lc,39272
97
+ static/assets/index-BIJaWrn2.js,sha256=HZTKOwGDAfkBu8QbeRjP5sgyhzbIpLvNdb4XYmIA3Ms,810
98
+ static/assets/index-BImrf9YK.js,sha256=ei-2hMWXrMmqHqufdGCMLLg_k-6NIaqy35iBcDEnKNA,834
99
+ static/assets/index-BL6Hi8Vf.js,sha256=zdNVJXZpSUwfAZ_etXux_Ld7d4Wn7L2CU1FMBPZUclY,10951
100
+ static/assets/index-BLWFd4OJ.js,sha256=5I9U26f7u5kNBK4GIuaWXnuUgm3eimZlK9xml02AajI,1426
101
+ static/assets/index-BLhT7hAc.js,sha256=ahL0XalgHeTGZvYacUiO988XoGHTl7-dOVvVEhW-SdE,39433
102
+ static/assets/index-BMxVmJJs.js,sha256=T7b2I7jDsh09f20UcnE7gho910ENBjqLcMw9dsCLAN4,657
103
+ static/assets/index-BNdw7j9T.css,sha256=RJf-Thbqn8bbML3EUiV6jFQPrUZ3oaYl8bfIy7rjxlU,168
104
+ static/assets/index-BNpOgC4Q.js,sha256=jSZPxcBZ_CkFGsXkW-ZTO8McUtXjnnK0VSdShJfgFaA,13386
105
+ static/assets/index-BPVXz8cc.js,sha256=sdXW2TptKYcgnP2vxrvASlWHDlGnmsadFIjId2inNyM,6826
106
+ static/assets/index-BPb4qpsX.js,sha256=7AdjYl3mXQoRmGVpRpY5ymgccxYP987In47K_MtV4pQ,1426
107
+ static/assets/index-BQ-JoAoq.js,sha256=FcuDluL5ZMxX4GQiLyKtk2YtkBEGpIEQrPyFv7lcoNY,2435
108
+ static/assets/index-BSnj44Jv.css,sha256=ojhG1Uk13Kkvu0vW7qOgFwH0-dm6RjtXU7h_oOsTduc,1485
109
+ static/assets/index-BTXsjIzF.js,sha256=dDg6rPiHpn2hsVF9vntXzfN95EYvKq9MyQf0FEnvrfc,13212
110
+ static/assets/index-BWVUxBWg.js,sha256=mGn4KhmnQuzRDnEpUyOsXAHw0YcMCK25I4AzW12mTY4,1426
111
+ static/assets/index-BWoddhxN.js,sha256=nl7wCeCFy2XrxoN4qeKQs6Ksk5EL1k6giRXIxxOtuXk,26413
112
+ static/assets/index-BWstOYAn.js,sha256=QsPo316joIfKxw8r6f5yYRt3_9-u_NnMp5-Yl9am6bQ,5361
113
+ static/assets/index-BXaR_VWU.js,sha256=Aph9Ombr_sBBe1W8Z9sdpjDECni_H5B6Wd03rz-yfiA,26176
114
+ static/assets/index-BXfI57B_.js,sha256=EgGPqSqLxtIajRRViscl3__QDL_SOpM4R3q_CyBko-4,10951
115
+ static/assets/index-BXwxhRCQ.js,sha256=k0PK0p86DRzBVuUWcWIEw39lUt3s13EN6LSPjONJBZA,13182
116
+ static/assets/index-BYB9c4pa.css,sha256=KB9000cknL3_8vV2ERajAKzqmTUvfukcN5wAXqSGOLI,201
117
+ static/assets/index-BYJgMbZC.js,sha256=lx-ggJgXf5NDw46w6KxT7tCch_LIjb_SfjsOZ8HFTKs,1445
118
+ static/assets/index-BbLRFpVe.js,sha256=sCd1U654NbfZMLHQam-Wa4pa-ZjLwG2iWhG1SUB0ocY,68289
119
+ static/assets/index-BdQfDEE-.css,sha256=3vOMupd2pDPdb15yXP-XCJ-cA2nadvVX-8w0rbXVhn4,2871
120
+ static/assets/index-BfDhk2x4.css,sha256=fItkPCg5JejE9ww7gRWdSjv8mxQIDs_AfNg8GYSx5ec,1745
121
+ static/assets/index-Bg2v4Lyn.js,sha256=VK6LpqlcN0A-J9M9PYVN6SeawIL2Hvt1MZ5cjXAJyLw,2435
122
+ static/assets/index-BgSTEAWV.js,sha256=u5KvSZI_Yfa264Vi_-NBQ6tyk_5AqgJ7ZOXW7cWBmq0,1444
123
+ static/assets/index-BjlYtQhM.js,sha256=7eHqLEjjHKZiCv41rSTLLd7OppMVvdaRCvW2218VcCc,10951
124
+ static/assets/index-BlFwryPw.js,sha256=rcDFeXl3T4O5sX_1KPfm0ZlDAxgjDpCCUrQLvWVvVSQ,1774
125
+ static/assets/index-BmtOec2k.css,sha256=rqyfMPkHTRtFGgY92pUOme9c9jnh-sPK71ghjEdmk2c,2658
126
+ static/assets/index-BooWW64P.js,sha256=59QvsnOwegAhY9JQv8ZVwiNuPjAaFXpAft3il0X48RM,5361
127
+ static/assets/index-BrCKwTlU.css,sha256=Tm4oOl649GpnURfAV9P_kYJs61VcSz1NJZQ3zzvb5Ao,8722
128
+ static/assets/index-BrIZV8QH.js,sha256=daplJ4A6tF6QnsZ8VHHh-LXh024QcM4Ek59R7n_VXrA,181384
129
+ static/assets/index-Brc-UMYF.js,sha256=1Nq6mra7L8LJLTwlZ2sAqo61gEqD6acheaykNYeu5-g,5383
130
+ static/assets/index-BsMbPMbN.css,sha256=ILfIafck_ovynZ3VpWGnvxD8s0dB6iRMjUl_oygmAjc,13815
131
+ static/assets/index-Bt46o_ET.js,sha256=tiw4B5apwzzGvpXcaks4CmoJ_qKgLTDc0Gy5ccktouI,27248
132
+ static/assets/index-BuIGFPni.js,sha256=SaT7vc-C-szQ2IaNk6XhL4-ruCcGZkrwESBy8E1nalc,4573
133
+ static/assets/index-Bv2N4G0L.js,sha256=fhHAScKujk8n2xM2GkgLuQQSc_NySeO-FHLHTmG9g54,1255
134
+ static/assets/index-Bv6JzpXe.js,sha256=7DfN7Xp7pi2ymg5oztoVd46yGUU7pB7ranNGfJBzxWc,10618
135
+ static/assets/index-Bx_0hRFr.js,sha256=LjJaefa-Ac8L59Wa2YWMVCc0oFUem4-Lo5VmLrEFoIU,13036
136
+ static/assets/index-BxclZM-v.js,sha256=pT0Hjn6-Odw6V4K_fyUR4H-TdkTxUNsMk9tE3f1w4aY,4529
137
+ static/assets/index-BzprIGhw.js,sha256=rNXOR49JinzG49kpzQrTxpjBoBZk0ZbSkKyk3PhlFnI,6899
138
+ static/assets/index-C-__NUN8.js,sha256=3Dayoq1CZAmd6Dr92aggcGZbH9q-5ClhKMiVtCvFnyc,1549
139
+ static/assets/index-C-gO08xO.js,sha256=_oTMlsvRl3cdmgYPiC_G665T4TR-nxe9Ym5rwq3nVLY,39339
140
+ static/assets/index-C0Iul4E8.js,sha256=6mNomEsSaNhhij-wht3mzHDuMx8a7vQlu2DozhvTl_8,27248
141
+ static/assets/index-C0R8SPP8.js,sha256=yzmwDF9t12CAyCrOi_dXLmKgVeoFxTe4MLuUGoPQH8c,54816
142
+ static/assets/index-C0Wtel8T.js,sha256=aBIpoNGrAfNNv75GmITX0bArdc-UoX61Kg3An21np8Y,2309
143
+ static/assets/index-C2hxE-GK.js,sha256=rDxumVcmXCpBD1pejGLQY01PmvBn4nwnQpqeOGnypu4,26329
144
+ static/assets/index-C35x4cuC.js,sha256=bgvu74SCy3FJs29JqdLh-XeArOsFDrBOH8Jd6k_1KOc,13212
145
+ static/assets/index-C38zlSHe.js,sha256=iwPrFJdgqd3Qhl2thjsmKH6_biAKhX3GNUG7a5WtOJM,16462
146
+ static/assets/index-C4svQ6Jm.js,sha256=qXMjb312FmQji2dR8s1C_rFoNiA4XnD9jjPLylI8v0Y,184146
147
+ static/assets/index-C5EV4PY2.js,sha256=YcbNbe8uhTuu0LoMI4xr3n2GP5SKdnCf89jtP0ujZMY,5607
148
+ static/assets/index-C5d7u9pX.js,sha256=YuYPL77SH6Lxy6H59vwnGG263z0fMMoLxWxQp9yuHf0,13541
149
+ static/assets/index-CApaKomN.css,sha256=2mJiJJkm9Sjx1SM_bK4ck-f_lh2pMufKSQ4Ywgoq_mE,6783
150
+ static/assets/index-CBUV2lHv.css,sha256=K5fduH7mDC3jyxlAGuxuWGUgUov3yMkxHq7E_YglinU,2468
151
+ static/assets/index-CBUkrO5I.js,sha256=Ai3d1ljNu_wmG5avNrcwWq9nsKZRKbysDL19c_9if2w,2254
152
+ static/assets/index-CCKYk5Cf.js,sha256=TayK4FyHSchNjTWxLPzTSavzdnv_I_4cf1N3I0Sg_AU,5594
153
+ static/assets/index-CESragLM.js,sha256=_mUTtIuPsaLB5VVfiW2hNKqx-XbxRpNvZg61qYoXt1M,4516
154
+ static/assets/index-CF4wzh9L.js,sha256=MDvX0ji7XCcFcz9isxsbHLDrYBlWGr7i9afFIQkE4HQ,39433
155
+ static/assets/index-CGgZljxQ.js,sha256=Fxk_hnd09xle1GdWoPypXmVJo5glIKPFjpB9vFLBeg0,16388
156
+ static/assets/index-CHhUX9Cr.js,sha256=IHx5mGGeLixoflgEyl7CnbX5V3luXp6aiuegKYl4TLw,7005
157
+ static/assets/index-CIBXPPLg.css,sha256=ePL6QCxxtVMG36u0_lUGq8xQpfBtnP-dVfbmQRrnYAY,678
158
+ static/assets/index-CJO-g1BJ.js,sha256=K_JsckmNI5rBncTlSm_ESE8vEV8xUEenWMFZQiRV03Y,2254
159
+ static/assets/index-CJgij9cH.js,sha256=8wedQWuL5cwPbecHGd8dQas1D1hf3w_5eXxOIPD3ZPA,1445
160
+ static/assets/index-CLPk4T4q.js,sha256=0ZXhx9-uhc7KkfEJEGKaeMKR9ocQKJrGuPD5p-2zI2c,79371
161
+ static/assets/index-CLeE2TSt.js,sha256=IqtGbOVLs3sh1OZLVq4GO83KfKvCXKnngshaEPpG-LU,784
162
+ static/assets/index-CQd4Z9Xg.css,sha256=wRscY-Ro-Vc_laL9fXq9dNhx-MJiF9-eLlRqCN-VykY,2981
163
+ static/assets/index-CQpVCmoJ.js,sha256=khxnPnF1zm4cPWFsFRepIGM5Ug3jlA_pnlgdusTH724,4516
164
+ static/assets/index-CR9b6iMx.js,sha256=LZqafBk3GDOsq-spfGMIh65dArl2GUdzy_u1BLLpE_E,11537
165
+ static/assets/index-CRD_FhKj.js,sha256=IlWi67fYJyI8-1lkGww7gtAGoC87tAWiWOVyr9ytpT4,4573
166
+ static/assets/index-CSOq7QX5.js,sha256=SG0Dy8VgZEeht-uG6UytruPwTnOlEpQb4G7c-mS2MrM,16491
167
+ static/assets/index-CSmUX-uX.js,sha256=u4nvQrYOSBP3MlgdyqxmNpG5F9gv9Hdr5DdZGofqeNU,55015
168
+ static/assets/index-CX6kfJsb.js,sha256=qLzKconhCwNZpZ3rQw0-mDo_FyakGk9rbe-6GA84jpo,11010
169
+ static/assets/index-CarC2gxK.js,sha256=9NqmyUzOpxznf3BDmPNxElpzf9i-6ANnGxF1AiwJmaM,1508
170
+ static/assets/index-CcObN8qG.css,sha256=CHK82xcHWPjILjoY-TEbQZUxib4uvDN1WC4Wk87wls4,209
171
+ static/assets/index-CcRteK-F.js,sha256=QOSS9SKKyWRrJrEk8gLx163lqCop_KtpXnwCY5EFxpI,26329
172
+ static/assets/index-CdcCtco9.js,sha256=NObyEWkTMvozb2SN2Oc7MJsPz-rbOX6yiwW3-IG8Ls4,7005
173
+ static/assets/index-CddFfNbD.js,sha256=H_kz-q0YazykPK6yV1G7-DhKj1uw4KBFgfWVoo7Iy9w,11482
174
+ static/assets/index-CeZp2xoa.js,sha256=Gvp8rcKPCTiEkk8w9T3BV_QsdT-nB6IK9RuhnIGdxaE,16544
175
+ static/assets/index-CfI2spci.js,sha256=w6H_t8jeaTw2GqeT4LLCWoFcu3o3CYiYbOmbdhNFELQ,1549
176
+ static/assets/index-CfZEnh1W.js,sha256=PgZT5pKu7d7XnjZeCNABDOKDpVCHa1N3DfYDbK3sMJs,6839
177
+ static/assets/index-Cgo7uPYD.js,sha256=xsO74ucCztGMXEcMX-hF0c-XTChGYPO1c-Y6_AlyDDQ,181482
178
+ static/assets/index-CiqCkKZQ.js,sha256=U0o25t5htMqmc7bbVdymZJdKfZPzm47aLmlSlPB8gTg,11021
179
+ static/assets/index-Cjgudl71.js,sha256=Pr25S3d97twTWGlQAvockMvFPjJzTkJx2gMWm2yymXQ,1810
180
+ static/assets/index-Cjjo-RlX.js,sha256=YUQig936CNn-7ffa4vmzwDw0tX-GSiN2uyK6B6EsZfY,16543
181
+ static/assets/index-CjyaPov5.js,sha256=ejF9FpEITs-y1CU23XDTbKaoyBWlA5V4nstsb528hT8,27248
182
+ static/assets/index-ClkoKhpk.css,sha256=MVUdTha9dMYvibeRI8cHsu0fsCmRzYanmfz00jWrEUY,2981
183
+ static/assets/index-CmooHr0Z.js,sha256=lrV-UZFWxjNr5uv3lXBuCyYw8rCnSel4auzAqfBIwbo,324
184
+ static/assets/index-CneRMCk5.js,sha256=fKZ330NF2VHmCMgTGwlaHrGMHnEoWZa74k8GdjN3lz4,13541
185
+ static/assets/index-CogIYhhf.js,sha256=7ksbmKlNz79MqxleIAXFUUGyAS4IDGqLdwI3BECgBAU,477
186
+ static/assets/index-CosZnE4r.js,sha256=u-IULjSExuC1RfqLoMqeFVm5e4A6FoWvpeMNaugyucw,11041
187
+ static/assets/index-CovC0IXq.js,sha256=T-FvowMjicghil2nkt4EuxE72o7SZDWFqIR5gZz4kVQ,13036
188
+ static/assets/index-Cq4haV9k.js,sha256=LY7_R4_RLXUAp2_OZfY-e5kbWONd-ks-C9SoO9WCKiY,1256
189
+ static/assets/index-Cr6hRcjd.js,sha256=UsXwL_Is8hJhiy_q--dkomZBf270dclYKVZxQNWDEjk,5383
190
+ static/assets/index-CrJv20ML.js,sha256=PVWt_zFCeDFy_jlYBqFdXvRm98eAq1i_rrHPqfsKqVw,5607
191
+ static/assets/index-Crt-l_Zs.js,sha256=iDKuPTzgqhWIj-VSQQSgUGoFuQV9KXQFkQCvvllmrU0,1431
192
+ static/assets/index-Cs6EtPKm.js,sha256=LiJYC2qB4JymVHcDhFjrL2C1RucmE4yUC7HTPkQ2aF4,3830
193
+ static/assets/index-CtB4Dzpv.js,sha256=NND2yjFNxG4RSBxd9tgchiktewG7goFpFSLMMgcOCd0,2309
194
+ static/assets/index-Cvh-Cz4q.css,sha256=k2HarffW35rnfltc-nQGLk2SHEUU4oW-XJMoaFUs5i0,2648
195
+ static/assets/index-Cw5SH0Dx.js,sha256=bIPsA9aexWgpSG2RebUEWeNXpal-QOnp0z0ics0iXz8,2309
196
+ static/assets/index-Cy8MVPI6.css,sha256=RrBke0eU7LZh3orB-QByVs0A0YVx9332gUuELexSzdU,11661
197
+ static/assets/index-CyRE58Ev.js,sha256=Mu4I719RAzQPWmNTjDvhaBtzI6wTNMCYkg2Qd4m1cUk,55129
198
+ static/assets/index-D1lCkaGH.js,sha256=2JMWdaapF-t_SVf8B9KSDYbE9pJNqbXvprF5pkoM5Y8,27248
199
+ static/assets/index-D20YXVz1.js,sha256=ZKN0Sftk2AsBxHEq4TFfBckMl20KIC74HauDYg7XFGU,3830
200
+ static/assets/index-D2tEVof8.js,sha256=leykzcrZa2OhqfotshiN9UKW2ViXVuPEbN83FPxppBo,2435
201
+ static/assets/index-D32d3cBf.js,sha256=3fJ18BBVJOtmhxzFNpPEcwFBGSOEdokr57Cu-PU7thU,26111
202
+ static/assets/index-D4Ydt1vZ.js,sha256=rPWuEeCKf7Ua7GqnDwkV_B4hj-JzN68g1-BDoHuIuXw,3830
203
+ static/assets/index-D59zhyFw.js,sha256=mPSSNPXY7JSXSZ8zep9ZHZYK3CHFn8yTd7pEL-Sj-HM,4241
204
+ static/assets/index-D6PlIxrR.js,sha256=DschvmxP60pLGspx8K9MEpVsqlcfHuoSQIBMNgqoG9M,14770
205
+ static/assets/index-D8wUvUZm.js,sha256=X2LsBR7cA9CUPBKOznlA4BC9DPV6_qZdIL3ClgAPUOQ,5383
206
+ static/assets/index-D9rdgWh9.css,sha256=NLjmMjk37qe1nzFgDCWBEmylMbpp4CnAON6ry5HwAbE,981
207
+ static/assets/index-DC75hm2i.js,sha256=0nMeonAa25_OgZJ4a01_UprowlCaTpYpoPYeytEmKqQ,39527
208
+ static/assets/index-DCQqTj-4.js,sha256=a3H57EtMEIBFrtmhz2QaGI6qxN0QZSJTWr7QXRj6CJo,183001
209
+ static/assets/index-DCc_1Ahb.css,sha256=rPBAr6lF02sWCKZvgfHICHtHI43SMKxfP54VWcH54AI,2658
210
+ static/assets/index-DE4LR7a7.js,sha256=JHq7O7F3zOII3qWKgRbdS52V_BUgDOLkksqIeiIV9Wc,39433
211
+ static/assets/index-DGKRJgOg.js,sha256=lWEPCt9TBKYNpzvODbuwiIhcsYAvFXXlI6Ba90uG2u0,1256
212
+ static/assets/index-DGaYIYZR.js,sha256=Zl353UT3Yft4aEh_RPu6y17P27BGpj5a3o8OZfuESuM,13541
213
+ static/assets/index-DGncsSU3.js,sha256=Conlbt-WuPtNqDnZGc0R0k2Agft5cCfStwY9SPrX0-s,54320
214
+ static/assets/index-DHXw0uSD.js,sha256=uv78H2W0h-iMeMM0nwIMEGXOBDXoxw4dI9pGqBJxoZo,11021
215
+ static/assets/index-DIW0peTB.css,sha256=5_rGqHn3aTB6XnDR9SVuI_UEIMa3HdIJEFSesSYDUrs,1529
216
+ static/assets/index-DJiOe7sd.js,sha256=dxleMC4enzvI0RFJxlYTvJNOkN_LduX4Uk39x7tyV4A,14667
217
+ static/assets/index-DK0Lpf9L.js,sha256=O8gXNFIFc4_WOagTIeaVbFb_96p4lxBFPzHDjKx8mcM,9362
218
+ static/assets/index-DKSccoJo.js,sha256=K1BXy84wXJ04x_vEVp9YyYa6b0HsCQsNeFQVB1A6l8U,13544
219
+ static/assets/index-DMiT7xTT.js,sha256=JhBOWWF9IWG5lxuSB5K1QHCoP8L_H3Iz33xj2AC9-LU,13378
220
+ static/assets/index-DOUCuIfH.js,sha256=dhyGjXnmSCZSLwsG6n-gl8_Rsu3JnvSCYvrjYepQCmQ,3673
221
+ static/assets/index-DObMQVjN.js,sha256=MOwjjnR1_Zo-4SvP5E2X6qe5779aPBuRb_Z91quCQ-I,5383
222
+ static/assets/index-DPa_qccV.js,sha256=7afEof0t8Uh6ZhcSZZukNmlTVqkw-CuMSsSuWE3k2mg,571
223
+ static/assets/index-DQbKxowl.js,sha256=AZ-7krJEosDvKCvnYaFliIDp5L5W3yUUhOmc6Ndwov0,13212
224
+ static/assets/index-DQcW8E9e.js,sha256=Qug1p2Y_HUtURX9DHkE20-5HGnLrc-p_m1ke8W-rBDU,4573
225
+ static/assets/index-DTOvF13c.js,sha256=2quksVQVhei-brwre_RmOrRaWPN6nDB3yMvJE2TkohE,11537
226
+ static/assets/index-DTSq-cQR.js,sha256=0V-JcHOtpyammWqU3TdIucuP-U_NIufx-mNGAy4xJW0,26219
227
+ static/assets/index-DTdro5JT.js,sha256=ASH9IaLEq6tZIlIK4tffHwv9jyesG4fzQB7i32RAbGI,10466
228
+ static/assets/index-DVY0jbkv.js,sha256=91bWUQO5c_x4wyA9ybcV31sZS7OTJqrFJtUdTGY7630,54875
229
+ static/assets/index-DVbNKibQ.js,sha256=9O2TnUaPx44-_BTPLeM3QSdVq--51Vn1Aa0eVpgyBEw,7005
230
+ static/assets/index-DVzVl8kQ.js,sha256=wOTz0fxmkaabW8BeyyEOvA4y6ZxijFnETYIQAhTX15A,68591
231
+ static/assets/index-DW2-_nOb.css,sha256=q38ZOfNFI2wcf40i6rzMYsGjtmoH5m0GwU_icBbOoMA,13815
232
+ static/assets/index-D_UwwbES.css,sha256=Yd6mnwMOpQLIMB1_LmkCBLWNhAxWk2eI6oG6P7pJTRU,1745
233
+ static/assets/index-DaFwWasN.js,sha256=Wf9COHPEGdytgf8FM0ECGyXtH9NYxGS05P-fA6f0LCU,4573
234
+ static/assets/index-Dasv714F.js,sha256=SmvSjh4fTcAW1DoZe2fMcNZTtjJdhPVozpqeZUjbQyE,26206
235
+ static/assets/index-Dbj1EvcJ.css,sha256=3Tfx4O1QpCF7HfXbWscYkft8U1me6ZaDT3aypJDfniQ,770
236
+ static/assets/index-Dc-x2BCQ.js,sha256=gH2nl6J_G-L6uaHHCx11Co--Av5dcsJiYmtQxNqNomM,16491
237
+ static/assets/index-DcKT5B0m.js,sha256=hnX1riO6f_ILBljd1LktK3b4WpUGhp9NkeQbaVkvlvA,2309
238
+ static/assets/index-DhwRIBtg.js,sha256=5q_aCauzBGA4cnc13vntr1hMczLm-X4wMd3UpMcEhlw,13182
239
+ static/assets/index-DkMMeyyi.js,sha256=bIBO7xTQ6rn96AglnsYH84RE66pR_AaTz-8531KeXL4,799
240
+ static/assets/index-DkYSbky_.css,sha256=WWsJeH16Dw_tvgw5Ks2duUNEQY9L4Rxrn9kVnoVtRBs,501
241
+ static/assets/index-Dm6aoOLr.js,sha256=D5_KaKe4FmnayRb0Di6ONbRe0lETSPBaT3u14zrUjhY,54320
242
+ static/assets/index-DnrfOTiV.js,sha256=7eP9F2cGgOdDqKbSWbIHA0S16oC9JMzVIYZBu3F0mQE,39339
243
+ static/assets/index-Do5zuoHk.js,sha256=EN3805U7N0QueNDmG2QtDpFJP-_GI-UbSWUK-IlcOUk,10618
244
+ static/assets/index-Dqi82BvV.js,sha256=_iBcs5R8ZzzPDtMr6Q6vE5UPwwYk-yT6z9umjq_ptTE,10561
245
+ static/assets/index-DqnlZjNL.css,sha256=waFzYqHdzerJUMRi-oj1ozLIMTbrptQ8E1gzupk6HJU,533
246
+ static/assets/index-Dr2huMIF.js,sha256=047naOG0RMudxxtcnhVqLMA__153JcNa0DDPmtuC6wY,11537
247
+ static/assets/index-DrDoaEUk.js,sha256=-yHL0tlrR13a1xbXcs2FT25UI2x1R2pCichOx1VUNT4,13361
248
+ static/assets/index-Ds2veE5s.js,sha256=8zeAekNIEi-lypKaS8sN2FJBSqOXWqN8wwnuIJc69pk,13361
249
+ static/assets/index-Ds9jXOBZ.js,sha256=K0SIsDcfEFl_716nHgthITKXJuhdfN-FuUcwOONllzA,50196
250
+ static/assets/index-DslQjpEH.js,sha256=QyVhC_4u6ofLqq82cOw-Pqj75YtQyDw_S4KFUiPR_io,9460
251
+ static/assets/index-DsyWoKFl.js,sha256=Y6BtspKIZ3Cy6UrwSEMEk3kF35we0-vt67pSzkhVnpU,79842
252
+ static/assets/index-DvECoxJE.js,sha256=QKeXDVPpA9UNDcJVgHyWwQhG_MWeVEGz777WUNZPSMA,16544
253
+ static/assets/index-DxM7xeZO.js,sha256=1vXLKLih17vmaEu1ZQp9RAllVqbsH7i2I_NyECG_IUc,5607
254
+ static/assets/index-DyZBZcAR.js,sha256=ehFwg7aTuAeQKFPZUEM_Bs9hQp8VxoS5yoFV2SLHgtY,6826
255
+ static/assets/index-EWyFIirj.css,sha256=uDO_F-PBM3IFi2oll5JtIVff3cy4JGwJgDMaNvW-Mss,13069
256
+ static/assets/index-GBs7rKhJ.js,sha256=wfD4ojZ0rlC38ki8ZWgTN2KZSqlqMgKTJQyfMQsJixs,16388
257
+ static/assets/index-GQUI2tPy.css,sha256=3ccO32H5IfIphOdB634a_SKsyexKlbe4I2EpXw6wZ3E,250
258
+ static/assets/index-HeUnXrHF.css,sha256=5C5zghePIdk64fPgXGmmXJke6c8jtN2G-Hnd3eAWLAs,1745
259
+ static/assets/index-IIfJ404E.js,sha256=sI645Kap91iIcQs0qDbOZn7_Y-QVlEtuhq9QKWpM_YI,3830
260
+ static/assets/index-JViVvDdX.js,sha256=_AGrenyPdO8VFjTq9uFkCmeBKtPSmw6kK2HVztUk_Dw,1256
261
+ static/assets/index-LbngjBHp.js,sha256=aWV_gO7MNt6O6JwUsuRCCWVRslBOGhDJnMdA6qgD96E,11482
262
+ static/assets/index-NVaIim0y.js,sha256=yx0Y6j0Nl0yJ26yhhLDCQFa1fm7xHYn98l8EHejkqjM,1426
263
+ static/assets/index-Nn3FU1z0.js,sha256=6AE_v6wtiROpJlsdHSeer55zZRin_UCyGHg8gWIWPno,1549
264
+ static/assets/index-QTGOdUET.js,sha256=PZerm1eaVruUCO3J7McKo-1OX4cBY4GnvtVjSSrzd9U,184146
265
+ static/assets/index-QYmHIo0z.js,sha256=da-JqTXWdaGsmKTgtdr9g1y_bnkVpy4Mgc_4m_EMDbY,3787
266
+ static/assets/index-SVeInSJs.js,sha256=6Mx6Y9G4p7b32JB1e63cBDkvUze8TC00MU7OeNSsmJE,4573
267
+ static/assets/index-SjtbrUZB.css,sha256=dPsE-i5rQzabdtQAygVR0P4XPydwEBDBr4_HPuM0CMk,8611
268
+ static/assets/index-Vtnl3KjI.js,sha256=8pmE9NIb6iNYx2E-YvGJPILrYNyDhp_hltvBTAE-hNg,54875
269
+ static/assets/index-VxNaJkwa.js,sha256=q42K2Q_7ZA2oAz2qmssHoXMr4O-RzJvvwaV3jYWhfOo,10414
270
+ static/assets/index-ZZaZ2JxW.js,sha256=s-uGX31C77WJ0jKtdnNgiAxNI1FZGnJha6a4jRBoRpI,5607
271
+ static/assets/index-bl5aaT0R.css,sha256=Zb-cyiALWEunP_1b5Nt-ypvMqUEaCaVlG1FLY3Q4hAM,11661
272
+ static/assets/index-cT7YK32T.js,sha256=aTo9aMZ0UdKAVaVOC4o3dT7U94dAd7cOcsyuyYbpnNg,5609
273
+ static/assets/index-cwnxsbxz.js,sha256=n5F-WWBpoL9jrOACOVfsqF1iC1xuduRjREWoE-IOqvc,546
274
+ static/assets/index-e2duK0dh.css,sha256=78BVHuy9XssfPUa6dnuz_rE6GRNcAeq5lRiScbj9X6E,1862
275
+ static/assets/index-exsYV2vf.js,sha256=PquZMMf3FK7DlfP373y0RoBVd_iI18ksGWVte6oXhhg,11537
276
+ static/assets/index-eyCaBBCe.js,sha256=DqV-mSG50cX1sId-GFR212o78OdwajytBmKmR3-95iU,10618
277
+ static/assets/index-iwsxNFDe.js,sha256=Ouht912v1FSI9U9fOsCZLjQveFhk2XHO_PALCUoSZ5Y,1521
278
+ static/assets/index-j6Km188f.js,sha256=Y7erTQNkzJdRVaqcl57gnO2fn8ekJeKj6QA1CUotuOM,39352
279
+ static/assets/index-lwHKcTVh.js,sha256=smU04tXHARGlRknUGXT1WCu-y1uOerLaKtFjcUlwoeg,10561
280
+ static/assets/index-m31wTW8O.js,sha256=esb9C6J9puk_fcdjjm4s4_ZXF2INc5PeLAvSdOigGgo,12155
281
+ static/assets/index-mMUEF1la.js,sha256=K9BLUYDw654Hpzbpu76TJK78JqJtNwihXY27PxZPFVE,1549
282
+ static/assets/index-nmC8Ba-k.js,sha256=2tZ8SCgma8E5x04uCHuvWwr7phvQNnmwNrOIG1krx0o,1774
283
+ static/assets/index-q31mdcT_.js,sha256=ws5nXUNlIYSNHO4K5_H5-fWTTPwPRqR2mgoR2aXsOyk,1431
284
+ static/assets/index-rop_JNVb.css,sha256=Zm07P9Rk4yUclOYlxo5WZkmJfAJvsL8EyJeEoUNOvzU,981
285
+ static/assets/index-sGYA5got.js,sha256=WVPmPifBFfm4fU5uXzmQLN9egWL5z9eKDNYuhbdsPtw,10852
286
+ static/assets/index-tUMg9YlW.js,sha256=BaBiwdu58DBAXZxjyEnB51NC9XxJFs6C4crvlslEKaI,2309
287
+ static/assets/index-v5zQoP3D.js,sha256=ySI44Bgsus9wQFl1W4y7r_DpKjguevH6PWsXHwtT80w,2435
288
+ static/assets/index-xV-tYcCz.css,sha256=rumnnxnkpfCh0G47dHwMqmzlQHCMfWVhlNDQJUhpYSg,13113
289
+ static/assets/index-yR7amFQt.js,sha256=W_JQX7RyFGTiRGi8pQkBFdwfyZeizhrgqt_MI0aoIs4,1255
290
+ static/assets/index-yc0sWbuL.js,sha256=kFLcEDiwk7Xl4gICq_dRiWpaHVX07v3KAXyRQZlbt_k,8820
291
+ static/assets/index-zg77iWzZ.js,sha256=-pFdtsrzBNdGm_Ly7ws-nqFZ5MQ3dUaKoOxtYJ6xmvw,773
292
+ static/assets/materialdesignicons-webfont-B7mPwVP_.ttf,sha256=YeirpaTpgf4iz3yOi82-oAR251xiw38Bv37jM2HWhCg,1307660
293
+ static/assets/materialdesignicons-webfont-CSr8KVlo.eot,sha256=CxgxBNL8XyYZbnc8d72vLgVQn9QlnS0V7O3Kebh-hPk,1307880
294
+ static/assets/materialdesignicons-webfont-Dp5v-WZN.woff2,sha256=Zi_vqPL4qVwYWI0hd0eJwQfGTnccvmWmmvRikcQxGvw,403216
295
+ static/assets/materialdesignicons-webfont-PXm3-2wK.woff,sha256=pZKKDVwvYk5G-Y2bFcL2AEU3f3xZTdeKF1kTLqO0Y-s,587984
296
+ static/assets/preload-helper-CLcXU_4U.js,sha256=M5n46wg71Mi9Dx7n4bTkZC8Rn37fx-XKCaf_f6SHOnA,985
297
+ static/assets/spessasynth-CiCJFoS-.js,sha256=CccY_QSwRGfdCv9o23xV8vln-0SPpA9SsJllQWYR9Kw,409390
298
+ static/assets/spessasynth_processor.min-Dc6jvYKP.js,sha256=vhKULfMVMMhLTimxtNSSOndXykG1eJnOPw7oyLFCXvw,378476
299
+ static/assets/vendor-2-PUxJ-A.js,sha256=c4HrLOT3sIn9RervRZfJUsM7TKJxyhu7k7kGcig3bYQ,843873
300
+ static/assets/vendor-C-9xz5oV.js,sha256=-zqZQh0P5QF7UwuHeRDRMFTFmeSE1ymq3Ytyobt_yEQ,844856
301
+ static/assets/vendor-CgiAwjOU.js,sha256=OnVBOKOyiU8Ok0Gz95LGCIqTVXkXSjqlQYzcKqF4yDM,845876
302
+ static/assets/vendor-Ddpmd7Ot.css,sha256=eJjjoWQ-S-I13VqiZFJJjnYZ6dh2NdRA9-M7rnK8AfA,324197
303
+ static/assets/vendor-OGOEyasN.js,sha256=_xPY0PkYpYBn89Gj05ZB9S9DMUYu4hNs8h-yD1i6IRI,845876
304
+ static/assets/vendor-akOE2j9A.js,sha256=MdCZRQIoyiEGBiSwWlF2BKh79QN_GYMbKYkx77FGi5o,841571
305
+ static/assets/vuetify-4fGNviF3.js,sha256=bGJwA4GPlIyW_KQisgvpW0Vu0GQ03VSD2KGzTNFKJjY,283405
306
+ static/assets/vuetify-4pen7Kuc.js,sha256=ch9npAy77Y5Izk1gLzSkoSzSpVYKzyYE5otwFDv5ApE,283405
307
+ static/assets/vuetify-CXW7nbqp.js,sha256=EcTpVwB2aJfFzjF-2WMgAoLMWcR6wRVp-1yApUCC22M,250174
308
+ static/assets/vuetify-CvNLpuOM.css,sha256=1fJ6y-Buek_xTbtRkYje6PNpSr2jK3BwHipssQhRLoA,412580
309
+ static/assets/vuetify-CwBrRr3R.js,sha256=sxAsxPcc8thXoat6uNjU2lwnHDKU30dWbFKLKixpaF8,250174
310
+ static/assets/vuetify-CwWhwiUe.css,sha256=MGQJzFBSEn8gvMXF7uP_Vzoz8QP4s7JLtP-LvEnWcLw,405409
311
+ static/assets/vuetify-EHH5paiX.js,sha256=RL4akXjIC2LlcGQvf2sOAEMP8qcfcBdpG0OkU_TASAk,301501
312
+ static/assets/vuetify-_KVfjYUB.css,sha256=XUleEDhpjRN1-DN89GvGbpfFfu0iK_L85rMKe2saZVs,381625
313
+ static/assets/vuetify-_lamJc3G.js,sha256=U37yYRUuGKqHb9bZeg52zx-xazPUchSahrcnP40CTY8,283414
314
+ fileviewer-2.0.0.dist-info/METADATA,sha256=-U8djcrwbLJYImnHLh2elfuFpaUEo5_lfvy2WzbUZXo,603
315
+ fileviewer-2.0.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
316
+ fileviewer-2.0.0.dist-info/entry_points.txt,sha256=_WT3pAa-NKJTRGBb58Ua6JP2ebPGXg50ucFt3my1Vlw,40
317
+ fileviewer-2.0.0.dist-info/top_level.txt,sha256=VFQev_IlAWH8MzBwjdfWssxB-oRTDaHIu2ZrDt59W5U,40
318
+ fileviewer-2.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ fileviewer = cli:main