hiddifypanel 3.0.0.dev63__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev65__cp38-cp38-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 (72) 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/templates/config.html +1 -1
  32. hiddifypanel/panel/admin/templates/proxy.html +2 -2
  33. hiddifypanel/panel/admin/websocket.py +9 -3
  34. hiddifypanel/panel/admin_2.py +33 -3
  35. hiddifypanel/panel/asset.py +17 -3
  36. hiddifypanel/panel/cf_api.py +35 -4
  37. hiddifypanel/panel/clean_ip.py +125 -3
  38. hiddifypanel/panel/cli.py +172 -3
  39. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  40. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  41. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  42. hiddifypanel/panel/commercial/__init__.py +50 -4
  43. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  44. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  45. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  46. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  47. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  48. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  49. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  50. hiddifypanel/panel/common.py +98 -3
  51. hiddifypanel/panel/custom_widgets.py +71 -4
  52. hiddifypanel/panel/database.py +18 -3
  53. hiddifypanel/panel/hiddify.py +655 -4
  54. hiddifypanel/panel/hiddify_api.py +70 -3
  55. hiddifypanel/panel/init_db.py +393 -3
  56. hiddifypanel/panel/usage.py +85 -3
  57. hiddifypanel/panel/user/__init__.py +25 -4
  58. hiddifypanel/panel/user/link_maker.py +416 -3
  59. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  60. hiddifypanel/panel/user/user.py +233 -3
  61. hiddifypanel/static/css/custom.css +11 -0
  62. hiddifypanel/templates/500.html +1 -1
  63. hiddifypanel/xray_api.py +109 -3
  64. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  65. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
  66. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  67. hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
  68. pyarmor_runtime_000000/__init__.py +0 -4
  69. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  70. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  71. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  72. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,226 @@
1
- # 2023-04-08T15:11:14.001351
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00.*\x00\x00\x12\t\x04\x00\x16:\xc8\xd4\xd9\x1aB\x16\x97g\x1d\x866\xa6+V\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x99\nW-;\x92\xce\xc6\x97\xfcq\xa5\xa1\xb8\xc7\xd4"\xec\x00\xb7\xbf\xc1X\xa8v{\xdd-y\xf0\xedo\x83\x97\xad\x92\xe1/l\xcb\x8dI\x9b\x91\xcb\x99\xdbt\xb2(\xf7~\x9c\xab\xc1\xcb\xf9\xf7\xaf\x14F\x1b%\x94R\x9e\x18\x80>\xe7\x1c)B\xb8\xde\xb2\xf1o\xf2H\x14k\xf1R\x0b\x16\x90\xcf,\x0b\x90\xf8\x0f\x8c\x05GO(\xcbm[M\x87=\xd1\x1aCD\xa2H\xb7mx\x10\xb8\xe6\xf9\xbe|\x9b\x99,\\\x7fw\xd6\x19J\xefGrg\xdeg\x9fa,P)\x0e0\xa5\xce\xba\x0b\xc5\xaa\xf68\x81H\xcb\x8f\xd6.\xc2d\x87W$\x1f\xc8?\x90\x8a dA\x03A\x03\x97w\xe9\xe3\xb8\x0e.Cc4\x12%U\x83:\xceE\xd2\xeb\xde\x8a!\x17,\xffA6\xa6\xc9\x83j\xd3iW\x00=\x03\x9e4D\xae\xc5\xcbA6>\xdd\xaa%\xec\\jh*\x00\xaf\xe7\x8fpg\x93,7zz\x86\x8e+!.\x19\xb0\xc0\xa0\x9e\n\nx_\x8d#-\x86\xaa\x88\xc0\xe9\xa9$\xab]\x8f=\x8e)u\xd3\xf9\x05\xfa\x07\xfe-\x03\xe0\x8a\xe8\xa1\xd9p\xd2Q\xa1m\xbcr%\\\xa4{v\xc5\xdbAB\xf7\x1fB\x18\xca\x14\xb6\xc2\xab\xa5\xd8\n\xde\xb9\xbd\x12:\tvJ(\xa1\x1cR\xb1\xf3&\xae"\xe2\xc7\x1f=~\xddy\xa6\x90\x84\'\x11\x92\x93O\x0c\xeeCG\x9bA/\xb7\xf2e\xfd\x05\xcc"HL\x92"\xd0\xd4\xcf\x82\xe0\'\xbf7n@\xb9<\xfa\x97\r%E\xd9j\x84\xeb\xb0*\xf6\x01\x0b\xc6Tb\x91&\xd9\x85,\x07K\xe7Q\xf7\x1d\xaf\xf8v\xdd\xee*\xc4\x0f\x17v\xc0\n\x81\x88\x9bW!\xdb\x98\x17\xfe\xb7\x1co\xdfv\xd2O\xa1g\x1cm:\xeb\xe4\x81\xcc\x94\xa3%\xeek\xfe"\xf3\xa5\xcf\xc2\x91\x95st\xb9\x85%\xa2\xc9y+\x1f7B[\x8c+\x1f\xf7\xcaI|\xb2\xb5\x86\xd7\x02\xf5\xe5)\xe1{jw\x18\x9b,e?o\xce\x0f\xf3\xfaE\x0fC/\xc5%\x00R\xdfw\xe3\xb3\xe9\x03\xe3\x80\xa1\x9eD\xbe\x06t\x9f6\xac=P\x85\xf9?\x00\xba\xd3r\xcf\n\x9b5RWj;\xfe^\x97\xba\x0f\xeeR\x80\\q\x91I\xd9!\x8e\xf9\xa5cD"\xdf\xc9.e\xd0\x05\x81W\x9f\xdeF\xf8b\xeb)n_\x1eJ\xb3K9`I1\xc8\x0e\x82\x947\rT\xa3\xee\x94\x17-#\xa5F{\x91\x10\x92/\x95>\xea*\xc67r}n\xf1\x15y\x8b\xf1\xfdq.V\x92\xb9Q\xac\xcd\ry\xc8\x03\x94\xf8\xf0\x7f\xdd\x017\xea\xfc.\x90/J\x16tT\\#(%\x92\x028\xfb\xfd\xab\xe2b\xec\x0f\x81\xa5\xa7\xf7l\x91x\xf0c\xab\xe91\xb6\x05\xb76h\xc9\xed\xe8g\x83\xcb"\xe7\x02:\xc3Gc\xba;=\xaa\\0\xa2\xc0 \xf0[\xca\x92\x12\x97\x93w\xde\x15k~z\\\xd7p3\xee\x88\x03\xe6\x1eL1\xcb\xa82,h\xc8\x0e\x9e\xa8\xbd\xf2\xbb\xbbt\x07UEh7\xab\x83\xf8\xff\x14W\x1d\x8e\xb2C\xd1\xc0\xc3\xed\x97\xce\x1c\xa6\x06\xc6z\xff\xfdcv\x9cV\xd2n\xc59\xfd\xf0\xba<\xa0\x12^\x10\xc3\x84\xf4\xec\x82\xdc\xb6\xd8\x81\xe4/\xea\xd5J\xb1\xf0\x025\x7fEmv\xda\x03\x96\x95\xa3\x7fE\xeaq\xf8\r\xb2\xc6\xc7\xad:\\hK\x17\xc16\x8e\xe0\x8e\x8d\xcc\xde1,0\x10\xb7\xa7\xe2n\xf5\x03\xe6\x95\xb4\xf5W\xb3\xbb\xa7\x19\x92.\x16v\xd1X\xd1@\x84\x97}J\xe2\xdf\xcd\xbc\xdb\xb5H\x14\x0bL3\xbez?\x82\xa6\xe2\xfc\x8a?`%\xd8\x83o!Mj>\x17W\xd6M\xd7\x82\xb8\xff\xc3\x96\xad\xb0\xb6\xd20\x8a\x90\x05\xd0\xb8\x1d(\xc5IN\x8f\x1a\xbc\x8fL\x8f;\xc0\x1aix\x87u\xeck3Z\x8b\x87\xd9\x08\x84\xce\xca.\xa8f\xfd\xcbN*\xe6\x94\xee\x0c^P\xa0\xeaZ\xb9x\xc9|\xd4\x84\x18W\xe8\xf3\xaa\xd7\x82\xe9\x1e\xa0\'7Zk\x95\x13\x86\xbf!\xd0\xf3\x94w\xdb\xcb\x0f\xa8\xe7\x1f>\x89qv\xad:\xffb\xeb2\x930\xb94yAa\xe0\x91\x93\x0e\x89\nv\x8b.l\xadPZ\xca\x9a\x18@\xa5\x85\r\x9d\xa4GZ\xd0\xdb\xc3d\x85\xddz\x95\xb7\x16\rUuY5\x7f=\x03\x86\xf4\x91\x99\x9e\xce\x1f[\x1b\x1f2\xba\xf8\x17\xc0\xd1 \xc9w\x01\xbbB\x88\xcb\xa3\xa3P\x9c\x1b\xaf\x968\x13]\x9c\xe0I\'1"\xe0\xb2:\x1btJ\xf8\xbc\xb0\x1d\xf2#\x8d\xf3\tU6\x16\x10\x8dP\xf2\xe01\x98\xc9h\xd9\x88\x12\xb73Fi)\x13\x82\x80\xa6\x948\xf0\xcb\xcc\x9e\xbd2\xe2\xb7U\n8\xb8\x13\x97z\x02\xbe\xa0y|\x13\xdaV6f\xc3\x9d\xe4\xbb\xe6PL\x8b\x16\nD\xf3;v\xd5\x00\x99&\xa0\xd0+\xdbjM\xb7\x98\x98\x8e\xdd\xab)iBg\xe5\xce\x0f\x10^<\xff\xb0\x1b\x85\xcd\xf0o\xdc\x92\xcc\x8f\x15r\x99\x96\xbf\xe1\x93{\xcc\xbd\xa8s\x1b\x1eq$#\xf2\x17Y\xad*\\|)\x8c\xd7\x9a\x88S5\xcf\xd9\x9b\x10a\xb8\x85d\xf2\xef\x98xz\x87\x18\xc2\xcbm\xce\xa4W\x80\xef\x88\xd3S\xbd \x94>\xd0\xae\x0c\xc7\x89o\xbb\xc1v\x02^\xf3\x16I\xff\xb7\xbb\xcb\xabK\xce"\xf4\xc3)\xbd*\xd5\xec\xed\x88\x9f\xf0\x94\x8b@)\n\x82\xc5G\x91\x1d\xc3t\xef\xcc\x84\xd7\xb7\xfb\xc3W\x96s\x0cW\xb6b\xf4\xbe\x7f\x93W9\x89\xdcl\xf7:_\xfa\x1a\x04\xba\x88\xe0\xb5\x19=\x85\xa4v\xd9\xcc=Xo5\xbdl\xfbO\x9bq\x06\xa0\x9c-[\xd9@\xee\xf6-\x9c\x14\x83&\xffA\xb7\xd4x\x0e\xc8C\xbe\xdcxG*\xf3\xed\xd4[Q\xb5qR\x1c\xd5s\xa5g\xf0\x91c\xa2\xe3\xe4\x86\xf8\xc0zql\x9f\xff\r\xe9\x18\x15\x91\x90\x06mb\x17LPE\xc8=\x8aGxL\x9b*\x17 \xf8\x90\n\r\x1duL\xba\xa2Jj\xe0}8\x072[K\xcc\x00\x1c\xec\xd5n\xe8r\x99\n\x1f\x91\xd5C\xe4\x84G\xd4\xeb_\r\xc2D\xda\xf95\x0f\xf1p\x12v\xe4\xb80\xf4-\x1b\xb6\xe3\xfam\x90[_\xfa\x16\x00\xe8\x089\xc7\xf7\xf2d!\xe3\x98,\'\xf1\xeb:-\xe6\x18\x9f\xb4\xfa$=\xe9p\xa7\xb7\xf6\\=\'\x9ai<l\xac\x9d\x12\xb3y/L\xb7\t\xc0h\xce\xa4F\x84\xdc\xa7o\x10\xad\xeb\xdb\x03\xa6g\xf5\xf8\xccZ\xe6\xa6,\x04\x17\xfa}\x96\xa8\x18\x04K\xc6\xd7\xf4SI\x1c\x9b\x9cP:@O\xbe\xb6\xaa\x91?\x92l\x19O[\x16\xc6\x9cd\xa4\xa4"\xca\xde\xd5\\Q\xc4>\xcaIC\x18\x9d\xff\xf3\x11\'\x02C<P\xa0\xd7Pj=\xfb\xae\xf9\x8d\xf0\x8f\xa2q\x0c\xf7\x9d\xe4\x94\x0c\xfc#8\xd0`w\x82/u\x97\x15\xdf\xac\x01*=\xeb\xf9X[-x\x95\x8a\xa5\x9c\x0c\x98?\x920gVP\xc3m\x99\xe0\x81\x824F\x18\x104"][P\xa4P]w\x9an"{`\xeb\xfd#E\x04}*\x0e\xd4\xb1\xc0\x7fx\xc7\xd8\xb4\xd3\xce\xde4)\x03@\n\t*\xb5\xa0R\x90\x7f\r\x16veo\xa8F\xb2\xc8k\xad\x8c?\x892\xf5\xc6\x1bU\xdd\x91splr\xa5F\xe9\x99\x1bD\x83\xc7U\x9ev/\xe5%\'\x9d\xee7\xd1\xde\xabq\x93\x96CR}\xf8b\x84%\x9f\xba\xc6\x06c\xef\xa3K\xfe\x96\xc8\xa7\xddb\xbe\xe1\xf0\xa3\xd1\x956\xb33\x0f`\n\xfa\x0c\xf1\x87U\xc8JO\xd3[\x15\xcaZ,\xb5\x17K#\xa2;\xfa\xa2\xd8q\xb9\x050\xfdx0r\x81\x952c\xa7c\x02\xaf2\xbd\x7f\xd8\xcb\xe4g\x17)\xda/\x12B:\x91\xa9M\xa9\x9c\xdb\xda\x85\x16m\xfc\xb1\xa0\xfa`\xe4\xaa\xa9\xde\xc8a\xd1\xeaq`\xf4\n\xf4\x82\x16\xbc.\xdb\x19\x17\x83U\xdc]\xde\xf8\xe0e\x19\x13\xf3\x1d\xf7\xdd\x94<^\xef0\x1b\xcek\xb0V\xbe\xea\\\x05\xe07Y\xeb\xfd\x02\xa4)y\x0c\x90\xc9\r\xf0\xc1\x9d\xec\x84\x83;\xb8-\x96H}S\x0b\xef\x05\xb7\x90\x16\x9f\x15@\x91\x15v\x97lr\x0e\x91-~\xc3\x11<\xc9$\xd0P\xf1\x01<\xff\xb6\xb3\xbb\xf5\x95\xef\xf2\xc1|\xd6\x1bI1\xd0\xf5\xed\xb5\x84j\xbd\xbab\x18\\\xf2\xd3\xcc2_\x0f\xabc\x97\xde\xde\xc7Q\x85`\x99\xb6\x1d{j\x0b>Q\x14r\xb7Ju\x9a\x95\x87\x1f\x12\x1f\x8a<&|\xbd\x82^\xf0pdYS\xec\x8c\x01\xe2\xaa\x05\xd7\x1e` \xbb\xael\x82\xc0\xfft\xee\xe7\x0b\'[\xeb\xc9\x0f\x81j\x84\xae\x87\x86\xb6\xef\xf56\xcacg\xdc\xb9|\xcd\xfb\x7f\xd7>\x0f\xa7eC\xe57+\xac\xfc\x9eaD\x80\xb4\xafH\x01\xa1\x87j\xb4\x16\xef\xd1"X\x1a\xa3\xdb\xcf\xbd\xe5jr3<m\x8b\xc4\x0bO\x9fw9a\x1e\xfa\x8dm$L\x1e\x17\x03\xaf\x13LNpl9\xbc\x0cal\x80S\x19\xfb\xa1\xdf\xdb\xe8:f\x12\xd3\xe1@\x81\xe9\x87\xa7\xab\xa8\xee\xe8\xbf\xdd\\c\xfc\x8c.1\xa7\xf2\x08\x81X\xad\x93\xbd \x89]\x81\x19\x96Fn5\xd6\xbe1\x02p\xd3\xda\x8e\xf9C\x9c\x91 \x9b)X9\'W\x05z\xa2\x04\xc6\xf3x\xd9K\xfc\xfe\xdb\xa3\xccV\xe6\x82\r\xae\x95\x9d3@/4\xd3\xea\xc7Q\x0b\xfb\x8c\xec>\xfeA\x01O=\xd7y\x9a\xe8x>0\xd9\x8e\xc6pR\xbb5\xcc\x80\x05w\xd1#\xaa{\xe7\xf0\x1b\xb3\x03\xa9\xb1\x9a\xf1\x05\xbcH(|\xe3v\xe5\t\xb2\xd7\xdf\xe9\xb0\xd5\xe5~\xe1\xfai\x95=_\xf6;\xe5\x08u\xdf\xc6\xc4\xd7O\xcb\xea\xc9\x8e\xfeZ\x1eE\xda`u+_\xe8\xe7\x818\xae=\'\xbd\xf3\xe6\x93\x0f\x9c\xb9c"N\x8cu\t)Wyu\x8d\x87\x0b\xe8\xbe\x81^S\xd8n\x1f\xa0\xe4z\xb2$\x1f\\h\xe9\t(\xcf\xee\x8c\n\xb65\xbeq\xc3\x91\xdc\x94-:\xb2]\x1b1\xcd\x07A\xa8\xfa\xd8J!X\xd0\xb0\x9a\xde3T\xa9\xc2\xba7=\xff.\xbc2%\xb9\xd33\xbf\x1fq\xd5~\xa9\xacJM\x1d@\xce\xa7\x0c\x8eE\xd9\x88\xc9\xc9\xf4\x1e\xa2\x86\xdb\xa2\xfdiPf\xaf\x91\x9e\xa3s\x1e\xe8\xcb\xc1\x9do\x10\xbf\xca\xa4kN\xba\xf6\xa4\xf9C\xfdq\xbb"O\x9c<\xa3"7S<A\x04R\xe6\x06\x8f?D\x80\xd3\xa3O\xef\xb7Sp\xf8\xfc\x8f1\xa6`\xe0-\\\xf8@\x15\xfd.\x07\xc7\x8b>\x8d\n\x95\x91\x8e\xa61\xfb\xb6\xe1`H\x85*|\x80n\xa46\xc7\xaa\xcdn\xfe\xeel9r\x8fQ\x89?[\xcb\x7f\x85"Y\x88\x01\x93yfm8\xb8Y\x1b\xfd^\x06%5\x98\x10B\xb6\xf6\x06\x9d\xa5\x17\x02o\xef\x82N\xbe_a\xa2\xf8\x1a9b\\\xc5\x1a\xe0\x9f\xb9b\x8d\x17h`\x07%G\xf9\xa2\xd3\x069\xa7\x89\xf0\xa62L\x9eE\x1d\x86\xb0\xed\xeeW\xc3\xfd\xa6\xdc\xf2n}0\xb0\xd9\xb45j\xd9$\xc9\xa3\xce\x87a\x96G\xad\x19\xef\x14\x8c\x87\x00\x10\x98\xbd\xdb\xf9QSDMr\x98\x9f*7\xea\x00\xde\xb0\x87^7R&\xf42^\x88.\xa2\xff\xb6\x86B\xecHd\xf9q\x9cX\xe7/%5\t\x16I\x01w%\xd41\xa0\xf3\x85\x8b\x82\x9d\xc0\xa2\x1f\x1b\xd3\xe398q\xc9b\xf0\xd9D3\x9b[Gq\xc5\xbc\xc7\xa7\xdc\xa6\x00!\x80\x83Y\x96\xfe\xc4-\xccn\xb2\xa1I\xc1\x1b\xc1\xfeJF\xdd\x02\x18\x93P\x89\x11m\xf9\xb9\xa5\x14g\xf2\x08\x02\xc5\xc9-sW\x98\xc7l\xbd\xb4\x98p\xf9(\xde\x0c\xb4\x91\x04\xbe\xeadh7\x05\xf7(\x94\x1a\x1e{\x8b&\x9d\xbb\xfe\xe6\x12\xff\xc9\xd9\x1b\xe3Z\xb6\x9f\x90\xb6\x91c\x81T8\xc0n\xd5@\x91*Td\xab\xdc\xb8\x95\xd0\x98\x9a\x85\xaf\x03o\xd6\xfa\x17<s\x07\x1d\xde\xfe0\xf0f\x9d{E\xf7E\x94\xbf\x08\xbb\xc5\xa5\xc6~<=\x94\xb5\xcbJz\xea\xe7\xcfZ\x0c\x00,\xf7\x91\x7f\x87\x91\xa7Vv\t\x8ff\x88\xec\x0e\xdb\xb6y\xe73T\xfcv\xdf\xab\xb3\xe3\xa53\xcd~\xeab\x13\xe5\xdd\xb6\xe4 \x1d\xea0|\x08lr\xa9\xcdk\x9e\x99\xd0\xe2\xcb\xdc?\xee\xbd\x03\xdf\x854\\\xed\xa0\xfb`gw\xb5\x88\xd6\xbcJZ3n\xbb~\xab\xc4\xe4\x88N9uf\xa5AV\x92\x03;U1\xce\xe5\xaal\xb0\x04\xf3/\xd1\xcc\xdc\xf3\xd9\t\xb1\x99\xf3\xa8f\x85\xa8\x86\x9a\x88`+\xff\xb9H\x98\x07\x91\xf5?D\x95\x9a\xc4\x11\xa8DV/{\xf9\xd797\xec\xb3\xbea\x84<\x8f%\x8an\xc2\xb2\x06L\x8a\n\xfd\xa1\xf8aY\xf2\xb6\xce.!E(>\xb5&\x03[\xcf\x11\xc3\xb4\x1b4xO\x9b\xf7gH\x1d\xe6\xads^;\xe6n\x8d\x08>6;\x08?F\x94\r2pg\xe4P{\x1e\x8fi\x9a\t\xc1\xa5\x80\xba\x93C\xb7\x1e\xb6\xcb\xcfczt?\x042\x9b\x8fS\xc2\xc4\xab\xe1\xd0,\xde\xe0\xa5\x80\x06\xa0\n\xc8\xaa{-?K4\x18+`\x8f_\x1fr\x8a\x87ob\xea\xb0\xbb\x81\x08B\xc3^\x99\xdd \xb2i6\xa0\xd70\xf3\x1d\x19Tq\x87\x8cgV>0\xf6w\x06\xf4\x87\x1c\xbb\xb8\xfch]\xd4\xf9\xec\xdf\xbb\x0e\xc8\xf0UAo\xd3\xa7\x1d\x97\xfa\x96~\xd98\xa47c\xb6e\xe5\xd9\xff5Lz_\xd5\x1a\xa4\xda\x07\xe9\x88\xe7\xd7D<\xc2\t\xe2p\x01\xee\xb3\x07\xcb\x0f\x15A\xb3y]\xdd\x00e\xe6\x92h\x1dk\xf7\x06\xadi\xea%@ \x0568s=\xc3U\xa4\x81\x1a\xfcw\x11\x17\x07><0).FgU\x83\xbf\xb1E\xe5\x86f\xd6\xd1 \xd0\xdeU\xe6\x0f\x82r;\x1eK=\x97\xc4M\x9a\xd6L\xf1zV\xff\xcf\xe0\xa1\x91\xc4\xb6\xfe\x1c+\xe3V+?t\x11T\xb5@\xe6?/\x00o\xe6\xb9\x02\xfb\xf7m\xbf\xaei\xd7\x8c\xa1\x80\x8bV\xca\x1b\x9e\xcf7\xf73U\xb3:^\xed\xb4\xb0Z\x1b\xf8v\xc3\xdf\xcc\xa0\xcc]\xf3fb\x15\xfa\xb1\xde\x1eX\xc7t\xa9\xec\xce3\x9b\x07\x10\x98\x9e\x97[\xe14\xda\xbf\x97]\xcf\x1c\xd7\x1f\xeb%A\x88\x07\xa9\xc3$\xfe\x9f\xd2\xac\xc42S\x85\xab\x0b\x11\xd8_\x0f\xf8\xb7\x87\x17ObL\xd8x\xd2\xd0\x99\x19\\F.h_\xb0\x00\x0e\xbc\x96\x10m\xef?-x=5"\n\x13f\xed\xb7\xfdn\x03\x1b\x08lQ4\xe8s\xee\xb5Eb=\x93\x96\xa2\xc9;\xa7\x89s\xc0\xce\xf9\t\x7f5\xd0 \x15\\\xa6\x9d\xea\xb4nC\x11\x07\x1a\x937\xbd \xa4\xceF\xcc\xc2\xfa\x8bT\x8b\x00\x86wY\xeeA\xb4E\xed\xbbG\xc3\x84 e\xde._%\x81\xb9\xf1\x18\x81m&\x82\x0f\xb5\xdaN\x95\x03s\xad(\xe5}(\x00\xfd\xd96\x98\x99\x08\xfa?\xd2\x1f\xd6\xc3\t\x01\xfcwa\x9e!p1\x1d\xcc\xd9\x18c \xfb\xabd\xc9"\xa7\x86\xec\xc0\x0fo\x00\x8a\xa5,\x01\x1as\xcar\x8d\x8cl\x8b\x9c>J\xfe\x11\x06,\x88\xb1l\xf8\xbe|Y\xce\xac]]\r\xed<`\x97_bv\xa6Y\xc2D&7\xbb\xd2\x9a\x11j\x89-:\x01fp\xde\xaa\xb3\x9d\x991\xeaJ \t\x13\xd6\x18\xf0\x95\xder\xc2\xd5-p$\xff\xf1cuc;\xaf\xe2\xa7S\xd0\x10\x1c\xa1#\xb2\'~\xf0G\x17\xe2\x7f\xeb{!&*,\xc6\xa7J\x9d\xa9\xb3t\x17`\xfd\x06\xe3GD\xed<\xec\x8d\xcb3+U\x1f\xc1\xad\xa8F\xf3\x11\xbd\xeb\xbf\x81\x02\xa4[\xc9g\x92\xae\xef\xee\xd81J\x9aW65\xec\x854\xd0\x07S\xda\xb7\xf9\xb2\x97\xaf\x82\xa3\xb9\xe0\xa0\xcblr\xc8\'\xfbV\x81\x9c\xc7\xab\xd5u\xb3\xba\xe1\x0e-\xf8\xd5\xd3\xbdSw\x9d\xc1\xc08\x08!\xdb\xa9\x03\x94_7\x83\xbf\x16\xed\x99S/\x97\xfd9\xad\xbb?\xc0y\x10l\xe1#i\xa0\xcb\x0c\xc5\xf9\x8ao\xd13\xfd\xbb\xc9\xfd+\x15\xbc\x9b/r>\x84b\xd9\x8e?\xec5hU\xeeo\n\xbb\x06\x88|E\xed\xa9\xdb\xf2\xe8I-^\x15\x80U\x1a@K\xc2\x95\th\xf5&\x00\x91\x1d\xc0\x85\x82l\xd1\x05\xb6\xe5O\xbeU\xd0"1"\xab\xe1s\x1a=\x13E\xad\x1b\x12\xff\xf6\xfa:\xb2\xf5\xb5\x98P\x91\\\x0c\x9e7\xbb|^\x18\xe2\xd8;\xc4\x82\xc7~o\xc1\xff"\xfe.\x13\x16\x10?+d[\xfc\x12\xf1\xe1K\x12\xd7O/\x98K\x03\xc8]\xe0\x02e\xf0\x96\xe7\xa9\x89o\xe88\xb1\x7f\xa7\xf5\x119\x7fR\xfao\xd8\xbd\xe9\xf5\x95\x06\xda\x0c\xb4\xcf\xe3\xd0{\xa1\xee\xc6T\xf5Y\x8aq`\x10;\xb6\x15"u\xfb>\x97\x9b\xfa\xe1\x96\xaa\'@\x14\xbe\xdbPT~\xcaj\xb9\xac\x84Hc\x03\\\x19;\xe7\xf8\x8c\r\xb3\xb0X#e9\x06:n\x96\xbc\xb2\x18\xfa\x05p\x91\x9d\xa7\x05d\x96\x06t\xdd0e\r\x81\x87\xf5x\xe8\xcc;\x96\xdb\xa5\xb6\xc3\x90\xce4\x9f\xfb\xa2x\x91\xce}|m(\x85\xa6\xd2s{\x9e\xeb\xdfZC\xa0}\t\x99\xdf\x86\x8d\xc4\xbc^\xd1\xf8lzD\xceQo\xb4\xb6\xe3\x89\xf2\x8c!\x04\x86E\xb0\xb0\xb17\xb8&\xff\x84sdl\xd8\xb6\xd4\xcbw\x80,\xe2\x08r\x88\x1e\xb3\x1052pcc\xe9\xfb\xe0&;&\xfa\x9b\x0cr\xd4\xf4\xf6Z\x0e\xd4?b\xaf:\xfc\x02\xeb\xc4\x1d\xaaK\x8e#\xdd7\x0fQ\x13"\x17\x9b\xa2<\xd7\xacm[;!\xb25\xa5\x8f\x87\xeed\x9a\xb9\xcbS\xf9+\x1ds\x13\xb7\x19\x04xw\xd5\xea\xd7m\xbf~xq\xa8K!\xa2t\x8cU!\x1c\x85r\x90\xce\xb1p\x88\x87\xd6b\x97\x8f9j\xea\xe8\xc2\x8f\x1ai@\xcf\xde\x85\x00o\xed\x9d5Y\xe4\x85NT\xe0\xf4=\x0f\xcf%i\x9fn\xed\x93h\x00\xd8\x7f\xac]\x00\xe9\x85\xe9\xc7L\x02\xa0\xa4Y\x8c^\x03_WcAR\xbc_\xddt\x89\xde\x07\x9ev\x86\x87\xe7\x18\x01\x99&\xb8\xf5\xe8\xb3\x14\x8d\xfee$\x08\x8a\xbc\xa4\xe3>\xab\x91\xa2\x0f\xe8\x01\x81\x12\xd8M\x088\xa5\n\xee#\x04\x1a\xad\xe9\xf1`\x04\xfdQ\xaf\x7f\x10h\x82\xf2\xce\xa7\x1a\t@\x89qc?\xbe\x0c\xe6b\xfe]<\xe3\xe5\xee\xa4\xe4\x17\xd8\x90[c\xfe>\x92\xfc\x14Jy\xf03\xa7\xd3\x06\x7f\xed?\xd2BK\xe8\xa5\xa1\x11\xef\x93\x8f\x891\xbc^\x87;\x18\x0f|NQ1Sg:h\xae35>c\x10\xa3Q\xbfN-\xf2\x8a\xdd`\xf1\xd2@l\xc1\xc0\xed\xa9\xddt\\\xf5\xa5\xf2\xfa\x1dtz*\xf1#\xfa\xdaM+\x07N[\xa1W\x0ek\xd0\x1f\xa5I\xf1~[|\xa3p\'\x06\xe7\xcd\x0b\\\xe0HK\r\x02\xe4\xa0\xf5\x92\xcd\x03\x7f\xf2S\xe2PD`|m9jv\xc3\x06\xcbq\xbah\x97AA\xb5\xc2/\xb2F\xe7\x8d\xd0\x03\xbc\x1aL+\x93\x0en-\xd5\xac8(\xc7x{\xb3+\xe6/\x03#\xaa+\xa67\xe8\x81\x16\xd0~\xc0\xc5c\xf6\x1c\xd6\x08\x88\xda\xc1\x91\xf1\xe7\x85\x8f\xd3f?E~E|u\xdc\xc2\xde\xc5\xcf\xae\x08\xa8\x9a\x1d\xd2\x9b,Z\xa3TxT\xf9\x9a\x1e\xa5\x98\x83\xd6~\x1a\x99x\xc4\x9cQ\xa7~\xdf\x18\xc3\xb5\x9dcCM\x80qK\x17\xda\xea\xf7bz\x85\xcb(0\x9eF>\x9f\x034\xfd\xa2\x9dl\x8eA\x87bcj\xd4-I\x9a=5\xf2\xbaa9\x1bP\x92\x8c\xc1?\xe3\xaa\x1d\xf2:\xf9> |\xf2\xb0\x8e\x1c\xdc\xdb\xb0\x88g3\xbd\x92\n\x04\x84\xb03\xd7\xdd\x8foB\x9b\xae\xe4?\xd1\x04\x95\xf0h\x9fR\x0f\xdc\xae+Xg9\x08o%t\x0c\xcaa\xa1\xed\xf8\x99[5\x04j\xa1\x1a\xe3\xf1\xa7i\xba\x07L\xf4\x90L\xa1\x8fjq1M?\xd3\xbbt\x03\xc0D\xfc(~\x1d\xa7\xc6\x9b\x97B\'g\x18\x05\xa3#X\xec\xfcH\xa5\xdc\xe8\xaf\xcb\xec0,\x98\xd6\x90v\xcb\xef\x89R\xaf\x91\xb4\x0e\x9e\x80\xb0\\\xc8\xa7\x8e\x0e\x89\x7f\xcd\x0b=z\x98\x1c>>\x97\xc0\xfe\x91k\xfb_&\xedb\xe8p\xc4\xf7\xd9x2\xa6E\x9a\xdd[)~\xfd\xbe\xf5\xd6\r$B;\x91S\x16\x9cu\x95<\xce`\x1fd\xb4Ie\xae<#\x12C\xb9}B\xc8\xa4\xeb_X\xa4\xbdQ\x8f\xc9\xee\xf0h.\xdc\x0c=\xfb\xae\xeb\x16\xf3l\x1fni\x0bY>F\xdeY\x81\xa0<\xb3\xae\xdb\xad\xc8\xc9\xd4{V\xb2\xfa\x13R\\\xa4\x85\x1f\x1c\xb6\xe6\x9c\x01\x16\xb1u\xd0\xa0g\xe7d\x8e\xdd-\xa1\xf6\xec\x10\xc3\x8b]+S\xbf\xb0@\x1a\xad \x8f0\x94DP\x95+S-r\x80\xafdv*\xb1\xd6G\x94\x85\xbdm\xcc\xcbH\xdc\x88\xb0\xa6\xcf\xf0\x88\xd2\\\x07i\xc5l\x02\xa0FbQ\x18Y\xc0X:\xeaI\x04z\x00\x8a;\xa1\xad\xfc\x85]\x1e!]/\'\xf6K\x95zW`#V;\xa4\xe5\x1dW*\x187]\x90\x03\x01}l\x8e\x84=\xca7p\x9c\x03A>\xc7\xe3\xee\n\xd2\x94\xb9\x11\x82R\xf4\xf8\x0e\xec=\xfbTR\x9a\xf6\x91\x9cVO!\x8c\xcfz\xc4\xa7\xd2\xe2\xbf\xa0\xecp\x9f\x80a\xd9\x0e\x90\xb4\x06\xfa\xff\x06\x92\x12\x817{>\xac\x8a\xaaT6o\xc1,S\xe1\xb3\xfe\\\x87\x98\xfd\xb9\x89+T\xb6\x1an\xdf\tZ5\x19\xa7\x88\xa8\x9e\xdd\x13\xd2\xe9,\x0cBx/h4&\x0b\x82tK\xd8)"\xc9\xca\xea\xbc\xe3\xea\xb3<\x08\xd7WF\xd3p?\xa6\xa4\x01;T\xb4=\xa7,aP\xd4\xe43Ig\x930\x08\x8b%)Cn\xd6*\xde\xac\x12/\x9e\x1a@\xfe\x9b\x15:\x9f\xa2\xfaq\xb0\x16 \\cF`HG\xdca\xbfby{jY\xa5L}\xe8\xfdB\x80\xd4J\x18\xf0\x1cM\xfe\xdfb\x8d\x02\x9a\x02\x1e\xa1\x7f\xc6\xd3N\xa4Q<\xbc\x04hx$\xd5\xf2\x93\x84\xcf\x1b\xae\xc2M\xa5M(\xd1\xc3\xd1 FP]\xb1\xc0\x19\xf5\x01r?\x98\x16\xd6|\xfb@F\xd66\xc5\x8eE>\xca\xc5o\x02\x8dkUj\xa1m\x10\x7f\xb3%\n\xa5\xca\x14\xa0SUe.\xe9\xbd\xd2\xaf\x94\x03\x1b\x93\xdd\xec\xe0\xec\x83Vl\xc9cb\x0f\xc4`\xabN\x04\xb2\xd7\xa1\x81j\x92\x85)\xd0D\xe1\r\xeb\x00\xd6O\xe2g\x8a\tC\xdc\x07\x07\xb3\xd7\xdf\x0e\xf3;2{I\x0bxb>i\xc6\xd3A\xaf\x8f{\xdf[\x1e\xf15\xd7\xdf\t\xb9C\xfd\xacq\xce\x80Vn\xe1\xc0k\x19\xf8<\xa2J\x1d\x7f!\x05>\x8bJ*5\xf7\x95\xb5\xdf\x18\x15E\xaa\xcb\xc5u\xd9\xb6\x90\xed\x92\x0b\xcd\xaa\n4\xe9\xe3\xccz\x7f\x14T\xb6\x19\xf7\xd6VrE\xee\xa9\xf9\xce\xd3[\xdd\xde\xf2\x021\xd36\x1f\t\xf4l%"1\x1b\x97=\xbe,E\x1e\xadt\xef\xf1\x834\x1c\x0f\xcb\x10\xf4Z\x7f|\xcd\xecT\x0b\xd6>\x98ZOM\xb0\t\x0e\x04\xe5\x80\xe69\xea\x8f\xce,2Z\x0e\xa6\xa9\xe5\xe8\xac\x05\x12\x85\x83\xf7\x04\x16\x93\x86*\xc9}\x9d\xd7qB\xd9\xd5\xa9k\xa0p\x9c\x87)u\xae\xc0\xc5\xfb\xbd\x96\x9bC\xafdf-\xe0=\xdd\'\x94\x94Bm\xe0\x15k\xdfX\xd64\xa7\x7f\xf5\xcd\r?\xfd\xa2\x18\xb8\x97\xfd\xa1\xf3\xd5\xe1\x90\xd3]"-\xa8Z\xd4h_\xc8=|\xe6\x8a%6{?\x81\xfb7\x8f8\xdem\xb5m%Go\x0b|;\x19\xa3+\xa1@/\x1fX7=\x19\x97\xa0(g\xb3\x9c\xff\x90\x07\xb0X:\xebtUj\x80\x04\x92\x05\x03\'e\xab\x9dE\x8f\xea\xd8\xd7Y\xf8\xd9\xfa\xe7S\xd0A\xde[QSU((\xbeH\x19v\xd4\xe3z#\x9d\x9e\xca\xc1\xc1\xd6\x19M\x8e\xd3\n\xa3Q\xa7\xb4i\x8c\xa0[\xa4\xb3$\xde\xddA(^+\x9c~|\x1f\xc3*\x8c\xeeI\xe7`\xcf\xc9\xa7\xc2\xe8g\x1c\x1a \xfdo\xb4\xce\xaa\xd9\xee\x0e\xe8\xa7\x1aS\x12\x99\xe2\x01g4\x1b\xcfP\xbc\xa2\x9a_\x84\x0b\xe5\xac\xd0}\x8dK6q\xab\x03la\x13NB?\xbbP\xaa0RJ\xbd\xda\xba\xf0\x8d4y/\x19\xf1\xf8\\\x11\x05\xc0I6\x1f\x9cv\xb6~\\\xac\x8c)\xc0\nC\xbb\xff\xb5%\x7f\xcfWE_cm1\x93n]9\xf7\xdeCo\x82s\x81r\x05]\xa1oz\xd9L}{.\xbc\x9a\x02$\xc7\xf1:\xac6\xedU\\\x18\x85\xa7{\xb8\xe2q\xf2\x08x\xe2\x92\xf7`\xcd\x08Cs:#A\xecDT\xf3\xdd\x8an\xea\x07\x91`[cG\xe3F\xe1\x82\x0f\xae)\xf3g{5\xd4\xb4\xb6[0\xda\x17[\x04\x1a\x1cq\xa0\xb0f\x01]\x8e\xf6X0*(\x94\xc4\xde\xe0\x88\xbd\xf3\xdc\xae\xdd\xd6\xfcxq\xf5u\xee\xf9\x96/\x7fGdNVl\x8dx\xd3\xda\x81\xe8uM\xe6\xd7z\x83;\nL\n\xc2\x86\xe7g\x8f\xd6K\xd3\xa6\x17\r,w\x17b\xfd\x10\xbcv\x15[*\xd8\xa7\xe3\r\xb3\xc4\x08\xd2\x82p\xe0\x03a\x07\x1d\x91\t5\x93;\xb2\n\xb5<zS\xc0l]).\xb1b\x9cO\x8dg\xbc"\xec\x19\x960:\x8b\xe1\x1a\xebn7\xb0\x84\x1c\x80vw\xf1\x07\x8f\x170\xf19m!:\xd8\xe6H\x8b\xad\x88\x08# \xc1}\xa5\xa9Q\xde\xc6U\xf2\x16\xe9*&\xca,\xf3P\x04\xa0\xa8\xec{\xe7B@\xed\xecX\xbew\x9a\xaf\xffjm\xfd\x8e\xf5\x99R\xab\xcb2S\x1b\xd8\xecR\x10\x1bo\x1d\x17\xf2\xc1\n\xa9\x08\xdb%\x9dO\xbf\xbd\xa2x\xd9\xb8h\xd5\xf8N\x02\x96H\xb8\xa6f\xe5\xcd\xd6\xc4\xde\x8d\xa7Y\xe5r\xfb\xae\xdb\x1c(\x05~\xbe\xca\x97\xcbU\xeaK\xca\x12o\xffU\xff:u\xbbV\x89\xbc\xfdt\xf0\x03\x92\xdbX.^\xea#\xc2\x9fZ\x0b\x9e\xf2\xa4\xdb\x9d\x1b&\xb7\xff\xbc\xac\xf2P\xd5\xf8\xf0Bb\x03\x90"F\xa6e\x8e\x9bW\x0f:\xe7uw\xf6\xd8=\xc7.\x1f\x83Y\xc7\x03\xa0\xaf=\x94\x03\x11\x1f\x1aN\xcc8j\xef\x02\xf0\x18\xfe\x9c\x9etUl\xe0\xbf\n\x01\xf0\xe7;>o\x8b\x9c}\x90\xd1\xea\xa2|D,h#\xd1\x90oa[6\xe6O\x85\x85L0LW\xbb\xacI\x12\x80\x82\xe9\x12\xd2\xfc8vr\xf3"V\xc5\xc0>;\xcb\x93$s<Xx\xf0x\xabG\x1dsZ\x05.\xf4\xa7\xaf_n\x1d\xd0\xaa\x80a\x9a\xd1\x92Sa\x8e(\x8b\xdf\xf1uRp\x84\xa2vD\xf7i\x995\x94\xfa\x10\x06\xf5\x05\xf2\xad+\xcaLeRf\x8ed\xb8Z\xfcz|\xf1nV\x91\x00z\xd2\xd2\xdd\x83\xfb\xf7o7+\x9fZ\xcbo\xa2vz\xb0\x8e\xdaV\xad\xae\x0c~\xac\xd7\xee\x12\x02"\x1c~-\x89\x9e\xa1\x93~\xe8/\xdb\xcd\x0c\tz\x05\xdb\x1b\x88P*\xfe\x88J[\xa5f\x8b\x9a\x83j j`\xdfd\x1c\xe7\xedsyev\xd5\x9b\xcb\x8b\n\x8fsh\xbc\xe6\x14\x87\x9b\x80\xd6\xf1\x17\xce\xee\xc9\x14z\xa8\x8e\xb3\xdb\xf9\xe2V\x96d1[u\xce\xc4\x80P\x06\x06V#?P@U\xaa\xd3\xe6\xc4\xf1>$\xbc-\xcb\x02|g\xa2\xed\xeb\x9d\x91\x00R\xe6\x15\xc6\n\x13q\x8d\x98\xa6\xe5:Sb`6i\xb8;\xecs\xe0/C>\x10z\xba\xb6\xd5a(\xbf\xc8\xe6#\x92\xd5"\xbe\xbf\xe2DA\x96l\xee\x0c\xa2\xfe\xfc\x06\xf7S$E\xe2\xa3\xben$:\x11\xec>Oa\xf0\x1d\x9d\xc8\xee\xb8\xfa\x1d\xeev\xcdU\xb1\xeeB\x91\xd5t\xf8\xe7G\xbb;dp\x1dU_\x1d\xf4\x1b\x89d\xdf\x8f\x08\xe5\xf2\x8d\x14\xad\xc5\x11\x06?\xce\xec\x0b\x8f\x98\x17l\x10\xe4\xa2\xf4<bCA\xc6\xe6\xd5\x13\x1f\xacz\xd1\xc5\xa7\xfe\x01\xff\xb0\xa3\\\x9c\xaf\xe5_dR\xf5\xe8\x00\xb6P\xfa,\xd9\xa7x\xa3\xa6\xfd\xe3\'\xbe;b\xde{nyTT\xb5\x01\xb0\x04`\xdf\xa3(\x18X\x9a\x803\x01\x92\x19/\x99\x04a\x03\x96\x96\xaci\x82\xc5mdu\x10\x12\xf5\xb2"T\x1a\xc4(\x87t\xc8ZM?\x057\x8c\xa3d\xa8\xca8\xdc\xa9\xab\x19o\xa0\xf5\xbd\xae\x99\x8c\x0fk^erEG\xf3aDH\xbe\xe6\xa3\xf2*\xe9\xec\x0f\x190\xf9v\x82$8\xf7\x87\x95jd\xb9s\xa4\x1cj\xcc\xcb\x9d\xf9\xacq\x9ek\x14n\xff \xf6\xaf\x95l\x1c\xef`\xbd\xa2/\xc2g\x9f\xd6}\xb4\x9c\xdav\xf4\xa4N(\xd9\xd5\xbb-v\xe0\x19\x15Y+\x8b"\x04\xaf\xd7\x1e\xa3\xee\x1bH\x9c\xdfI\xf9\xeb\xebS\x81;0\xcb\xb3j(\x84\xb2c\xf7\x04\x98\xd7\x98R\xba\xee\xd8\x15\xa6b\x1e;\xc3vg\xfc8_s\x14\\\xd2\x9a\x90\x01\x88%\xcen\x01^\xb1\xb8\xc3\xd0\xe2\xa8y.z\xd4=+>\x8bI\x05\x0b\xfb\x93i@A\x92\x13c\xeb5e$\x97\xbe\x15\xc2o\xd8\x91g\xc2\xa8\xcb\xc7\xd4\xf2\xba\xc9\x94Xw\xaa\xc0\xe2\x98\xb4(\x12\xcfX29E\xe1\xd7\xbe8z\x9dp5*D\x1bKJ\xfd\x08>qF\x02\x9a\xafU\x92\xbe\x16\x07\x8c\x9b\xe8s\xb9I\x8b\xc4\xf4\xdc\t\xb3\\\x94\xb1\\\xd9\x8d\xffn\x9f\x147i\xbdXO\xa6a\xb8J\x83{\xba\x82D\x1dE4\x9e\xaeYe\xc6\xf2\xab\x8ar\x17\xf5\xd7y\x93W\xa4\x15\x90\xba\xbe5\xa6\xbd9\xb3\xab\xf3\xa5!\xd1&\x95.<\xcex|\xf2\xdb\xea\x9f\xbd\xfc\x13$\xc7\x0e8\x0fe\xb8\x9d\x11\x93\x02\xb8\xe7\xeb\xdft\xa3G\x97q\xe4\x89C}n\x0e\xe0\x08%:J\xee\x0b\\|r.V\x8c\xf8[\xc2|\xac\xd4\xd7\xbc\xc3\x1c\xa9H%\xf7\xea\xa8\xcec\xce\x81Kl\x89\xfaQ|8I\xb7\x84: x\\q151\x8d\xe0\x84\x13f\xc1&tp\xf0\xa4C\xa5\xbaT\xce{\xb8\xf3K\xc2\xd2\xb2\x93ojrAV\xb2\xc0\x8d\x82\xe9L\xdc\x88D\xb6\x88\x9cd\xeb\xfd\x02C\n\r\x01l\x12\xde\xces\xfd"\x9c\xb5z>\x18\xfe\'\x9cMC\xce@\xef\xb0\xee\xe8X\xd5_\x1d\x0e\xa9\xd3*o6)\xee\x01km\xde\xaf\x8ca\xec\xe3\xea\x0f\x96o\xe7\xe9Y\x18\x02\x07\x981\xda\x08\x8d\x8e4G\xc4e\xc4#\xed\x13\x8e\xaa\xfe\xadA\x15pL[\xaf;\xc7I\x9f\x8f\x8fU\xf4\xe0\r\xad#U\xca\xa9\xc6\xc9U\xc9\r\x0f\xb0\xd8X/\xa6\x82\x08es\xa9\x91Q#M\x9d\x98[\x1d\x1e\x99\x10\x98F\xc8\x7fjg;%\xcc\xc59\xea"~\xd0}"O\rJ\x08\xb3X\x12\x9b\x7f4\x8c[m\xab\x8f+T\xe6\x15\xcb\x8c\xdb\x98{\x02\xd4n\x83\'\x82a,\xb1\xbe\x9cO\xe2\xa7\xe4\xcc(]i{u\xe7#\x18wvM\x04\x93\xc0\x02\xddH@?\x12\xcd\xa1v\x0fV\xb9\xfdg\xc0y\xab*\xaa}\xce\x9d5\xe8\x8f\x873S\xa3B:<~;\x7f\xca\xf4\xad)\xaa"\xbb\xcc\x07\x9dY\x912\xde3E\x94`c\xa5\xcb\x17\xc1H(\x0c\x93\xd07\x01\xa1\xbai;L_V\xc6\x03N\xde\x87KCZ\'6t\x14\xcf\xd6\x95V\xa9\'\x0eC\xcd\x97\x89S\xa7\xa2\xedb\xadJ\x03\xe3v\xaa\xd9\xe5Nm&.\x80\xe2\x8aI8\xb4Jd\xa9$o\xe1\xfcB\x8a=\xb6Cx&1WD35\x91\xab\xde\xec%\xd9A\x8a\x9d\x19s4\x02<L\xc0\xfe\xa3\xddSb\xde\xa9\x9aG\x0b\xec\xf5\x1a\x01\xd80\xads6A\x94\xd3nj\xfb<\xed\xdb\xd6=\xb7\xee}\xc0E\x06\xb9\x83\xc6\x12\x8d\xf3\x95\x17\xb0\xc4\x06\'\xc4\xe3\x95\x1e\xc0\xfc\xca\xc8\x92\x0e\xe0\xf8\xce\x19\xe9\xef\x9f\x8e\x85\x1b\x8b\x16\xc2\xa5\xac\xcc\x99\xa9j\x9d!\xb5,\\\xf6E\xe8\xbc\xe1J1\x14q\x7fm:\x9d\x8e\xd6; mw\x7fh\x9bf\x10B\x9b\xe9.g\xe6\xfcf\x08\x958\xd6[\x1d\x07\xbdvi0\x1dg\xe6\xdeB\x14d\x01\x19\xad\x9d.\x06MZJ\xf0r\x98\x91\xd5\xf6mQ\xa7\x03\xcf\x0b\xb0\x1c\xb04\xfc\xaf\xd8\x81\x8f\x03\x0b\xe8\xca\xbf\xde\x81\xf3\xb1\'\t\xf3ZNz0\xc0\xb4k-\x7fbN\x9d\x16\xa3\x18\x04#c\xfe:\n\x8f$S\xe3j\x159\xb4\xd5\xc7G\xa4\xceI\xd7\xf1\xca\xacB\xc1\xbbN\x87\xe0B<\xb0H\x89!DD\xa6\x1b\xe4\x81\xba;\x9d\x9f\xa5({\xa3\x14g\xfd\\.\xc1\xd6\xb6\x80 Y\xee\xd8\xb1G\x86\x07F\xf3n\x17r\xf0\xf0\x11\xa9\xf4\xa74\x17\xaao\x19}BN\xc9\xfc}\xb2\xa6\x15\x82J-\xc0\xd5C\x8b\x93\x01\x9c\x7f\xb89\xc6L\x98\xc3`\xe1 \x17\xe74\xbd\xd0\x02<A\xea&f\x858\x0cZ\xce\xb3\xf71`\x991\x84\xa1*Q\x12\rk\xba\xfc\x83\xd5\x96\x0bI\xca3\xe8\x11\x13\x05ZPPq\xe6}\x99\xf14B\xb1m9\xb1\x17\xff\xeco\xff\xbe#\xe9\x7f3\xb5\xa7x\xbd\xf8\x07\xf2Wz\\\r\x83l\xaa\xf7\xf3\x95/>:\xa0\xc9W\xf5\x97\xfdE/\xaaPSZ\xde\xe3\x93+\xe2\xe2!\xea\xf1\xd5\xf8r2\xdd\x07\xb5\x88TQ\x16V\xbf6\n\xeb=\xa60\x08.^\x91yV\x9f\x1eB\xc6\xe1\xefCW\xf0*~\x84\x86%\xe9\xbb\xc3\xa6\x8d\xb2o\xe6\n\xce\x83\xcb\xeeR1\xe6I\xbf\x10\x1a\xc0\xe1Ca\xf6\xd6qq\xc7\xd3\x16\x06\xb5\xd3\x92$w<c\xe3\xfb\xacW!\x81/\xc5p-\xaa\x1du.\x80%\xc7\xc7[\xfc\xcf\xc5\x84\x98X\xb3^\x06\x91a\xdd1is\x9b\x0c\xc12\x90T\x92\x89\x80\x1d$\xe5}e+W\x82J\xa7\x8c\xc6^\xa0\x87\x16\x83\xfd}\xce\x04\x99\x9c\x8a\x1e\x15\x81@\xd5%\xf2J\xa4\xdb\xe8^\x15s\xc6\x06\xb5\xe5&\xe8\x03\x0fV)# \x08\xe2\x1c\x1c\xa0\x03\xbd\xdb\x98+t\x01\x07\xf8Io\x85%\xd3\xbf\xf0\xda\xa8\x96\x8d[\xad8~ jZgw\xbb@\x9d\xafr\x82+\x19\xda\x942\x04\x83 \xe7\x14WVZ/\x94/J\x8a\xc8#-\x08T\xaa:u\xe1\xd7\x022\x8e\xff*\x18\x8f[$\x90\x90\x05\xad\xb5\xbc\r\xd1C\x04\\\xdc\x03\xb8\x89\xad\xda\xe3\xee\xd1\x89_\x1f%\x89\x8aK\x9f\x87\x8a\xb3\xaf\xa4:\xaeZ\xe3\x80\xb1\xcf<\xa8t\xd8\x02\x9a*\xc7l\xd0\xe5\xe2\xdf\x05\xd5l\xcd\xcd\xe4S/\xedf_\x12\xf2\xd5\x8as\xb5\xb2\xe8T\xf5_.\x05\xd9\x930\xd6\xb5(\x0bp\x90\'C\xe7\x15`\xec]/\xb0\xb9\xae<\x92\xddC\'\x0e\xca\\mC\xa3\xf7\xad\x86\x99\x82\x1bE\xda\x92\xb4g\xb9d\xe9\x10B\x85\xef1)\x07[Z$\xfdl\x01\xeb6#\x01h\xfc\x02@{=)\x11\xa8\xc6\xef\x1b\x89B&Us\xe9\x92\x9f\x90\x00\xeb\x88H2@[\x8e\xca\xd8\xcc\xf07\x8c\xc7%\xa1\x88\xc5\x0b\x14\x7f\x00\x81I)b\xee\x82j\xa9\xb5Z\'\x9d\xd1\xd6\xc9\x97\xe6U\x08\x8b9\xac\xaa\xae\xc6\x14X\x8e\x80\x04\xd1}\xc8\xfab\xfaK\xbdj.\xb5m\x85~<\xbb\xdc\x9a\xa2\xf8W~\x885\x07\x18\xc4\xe3\x9fMQ\x15\xe1P/\x7f\xf4<\x04\x83\xdbO\xb3$\x87\xe8g4\xf5\x1dL\xab\x19I,\x0c\x11\xc7\xec\xa9b\xc0\xb7"CI\x9d\xbf\xef\xbbX\xbc \xfe\xd87r\x9a\xba=\xf5\xb3\xf5\xa0\x17\x85\x1e\x0e\x1b\xc8[\x05\xd6\xf9\xa2k\xf0\x8e\\\x04\xf4|\xafx\x82P)j=v\xbdu\\\xe7\xa3\x7fR\xed\xe0\x98|T\xec\x80\xdf?\xf6\xd8\xfe\x7fX(\xeeG\xd6\x19&\xae\xab$\x92\xd1\xb0\xc0\x03A\xe0\xda\xf1,vXV\x90\xf4\xd1[}[~\x91\xdd\x07\x81\xd5\xb6-\xe6\xfd4\xa8\x84\xf8\xfc\x9c-\x1ad\xc0\xc6H\xfb\x83\xf5\x15\x00U%\xbd\xec\x8br\xf5\xc7\x84\xa6S\x95\xc9\xe6\xf4\xab\x0c\xd7\x80w\x05!\r8/"\xf9P\x1e\x8b+\x94`\x7f/~\xafV\x04\xa3\x875gt\x12i\x0fa`\xd4\xd9\xecp\xa6@~\x01\x05b\x82\x12\x15\xac\x06~\xdc\x95\x97\xa2\xb4\x13\xa8h\xc0\xa0\xec\x0c\xe3[\xc8\xce\x03\x13\xe6\xe3\xb2\xd6\x0f\xe7\xe3\xbd\xf6p;^|\x12\x0eD\xd5^\xd6\x1b\x1d\xe6r\x98\xddYYJ\xceq*\xd9\xb9\x00\xc4\xa4\x93{\xe5\xcfG\xdb\xae?CC\xd0\xc5J\x18lX\x1c\x07\x0f\x95\xb7\xbb\x84\xc1t+a\x14\xfd\xe1S?j\x98\xee/\x08\x0e\xb7\xf8\xe2\n\xbd\xbc\xef.\t-\x0b]\xe7\xb1>a\xfd\n \xd82\xa5\xb7B\x99\xa4\xd7\xc0()\xf7k\xce\xbde=\x9d\xed\xe0\x06\xc2X\x83\xd0\xe0\xa0\x86\xdbC"\xdb/\x19\x0el0\x92\xa5\xddP6\xcd_\xcbv=\x86\x04(\xb8\xfa\x827\x944R\xb5\\\x90\xe2\xa5\xe6\xd9F\xcb[\x8c"\xe4\xe6\xef\xfe\x15\xeaw\x8eUEN\xdf\xb9\x1fvN\x08\xda\xe9\xfa#\x01*4\x7fk\xfb\xf4\x85^\xfc\xae\x11S\xd8\x8fX\xa8X\xe6\x9ccj\xb6\xcc\xed\xc3q\xc9\x1e\x00H\x7f\xb0\xd0\xc3\x99\xdf1YG\x83\xb5\xf7\x0cw\xe1m\xeag-\xe6\x07n?K\x81>\xb0\x07S3\x913\xfd\xdak\xdb\xf5zV\x8c\xb3\xa0g,z\xca\xea\x8dY\x83\x17\x14\x01\xbf\xebBC.7G\xf8u\xd1Z\xe6t\x0e~\x95\x84\x96\xcaE\xcf\xe1\xc3\x1a\r\x9e\xad\\\xd8\xcaF\'\xba\xfb\xd7\xdf\xd8\xc5\xbe\x84d\xc3\xc3H\xe3\xbf\xb0\xc2\xa7\x80\xc7D\xfc\xb1\x99\xdbUx\xe3LCB\x1b?T\x84\x10\xbc\xce,\xd2k\xdf\xc0\xfd\xa0@\xe0t\xb4\xb4h8\x9b\x93*\xda\xda\x85\xd2\x02\xef\xec\xde\xfe\x9a*\xe8\xa0\x9b\xae{\xf1\xa0~(\xe7^\xeb\xd19`\x0b\x0fc\xf5y\x01`\xd2\x10\xaaO6\xdeQ\xd9\x84\xad\x96!\x80z\xb5\x84\x16\x1a6\xa9\xa0\xb2\xa6D\x95 \xb2V\xd6\xc9\x03\xb0\xbe\x9e\xc2ON\xa2\xa6d\x11\xfd\xd67\xcc\x96\xc2lg\x06(\x8d\xfc\xb5\x95\xc4\xc4\xf1\x97\x9e\xd9:+\xe3+\x00\x0bP\xc6\x18\xde\x1b\x86aH\xb7\xb2<\x81\x16\x00U\xe3\x8d\x9d<\x12F(x&O6\x8eV\r\xe4Q\x08\xec\ne\xcdc\xc3\x98\x9d\xce/\xbe\xc4\x92W\x1d\x83\xddi\xd7MQ\xcc\x07Kr(\xddK\x83_\xe7\x8e\x19\xfd*e\xee\x08`\xa8a\xd32\xa9\x9f\x85\xa5\xa9\xf7w\x8b\xbc\x8e\xc3\xce\xeb\x990SX\xb5ye\x99\x8eP\x82\xac\x9f)]\nA7P\xfd\xd4Yl\x9e\t]\xfb\xe2;\xed\xa0v\xa3\x04\n\t\xe5\xee\x13\x9b\x01\x15\xe6\xbe\x93\xb9\xa5\x00\xa0\xc3I\xa83\'/&\xc0u\x1a\xfe\x84r?\x07\xf5\x96/\xd2\x96\x00\xff\x92\xcf\xbb=\xd0\x1e\x15\n%\xef\xae\x99\xda\x94\xd2\xe3\xee\x9d\xe8\xeb\xb5\x93\x99\xeb\x1a\x02\x92Q\xb7>\x9e\xe2\xb7\x8c=\xf8\x0eB\xd5\x15\r\xac-Nz\xc3\x95\x7f\x81N}\xa1\xe3\xa5\xf8\x07\xf8\xa7\xde\xde\x94\x0c[\xfbr\xe9\xea\xec\xd6\xb0F\xd3[UF6\x10+\xceD\xc7u\xed\x98\x9d!\xb4\xa5\xc4\x94\x8b\xaa\x81\xc7y\xd8\xc0\xdaK\xd5\x0e\xbeC#&\xfd_\x85~\x19^\x17.\x11\xa4\x95\xbb\xe8-\xd6(/\xbeD\xa8\xf6Z\xfb\xed\xfe\xad/\x85\x8f\xcd\xbb\xff3\x0b\xa3\xa5\x81\x89\\\x17WF\xf2&\x95\xad\x059,v%\xe3\x95\xbc[\xcf\xfa\x7f\xbfo"\x01r\xa8 S\xbb\xdd\xf4\xa2\xe4Le\x19\xe5\x14\xd6\xe8\x0fu\xa0\xf1\xf7\xc9\x8f\xb8\xe0\xd3\x10\xb6\x0e\xd2F\xfa\xe8Ht\xeb\x13\xb7\xd6_\xbe\xb1U;,v\x89\xaa`a`Ee\xfc\x06\xd7\xdb\xe4\xeb\x9dt\t\x88\x84\x82\xf7\xd7M\xd3\x91\xab\xd1\tdN=\x91S\xce\x9ae\x06\xb2\x84\xdb\xb1\x12|R\xccA\x11/{\x0b}\xad>w`\x9a\'\xbcx/\xae\xf1\x04Xro\x00P3\x98\x0c8`\xcet\xc6L\x94!\x8as\x8e\xb3V\xd4\xe1J~@\xd8\x06\xf6\xeb5\xc2\xeaU\xbc\x9a\xa3WId\x11\xd6\x02DC|}+h\xb3\xb6\xa3\xfc\x9dM~\x92\xf6o\xbcg\xc0\xa1\x98mb\xf6D\n1\xad\x9f\x0e\x7f\x92\xbb\xda\xd0\xe8\xed\xf93\xe6\xd1\x9a\x10\xfd,\xa1\xf6_lX\xcc\xdfR\xf8\xba\xe1\x93\x96L\xd1c\xd9\xa1\x0b\xeb\xe6y\xd0\xd1\xb4\xdc\x15y\x16\x8dN\xeb.\x93\xc6\\G\xa1\xe1\xddM\xe2\x1a\x166\xebp4\x9e\xb9h\xb0\xb5y71\rY\x9d\xf3\x160b\x05\x9fn\xcf\x88$\xc0\xbf\x1a.\xb4\xfa+%s+\x98\xe7\xfe\x80q\xfe\x99\xf4\xbf\xab\xda\x14Q\x7f\xe4\xcdCgS2\x8d\x90|Q\xd0\x96&\xe3o~\x1b\xc3\xb9&tS\xff\xd9\x01"\xca\xe0\x84\x8f\xf9_\xdc\xd0\x9f\xe6\x88\x05\x96\xf1{\x1a\xe3*\xb4~q"\xc3xn\xdci\xb2\xf9\x11\xa8\x90\x00Ii\xab\xa4\x13\xe6\x01\x96\x91\xad\x84\xda\xc49\xce\xba5\xdd)\x92W@`\xcf\x17\x14i\x9b\xdfAXzT\xcc\xce\xf5\xba\x18\xc7s\x1e\xd4\x83\xa2\x1f\xac\xe4\xf7\xba\x1a\x8a\xec\xeao*\xa9\x1e\xfd\x1cw\xadpY[\x1a\xa0\xcdMf\x96\xbf\x18\xe4\\\xda\xf9\t\xf9\x18I\xdf\x10\x9a\xd2]\xe98y\xe9\x93\xe6Ka\xc1\x9f\x03*A\x11{\xb4f8\x80;\xbeI&\xbd\x1e\xcbf\xc9\xdc{\xf6\xeb\xc9\xc2\xb9\xb9\xac;\xcf\x9fvD\xac\xefjR;\xd9\x93X0\xcd\xbb\xe3\xd1\x90\xf9o\xe1\xfe[j\xfd\x81\xf1\x0b\x13\xe3\xc6u\x05\x1c2\xf0R\x07xx\x89\xd5\n6\\\x82\x88\x17V\xe4&\xb3R\x9a\x9dj \x00\xb4Lpg6L\x18\xf2\x13\xaa\xc5\x15Z\xceX_\x01Y"\x86\t\xb0\xac\xfdA\x14\xd3#\xe5-\x8cl.\xf9i&5\xa8\xa6\x8e\x99s$\xd2\nw\x12\x0f\x9bT\x1f\xba7\x84\x1ctA\xc3\xb7\xf2\'\xd1_\xef\xd738Z\x92-\xdd\xa7xG\xae\x107\xea\xa2\x05\xbd\xefLs\x9b\xd4\xf2\x9f\xf84\xc7\x85\xeb\xfe}\xa1\xc5os\x8b\xcd.\t\x1a\x00\xbdK\r\xb1\xadE\xe7\xda/\xder7\x1f\x95\xbf\x90?\xa6\xf7\xfc\xe7\xec\xc5\t\x81\x17\xc7\x06R\xaf##\x0b\x8cX\xdd\x93S\x8a\x8b\xbf~\xbft4"A\x9c\xb5\xa2p\x10O\xb5I\xee\x1d\xb43\x82\x92\xf8\xfd\x82\x08\xd7PR\x07Ht\x16\xfc/(\x1d,\xa1"\xba}yX\xf4\xbbM\xdc\xd9\xac\xf4\x9b\x8f\xb5\xb2g\xf1\xffb\xa4M\xd7\xcb=\x90\xf1\xd5jW\xeaW\x0e\x03]U\xb3\x12\xec\t\xf6\x1b\x8d\x17W\x19t\xbe\xfa\xf6\xbd\xea>:j\xc2T\xc6\xa2|\x04\x9c1?Tm\x15\xd7\xfc\xfa\xe5\x98\xb1FHxJ\xc4hX_?\xe5\x15\x91|e\x1d\xa1!\x8e\xd4\xe3c\x86w\xb3\xeal\xcc\xc1\xeas\xef\xc1\x97U/\xed\n\x0bD\x9d\x12N\x89\xcf\x96{9:z2\x06va\xa0\x11\xc7\xcb\x18`\xdc\xfe\xff\xda=\xd6\xedpS\x94\x88\xa92\xf8\x92\xb7\xc0\xfe\x8a-\x9e\x00\xad\x16\x86\xd1\xc1fpK\x08\xf2\xcd\xd5\xf9[:\x19z{\xb4A\x00h\xc6\x89!\xdaV\xd7r\x91\x92\x19\x9f;\t?\x9e\xe6\xd2,\x00\x91I\x16\xbc\xf3\x84\x1b\x07\x0f\xd0\xbb\x99p\xb5\xa5\xda2\xbc-n:i\n\xcf\xe1\xd8W}\x16\xa5\xad\xf0\x88\x93woewD\xee\xbe>\xf4\x87\xed\xeb\xcf\r&\xc9\x16n\xfb\xc9\xa4\x94\x13\n\xbbY\xbf\x18$\xfe\xdb\x0bw\xc7c\x12\xaa\xb2\xb7\x1f\xd9\xd1\xf7\xf8\x87Xs\x05\x84\x95\xd1\x16`\xbbUn\xeb\x7f\x8b\x972c\xe15\x03\xbfS\xfd5\x13-6\' r\xc0\x0eqb|.\xa6y\xffc\xd4m\xba@\x14\xa2e\xe0\x9aL:\xf0Z\x8bv\x86\x1f\x97n\xf0nt\xc9`-\xd1\x84P\x8e\xe0\xc3\x97z\xe6\xd4\x93\xdbi\x91w\xabS\x1c.\x1d\x1cg\xb4\x9a\nkL\xe1\xc8\x07&\x1e\xa1\xd6C\xbc\x8bl\xbe0.\x86\xe1\x11\xc9g\x80:\x0c\xee\xa7v\xf3k\x19[\xe8Uwc\x93\x08\x1b\xf5\xb2\x84\x9c\x99|\x94\x12\x99\xed]\xc6\x7fsrl\x04\xc2\xe6\x00\xc9\x8c\x84C\xdf\xba\xaf\xdfE\x7f\x94&\x02-\x83~\xa0\xca\\\x9dQ\xa7H\x1f\x1e\xc1h~"\x1bH6\xbf\xbc\xfc\xf9\xf4\xbcLw\xd6\x1e\x8b\xc0\x8a,Lz\x87_\xbcyr\xf7\x0c$Z7&\xcd\xe5\xa2\x06k<\x06,\x94\x86~S\xd9p\x87\xc3\x7f\xb3\xa8Z\x1d\x8asA\xd1b\xef\x1f\xc7uP\x18B`\x8d b\xe8\r\x9c\x93\xda\xfc:\x15\xae\xe7\xf0\xad\x0c^/\xeb\xf3\xf6\x11\xdafT\xe9\x82\x14wX\x84\xc1\x01\xa0\xa8\x817\xc3\x84w\xc0Y\x1e\x8c\xaaa\x05\xff\n\x90')
1
+ import flask_babel,flask_babelex
2
+ from hiddifypanel.models import BoolConfig,StrConfig,ConfigEnum,hconfig,ConfigCategory
3
+ from wtforms.validators import Regexp, ValidationError
4
+ from flask_babelex import lazy_gettext as _
5
+ # from flask_babelex import gettext as _
6
+ import wtforms as wtf
7
+ from flask_wtf import FlaskForm, CSRFProtect
8
+ from flask_bootstrap import SwitchField
9
+
10
+ from flask_admin.base import expose
11
+ # from gettext import gettext as _
12
+
13
+
14
+ import re
15
+ from flask import render_template,current_app, Markup,url_for
16
+ from hiddifypanel.panel.hiddify import flash
17
+ from hiddifypanel.models import *
18
+ from hiddifypanel.panel.database import db
19
+ from wtforms.fields import *
20
+ from flask_classful import FlaskView
21
+ from hiddifypanel.panel import hiddify,hiddify_api,custom_widgets
22
+
23
+ class CommercialSettings(FlaskView):
24
+
25
+
26
+
27
+ def index(self):
28
+ form=get_config_form()
29
+ return render_template('config.html',form=form)
30
+
31
+
32
+ def post(self):
33
+ form=get_config_form()
34
+ if form.validate_on_submit():
35
+
36
+
37
+ boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
38
+ bool_types={c.key:'bool' for c in boolconfigs}
39
+ old_configs=get_hconfigs()
40
+ for cat,vs in form.data.items():#[c for c in ConfigEnum]:
41
+
42
+ if type(vs) is dict:
43
+ for k,v in vs.items():
44
+
45
+ if k in [c for c in ConfigEnum]:
46
+ #if not k.commercial():continue
47
+ if k in bool_types:
48
+ BoolConfig.query.filter(BoolConfig.key==k,BoolConfig.child_id==0).first().value=v
49
+ else:
50
+ if "_domain" in k or k in [ConfigEnum.admin_secret]:
51
+ v=v.lower()
52
+ if "port" in k:
53
+ for p in v.split(","):
54
+ for k2,v2 in vs.items():
55
+ if "port" in k2 and k!=k2 and p in v2:
56
+ flash(_("Port is already used! in")+f" {k2} {k}",'error')
57
+ return render_template('config.html', form=form)
58
+ if k == ConfigEnum.parent_panel and v!='':
59
+ # v=(v+"/").replace("/admin",'')
60
+ v=re.sub("(/admin/.*)","/",v)
61
+
62
+ try:
63
+ if hiddify_api.sync_child_to_parent(v)['status']!=200:
64
+ flash(_("Can not connect to parent panel!"),'error')
65
+ return render_template('config.html', form=form)
66
+ except:
67
+ flash(_("Can not connect to parent panel!"),'error')
68
+ return render_template('config.html', form=form)
69
+ StrConfig.query.filter(StrConfig.key==k,StrConfig.child_id==0).first().value=v
70
+
71
+ # print(cat,vs)
72
+
73
+ db.session.commit()
74
+ flask_babel.refresh()
75
+ flask_babelex.refresh()
76
+
77
+
78
+ from hiddifypanel.panel.commercial.telegrambot import register_bot
79
+ register_bot()
80
+ if hconfig(ConfigEnum.parent_panel):
81
+ hiddify_api.sync_child_to_parent()
82
+ reset_action=hiddify.check_need_reset(old_configs)
83
+ if reset_action:
84
+ return reset_action
85
+
86
+ if old_configs[ConfigEnum.admin_lang]!=hconfig(ConfigEnum.admin_lang):
87
+ form=get_config_form()
88
+ return render_template('config.html', form=form)
89
+ flash(_('config.validation-error'), 'danger')
90
+ return render_template('config.html', form=form)
91
+
92
+
93
+
94
+
95
+
96
+ # form=HelloForm()
97
+ # # return render('config.html',form=form)
98
+ # return render_template('config.html',form=HelloForm())
99
+ form=get_config_form()
100
+ return render_template('config.html',form=form)
101
+
102
+ def get_babel_string(self):
103
+ res=""
104
+ strconfigs=StrConfig.query.all()
105
+ boolconfigs=BoolConfig.query.all()
106
+ bool_types={c.key:'bool' for c in boolconfigs}
107
+
108
+ configs=[*boolconfigs,*strconfigs]
109
+ for cat in ConfigCategory:
110
+ if cat=='hidden':continue
111
+
112
+ cat_configs=[c for c in configs if c.key.category()==cat]
113
+
114
+ for c in cat_configs:
115
+ res+=f'{{{{_("config.{c.key}.label")}}}} {{{{_("config.{c.key}.description")}}}}'
116
+
117
+
118
+ res+=f'{{{{_("config.{cat}.label")}}}}{{{{_("config.{cat}.description")}}}}'
119
+ for c in ConfigEnum:
120
+ res+=f'{{{{_("config.{c}.label")}}}} {{{{_("config.{c}.description")}}}}'
121
+ return res
122
+
123
+
124
+ def get_config_form():
125
+
126
+
127
+ strconfigs=StrConfig.query.filter(StrConfig.child_id==0).all()
128
+ boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
129
+ bool_types={c.key:'bool' for c in boolconfigs}
130
+
131
+ configs=[*boolconfigs,*strconfigs]
132
+ # categories=sorted([ c for c in {c.key.category():1 for c in configs}])
133
+ # dict_configs={cat:[c for c in configs if c.category==cat] for cat in categories}
134
+ class DynamicForm(FlaskForm):
135
+ pass
136
+ is_parent=hconfig(ConfigEnum.is_parent)
137
+ for cat in ConfigCategory:
138
+ if cat=='hidden':continue
139
+
140
+ cat_configs=[c for c in configs if c.key.category()==cat and c.key.commercial() and (not is_parent or c.key.show_in_parent()) ]
141
+ print(cat,cat_configs)
142
+ if len(cat_configs)==0:continue
143
+
144
+ class CategoryForm(FlaskForm):
145
+ description_for_fieldset=wtf.fields.TextAreaField("",description=_(f'config.{cat}.description'),render_kw={"class":"d-none"})
146
+ for c in cat_configs:
147
+ if c.key in bool_types:
148
+ field= SwitchField(_(f'config.{c.key}.label'), default=c.value,description=_(f'config.{c.key}.description'))
149
+ elif c.key==ConfigEnum.lang or c.key==ConfigEnum.admin_lang:
150
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("en",_("lang.en")),("fa",_("lang.fa")),("zh",_("lang.zh"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
151
+ elif c.key==ConfigEnum.country :
152
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("ir",_("Iran")),("zh",_("China"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
153
+ elif c.key==ConfigEnum.package_mode:
154
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("release",_("Release")),("develop",_("Develop"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
155
+ elif c.key==ConfigEnum.utls:
156
+ field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("none","None"),("chrome","Chrome"),("edge","Edge"),("ios","iOS"),("android","Android"),("safari","Safari"),("firefox","Firefox"),('random','random'),('randomized','randomized')],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
157
+ elif c.key==ConfigEnum.telegram_lib:
158
+ # if hconfig(ConfigEnum.telegram_lib)=='python':
159
+ # continue6
160
+ libs=[("python",_("lib.telegram.python")),("tgo",_("lib.telegram.go")),("orig",_("lib.telegram.orignal")),("erlang",_("lib.telegram.erlang"))]
161
+ field=wtf.fields.SelectField(_("config.telegram_lib.label"),choices=libs,description=_("config.telegram_lib.description"),default=hconfig(ConfigEnum.telegram_lib))
162
+ elif c.key==ConfigEnum.branding_freetext:
163
+ validators=[wtf.validators.Length(max=2048)]
164
+ render_kw={'class':"ltr",'maxlength':2048}
165
+ field= custom_widgets.CKTextAreaField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
166
+ else:
167
+ render_kw={'class':"ltr"}
168
+ validators=[]
169
+ if c.key==ConfigEnum.domain_fronting_domain:
170
+ validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})|$",re.IGNORECASE,_("config.Invalid domain")))
171
+ validators.append(hiddify.validate_domain_exist)
172
+ elif '_domain' in c.key:
173
+ validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})$",re.IGNORECASE,_("config.Invalid domain")))
174
+ validators.append(hiddify.validate_domain_exist)
175
+
176
+ if c.key!=ConfigEnum.decoy_domain:
177
+ validators.append(wtf.validators.NoneOf([d.domain.lower() for d in Domain.query.all()],_("config.Domain already used")))
178
+ validators.append(wtf.validators.NoneOf([cc.value.lower() for cc in StrConfig.query.filter(StrConfig.child_id==0).all() if cc.key!=c.key and "fakedomain" in cc.key and cc.key!=ConfigEnum.decoy_domain],_("config.Domain already used")))
179
+ render_kw['required']=""
180
+
181
+ if c.key ==ConfigEnum.parent_panel:
182
+ validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/.*)",re.IGNORECASE,_("Invalid admin link")))
183
+ if c.key == ConfigEnum.telegram_bot_token:
184
+ validators.append(wtf.validators.Regexp("()|^([0-9]{8,12}:[a-zA-Z0-9_-]{30,40})|$",re.IGNORECASE,_("config.Invalid telegram bot token")))
185
+ if c.key==ConfigEnum.branding_site :
186
+ validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/?.*)",re.IGNORECASE,_("config.Invalid brand link")))
187
+ # render_kw['required']=""
188
+
189
+ if 'secret' in c.key:
190
+ validators.append(wtf.validators.Regexp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",re.IGNORECASE,_('config.invalid uuid')))
191
+ render_kw['required']=""
192
+
193
+ if c.key==ConfigEnum.proxy_path:
194
+ validators.append(wtf.validators.Regexp("^[a-zA-Z0-9]*$",re.IGNORECASE,_("config.Invalid proxy path")))
195
+ render_kw['required']=""
196
+
197
+ if 'port' in c.key:
198
+ if c.key in [ConfigEnum.http_ports,ConfigEnum.tls_ports]:
199
+ validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.Invalid port")))
200
+ render_kw['required']=""
201
+ else:
202
+ validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$|^$",re.IGNORECASE,_("config.Invalid port")))
203
+
204
+
205
+ # validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.port is required")))
206
+
207
+ for val in validators:
208
+ if hasattr(val,"regex"):
209
+ render_kw['pattern']=val.regex.pattern
210
+ render_kw['title']=val.message
211
+ field= wtf.fields.StringField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
212
+ setattr(CategoryForm,c.key , field)
213
+
214
+ multifield=wtf.fields.FormField(CategoryForm,Markup('<i class="fa-solid fa-plus"></i>&nbsp'+_(f'config.{cat}.label')))
215
+
216
+ setattr(DynamicForm, cat, multifield)
217
+
218
+ setattr(DynamicForm,"submit",wtf.fields.SubmitField(_('Submit')))
219
+
220
+
221
+ return DynamicForm()
222
+
223
+
224
+
4
225
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
226
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,39 @@
1
- # 2023-04-08T15:11:14.022868
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xc6\n\x00\x00\x12\t\x04\x00X\xec\xa1*\x82%\xf2\xb9\xa3\xef\xd5H\x1cU\xcb\x9b\x00\x00\x00\x00\x00\x00\x00\x00=\xd5D\xe9\xc6\t\xa1\xa8\xb5~\xb4%G\'\xceE\x97Zcr2C\xea\x03\x03\xa1\x80\x9a\xca\xe5\xd4R9\x18\xeb\xe4\x16\xccU\xfb\x81&}Bd\x99\x14\x8d\x97\xca\xe2\xda\x91\xf2\xf4\xf7\xdfX\xe7\xd6\xa4fzs\x0f\xed\x02\xc0:\x81\xd0\xfc\xfclPY\xee$Ptf[[-O)\x07`\xd0~\x01\x1b\x1c\xb3\x11y\xc0\x10\xb4g\x0c\xac&)\xb9\xf6\xc4W\x06\xfd>F\x17\xbd\xc1\x95=SP\x99M\xa4\xc5\x1c\xd9\x03\x15O\xa8F\xef\x9d\x953\x9e\x81\x88o\xcc\r\xaa\xfa\t\xe3\xc3>%N\xbf\x1f\xf8\r[t\x97\x11M\x11`\x1dn26;\xf1\x1c\x0b\xa3-w\xd6g?\x15^35\x10\xac\n\x01SUGu\xbc`}\xf3\xc5\xc6\xc9\x95\x8e#G\\kO\xefN1\xa6\xd5\xe2\xe4\xff\xf7$\xbeu\x8d\x06\x9d#\xd7g\x0fp\xaef\x9aHa\r\x1e\xdc\x8e\x0f\x88\x1a\x96\xe5\x95\xa2\xbeb\xa3\xd1\x1d+-\xf6\x9d\xe9}\xa8^TX\x97\xa7\xe6\x03\x80\x98Q\xc5e2\xbf\x16\xe4A\x04(+B\x17\xd8\xb8z\xcc\x7f\xfeo\x1d\xaf\xbdgC\xaf/A\xad\x8e\xde\x05\x1aNs*\xe1\xaa\x96\xba\xa9\x1aE\x0f\xd9\xc6\x08\x00MS\xf3%\x16\x92\xb3\xb2\xe4\x91C`\x8c\xa0n\x99\xaab\xa2\xed\x17\xb9h|\x90\xad\x90\xa7\xc4\xddS9"0W\x06h\xfe\xf6\xdb\xb0\xbd\xcbMw5\xfb\xa3U\x84L_\xba\xc0Z\x8b\x95\xc5\x8a\xd5\x8f\xd9\x14\xdb:\x14\xc9\xd9\xef\x08\xbc~i\x8eCUwG18`\x89*xr\x9c]"\xd8\xf9\x85t\xca"\x1e\xd7\xb8j}\x04\x8d\xaas\xb6\x1d\x16\xc1\xbfq\x95\x10\xd9\xd4q\x08\x18\xc5\x1f/\x86\x14\xaf\x1d\xcb\xe3\x1d3$\tCS\xc9\xd2\xd0\xf9\xab\xe3\xabY\x89\xe2\x8e>\xb1 \x15\xcb\xb9\xbe\x13\xe42%%\xe2\xb4\x94e\xf9{\x0e\x86\xc6\xc7fA\xf3\xba\xaa\xe7(5\xd5Yr\x9e\x9d\xc3<\x17\x00\xee8;\xc75\x8d\xe7\xbb\xab\xab\x90\xe5\x15U_C\t\x87\x7fw{.}\xd7\xc5\xf2\xfa\x8e)\x8b\xc9b\xb4\xe1Hi\x1fyV\xd5d%\x05\xf2\xff\x1a\x81\xbe\xfcI\x95%\x12\x9dvgG\xd5\x1b_o\xba\xb9\xa6`\x8fD|F\x96\xaf9]\x0c\xbd}\xcc\xca\r0\x12\x0f\r+U\xb6;\xc5\xac;\xf7\x15\xe9\tJz!)\x7f2<Q\x7f69<\x1c%P\x8cN\x99M\xd2\xda>\xe7{0\xbb\xc6\x07\x97\xbcv\x90\xacm<\x1b\xf1, \xc5\x88\xcfj0\x953\xfba`\xbc\xdd\xe6\\?\xdf#Rd\xc7\xd2\xd1\x13J\x97\xe0\x93\x140"C\x0c\xa8M\xdb\xd9(\xa5\xf4=\x1c\xaf\x85A\x13\x80\x8c\x8fu\xaa4g\xd5\xd1\xa4\xcd\xe6\xa8|\x89\xb6q\xdf/\x9a\x86\xca\x1e\x90\xa8+\xdd\xaat\x8aN\xdd\xf6\xb6Y\xc9\x0f\xf7\xcc\xb87\xc8\x1a\xa0\xdc\xeb\x8a;\x9dB\x93\nrM\xad#w\x14[\x8e_e \xb6\x8b\xd7\x8c\x1b8A\x15\xef\xc3\xc2vu<5\xbbw\xabd\xc0\x91\x95ub(\x9fe\xef\xbd\x1dd/\x06\x83\x94\x1a<QWQ\x07\x17-\xcb\xbc[\t\xd6\x00W\xbd\xffC\x94\xea\xe4zz~\xe1\x04\xb4\r\xea\x8b\xc0\xcdl\xe8=\xf2\xba~\xf1h\xb5\x119\x93d\x83\xb3o\x90+\xca\x05\x88M\xf9\xb29\xa7\xd74\x1b6\xc0\x8b\x15:\xce\xa5\x8b>6@\xb6bj\x05\xbb\x93!\xba\xfdW\xd2e\x01\n\xff2\x10\xd9\xc53\xbd\xcc\xb1\xcf{\x0c$\xda\x9a\xe2E\xeb\x19\xcc\x9a*u\xdd\x81\xc4\x14D9\x03\xae~\x86\xa41}\xdc\x10\xab\xcc\x1a\x19\xb8\xc5\xcf\xfb\x85.\xedL\x0eD\xb1\xfb\xc9M\x99\xf5zQ\'B\x88\xab\xd93\xc8x\xc0\xcc\xf7\xba:\xc2`d,\x18\x06\xcf\xdb\x88\xf89}\xfa{\x8fJ/U\xd33\x18\x05\xb5;\x1a~\x11\xa2\xc5v\xbf\x97\xa9\xdaP\x8c\xb4\xdf\xa0\xd6`\x93\x92\x9a:ZzL\x0f\x85aK\xa7T?\xc7\xaf\xf3\xcfUp]!(\xc7\xf6\xa8\xdc\xe20\x13\xda\x16\x15\x8a\\\\\x83\x142\xf8\x89\x1f\xbd\xf31\x8e\x0b<\x88\x1e<\xd9|x\x12\x0e\\\xcf.>J\xdc\xe0\xe8\xdc\x9d\xd8\xb9\x95l\x81VC(\xa8\x9c\xf7\xc2q\x1fT\xeb/m6\xe9\x87\xae\xa6y\xfc\x95\xf9!q\x9ax"\xc9\x0ff\xb1\xb8`}R\xc3\xf8v/\xa1\xed\xb3\xb5\xbf\xdc\xd2Vdi\xdfw]\x15C`\x1d\xb0\xae\x0cz\x95nfv\t\xfa\x95s\xb6k\xff\xae\x81\x18\xca\x92b\xbc\xe3\xda\x0c: \xc2\xdf\x8f\x85\xbdq\xc3\xf1N_\x00}\xd0vd\xc28\x95\xcaaT\x93\xd1\xa06sf\xbb\x97\x14\xd9\xf7\xfc\x7fx\xdf\x87\xc4\xfe\nV}\'\xba\xdf\xae\xfe\xa2}.X\x11\xb0]\xbe\xc2Z\x8f\x8c\xb3\xc9\x8a\xff\x03\x07\xec\xe8W\xdbX#\xd9\x9d\x85\xce\xac$\xcd\xe2k\xe3t\xfd\xedz\xe4\x8f\x9e\x99\x01\x16\xd4\xfff\x1e\x85\x06\x84\xb6\xae\x94\xdeV\\\xf3\xa0\xbe*E\xa9\x03e\xdc\x00\xe6\xfc\xc1\xc3\x87(\xe9\xa3|\xfaP\x03A\x05\x14\xa4"D\x94\xb3a\xcdf\xbc\xe1\x1aV\x88\xed\xaa8\x9a9K\xb5\x13G\x88\xeb\xd8\xa0Y\xd3\xa5b\xf70\xe2QW3\xf4\x18\xb4[d8\xa81\xc1Ju*O\xe1\xf1\xc02\x06r~\xf0?>\xdcl4\xe8g\x00\xbc\r\x12\xdc\x112\xf7\xcd\x91\x88\xee\x89\xbf\xfb\x0c\x14\xfe\xf8\xc4\xd6"\x97c\x18\xfe`\x11\xfb\xd8\x86\xe9+\xa5\x0b\xf3{\x95\xa0\x82\xd1Neb\t\xe6\x8b\xf8\xde\xb4\xa4\xdbf\x19\'kG\x1f\xe0F\xd2\xf8\x147\x8aU\x90<\xc18\x078\x14*\xbd\xe2x\xa2\xabU7\x91\xad1Q\xc3\xcb\xc0\x10\xa4W\x8d/\xb6\xdb\x7fl<\xce\xfd\x8b\xc3\x9d\x1cx<\xd9\xaeN\'\x85\xa1\xef}\xa9\xd6\x86\xa8\xbfs\x1a\xd6\xab\xe0b2G,\xa4\ni\x9c\xfb=\xbe\xc7\xe4\xfd\t\x99\x9do\xf5\xc0epZ\x1chB\x06\x0b\xfcK\xc9\xc3\'\xf4\x18Ze\xb8d\xfaS\xcb\xc9\x88\xb2\xda\x11\xbc\x14<\xe4z\xa3w\xca\xe0b\x80\x11\xa3\xe4G\xe2kK\xe9\x90\xcf\x84\xb7\xd7]\x94\x1b\xec\x19\x13,\xf3\xaa\xf2g\xc0\xd0j\xf2\xac\xd35\x1b+\xb3\x1d/\xe1T\xe7\xb6\xbenTk;^\xcaT\x0cB\x86\x12y~\x9e \xc9\xe9\xae&\x84> \xe1oq\x82\xe9?X\xb8\xc1\xf1\x9d\xd2[R9\xbb\x85\xe6\xe9\x1aB\n-\x1b\x97\x831!;\xb2\xe4\xbe;f\xfd?<9\x14\xff\xa6\x98aM\x17\xbc\xc8\xb9\xe8sIsD\xf8d\xbf\x84\xec\xbf\xb4\xa5\xf9o\x94V\xef\x19\x9b\xcb\xda\xbfDvc\xb8-\xeb\xa1#1\xa7\x9a\xbb_\x83nMS\x89 \x8b\xc0\xdb\x05jx #\xf4\x95\xa2T\x11u\xd7~|\xd4a\\\'7\x0c7\xa9\x9f;"X\x8d\xe7\xf9@M\xed\x02f\x97\x001\xba3\x13u&.Wa5\xfc\x99B\xfb\xd8.A\x92A\xb7\'\xea\xbc\x03\xe2\xb3\xf5ba\xb4\xfc\xc6+n\x8a\xdfGb^\xa79\x8em\x0b.\x1e\n\xf1U\xdc\xf9aXD3\xa2!a\x11\xae\x16c\xb2\xd0\\\xae\x8d\'\x90(\xa3\xe5Hi\xda\xc0E4\xb1\x08to\x88%!\x13XHOm\xd3<\xcb\xd7?\xb4*\xe0\x0c!\xb0o\x03&F\x140\xd7#<ic@\x1d\x07\xc5S^@\xda7\n#B\x05\xb5\xfc\xf1\xf2L\xaao\xe2\xde\x9f\x18\xbf\xc7\xf2\x8b\xa2\xe7\xb5\xe5wp\x12\r\xccM\xa9X\xc7\xa8\x9c\x93U\x18q\xa7D\xf8\x19wc_M\xd5\xa6\x9c\x03\xc9Tm\tb\xd0&)\x01\xc9\xab\xe8R(\xf6\xdc4!\x96\xa5\xf6\xe6\xa1m\xacZm\xd1:$x\xf9\xda&\x0c\x84_%=\x85\xd3\xbd\xe2\xa1\xf9\xde2\x82$\xbb\xd2=\x19Y\xfd<l\xc5z\xe5\xbf(\x8a\x88]\xb6\xeb\x9c\x89o\x80C\x92\xce\x1eq\xe9\x13\xc9\xb0;1\x7f\xed\xabe\x00\xb0\xda\x19\x9f.\xe4\xca[\\\xdd\x9c\xf6\xe2f\xe0vb\x0f\xc7)\x8e\xf0\xb9\xe1$r\xb3\xf5\x84y\x10\x9a\x17i\x1aeb\x98\xae\xe5K\xa1?\xfe\x92.\xff,\x0f\xea\x12\xa2\x0b\xc8\xee-w\xd1"\xc6(\x8e\xe7\xb1F\x1d\xdc>h}\xbe\xfd\xff%\x9fS\xbblo\x81o\xca3\xd4OD;^\x88\xbf\xe9\xef\x0cB=\xc5\xfb\xf0\x01\xcar\x88\tq\xbaYQ\x95n\xf6\xd8{,\xc2=\x85\xbe\x1fX\xa95\x05\xbf\xeb\x9e\xa4_)\xab\xa5\xa09\x1b/\xee\xe4\xebI\xd5\xf7{%\xefa\x14\xadr\xacL\xe0n\xe5a\xa2\x1f\x13\x1e+\x95R\x84\xbf\xe7\x1a^\x0fc\x98\xeaS\xf0\xe4mu\xf4\xf4\xfa\xff\x89S\xa8\xdb\xe1O"\xb0\xf8\x7f\xde\\\x95\xb0vy\xa7p\xa61&lv\x14h\x00,/`\x04!\x12\xa8$)\x06@\x8b\xe8J\xe1\xaf#\x1e\xf2\x85Nn\xa0\x8c\x02h\'\xfe\xf3c\xb7\x92Q\xc0(\xf0?T\xca$\xe6\xde{T/mu\xeb)\x19\xcfkX\xc8\x9f\xbcb7SU\x0b\x81\x9c\x99\x10f\xc2\xe7c\xc3\x82\xaf\x1b=~x\xbf\xa9\xc55\xc3\x02\x0e\x19\xdc\xe2\x0f\x93\xd0\x89!p\xe1%\xfdF\x118\x91\xc3\xeb\xe0\x04MP\xc1EL\x0e\x82\x14\x81\xec\x9cR\x1a`H4\xc5\x17K9\xd39\xda\xe0x\x07*"Sbe\x8cx=\xeeGv\x86sRkZ5\xd0\xdbIS\xe6\xfe\xb6\x7fr\x17V\'\x1f\x1ec\x00\x15\x9c\xf7;\xc1B\xa5\xef\x84\xdfT\x9b\x83\\\xed\xfd\xcb\x84\x1f\xa4\x0bOlL\xba\xa2\xc4\xd5\x8a\x95\xd4\xf4\xfc\xaf\x91\x8b\xc3\xb9>\xc3=>\xdaqL\xff\x07\xe2n&\xed\xf7L_\x9aFF\x15\xd51B\xb4f \x9d\xe8\xcf\x10\xe7\x18\x0b\xcb\xc2]T\xc5\x82\xa92\x030\xc8\xbao\x08N\x00\xd4}6JL\x8a\x93.\x84\x0c]\xa0q\xcc\xb4\xc3O!9\x14|D\xc0\xa7\xfc]\xc7\x03\xa9\xdc{5!\xa5\x0e/\xcfD|3\xdb\xf0eY\xdc4\xf8,D\xc9c\xb8\n\x9ay\x1bon\xfdx>\x05\x84\xc7\xb4\xcby\x16\x9ch\xb7\t\x02[\xd5\x9a-\xee\xe1\xdcXC\x96%\xd6[\xe6\x0f"\x1c4\x18Gl;\xa7\x1ehI\xd9\xf7\xe6\xdaZ\xc3\xd0^\x1c\xd4\x1d-T\xc7P\x17\xac\xe07|y~\xf3\xc7\xd5\xfe\xf1\xac\'\\\xfd\xa6|\x9d\xf8\xd2\x02<a#\xcb\xab\x8b%\xd6\x14P\xd4\xebi\x02\x13\x17&\x9esM4\xecA\xd5\xd1\x1c\x9c>\x7f-\xc3\xc6W\xd0\x94\xc8Y{\xae\x16"\x10\xc3\x8b\x88\x18\xce\xbd\xb2\xc3W\xe3\xfcj\xfc\xcfk\xd3<\xcf2\x19\x98v\xae\x10\xd6\xfb\xf3\x16\x83MR\xb2\x97J\xf8HdW\xa2\xe3:\xb3y\x83\x92\xf3\x94n\x12m\xd8E\x8d\xa0\x1f\xd9\xdc\xa2\xe4\xe6\xb22\x92^\x88\xe8\xacw\xb1;<\x9eV_\x00X\xaaN\xe1\x02\x11\x08\xc5\xa8\x9c \xca\x15&v\xbb\xc3\xdf\n\x0e\xa9M\xb3C\xcc\xe2\xe2\x18t2\xef\x9c\xa5\xaa\xe7z\xde\x9aq\xd5\xf0p\xfd0w},\x9d\xca9\xe8\x87\xe0\xfe\x84\x1f\x07\x8b\xb0\x86&tc \xc2:\x8f\x9b\xc0G\x96\x8do\x89\x8f\xb8\xf8\x8a\x84\xa3\xe6\xe4\xc8\x12\xf5_\xd6h\x88i\xc3\x05d\xb6\xf3s\x93\x91\xbco\x12\x8c\x1c\xd5\x98\xe3\xce\x0c\x03`\xd8w')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from flask_admin.contrib import sqla
2
+ from hiddifypanel.panel.database import db
3
+ from wtforms.validators import Regexp
4
+ from hiddifypanel.models import User, Domain, DomainType, StrConfig, ConfigEnum, get_hconfigs,ShowDomain,hconfig
5
+ from wtforms.validators import Regexp, ValidationError
6
+ from hiddifypanel.panel.admin.adminlte import AdminLTEModelView
7
+ from flask_babelex import gettext as __
8
+ from flask_babelex import lazy_gettext as _
9
+ from hiddifypanel.panel import hiddify,hiddify_api
10
+ from flask import Markup
11
+ from flask import Flask
12
+ from flask_sqlalchemy import SQLAlchemy
13
+ from flask_admin import Admin
14
+ from flask_admin.contrib.sqla import ModelView
15
+ from wtforms import SelectMultipleField
16
+
17
+
18
+ from wtforms.widgets import ListWidget, CheckboxInput
19
+ from sqlalchemy.orm import backref
20
+ # Define a custom field type for the related domains
21
+ from flask_admin.form.fields import Select2TagsField,Select2Field
22
+
23
+
24
+
25
+ class ProxyDetailsAdmin(AdminLTEModelView):
26
+ column_hide_backrefs = True
27
+ form_excluded_columns=['child']
28
+ column_exclude_list =['child']
29
+ # list_template = 'model/domain_list.html'
30
+ # edit_modal = True
31
+ # form_overrides = {'work_with': Select2Field}
32
+
33
+ def after_model_change(self, form, model, is_created):
34
+ if hconfig(ConfigEnum.parent_panel):
35
+ hiddify_api.sync_child_to_parent()
36
+ def after_model_delete(self, model):
37
+ if hconfig(ConfigEnum.parent_panel):
38
+ hiddify_api.sync_child_to_parent()#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
39
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,51 @@
1
- # 2023-04-08T15:11:14.017316
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x03\x08\x00\x00\x12\t\x04\x00\nMrs\\\x16\x10\x9e\x9f\x1c\x18\x15\x8b\xae\xe4\x94\x00\x00\x00\x00\x00\x00\x00\x00M\x07k\xe4\x01:\t;a\\\xa7\xcb\x10\xcf\x9f\x7fT\xda[\xc3\x06l\xa8\x17}\x8eA\xe3\x13$\xb7\xfb8e\xfcY\x1bs\xebm\xdd\xf5Xa\x7fE\xa1\xc6"\x06LM\xecBv\x94\x81\x18z9\x82\xc8\x15\xd03d\xce\xba\xd3\xe1\xe1\x02+\xb0J\x8d\xb3\x84s\xd8X\xf0>\xbc/\x81\xf4\xd9\xe4\x8do\x04\x9e\x00=\xff[\xc6\x99\xcf\x9f\x9b&\x00\xa9\x9a\xdd\xefXj\xab\x80\x06\xcd_ \x18\x1a\xe8\xb2\xb4\xa3\x01W\xedY\xcb\x112\x0e\x81\x99\xc1\xf3.1e\xa4.\x9e\xce\x84\xd4\xe6\xf4\x1dT\x86S/a%\x07.\x86\xb0\\\xc3\r8\xfak\xc3:\xba\xe7\xf2X\xeb:gm\x8f\x11=\xb7\x02\xcag\x9c\xa2\x06\xacw\xe0;\x05-?V\xae\x9bLt\xf1\xb7\xd0\xe2\xfd\x88`Rwb\xb6\xd9\xda8|\xcb\xe9\xff[e\xd2o\x191f<\x01\x90\x07\xc3\x00\x12?\xac\x9a\xd4\xa8\x97\xa5*dH\'\xf1\xe7\xe9(\x1c\xe0i?;\x9e\x14\xde%S0\x93\x97\xadU\x13\x81oC\xa3\x9dli\x1d\xec\xbdZ\xfd\xdf\xe7\xd5Y\x8b\x14mH\xe8`\x96\xb1%\xa2\x1c\xbbI\xfe\x8f\x95\xca\xa2\xd5\x84\xf4}\\\xdc9Z\r\xbf%\xd2\xa0\x01\xe2\r\xc1w\x013\x97\x83\xd8 \xa5{\x16\xcb\x1b\xdf\xdb\xb7\xe3\x0er\x02\xf3#^Y\x13\x18\xec]\x96\x0b\xd9\x841R\x17\xc2\xcc\xca\x7f\xb0\x9au\x95\xe9w\x1aG\x88\xf1\x15H\xf3\xcbc\xa0\xd9;.\x1e\xb1rG\xff\x9e\x07"\x9b\x19k\xcd\xd2\x18\xd6oK\xaeN \xd3\xdeH\xe3\x0esQ\x7f<pd:v\x14\xc7X\xfb\x9aBQ\x9ao\xed\x83\xa5\xe4\x19"\xaf]1\xee\x10\x91\x1b\x01"\x87x\x03g\xf4k\xb9Q\xed4\x82x\xb5\x1f\xde\xde\x0f\x81\xde\xda;\xa2j\x1b\x17\x88\xa4\xdbz\xa0\xebK\xe1v\xa7\x86xk\xe6\xca\xbfN\xcc\x00\xcd6\x8d\x88m83gf\xc9ao\xc6\xa79!\xeb\xe1K\xbf\xe4Y\xebD\xe6RK#\xdf\x13v\xefIQ^\xfb\ns7\x99\xff\xafZ\x86\xbe\x8eM\x07\xb5\xe1\xec\x8f\xa8c \xe1\x96v\xf4n\xa0\x16\xe8v\xc3\xc1\x1d\xe8:\x83\x16\xb03$_\x0c\xa89\x7f\x1c\x0e\x97\xf88\x92d\xb7[\xd3`\xb4\xfe\xa7$\x10\x1e%@\xcc\xaf<q\x92\xb6\xc8#T\xe6\xf6\x9fpa\xa7;-\xb7B5\xbe\xb4l9\x03\x91 \xf8;\x9c\xc5N~\xff\xf7@\x06\xb2[(\xc4$3\x14\xbb\xbcW\x98\x992\xebP\xc1*s\xd1\xd4Vp:8\x074\t\x9cxK\x93Z\x0e\xba\xdf\x86p\x1c\x0c\x04v\\\xbf\xcc\xc0!\x94)\xd2\xb79Pfn\xb9\xca%m\xe8\x1b\xa3_\xd2\xd0\x00\x85\xf8\xf3\xe8\x1e\xeb\xae\x8ea\xbc;K\xc4\x12\xfa\r\x13\xb3\xa8\x07\xfb\x82\xcf\x9b\x8a\xfa\xa1\x05\xc3\xf6~\x97\x8dk\xc8\xee\xc1d\x8fb\xfd\x01W\xae\x85\xe6\xfa\xca\x8bG\xbd\x88\xfb\xacW\xf1\n\xddc\x89\x0e\x00<\x7fO\xb5\xc7\x15\x04\xea\x99E\x0bQ M\xa3\xddZ\xfe\xb2\xf5\xa2nm\xcd%\xde\xd3(\x91\xe4\xa0\x02\x9fCaIy\xfc\xf2\xce\x8bi\xb7\xa6\x95\x88au\xeea\x9a\x91\xeev\x90<\xfb\x17>\xd0\xed\xb9\x8f\x88\xc3MdF{\xfc\x06\x84\xd5y\xb2\x1a\x8b\xdbH\x8f\x9f,*\xc8\x98\x12J\xbb}\xab\x94C\xbc\xc3G+ \x9dv\xb2d\xbb\x01\xee\xc0f,\xaa\xc9k\x8c\xd5\x8f~\x0cG\xad\xb2\xd2P\xb4\xfd\x9d\xfc\x1e\x07\xce/iK\x8bA$}\xe3\xf0\x11\xf9\x91\x13\x8aG\xba\x10N\x1a\xcc/\xf0\x1a#1N\x06\x05\xdaI\xee\xc5\xc2\x0f\x19\xa98\xcbI\xc2\xae\x0c5\x94\xb6\xe4\xc6<\x18\x8f\x8b\x9fk\x81\xac\x8e\x7f\xc5\x93\xcd\xf4\xf2\xdd\x9ae\xc1\xdc\xb3\xf3\xd2\xc56J\xf6Y(\x1bI2k\xe9$\xbb"\x1c\xe3\x96W\xaf\xe4\xdfh!\x04j\xf7\xc9\xa7p-\x01i\xfc\xe2]\xc1\x1e\xb3i\xac\x05Z\xca\xfdf7U\x88\xc9\xbf\x9b\x97|\xf6\xc2,|Y\xce2@\xcf\xe30\xdbv\x17\xe3\xf0\xdd\r\xfc;L6\xed\xb9\xe3\xd6\x8c\xa2v \xe7\xa8)\xe9\x90\xee\xf4\x804C\xb5\n{\xf9\xf5\x07\x83\x95z3\twL\xe6\xec\xe9\x1fDp6V\x88\xefu"Y\x06@j\xe8\xb5\n\xd8\x8b\x0c\xaf\xc4<\xc3v\xe4\x84\xa0\xe2q\xc9\xe3>\x16Y\x9a\xfc\xaf\x0e\x845\xb2D\n\x93\xbe\xe1\xfa\x91\xea\xd1\xff\xefQp\xe0\xc1F\x1d\x06\x9b|\xb2\xacY\xbc\xaeB\x92L\xbf\xa3\x14\xd0f\x08Bv\x8e\xb3\xc5\xc7j\xe7{%\x89t\xc5kCo\xfb!\xb1\xa8T\xd4>pC\x170-\x0c_\x91\x8dB\x05\x07kt\xf6>\xbbr\xaf\xe2\xc4(\xa2x\x95\x97\xb4\x1ce<\xd4\xcb\x06\x05\x13\x06s\x95\xaei\xb7\x85DCWx\xcaaw\x99e\xe8,\x1d\xea:\xed&+_2\x16\xb6\xcf"\xae\x89\xc3\x86t\x97\xe5\x90\xf2$\xdd\x03\x07l(yI+\xb2\xdf\xd6\x8bW\x12o\xb4\x10}+]\x92\x96\x9f\xf3\xb5)(\x16\xfd\x83\x0b\x8d\xd6\x98e\x8f>\xa4%\xe7m\xa1\x97\xcb\xa1\x87,\x1e\x9exd\x0cO\xdbSK\xf0\x99\xbf\x1a\xde\xc8j-~\xd7\xe7\xb9\x1e\x97\xc8\xfa\x17\xd9\xa50\x8cbS\xbe~\x95\xfe]\x99l\x06\x90&\x02l\xe3\xdc(\xe7\xa49TLb\x816\x9b:\x135O2\xdd\xcb\xed\xb1\xe5\xdbr\x8a\xd0C\xa4\xf7y\xd2\xb7\xec\x07!\x8f\xc6\x00\xd0\xbf\x1a\xb1\xf8\xf60,z\xe2w\xb7\x9c\xd7\x1e\xad\x08\xdbB\xc4\xc6\xfeV\x86\xcc\r\x7f\xbap@\x8a\xa2s\'\x1a\xca\xe0{\xd5\x1a\xd7\xbc\x9d\xa8\x89(\x0b\rk\x0e}V\xed\n\xc5\xf1\xa3\xae\xf1\xa7|]\x92\xb5\xddd\x8e\x8e\xb7\xacm\x8d%g\xe6\xcd<\xc1\x89G\x1e%\xba[\xe4a\xdb\x85\xc4?\xf39\x9e\x92@\xae\xb3(m\x83\x9cE\xe9B/nf\xc1\x9711\x9aG\xc9\r8Ry\x18v!\x0c\xc9}q\xf62fK\x01\x8e\xd0\xd0\xe3\t\xaf\xee)\xee\xb8Y\xf8i\xe0\x10\xe4\x0e \xbfVK;Y\x9f\xf2>\x91\x9b[\xd6\rJ\x00\xb5\x02\xe9\xb5yT\xcb\x164\xfa\x12\x9a\xa4@\xdd\xf1\xd4}%\xa5\xa1\xc8\x1d\xb6U\xcc\xfb\x89\xd7\xe1\xe5H\x13\x05\xc7c8M\x02\xd5j\xa8\x98L\xb4#\xd9\x9cH\xd9\xcc1$\xcb\x19\x82\x91v*\xa4\x9e\xb8O\x91.\xbd\x07F\xf3\xf5)\xc5bf\x99$y\xa6\x83\xdf\x92\xf0\xdf\xa0\x05\xef\x8bg\xfa\xb0v\xe2\xdc\x93\xc7A\xa8,:l\xfe\xca!\xdf<\x8b\x17\x18\x16\xcc\x96VOEz\xe1\x19\xff\x7f\xed\x11/\xb3o\xfa\xbc\xe4I4\x10\x9c\x7f\x9a\x88\x87\xcd\xf4q<\x0c\xaa:\x98a!+\x0fRrM.z/\xacwt;\xe3\xf5+\x14r\xdf\x9fPdUM\x93\x89\xd3\x00\xbe\xbc\xa4p\xc9S\xcb\xef\xc2V)6\x01\xfa\xd1.%]\x8e\x11/\xe2D\x1e\xba\xf9\x10\xe8\x15/\x18\x8d\xb3\xdb\x8f\xc9\xfd\x82\xaf\r\x1eo7WC\x98\xb4Z\t\xa0\xac\x1d\xff\xc2W\xc3\xae:\xe6\xd3\xe0\x81B\xb7\x8d\xe6\xf8\xb2:\xf1\xd8\xe7l:VY\xaf\xc0\x15+\xb3\x96\x18\xe9#\xd9n\xf3\xbf35E(\xae\xed%u\xfc\xd5/{\x81<\xfe\xb9\xdc\xb5\xf6!\xa6\x08iF\x04\x04\xf931Iv\x1d:\xf2\xd9\xd4\r\x8d\xfb\xb7\xdaj\x001\xdc:\xe7?w\xd5\xdd\xa5D\x1eT\x9cx\x9cmQ\x0f\xd3\xc7_\xb2"\xf9\\4\xa7\xa9\xfb\xe4\xe7\x0e:\xbc%\xd5\x94^i\xd8\xdf.\xa3\x0e\xb7\x0c\xa1\n\xe3\xf3BG%Zp\x106\xec\xba\xa1\xfcj\x9ai\xef9\xc6P\x91\x05+Zmq\xc2\xdc\xa8\x1f\xe9h\x085\xda\xbbx\xcb\xac\x1e\xa1j\x0e\xd9\xa2WU\x8e\x98Fa\xb8\xeb\xf7\x85\xc4\xee\xc3\x8f\xe4&\x94^\xfex\x0b%h\x94\xe8]\xddU\xc5\xbc\x9b\xfc\x18\xc5\xb1n\x0f\x18\x07L}6\x08\xe1\xbe\xc8\xab\xed\x07\x7f\xca2\xa1\xbd\xd9\xd6%p\xcb\x84\x88b\x9dz\x0e\\\x9c\t%\xc1\xd0VV\tH\xe3\x1e\xd3.?\xbb\xee\x0b\x01\xc7\x1a\xb2\xfa\xf1\x8d\x86v\xbb\x9c\xe2u\xf7!\x86\xb5\xcc\xdb\xc1>Y\xa1D\xe5x\x976\xbf\x02Mua\xbf\xbb\xcfF\xce\xcc;\xea\xc8Om\xc8\xab\xcd\'\xde|%\xbc\xa9\xbd\x86d\xa0*\xc6vd3_\x11\xe2w\x81\xa1\xecu^\x89')
4
- #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
1
+ from .ProxyDetailsAdmin import ProxyDetailsAdmin
2
+ from .CommercialSettings import CommercialSettings
3
+ from hiddifypanel.panel import hiddify
4
+ from hiddifypanel.models import *
5
+ from hiddifypanel.panel.database import db
6
+ from hiddifypanel import Events
7
+
8
+ commercial=False
9
+ def init_app(app):
10
+ from . import restapi
11
+ restapi.init_app(app)
12
+ return
13
+
14
+
15
+
16
+
17
+ def config_changed_event(conf,old_value):
18
+
19
+
20
+ if conf.key==ConfigEnum.is_parent:
21
+ if conf.value and not is_valid():
22
+ set_hconfig(ConfigEnum.is_parent,False)
23
+ if not old_value and conf.value:
24
+ Domain.query.delete()
25
+ db.session.commit()
26
+ db.session.add(ParentDomain(domain=hiddify.get_ip(4)+".sslip.io"))
27
+ db.session.commit()
28
+
29
+ Events.config_changed.subscribe(config_changed_event)
30
+
31
+
32
+
33
+ # def db_init_event(db_version):
34
+ # if not is_valid():
35
+ # db.add(BoolConfig(ConfigEnum.db_version,10,child_id=0))
36
+ # db.add(BoolConfig(ConfigEnum.db_version,11,child_id=0))
37
+ # return
38
+ # # if hconfig(ConfigEnum.is_parent) and ParentDomain.query.count()==0:
39
+ # # external_ip=hiddify.get_ip(4)
40
+ # # db.session.add(ParentDomain(domain=f"{external_ip}.sslip.io",show_domains=[]))
41
+ # Events.db_init_event.subscribe(db_init_event)
42
+
43
+
44
+
45
+ def admin_prehook(flaskadmin,admin_bp):
46
+ # flaskadmin.add_view(ParentDomainAdmin(ParentDomain, db.session))
47
+ flaskadmin.add_view(ProxyDetailsAdmin(Proxy, db.session))
48
+ CommercialSettings.register(admin_bp)
49
+
50
+ Events.admin_prehook.subscribe(admin_prehook)#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
51
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,16 @@
1
- # 2023-04-08T15:11:14.073107
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\t\x04\x00\x00\x12\t\x04\x00\xabsg\x17\xed\xd5\x16\xee\xe0\'\xad\xe3\xc6\xf0\x9a\x9b\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xcb\xa1\x8c\x80Q\xbe\xc1\xa2\x9f\xd5\x13\xc9s\xac]*\xba\x14\x98P\xc4\x83S\xb1-\t\xb9\xf0k\x98\xef\xbeQ\xe6`\xd0V\xfbS\xfd\x03p\x7f\xf7\x0e\xe3G~\x9b\xde\xf2g1\x11/^\xa9i\tdm\xe9\xf9\xeb\x88\x9d>c\xad\xb9\xaf*N}DzN\xec\x00w\x1e\x0f~\xb2_^\xd1\xdf\r[R\xc1\xaf\x9fK.3U:\x96\xc3\xb3\x02\x0c\xe3eo\xb1$bzI\xc5\x9a-3\xcf6-\x01#\xdd\xefO\xff\xc6\x9a\xa2\x86\xad\xb3_z\xdc\x94Fs\x19\xb3\x01g1#\xd6\xec\xca\xb9\xb9\xb9\xca\xfe\xa6S\x05)m\xa4\x85\x93|\xc2\xaa\x02s\xc2\x92\xeb&\x91\xca\xdd6\r\x0b\x80?\xa8\xd9\xd0\xc8&\xae(\xae\x93\x8f\x93\xee\xb9\x9a\x91\xae\xb8\xdc\x90[\n@\x83\xd6\x9e\xa2@\xb5\xf9\x9b\xce\x1a\xc8\x01\x00\xc6\x06\xb3G2)\x1e\xfc\xd6\xaa>\xd6w\xbc~\xe4\x87\x02Y\x90\xb4Wo\xc9\x05\xd9\x8e:\xa2\xd7(\x02H\xce)@\x06\x9a_\xcf\x80\xe1\x11.5\xd0\xf3\x17:\xb0\x94\xf6p\\H\x02z\xb4Yd\xf1\xea!\xd50\xed6\xaf~\xb0\xd4\x8ac\x10)G!5&A\xf6\xe6\\\xa4\xc6ZK\xab\xc7\xbbmh\xcd~MIA\xe74\x8aF\x86;\xc84\xe4l\xdd\xa4Tq\xc7S\x94\xf1o\x85CN\xc2\xe8~Q\x8f\xb6\x82|\x83xe_|\x90\x0c\xd5\n\x0c:\xaf\r\'\x00\x02\r\x13|\x1f\xd6%XG\r\xc1\x9e\xa6\xc6\xc4\xca\xb4\xab\x89\x95\xcfT\xbd\x91\r_n\xcb\x92AZs\xf3?8\x08,\xc3\xa8\xaf\xc8\xb29\xbdq\nXM\t\xed\x88.k\xea+\xf5Jw\x07\x97-\x1e7a\xf4\xe9u\xad\xd5\xa4\xd0\x18!s\xe0p\xca\x13\xb0|\x99\x10\x83:\xfd\xc7\xa7\xf9\xf83\xf8A\xc6\xbbz\xf7^\xd7{Z\xc7\xba\xd1\xf8)\xc4]\x10\xf4\xa0\xca~\x92"\x82\xaf/U-S\x92\xaa@\x9c\xde\xcd\xc7@\x82\x11\x7f\x99\r\xefE\x02\x93\xfb\x97\x88\xf9\x8f\xc8\xac\xf6\nKc\xc0\xbf_K\x07Rbd3(c\x00\x80\xee\x87+:\x86\x1c\xb5\xde\x14}\xd6?\x94\xa8t_\x0f\xf4$\xba\x7f\xa2\xc7\xcbD\xa8a&\xb2y\x88\xec\xab\x8e\x17r\x11!z\t$\x19\x19\x9a\x89\x99\xb4\x00\x08}\xa0\xdbe\xfc\xfb\xcf_\xd3p\x84\x9d\xdf\tzxy\x85k\xd5<\x99\x14\xe7f\x9b\x8d\xcaF\xa7t\xb63\xff\xc3Y\x87$B\x1d\x9f8\x11\x1e8}\x93\xbd\xd2\xd2\xc7%!\xdf\x0c\x92!\xe9Hrtk\x94\x10\xbd\x9f\r\x03f\xa1\xd5<\x1csphxN\xa2\xa6Hl\x15\xa9\xd5V+\xab(\x8b\x9a\xf0FyNh\xfb\xf6\xedb\x90fm\x94\xb0\x90@\x9f\x03\x95\xa0;5\xbf\x81\x13\xa2\xb8 \x89\xbf\x86\xc3\x8c5\xc9\xc1\xe2\xd1\xac\x93\x85\xf0R\xdb\xba\xab\xb6\xcc\xef\xf8D\x9c\x83,\xd4e\xbe\xdd[\xca\x924\xa1\xc5\x11BG\xfe\x12\xa5\xbd\xba|j+\xaa`\xfa\xac\x812:$\xa2\x00\x05\xf4\xc8\xea(v\x14\xd9\xbeJYB\xde,}\x02\xff,C\xa9\xc3\x1f\x94rs\xd1\x8b\xdd\xbc0\xd8\x93\x91\x121\x80\x0bv4\x92\xc9\x8a\xcc\x02\xac\xd5\xa6\xe7\xe8\x15g\xdc8\x9e\xc6\xae\xa3f\xed\xa1\x9b`P\xa1\x94\x07\xc6\xb32\xe5sb\x15\x19\xb4.~{b=\rj*\xc5\xa0(\xe7n\xb8\xce3\x10 xx\x0f\x10\xa0\xa1\x96-S\xd5\x0c9\xca\xe1\x7f\x08\x07(J\xeaw\x8d\r\xef\x14,\xc1Qe\x8cI\xc9\xfa\x9e\xe7\xbc\xa0|N5\xc5\xf6\x91G\x8c;\x1ed\xcc\x1cY\x9c\x14-\xdf{\xfb==\xd4\x02\xb8|^\xf6\xd7\xf3\xa0\xb7\x8e\x9c\x86v</\xa6\xf5\xbdx\xd0\xcd\x8e\x062\x04\r\xe4,\r\x89\x92\xbe\xa0\xf7\x9c*q\x01A\x95\xa4zjgw\x97F\xa4\xf0\xb9\xf6\xdd\xe2\xd3\xf99W\xf6{\xf9(:\tF\xad\xd0q1u\x8cb\xeaB\xcf\xfb\xb9\x91\xe7t\xcc\x1e\xd4\x9e\x98|\xe2~\xe3\xce\xf5\x03R\xd4\xc2\xb0\xae9\x8b!g,\xc6)\xfc\xf0\xf2^\xf8\x7f\xbf\x9e\xb1\x0c\xd2^\xa4\xfe\xcd \xc4\xa2h\xb4\x9c\x03\x99\xdf\xeb\xfa\x91\xe3h\xaa\xd3\x91\x15*\x10\x82\xfc')
1
+ from flask import Blueprint
2
+ from flask_restful import Api
3
+ from .tgbot import bot,register_bot,TGBotResource
4
+
5
+
6
+ bp = Blueprint("api", __name__, url_prefix="/<proxy_path>/<user_secret>/api/v1")
7
+ api = Api(bp)
8
+
9
+
10
+ def init_app(app):
11
+ api.add_resource(TGBotResource, "/tgbot/")
12
+ with app.app_context():
13
+ register_bot()
14
+ app.register_blueprint(bp)
4
15
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
16
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,59 @@
1
- # 2023-04-08T15:11:14.081464
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xf8\x0c\x00\x00\x12\t\x04\x00\x89\xe1S\x11\xc2\x8f\r\xc4y\xe5\x8e\xd7G\xb4\x048\x00\x00\x00\x00\x00\x00\x00\x00\xdfNu\xd2w<\x98$\x1a\xb1\xb02\xca\xdf\x85@\xcc\xa3[X\x07<\xeb\x94\x90\xd7\x12\xe9\xe0B\xbd\x01\x91\xe9#T\xee\xc8\xf5H\x8c3\xdbRl\x03\x9a\x86\xdf\xe7\xf8\x88H\xafG\x04\xb2\x91\x98k\x17\x94l\x16\xaa\xec\xe0\xb6-\xa3\xd2\xe8\xb2n\xd0\x0b;J\xfa0\xf2\x83\x9bO\x9a\x1b$\xb44\xc8v\x8e\xa4\xa3\x0bg\xfd0v\xbeZ)\xf9\xb0\x9b\xe9\x1b\x99Y\xc3\x060o\xd34C#\xd8\x9c\xa2\xa3\x04\\\x8ai\xaft\xeb\xf1\x9e\x93\xb2\xb9\x98s\xa2\xa2\xb8\xc1hj\xb3\xf5\x97Z\xc1<t8\x92\x9a\xa4\xe9\xa6\x05\xc1\x92\xf5T[t\x97\n\xa9\xa4\x899\x80B\xa2f\xd0\xa1\x1bn\x91\xaa\xb9\x86\xdb\x01\xf8\xb9\x96B\xa1\xb1O\xcb] \xba\x825\xa9^5\xd7\xdf:PY&[\xed\xb9\xbdX\xa8\x94\xa4\xac\x7f\xf0"\xa2\x833#\xb3\xe9x\xef\t\x05\x95\xbd-X\xdcb\xf0k\x03k4\x98\x1e\x12\xeb\x80\x9b"W\x9cr\xb2\xd6l\xdf\xc4*\xe5\xa1\x1c\\4\xfe\xd8\xc7\xb6\x17\xfa\x1fC\x19\xcb\xd6\x8d\x95\xfd\n7\x82.\x83\xef\x9d\xc2\xcdR\xfb\x15h@\xd6\xf8\x17\x8b\xfb\xd2\xc8d\'H{\x02\xdf\x9a\x14`\xa4\x99\xe8\xb5\xad\xda\xd5\x94\xf7\x97_A\xee\x04\x089\x91\xd83\xbc\xc2\x9f\xbb\x84;\x95f6\x1b\xbd\xee\xa7S\xd9\x84jB]!\xd3\xebR \x99H\xad3\x89\xfe=\xa81ES_y\xb0\xee\x88g\x8b\xda{|$\x05\xc4\xc3&\x14\xdd?f\xd0\xd4)D\xdb\x1b\xddOeh\xd5\t\x16\x97\xe2\xe9\xf3\xf6\x0c\xa1W/_\x7f9\xf3P\x7f9\x1fGv\x85\xcf\x8a\xb1\xf4\xde\xe7,\xfeP\xc0r\xbe\x98\xd69\xdf*\xd8\x99\xb2*Mh5\xd0\xf5\x90\x9b\xfc\xd2\x07v\xfc\t\x962\xd9)\xd5\x80\xf8\\\x8e|\x81o\x80\xcd\xc7\xd6ZX\xf0\xd5\xa4x~2\x93\xd8\xd0\xea\xfbQG\x13\x99\x9d\xf0\x18\xd1\x852\xe4\xfa\x04\x8a\xf0h\x05L\x9ay\x94V\xda\x9e\x83\xa9\x87\x07|@\xa0\x91!D\x91\x80\xa6\xf3<T(\x8d`\xd7\x9c\x0eC-\x11\xcfn|t\x0e\x9d\xcd\xb7\xd1\x15Y\x1bz\x94\'n\x85\xa7\x13\xf1G\x9c\xeb\xb3jV\xbd\xd3c\xee\x1a\x8b}m\xd0,Q\x95I\xbe\x82\x03\xba\x82H\xc5\'\xba\xa4\x95\xd4\x87\x94\x8d\x8f\xb6g\x1dP.w\xdc\xc0\x1d\xff\x08\xb6\\s\xdf\x9a\xae\xea\xbe\x11\xbbs2\x01\xd5\xe7\xda\xbb\xee\xa4\x8c!\xd4]\x14a=:\xbc\x17\x19\x05\xcb@Su-y\xaa\xf0\xb4HGh|\xff\xce\xc4/\xf2H$\x83\x83\x10\x03#,\xa7\xcd\x7f\x03o\xff\xf2\xaf\xfc\xdbtI*\xfa\x12qy\x9a\r~\x17K\t+\x1b!\x84P\n\xdf.\xd70~N\x027\xb7"\x866O\xe9f\xc7\xe3\x92JO\x1e:]\xec\x01\xecz\xb5/"\xac\xb4\xae-B\xbe\xf37\x11 \t\xc5\x15\x07\xd4}\xfb\x80\xde\xd5^\xa5\x98F\xdf]\xbe\xf5ZX1\xc0\x03e\xe8dNh\x0f&\x0cs\xa7\xcc\xde8\xd1\xebk\x98\x14~&\xe2ze\xaf\xd4G\xf7\x0fS\xa3-O\rc\xbe\xc5O\xf7T\x9dQ\x14+\x90\xe6\\\xff\x9e\x05\x89\xa4\x95BQalo\x08\xa4\x1e\xa9o\xfc\x03\x93\x9b\x05\x11\x9c\xfeid\x89\xbc\x17\x83-\xce\xed0/\xc5\x14k\x9a\xe5\xa9\xe4W\x978bfY\x0b\xd3Y\xb6\x98\x96\x90}v\xd01\xb1\xcf\x00\x9c\xd4\xfd\xdbt\tk\xf9\x8fs-\x15\x8d}\xb6\xe3[\xda,\xf4\x10\xc7Mir\xe0#%[n\xb3\x17\x90\x8b\n\xe1$\xcb\xdc\xfd\xe0\x9d\xc7\x0e\xaby]\x1ctqPGr\x91L\x8b\x19\xf1\x95i\xf9\xf8P\xef\x8a\xcb\xee\x12r\xfeVU\x9c\xc5[*\x1e\xeaFW\x1d\xa7"\xc3\x1d_<\x9b|qe-b9\x1dK\x8b\xc1\xb6\x12kQ\x91\xb0\xe1a\xf9Z\x99R\xad!\x80\xe4c4\x02\xa3\xb4hJ\xfd\xce\xa1h\xc5\xf2\xb7z\x9a\xc5\xff\xb4\xa5\x8f\x7f?\x05\x96\x15\xb2\xd6=ft\x97\x7fT\xb7\xe3\xac%.\xc7\\SW]\x94\x9e\xe6\xba9\x18-7{51\x8a\x19\x9ax\x9b\x1ad\x82m\xaeq\xfc;\xc9\x17\xeb\n\x98\x16"=\xf0\x96+\xff\xd7\xbc\x93\x0e?\n+\xc7\x80\xd4Y\xd2\xf8\xcb\xe8Y{)7G3\xed\x81\xf0=\t\xfe\xae\xc2<\xb0\x9b\x18.\x97\xff(\x96\x94\xed%V\xd4\xab&\xfeg\xee`\xb2\x0cIm\x83\xb1z\xe9\xc1\xa7\xde\xdb\xba\x98\x85\x84\x8d\xfd~W\x00\xb7\xedyI\xa7}\xe1Nc\xb2\xdb6\xb3\xcd55\xf3T\xe5\xd8m\x01\xc2\xee0\x8d\x90\x10\x01\xee\x10\x98\x10%\x9d?\\\x99"_<\xa5\x86\xe2mB\xbbow\xdf]\x9fG\xda,\x97W\x11H\x00D)\xd5\xff\x84\x7feu\xcd\x83\xc7\x82:03\xc1=\xd5\x9e\x07,%Z9.\x14\x15#\xf4\xd4\x1c\xccS\x97>W\x824\xa3\xc1\xb6K\xef\xbb\xc7\xb2\xd6\x8e7\x1c\xe7O\x88\xeb\xcf\xe4.k\xfck\x19R\xceq\x89kA\xa8\x81\x9c\xc6\xcd\x9a\x04H\xf3]~\xdb\x16\x978T=\x92\x0f0\xc5\x0ez\xe3\xe5\xcc\x06iWA\x93\x8c/\x8e\xe9\x7f\xfc\xc8\x1dKb\t7\xf2\x97\x9b-\x00a\xd8\xb6%\xf1\xfe}\xce\x1a\xe6,$\x8f\xce\xa8h:L\xc1A\x93`Y\xfc\xc3\x86\xce\xb4\r\xf4H\xccs7\x0b\xa2H\xd9\xb6[k\xda?\xd1\xd5\x08C1\xee,\xb6H-0\xbd\xf6\xf8\xea\xe2^\xef\xcdHk\xeca9g\x93\x8f%\xaa\x18\x86\xda\xdeQ\xc9\xfc\xa0\x83#w\xfdd>\xa5L\xe8u\xc9-\xd0\xab\xeb`\xe3C\xaf\xdc**\x8b{\xc9\x9c\xfam\xff\x07\xb7\xa8\xff=\x8f\x9a[0_\xb0\xeb\xa5N\xe7\xcert/`\xa1\xe6\xb6\xe5\'\x0b\x8b`m\xd2\x01q\xa8<A\xfb\x1c\x9c\x01\xb4\xb0\xd0\xf1\x88\x12\xd1\xc52\xa9\xe8\x0b\x98,kDz\x86\x90i\x8e\xe6\xd0\xe0Z\xfb\x0c\xa7\x90ENT\xcf\xafE\xec\xc6^\xa7\x86\xfa\x81\x0eO`C\x1e\x82v\x1a\x83\x98\xa5\xc7X\xd6f B&\xd7\x8c\xf3\xedxV\xde\x18\xd7\x9b\xf6\xaf\xbc\x8a\x03\xb1\xec\x97\x01\x8d\xbf\xbd\xa2\x183\xd6\'\x1a\x1c\xf9\xeb\xd2\x0c\xaa\xbf\xdb\x07\x06]\xc7\xe1-\x7fN\x80\xccfxD\xf0\x88gBX\xf0\xdc\xfd\xb5O\xf7[\x90\xbe\xf3\xea\x0f\xaa\xec\x1d\xa7\xeeRu\xcevZ\x13\xd7\xef8\xde\xad\xdd\xcf\x1b\xca$\x8b\x15\x89\xb2\xf4\x91\xb5\x8b\xf5"\xdb@\xf6\x1a[\x8dK\x85%_.\xa1\xff\x96\xcfe\xf4c\xce\x84U\xb9\xaf\x15E\nr\x10\x96\xdb\xf3\xd0Hu\x94\xa0\xd5\x1dl\xfbY\xca\xda/\x9e/\xe0\x07\xf4\xe6\x92\x02\x18\xd9y5\xc7\xd0\x13?\x1d\x8a\xed\x01\xa9\xefxF"\xe0\xe7\x01\xc9\x96\x1c\xe2\xbe\xf9\xae\xe1\xbd\xfc\xc2\x827K\x97\x1a\xd7\xbb3vU\xad+QV\xe67\xaezR\x02\xc9\xc8_w\x86\x9e,\xa8K\xed\x9dJ\xf9\xc5\xc7\xf7\x84^<\xd5\x8b\xb5\x19\x7fv\x8a%\x98\xef\x80!7\x93J\xb0\xa0<\t\x1e\t\xa9\x03|\xa1\xa5\xfbF\x0b\xea\xf6\xc4\x82O\xa5\x8aZ\xb3Ma8\xbf\r\xafn]\xe1\x84\x16\xb6\xb9\xfb\x1fX\xe3\x12\x1bN\xd8\xa0\xf5\x829\xee<?\xd5\xdd\xfa\xd8\x85\xf31\xe5\xde\xce\x0bR8\xe0\xf1CQ}\xb9\xbe\xf1.8\x00\xb6\xd1\x0f+\xac+\xb4S\xfb\xc0\xdbW\xc9;r,\xb7]\x92A-}\xa1}\x8a\xd4Q\xe2\x00\xd4\xc6{\xa5\xd7\x0e-Oa\xd7\x1a\xa3\xaf\xb4\xe4?\xda\x1f\xcbWs\xacf\x8a\x1en5Z\xba{#p\x0c\xc7my\xcfW>`\xb9\xb0\xf9\x9f\xa0\xb0`\xf3\xce\x9d{\xb9o.s\x17\x13JAoFr#\nBnz\xe4>\xa3Vl\x04\xb2\x90\xe6]Wf|\xe1\xd9\x1b\xaa\xee\xe4x\x7f\x9b\x14P\x8a\x02\xe7\x00\xcb\x19\x81\xe7\x187\xa2W=g\xf9\xa1\xb4\xb8\x06\xb9\xbd\x87m \x89\x1d\xeb\x1f\x11\xf8>\x10\x16\xf8\xa3\xa7\xe4\xb9_\x9f\x01\xff\xd1b\xa3}\xbc\xf6\x07ZZL\xdbOv5\x00\'\xe7\x9a\xc8\xc8\xb9\n\xf1sra\xc0~.;\x06}j\x881x\x19Z\x9e\xad\xed\x13_\xa7\xe8(\xd9dR\xc80\xb1\x17\x81uE\x9c&\xf2>r\x12\xc7\xf9\x7fGu`\xf5\x8c\x0b\xf6\xa5enS\x06\xa8h1\xfa\x10\x91\xdet\xce\xd7S\xf3U\x8b\x1e\x05_v\x9e^P\xa7C\xf5\x84M\xa1JE\x9cg\xd63\x02\xde"k\xc7\x0br\x96T\xd6\xbb\xc3\x82k\xae\xcf~\x99t\xbc\x8bm\x8f\xe2\xfb \x95X\x87:\xc4:\xf1\xc5\xed\r?\xa0\xab\xa0\xb6\xeb\x10\x1b\xa1\xc9\x14\x1eZ\xb0O\xdd^NA\x9cq\x97\x84\xcf\xcb\xd6M\x1b\xf2q\x1a\x0b\x00f\xbdG\xdc\xb0\xc01\x96\xca4\xc8\xd0\xfdC\xb5\xa5h)\xaau\xfeOC\xd0a\xf8G`\xbd<\xd2\xd6\x90$\xfc\xc7\x80\xf2\xf6\xe3\xdb\x8db\xc7,@\xc4V\r,T\x13\xbb&\rYJ\xb0<?\xac\x97`\t\xbaBZ]a\x1b\xa4\xb2\xa6\xf4\x86\x18\xf5\x18\xa3\xae\x182\x98i\x17\xf2!\xc6 b\xff\xcf\xa6\xdcq\x8ejt\xe9\x98\x9d\n\xdc\xf0\xdb-\xd6\x91\xd6)\x81\xf5,\xd1\xa9161\xbdT\xb5g\xfa\x8eD\xad\x83\x0c\xfe,\x83\xaf4\xf8\xfdn\xdf?M\x99\xcb\x8b^9\xc0~l\x17^$\xec\x01\xa6\xc2\n8\xaf)5d\xaa\x83,\xde\x92\xc2\x1a\xa5\xdbK\xe9\x86\xce\xe2"\xb6\xbe\xc1aA\x83h\x1b_\x7f\xcc\xeb\x84\x03\x06\xa3\xef\xa0j\x04\x8b\x14{\x93\xb8\x0b\xba\xd4\x80\x07\x92,\x86z\xbe\xaf\x13\xba\x9f.y\x9c\xfb\'\x1f\xdd\x81MM\x1cq\xb2\x9e\xb0\x8a!\xc2\x05\xdd)I\x0c\x95\xafU\xdf\xbb\xf7\xe2@\xf2^\x15\xfe\x1e2Wb\xbbV\xb75IX\x14\x86.\x8b\xb5b1\x01\xb4\xe1\xd2\xf4\xcd\x12"\xb9 O\xa6\x02q:\xfd\xe3!\x9bp=&`\xf8\xfde\xdc\x9d\xad\x0f/\xa3\xb4\xb5-LP\xb4\x9f\x8f\xcd+\xcf@f\xf6\xec\x1a\x10\xb5\xa1\x97\xa1\xa7\xb6\xde+\x07\xa4\xa4\x8d\xd7\xd5sXX\xfe\xbf\xb5\x1cd\xf7\xf7\x92Y\x96pO4\xd8\xb9"M\x1c\xccK\xfc\xea+^f\x1c\r\x8f\x06F\x91\x93\x82\xf8@\xbd\xe6\xaf\xbe\xe3n\xb8\xd4\xc1\x9c\xdai\x98\xb2\xa3_K\xc18\x9c\x84\x89\x98\x10OF\xce\xea<4\xb9\xfd]I\x14\xb0\xc7h%G\xa9y\xcbo\xe0\x0bhB\x84\xd0\xa4G\xc5SA\xe9\xa5\xebFy\xc2K*\xd0\x96\xfd{\x00+\x8bN\xe7\xc0\x8a?\x1f%\xc5\xb7\xef\xb5\x97W\xa2\xfb9\xa7\xe4\x81deJ\x1b<\x92d;S\\\x0f\xcao;\xc5\x06 \xac(Tv)\xe7\x89\xb0b2\xd8\x7f\xb2\xe7\xce\x0b\xbaZ\x8b\xbbT\x1e\xfb\xbd\x03\x0b\xd8\xach\xda\x16m{l\xe5\xe9\x99\x91\xfa\xbe\xd9\xe2\x02^\xca\x11\xc6\xc6\xe4\x8785\xc4t\x87C\x859\xbb"\xc9\xf7LkP\xa7*yY\x8f\x9bH\xf7\xd7\xd1\xbb\r\xe1I\xdf\xb8\x0cA\xfbz\xfb\xcf\xab\xb9ySJ\xcd\x06F\x9f\x1f\x8a\x82\x0eSg\x81v\xc6\xde\xddbCY\x88#~\xae\xf1o\xf6\xd3\x82I`p\x04\x91\xa3ho\x15\xb2\x07Q5\x92\x0fG[D\xdfS\xc1\xba\x89Q\xaeZ\xdbdB\xab\xf9t\xd2\x8b\xc9\xfe\xd0U\xe0\xdf\xd0\xaa\x81\x83*\x0e%5qh\xf5\\H<\x1e\xf2\x99\xec\x04\xf3%8\xe6\\!dMv\xf2/s\xcbe&\x01Q\x0f\x8a\xaa\xbf\x8d\x88\x03\nFS\xa1~\xd7\xd6e\xb6\xe9`z\x7f\x02\xebp\xd6\x16Hw\xa0\x9d\x95Ds\xc3*\xfbg\xbfjr(HW\xaa0\x0b\xbd\\\xeb=\xcf\xa6\x06\xcdE]\xdfU\x94\xa1\x9e\x7f\x99\xd1M*\xcfl\xb2)\xde\x0b\x1d\x0f[\xad\xf5a\x0c\xe6E\x05\xd0\x00\x8b*\'A3\xb47N\xf3T\x86v\x85\x05\xa1P\xe3{\xd0\xe3\x17\xce\xdc\xe8b\xd3\xdb\xa1F!2\xa9\xc30#Ks\xf8\xc2~8K\xaa\xa2+\xc0\xf8\xb8\xd7\x01\x99m\xc4\xad\xfcs\xa4\xc6\x93\x9c\x96}\xdb\xc9\xc2P\xaf\xf3\xdews\x16\xcbh\t\xea\xb1/~\xe7\xb1\x14\xd3uS\xa0E\x9e"\xbb\xa83\x88p\x80\xfd6\xab9\xc9F\x91^\xa8\xac^u\x0c\xa5Y\x9b0\xe6\xd0v9\'\xe8x\x18\xde3\xca\x87\x0b\xeb\xba\x9f6\x89|H\xd0=\xce\xffKt$L\x90\xed\xdfp\xdc\n\x11Y\xe4\xf1\x03\xe2eOL\xdb|\xe6\xd5\xb7\x04\xe4\xc9\x96\x9b\xb3&p\x8a\xe0O\xdd\xf0\xc0\xc0\xdb\xdb\xd1\xb3P\xca\xecS\xd1X\'\xf8\xd9Z\x12\xa4%\x9e\x17\xd1D\xdc\xdf\\\xb7\xfb\x04\x00k\xd7kf\xe9\xf4\x88\xc8\xa4\x187}$+\x13H\xfdYR\xf9=\x858\xb8\xb7\x90\x184w\x02\x12;3\xb1\x8e\xfcCu\xda\xeaT\xb4\xde\xc0\x1e\xe1\x94\xbe\xac\xc0\xee5\x15\x82&\xbd\xbc\x99\xbaoNUu[\x8aN\xa0o\x8d&\xdaB\x93E\xd0\x8eZ\x9fL?M\xf12gp\x8b\xa5A\xbd@\xd8\x1dr$wXR\xe6\x976\x1d\xf0W\x8f\xae\xa1L\xefI\xd2%3\xb73\xea.\x1d:B\xad\xb6\xc3\xef\xe2\xb4\n\x98m\xd3\x88v\xa65V\x9a"\xa9\xc5hS\x18\x19\xd5\xe3\xbb^\xfc~W\xbfw\xd0\xf9\xa2\xfdP\xf6\x13z\xb8\xc0\xab8xb\xe1^\xed)\x04\x82S\x0c\t\x14\xcf\x0e\xbc\xc5Y\x98\x18\x83o6\xadeF^\xda.*R\x83\x11@\x9e\xc8\x14\xa7\xe8Boa\x19\xfa\xcaJ\x8co\xc6\xb6\xf4;K\xd3Rx\x9a\xc7\x07A=\xf1\x88\x006')
1
+ import time
2
+ import telebot
3
+ from flask import abort, request
4
+ from flask_restful import Resource
5
+
6
+ from hiddifypanel.models import *
7
+
8
+ logger = telebot.logger
9
+
10
+
11
+ class ExceptionHandler(telebot.ExceptionHandler):
12
+ def handle(self, exception):
13
+ logger.error(exception)
14
+
15
+
16
+ bot = telebot.TeleBot("", parse_mode="HTML", threaded=False, exception_handler=ExceptionHandler())
17
+ bot.username=''
18
+
19
+ def register_bot():
20
+ try:
21
+ global bot
22
+ token = hconfig(ConfigEnum.telegram_bot_token)
23
+ if token:
24
+ bot.token = hconfig(ConfigEnum.telegram_bot_token)
25
+ try:
26
+ bot.username=bot.get_me().username
27
+ except:
28
+ pass
29
+ bot.remove_webhook()
30
+ time.sleep(0.1)
31
+ domain = (ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first().domain
32
+ proxy_path = hconfig(ConfigEnum.proxy_path)
33
+ user_secret = hconfig(ConfigEnum.admin_secret)
34
+ bot.set_webhook(url=f"https://{domain}/{proxy_path}/{user_secret}/api/v1/tgbot/")
35
+ except Exception as e:
36
+ print(e)
37
+ import traceback
38
+ traceback.print_stack()
39
+
40
+
41
+
42
+
43
+ class TGBotResource(Resource):
44
+ def post(self):
45
+ try:
46
+ if request.headers.get('content-type') == 'application/json':
47
+ json_string = request.get_data().decode('utf-8')
48
+ update = telebot.types.Update.de_json(json_string)
49
+ bot.process_new_updates([update])
50
+ return ''
51
+ else:
52
+ abort(403)
53
+ except Exception as e:
54
+ print("Error", e)
55
+ import traceback
56
+ traceback.print_exc()
57
+ return "", 500
4
58
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
59
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,13 @@
1
- # 2023-04-08T15:11:14.057346
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\x08\x00U\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x89\x05\x00\x00\x12\t\x04\x00h\xa1M\xaf}\xb9\xb2[\t\xcc\x1d\xc5{2X\xbb\x00\x00\x00\x00\x00\x00\x00\x00R\xdf>%\xe2\xea\x05\xb3\x91\xb7\x07\xc7\xb8\xbaoh\x88\x1c\xa8\x83\x8bi(?\x05\x16jy\xfc7F2\x84\xbd\xcdh\xad\xd5\xa2\xd8\xf8=\x9e\x17\x91}6\xd8*\xc3x"\x1fAR\ru\x11\x88V\xb8\xd3\xddB\x91\xd9V\r\x83\xf7x)\x83C#_\xcfdX\x9f\x0fe\xfa\x8cng\x8a\xe5\xefU\t\xf3w+?\n\x8a\x1b\x94MQ4TM\xa5\x8d\xe3\xb1\x1b\xae\xa1\xc1\xce.\x0fx\xf1\xefq\x1d\x86\x1b\x0b82]\xc9\xd2\xd8\xc7\xd3_\xadm\xd9\x9e\xc7\xbe\xa5g\x87D\xcc\xdf\x92\x02\x99\r\x05\x0c\xf0\x03g\r\xabr+\'"\x08\xdbi)g\xeb\xe7\x9e\x0f\xce&*\xdd\xc8\x1a\xfc\xc5\x11\xf7\x0b8\xdcv\n\xf2G\x0f\x8a\')\x8b\xb7\xf3\xc5oD\xcc\xa6\xa7\x05\xd0y\xd3i\xe9;\xa6u2\xb5\xc5)\xaa\xf8<*\xf2\xa6+\x9ce\xef\xa7\xe0\n\xe3f\xac)\xa1\x84n{\x93\x91\x11gM\x81\x94\xc86G\xbdl\xc6e\x82Y\xd3"\x1d\x83\x07g\x9f\x8f\x92\xbb\xff_)u\xc0,\xf7A\xe6\x1b\xe2\xf8]\xb4\xea))?\x1ep\xd9\xc9\xdd\x0f|]uM%\x8c8R\xf5\xe8b\x80z\x9b\xcc\xeb)0\x9f#\xd5j{\x0f\x16\x8d\xe3\xf7\xd9\x05o\x8e\xe1G\xed<1\xb6\x8a\xe6\x82$B8\x9f\x8b\x96qlo\xc7j\x02\x11\xd0\xbdW\x92\xd8\x13\x14\x14\xcc\x8a%\x9c\x0e\x93\x1b\x9a\x1e\xc2\xe4F&\xa8G\x15\x81\x19A\xf7rl\xe2P7t\xfa\r\x16\xaa6NH\xff\x95\xfd\x11 \xbcO~\xf8p\xb4Q\xb6\xfd\xcf6i\xa2\xba\x88\x0c\x86\x1d\xdd\x15\xcb\x9e7\xde\xe8s\x0b\x1f\xccH\xb2\xba\xafy\xe2\xa3f\xd2wu\x0e\xb6\xa0\x9c\x92\x9d\x9f\xd3\x1b\xaccM\xe22\xcc\xab\x9fk{Ze\x99r\xe5\x8e\x9e\xa2\xf9\xa90\xf0\xc7V\xb0\xdc\x07P\xef\xee\xed\x11\xfbgF\xab\xf9W\x120\xaf\xd7\xe5\x86\xb5][P $\x19\xf9_\xcd\x8b\xb4\x9c\xdc\x8cXm\xc8\x12\xd4k\x1e\xd6\x07\xcf:\xf3\x9f\x10\xdeH\xf2\xcd\x87\x9b\x02\x80\xab\xe3fQ\x0c,w{\xff\x0fuV\xa5\xa5\x82r\xce\xf8\xe4s\x83B\x89\x95\n%\xa0!&T\x95\xd8\xbfT\xbb@,\x16\x84t8\xb9\x88\xbd\xf1\xce;w\xd6Q\x08 \xb1\x0f\x0c\x16\xb6;&\x93\xdd\xc1\x08\x83\'\xe7\xc9,t<\xa5\xaeP\x14c@U\x90wL\xcb\xc6\xd2\x81\xd0\xdbD)D4\x8bC\x06\x16f\xde\xd9*\x182}\xd8\xb8\xd7\xf3dk\xb1\x9a\xe6\x00;\xd9\x9f\x84\xb5\xd0\x8e#\xb8\x85\x05\xc8\xa3\x021\x0c\x19y\xd8VO%x\x01t\x16\xb0\x06vRh\t\x05\xa80\xd9\x00u\xef\tl{\xaf_I\xbd$\x97V\xcbaDrU\xd2\xb6\x0c\xcfhq\x8c\xf5y\xbd3[\xa6\xf0\xf5\xd8\xa1?\xf5\n/Y\xff\x1b\xe7}/K2J\xdf\xbf(SB\x1dT=\xf1\x96T\x06\x96V\xc6__\xc1\xa2\x82.\x1c\xbdf\xd5\xea\x92\x87a\xca\xae\x8e\xce3\xcd|\xf0\x13\x01\xe1-\x01\x0f\xf7\xfbg\xcc\xba1\x17\xc4\xb5V\xc8%\xb9\xa7\xf3\xbc\x80\xee\x08\xfd\x81`\x98ZJ\x9c\xba\xb1\xa2O\n4\xc5\xd0\x15\xccb\xef\xe5y\xbb\x03`\x08\xb3l4\xdb$\xbbr\x06\x8d\xdb\xb4\x06\xd9\\\xf4\xa4\xae.\xd55\xee\x88\xf3$\xb3\xa2&=v\xd4\xd1\xe2B\xad\x9co1\xceg\xa6P\xde\xf8\xe1\x8d\xa7a\xef\x9d\x8e#\x80\xfd7\x1cw\xa6\xcd\rp\x92\x9d\x12c\xc9\xbfwd\xd5\x9c\x1ca\x0c\x9d\xeaz\x03\x13\xa8*\xa4\xa0\xdc 21\xa4\xc9\x1e\xcc\x03\xee\xbe\xb6\xd9\xe9\xea\xa8p\xfb\n6\xeesA\x9a\x0c\x91\x8b\x058\xa6\\\xc7kS\xdeg\x15\xa8\x87\x03\xe3P\x04n\x08\xce\xdd[\t\xd2\xc8o\xd2\x0f\x02\xcf\xec\x84\x89\\%~Nd\xa9-\x93\xa8M\xb4\xda\xd8\x16\xff\xff\xa0\x17\xf9\xb4\xda\x02O\xf2\t3\xebt\'\xbb\xc3g\x1c6LY\x88\x07%\x11I\x15^\xc5e\x07u\xa0\xba\x00#xUG\xe9K\xd7HB\xadp\xd6\x93}\xd8\xef\xcak\xd6[\xf6>\x83\x8fw\x1f\xd8\xa9\xdb\x91>\x95\x02\xb5Z\xe5\x15H\xb4\xc2\xd6u\xe06b\x8b\xa4\xd2?Lq\x026\x96\xb4\xd7.=\x92\x17\r\xb7\xc2\xdc\x86\xe8^\xe6\x05}\xf6;!\xebcF\xd1\x8f\x15\x9eJBov\xd0C\x0e)K\xf5c\x1a,s5\x83\xed\xc5\xfc\xf6\r\x7f\xf1s7\xd8x\xea&\xd7c\x15\xc4\xa6\xd7\xa0\xa9\xd8_\x9f?\xd9\x13\xd6\x07B\x99x\x02K\x18\x11\xdcv\xfc\xd8TZPB\xc8\xdc\x82\xd0g\xb7<[\xd6#\xe8\xfc\x11\x9d\x88\xdbT[\xd5:\xd2\xb5\x80\t\x07\xb4Xg\x0e&\xa1\xdb\x958o\x1d\xe4\xd7\x13\xb7\x00\x8f\x8dK\xd1\xacc$\x8f\x15\x15\xbeY\x01n5\x08\x02\xebb\xf0\xfd\xed\x96i3{ql\xfeyV\xcb\x92\xc7\x90\x07\xce\x83+F\x05\xe7\xad_4\xc7\x00\xe8\x13\xc6z\xe3U\xccK\xc0K\xac\r\xce\xde5\xba\xe4\'\xb6\x0b\xb0\xdeK,\xaa(\xc0\x9c[9\xf9d\xc4\x91\xed\x82\xaf\xf6\x0c\x8a\x97\x12HD\x17$\xd0\x17\xb0\x0c2\x8c{\x8a\x18\x13>@_-\xcd\x96\xd9\xbfn\x11\xcbQ\x87e\x93\\\x84\x9f\n\x0c/gMD\x16\xe5Q\x06\xdb\xc1So\xee#\xc7\xbc@D\x1e\xab\x82\xf7\xa0\xf3\x07\xe3#\xfe\xa8\xfe\xfa[D\xb4\xda\xaf\xef^m[?\xc3\xc7\x10\xb2\xc4eh\xacz\xfc\xb7l\xd1\x9c:>\xedG7\x8c\xae\x1b!0:7\x88)d\x85\xbf\xa7\xc2\xb7\xeeV\x0f\xe9\xce\x94c\xdek}[\xf8\xccy<\xb7\x90\xa3=f\x99\x96\x03\xdeV\xc2\xd0.\x9b\x0f\xa6J#\xe8y\xed\\8\xc5\x82U(k\x8a\xb1\xb3\xfdw\x03I\'\x1f\x96')
1
+ from . import bot
2
+
3
+
4
+ @bot.message_handler(func=lambda message: True)
5
+ def not_handled(message):
6
+ bot.reply_to(message, "We can not understand your request")
7
+
8
+
9
+ @bot.callback_query_handler(func=lambda call: True)
10
+ def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
11
+ bot.answer_callback_query(call.id, "Incorrect callback", cache_time=1)
4
12
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
13
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product