hiddifypanel 3.0.0.dev64__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev65__cp310-cp310-manylinux2014_x86_64.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 (70) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/__init__.py +7 -4
  17. hiddifypanel/panel/admin/Actions.py +170 -3
  18. hiddifypanel/panel/admin/Backup.py +80 -4
  19. hiddifypanel/panel/admin/ChildAdmin.py +122 -3
  20. hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
  21. hiddifypanel/panel/admin/Dashboard.py +70 -4
  22. hiddifypanel/panel/admin/DomainAdmin.py +195 -4
  23. hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
  24. hiddifypanel/panel/admin/QuickSetup.py +127 -4
  25. hiddifypanel/panel/admin/SettingAdmin.py +224 -3
  26. hiddifypanel/panel/admin/Terminal.py +51 -4
  27. hiddifypanel/panel/admin/UserAdmin.py +277 -4
  28. hiddifypanel/panel/admin/__init__.py +82 -4
  29. hiddifypanel/panel/admin/adminlte.py +13 -4
  30. hiddifypanel/panel/admin/commercial_info.py +23 -3
  31. hiddifypanel/panel/admin/websocket.py +9 -3
  32. hiddifypanel/panel/admin_2.py +33 -3
  33. hiddifypanel/panel/asset.py +17 -3
  34. hiddifypanel/panel/cf_api.py +35 -4
  35. hiddifypanel/panel/clean_ip.py +125 -3
  36. hiddifypanel/panel/cli.py +172 -3
  37. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  38. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  39. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  40. hiddifypanel/panel/commercial/__init__.py +50 -4
  41. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  42. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  43. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  44. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  45. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  46. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  47. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  48. hiddifypanel/panel/common.py +98 -3
  49. hiddifypanel/panel/custom_widgets.py +71 -4
  50. hiddifypanel/panel/database.py +18 -3
  51. hiddifypanel/panel/hiddify.py +655 -4
  52. hiddifypanel/panel/hiddify_api.py +70 -3
  53. hiddifypanel/panel/init_db.py +393 -3
  54. hiddifypanel/panel/usage.py +85 -3
  55. hiddifypanel/panel/user/__init__.py +25 -4
  56. hiddifypanel/panel/user/link_maker.py +416 -3
  57. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  58. hiddifypanel/panel/user/user.py +233 -3
  59. hiddifypanel/static/css/custom.css +6 -0
  60. hiddifypanel/templates/500.html +1 -1
  61. hiddifypanel/xray_api.py +109 -3
  62. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  63. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +67 -69
  64. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  65. hiddifypanel-3.0.0.dev64.dist-info/top_level.txt +0 -2
  66. pyarmor_runtime_000000/__init__.py +0 -4
  67. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  68. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  69. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  70. {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,73 @@
1
- # 2023-04-08T16:23:31.943487
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00p\x10\x00\x00\x12\t\x04\x00\xc2Sz36\x11`y\xb5\x95\xa01T\xab\x82\xee\x00\x00\x00\x00\x00\x00\x00\x00V\x8c\xea\xce\xd6\xc4\xef\xaa\xb7n\x15T\x93\xc9\xac\xbd:\x03\x12\x91o8\x8c\xefo\n\x18=\x0c\x98mv\xda\xc7\x1e\xcf\x89\xa0\xb9\xcf\xcb\xf4m\xf7v\x12\xc0[\xca\xc48\xba.\x17Z!\xecE.-\x14\xa1$`I#*u\xfa\xad\xfd\x82\xbd\xa3\x96\x01\x14\xe2\xfa\xb1\xfe\xdc\xbax,4]\xf9Z\x8a56\x94p\x1dGh>\x83\xd4R\x01h\xfcjF2=\x0b\xf3%\xd5\xe0?\x91Y]p\rOw%\x14\xf7j\xd0\x93\x8b\xb5\x81\x0c\xf8F\x1a\x19\x08.L\xfa\x8f\xfb\x17\xdf~{\x86\x06<\x19ES\x99\xfe\xe2\xdd}L\xcd\xafg\xabV\xe7\xbf1F\xc4\x8f{\xcb\xea\xb1\xce\xca*&u\x1c\xd6\x82H\x94jU>\xecp\xd4=\xb60\xe3\xd0\x8d\x9f\rfy%7\xa2#\xbb\xfd\x8e\xf3\xb3!m\xf2Y\x13\xf0\xc1\x87K\xe6\xf7R\xa5\xf0\x8bi5:G\xf2\xaf\xed4\xbd\xa7\xc2\x81\x80\x00\x8d\x08`\xc8\x0b\x90\xa9\x0e\x86\xa2\xb0\x12T\xd6\x90\x942\xa3q%LX \xd3\x97\x7f)\xb3\xb3\x01\x1e\x82\xef\xe6]\r}\x86\x84\xc8\xf2\x0f\xe5\x07\x12)\x98\xefw\xf8\x06\xfb\xc4\xefB8\xd8F\xe6F\xfb\xdb\xbf\xcbv\xbczW\xdf \x80\t\xcc}\xc3V=\xbe\xe0i\xb7v\xbb\x9e\xc3\xa7\xc2\xf8I8$\xbbs\x1dV\x05r\xf6\xff\x113\x89\x06\x03"\xd8V\xff^:\xe8\xeel\x8b\xaa\xab%O\xa5\xea7O\x9b\xa9\xa3\x1a\x04$\xd0\xe5\xd7\x0c\xc7\xb3\xee&\x19\xf0\xbcoD\xa1\xb9\xcd\x96jw_\x9c\xaa\xedmd\xb5\xe7ZZ\x13\x8b\xb3m9\xf2m\x9dN\r"\xfc\x1b\xd0\xb4\x17\xba\t\xe7\x08\x8f\xd4\xb7\xd8D-\x925\x82&\xb92_\x99\x98K\xda\x88A%P]\xcc\xc9\x95\xcb\xfa\xffW\xb3&k=\xa0\xa8\xe2\xc6\x19\xac\x83\xa7\x1e4\xd8L\xef\x07\xaamW\xc9c\xe5\xaf\x02=\x87D\xd5A+w\xafuj\xe8\xc5\xd0\x13\x1a\x81\x96;\xa2\xc8|\xb6\x98\xa2~\x0e[\',\x8bT\xc6\xa5\xed\x0e\xa5\xa1\xd7\xe2\xc4Z\xa3\x14\xbc\x97\n\xa3\xa1XA7\xc1\xe1\xecgek*\x10\xe4\x82\x94\x05\xbfb\xfb\x97\xf3W\x98\x9c\xe9$\xf0\x02\xa5\xcf\x9a,g\x81L\xff\xabfP\x9a\x11&j\x15\xce#\xee\x8b\x83\xd0\x1a\xd0\x10X\x1f\xbe\x84b\xe7\x1cY7\xfb\x0f\xb14!V\xd4-)\x9e\x8a\xc4\xb8B\xa1oS\xa2\xbb}\xb1\xf5{\xc9\xf1w\xf8\xe9\x81\xf1\xa8\xe75\xa5\x19\x06\xfc. TLg{\x8bZ\xf4\xa2\xc3c\'\x83\x87r\xb0\xef\xbc\xd0[s+\x83\xdd+\xf8\x05\x80P\xc44\xce\xe4;\x10\xd5\xe6h\xef\x99\x86PRm\x12\xa56\xac-\x86\x8e\x06\xb0\x99\x15\x85s\x16\xe9\x18\x0e8\x12\x8fz\x8c\xe5\xbaP\xe90\x99\x0f\xdb5\x04\xf6MZ\x12G\xe1\x84\x9aY\xae-&I9zw2\xfb\x17C`\xfcG!\x00\xb5\xb1\x0b\xb8\xce\xed\x03\x93B%d\x8f\xd9G4\x1e\xc5\xd5\xebB\x95\xffg\xdc?\x1c\xf8X\xa5\xeb\x99\xa6e\xf7\xa9F3\x84\xd2o\x86\x92H\x10\x9e\xf9l\xf4\x08\xd0\xe4m\xa8.\xe53\x93\xc9?\x8d\x0fp\xfc\x17\x84{j\x82\'a?\xaa\x0f(\nMNSH\xbe\x02\xe8(\xad\x87\xe8\xea\x04\xe9\xe5\x87W\x98u^\x00"\xd4v[\xd2\xe7\xfb"\xa5\x08\xe1#\xdf\\\xd6\x03\xcc\xb3\x7f\n\x84Kb\x8eI\xe4\xb2\xed\x9bl\xcb&D\xf2\xdb\xdc\xc2\xbc\xc2\x84{\xff\x82\n.\xcbY\x93d\x069\xf2j\x85g\x15\xccg\x94\xad6\xd4\xb3=u\xa6O\xfa\xd9\x8a\xec5\x9bkhFm\xba\xa8\xa8@\xb8\xedH;q1\x19\x85\x9b4\xe8\xde\xd5y{p\x19\xffQ\xd2n\xa0(\xed\xb3\x0f<K\x08\x0c\x94\x82\x1c\xb2LM\xd7\xeb\x02\x8e\xd9}M\xbdp\x9f\xb5MV]2\xcb\x11\xc2\xb6\xc6\xc38\x82\xd4\x05\xb7\x08[\x00\x85S\xa9bQ\xb8\xda\x90\xaf\xaaT\xcca6\x16\xe6J\xa2\x12\xc1\x90i\\\xbd]\xd7\x97\xe7\xfd\xe5\xa3\x92\xd0\xd9\xc0\xc4/\x16\x11\xab+\xbe\xb9\xcem\x01p\xbc\xa5}A\xdb\x95L\xa9\x14\x89\x847B\xf3\xeb\x158\xc4\xe1\xc3\xf8\r&\xed]FGUwu|\x90\x01\x8f\x8b\x05\x1dYO6\xee\xddo*\xe5\xc7>\x11\xa7J]\xcf\nQ\x9a\x98\xd95TS\xf2d`\x8f,s$U\xfc\xb6\x8aA[\xb9\x1b\x17\xa8\xa4\xf2\xb6\x15KL\xf9\xef\xb8\xa9Cg\x97\x04\xf6\xc3\xb1\xa4f\x18!\xe7\x17\x98\xb8\xd5\xf3O\xe5[\xe8\r\x1f\xe6\xfcX@Z\x8a\xbb\xef\xa4_^=\x8fI\x1d7\x8e\xfe\x18\xe2\xd2\xec\x9f\xa9X\xa1g$\x8b\x16Z\xa7z\xae\xb3\xe3Dx/a\x08\xd0+g\xcc\xf6]\x8e@\xfc\xbfq\xc6\x9dmi-\xf9T\xf2\x1e\x0f`X\x02\x11l\xd1)\x8f\xa6\xbe\x19\xa5\xeb\x91\x8e\x8a\xe9\xa7Q\x919[\xe0C\xae\xde\x82o\xdeE\x8a\x15P\x9b\xbf\xed;\xae\x04\xb3\xbf\xd8+d8\xdbz\xc4[\xa6\x12\x19\xeb\n\xcd\x04\xc6&\x86s<\xfa\x10\xbd\xad\x8b\x17\xad\xf0?\xf7\xb4\r\xa9:\xe1\xd5-\x9bV\x968R\xb2\xca\xdeX9\'D\xfd9\xa2\x10\x97\x9c\xdd\x98\x04\xf6\xc7\xb2\xbf\xb7:\n\xd8\xf0\x9a\xb8]%l\x8c\x83b\x86/\xba\x8a,\xb2S\xd8\xf9\x17\xad\xd4\'a\xec\x9d\xb9\x8a\'\xa5\x05:U\xfa\x92\xa79e\x8a\xae\xdf\x8dp\x05\x88x\xe0\xdb\xcd\xf3\x0f\x03\xf0s\x9d\x92|\xed\x86$\xa39k\xb8&\x1cu\xf2\xbd\xfc\xaeXL\xac)\x1b*\n\xac/\\6\xfa\x10\x13I\x8d\x7f\x1aP35\x18\x00V6\xb4\x82\x9d=\x1a\x1f#X\xd7\x03\xb2\x0f u\xfai\xbd\xfc^)\x7f\x1d\xda\xafo\x02&C-4\xea\x19\x0b)\x80j\xf1\xbeV\x00\x9c\x07\xe9\xee\xe1\xf6$\xdb\xc7\xca\xc7\x94J\xca\xbf\x14\x9d\x1cj_A\xa4\x8fHB\xa8\'\xbe\xfc\x01{k\xa7\x8b73Q<\xd1\xb2\xc6\x9b\xf4\xc7\xebeDV\x17~\xb23\xd2dq\x9a\x81p`8+Wi\xef\xb6\xed~\x80\x84\x80\xbd\xe5\x05\x0f\x9c^rA\x0f\xc2^\x15\xd6`\xd3\\zO\xc4\xde\xfah\x86\xb0\x1a\tP\x1bx\xeb\xdc-\xb9i\x01S\x89\xd1\xd9]\x886\xf8\x9a\x98\xf6\xb7h7R\x93\x95O\xa3\x82\xd6\xe9\x7fA\x9c\x0819\xdeS!\xdfL\xd5\xb5\xcb\xb38\xe16\xc32\xe0\xf6\xd3\x0e\x19\x9e\x81\x12\xaeK\xd3<\xa4Wd\x13N\xd1F\xf2\xf6\x8b\x84\x00\x18~\x16\xd7\x00\x8c-\xaa\xbb\xce\x83{\x98\xcd\x86\x92\xcb\xc5n\xd4\x0f\xa3Fc\xfb\xc2.\x15N/\r\x03\xe1WZ\xfeA\xcd\xa2i@\xaa\xe5,]\x1fL\x86^\x1bu\x8f.\xfbA\xa6O,7\xde[h:x\xc1Qg\xe3>-\x9e.G\x1c\xe4\xfd\xb9\xc9\xd8l\xf7dW\x8c\xeca4\xcc0\xc9\xa4\xc7\xb3q]\xe3FG\xcf\xf4F\xab1\x16\xa3\x896\x9e\x08\xa7\xd15\x97W\xd1\xe6\x91d\x86\x97\x8b/\xf9\xd4\x86\xdc\xc1n\'\xf6v\xd7\x9aza\x8f\xbb\x82\xcb\xd9\x88\xcd\xa7\xc7T\x15\x97\xefeWp\xa3\xe4\x80\xf6\xf5A\x01o\xd9\xef\xe1\x0f\xa3N\x05\x9fh\x9b\xc1d\xf2il\xd1\xa2u\x90\x12\x8f\xb1\xc1\x99\xd4\x8e\x906s\xce"\x0b\xa8\x1b"\xe7\x1b\x08C9\xea\xec\x04\xf3R*n\x83\xf0\x95\xb0\x8c\x8cN\xcbgY\xda\xa0\x97\x9b\x98\x1d\xcc\xe7n\x16d\x96\x11\xa7\xa4\x8d\x17\x8e\x13\xc2\xa2&\xa9\x97[e\xa2/\xb5\xd6\xf0\xb8\xac\xe8Tb\x9b\xbc\xa6.\xac\xd0\xfd[\x04\xcd\xd5e\xcd\x8b\xab\x91E4*\xcb\x04\x8e;\xc3fW\xf9\xce\x8f\r\x8b,\xee\xcf\x8a}\x1e[\x00\x15\xc0\xe1\xeb\r\xef\xa7p\x9e\nZ\xc6\x92\xbe\xdaeNK_\xed\x91\x87\xa2\xa0[\xd12\xe7$p\xfe\xb4GDhd\xde\nd\xe1\xf9\xddb\x133\xf5\xca\xb6\x9d\x0c\xa7wc;\x1eF\xda\xd4K#\xdc\x958\xe7\x073\r\xf7:\x02\x8b\x88\xae\x9c\xdeLE?\xe7\x83\xb9\xcca\xed?\x877vh\x968m\n\xf9s\xe5\x95}y\'m\xf7\xd4\xa4`\xea\xaf\x85\xa2\xf0s\xa3\xd9>+\xf9\xc4\xfd\x05\xf8e\x10<\xa3J\xaf\xb3ab\x8cF\xccf\xb9\x93\xf0\xa3\xe3Ju\x81\x12\\\xaa\xa9\x93q8t\xcc\xa7\x13\xf4\xeb>n\x01L\x82\xcfGg\xdc\xdc\x0cO\x9b\x9ea\xafx\xe3\xe2\xd3\xbe6\xeb\xea\xfa\xa4\xf5\x0e\xa8w\x0b\x18\x89\x84\xf6\xaa<J\xcf\x7f\xff\xe5\xdc^]\x1c5Q\x98vx\x92\xa9`q\xbc\xe4|\xd1\x05\xbd\x9aY7\xed^\xd6\xb4{*uY\xd7\xfcrvo\x85\xcf(W\x94\xa8\xee\x02~\x82mz\xcbt\x93\x86 \x91Z\xbd\xb0T\xce\xc3{\xab\x93\x04K;g5w\xdf\xb0\x19\xc3\x05\xf5\xe3\x93\xe0\xff\x83\xc7\x9fE\x95L\xfbl\xe0\x92\xd9c\xe2\xf4\xba\x02\x00u\xd4y\xba\xa7DoM\xbc%^\xbb\xff\xf2\x9d\xe3d\xb6\xb0\xdb\x08\xcc\xbcL\xf0\x8e.\x80I\x19A\x03\xab|]\x17Z~v\xf5\xf3\x04\xe6\xa7\xee\xfc\xbcB\xcd\xdd\xd2\xa2\xff)P\x16\xa9\xd7\t\xc7HjK\x08\xaf\x00\xc2\x0b\xd9\x86\xac%\xbc\xd7\xcd\xc2\x12}@\xcf\xb5\xb2~\x0bu\xc6k&d\x84H<\xeb\x85\xfd\x8aM%\x1d\xd3}]\x89N\xa6\xee\xd3^\x16P\x07Z:F\xf6LB\xd8t\x02\xcb&R\t\xc3(6\xd4\xde\x90Vu\x90\xd40\x19\xb2\xd2\xa3=\xde+{\xfb\x18\x85$\x18\x1ae\xea\xec\xf6\\-Xu\xa3\x97\xae\x00\x06\xfdoL\x8e<\xd4#\xb7\xb0,\x8b\xbf\xaa y$\xd0l53\x8c\x1f\x93\x05*O\xb9g|[e\xab\x83C\x0f\xd6\x15\xea\xa7^\xf9\n)\x8bWK\x11D<\x1a\xbe\x1b]\xe8\xac\xf3\xbf\xd0O\xd8\xcf}\x04%1\x044\x0e|\xdb\\\xfa\x88\x979\xc3\x8bT\x94\xf0=CI\x1d\xf1$J\xbd\xdf\x81\xd5\x9e\x9eAE\xb2W\x8e\xcb\xe1\x9cm\x18\xa9+\xfb\xe9\xdd\x7f\xe60r\xbc\xa3/#\xf8\x92\xbf_\xc9\xa9\xc8\xd0\xaf`]\xa8.\xb9\xbd\xa6\x99\xa9\x16\xc6,\xaaR\x80\ts\x87\xb6)B\xf3o \xb0\x80\x14ot\x07\xde#&o\xcav\x0b\xd4:Xb\xea\xd5\xbb ,\x89\x841\xe2\x94\xe1ZU4\xd4&\xff!b\xa5\xb8\xee\x7fU\xea\x10\x11\x92\xfd\xf8|ub\xe4\xdd\xad"Y\xacE\x90EV\x1ej\x8d\xb7/\x8cR\x065\x93\x17\xa8\x1a\x9d\x0e\xbf\xa1Q8\x1dH\xb2\xca\xd1\xa5DS)\xdbzS\x9e\xad\x9b\xaek\xf0NJ@\x15]\x9e[8\x91|\xeb\x90-\x9f~\x9c\x13>p=\x07\x8c\x9b~\xec\xb5\x1fzf^\xba(\'\x01_j\x89\xff\xdb\xb7`\x8b\x1dW45d\xb7\xf3\x0e\x00A\x0f\x85\xdf\xe6\x8a~\xb4z\x8ce\xf9\xf0\xca\xcc\xb3\x1e(\xb79\x15x\xfb\xb7\xe8}\xd7\x8e\xe0\xfd\xb7\xa2\xa7\xba\xf0\x8d\xd2\x9a\x17\xbd\x91I\xb9\t\xdd\xdf\x7f\x95>\xcek\x99\'\xea\xac\x02\xce6\xdcU\x9a\xe1\xef\x1d\x87\xc9\x9f\xb1MmP\x1a>\x9c\n\x16\xef\x01\xc4\xd1"c\xba~uR\x94\xd9\xe7\xd9\xd8G\xf3\x12\xe0vVK\x96\x89\x9bp\xa7\x14Kk\xa7\xf3\xcb\x06\xd5E\x1e\x10DG\x8c\x1c\xb2\x8e\x80~\xbc\x03\xdc\x92\xc5\xa5\xd4\xb0l\x1anh\n\x00\xb4!\x7f[m$\xf0c\xb5\x98"x\xdd\x9d;p\x84\xda+Z\xbf\xe5\xe4\xde7\xfe3\x98\xbdqp\xe1\x05\x86\xec\xf8\xf7\xf5\xd8O\'\x10)\x7f\x000\x16\xa8~\xe3ws\x9e\xe6g\x17\x12aee\x13\xef\x91\xd0\xb2\x1f\xfa\x94ugt\xef\x98#;l{\x04\xe6\xfdU-\x90\x1aA\x13\xb3\x89\x82\xcd\x06\x98\xa3\x94O\xde\xe3\xf5\xce\xbcSt\xa1u\xbe\xca\xd1\r\xe9\xd5\xc4]\xe3lW\x14\xb2\xb1U\xb5\x96\xa5k\xdb\x8b\xc5\xf1\xa4d\xbb$\xfa\xec\xac\xbb\x99\x18\x83\xf0\xba\xb9\x19$\x90\xd2n\x1c\xf2\xea\x8eQ\xf8\x96\x10C\xb5\xf4\x9b\xa4\\\xe0\xa3\x14n\x0b\x8b\xc3t\x84\x8c\xb2\\Iwhhp\x19_\x05\xb0\xe1\x151\x9d\xe9~e1\x8e\xfe&\x00p\x17\xbd(F\xb9\x0c\xcfO&\xa1\x96\xd5\x93\x13\xed\xec\xd0\x02\xb0\xd6a\xe8r\x8b\'4Z\xb83\xd9\x0f\xaeo\xf9\xad\xe2m\xa7\x13\xa8\xf4\xd9\xfa9~\xaf\xc2\xfb\xe8`\x1a\xadT\x9aQ\xdbQ\xba{\xe5T\x91\xcf\xfe\xa81\xff\xfc\x82k\xb9B|f\xe61\xb8\x1e\x9e\xdaO\xa3\xfe\xfc.\r\x170^\x02|\x80\x8c\x8f\xeb\xb5\xbf\xe1\x18\xe9\xf2\x18\xb6\xdcX\xe1 9\x085n\x17\x9a\xb7\xbe\x88#\xc6\xfed@6W5\x84;8\'\xe3\xdf%\x9eO\x19!\xff\xb9\xf4\xbbD;\x1f\x10\xefp\x03\x1e\xba\xc5\x1e\xfcKk\xday\x93\x98S\x92\x88\xea\x83\x9er$\xf6\x1b\xada\xf0\xf6\xbe\x93\xcff\x96r\xf2\xe6\xc1\xf0\x96\x0f\x04\x85\xcf`\xfa\xfb\xfe\xdd\x1dT\x7f\xc2\xca\xee\xeb\xc79\xf9$&\xff\xbe#\x9c\x105T4\x8b\xfe\xb6\xcf\xa6\x82\x10\x9cz\x8e(\xd2\x93a_\x81O\x0c\xa9\xae\xe4\xdb:\xb5\x83IJ\xad+\xadK\x97:\xfd\xe4,\x1a\xec\x05\xda\xeb\x9b&}\x1c\xcc\xe8EZ\xb0\xa6o\xeblgo?\xf7\n\x7f$@r\xcf\xa3\xe9h\xee\x9f2|\x86\xfe?\x98~x\xd2\xfc?U\x02\xdd\xd5\xa1sx\xcb\x1d\xf0\xba\xc5\xac\x16\x03<o\xd1\x01\xf6\rz\x8d\xee\x86\x7f\xee\xc9\xcc\xe3B\xafI\x16o~\x1e\xa1\xe5177 \x18\xda%\xd5\x18\xb0\xb1\x95\x110\xf2\x91s\xf6\x18Ld\x8f\xc8\xb7\xcd\xe4\xd1\x0c\x7f"\xc7r\x8e2Z{\xcc\x89\xf2\x14\x84\x1cc\xb7N\'W\x14\\fL(\x12\xa7\xa98\xf8\xa8\xe0b\x9dZ\xa6\xe8\xdeY\xe7\xb4\xadc/32\x80jZ\x19mGSOd/6N\xee\x99\x03\xd4sf\x870\xff\x99\xcdu\x95\x02\xbc\x07\xbe\xf6\xb5\x01\x96\xe3\xc6@H\xe7\xdfB]\xf0\x0f\xbf\xcb%\xa0d,\xe9\xe2*\xbf\xc9\x03\xacW/I\x0f\nW\x9cg\x1c\xe7H\x88\xb3`#\xa8\x0e\xefi\x1a\xf0\xd4\x05&ye\x81\xcb?\xea\xc3\xd5\xf7\x0b\xe6\xa9\xf0\x83j\x8d=YVO\xdfb\xb8s\xa3\xd43!YFd\x1eG\xdc:.\xa0>\x07\x10\xee\x08\xd6\xcec\xabE\x95\xd1\x9b\x80\xaf\xb0\x11\xb12?\xcf=\x02k\x145\xf6\'t/\xb3,4\x99\x88;\xe8J\x16\xdc\x90q\xe0\x86a7\xaeb\x14I\xad\xecO7$q\xa2\xc5\x8a\x0cYc\xd5\x18\x90\xc1\xa4\x0b\xb2\xaf\xd3\x10\xc0\xd4\xab\x97\xc6\x12CW\x8a\xc6=\x12\xc6T\xb8\x99\xdb\xa1\xd8\xcc\x16l\x04\xe4B\x12y\xf2\xc6T\xea\xf9V\xe1q\xc2\xb8^\xa2\x131e\x05\xc3\xf1X2Z\xcf\xa4D\x07\xb1E\x190\x82\xb2} \x9cMW\x13\x89G\xfd\xd3\xb6\x80b\'`\x18\xa2))\xe5w\xf4\xaa<\xa4\xff\xe8DD \xbd0\xd7\x97/\xcc\xe1S\xfe\xea\xb1\x00\xe4\xa8\xd9\x8b\xe0\x91\r\xf1\x10\x9bI\t\x93\x034S\x8br\xa6\x1a\x0cC\x84P|\xab\xf5\xae\xae\xb7\x93\x91gL\x97\xfdYS\x0f&\xe1\xee\xeaHZ\xfa\x02\xf6XnG\xdd\xd7\xcc\x86\xc9\x9c\xf4u\xc2J\xbf\xefP\'\x17\xfbj\xc8\x04\x0c\xb3\xc8\x17\xcf\xdb\xd9hJ\xdf\x95=zD\x9cz\xa7\xde\xae\x87v\x10\x8f\xd3%7\xc5k@\x00c\xc71\xde\xf1\x13v\rn\x14\xbb\xf0"\xe2\xc4\x16\xcaw\xc4R\xa9Y+\xdf\xae\xef\xe49Bp\x89\xffN5]\xb9A/\xb9\x17\xde\xf0,\xbc\x9eT\xe3T\xa0\xeb\xf6\x87\xca\x98{R\xd4u,\x0f)\xe2\xe6\n\x01\x7f\xf5\x1cp\xb3\x06 \xfcK(\xadt\x08\x9bt\xff\x0e\xbcY\xf5\x84\x9f\xa7\xd2\xcc\x01G\x95\xb5\xc3\xe8\x01\xe4\xca\xdch\xd2m\xa1\xbf\xe05\x95\x8a\xe8\x8c\xb8\xe5\x1b\x16%Fr\x94\xa8\x92\xc3c\x0b-\xb7\x8c\x8aS\xa2\xa1\x0c\xad\x1a<;s\x97xE\x15\x7f\xe5\xa2]\x9bL\x9c\x81?\xa9\xe9:)\xe6D\xcf\x1e\x03P\x12\xef\x03\x19\x9cY\xec!\xf9+\x93\x7f\xb0\x9d~\xea,\x10\'X\xf22\x00\xf7\x18\xfc\x16\x1f\x1e8n^AG\xd1\xba\x1fSp\x10=\x98\xa2\xbe\x9b!xVD\xa3%y\x1c\x0b\x14\x9b[oF\xde\xef\x17>/\xaaU\xf8[\xf6\xd3\xe8\x02\x051D\xf1<"\x13\xfc\x13Y\x8aL\x8c\xe8\xd9bP\xa8/&I\x8a\x89X\xf14\xa8-\xfa%\xcb\xa5\xb5\xce\xd3\x9e\xfd\x03"b5H\xe8Wn\x8f\x96\xba:\x14\xc7{\xa7A!\xd2\x107N\xd9$\xdc\x82*~<\xb8\x158\xfdP\x08\xac\xf2\xe7\xdf\x1c\xe0\xa5F,\x81\xb4\x91\x99iU\x0f\xf5\xe9\x08\x1c\xea3LzN\xe4\x90v\xbc\xd8\x08\xca.8\xf5\n\xeb\xcfna\xa2\xb9\x08(\x93\x16\x8bSNL\x93a\x181\xb4j\xbcJ\x17\x88\xaa<\xc3\x99\xbd\xb46\xf4\x15\x0e\xf9\xea\xb8\xd5\x97\x93S\xdc\x98:\xea\xc6y\xd3\xe6\xd7\xc2\xd7\x94A]\x90d\x1e\xe0M\xcdcJam\t\xc4\xcb+\xf6.\x7f\x12\xe9\xc4\xad8it\x19\x84\x9a\xf6\xe1\xe4\x05 5\xd6\x05\xc3e\x11\xb2\xcf\xca]\x9a\x84\x07hF\xdc\xe8\x8b\xd4\xc4\xb3*\xb5\x95\x862\xbd\x8a')
1
+ from telebot import types
2
+ from flask_babelex import gettext as _
3
+ from flask import current_app as app
4
+ from hiddifypanel.models import *
5
+ from . import bot
6
+ from hiddifypanel.panel.user.user import get_common_data
7
+
8
+ @bot.message_handler(commands=['start'],func=lambda message: "admin" not in message.text)
9
+ def send_welcome(message):
10
+ text = message.text
11
+ uuid = text.split()[1] if len(text.split()) > 1 else None
12
+ if uuid:
13
+ bot.reply_to(message, get_usage_msg(uuid), reply_markup=user_keyboard(uuid))
14
+ else:
15
+ bot.reply_to(message,
16
+ _("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
17
+ "Welcome to hiddifybot.\n"
18
+ "Start by clicking the link on the panel or entering your UUID."))
19
+
20
+
21
+ def user_keyboard(uuid):
22
+ return types.InlineKeyboardMarkup(
23
+ keyboard=[
24
+ [
25
+ types.InlineKeyboardButton(
26
+ text="update",
27
+ callback_data="update_usage " + uuid
28
+ )
29
+ ]
30
+ ]
31
+ )
32
+
33
+
34
+ def get_usage_msg(uuid):
35
+ with app.app_context():
36
+
37
+ user_data = get_common_data(uuid, 'multi')
38
+
39
+ user = user_data['user']
40
+ expire_rel = user_data['expire_rel']
41
+ reset_day = user_data['reset_day']
42
+
43
+ domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
44
+ user_link=f"https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/"
45
+ msg = f"""{_('<a href="%(user_link)s"> %(user)s</a>',user_link=user_link ,user=user.name if user.name != "default" else "")}\n\n"""
46
+
47
+ msg += f"""{_('user.home.usage.title')} {round(user.current_usage_GB, 3)}GB <b>{_('user.home.usage.from')}</b> {user.usage_limit_GB}GB {_('user.home.usage.monthly') if user.monthly else ''}\n"""
48
+ msg += f"""<b>{_('user.home.usage.expire')}</b> {expire_rel}"""
49
+
50
+
51
+ if reset_day < 500:
52
+ msg += f"""\n<b>{_('Reset Usage Time:')}</b> {reset_day} {_('days')}"""
53
+
54
+ msg+=f"""\n\n <a href="{user_link}">Home Link</a> - <a href="https://t.me/{bot.username}?start={user.uuid}">Telegram Bot Link</a>"""
55
+ return msg
56
+
57
+
58
+ @bot.callback_query_handler(func=lambda call: call.data.startswith("update_usage"))
59
+ def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
60
+ text = call.data
61
+ uuid = text.split()[1] if len(text.split()) > 1 else None
62
+
63
+ if uuid:
64
+ try:
65
+ new_text = get_usage_msg(uuid)
66
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,
67
+ reply_markup=user_keyboard(uuid))
68
+ bot.answer_callback_query(call.id, text='Updated', show_alert=False, cache_time=1)
69
+ except Exception as e:
70
+ print(e)
71
+ bot.answer_callback_query(call.id, cache_time=1)
4
72
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
73
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,7 @@
1
- # 2023-04-08T16:23:31.929812
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00C\x02\x00\x00\x12\t\x04\x00\x1ea\xe6\xec\x12\xb8\x1c0\xe3\x1f\x8a_\xbb\x1c\xa1\x02\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x86\xda\xab\x0c\xdd\xf9\x0fAO\xa3V\x83\xd0\x1ceE\x92\xf6^5g\x86\x02]<\x18}\xe0V\xe0\x14\x96=\xaeV\xe2\x16\xcd\xc4\xb8N\xad\x17\x87\xb1K\x91\xe2\xe940K\xf4\xab;\xd7\xeduZm\xa0\xa5\xe9\xbb\x14\xe1\xb351\xf6\x0cE8\x1b\xe5\xc3\xe8\x17ie\x0e\xe6X\\\xc5\x19\xa1\xe9\xcdY\x12\x8aR1\xfe|\xb1\xad\x9c1i\x06B\x02s(\xa5M\x97\x9b\xa6\x89\x80]$\xbc\xe0F\x85\xf7&\x89\xdb\x104+\rV\x1a\x94\xbd\xcc\xb5\n\x9cg\x98\xf0,\xf4-\xb8\x85\xfa\xe9g8\x91V\x85l-\xb6\xc2\x01\x894\x86Jy\xab\xbc\x02`\x9c\xde\xa95\xa8\xd8m\xad\xce\xfc\xe2N\x8f\x9c\x90\xba\xe9~\xf8()?\xb6\xd1Jmk\xfd\xbb\xca9\x9bn\x1d] \xcf\xa2$\x06p\x94i"H\xb6\xad\xe1\x9a\xb0H\xe0\xaa\xa7\xfe\x07c\xdcT=t\x9bm\xd5\x11\xf6\x06\xf1\xdf^\x05\x9eX5jn\xc3\x19\xea]S\xbb\xdfi.\x1e\xb2\x9e?E\x7f\xa6{Hc\xfe\xd5\\\xe6\x8d\xcf\xce\xf1\xf5\xd3\xbaC|\x14\xf3\x8a\x01\x92r\xefJ\xc2j\x18\xa9\x19\x96\xa8\x95\x0566\xee[\xe6\x985\xc4{\x81\xa2\\a\x02\x08\x02{{{\xb0W\x02l:\x9f\xa9\xa4"\xed|nA\xe7m\x07\x82\xfdk\xc7\x1f\xfa}\x15W/\x0e4\xcb\x06\xb0\xd89C\x99ny\xafT\xdfe\xec7\x9f\x82JT=\x0b\x06?\x7f\xf5\x0f\xd1PYP\x00\x90G\xbe\xe8z\x83?\xa9\xdf/\xfe\xf0j\xa6\xe9\x90\x16\xa6\x12\xdc\xfa5\xe4\xad~u\xb3\xa3\x9b$\xcbf~-\xd2\xcaI\x02{\\\xb6\xaf\xd5\xbc\xff\x979\xfb\xb2F\xa2_A)A\x92\x18\xb65\r\x1c\x85\xb3c\xdb\x9c^\xff\xe2\x87\x8dN\xa9]S\xc3\t\x83.\'\xa2=\x7f\xae\xe5\xce;\xeaqi\xd4{\n\xa1F\x82\x16\xe8\x01jj}\x93\xcb\x1d\x85_\xac\xe2\xe8/7fA\x08\xac\xdd\r\xa8W\x03s\x9d\xad\x0b\xcf\xd5f\xceF\xb8w\xe5\xcd\xbev\x83F1\x98o\xb03\xfc?\xfb\xb6\xb3U-\x8e\xf5\xe7^\x12 \xb1\xfb8\xb4\x8b\x8e\xcc\xa0J\x94Z\xcaw7\x88\x93\xf0-:@\xfb\xcd\xd3\xe1Q\xf3\x96V\n"\xe2 \xbcj\x0c\xd8-\xabo@\xc1\x01x\x1f\x91o\xad\x95(\x05\xc0\x86u\x1e\x97')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from hiddifypanel.panel.commercial.restapi import bot,register_bot
2
+
3
+ from . import Usage
4
+ from . import information
5
+ from . import admin
6
+ from . import DefaultResponse#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
7
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,122 @@
1
- # 2023-04-08T16:23:31.905494
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00u\x1e\x00\x00\x12\t\x04\x00Cs\xaa\xa4u\xed\xe3\x0b\xfa*\x16\xad\x90Q\xb8Y\x00\x00\x00\x00\x00\x00\x00\x00]\xe4\xca\x91\xab(\xb1\xfe]\x93\x14\xab\xdasn\xd4\x94\xcc\xa1\x88,\x18L\x15)\xfa\xf9\xb77)_*6=eP\xd1\x1e)\x90s\xacZ\xf0:)\xb0\xf8\xa2S\xe7\xbcta\xd4H\n\x9f\xb0\xfc\x9d\xfd\x94\x0f\xe3\xfa\x88a;\x15\xa3\r\xb58\xa8\xaf\xa3\x16u\x95\xf20B\xe2\xebf\x18$`\xc1\xc1\x98z\x08\txd\x93|\xe3ET\x1b\xff\xe4\xc5\x7f\xdb($E\xa2\x13\x1a\x89M\xf9@\x11\xaf\xef\xb3\x0f\xd0\xf0Y\xf7\xbe1\xaa\xfaLt\xd0-\'xX\xdee\xb8R$y\xdd\x8b\x86\'\xa9\xc8A\x02\xe9\x12\xd2\xf0a\xe1\xe2\xaaC\xfe\xc8^\xb1\xa9\xf05\xec\x02#3\x1e\xf9\x1axp\xf9\xde\x06,OG\xcc^\xd5\xa3\xb7\xbe\xca\xb8V\xc3\x81\x13K\xc9\xcb\xb6@\x82\x81L\x94Z\xd7+$\x95\xcc\x94\xaaI\xc6\x99D\xce\x14\xba\xb0\x18n\xf5\xb6C~\xb2@A\x8b"2&\xab\xb6\xd4b#\t\xf9\xc9\xb5wq\x8cv\xfb\xce)\x8e\x81@\x08y\xb6\xb7\xa0N\xb6\x15\xf8j\xdcw.\xc8\x81+\xac\xe6\xe8\xe8\x0fV\x8f\xdeu\xc5\x0c\xd2\x80\xf3.\x99\xa5\x90\x9f#c(Y\x0e\x85N\xd4]\x91\xba\xb1;\x81{\x1c\xb86z\x8c\x94o>\x08\xc3\xd4\x9a\xf6@\xa0.(=\xb9\x07\xedc\x19/p#b\x00_\t\x99\xb7\x11l;5T\xf3\xb5\x8ee\xc2\x95\xae\xe4yS"\x7fM\xa6\xbf\xc1\x85@O~-6\xf9\xf4\x10\xc2\xe0+\xc8\\zM\xf1r\x0b\x8d\xb7,\x11\xfb\xc1\xb7&k\x1a\xbf\xf7Jq\xd17\x86\x93\xd6\x9aH\xf6\xb5)m\xff\xb0\xc0\\\xcf)\xfe\x06\xc8\xe67\xc1\xdd!\xd4^T\xb0\xceC\xa4\x06\x19\xe9;\xa9\x1d8D\xdc\x03-P\xb7\x0cQ\tG\x98;D\x05\xa1D\xfb\xd6\xbb5\x01\xb0\xf7W\xb67\xa5\xb7\xdd\x8b\xfe\xd4\x04\xb24[\x8d>\x9d\xdf\x19\xfbB\x7fd\t\xcb\xcb\x98\xee\x87q\x85\xc4\x80Ra\x7f+\x897\xf2n\xe9P\x913T#\xe7\xd5\x1e\x1c\xf7)G=\xf2\xc0\xf6\x87F\x96\xa5\x8b\x97\x02F\xc2~Lo\xc4#\x90E\xf9*~O\\\xe6\x0e\xba\xcb\xb7a&\x8cw\xbe\xaaQ\xa7m\xbcD\xee\xfe\xfcK\xd6~1\xe6*\xc7\xf9\x1b\xe7\xf5>\xbb\xcf\xee^\xb2\x84k\xb5\xe3\x8e\xa0\tn\xb0\xce<\xf3\xaeE\x9f\x13^\xa0\xee[\x1c\xe9\x84\x06\x19\xbah\xec\x90\x02V\xcb\x8ep9FqO]|\x9c\'b\x9e\xde\xf2V\x93\xc2\x11^\xd6\x95\xee\x04\x82\xe9\xa3-\xea\x15j\x0e\x0f\xb8\xda:\x0e\x1d\xfa\xf6\x10\x81]GaY\xf8\xa2\x96\x1a\xc2\xdd\xa0\xe0\x02\x08X\x10E\x8cX._k\x16\xc5\x86\xf0\xd4##\x88\xc8\x94\x05\x19\x8er4\xe9\x84n\xb0\x13\xf6\x9d\xe3\xb2E5\x0e\x9c\xc0\xc6\x1c\xe2\xbe\xb1\xddi\xb5 \n[\x95=\x88\xe2\xc4\x17\x0e\xc1\xfe\xec\r:=C\x86X\x17\x97B\xe1K\xbf \x16\xcb,\xc0\xc9\x94\x9f\x01T\xbe\xc8\xbc\xc0\xd4\xd4\x8b\xb3\x8c\x03\xc0P\xdf$\xd3\xb3\xd8Z\x19Uy\x7f\x86644J\xd4\x9e6 (1\'\xcc\xd2 \x11\x1as\xb1%.\x9e\x04\xdfb!8\xa0\x1c\x8dwZJ\x0f\x91p\xb3\x85\x84ei\x1d\x83\xe0h\x05G\xd6\x8e\x87\x12\xaf\xf1\xaf\x9d*L>g\xe5p\x98\x05\x98\x89\x12\x01p\xcc\xff\x99)\xff\x80\xae\x9beS\x98\x04\xbc\'\xec\xeft\x0c\x99A9\xcc\xb4\x9b"\x9b\x14\x96{B[\xb5\x1c\x01\xfb\xf5\xb1f\xb8M{B\xe7\x18\xadA\x14\xd1oX\xa3t<\xac\x1c\x01\x0c@Za\x18\xa1\xe0+G#t*\xeb\xca\xf6\x93#A\x8e\xae`\xbes&\x8e\x1ebP\x05\xd3^\x0e\xa6^:{\x83\xed\xc6\x8a\x8e\xe8\xa6\xf3\xf6f\x84\xd7\xda\xef=\xb2V\xa0p\x1b\xcb\xba?\x02+\x96X\xfd\xc9J\x82Sg\x91_\xe7\xbd\xf6t\xb73\xc4\xc5\xd3}\x9c\xd2-\xa3!MT%k3U\x928\x7fnF\x1c\x98\xdbJ]\x95\x8a\xa9\x07\x11\xab;\x18\x80\x0f\xd0\x15\xbd^t\xbfE\xe8\x97\xfc\x0e\xde\xcb<a\x02\xebMz+\x9b\x07\'\x83\xd9\xfa\x94\xc0{\xee\xa4\xd1O\xab\x1b\xc7\xda\x8e\xdb\x9fd\x9b6\xb03\xe3\xb9q\xd6%"OT\x9ci\xfeeI\x83\xaev\xb1\x0f\xbeq\xe44\xa1\xa1\xb9\xad\xf5 fw\x11\xc6\x8a*^\xa5iYA\x8eY<[b*\xa7\tScC\xf4\x0c\x1au\x18=\xb8\xb1\xe5N\xcdI\xe6 \xb1\x0f.9\x15d\xd5\xcc6Kg\xf6Nt\xdf\xf5br\x0b\xaf\xba\xf4\xce\x8en\xd7\x8c\x8fdTy\x01^\xcat\xa1\x0c\xf6>l\xee\x8f\xd9\x0e\xe6\xc1\x8d\xc6|:\xa2r\x8cq\xa1:>\xb1\xeaC\x9f~\xc0x\xd98H\'\xa8\xd4\x9c\x05\xa5\xa7\xac\x95\xceU\xc0\x87\xf9:\xa7\xee\x81%^\xc5\x15\xb4n\xfe\xf7\xf9\t\xf9\x91\xe6\x00\xcc\x92.\xfdK^A \xb4\xc2\x94$\xb3-\x1c/\xb3\x90\xc7\xcf\xf7\x1e1\xa0F\xfe\xe5\x10\xe0\xa7Q\xe4\xd0R]?:\x19\x14\xc5\x83\xd9"\xe0\xef\x0c\xcfb\x82\x8a\x16\xdfk\xfe:_\x98/\xb9\xa7X\xaf\xd2\x9e\n\xe7\x08\xfe\xdeV1\xb3\xcf\xb6\xd6w\x91\xc1\xc5\xa0`)F\xccj<v\xeck\xea\x15\x83\x92B!\x8e\xac\xf23$\xa1\xcf\xa3A\x97\xb6\xcc\x95\x0ep\xfc\xcbV\xfd\x9f\n\xc2\xfaW^\x8e\xd8CE\xe8\x1c\xa5\x9b\xac\xa1\xf5m/\x83Z\xcd(K\xa6\x16)\xd9yr_\x83\x87\x90\xb5E\xcc\x1f\x10\x85\xcc\xac?0\x11\x9d{\xa9\x16O\xcc\xfe{o\x98\xa2M\xc0\x9a\xf0\xb3:}UKa\x8eg\x9ec\xe1xo\xc7*9I\x1b\xd7DD\x00\xa6um\xf3Ql\x11t\x1b/\x83\xfa\x166\x1dsQ?6\x1aP\x1aRT\xbd=\xbe\xd3\xbb\xe8\x02\xd6e\xc8&\xcb\xf1x\xab1\xe8\xb4i\xb4\xfe\x14\x8b\xb2\xb9\x82c\x17?\xb7\x0f\x93\xaa\xdb\x12\xde\xd9\xa0v\xb5\x18\xacR\xfd\xe6\xeaR\xe9\xc3<a\xeb\xe7\x1d\xdac\xea\xa7\xd8x\xbb\x988(\x9f+k\xa0\xb8\x89\xbdv\xb4\x86\x7f\xba\xb3\x92im\xb1\x0e\xed\x13\x04\r\xc2%(\xc3\xc3<\xc1r\x85\n\xccS\x1b\xd3c\x1cpQ\xa8\xb2\xa2\x17?\x8f\xeb\\\xc2\r\x16\x11f_\xf7\xbf\xee\xf1\x98\x0e\xd7\x7f\xb9w\xd9v\x80#\xe4\x03b\x95\xf3-6\xcaSw\xddn\xeb`L\xc4 V6@\xb2U\xd9\x05\x9a\xa1|\xa1\x0e\xee\x95@\xd71H\x9b\xa4\xdc\xac\x16\xb5\xecg`=\x97lT\xbeX\xd3\x04\xfb\x9aLm\xa8\xc8\x06}\x1f\xcc\xd0_\x0e\x1a-v\xc4U\x10\xbcLFn\xbb\x91\xc9uxu\'}\xfd\xe1\x98\x9f\xe3\xc3\x81gV\x07\x13\xee&\x06\x1e\xc1M\xbc\x83\x03\x1bI\x8c`\x03C\n\x1d\xbeG\xb4\xa9\x9d\xd4c\x9772\xf3\xdbj\x85\xce\xd3\xc02Q\xe7\xf0\x8f\xa5\xb8\xccL`\xad\x91\xe5\x9bD}\xc7C\xe7UK\x8f\x04\x02\x1d\x85\xae%\xe8\x87\xdb\xa42\xe5\x89[\xc1\x8b\xbc\x93(E\xd7\xb3+\xa6=UG\xfb\x82\x9e\x93D\x18\xc0\x80q\xb4\x8eL\r\xf4\xcb\xae\xbaPgh\xf3XY\xee6\xf9N\xaf\x92\xcb_kN\x06A\xa7\x87;\xf2\x94\xa9V\x88\x8f\xadF\xda[b\x98m\x0e\xbe\x04\xe3\xe1j\xb2\x89\xae\x04mj\xc4\xcd\x93\xbb\x95%0\x80(6:\xfa\x10)+\xc1\xc1\xcd)w\xea\xd6{\xa0\x13\xd9\xcezXz\x80G3\xd6Ru[\xe2\xbb\x036\xa0\x85\xe9\x1a]\xb2\x1ae\xbe`\x0f\xdb4\x13\xc54\xf3\x0e\xbb\x9d\x17]g\xdd\xc8\x8c\xc1T\xe1I\xed9sw\xbf2\x0e\xbf\x96\xb4M\xfc_\xed\xbe\xbb\xfc\x9ch\x1cO\xe1\x94)\xc1b\x00{_\xcdf\x88\xe3\xb2\x82.\xf1?\xd2\xf0D\x14\xe6e\xec\xb2\x99&S\x17\x90\x8db\xff=9\x9d\xeb\x0e\x96i\x0b\xf3!\x07\x83!&B\xd5x\xba\xac~\x96\x16\x97\x82-)"9V\xa3\xc4\xd4\xe4\x8b3\xef|#Q\x1f2jvt\xe3.!\xb7LW\xb9\xde?\xd2$mC\xc9\xa1\xdb\x1a\x9bT]\xda\xe4v\x8c)\x80}\xdb<\xa7\xe5\x9c\xd9\xdc\xf9l^\x04\x0e\x81\xec\x83f\xc3\xcc\xbe\xd0\xf4\xbaaMe@\xfa\xd7g\xef\x9cC\x0e\xb9\xaa\x03Um\x1eUi\xba\x0bE\x04\x0c`|T\xf7,\xac0\xda]y\x1d\xa3\xe5w\x9bC\x95\x1cb\xc2\x16\x01\xed\xe6\xced\xffq\\2\xdd\xc6R\xe5!\xe33\xcb\xf1\x8a\x81\x94\xf1.\x89\xc3\x13\x04\xa8\x16x\xb0\x02#WOJr1\xd4H\xf0*\xdc\x93g\xfb\x85OTE\xe0\x05A\x8a\xafr\x039g\x97)\x0cK&$j\x82JI\xda\xf2%=v.\n|r\x96\xf8\xd9\x99~\xf3&\xee\xf9\x9dg`\x8b\t\xf9\xea|\xb5\xf8\x8e\x8f\xb24#r\xb1-\xfb\xee\x8c4$\xef\xb6\x85\xf4R\x00\x84C\xac\xb8;\x97\xa4\x0cw\x10D&\xf7\xd8\xd1\xa3\xb9wP\x96\xa3`\xc6\xc2\xb5\xd5\xfc`\xf9\xea?\xfe\xcf\xf7\t\xabC\xd2(?/K\xaf\x02\xe3\x8fh\x01!\xd3\xe9.\xd7}\xbf\xd2\xff.N\xb8\xf1Q,\x82\xf2.\xe4\x14\x16\\\xb6!\x06&\xa0\x8b\x10\xde\x1e\xce\x11\x948\xf3u\xe4\xce\x94\x9d\xbf\xd8\x7fe_\xf8\xf3\xe5\xe0\xf4Gg\xe1K\x96\xb6d/\xb5\xabo\xa2\xa2\xa6x\xacqmI\xf9E\xb53\xd9\xe4~\x1fYEG\xcd\xfc\xb1\x06\xdb\xc6Rd\xc3\x19@\xe4\x1du\xe5\x07\x83\x05(\x9daX\xdf\xd6b\xce\xfe\x19\x1b\x06\xd2\x98\x19\xe1C\xd2\x8e,i\x8en|\x90\x90\xa0\x8d\xb2\x18\xa2\x86I\x0cf\x85|\x97\xdc\x02-\x8c\x87!z\xce\xd4\xfa\x12\xf2\xe0\x8a\xf9Y\xe5\x88\xe2E\x94\r\x0b\x1d\xef@\xe3\x89&n\x1ex\xb6\x8e\xed\x17\xcc\xcc\xf0\x0b\xa7tO\x8a\xa2\xb0^\x10\xc0\x07\'\xf13\xea\x87\xea\x98~\xd8\xdf\x8bi\xfb\xb6\x0e\xda\x83f\xdeP\x84\xf7\xa6\x95>>I\x89I\x1e\x19\xe7\xedv6&\x16\x80\xe0\xfc\x7fF\xec\xd4\xc3\xf4\x89\xc6e\x93\xd2\x81\x1e\xe8(\xb1\xbeI\xe0\x89\xa6\xb1\xff\xe2\r\x12\xee\x11\xce\xb0\x08\xeb\xc0$I\x92iC\x7fp\xb5\xb0!\x14-}n\xa2\x051pMCV\xe2\xfb\'\xc0\x1ad\xffb\xdc\xa5\x1e\xac\x18\xa1\x05\xa5\xb0a\x17R3\xb71\x95xW\xae\xd5~\xf1\x0f\xf9VHf\x12\xea\xd7]6GT"B\n\x97k\xafs\x07\xe6\x16\x1b\x00y\x9aib\xc9\xc3\xf3sf\xc5\xb2\x7f&\x84?_1\x0b\xfc\x87\x8d3s\r\xea\xe1\xc0\x819\xf2: \xa4~2\xa9zc\xb5I\x1f\x04\x80Lh\x84{\x87z\xd9{\xd2|\x1d\x8aA\t\xb6\x18\x8c\xa7\xf1\xee>\xcaN&\x9c\xd4\xc1,\x99\xf0\xdbV\xaduq\xb68\x06\xf6\xbc\x8d9\xbc\xbaZN\xf8,\x07\x94\xc7\xf1\xa4\xf0\x9b\xe2\x91\xa4\x98\xa1\xf3\xb6TuL\xf7\x1f\x86\xcc-\x02mw\x955N\x98\xcd5r\t\xda9-\xec\xc4\xbd6\xachR#\x00\xb2\xabm?\xae\xc1\n^\xc1+]\x02Mw\xc9\x00\xe7\x8d\xc0\xdf\xa3\xb9[\x8d\xe3\x1f\x83\x96\xd1Ff\xe3\xee\x9d\xe1i7\xd6\xe8\x97J\xf9\x8b\xbf4Q\x8eF\xad\xcd\xeeg\x8b\xe3\xed=]\xd1^}}Z\x9c"\xaa_M\xff.0\xe9\xe9\xfdCz\xce\x0f\xe8\x7f\xfe\ru\xa0`\xf6\xf6M\xb6\xf9M\xf57\xd5\xd0\xbfp~\xa7\x96\xe2\x06^\xed\\9\xc7\xed\xfb\xccl\x14\xb8-\xbaAYEf\x90\xa6\xe2\xfb\xf2\x81k\xb0\x84\xcc\xccMLYO\xd50@\xd5\x15o\x9d\xfc\x91\x8cQ~2\x89\xe6AA\xac\xad\x01\xbb\xc5\xa5\xcb.\x15\x93M\xdb\xd07\x965\xcb\xd2\x00\x0f\x7f\xbb7\xe4\xe3i\xf2VG\xa5\x1bU\xebi`\x11\xda/5<Mly+\xcd\xebS\x1a\xad\xb1\xe0\xf9m\x0c\xc8\x12\xcb\x94\xce\xfc\xc3\x8a\xdc\xfa\x94\xff\xa5\xd3\xb0~\x11>\xd7\xd80\x0cG5?/\xca\xe9X\xcd\x12\xf4H\xc7/\xd04\xcf\x99gv\xa3\'\x87^\xa5\xfdh\x88m\x95\x9c\xa3Y\x16\x8b\xa6C\xa9\xe8\x0f\xc1\xb1\x1fl\xc1\xc8\xae\xa1\xdf,t\xf0\xdd\xef\xad\x01|C:\x93O!b\xad\x11\xf0$O\x02\xb5\xec\xcc\x19\xbf\xebE\xd5E\xcf\x92o\x82\xb0\x14\xab2\xda\x99\xe5\x9aV\xac\x9d\xcc\xbc&\xc9\xe1\x83\x17\x0c\xde5\xcc\xb7)dh7\xc6\x9eI\x1b\xda\xd4D\x13\x88\x91\xec\xeb\x9cK\x1d\x14\x01W\xadJ\x04\xd3\xce\xe3\xb4\xb0\x95\x87T\xb7\x8f\x1e\xc2\x19\xc9\x1c\xe0\x7f\xd3,\xf4\x12U\xba\xcd\xd3\xf2\xe6\xd9\x86,\x90\x89R\x18\xcc&A\xf2n\x7f\x01,\x0f\xce\x05{\xe7;\xe9,\x04\xf4\xdfq@;\xe6\x85&\xa4\x8d:\xb1\xfd9G*\xfd\x98\x19&v\xb3\x17j\xfd^X\xf7\r\xf5\x15\x0b1\xc0\xf2*\xadI\x8d"T\xc4\xe1<\xc3\xcd=\xb2\xca\xdd\xca}J\r\xff\xca\x83\xc4;#\x1d\xd2\xdb\xc7\xcd\x0b\x0b\xfe\xd0!\xeb\xbf\xf70B\xb0\xd3\x0fD\xc61X\xc3\xe7f\x16.\x94\xdd$+3D\xc5\xf3\xc5E48fx\x96y\xcc\x1b\x99\xba\xa7\xbbx;\x1d.W\x05L\x97\xd5\x963\x0e\xed\xb0\xc2\x88[\xb3\x8a`M\xe9\xa3?\x01o\xc4;\\\xdb\xcc\x08m\x16\xbee\xb5Y\xf9b\xa2O:\xc5\xc0\x13\xcf\xeb\xaf_z\xb9\xb1\xd8\xd2YY\xeaE\xc9\x84>h\xe67\x1a\xdbK-|\x14\xd8\xf1D\x0b]f\xd0\xbf4D\xc7\x99\x7f\xfb\xb4t\x10\xcc==\x81\xe3w\x1f\x94U7\xe1\x7f?\xa0\x02\x06\x80Rj\x953\xdd\x83+U\x8bZ\xb3\x04\x8e\x94v\xc7[K\r)\xfc\xb2\xdf9by\xd1\x8d\\l\x9a8\x0fm{a\xe5\x12>\xf0B\xb0\xa2\x19\xcc\xb1k\xff\xe8?\x820\xc0\x89\x9e\xcb\xa6\xe5\x11"3q\x002>5\x89\x9e\xc6\xc4\xfbh\xae\xe3\xb9\xef\x0cN{6\xac\x1d\x19\x1c\xc3~\xac!\xbd\x90r;i\xf2W\xaa\x95p\xe5\xe8\xf3q\x94\xe0\x04s\r\x80\xf6\xfd\xba\'r\xf9\x98o\xcb#\x04\xce\x1dy\xd7\x8b$\xe4t\xe4\xa6i\xb3\xfc^\x1f0|\x88\x99,\xed\x1f1N\x17\x95\x90\xd4\x07\xd42:\xd5\x03\r\x93LHZ\x8c\xd7\x96\x8d\xba\xcd\xd9\x89\xa5)\xb6`\xf1\xab\tq\xa1\x156\xfa\x0e\xe1M\xa7xo\xff\xd5\xd8\x9c\n\x99*\x88\xa9*\x11\rd\xd7\x0c\xef\xe0\xca\xfbw\xcf\xb6C\xba\xd6\x1f!\xfc\xb1\xe9\xcau\x01\x8e\xe3\\\x06\xf7S\xec\x1a\xado\xaf\xc3\xb4\x11\xe3\xa73w:xT\x16\xde\r\xc5Z!\xcci\xa6c\xe7\x9aen\x8e~\x92R\x166:\xc5\xfe[\xa6\xfc\xa2\xc7\x1d\xd6\xcaF#\x9e1\n\xef\x96\x0f\xf07\rtBQ\xcd\x19\xa9=y\xc5qJZ\x87\x93=\xbev\x85\xd9\x81\xefx\xd1\xc0\xd1\xbfQ\xa5F\x80\xc5\x81#\x84E\x08\x0b\xfch/\x040\x90\xa6\xb3\x0c\xd3o\x8e\xd4\xd1\xcd\xa4\x94\xa59\x10\xd4\xf0?\x9b)\x8a\xc1\xda\x00\x86=\xe3>\xee:\xfeM\xe3?\xe8,&/\\\xab{\x14>98\x99\x06\xa1O\xe1\xf6\x02B\xc3!\xc5,\xce\x82\xe6\xcf\xe0\x02.B\x82\xdf\xcaJ\x9b\xc7\xb7h\xf0\x9b8\x84L\x11\xcf\x85|\xf06C\xe5\xb2*\xa1hDO\xcbi\xc2\x13\xad\xf0\xd5Z|\xb9X\xdf\xb6\xde\x00\xb2\xb1\xfaw\x94F\xa5\x97\xce\xdd\x9a[2O6\x86\x9du+\xcb\xebY\xab\xc6\x02\x87T \x9e^\x9b\x00\xcd\xe5\xf6]=(\xf7\x17y\xd1d\xd7\xb4\xac\xfc\x86\x96M\x07\x825\xc2nZ\x87JV\x96\xd2h\xeb\xeap2&\xc2\x1e\x8c\xe0\x9f\xef\x12\na\xca\xa9\xa3->J\x9f?\xd9r\x9e0\xf0E-\x19\xdfU\xb4\xe1.\xff\x0c\x9a\xa20\xe5\xd4\xa3!8\x01\x99H>\xe9]u\x99I\xcf\x1a~}\xab\x8bv$\xb6\x84\xd1\xd0\x1fh!E\xcenxS\xf4t@\r\x15 \x9d\x9a\x95\x16\x80 \x14\tp\xb9\x9b\xbb\x1f@/\xae\xfdnI+\x87B\x02\x92^\x13\xc2B\xba\xb8\x1a\xd3\xe2\x9c\xd6\xab\xd1\xcc(\xcf\xfb\x99i+\xe7h\xcf\x1e\xb9\xe5\xcb(\xd4\xdcg\xa5\xe0mt\x92\xc4V\xf0\x10\xf28\xd1\x9dF\xae\x03,`G\x7f\x1b\xe9\xe2M\xa63M\xb0\x9f\xe9E\xb6\x96\xc69\x02\x14)\x19lZ\xd0H\xeb\x03\x0e:\xe1:$\xe3-O\x81+\xdd\xf4\x0bXL\xe4\xb2\x94\x84\x11\x986\x1a \x9a\xf1U\x12\xf62+\x14\xe4\xc5h\x07\x13\xa5\xa3\xb2\xe5\xa6\\\xa8U\x0e\xa4\x95\x1f\xf6\x1e\xcbJ\xcb\xd5\x17r\x88\x87\xc2}\xc5a;\xc1\xf4\xac\xa8\xbf3a\x9e\xb3\x10\t\xacw3\xee4M\x00\x83\x92h\t\xe4\xfc\x8540\x9a-\tH\x90\x98\x90\x8d\x8aunM\xfc\rf,\x86\x00o\xfb\xb5~0g\x1c\x1br|\xc7\xb8\xcd\xe8\xb99aji"<\xf2\x08\xc3P7\xa2^\x13{\r\xbb\xf4*K,n\x8b\xa7\xfa\xe8\x9aGt\x18\x7f\xa1\xe6\xa8\x02\xf3\xe8\x89\xe9\xa7\x9f\xb0q\xe1\x9a\x03\xa1\xa1\xc6\x13\x9f\xb1u\xfdM\xa9:;\xbf\xb1j\xfa\xfe\x8a<p5\xad\x8f\xab\x11\xa4\x1f\xc0TE,F)8\xfc\x86z"s\x95\xb6}C\xd1\xe3[\x96)\x15\x8a\x85\xef`\x92\xd8t\x0b-^\x0e\x0c\x99\x18\xc5i\x81\x17\xc2 \x11\xdc\xe0\xdd\xab(\x96 \x9a\xd3\xef\xda\x7f$$\xdf\xc9op\xf3\xd7\x85\xccP\xb9\xbe\x9f\x96\xe7~\xc3\xe9\xe8\x05\x02\n_\xadXLw\xefG\xc2P\xbcWT\xb2\xde\xb4\x0b=\xd4\xb8\x95\x91\xe8C\xde\xf3\xe76_\x87\x1b6\x7f\x93A\xcc\xd6h5\xe7\xb4\xb0\xc0=\x01?d}\x08\x91\xe6\xb5\xa5I\x0eR}J\x16\xcc\xc5j.\n\xcfu[ \xefJ\xb7\xb76\x050\x1e4\xd6\'\xf5:\xd4\xb2\x0eN\n\x82\xc6Z\xe1\xb5\xe5\x9b\x03\xfb\xafv\x9a\x80|\x7f\x90\xe4\x0cC\xa4\xcf\x01\x96c\xef1\x05\x1a_\xe9\xa4U\x0cy=\x0b\xe8\xe8\x19\x00\xda\xdd\x9f\x05;>\x04\xe36l\xdcQ\xe3z\xe7\xf4\xc8J\x04\xce\xa3\xd43\x1b\xd5\x9f\x1eU\x80\x9aCj\xcc\xfePo7\xbaFC\xaauW^\x02\x94\x1f\x85\x17J\xf4\xcd\xcf\xc4(L\xd1\xc2\xb7\x06\x95\r<\\\xb4\xd8\xd9\x1d\xb1\xc3\xae9\x15\xe8\xf1\xa2\x9d|z\xee;\x1f`\xb7\xe6\xea)\x80L`P`\x8fe\x0b\xd1S#\x9c`\x97\xc7np\xa5\x0f@\x86\xe6\xfcD^9}\xfcg\xa8\xfc\xce\x05\x9d\xb4qv\xdes\xe4,\xda=\xb6\x13\x0f\xd78\xa4\xb6o0\x18\x19\xfd-\xb5:\xd71\xdc\xdbZ\xaa\xd9D\xecN\xb2\\a\x94\xd6\x04d\x1b\xc9Dq\xde>&\xbf\xcbd&k\xfbW\xbb\x05\xbaiJU\xe2\xbdc\xe3K\x8c\x15\xbbg\xdc\xb0\x98\xf1\xc1\x9a\xb2(W\xaa%]\x0c\xcf\xda\x98\x0b\xe5[\xb8D\xf7M\x14\xf1\x13\xd1\r\xf8&\x041\xb8\x04\'\\Y\x92*\xff]\xd2\xc9WN\x85\x8b\x9b\xfd)\x89vRQ\x9da\xb4\x18\xd8\xa6\x04\xc1\xd3f\xa4\x04~\x95>\x07!\x1b[\xfb\x04\xa8\xb0\xcaVLy\xeb\x81\xc1]{:S?\x9f\x01`\x07[=\x94\xa9=(\xefs\x0bv\xf2\xe1\x11\x9b+\xf5\x9f\x7f\xc2\xd6\x1f@\x8b\xca?\xd2\n^\xc0\x08\xcd\x08\xbf\x0b\x8a!w\x18\x00z@C\xbe\xd0=a\xda\x03\xec<\xf3\xf3\xb6\xb1\x01\xb3Q\xdcit}\xd6N\x9d]\x86\x87N\x01=\x1a\x12\x0e\xa5w\x1ch\t\xb5\x05U+\x10|m\x01\x92YR\x80\x92L\x0b\xcc&\x00\xba\x84\xb6o\x16O\x02\x91\x1f&\xe2\xc4h~;\x93\x8c\x00\xb9kA\xed9_o@\xb0\x12\xafz\xe1F\x8cv6\x96`\x81N\xaa\xe6Bh\r\xe5\xfd*\x05\xcb.5\x15\xae\xd5~\xe5\x88d}l\xf4\xf1\xae\xc8\xb2\x14u\xc4K\xd9\xc9\xd9\xa4++\x1c\x89\xc1\x1am\x85\xa5\x9en\xc1`\x99e~\xb6i\xc4_=u\xb0\xdah\xb1zW(s\xd65X\xb1IX\xae\x93\xbf\x04\xf7\xb6\xa5\xf4R\xbdM\xafY^5\xd7S\xf0\x86( \xfd\xb4d|c\x1b\xa3*\xfe\x19|\x87\xc8"d\xa6\x12\x03|d\x86Q\xfc\x1c\xc9\xb1\x11\x8b\x17x\xfa\xee\xe4G\xd3;\x0fPw;\xfb\xb1a\xe0\xd1Eo\xec$\xaa\xf4\'\x1bz_\x9b7f\x98\xcd\xfa\x84V\\\x840\xac\xa0\xd4\xad\xd5\xd2\xc7\x86\x1bV\x97\xaa\xb8\xe2\xf9\xc3\xc2\x89\xdai\xffP7:!r\xed/Y\xa0\x19\xb1\xd2\xa8\xbb\xbd\xa3\xd4Y\x96U\xc8\x82P|\x91:&4\x86\xf3\x83\xc7\t\x16Od,k\xf1\x08\xc1\x0b\x8fX-J\xcf\x02\xb2\xfd\x11\xf0&\x91\x05\xf6\x11\xb44\nF@\x90\xa5\xd2\xa8d\x8dN2\xd5|\xff.\x03\xb3\xcb9\xb5\xa3;B\x92\xe6\xa2\x94\xe6\x1e\xb4\xc5\xaft\xdc#]\xdb\xf4\xee3j\x9e,#\r\x01\xb8ap.\xe2Pj%\xdb\x01\xab\x17\x06\x831\xaa\xbfUIU\xe7\xec\xaa\xf5\xa1\'\x11\t\xab\xff\x80\xa3\xbc\xf9\xec\xbf\x9a\xd3N\x9d\xe9\xe0\xcaO\xc7X\x93Fw\xf6s\x95Knk\n\x84\x8cD#Y\xdd\n\rh\xd9#\xd4%\xcb8a\xbe\xb6,\xc0\xc5\xbc\x1e\x11\xa6\xcb\xfa\xeb\xd9\x08~\xa1\x18\'\xb1_\xcb\xbdE\xac\xd6\x0e\xce\'\xc4\xbb\xbe\x07\x7f\xd9\xfc\xd9:\x134I4@e\x9d\xc2s\xeb\xbe\xbe`Q\xd7*]\xeeZ5\x05\x82\x13\xdd\xa3Q\xb1\x1f\xec\xd0\x18\x07h\xf7\xf0@\x03U}h$\x9bI\x9eo.iT,\xa4\xb4t\xb7\x15:\xa1\x84\xe9\x81\xb3\xfc\xbc\x8a\xb8e\xe0\x87\xad\xa7v\x19\xa4\xb1\r\x1c\x88\x97\x8b\x1a\xd1\xe3\xd6\xa9^p\xe0\xed\xb2\x12\xce%:\x92[\x9c\xd9w\xfa3|*\x85\xec\x1e\x8da}\xa5\xe0nN\'\xf4\x91T\xc7\x84\x06\xd0\xf7\xeaD\x82\xbdB\x11]\x94\xdam\xa2\xac\xad\'\x1d\x1ciX\xcd\xd4\xbd=\x95\xe6Qgrf\x89\xd1\xaaU\xd5i\xb2;;Q\x87\x8e\xf0Q\xa5\xf0\x11\x8e\xe5\xdc\xafr\xd4\x06\xd1\x86aR\x05IP\xea\xd9\x10d\xdam\x88\x97\xa9\x90\xdd\xde\x00\x89\xb9\xa5\x8e%\xebLH\x81fL\xe2\xf8\x8b\xd2\x1f\x13\xb4\xb7\x94;\xcd\xe41S\x12\xb0\xc6C#u\xda\x82=K(\x16\xc8\x9b\x92G\xc6\xf4\xf4=\xbb\x0c\xc2\xb09H\xd8\x05\xd9\xfc\xe6\xe2Fw\x0fEl\xac\x9c\xc4Z\x89\xb0:\x1c\x17\x87\xb5\xe2o!x\x9e\xc9\xc4\x0b\x8f\xa5E\xc1]\x02|!\x8b\xcb\x02\xb4\xa5\x1a,\x95\xb9|\xa1\xab\xa4M\x19+X\xf7&\x9f\x84\xd4_\xa6\xd8d\xdc\x17\xf2\x12\xc9\xe7\x8b\xa5\xa3\x1b\xda\xb7G.\xea\xa03\xb6\xe4\xc3\xa5,\xb6\t\x14\xf1S\xf7E\xa1\xadX\x1a\x81R\xb1"W\x1b]\xb7-\xed,\xa6\xde(\xbe\t,\xa1\xa7C]k\x94\xabK\x8c\xd3\xd8\xe88\x17\xa1\x12o\x0b\x99\xe6\x14 \x87\xd5\xcfn\x94\xcaY\xe3t)\xafk\\\xa5\xc8\x99a\xdfW\x13L\xcfJ!\xd0\xb6ry\xc05\xa5{\x80\xa3P\xb9\x15\xe90\xa6\xc7\xbbh\xfeL\xd6\x0e+\xac\x89\xe8,\xda(&\xcad\x91:c\xc0\xa8N\x94\xc70\xb4\xaf\xd3\xf3\xe0\x1aD\xe83\xa2\x1a\xc5a1\xfdi\xb1\x92=7\xfeD\x9d$\xd8\xe9\x86\xf9\xcfR\xd0V\xa1\xdd\xaa\xf5\xf3\'\xfa\x13\xfd[\xac\xbf2\xff\xfaha\x18\xf9\xd0H\x90\x8b\xc1\x8d\x97d\x8dx\xb6\x02\xee\x02\x1d\x9b\xd7\xdac\xbaw\xbd\xadVyR\xcc"\xbc)\xbb\xba2\xa42\xda\x8f"\xa1h\x87\xcf\x1d\'\xf7\xe7Z\x8bB\x13F\xe5\x8a;\x14\xef\xf1|X\x13J\x1d\xb4\xcc@\xaa\x10\xbeY\xceC\xf7\x9b\xd4\x83R\x13\xc6\xbd\xa8\xa0uH\xd9\x90Jhs\xf4\x8d\xd0g\x0c\xbb\x00u\xf8"\x1fegY\xf0?vG\xe7\xdf\xc8\xbbp.W\xcc\x97\x94R\xa2U\xc1\xd1y.\xea\x1a\x07\xe7\xa8\x0fd\x0f\xb8\x11.\xa4L\x04\xf7\x9d\x0b\xa5\x96\x17\xffy\x84\x90%\x05\xb9O:\xdb\x98\xd8\xe6\n\x9c\xef\x85\xb1\x81-3E\xf6f\xd1\xee\xbe\xe3S\xa2}\xfe\xdauuK\x82\xa2H\x9a\xb2\x81\x8a\xa0\x15H\x87\xa6D\xb3c\x02\x12!\xeeH\x9d"\\\x0b\xc3\x11\x8a\x8d/\nb\x17\x86]\x18]\xdf\xa2\xc72I\xe5\x92\xa5q\xe6\nU\x15\tS9B\x8b\xe7ul\xaf;t\x04\x8c\x91\xafD\xd2\xa7h\xa5\xd1\x10m\x9c\xcb{\x1a\x8a\xcb\xa9\x13\x078\x86~\x19\xfa\x1b\xf4)L\x92\xc0:g\x92\x93\x1f\xc7\xc5\x7f\xca\xd5/\x8a\x97(C\xad\xe3\xce\xf1\xc2\xf1=\xa9\xe3l\xfe?\x89\xcb)\x1b1?A\xa4\x18;\x7f\xa9)}\x95?%\xef;\x8fg|\x0b\xa5\x86\x1c\xd0I\\1V\x8a71J{Bp\xaa\x1b\xcb\xac\x84|\xb9\x16\xa0V\xddU\x9d`\xb0{\xa2\xfb\x9eHi\xf5\xe8}iL9d\xd9\x96\xc9\xeaG\xa9\x15\x88\x89\xe9\xc51\xc9\xc86\xa0\x80e\xe3\xce\xd1\xba\xf4\x07;\x86\x91\xba\x07\xc3\x12\xb6&\x19s\xc7\xb6\xf5\x9dee\xfa\x0b\xe0\xdf\x0c\xb4_\xe3=\xf3\xdf\xaaMFK\xa4&\x0e\x1eoG\x12Ql\xe9b\xce20\x1c\xb6\x9c2J\x10\x82%\x00\xee\xa7\xd5\x9e\x11\xe6\r\xc7\xf15%\xc1\xbf\xee\xefQ\xc8\x1a\xe5mr\x9d+$&\xa9cJ\xbdHe\x9eVl\xec\x98~P\xf9\xd9yo\xc1y\x02{\x17U\xd7\x1d\xf1\x01G\xc7\x92b\xf1\x05G\xdd\xff%\xb1\x10I\xeb\xd99\xef\xd3\x84\\\x0e\x91\x00I+\x9f\xc6`kJ\xc6\xcef\x04\x8c\x0b\xc9\xee\xb2\xfa\xe3\x1b\xd4\x03;\xc7\x9a\xfc0\xe1\xe1\xfa_\x08\xbd\xa3\xcbX`\xe3@\xfa\xdfu\\H<8\xf8\xb6\xeel\x807\xb2\xa74\x9c\xeb\x82\xcc\x94\xdf\x07?\xe1\x0be\x88\xe26\x84GB\x95\xd6\xf5\xe7\x9f\x98y\xafu\x18-`\xfb\x81>\xc6\xe0h\x92T\xd3\x9c#\xba;^\x88D#\nd\xd9\x93\xfa\xac\xa6\\\x87&]\x95z\x8e\xac\xfc\xacb\xf3D(\x06\x8a\xf2\xe8\xe8\xb7\xe2\xa4\x98\x01"\x9c\xac\xdd\x8c/\x926\xa3\x1d\xa8_\x80>t\xae\x7fm]\xf9,\xc8\xc6\xf5\xd1\xa2\xd9\x0b\xd5\xc4\xa0\x99\xdc\xb7\x7f\xed\xa6\xec#\xbdn\x85\x82Y\xf2\xcb\xfb\x84\xb3\xe0\x95}\xa6\x96\x04\t\xc3\xc6"\xfe\x97\xbc\xdc\xd91CM\xc19l\x19?\x80\xb6\x84\x87\x883\xe7\x85\x90\xc0\xb6C\x82m\x94\x8c\xd5\xf0\x0cQ*\x1am&y<\xab\xf2V\x98\x81\xa7%X\xb2c\x9e\xe1,\xf7qXz\x99\x8bUz\x072\x15\x9c\x1a\x0c\x1f\xef\xc5X]\xba\x19\xd0\xb1\xf6J}\xf5\x96!q\xcb$\x06\x83}\xc5\x1a\xb0t\t\xa5\x04\x1ek9r\x15y\x1c\xd3\xd9\x8b9>c\xe1T\xe8]\xc5A\xca/"\xcak\xd5\x87\xa9\xc5\xd7\x8d\x8bWlX\x89Ct\xc0$L:\xc5f\xc8\x1a\x91\x1b+\xb6\x1eh.\x8b\xecsF\xe6-Q\x82\xaa\xfa\x82\x1c\x00\xfd\x85\x0bDI>\xaa:\x0e\'e\n\xe9\xf5\xf7`\xc8X\x90\xbfw\xaf\xdc\x8awY\x94\xb1\xe9`[$^/\x95\xaf\xa1:\x07\x0f\x8b\xb5\x81\x8aW\xcd\x0bl\xea\xff\x07\x0f\x8bYY\xde)d\xc6\xcc"\x86\xce\x05fQ\x07D\xf6\x93|v\xbd[\xefmd\xf8\xb4\x1e\x8eu\xa7\xac\xacv\x8a\xd7\xc5\xde\xa8Lf\t\x92V\xad\xa4d(\x05*\xc1\x06m+|\x9a\x84\x8a\x88g\x9e\xdf\x0c\x05\xba\x0f\xa3H\x94\xeb\x0b\xb7g\x0f!\xe2\xbc-\xc8a\x84\x9cI/\x12\x7f\x8dc-\xe8#"\x89"e7\xe2\xae\x8f,\x02\x87\xb9@\xb0sK5\xf0!GN\xf1\xd6HI\xca\'\xd4\xb8s\xe1\xe7\xe2.\xc2\x85\x9d\x95\x19\xee6\x8d\xa3\x9a\xe2\x1e8\x18\xde<\xd5-hS\xecCE4\x10foL\xca1c\xee\xee\xfb>\xcb\xf2\xadz\xe6\xd1\xe1\r\\JTg\x03oi)\x1cdj\xdb\xc4C\xda\x17o8]\xf4W\x9d\x99\xde\xaf\x1a\xcbLb\xf9\xde\xe5\x84\x9e\nJ,\xdfU\xadAb\x00\xc3h\xfb\xe4\x11`\xd2?\x81\xac=W\x94\xf7\x89Ec\x10\xdar\x84Z\x0e5\xb3S\xf1>&\x16\xaeh\xa6q\xc1\xf4\xb8\x13L\x8f\xd1\x87YIR$\xeajz\x01\x02l\x91\x82\xa8\xf2\xbe\x8f\xf4q\xe9\xbf;\x06\xc1\xaf\xb5\x81\xa9L\xa3A1\xf9\x1a\xcdR\xa3=\xd4\x83Jm~\xcf\x8cOu\xa0Q\r\x14#[b\x84\x0c\x0e\x03\xb2\xdf\xb4\x96\x8b"S\x8e\xa6\xfd\xe1\xa6U\x16\xcf\xc1WT\xaaw\x9b\xb4\x14\x16\x8d\xa5\xb9\xa8x5\xf3\x15\xeb\xb0\xa0\xafUr\x8c\xa0\xd9b8\x9f\xd0\x80\xd1\x11\x9c\x92\x0f=\xac\x07T\xcd_+\x87\x9d\x03q\x7fo\xaa\x0cO\xe1\x96W\xa8\xdfr\x08\'\xb9dr\'o\x8d\xfe\xb8\x97m_a%\xbe\n\x8cE\xdb\xa1\x0e\xfa\xdf^\x10)\x88j\x92\x00.Ah\xdc\x89=\xc1\x12\xf8\xbf>?\xe8\xdeDw>\x9f\t\xd7\x10a\xbc\x8a\xce\xd5\xc6\xd4\x86\xaf[7\x0e\x16-o\x01\xe7\t\x96H\'N\x82(\xa6\xbf\xe1\x7f8\x9a\xd9\x12*\xf2\xb1!J\xd5\x1e\x94\xf2Bj$9\xa0\x8au\xf1.3\xe9\xbf\r|J\xf3}\x9d\xf4$\x19\xeb\xe9+\xa0\x0b\x88C\xf2\xf48\xfa\xdc\x17\x8e\xdeu\xfd\xb5H\xbe\x1d\xdd\x02z-}KM$G\x1c~Y\xd4\xef@\x8f:\xa4\xf6#\xcf\xb5b\xfcN\xe9>\xd9\x05\x95\xbda\xfeu\x90\xb5\xa2\xe9a\xd8\x86[\xeb\xd6\xc2\x1f?\xbb\x97i)\xad\xd2\xbe1\x1c\xeer\xa4\x10\xce\xef\x96\x96h\xf3\xf0m\x12\x1ff\xa3\xde\xfb\\\x9d\xbc\xdc\xa9\x0c<\xd7\x98wUj\xcb\xdf\x0f\r\xbb\xb6\xccM/n\x1e\x94\x95\xe8\xc8S\xdbp\x9f\xfc)e\x14V<\xf4=d\xaf\xfd\xaf\xb5\x9d\x7f&\xe9\xb4\t\xc8\xcb>\xf8&\x874\xe7j\x8f\xe5\x80$\xeb\x14\xc6\xf3\x8d2O\x16!a"\xe8\x86\x94\xed\x9b\n\xb9\x86\x99\xa7\xe4&\x14P\xda\xb9\t\xfa.\xb7\x85\xc0\xeeOd\x9c[\xd9\x94\xab~\xdf\xa5\xa0\x8b\x95\xf4\xd8\xed\x97-IJ\xdd\xe6\x12<_\xb1V\xd2\xe6/\x03\xfc5\xb4\xc4\x8bo\x06\xc3\x99s\x13w8\x96\xa4\xf4=\xc30\n\x9d\xd8;\x9f\xf4 S\xb5\xd0\xd5v\xf3\x94&W\xce\x96\x89a\xc1z\x017\xed:\x1f\xa8\xf8!X\x1b#\x86\x17@\xfa\x8c\x1f\x97\x05\xd4>\xab\x071\xc0`!\xba9\xa1\xf3g\xce7WH\xad?\t\xe6\x80/\xb3\x01as\xb6\xb7xg\xb4L\x14\xc5h\xe7\xd1\xeb\xab\xff\xdc\xce15\xc3\x9c\x87\x86\x87m\x99N4\xbf\t\xc3~M\x0f\x8d\xffb/\x1cC\xcf2\xe7a\xdf=\x9eJ\xf4\x9f\x1f~\xba,Az\x83\x89[R<\x0e\x0e\x0ff\xd8\xae\x0b8\xe5\xd2\xb3jt\x1f\xf0.\xb8\x84\x0e7\xf1\xfd\xcc\xfa\xfe\x16\x9aa\xc9\x99\x9e\xec\xd8\x9d\xd2GJ\xa7\xd8W\xaa\xae\xc9\xd12\xc3\x11@f\xf6\xf1\xcd\xbd\xff\xa8Ea\xfa\x1d\x9d\xa8+\x89\xa9\x18\xe2\x0bX\x16\'+\x10\x04}~\xf7\xcc0 \x04\xb1\x9c\x80t\xe8\xed(\xf1\xc8|#\x93\xc7\x06\xed\xab{\xd2\xfe\t\x07\xa2\neI\x90Q\xaf\xb5\xac\x04o\xf1\x82_a4Q\x9b\xb1\x1f\x14\xde\xcc\x01\xe0\xa0\x1c}\x9d\xee\xdb\xa0,\xb2\x19\xc9\xc5\xe1\x1aZ%\x8c|ni- E\x99\xc6\xb5\xd1\xb3v\xb7\x82T\xc3\xe1\xbe\xdb\xee\\\'I]X\xc8\x05-\xef\xf1~\x9b\x00\xf1+b\xc0\x0b\x1e\xf6\xda\xe9\xcc[\x90\xc4U\xd3\x996\x11\xa1mT=\xac\x16U\xc3X\x10\xb6!\xc9\xa2\xf9\x15\x16T0\x96\x18\xb6^\xde\x8a\xd0\x11\xbdpP\xf0\xe5\xb9\x1c\x0c\xd6\xedo\xa5W\x8e!\x07\xfaME\xb2\x8a\xd4\x99g\x0c\xd3\x17\xc7\x9b\xba;\xafR\x98\xd4\x96\xe0\xd5\xa3m\xa3Z,\xa0\x05?!\x93\x0fs\x08\xf5\xf3\x9d\x84\xefrj\x19\xdd\x98P\xc3\x1eM\x87/\x02}\x15\xea\xd6H\xf4\x80&^\xff\xce\xf2\xac\xe1.\x88W\'7\xcc w\x15\xb8V8h\xd7\xe4\xac#\x9d\x12\x14\xfb\xbbz')
1
+ from . import bot
2
+
3
+ from telebot import types
4
+ from hiddifypanel.models import *
5
+ import datetime
6
+ from hiddifypanel.panel.database import db
7
+
8
+ @bot.message_handler(commands=['start'],func=lambda message: "admin" in message.text)
9
+ def send_welcome(message):
10
+ text = message.text
11
+ #print("dddd",text)
12
+ uuid = text.split()[1].split("_")[1] if len(text.split()) > 1 else None
13
+ if uuid:
14
+ if uuid==hconfig(ConfigEnum.admin_secret):
15
+ start_admin(message)
16
+ return
17
+ bot.reply_to(message, "error")
18
+
19
+
20
+
21
+
22
+ def start_admin(message):
23
+
24
+ bot.reply_to(message,"Welcome to admin bot. Choose your action",reply_markup=admin_keyboard_main())
25
+
26
+ def admin_hash():
27
+ return hash(hconfig(ConfigEnum.admin_secret))%100000
28
+
29
+
30
+ def admin_keyboard_main():
31
+
32
+ return types.InlineKeyboardMarkup(keyboard=[[
33
+ types.InlineKeyboardButton(
34
+ text="Create Package",
35
+ callback_data=f'{admin_hash()}create_package'
36
+ )
37
+ ]
38
+ ]
39
+ )
40
+
41
+ def admin_keyboard_gig(old_action):
42
+ def keyboard(gig):
43
+ return types.InlineKeyboardButton(
44
+ text=f"{gig} GB",
45
+ callback_data=f"{old_action} {gig}"
46
+ )
47
+ return types.InlineKeyboardMarkup(keyboard=[
48
+ [keyboard(i) for i in range(1,5)] ,
49
+ [keyboard(5*i) for i in range(1,5)],
50
+ [keyboard(50*i) for i in range(1,5)]
51
+ ]
52
+ )
53
+ def admin_keyboard_days(old_action):
54
+ def keyboard(days):
55
+ return types.InlineKeyboardButton(
56
+ text=f"{days}",
57
+ callback_data=f"{old_action} {days}"
58
+ )
59
+ return types.InlineKeyboardMarkup(keyboard=[
60
+ [keyboard(i) for i in range(1,16,3)] ,
61
+ [keyboard(30*i) for i in range(1,5)]
62
+ ]
63
+ )
64
+ def admin_keyboard_count(old_action):
65
+ def keyboard(count):
66
+ return types.InlineKeyboardButton(
67
+ text=f"{count}",
68
+ callback_data=f"{old_action} {count}"
69
+ )
70
+ return types.InlineKeyboardMarkup(keyboard=[
71
+ [keyboard(i) for i in range(1,5)] ,
72
+ [keyboard(i*5) for i in range(1,5)],
73
+ [keyboard(i*50) for i in range(1,5)]
74
+ ]
75
+ )
76
+ @bot.callback_query_handler(func=lambda call: call.data.startswith(f'{admin_hash()}create_package'))
77
+ def create_package(call): # <- passes a CallbackQuery type object to your function
78
+ from . import Usage
79
+ try:
80
+ splt=call.data.split(" ")
81
+ if len(splt)==1:
82
+ new_text="package size? حجم بسته؟"
83
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_gig(call.data))
84
+ bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
85
+ elif len(splt)==2:
86
+ new_text="package days? چند روز؟"
87
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_days(call.data))
88
+ bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
89
+ elif len(splt)==3:
90
+ new_text="How many? چه تعداد؟"
91
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_count(call.data))
92
+ bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
93
+ elif len(splt)==4:
94
+ gig=int(splt[1])
95
+ days=int(splt[2])
96
+ count=int(splt[3])
97
+ new_text="Wait... لطفا صبر کنید"
98
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=None)
99
+ domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
100
+ for i in range(1,count+1):
101
+ user=User(package_days=days,usage_limit_GB=gig,name=f"auto {i} {datetime.date.today()}")
102
+ db.session.add(user)
103
+ db.session.commit()
104
+ # bot.send_message(call.message.chat.id,f"Days: {days} Limit: {gig}GB #{i}\n\n https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/",reply_markup=Usage.user_keyboard(user.uuid))
105
+ bot.send_message(call.message.chat.id,Usage.get_usage_msg(user.uuid),reply_markup=Usage.user_keyboard(user.uuid))
106
+
107
+ # db.session.commit()
108
+ new_text="Finished..."
109
+ bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
110
+ bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
111
+ hiddify.quick_apply_users()
112
+
113
+ except Exception as e:
114
+ print (e)
115
+ # import traceback
116
+ # traceback.print_stack()
117
+ # new_text=f"Error {e}"
118
+ # bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
119
+ # bot.answer_callback_query(call.id,cache_time =1)
120
+
4
121
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
122
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,125 @@
1
- # 2023-04-08T16:23:31.921632
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xfe\x13\x00\x00\x12\t\x04\x00\xedE\xabk\x03\x02a4\xc7\x9eI\x83\x07M\x97\xd2\x00\x00\x00\x00\x00\x00\x00\x009\x16\x1a\n\x1e\xa8\x97\xab\'1KT\xe1\x079\x94\x0c\xd2\xe3N/o>\xb0\xa9E\xaa|\xc5\xd9\x942xSB\xcf\x04HE0\x98\xc8\x87Z\xd2\xf3\xce<\x10{\x89\r\x83\xea\xba\xd2\xad\xd6\x83&Z\xe5\\\xeb\xc6o\xf8"\xcdmyXZ\xeb\xfc\x9e\x81\xf5|\xb0\xf5\xca}\x92gr\x89\xf1\xd6\x08\xf5\xb0\x84\xffcu\xef\xe3\xa2\x89,\xc3_\x9fVj:`\x1aK\xd9\xef\td\x9cC\xab?K\x9b\xf0<\xbb\xf8`\xe0\\\xb4,\xfehA\x04\x86M\xacQ\x80\xcd\xaa\xa1\x1b\xcc\xcdi\xfb\x19-\xde\xb4\xf7+?,\xecN\xe1\xd8P\xc7\xb9\xe80\xb3\xdf\xa8/P\x07\x0f\xa6\xf0\x7f8U\x91\xedeZ\x1fMex\x98\x91O\x1b\x0f\xa2$,\xc1\\\x96o\x03\x88\xe19k\x7f\x01\xa7\x8e\x1356\xb2\\AG\x17\x13b\xaa\xa0\x07\xe5\xa8\x97\xbd>\x8e\xffK\xbbe\xb3K\x934\x18\xc8\xc1\x8e\xa0\x16\x89[\xa8|?0\x14\xfdX\xe4%\xd7\xbbG\x12\xf4N\xe4<\xfa\xfa,\'}s\x7f{E\x85\xca\xd2\xc8A\x996\xe2\xce\xbe\tt\xc4\xd5\x17\xd7\x15\x8d]|\xee\x9f\x99\xf5~\xf1\xf6\xa6\x8c\x165\x11\x00\xb0D\xb1f\xb5\xbb[i\xb0c\xfa\xc6\x11\xb5\x0c\xdf\x16\xb6Xw\xc3\x8c\xe5\x1f=B\x1f\x02\x8c\x8eMc(\xbd\xb9-%\xe7&\xa8m\xd1L\x1b\x1c\x14\x03\'\x9e\x8c~C\xf8\x01\xc2\xd3\xe0\xc0\x84\x01"\xa1!\x8c\xcd\x0e\xca\xfb\x8c\x16\xf6\x071\x93\x0bt!Uh\x01\xc6Tv\xf9\x8e\x05R-\xf7\x1b]#Pv1\xe9\xba\xc3\xf9IF>\xe3\xbc\xe5\xbf2"\x7f\x934\xbe@E\xe8]qW\x18\xdb\xe2Cu\x111\x0b\x9f\xe3\xf8\xf4\xaan\xf8>E\x16\xe2\xcf$\xfc\xfc\x97\xc6\xb9\xab\xb2~\x1b\xdb\x97\xd6&tBJT\xb4\xff~\xbc\xf6\x9b\x97\x8b\xd0\xfb\xa8\x12z\xcch\xfd\xc9\x9e\x10\xce\xb8\x13\xaa\xa3\xf3\x13\x9d\xae\x0eL\x8c\xb6\x10\xfb\xdf\x12n\xe8\x0fpV\xecn\xdcw\x16\xd6\xa4\xb0\xb1\xf5\'\xff\x83\xd4\xac\xad\'\xaaR<jKn\xe8+\xdd5\xce\x8b\xbfe\x9e\xd7\xff\rGK\xfa\xf7\xeb\xdb-\xe3\x9a\xcf\x1f\xc8\xb8p\x9f)\x7f.\x1e}\x82\xee\xee\xc7Vi\xe6\xe1W|*\x17;`\x10\x93\xde\xef*\xa4\xb0)UVh\xda\xb9W\x85\xaa\x0c\x05pP`?\xf9\xa6\xb4`\x8b\xdaF\r\x9d\xf2\xc2\x98\xb3W@\xe2V\xf3\n\x08P $\x95\x85\xe2/V\xba\xd4\xe7\'\x9f\r\x96\xca\x02~\x98\x10(\xf2\x018\x16 6\xb5\xca\x1d\x9d.\xef\n\xf6\xc4\xd2.\x12\x13\xd6\xde\xa6Q\xfa\xd4\x11\xec\xb6\xbb\x9c\xe5\x16\x81\x9ek_\x0e\x95!\x80\xc9q\xf6\x8d]\x11\xd4\x1b/\xea\xf1\x144O{#\xd8%\x0f \n\x83A\xcd\xfe\xec\nA\xf36@\xd4\xa87,yb\xf0\r\xe3\xe6\xb3\xd3\x84\xafyZ\xa0Yv\x1bV\x8d#\xe1\xf2\xe1K\xfd\xd3Y\xcc\xe3@\xe3\x85\x81_\xe7\xfbF\x81\xbd\xfa2\xda?Lg\x9b\x94Ni\x1e\xee\x123JN\xbbm\xb5\xfb\xb3L\x8e\xed\xf6\x0bU\x13\t\xcb\xf7\xeb`\xdd\x1a\xa0\tW\xa8\x8c`|\xeaiSjG\x8a\xda\x04\\U\xdfu\x9e\x84\x01N\x06\xf2\x89j\xfb\x04\x15-F\xc3\x86\x92&\xb7\rE+\xd0\x16\xdc\xb4/\xa7\xdd\xaa\xe6\x1e\xc5\xe3\xc6w>\xee\x1f}\xa3K\xd5\x1eH\xa1\x14\xa8\x89A\xd2b1\xf8\x7f\x818\xb3\xc3\xf0\xfb<\x8dK\x80Tq\xe4 \xc7\xfa+Y\xe0\xa9\xf8\xda\xca\x0f\xd7\x87Cx\x94\xb9\xd9P\xfd\xa0h-\x8a\x95\xe9D3gT\xe1\xfa"\x83\x9fu\xd8\xc9F,\xf9b\x7fd\xff\xae\xa5\xae\xd4\xad\xa6\xee\xce\x92\xde\x85\x80)Sj\x80E\xe1\xfd5\x8anf\xead\x94+b\xd9C~7D\x13\xc5\x8d\x15\xa3N\xaf\xa1\x886\xe7\xea\xc9\x1f\xb2"\xc2\x8c\x80\xa0\x1f\x88\x88+\xed\x96(\xe5d1\xbb\xe1\x11\xe6\x91,8\xa8.\x14\x89\xbb\xaa\x95E\t\xc8*\xe9\xbb\x9f>\xba\x84\xcel\xeb\xd7\x8cP`\xee\x1aJpp\xda\xafU\xfe\x9c~\xfe\xee\x99\xd2`Z\r\xefy\r\xc8e\x1c\xdejc\xce\x85\\\x92\xb7ei.\xff,\x1fF\xe0;\xbb\x91^+\x96\xdf\x02X\xa7\x00G\xd3z\x8a\xe9\xd8\x16\xff\x84\x9dL\x04\x9e$>\'a\xc8\x13)\xafX\xd7\xac\xa4Y\xeb\x98hX\xb5@\x1b\xc1\xd8\x81\xe3\x19$Q\xbd\xbb\x9du\xe9\xa5\x04\xa4\xdf\xad\xc70#\x1d\xb73,\xe4\xac/|\xc8\xc3\x08\x08V\x1a\xaek\x0c\x06\xe3\nH\x10P\xe7t\xa72IM\xf3\x89\xb5{\x83\x1d\x9eWv\xce>U\x81\xe5b\x04\x1fo\x11\x14\x93\x98\x17\x7f\x97\xd6\xe5\xbc\xef\x9a\xcb\x12tyB\xdeAb\x9f\xa2\x19\x0f\xff_"\xef\x18@\xa4\xa2q\xd6\x80\x986\xb1>\xea\xdf\xf0\xe8\xa55t\xd0\xd5\xec\x84X\xa5R7\xbb\xab\xe5T7{uA\xb3[\x80\xd9q\xc6\xbfK{J\x8c\xd1S1{\x10\x15\x89Gg\xfcR\x9e]k\r\xf5\xe2_\x89w\xcah\xd6\x98\x84\xd2\xb8+l\xce\xff\x94\xccEK\xf5:e\xbb\xb9(\xbdS\xa4M\xf5\xe3\xea>U5D)\xdb\xd90EM\x1e\x9b\xa125\xfc\x02\xd3\xd8W\x80%|\xcb\xc1HJ|\xd4\xad\xe1\x11\x97\xf2`:\x8e\x0f\xfc&\xfa_\xcc\xed\x02\x9b\x85\x19\xd6h\xb5\x13_\x84{\xea.@\x91\xf7\x04O\x9b=\xaf\xbajj\x14\xd6\xf0\xda\x956\xf7\xc3\xd0\x1dp\x7f*\x89\xd5\xd7\x10d\xdf\xc8\xe90\x98\xa6\x0e\x1e\xd1\t\xae\x04&\x10\x1e\xc0S\xf7\xf2\x14\x82\x83,\xdd\xc3Q\x15\xdf\xcb\x9b\xf3\xbd%}\x91\xd5\xd5\xb9\x94\xdf7\x14\xb0\x06#]\xf2@\xfb!n\xdf\x189\x10D\xf1\xa3%9\\\xfd^\xd2>\xbe\x8b@\x83\xaf\xfe\x1c\x85[\xb8\xa7\xfay\x1a`\xb6~G\x95=\xa12\xe3\xa4\xf0\x95\xb4\x88\x80kC\xf6\xbfl\x14\x92\xed\xbbB\xd8\x8c\x8f\xd1\x0cZ"\x92\xe3$`N\xb9\xa1f\xec\xc32\x13o\xd75\x0b\xa3\xbfZq\xdf?\xcc\x9f\x16\x10\x98*\xe8\xf7\xf7\xcf\x8dU\xf8\xe2\x7f\x06\x87\x83\x96\xc4i\xe8S\x90\x979\xd8`\xeb\xba\xa9\xeb\xbdKH\x96\xb4\xa4\xb0,s\x0c\xe36Nk\x8e&\xc8\x9a\x90\x92!\x1f9\xa6\xa2\x91\x8f\xf1\x1f\xb4\xc1\xb9\xf0\xbd\xb1\xd6o\x04\xe6\xdf\xae:\xd2t0\xc8\x06(E7\xf1\xdd\xe5\x84\x8dp\xf4\xe7s;\xad\xf9\xc2\xe3)\xbc\xcf\x1a\xbaU\xa1\xe3B\x97\xfff\xc2\r\x0cS,m\x08\x01?(V\xeaM\x19j\xa0\xb1\xdd\xea\x8fC]!be\x85H\x07\xf7P3\xe4\xb9\xcc\xceo\xdc\x9fny\xbf(?>\xf1\xbd\xe4.\xa5\xfa\xfb4\xbb\x02\xd9\xc3\x9c\x13\xca\xe9\xfeN\x9a\x95\xc7Y:\x18@c\x956\x1f\x06e\xf4l\x961\x924Mvt\xe0\x9a\x8a\x9a\xe5\xa1\xc4\xe8\x90\xe9J\x8f\t\x1d\xb8\xa0\x8b_\xdb\xe7\xc1Ys\xbd\x8a\xb0.(Mv\x7f\x17\x9aTBV\x13z\x00\xa6\xd1\xf1B\x1et\xea\xa9\xbd\x01\xde\xb0\xb07\xd4pd\x96\xd6x\xce\xeb\x9a\xf4\xc1\xa7\xac\xcc\x96\xca28\xffX\xab\x13B$\xd9\xbb$\xb7\xe9\x9b.\x8eX?\n\x1f\x18\xc9#\x8e\xe5.\xa8q,5/\xfb\x91\xdbX#\xb3\xa50wYc/h\xc8y\x7f$>\xcf\x8d\x94\x18\xa4\x19\'\xd6j\x82\xb1#\xbfb\xfa\x02]\xa2U\xaf7\x96\x82D-\xd9\x82\xdd\xc1\x1b\x12\xf2?\x13&yA\xa5<\xd0$\x95T\n\xcf\xcf\xa7\x91\xf3\x0bN\x1eP\xfcB`\xf4\xee\x81\xbc\xaa\xe9\x1c\xe9\xd5}\xcc\x90\x9c\x94\xabl\xdc\x94\xeb_b5\\\x18\xbfI\xb2\xd2<\xc3\x0b\x95\xe4\xbd\x98\x0c\xdb\x14\xe9F\x05F\xe2\x14\x98\x08\x84\xd3\xdf%%\x90\x01\x9bU\x9dJ\x0fz\xcd<}\xf9O\xc7\xdd\xfcw\xeb\x1f\xd8\xa4?\xe5yF\x98\x9d%\x1b\xeb@\x83\x07YV/\xa2\xc1\x98u\x9fp\xce?A\x1e\x8e\xf2\x94J\xe2\xd0\xcfIb\xd9\x97\xa1B\xed\x10\xfe\x91\x05\x02ykN\xc9\xcc\xd6\xf0N\x88\xdc\x04,\x97\xb1\xd7\x90\x9a\xda\xca>i[\xf5\xcd\xd4\x1c_\x97\xdc\xfe\xbb\xbc\xb7\xdc}\xc3\xfcu\xbd\xa9}\x8e~\x81\xc8l\xde%^`\xc8\xd6\xca\xd6\xa8\xe3,7\xa6\xf2\xbd}\xec\xa1\xa7\x05:m\x05\xedH_"\xb7i\x9e\xcd\x82)C\x15k\xe6\'\x87\xf1\xf2\r@^\x12\xd5y<\x16\xca\xa3\x0c\xd5\xdb2a\x9f\xb4\xc6&N\xa9\xbd\x0fF-\xc0\xb1J\xb7\xec\x8f\xbe\x86\x9f\xb495\xb5I\x120\xabm\xdb*\x93+A>\x88\xea\xebL\xee<l\xc2p\x12\x8d\xe7J\xbc=\xa1bp1\xed\xfeY-\x86\x8er\xeb\xe7J-\x83\xf6"\xe3\xe8\xaf;7s3$<\xe6Z\xe1\xec\x9bF=\x92\x96\x94\xd4Hk?6\x96j[+)\xa1&uWK\xc4e%M"K\x9b*r\xcb\x1fJ\xf5\xb3\x9d/\x12\x15y\xc1"\x98\x15\x81Q\xbb\xea\xa8\x7f\xf1\xffd]\xcd\x96\xcd\xd0\xb0\xdd\xd4\xb5I\x02\xba\\h\x18\xd9J0\xc6\x02b\xdb\x90\xce\xdfc\x81\xf1_\xf4\xda\xe4\xbd\xf0U\x08\xa1\x83f\x8c\xbb;\x95\xd2\x03\xf4\\nR D%\xd7P\x0e\xf2}\xf1\xb293B\r\xfc\x0e\x1f\x18-H\xc9h\xd6\x1e1\xdcV\x1d\xee4\x9b\x89D\xf8\x90\xa1T\x9dJ\x93\x90M\xd7\xd2\xfeM\xc2U\x94b\x8c\xf5\xcd\xc5\xd1\x1c\x92f r\xe88|\xe1\xa8>"8\xd1\x04\xd3\x1a`9\x808\xd6\x1a\xee\xceG=\xb1X\x07\xc6\x12\xdb\x00\xef\x8e\x98\x1b\xbe\x1f\xb44\xde\xd7wN \xc5\xd4\x14\xdb\x1dQ\x06cj\xa2\xc6\xca\xd6\x14\n\x1eL\xd6\xe2\xf9\xfc*\xd0\xab\x1d\xa1\xfc\x89\x8c!\xd7\xb3\x8f}\xa7R\xa0\t\x1c\xfd\x0f\x16 \x97\x93\x0b\xe0\x15\xea!\xba\xd00\x02\x94Y\xd5\xdc\xf4\xad\x19\xdf\x00\x11q\x1a;o\x85\xa2\xd7tO\x0c\xa6P\x16\x83\x1f\xef2\xa6\xa7\xb5\xf2\xeda\xd1\x93!\x13o\xfb&\x13\xb9\xf2\x81\xda_c\x9b1\x9b\x9d\x16\x9b\xd4X\xec\x07^\x91`\x15\xee\xd8`\xe3\x95T?}1\xdc\xd1\x8f)\x87\x89\xb5&\x9b\x17\x12=\x8e(Y-}\xbc+\xd2x[\xe4\xb1\xcf\xae`\xa4j=\xe4\x80\xf87B#-\xc1\xd7\x1dkOI\xb8+\x86;Y^=\xdd[%\x1b\xaf\x81\xacw\xdcV\x92M9\x91;\xf9\x876\xa83 //\xd6D\xc6,\xf2\xf4\xe2\x0bI\x1e0\xd4\xd2\x9b\xf1\xac\xae\xae\xf4\xd4\x0f\xfc\x92<C&\x9d\xec\xc2"U\\B\xc3\x98@;\xef\x9b\xc1\xc2\x96T&\xae)\xfb0\x1e\x00\xc8\x14\xb3\x14\x17\xbe\xd8\xb4@\tj\xe8\x89gS\xd0\xd9\x18\xbb\x1e;\xf9ky\xf8\x87\xd9\x1a\xa7\xa0j~\xa0P\x05!Mlo\xf3\xb0\x8e\xe3\xa9\\\xa4g\x1f*(\xccr\xc9Y\xd9\x9e\xc2\xffx\xa4\x12\xb8Z\xe0k\x87\x95l\xfc\x92\xd7\'\xd0\xa1\xac\xd7\x96%\x9d\x85\x0cBP\xb7E7\xf4]\xa4\x89w\xab\x0f\xec\xecd\x1d\xb9s\x8eS \xb7X\xdb\x88[,\xa76\xb0\x90\x9e\xebhB\xd2\xd9=c\xca\x0f\xb9\xbak\xe8\xb1\x02\xc5\xaf1S\x9f0\xd9\xdc,\xe8%u \xb6\xefF\x9a\\\x1f\xc0\x89Y\x7f\x81\x08\xe4\x1b\x02I\xcd\xbcm\xc3\xc8\x0ft\x84iF\x9e\x8a!\xb7\xb1\x91|\xf38<_\xdcb\xa9v\xfec\x88\xf4\x8c\xba\xcd\xaf\x99\xd6\xf5\x1d\xde\x03\x92*F\xa4,\xc0/\xde\xcfLi\xbc\x95\x17\xf9\xacnY\x0e\x0fG\xe6\xe7\xde\x13~\x0cy\x9a\xa6\rq\xbf\xe4n\xb5\xc8\xfb\xa7\xda\xf7\xc1\xb1gO\xb9i\xd4n\xf5\x8e\xd4!3s/>^.Q\x18\xeb$R\x99\xeb1\x86{K\xe8\x014\x1fU\xf5\xd9\xa8\xa9\xb3\x14\x9dI\xf4\xceLJ\x93v\x16\x93\x9eI\xc4k\xe6\x89\x9dc0Z\xe3`\xcd\xc9\xa2\x884:\xe9\xaa\x9d\x97s\xe0ec!\xe7\xa6\xe8\x06\xe4\x94qm\xab\x8a\xe1%7\xea\xbc\x83w\xd1OR\xb4;\xae\xe5\xbbw\xb9\x90\xad\x80\xdcEA\\6\x9a\xd669\xfa:5\xe3\xfeLF*\xf0\x13)cLb\xffE\x81\x86\xfe\x821\xd1\x80ez\xbe\xcf\xa6\xd5\xcd\x8f\xe9E\xcb\x89x.3\x8e\xf2\xfc=oB54\x8e\xd9v\x10\xe7\xda\x91\x8e+\r\xc1(\x83\x1bH\x0cT>\x8f,\x8b\x82\x18\xa8\xda\xe7\xc41Vn\x05n\xd4\xf1\xb88EJ\xabU\xa5\x01\x1f\xde\xce\x8d\xb2\x8c7L\xc6\xe82nE,s\x81\xda\x8dl\xf6\x99\x17I\xca\xcf\xa8\xaf\'"\xa2+M`}\xdc\xb5\xc3\xdd\x80v\xe3=\x19m\x80\xa2\xce9\xd7\xdb\x03\x80\x89I\x80\xd6`\xd8\xaa\xa9\x1e\xb9\xf9\xaeFh@\x0b\xb62\xab4\xcc\xab\xf9\xc1Tr\xbd\x9c\n\x1d0y\x8f\xb3\x10\xe9\xb8|xZ\xd0\x8c\xdf\xe0:\\3\xf7\x02\xa8G\xd8p#\x92\x08\xd4\xc4\xae\ru\xeb!\xd1vb\x13*\xae\xb4q?\xa2\xda\xb3\xc3\xcasjT\x85\xef\x8aG\tw\x87\x17\xdb\x87\x07\xf2\xe51\xe8\xc4\xd7\xc1\xdd+\x90\xc9\xd9\xf9\xd3\xa1\x0f^\x82\xe8]\xb553\xb0\xc7\xa4q[\x15\x83\xd4V\xd246\xc5H\x85\xd3\xd0=P\xbf\xd5\xc1!H\xfef\xb8\xc5Q86\\#{p\xb5.\xfd\xfa\xac\x14\x9a7\t7\x9b]e\x04\xc5K\xc7PGN]\x8b\\R\x7f-{|\xdc\xc4\xf1\xa4\'Y9\xd6_`\xe9V \xe5\xa2\x03\xe2\xbb\xa5\x9bvQ\x9d3U\xe9\xcb\x06\x1e\xb8\xec:\x1e\xee\x14\xceC\xd8\xc7\x1c\xe2\xff\xeaPF\xa0|\xc486p\xb8R\xd80K\x1b\x94\x9aU\x98Q\xa1\x86k\xd1n\x15\xf9\xa24\x1e\xe4\x13\xcb\xf2\xc1\x81h\x84\xbd\xb6\x1f\x06\x13.\xc6\x03b\x02\xf9Z:\xf6\x192\r\xb7\x89m\xb7*:#\xeb\x81X\xcc\xf22.\xc5\x06{;\xfe\xc9\x919\xc2\x9a\xd5E\x8d\xf9\x0f\xd0\xa9\xccv\xd8\xde\x96\x04\x1cm\x9fn\xd2*1\x92,\xfc0;M2\xd2\xc7(\xd6\x1f\xa4\xa9\xc2@\\/<\xdf\x14?\xea\xab^:B\xa3#\xed\xb9j\x17}\xbd\xbe$!\xe3\xb7\x05i\x90w\x8f\x10\xfc\x95:\x0e.\xcc\xc3\xa2w\xff\x10D\xc8`T]ql\xe8\x07t\xb1T~\xc3\\[\xa5\xfaJ\xb6\xae{C\x7f\xd6X\x89e\x8e\xda\xc4\xb8\\\xe1\xa1\x12K*\x8b\xa2\t]\x9e3\xc0\x91\x18\xc7\xf0\xd0:V\x08\n\xae\xa5\xd4\xf02P)W\x9b\xe3\xa6\xf9\xfe\xa6v\x14\x18\x9d1\x86\xeaik\xad\xfe]L\xfe\x1b\xe7\x0c\xc2=\x98\xa6"$g\\\xa18\xc9\x11@kr\x19\xac4\x1b\xc4\x06,\x88\x7f\x84\xb3\x80@\nf\x80kv\xb8Q\x1bzp\x8f\x9b6\xb4\xe7`E\x08\xd1\xb8\xcc~\xa5\xafS\x0bNL\x15\xf2\x17\xa2\x1c\x90\x17\xf7\xfa\xbb":0\xeb\xc8\xd1 >\x8d\xac\xb0\xcdZh\xd1RRT\x16Sf\xd5\xf0\x9f9H\xde\xe4G \x12k0DsY\x8c,e\x90GqT\x04\x8f\x14zQ\xdaYC\x13z\xa0\xe5p\xe2\xe5\xcd\xcc\xc3uY\xf7\xf0\xcf\x9cT\x93\x7fd\xd2\xb3\xf4\xd1\xa4\xa2\x8c\xee\x1a@\xfcY\x1e6\x12St\xd1,Tf\x91\x04\xa1\x8f\x83=\xd7H\xf7\x04\x11\x17\x92\xe9\x98h\xe7\x87,\x10`UN\xc9\xf2\xea\x8fg\xfei\xbfL\xa4\x04\x97\xe5\'\xca\xb9\xd8\xad\x87\xd2h+\x8bH\xac\x0f\x96\xaa\x10\xbdOPB\xcc1\x94\xdaL\xe7\x9b\xbb\xb7\x9fk\x8c+\x86\xf9\xd0l\x89\xa0\xfb\x14\xb3i\xdc\xb0\x1a\x9a\xacI\x18\xe4\n\xd6\xc5z0\x1b\x80\xd1\xf04\xb0\xd3\xc1\x8e0\x8f4\xc6\xff\x82}ZC\xf9\xa8\t#\x13\xa2&\xf3&\xfdQK\x1e\x7f\xd1\xa5\xf1\xd7\x87\x88bg\x05\x15#$.\xb1Y\xaa\xde5&\xacm&\xf6,\x8dD\xce\x1bv\xc3?v\x13g\xcc\xc29\x1a3\x1bLq:\x92t\xcc\x0cb\xd2qn\x14\xfa\x91\xca\x07\xf3\xf9\xe9\xe7\x13L\x7f\xac.a\x17\xec\xe5d\x91\xa2\xbd\x16\t\x82)\r\xe9\xd0\xde\xe7\x9a9\x02BH\xf5P-\xe7\xb2\xc3\x96NB\x8d\x7fF\xf5\x96\xe4\xe1\x85\xc0bY\x1cB\xeb\xa8L\xbb\xf1\xb9\x15h\xa0:\xc4\xd0\x15\xc6\xce\x997\xfb$\xeb~\xcd=\xf1\x7f\x1a\xf7\xb4@{\x16\xee[\xeah\xdeO\xc6\\\x7f)\xf2\'\xd4\xcf<\x1d\xe7\x89\xe0\xbe\x1d\xe3\xc9S&\xd3\xc3\x92)\x1bXPc\xc8\x83\xb9\xbb\x87\'\x89\xdfPqy\x08\xb1\x0b\xcc\x0eT\xd7H\xf7\'~\xbcH\r\x87\xa0\xd4\x0f\xb7\xdd##\xed\x8fz_\xa9\x0f\xd6\xf0\'\xf2e4\r?b\x98\x87\xe7\x85\xe4\xe4\xd3\xf6\x9b\x81\x98\xdf\x0er9<\xd0\xbd\xcbaS\x1dK\xfc\xd6\xe9\xce\xc7\xdeW\xa3.\x16\xa8{ \xc2 \x08\xb6\x9e\xbc\x16\x95\x9do\x1b\xf1\xcb\xc4\xf3\xad{\xddiZK\x12\x83\x92\x86J\x1c%\xcf\x95?_\x0cS\xfb\xc7W=\x06\x8enpUz\xf4=F1*\x95\xe40\xd5o\xf8\xef\x01\x0b\x8e%\xfb\xd1\x08\xfe&\xcf\x8fz\x1e"&r\xf7)]\xc37\xc3\xc2z\xad\x8c\x8ea\x1fL\x8fpQ\xeb\xe0m\x8b\xd7\xc2\xdf\xe9\xdb\x82\x08\x95\x02\xc0\xbe\xc4\xc9B\xb9\xbb2\x19\xdcw\x8c~LI ]\x96O0\xfc $|A0\x005~<D\x9fS"+\x0e\xb1Z.\x9aa`m$]\x0f\xa7\t\t1P\xb6\xa5h\xb7\xf6\xb5\x8f\xb7\x86\xd5\xa6\xb3\x01L\xb8\xa7\xb6\xa7cp9k\x9d$\x81\x8a\xcd\x18\xd5=\xbc\xc4\x83\xe2\x816\x13\xf7!\xb4\x8dF\xad\xc8@\x85x\x16?\x83\x8f\x05}?\xd2{\x1au_G\xa5%&Q\x11`j\xad\x90\xbcJ\xe1\t\x85\x81\x90\x1e\xcc\x87\xf3\xbb\xaeZTt\x02\xabr"\x06\x13\n\xfa\xe7.<d\x9cp\xd1D\xd5\xa2\xe9\xb8\xcb\xdf\x1b\xa1\xd7P \xb0\xa0\xb8^#\x85v\xd5\x00\x1bX\x81\xd42\x1c\x1d|\x98gTb_\xefe\xcb\x9f#\x18\x98\x1f\x99M\xf7\xb7tob\xc87>\xb4q\xb82Du\xe5I{U\xb2\xa5}\x9f.w\xde\xbb\xb8o\x82\x01{\x87\x02\n{\x98|\x16\xba\xacx\xf6P\xf1M\x89\xdf\xe4\x17V9d\xfa!~0\xa0\xb0\xb7\x91\x1f4\xda[\xc7J\xd9\xa4\x05\x91\xb6\x12iR"Gv\xd8\xf4P\xc0T\x1b0\xdd\xdbQ&\xf6&E\xc0\xd9;x\x1e\x83I\xca2\xbdNg\x88\x8di\x119\x1d\xd7\xb2\xdc\x86\xa2\xbf\x18\x1d\x0f\xcc\x92p\xcf\x8aX\xec=\x0f\xad\t?\xb3\xa3n,\x01>\x95\xa0\xe5\xf0\xf0rI \x80@#_7\x93l\xd4\x94\x0b\x062\xdc{4\xcau\xadv:GV;O\xe4\x0b\x9a\x89\xb4\xd7\x9c$-\x1aR\xae\x83\x1b\xed\xbc\xe4\xa3\xa2 \xcb@\x80)\xdf&\xfcC\x90\xc4@\xdcQ-b T\xd3?\xa9\x13\x82D\x98c}\xd5\x01\xa2\xda\xa3\xcfq5xg[\x89\x9e\xb9\xb0\x8f\xea\xf6\xb9FaH\xb2O\xb7\x86/.!\xdcR\xa7\x9bc@I\xd4\xf7\x9e\xca\xf8>\xb55\xf0$\xa9kpfUG\x7f\xe2a\x12\xef+_=p6;\xc2\x0bNj\x1e3\xd1e@\xcby\x1b\x80H8\x80@\x00>\x1a\xc5*\xc1:@/V\xfe\x84Y\xbe\xce3\x92\xbd\',\xc4\x16\xab-u\xdck\xf5w}\x84k\x8e\xe0h\x03"\xe9-\x85\xa4\xbe2\xf0\xf6\xb9\xc8x\xbf$\x16\xa8iqu\xf4\x01\xbc\xe8\xc2\x82\xae\x08+\xaaPg\x13vZ\xeb\xb2\xf7L\xbc\xa3\xfcj\xae\xb3\xd7\xf6\x9e:\x04h\xa0.\x8a\xf54\xc8\xb2\n>\xda7\xb1\x1d\xe6\xed\xa7o\x93\t\x1a\xa8\x9aR\xfa|\x84+\x83\xf1"\xd4Sa\xcf\n\xc3\x9a$\xebO\x97\xa67\x81\xcc\x03\xa5\xb1\x85\x9b\x11c\xc016\x84{\xc3\x1e\xd7-,\x07iN\xbd1\xda\xc5\x06\x1d\xa5\xa0]\x14\xad\x83qz5\xf6\x03)\x9c\x0c\xc6\xb5T\x1a\xae\xb4\xdd\x82\xe5\x1d\xecI\x95\xb8C\x9d\xf85\xb7\xcd\xd45?$;j\x11\xef\xdd8\xfe\x80\xfc\xd0:M\x0e\xbfCA\xbdb\xcb\xd6&\x19\xb8\xe2\x1ag\x8dQ\x82?jH\x03\x84\xf0\xd8\xe6\xcfS\x88;\xe2\xa5\xb2s\xfdY\x88/f5\xde\x00<?\xd5\x87\x1d\xcc.A\x02K\x0b\xd8\xd3\xc3\x88\x01%\xc9\xa9Pkw\x13\xe8{\xf5\xe3j\x86\rt\xe2\xb0/"\x99\x82\xc2\xd1\x84\x86\x9f\xf7\x1b\x89\x1c\xa2M\xcb\xc6\x16\xd2*\xc5\xe2\\A\xaa\x98\xe8\x8fv)\x1a\xcb\xe5\x16b\x8b\xcc7`\x93\xe1\x8d\xa6o\x06\xb4h\xc7P\xe5K\n%y7\xde\xe2\x13\x08\x84\xe8\x11\xb0\x82:\x1cf\xa6<w\x89\xda1\x99\xbb\x869_"\x8f!\xb3\xc4\x8e\xf7B\xbb\x0e\xa5\xdb\x01o\x1d\xe0\xfe\x85\x99\xa6Gq\x93\x06\x8d\x1f\x1e\x9c3\xce\xddK\xe1\x04\x8d\xbc1]\x7f\x82\x91^\xc3`\xafQ?w\x96n c\xe9\xbbI|tl!!\xf1\xb4q;\xef4U\xf6(\xb4')
1
+ from flask_babelex import gettext as _
2
+
3
+ from . import bot
4
+ from hiddifypanel.panel.user.user import get_common_data
5
+ from hiddifypanel.models import User
6
+
7
+
8
+ def prepare_me_info(user):
9
+ """
10
+ Prepare response to the "me" command
11
+ @param user: User instance
12
+ @return: A text message
13
+ """
14
+
15
+ response = _("Dear {}\n\n".format(user.name if user.name is not None else "user") +
16
+ "Your hiddify information is\n" +
17
+ "UUID: {}\n".format(user.uuid) +
18
+ "Last online date: {}\n".format(user.last_online) +
19
+ "Expire time: {}\n".format(user.expiry_time) +
20
+ "Usage class: {}\n".format(user.mode)
21
+ )
22
+
23
+ return response
24
+
25
+
26
+ def prepare_help_message():
27
+ """
28
+ Prepare response to the "help" command
29
+ @return: A text message
30
+ """
31
+
32
+ # command description used in the "help" command
33
+ commands = {
34
+ 'hello': 'Get started with the the bot',
35
+ 'help': 'Gives you information about the available commands',
36
+ 'info': 'Return information about your usage',
37
+ 'me': 'Return information about your account'
38
+ }
39
+
40
+ # generate help text out of the commands dictionary defined at the top
41
+ response = "The following commands are available: \n"
42
+ for key in commands:
43
+ response += "/" + key + ": "
44
+ response += commands[key] + "\n"
45
+
46
+ return response
47
+
48
+
49
+ def prepare_hello_message():
50
+ """
51
+ Prepare response to the "hello" command
52
+ @return: A text message
53
+ """
54
+
55
+ response = _("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
56
+ "Welcome to hiddifybot.\n"
57
+ "Start by clicking the link on the panel or entering your UUID.")
58
+
59
+ return response
60
+
61
+
62
+ @bot.message_handler(commands=['me'])
63
+ def command_me(message):
64
+ """
65
+ TelegramBot command "me"
66
+ @param message:
67
+ """
68
+
69
+ text = message.text
70
+ user_uuid = text.split()[1] if len(text.split()) > 1 else None
71
+ if user_uuid:
72
+ user = User.query.filter(User.uuid == f'{user_uuid}').first()
73
+
74
+ bot.reply_to(message, prepare_me_info(user))
75
+ else:
76
+ bot.reply_to(message, "Please enter user_uuid")
77
+
78
+
79
+ @bot.message_handler(commands=['help'])
80
+ def command_help(message):
81
+ """
82
+ TelegramBot command "help"
83
+ @param message:
84
+ """
85
+
86
+ bot.reply_to(message, prepare_help_message())
87
+
88
+
89
+ @bot.message_handler(commands=['hello'])
90
+ def command_hello(message):
91
+ """
92
+ TelegramBot command "hello"
93
+ @param message:
94
+ """
95
+
96
+ bot.reply_to(message, prepare_hello_message())
97
+
98
+
99
+ @bot.message_handler(commands=['info'])
100
+ def command_info(message):
101
+ """
102
+ TelegramBot command "info"
103
+ @param message:
104
+ """
105
+ print(message)
106
+ text = message.text
107
+ user_uuid = text.split()[1] if len(text.split()) > 1 else None
108
+ print(user_uuid, text)
109
+ if user_uuid:
110
+ user = User.query.filter(User.uuid == f'{user_uuid}').first()
111
+ information = get_common_data(user_uuid, 'multi')
112
+
113
+ bot.reply_to(message,
114
+ _("Your hiddify instance information \n" +
115
+ "Domain: {} \n".format(information['domain']) +
116
+ "Usage limit: {} GB\n".format(user.usage_limit_GB) +
117
+ "Current usage: {} GB\n".format(user.current_usage_GB) +
118
+ "Expires at: {} \n".format(information['expire_s']) +
119
+ "Remaining days: {} \n".format(information['expire_days']) +
120
+ "\n\n Happy using \U0001F389 \U0001F389 \U0001F389 \n"
121
+ ))
122
+ else:
123
+ bot.reply_to(message, "Please enter user_uuid")
4
124
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
125
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,100 @@
1
- # 2023-04-08T16:23:31.383786
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x85\x11\x00\x00\x12\t\x04\x00"\x98\xa0y\xbf\x9c\xa0X\x9c\xcdz~\x19\xe1\xe8\xaf\x00\x00\x00\x00\x00\x00\x00\x00+\x8ea\x02\xf5\xf4\xad1))n1\xb4\xb5\x10\x0e"\xcbj\xaa^\xeb\xd6\xa4\xc0{\xf4F\x04V~M4\tq\xd4Wf\x91\xba\xfa\xc5e\xd8\x1d=\xca\x1bM\xe1lL\x86*\xf8^\xf1+u\x90\x12\x02AS\xec\x13+b\xffg,\xb3N+\xcd\x1b\x87`\xe0\x15*\xf4u\x1d\x8b4\xc5\xb4^x\xd6\x16sj5RkF\xeb\xdbD"\x13\x05\xeb\x9dc\xc0\xb9\x9c!$\x02\x97\xfc\x17\x00D\xe9\xb7\xb4\xe3\x9e\x88\xd5\xb8J\nO\x95\x87\xd5\n\xb2\x86\xda\x88\xb6\x12\xe3\xc2E\rh\xd0\xe7\x84\x05`\xbd\xb7,O\x85\x05\xcd6y\xc8\xbe\xb0\\\xdc\x85\xee\xaa(\x03\xff(\t\xb4\xee\xb3\x97U\xf6\xa5\xfc\x82"\xe6\xe3\x1c\x8b\xfeoG\xfe\xe6\x0b\xaaZ){E\xd3\xd8A]\x90g\xd6i\xa2\xae?\x88\xf8\x04\xd7$\x84J\x84\x8fQ\tf\xc1\xfb;`\x08\xc0g\xd7\xd5@r\n\x7f\xd9\x0eS\xd9\x9a\xf3\xc0\x08q:E9\xf0\xef\x91\x89\xda\x13\xca\xd6\xa2\x96uA\xc9\xdd{\x06\xd0\xc7\x98\x98\xacJ$J\x83\x1a\x98\xaf\xf6\x1b(\xed\xa9\xce\x1eW\xf3\xf7\x8c\xe9j\xab\x94\xfb\t\xfeC\xcan4O\x9b\x9b]\xb2L\xea\xad\x04\x0b\xa9\xca\x15\xaa\x07\xb8\xd3VW_\xd7?@2"~\xbd\x85c\xfc\x94s+1\xc3\xf2\x01\xda\t|\r\x7f\xfa\xad\xea\xe4\x9d\x86\xd6\x1b\xf4\xbc\xe1\xee\xe4\xd9\xe2\x01G6 ]\xb2\xed\x82\x81\x1f\xedM\x91Ly\x84`\x19\xcb\r^\xc63a\x81\xaemDN\x0f\xba\x18\xd6\x92q\x00\xe2\x06\x15k\xc4y1e\x84|\xab\x97v\x81E3\xa7\xce+*\x8a\x83\x86\x9c\xafK\x04>).`\xfe\x91\xa7\xdf\x9e;n\xca\xa5!\x1d\xd6\xbe\xba\xfd\x83\x14\xa3\xa7\x9e\xb5\r\xf8\xf8\x08\xb4\x04\xe3\xe7&\x1e\x17\xddY{\x12\x11-\x16\xb1\xa26d\x13\xfe\xa3\x927\x89\xc1\x7fx\xafm\x1048\xdf\xf6\xc7\x9e\x04\x8fI\xee\x9d\x85$\x95*U:\xc4M\x13\xe1YrM\xb6\xc4+$\xa2"Y\xb4\xbf&5++j[\xcd\x14\xe7\xee9\xf5(\x97u]\x15;\x89\xba\x00\x8d\x0e/\xc2\xdeG\xe7D\xdd\x92EQ\x0b^\xc1\xf1(\x13\x06/\xbe@\xb2\xfc\xc4>\xb1X\x01\x02\x8e\xf28\xa0\xef\xe2[\x0e`G\xf5\xef\x968\x8f]\xbdQ_\x03\xcd9\\\xa0\xecc\xd8\xd8J\x81\xb8\xe7\xf4!\xcf\xb0\xed\x11\x96\xf2O>j\x98h\x16\xcf\x9e\x9f\xaa\xcas\xe6\xa7\r(\xcf\xf8\x15R\xae\xdfn\xe4\x0e\x07\x95l\x13J\xde\xa3[\x85\xe6A\x0f\x90\xd6\xf9W\xf8(\x1f\x05\x9al\xb7_\x06 5Q\xe9\x88\xc7\xceA\xcf&\xb0\xe34\xe3\xe6\x93\xae\x10\xa1R\x83\xd22\xfd=\xffrJ\xcd\x1fX@\xc3\\\xa9X9\x9f\x07\x9b\xa3$%#\x92\xea\xe3/4\x9cO\x1b\xca\xb4M\x10T\x9fb\x93\x9b\x1a\'\xce\x15\xf5\xc6T\x160\xe24\xd5\xe0a\xe8W\xaa\x05\xb5h5UJo\xd9\xd6\xdf\xae\x85\r"\xb7\x01\x9cG\xb6\x0eS\xb0\xf0\xfd\xbf\x7ff\xb8\xd2#C3A\xc6\x99\xe3T\xbbBy,\xa2\x17\xb0P\xc4\x8ak \'\x8a\x10Ck\x1a\x9d\xe8\x87&\xd3\x0c\x06\xc8\xda7}\xdf9[{0W\xb3\xd4\xe2g\xc0>\xd9lB\'X\x1f`\xf3\xe5G\x8c2i\x11\x19\xb97m\xd7\xc6\xf5\xb0\xfa\xecx\xb61\xb8k\x8b\x9c\xdd\x1fW\x01G\x82#\xc5\x82\x99\xd6U\x95#\xac\xf4f\xe2\xde\x91\x9f\xcb\xe2\xde\xbbN\xbe\xc1\xe2\xdc6\x81\xf4U\xd6Y"e\xb6\x97\xbd?<\xc3\xce\x1a\xbb\xecd\xdbY\x85\'\xfa\x92uJ!J[\xbf)\xb3\xaa\xda\x84T\x9fe\xd4\x90\x81\xdf_\xf6oi*\xe9W\x11\xa7\x1b\xf1X\x1aQ]\xe2l\x92[\xbf\xac\'\xf9\xf1\x02\x82{\xdb\x9c\x84\x8fF\xb9\xf6\xa9\x19k\x07;0,\xb6\x99C\xe6f\xd3\'\n\xce,4[\xe1m\x0b\x08"\x9b\xd3\xb4%:1mV\x1b\xfa\xad\x88s\x9bc\xea\x03\xac\xab\x1d\xb4r\xd1\xb2\x9b*C|\x96\x12\x96\xd8\x19\xbb\xe2~\x14\xfa\xf9\xe8\x94YkqO\xc8\x93Y\x01\xfe\xca\xcf\x1b|\x9a\xde\xec#+]\x84\x8e!\x11\xab\xb1\xbd>\x87\xfajn\xc6]\x9f\xb2\xad9\xa2U\xd4|\xd7\xda`CT\xd5\xf1\xc1\xa7\x9d\xc3+\xa9W\x1d\x98\x06\x0f\x11\xb5>\xdd\xc3s\xe0\xf7\x95\x8f\xd6\xbf\xb3u\x8e\xa4QA\xbc\x8d\xb4!\xb7\xa4Xx@\xa8\xd2\xd9\xf1\x13\x9b.j\x99%\xf1\x06\x13r\x815N1\xac\xcbx\xbf\xaf\xacc\xbbv2\xb9\xb4\xc1\xc7q$\xce&\xe2q\x84a\xcd5"CyID7\x17\x02t\xda\x18w\xccZ\xcd\xfd\x18L\xcc\xe5\xed`\xac\xc7\xde\xf4\xcc\x0c\xbc\xdc\xa1_\xc1\x82\x8b\x16\x0c\xabg\x05\x90\xe9\x99\xcd\xe3\xb7\x87\x92\xa2\x98w9F~\xf5\xb5\x1b\x05\x8e]\xee\xaf\x0c\x1d\x85M\xca\xff\xff6L\xb5\xdc\x19\x913j\x05\\w\x9byC\x80\xfb\xef(\xf2>_\x0e\xc4z\xbb\xe3mPpT(B\x805E\xc0[\x19\x8f\xfe\x1e\xe8,G\xcb\xf7BNT\xacK\x16 e1\xe2bs\x11$=&q,\xcf\xe4\xab9n\xb4\x83{\xfa\xf7#$\x9a\xcf#\xc0w\xf8PaY\xba\x87\xd7\x1d\xc5\x83v`\x833Rh\xc14X\xa7\xf5/\xb8#d\xf3]\xfc\xcf#\xc3]\x92\xa5\x10\xf1\xda\xd4\xf0\\\t\x94gJ\x07MQ\xec3\t\xd7[\x9cVF{\xe8\xac&^\xcb\x08\xad\xbb\x94\x08\xe5\xc0a\x12\x8d\x04K\x9d0\xf2\xe0\x94\\\xc7]\x08d\x98\xee\xa3N\x8b\xc2\x0f?\th\xe3\xa7W\xa5\xd8:w\xf0\xcaw{C\x06+\xca\x7f\xb9\x8a\xe7\x1b\xf1\xaeJ\x05\x8a\xf3\x80\xbcime\x08\x88\xe3\x183\x1c=\x08\x11*~ms\x08f\x92%\xd1=H@\x17\xa8\x12\xb5\x15a\xe1\x18\x0bM\xd1\x0fP\x81\x7fw\x02KMO/\xc3\x8f\xd8\xc2\x9d\x81]gP\xbc\\\xf9\xd4\xe4\x88\xdf\xe3\xb0M4l\x85\xff\xdc#c@Q\x9d\xf0\xee\xf5P\x13k8\x9e\x8b\x06\xde\xbc\xf6|\xc7\xe2E\xdf\x81\x8e\xe9\x94\xb3x\xb8!Z8\x80\xbdR\xec\x16z\x00\xa3\xa9\xa3\xf1\xc6\xb2\xb4\xde\xc03\x94\xdcy_\xa4\x94"\x8bV\xec\x87\xeb\x9c\xb0hY\xcb\xc3\xf7\x95\xab\xec\xbb\x10U\xc9E\xb6mK\x12\xf5\xe4\xde\xe7\xb7\xab\xbf\xc3\x01T\xb5:\xe3\xd6\x19\xb2\x00W\xb0\x03tG\x99\x90\xa2t\xf4\xcc\x03\xb1$\xd33N\xb4\xddM\xcfm\xfeL\x99\xc5p\x1b\xcdI\xf2\xa8\x0b1\xdb3\xd6"\xf5\xc2\x95k\x1a\xe3\x12\x04\x04\xe4.\xfb\x0f\x90\x8bDBL\x11\x1c$\xcc\xfa\x81\t\xb5\xc7\x8b\xfa\x9dA\xbf\xc1\xe9\x0e\x1amS\xf3\n\x8b\xb2aG\x8c\xbf\xe5\xdd\x1c\xa6\x10i\xf1\x08\x87\x93\xb2\xe8\x12=&\x02?\xdf\xdb^0E\xdc:/T\xacP\xcb\xad\xc7\xa5\xe0b\x85x1\xef\xb0\x11\xbf\x0e\x9f\xc1\x95{\xa7\xea8\xc2p\xf0\xf4\x83hj\xee9\xb3\xa1m\x7fE\xd6B+\xcc\xfb\x7f\xac\xb1\x7f\x9c\xa2>\x04A\x1cv(8[\x90v\x91\xc0\x8e\xee\xfbQz\xbe-F\xe1C\x17\x08\x86E\x86y4/\x87o\x99\xe7\xe6\x1d/5\x96h2\xd4\xaa\xaf\xc1\xe0q"\xd9\xea\xba\xda\x96\xafM\x8b\x00\xee\xa9D,\x19\xc9\xf9\xb32\xf5R\x91\x8d\x8a\xa5x\\\xb9\xd6\xf3dw:\xe6~?\x10\xc5Q\xe5\xfc\xb99\xf4\xd9r\xc8,\xb6\x9c\x94\xb7%o\x89\xc4\xea\xf0\x99+\x02}\x92E\xfbH/d\x89\r\xd9\x8a\xc19\x1d+m\x8b\x91\xd2\xaf\x9b\xb9!\xef#\xe5\xd0\xcf\xa2\xb0|\x06\xa4! r\xe0cx\xf2\x05t\xb7\x99\xb1\x1e\xd2\xaa\xb0n\x17\x03\xa2\xff\xbfu[\x15\xbf\x82H\xc0\xb2&<\xfeu\x1a^\xbc<i\xd2Y\x0b:\xb7\xaa\rF\xdeg\x9e\xd40\x9a\xea\xce\xbe_\xaa\xeb\x9dL\xfe\xe9\x81\\\x86f7\x16i\xf27\xcd\xe0QX[\x0c\xb2\xf9j\x03W\x1d \xcbN\xc4\t\xce\x1b"\xac\xfc>\xaf\x1cu\xf6)\xebf\t\t>j[>qt\xe1J\xc32\xbe\xaa\xa9\x88\xfd-\x11\x02\r\x1e\x9d\xba\x0c\x18\xb3\xd0 #\xd7\xf5\xbf<\x89HRQP5\x9e\xab\x15\xd4\xc3\x89\x8ft\x15\xb9\xe5\x0f\xa47m\x1b\xf7\xe1\xbd\x1b \xf7}Ggh\xe0\xadr]\xf3Sg\xae%\xb9rJ\x84\x8a\x9b\x0edH\xb2M\xc0t\x8dh8\xd3{7w2)~Cn\xb8\xcd$\r\x146\xa5S\x9c\xe2\xc8\xe2z\x82^\x95X\xeb\x15\'M\x1b\x93 `\xdd\x96\x8c\x850\x98\xea\x0co\xb9\xbb\xc6ou|\x04\x146\r\xe4a\xb5@\xa7pG\x01\xc7r\xd2\x0fL\xf4\x8bMR\x85\xa5\xdd"G40u\x9e\xe0{mS\xd5/+<\xd0\x95\xcb\xf7\xbb(\xf2bC\x00((\xd6\xee\x01\xef.yC:\xf4<\xcc\x8f\x90\xf3\xc0g%y\x16%?\xf4\x14\x8b\xa0\x1e\x85%k\xbf\x95<lU>\x08c\x84\x06\xbf\x17nq\xf9\x05\xe9\x03\xffsb\x0c\x02\xaeZ\x1b|\xff\xaa\x9b\xd8g\x9d\xc88\x13\xfd\x7f\x163\xd9A(\xebNt\xb4g\x01\xd0\xd8\x9bZE(\xe3\xf3\x13&\xe8\xfe\t[\xc7\xc3\x16\x9f\x0cw\x12\xdd\x12\xe2\x81i\n\xd8\xf7g&L\xb2\x0f \x1e!\xdd\xfc\xf9;\xfb\xc7\x91O\x9f.U\x9do\xb1 \xea\n\xf5\x8d\xc2\x81\xc7\x84\x02\x88\x06C\xcap \x15\xf5\xa4\x96\xfc\t*x\x9cU\xf4>\xd5M\x923 \xc7Q\x11\x9di,Y\x8b\x1c\xd5n\xf2\x91\x9c,8\xfd\x13\xf6\x7f\'\xd1\xb8\xdb\xd3\xceJ\x91\xd8\xd0\xcd\x0f\xa6\x06f\x8e\xdf\xdcb\xd0\x18\xcc\xf0!&\xfe\xdb\xff\xb0\xee\xc4\x03\xa0oh\xdb\x8a\xec\xb5>\xbb\xc2\xc5\'\x0f\xd3\xe9zIv?\x1c\xa0\xb3,+\xfe\xcc<\xcc\xaeP\xb3\x06\x0f\x9d\xaa\xado\xe1\x9f\x98\xadcc\xbe\xdf\xae\xc1m\x14\xe7\xce\x99\xd3h5<0\x00\xb9Nr\xfa\xd3\x88\xc0\xccaDn\xca\x84\xff\x98*\xffJ\x89\xd8@\x931o\x9cu`Y\x84\x8b7N\r\xb4\xbf\x1e)\xa6\xb0\xf2c\xeay\x10\x84\xa3\xf2\xd9\x9bX\x0f\xee\xa0\xf7fl"\xde\xf0\xe6"h\xe1.@\xea\x03\x04\x8egf\xc88\xca;\x82F\x1a\x84\x12\xaa\x7fx\xaf\x95\x7f\xf3\xdf\xb5G4P\x19\\\xff\x04\xfb\x06\xa8\xfa/\x84R?x>ApV\xa1\xde\x10>\xd1\x8f3v\rW\x0e-\xed\n\xdb\xeeQ3x\x83\x97\xe2\xeb\xb1\x04U\xcc\xc3\xde\xde\xe5\x9e\x11B\xe9,\xfd\x9b\xa9\xd7\x1b\xa6#\x98\xe0\x04\xcf\xeaM\xdd\xe1>zo\xc1\xb1\xe2\xc3\x1as\xdc\xfen\xe3\xd3\xb0X\x82\x96\x02\x93(\xac>j\rI\x89\xa6\x866\xd6\xa4v\xde\xf8\x1cl\x96\x99\xea\x03\xac\xdc\xc3\x92\xff\xb1g\xf1\x82-\xa8\x1c\xac0\xcfN\x84J\xc9q\xe8\x9d\x86t\x88W|\xf6W\x8b:!\xe8>*Z\xc4k?\x90q\xb9\xe2\x9bR\xaf\x94\xf0\xb2\x1aJqEs\x1f}}\x03C\xa2\xb4>eo\x7f!\xe3rF\x91\xe9\xe0o+;F\x00"g\tA\xdb\xcfm\xa5\xb34\xf97\xf05w-\xe1\xf5:@\xb6\x15n$\xa7\x9b\xe2\xe1\xe4N\x0c\x8d(\x98h\xfa}\xde\xf3\n\xe3\r}Pvc\xe6P\xb3c\xb3:\xb0\xe8\xa1\x96C(*\x18\x81\xc0\x04\x84\xa1\xb0\x07\x9f\xd16\xeb\xa9HC\xf4\xf2\x8a\x87\xb5\xbcO\x8ej,\xc3\xf7\xb5\xa02\xe5VK\x98\x96hl\xb5$\x83\x81<\x13\xae\x91\xb4\x87:\x17^\xf1(6\rr\x12=O\x9co\x0e\xc3\xd0\x83a\xb0\xf0\xdee`\x96\xd0\xbd\xb4\x83\xcb\xb1\xf5\x89\xbf\'\xadD\xea\x97\xfa1\x8d\xecyC\xec\xd8\xfa\xae\x1b\xab\x15\x97\xfc\xc7H\xa0O\x05{\x06\x8f-~\xfbS\xd58\xd2\xe1\xfb\xfa\x06xL\x89B\xd6\r\xd9q\xca[a\xccm_\xfcR\x93\xb7\x83\xf2$\x1b\\\xc8\xb1\x9c\xe3\xa7\xc3\x8a\xa0\xff\x0c\xad\xfe\xf1\x96\xf6\'\xfb\xe1#\xc0X\xaa#KR\xc2(p#K\x11\xdcrv)\xb0yK\x92\xf4\xcf\xc8\xe7\xa1\x8f6\x08z\x00\xb1\xd9\xd3\xaf\xae\xeaY\xba\xc7\xbd\x83\xe8\x93\x1fj%\xc8\x94p\xc5\x10\xcb>2\x8eq\xcd?X!\xbcWp\x16\xad\x87=\x16\xbct`\xfdd7\x8fV\x8a\x01}\x07~\xfe\x80f)^\xffv\xd9\x8c\x94\xde\x14\xe9\xaa\x9b;x\xa0\x13>\x98\xf8\x96L\xbf!\xc7\x8a\x87v\x83\xaar:A\xe8\xf8:\x01\xdd\xd9{x\x1a\x16\x00\xa8d\xbeZ\x87s\x0e\xa2\xeb\xc0r\x8c\x85\xf6W\xaa\x86Fun\xca\x89\'\x96z\x84\xd6\x02\xd4\x11yY\xca\xf3\tH{\xfdJ\xaf\x7f\xb1\x18\xb1\xe5`\xb4\x89\xfe\x08\x9d\x98\xca\x1eLI\xae)\xc1N\x80\xb0R\x89\n\xa9v\xe3c\xe8\x12\xee\xdd\xfe\x92}\xb3_\xf2\xe8n\x9b\xe9<y\x95\x86\x0f\xc7\xdf\x90\xd8\x1a\x867#\xde\xb6\xff?\xe6\x08w_\xd0\x15\xf6^\x94"\xc1$\x8ey^\x8c\x85.\xfe?)\xd1\\\x1eh\xf0f:{\x18\x90?\x83w\x1dj6\x0e\x83\x81v\x96\x00\xcca*<\xbc%\x1b\x03\x16\xb8\xd8\xa0]i\xa6\x06=F\x8cn\x9934\x9f\x93\x1a\xf9\xbfz\xc8Q\x1b\x164\x1a\xc0\x8aE\xbe\xe4m\xf6\x97-\x8e\x19\n\xc1\xe0\x99\x8d+\x8eP\xe0d\xb0\n\xa3\xb1\x92\xed\x90\x01\x13\xf0$\xb2Z\x00\x90\xd3\xaa\x08\xf5\xe8\x86(x\xf1\xda>53\xcc\x9f<t^\xf8pw\xf3\xd7k&\x08\xdb\x88:?\x86\x8c[\x93$:)\xebq\x91\x01\xf4|\xa7\xb1e\x13\x1a^4gQ\xbc6\xa9\xb0\x9b\xce\xdfA\xbb\xc9!PFt\xb6\xfc\xc9\x0b\xee\x0em\xb8DP\xd2\x1b\xacl\x03\x15\xfdDyE\x05"\x94 \tN[\x89\xca#}\xcb\x1a`E\xb4?\x8c\x1d\x7f\xc5\x91\xc4\xa1`\xb9l2\x1e\x17/\xe6pGI"wPrj7\xf2\x1c\x9f\xd5c\x0fNW=\xac\xf3\xcf\xed\xf5\xc9\xac\xd6\xba\x83\xe4\x00%q!>\x05+JM|\x80`\xdbJj\xfc$=0d\xa1\n\xf7\xb0]r\x8d\xdd\x10\xc7\x06\xb6\x14\xa2\xaeP\x08\x94\x86>\xa8\xf53\xf4\xc5\xd3\n\xf2gD\xe8\xe0\xc9\xa4?C\x8d\xf4\x9f\xc5\x94\x0fj\x8f\x90\x10Vc\x03Ac\x85\xfa\xcb_8q1\x18\x8aX\xa7\xa5\xff\xf0l\xd3\x80\xcc\x0e \x99xb]\xd1R\xa2Od)\xb0\xdf\xd1@kq\x1d\x95=\x89\xc0Z\x06p\xf7:\xfb\xa6\xd4\xe4\xdd\x1a\xf5\x9b\xb0\xad\xcd\x14\x04k\xadW\xf3y\x8a\xfe\x8a\x1d\xb5\xf5\xfdW\xe9\xf1\xb9o\xcc\xb2m\xc4*]I\x05i\xd0\x9bwh\xc6)\xf3Z{IX\x8e\xe5\xc9eg\xfd}5M\xa6\xff\xa9\x1f\xe4\xb4EW\x9e4?\r@\xf8\xe2\xe7$\x888\xda\xbc$pp\xe1pQjl\xc6d%\x8b%LP\xbdp\x0f[\x96\xfe?s]\xe9\x06\xca\xa4\x04\x16\x93\xcew\xcb8hXg\xf2\xa8+\xe3v\'\xf5/\xed\xca\xe9E\t>\t*\xf4\x93\xd9\xdb\xe4"\x13E7b\xbf\xc0\x0bX\x0c\x00!\x80\xdbw7\x8f/w"\xb2\xd6\xb0\x8fI\xc9\xc2+\xa6\x046!\x9e\x05\xe2\x1e\xbf\x99\xffA\xf6\xea2\x972\x16\xeb\x89\xc0k\xd0\x9e8\xe8\xbb\x1a\xff,\xa2\x8a$\x87\x1b\xa5\x9a\xbd7\x17\xdbj\xca\x0f\xf2\x1f!+l<\xbb\xe10\x82\xf7\xe5j\x06\x14G\xbf!\xd0u\xfcUD\xa4\xa2\x1d\x80\x92u\x96Y\xbf\xd3\x97\x1f\xaf \xa7\xb0z\x95\x84\xd2%\xab\x93\xe07u\x1a9\xec\x89\xd8\xb5H\x15\x07\xebyNTT\x8d\xf6\xb6=\xc5\x83\xad\x88Q\x15\xd7\xf9\x9a\x06\xa5_\xfa\xecb\xa3 \xe9\x12w\xe0\xf4K_\xdb\x1d\xdf(\xa2\x94\xfelI.\xe2\xbaPc\xe5\x91\t(FU\xa9\xe1<8\xd1| \r\r:\x80\xd5\x9c2\'\x1f\xa9\xa9\x86\xe8f\x93\xb8!\xfc\xb5\xdaaU\x87H\xa7\x8a)\x92\x14a2\xbc\xb9Q\xcb\xbap(%<\xaa\x00x\x8f\x0f\xa6\xa6\x87\x7f\x03tl\xb6\x80\xa2\xc8\x89\x9a\xae\xaf$\xef\xec\xe6kz\xd2\n\xd5m\x0f\xdf\xeb:\xb9S6<\xdd\xc4\xa9V\x03b\x0f\xe1p/\xc6.\x80W1\\\xb3\x8b\x991"$\x8f\xa7n)C\xb1\xc2T\xeeS\xa6"\n\xd0F\x05\xda\xbbr#L\xe3\x99\x8bkb\x81%@\xab\xcc\x13\xe2\xaf6%\x12\x95A+9c"\xa8Ris\xda\xb1\x039&\xaamw\xa1D\xf5\xc6\x0b\xa4\x84\xea\x8f\x80\xc0\x8el\r\xe0\xa9\x93\x1c\xbb\xceP0\xf81p\x8d\xbf\xa5\xfc\xf5\x82\x08\x80"\xde\r\x99{\xfa\\\x10\x90\xe0\x80*l\xac\xf4~\xfbTOR;\x94zs\xbe\xda\x08v\xc6\xa3m\xdf\x85\xe7<\xc7#\xea\xd1\xa5\x03\x9b\xd6@\xab\x8cw,\x9f\xc4\x87\xb4\xa4\xacV`\x85\xa1d\x83\x1c[\x1ao\xea\x1cpB\x05s\x19\xd4t\x11\x0c\x7f 9)n\xec\xbfy^\x1fW[Y\xbe\x05\x9d\xc8Y\xfc\x88Wh\xe2}\xe0"x\x92\xef6\x12z\xb9\xc0t1_\xb3\xda+\x81C\x0cH\xae\x81\xdbj\xcc\xb2\x99\xe7\xdb!\xcf\x86\xfep\xb5>(\x16\xc7\xc3\xaf\xb7\xc5\x9e\xae*0)\xe4\x97\x1c\xdb\xbbR?\x16+Z4\xab%\x91#9viR9Np\x83\xc8\xce\xfaA\x19\xac\xc5G!;U\x1e\xdf\xd6\x11\x02\xc6\x1eK\xbd#\xfe\xc4\xd5I8a\xb4\x7f\xda\x850h#\xa2\xfdS".\xbe\xccj\x8bWK\x10\xef\x80E\x97\xac7\xb8A\xc9i\x1c\xe9\xad/C\xa2\xbf\xeap<r\xf1\xfc\x87o!q"\xdb\xffZ\x1a\x06R\xee/!\xb07f\xe0J\xe5\xee6\x94\'\xd1\x8e\xe07\x98~Q\xc7b\xb3\xcc\xf9\xf8\n*]\xd1\xdaiF^33\xb0v\xa2\x8f85\x14ek\xc7J\xbfH\x8f8\xb3\xe5\x02\x1d\x91\xa6\x13\x96,F\x07\xcfD\xca\x19J\xc7\xfa\x1c\x05\xe7\x15\x17u\xf5\rqh\x81\xe6{.\xee.\x86\xf7\x12\x99\xdb\xaf\xc4\xa0\x8a\xe4\xd72\x99T\x0f\xcc\xacq4\x03t\x1d\xee\xaf6\x93\xa3E\xb4r\xb8\xf6\xd1\x87\xbf\xea\xff\x8f\xbay\x1e:\x11U[4\tU\x01\x065\xa2\xa3\x00;\xaf\xa8\x0b\xb7\xa1G\x83\x8c\xe9\xf0\x99\xc3\x00\xa1\x1ev\x8d\xc9\xb0\xee\xda\xf9\xf5B\xe0\xe9\x17\xfe\x98*=\x02\xa5\xcc\x9e2\xcc\x8fv\xc1')
1
+ from flask import g, jsonify, abort, render_template, request, send_from_directory
2
+ from hiddifypanel.models import *
3
+ from hiddifypanel.panel import hiddify
4
+ import uuid
5
+ from flask import g, send_from_directory, url_for,session
6
+ import traceback
7
+ import user_agents
8
+ import hiddifypanel
9
+
10
+ def init_app(app):
11
+ app.jinja_env.globals['ConfigEnum'] = ConfigEnum
12
+ app.jinja_env.globals['DomainType'] = DomainType
13
+ app.jinja_env.globals['UserMode'] = UserMode
14
+ app.jinja_env.globals['hconfig'] = hconfig
15
+
16
+ @app.errorhandler(Exception)
17
+ def internal_server_error(e):
18
+ if not hasattr(e, 'code') or e.code == 500:
19
+ trace = traceback.format_exc()
20
+ import lastversion
21
+ last_version=lastversion.latest("hiddifypanel",at="pip")
22
+
23
+ has_update= "dev" not in hiddifypanel.__version__ and f'{last_version}' != hiddifypanel.__version__
24
+ return render_template('500.html', error=e, trace=trace,has_update=has_update,last_version=last_version), 500
25
+ # if e.code in [400,401,403]:
26
+ # return render_template('access-denied.html',error=e), e.code
27
+
28
+ return render_template('error.html', error=e), e.code
29
+
30
+ @app.url_defaults
31
+ def add_proxy_path_user(endpoint, values):
32
+
33
+ if 'user_secret' not in values and hasattr(g, 'user_uuid'):
34
+ values['user_secret'] = f'{g.user_uuid}'
35
+ if 'proxy_path' not in values:
36
+ # values['proxy_path']=f'{g.proxy_path}'
37
+ values['proxy_path'] = hconfig(ConfigEnum.proxy_path)
38
+
39
+ @app.route("/<proxy_path>/videos/<file>")
40
+ def videos(file):
41
+ print("file", file, app.config['HIDDIFY_CONFIG_PATH'] +
42
+ '/hiddify-panel/videos/'+file)
43
+ return send_from_directory(app.config['HIDDIFY_CONFIG_PATH']+'/hiddify-panel/videos/', file)
44
+ # @app.template_filter()
45
+ # def rel_datetime(value):
46
+ # diff=datetime.datetime.now()-value
47
+ # return format_timedelta(diff, add_direction=True, locale=hconfig(ConfigEnum.lang))
48
+
49
+ @app.url_value_preprocessor
50
+ def pull_secret_code(endpoint, values):
51
+ # print("Y",endpoint, values)
52
+ # if values is None:
53
+ # return
54
+
55
+ g.user = None
56
+ g.user_uuid = None
57
+ g.is_admin = False
58
+
59
+
60
+ if request.args.get('darkmode')!=None:
61
+ session['darkmode'] = request.args.get('darkmode','').lower()=='true'
62
+ g.darkmode=session.get('darkmode', False)
63
+
64
+ if request.args.get('pwa')!=None:
65
+ session['pwa'] = request.args.get('pwa','').lower()=='true'
66
+ g.pwa=session.get('pwa', False)
67
+
68
+ g.user_agent = user_agents.parse(request.user_agent.string)
69
+ if g.user_agent.is_bot:
70
+ abort(400, "invalid")
71
+ g.proxy_path = values.pop('proxy_path', None) if values else None
72
+ if g.proxy_path != hconfig(ConfigEnum.proxy_path):
73
+ abort(400, "Invalid Proxy Path")
74
+ if endpoint == 'static' or endpoint == "videos":
75
+ return
76
+ tmp_secret = values.pop('user_secret', None) if values else None
77
+ try:
78
+ if tmp_secret:
79
+ g.user_uuid = uuid.UUID(tmp_secret)
80
+ except:
81
+ # raise PermissionError("Invalid secret")
82
+ abort(400, 'invalid user')
83
+ g.is_admin = g.user_uuid == uuid.UUID(hconfig(ConfigEnum.admin_secret))
84
+ bare_path=request.path.replace(g.proxy_path,"").replace(tmp_secret,"").lower()
85
+ if not g.is_admin:
86
+ g.user = User.query.filter(User.uuid == f'{g.user_uuid}').first()
87
+ if not g.user:
88
+ abort(401, 'invalid user')
89
+ if endpoint and ("admin" in endpoint or "api" in endpoint):
90
+ # raise PermissionError("Access Denied")
91
+ abort(403, 'Access Denied')
92
+ if "admin" in bare_path or "api" in bare_path:
93
+ abort(403, 'Access Denied')
94
+
95
+ if hconfig(ConfigEnum.telegram_bot_token):
96
+ from hiddifypanel.panel.commercial.telegrambot import bot
97
+ g.bot=bot
98
+ # print(g.user)
4
99
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
100
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product