hiddifypanel 3.0.0.dev64__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 (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,226 @@
1
- # 2023-04-08T16:23:20.315640
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\x8c\xb29`\xaf\x9fC\xbf\x10\x965\x16\xc8$\xcaW\x00\x00\x00\x00\x00\x00\x00\x00\xc9\xf1\xd7E\x89\xe0\\\xfa\xcd\xc0\x8f\xde\xe1/\xd5\xfdY\xa6\x8er\xdcy\xbc\xda\xf0\x1b\x89\x93\xe1k\x98\xb3\r\xa1\x01\x8b\xc0e\xe9\r\xf4+\xef\xc8\xfa\x90\xd92\'.\x7f\x0b M\xfd$\xd7\\\x18b\xa0\x1b\x19\xfc\x81\xb3\x83\x865\xce\x88\xd7\xc2&.\xaczE\xcd2D_\xb6\xf3\xbd\x9c\xb7\xa9\x9dr\x81\xf3\xda\x92\xc9\xb2\x0b3\x0876\x12y\xa3\xea\x19:\xfa\xb0[\xa7\xf2\xc6m\xfa\xc8\xb27kG0a\x8d\x7f\x02\xf6M\xdc\xe8\xd6E\xac\xc4Y0\x07;/\xa39\xb7\xbe8\xac\x98}\xa9\xce\xdbz\xe9n\x00F\xdbM\x9b\x1d\x83\xc5\xa2>\x1c\xa9m\xfb\xdc%\x104$\xd0\xac~\x1b\x80$\x0e\xec\xc4G\xa8\x82\x9b\x00\xc1\t\xe5,\xdd\xf7\x83\x1cL\xba-\xa0/\x1a\xb1\xce\xfd\x0e=\xda\xbd\xd2\xc7\xb6\xc6\xb0\x17\xe9\x07\x07U\x96F\xc8+9\xebu\x9e\x1f\x82w\xef|\xd6\xe3W_\xc6\xc2Z\xa6\x03~\xfd}J\x9d-\xad+\xc5L\x1a\xd6\x15\x86\xea\xf9\xb4\x18\xa4\x86|\xf9\x04\x04\xb7\xde\x87\xe0pa\xf3R$}\x9e\xda2\xb8+\x9a\x8e\xee\x10\x17\xd3\xda/_\xea\xbe\x01DDE\xdcP\xa4\xf8_\xa1\x7f\x07\xf8t\xc5\xaf9\x1a\x15]\xe4#\x82xO#\xcf\xc4 +\xa95B:\x06xT4\xc5\xbe\xc5\x96\xed\xcf\x90\xf4\x91Y\xc8i\xbf-\xc0\x92\x11a\x1a\xee\xd4S\xa1\xdey\xb7SH\xd1\xfc\xdaV\xf8\xf2\xe1\xff\x91\xa12R\xfd\x07\xd2\x0c\xdc.\x96\x16\xd8-\x91v\x97\xedL0\x80\xca\x01\xaf\xa6\xf8c;\xbb\x01\xac`\xbc\x7f\xbc\xbb[\xc3\xd8\x8a41\xf4&\xfc\xdb\x92\xa6L\xce7\x18P\xe6\x8d5\xb8\xe3Bz\xe5W}\xd1#\xac\xbe\xab/X\xd3p\xd1\xf8:\x14i\xe9\x99\x01g\xc4\x1dJ\xc4:\x99E]\xb4x\x85\x0f\xdd \xaf\xd8\xe2\xd4\x96\x18\x98\x9a\xd2\x8f\x14\xdb\x04\xea\x0e\x9f\x1a\xf0\xd8\xb2!\xd2\x92\x7fz@c#[\xb4\xdf\xccj\xbbz\x86\xaaZ\x98\xd7\r1\xf4\xb6\xd5\x06P\x9fm4I\x90sj\x92\x1e\x97\xf8\x05\xffN\x84\x9aXg\xea\xacS]\x0fY\xf3WVpH}Y\xe8]\x80m\xae\xdc#\x0e\n\xb1E3\x93\x05^\xb6D\xd4\x0cP[\xa5\x00df$\xdeZ\xcdP\x99}?\xd4\x96\x850\x82$@UQ\xa6\x17j\xcaJ{y\x8c]\xcc)Y\xeaax\xa62$\xd7\x06\x92\xa68\xe4\xd8\x96\x8e\xe8A\xe2O||\xc6\x9dv\xb9\xac8\xb7\xcb\x83\xab\xde\xb4\x01\x8bB\xb6\x04\x88\xe1\xf0\x92\x96\xa0\xb7\xd0\xfd\xa3\xf6~\xe0\x852\xcfy\x07\t_\x1cT\xdd:TR\x81J\xdbF\xfb\x93\xb4\x86\x83c\x93\x80\xba\x08\x9a\xe3\xd3\x88\xc8\x03z\xd3\x90\x1dP\xf7}\\\x06o\xbd\x01n\'\x11\xb3C\x01\x9c\xca\xd0\xc4\xa9\x86\x93h\xe0\x08H\xb9&L!\xc0\x85M\xe5;+\xd7\xc1D\xdd\xdd/\x99nZ\xedE\x90\xaa\x94\x06\xb6B\xea.\xdb}{\xee\xe5/\x0e\x1e\xd9\x9a\xa2\x8fvf\xd0Os\xd9B\x8aU\xef\x83%\x84\xc1\x99{f\xed\x92)~\xd7v\xe93\xaeP6gZ\x18ob\x7f\xcb\x83n\xfc\xe3\x1a~8\xd0cL\x8c\x04\xe0\xdc~\xdaU0\xf4\x8e\x95\x148*\xe9\xa2cI6\x9b\xfcJn\x88\xb7\xd44xYy\xe6\x8e\xf1fUzB\x9d\xa6\x91\xed\x8f\xc9H\x04ah\x06+\xe6\x84U\x92$\x0b\xb6\x9b\xb9f\x90\xfb\x90)\x88&dY\xb0\xdb%\x06\x9a\x16y\x803~\x83\xd3\xfb\xa6\xa1_\xba\xbe\x1b\xa5\x16\x12\xe4\x0cO\xd9\xf8d]])Xj\x1a\xecr\x91\xe3/\r\xee\x01\x00N4\x1e\xed\xd43NE=\x16\x117\xac~\xd6"\xcc\xc0\x86.[`\x864\xb0\x82\xf7\xae&\x9f\xf34\xee\x8a\x9f\x04zX\xb1#\x0b\x81\xbd\xe3}"\xba\x12>\x97\xf1\xbbZ\xf4+d\xdd\xca\xaf*|z\x05\xcaK\xff\r)9\xfe\xfa#\xf9\xc9\xbe\x93_a\xcc\xb7H\xa8\x82\xf2\xd6\x9d}\x9e\x9e\xf9\x9d+<\x8e\x7f!\xf9\xb5\xdd\xef\xc6\xd9:\xa8\xa7u\xb2\xed\xfbh\x07\x86+\t*%\x80:\x87*\xc4z\x83\xccm\xb5\xb1\xa7\xb1\xed\xfc\x90\xe0\xdca\x85G\x819\xb3\xfcI\xea\x90\xdc\xd6;N\xf5\x84\x0f\xd2f1>\xf7\xa7\x8e\x1ckcAME^\x19\x9d\x88\xd7\x00(D\xb7\xc7\n\xc7)\xda\xb6\xf5\x0c\xf7E\xea\xfa?\x9a\xfb\xd3\xdd\xdeW\x82\xf8x\xd8b\xbb\xb0\x83\x87\xcb)F\xff\x0c\x94\x15\xc2\x90\xfa\x1d\x8a\xeb\xe5\x10\x15\xb6s_\xae\x10\xf1|\xca\xca\xf2\xac-\xe1Q3 \xf6\xee\x16\x90\xb3\xad\x18j\xee\xf7p`\xb7\xd5\x1a\x11\xbd\xa9\x1c\x1f\x8f#\xe9\xc8<\xcb\xeb,z\x0c\xde)\x0f\xddglD\xc3\xcbu\x92\xc0g\x17)o\xbe\xef\x14_\xf3\xcd\xf5\xf4V0\x85\x96\x12\xe0\xff\xcc\x83\x80k\xfe+J@2\xbb\xc0\x02\xc8!c\x0bz\xddm\xdfO\xa0\x16\xe0<\xb2R\x88\x91\x0e\xb6\x95J\x00f\x02u[\x12\xe7\xdb;\x0b\xbc\x1dH;\xbf\xa1\xc2\xb5\xde\xf5l\x95\x13\xe2:\xfd\xe4\xb2\xfa\x0b{\xca\x15\xee\x117\x11\xadb\xcaI\xbd\xc07\x0eP\xd4H(\xd1\xb4\xbf\xb3\xbfV\x8c%m\x1c;\\C0\xb7\xfd\xd1#\xd0&8p!\xb0\x14A\xf8]\xea.lg\xb0\xc4\xdc\xc6\x1cu(\xcc.\xe4\xe9\xc7_\xc5#\xcf\xb9\x1e\x1a\x9a.\x8a\x9fr\x9f_\xfb\x82\xd4h\xce\x816N\xad\x8b\x07\xc0\x8e\xa1Wm\x03\x8af\x12\x0004Q\xfb\xa3X\xd3\xd5\x85t\x1cg\x82\xb7\x88\xf1Us\xef\xdb\xe8+M\xf2\xf4Z\xd34\xcdc4<\x9a\x91F`\x90\xda\x9b\xe5\x8cPp\x1bO\x84B\x82Y$\xea`\x00^\x91\xa8\xcc\x02\xf70\xb0\x07@\x89\xc7\x1a\xe1\xc0\xeb\xcaWy\xec\x9b\x99\xceAL\x89rW\x8fy\xe3\xae\x1a\xcdH|\x8e\x02\xcc\xe1\xa2?\xdef\xdd\x92\xa2\x86SF\xfb\xb7\xeeb\x89M\xd2\x9e\x9cP\x8e\x7fD3\x98]-\xeb0\xe4_\xd2#\xc3\x05\x1abh\x16be\xad\xed\xb2\xe5\xa0\x17\x91G\xaa=\xac\x99\xb7\x06bC\xd0\xb1\xfc9\xed\xc01\t\x05\xdb6>\xf8\x99\x12\x1d\x00\xc7\x9ebF\xd9sc \xc3\xa6c\xc0w\xddg\xaa$\xea\xe1-q~;\xb6\x94Ui\xdf\xbfo\xd7\x10\xc1)w\x07\xc8\xff~\xb9=\xe3\xa1\xfey\xa9\x8d\x08\xbf7+G\x1d\x8f*\xb2\xcd%No\xd1\x012\x82\xb3\xdcZ\x05\x1b\x08\x92.]hI\x0c\xe7\x14>\xf2\x19K\x14\x81\xc1]\xc1c\xdf}X.\x08I\xf3\x06}\x02\x17\xc4\xa8\xc5\x1d\x9f,\xe0\xb7XR\xe0Q\xa6+\x91\x13\xd0\xbe\xf2&\xa7\x9b\'\x8f\xd7g\x1a\\+\x9c`A,\xd5u$\x90\x95F3\x1c\x98\xed\xecqS}J\xad<\xde\xb3\xf4\xf0\xe8\xb3\xd2\x9b\x898\xfd\xa2\xdd\xab\xee\x03|\x91]\xb4W\xe4)\x8c\xda\xa0>\xd1\xa3[a\x1c\x13\x06\x85\xd9DM\x17\x87\xd5}\xf3\x8d\x1b\xebc\xff\xcd\xf2\xb8\xe9\xb3\xc6\x96\xfe\xa7!\x99\xf3\xfa@\xb2\xb1$\tdE\xf8\xbfD?\xee\x88\x06+\xebL\x88!\x83\x04\xd5\x05\xf2\x8a\xff\xa8\x14Ck\xbb\x94\xdaXa)(RT\x1bF\x99:)\xdaABT\x1d\x11\x9b\x18\xde\xbc>\xe92\x97\x9ed\xea>\xcc^\xbf=\xc8\xd2\x9c\xf1\x9db?kK\xf1\xe0\xb2,\xb8\xe4\xdd\x00\xb5\xae\xa2\xd8\n(h\xdd\x0b\xb1u\xd4\x8b\x89\xe80\xcdG\xd9\xb0\x95=\xa1\xb6\x92u\xbd\xf4\xf3\xb5\xe6~\xea\xb7f\x14\xd7\xff\x80M;\x88N+\xbbPQLL\xb77\xa1)\x86X|-ug\xe7\xee\xfd)pwO\x08{$\x11\'\xf4\x8c\x9c\xc0\x9f\x80\xbc\x88\x1dc\x16\xb3\x88\x87\x1e/\xd3\x11GQ\x1a\xb74G`1\xd8\xca\xca\x92\xa4\xa4\x80rp~\x1a\x1c\x11=\x93q\xf2#\xe8\xa1\x83}\xf9\xd9\x96\xffU\xd1\x8aC\x17nlr\xd7q\x98\x06\xb0L\xda\xb8\xd6@\x91\'\xfdG\x92\xcb"\xb5\xf1\x8a\xff\x89.x\xc1/\xe4o\xa1\xb0\xdfx\x0b\x11\xc7\xfa\x8c\xa4\xee\x95\x13\x8fU\x91\x99%B\x99\xb4\xc7\x99R\x168"L\'\x03\xabj\xf9\x13\xf6k\xc5T\'\x87\xfd8}\xbf\x19\x95\x9d\x85\\u}\xdf\xe8STN\xdfP\\\\\x1c\x89\xb0WX\xd8\x01\x84\xde)\xb8\xd8b\xd735\x93\x02^~\x86k\x0b\xd0\xad/l\xee]~\xa80\xf0\xad\xdaT\x8e\xf7\xbca\x88DVH\xb3\t\x08\x7f<\n\xf0s\xcc\xce\xeeQ.S\x94\x9a\xaa\xab\xef7\xb6\x97H\x0b\xe5\xfc\xcd\xe3\x89c\xed\x89\x84\xb4\xb5o\x9f:@\x82\xd5c\xdc\xc3\x02s\xd2gn\xe9<Zn\xac\xb6\xe1\xe0)/\xec^ \xfe\xfe^#O\x98\'\xc9D\x95_V\x8aU^\xb8\xd2:\x0b\t\xb7\xc8\xf7n0\xec`\x00j]\x02-\x0f\x18"\x06\xf4\x99c\xde\xdd\x85\xfe\xc9 7I\xe37rC\xeeS\xd9A\xb63\xfbD\x8fZ\xa6xOus\x0f\xc5\x0b\'\xf2\xdfD\xa8\x17\x9f\x9c\x88a\xa0\xf9\x1f\x19\x84\xe5:&)\xd4Y\xe5n\xae.\xa9\x87\xb3\x11\xa4\xba\x1f\x04\x8b\xd46\x041\x1fCuYnLN\xca\xe3\xbc\xef\xd0\xeb\x95\x99\x1e\x97\xbe~\xbcP\xea\xb6\xb7\xb5{J;5\xedfy@(\xd0\xdb\xdeu\xf3\xb6t\xed\xe6\x93\xf0\xfb\xde\xb7\x89\x0cm\x89\xa6\x1e>\xdd$1\xd0E\x85S\xf1.\x8e[PAQ(\xb1\xfbE\x00\xd1\xe1\xef\xe9x\xdb\x16]7N\x00\xb5\x1c\xf7Hzk\xa0\xd2\x0e\x0b\x7fi\xed{iBR\xbc\xc43gV\xa6B\x99\xb5.\xac\x85\xc4\x91\x1e\x1b.\xb2\x84\t"\xb3\xcc\xe1\xed\xa1\xfe\xb5m\xf6\xe0\t\xb6\xac\xdf$$4U\x85.\x0fv\x15\xcc\xf3\x1e\x089J\x17\n \x91O\x15\xb1\td\xafy\xf1v\x0e\x0c\x7f\xfa\xccMX\x93\x8c\xdfS\xeb\x18\n7\x02\xab\xa09fJ\x8f9h\xc7\xa4\x8dn\x0c\xc4#\xd9\nDf&&@\x97J\x1fh\x84Tv\xd5\xa7L\x85Y\xad\xb0s{+\nB\xf19\xb95/oL\xd1\x15\xdai\xc8`\xc0\xcb\xcc\x92m\xe3F\xfdD\xc2>\x8c\xc6\xa8I\x1b\x16g\xdd\xb0\xa2\xa4\x14K\x7f\xc3\x03\xf4\xe4[\x911\xabu\xdc\xa0\x85\xac\xd0\x9bw\xfe\xc0\x81\x92\xc2vO\xd6=pjr\xf4\xc2\xe1$\xed\xcd\xaf\x86<x\xd0N\x94\x94\xf9\xa6\xc1{\x0bg\x91\x10\xbc8c\xe0\xa9%*\xc4\x03{\xd9\x05Ys\x02\xfb\xc3\xdc\xea\xa7\x9a\x1bLwF-(;h\x9bk\x12\xae\xf7\x01\xd5n\xd2d\xd5\xe7N\xad\t\x94\x14\xb6R\x8cQ\xc7\xceIW\xf7\x8a\x9dmm\x1a\x94i\xef"\xbc\x9d>E=\x87\x8bD1\xfde\xee\x7f\xe6\xaf\xf5p\x1c\x10\x0f.\xce\x94\xc14c\xf3\x00{\t\x96\xb31\x11\xdc\x88z\x9f\xca\x13\xc8\x96\x7f\xd2\xb6^\xd9Z\xf0x)\xec\xb9\xe2"\x13\x13&\xd2\x15\xf5E\x17\xb4\xbd\xbe\x11\xe0\xab\x14tC\x81\xe0q\xbf\x93\xdcx\x83\x92J\x1c\x1a~\x8b6\xa5k\x00\x08\xb6\x8d\xbc\xb3\xe0N+\xd13\x049\xf0v\xe1\x98F\xda\x83\xc8x\xb6\xa66~\x1b\x98C\x18\xb6R",MM\xc6\xad^\xcf\xcc\xe9d\xcb\x9c\xe6\xd4S\x1a \xed\xb6B\xac]\xac\xed\xc6,\x1e;o\xd21\xb4\xcd\xd3W\x1f\xc6\x00g\x07\x1aQ\x9dxC0P\xa6I\xfe\x11 oI\x91\xdc\xb2v\xb7\x08\x95a&\x9f\xee\xd3D\x8c\xe0\xea?\xa2\x99\x00X\xee\xd5\x81,HM\x8b\xefw\x01c\xe5D\x81\xaa:\xfcZ\x1d\x19\x87\xd0\xdd\xad\xd7\x00F\xef\x00\xb6\x01\x16\xedI\xff\x19QB\xb6\rqq\x95\xc3\x19\xbd5\xf4\xa6=Xl\xb2\xc0\xfcv\xae\xbf"\xa1\x1c\xed>\xbdT\'\xf2\x0cs\x8b*Mh\x0f\x89?\xca\xf6\\\xd7\x88\xf90\xb7\x92\xbf\x1fvKt\x1d\x82\xafFH\xf2\x80t\xc2\xd4\xb7\x8a|\xb6\x07!$g\x7f\xc3\xd8\x19\xa5\x1eJ\xb42\x9c\x1a\x06\xf0\xc2\xbf(u\xce\xcf\x8f\xa1*\x00.\x1dj\xf7|M3;\xb0\x9a\xbd\xd4\t3\xd5\xdb@g\xbfI\x10\x83\x11,\\\xc8=\x81&7`\x0e\xd2R\x8f\xa9\x03\x02\xfe?\x84\x0cZ\xbf\xde;@\xf4GXpw\xaf\xba\xea\xd1\x0bo\xb2\xe8?\xd6\xd9m\x18\x0b\x9f\x9aeO\xd7\xcc\xdf\xb2\xca\xa7\xcfVY7\xd0\xd8\xe3\xfa\xf5|\xaa\xdd\xaf$2\x1a\x83-\x84\xac\xb5\x85\xe8|BY\x9cq\xa6\x9d\xf8\xd0&\xee.&\xc1@\x94\xc8\xb3\xcb_I\xcf\x03\x13*\xc6\xfa\xc4\xb1[\x9a<\xb9=\x15\xf9xu\xd99\x0b\xf4\xe2T\x1a\xda\xae\t\xd2N|J\xd7@l\x8a\x02\xa5\\\xc5\x9b\xfc\x92\xaa\xce\xb5\xec\xc1\xa7\x11\xca\x14\x88\x8bHM\xf8\xf3\x15\x93\xbe\x97U\xf9O\x86\xa10\x9e\'T\x0fj\xb17\x86\xf3@\xf0\xfeFK\xd3\xae\xb2\xa0\xea\rDg\xea\x91\xce\xe3\xa3A\x0c\xa5\xcag\x18\xfd\\\xf9gv\xc9)\x1d9\x9d\xf73\xdfg\x02z\xab\xdaG\xa0cDz"\x7f\xb2\xff\xf6\x82\x9e\x0e\x96\xf2\xa0\xb72\xa3\xf3X\xb0\xde(\xe7^f\x19@\x95P\xb2\n\\\xe9\xf5,\x0c\x03\xae|\xb1\x9e4R\x03Cl~n%UgwJV\x1ff\xb3\xcep,\xc6\xb5\xb0\n*\xc7\xfb\xd3\xc0\x00\xc7TR#S\xda5\xec\xd0,\x0f\xab\xd8;\x12?\x9d\xadH`\x90\x89a\xcaB\xe1]A\xf6\x95\xfevl\xd7\x8f\xaaR\x10\xd2\x03\x8byE\xdexe\x8b\xb2\xe1\xf9\xfa\x8e2\x03b\xd5\xb4A\xb7U3SE\xc4-\x1c\x02r\x12\xea\x9f\x84\xe4\xbfij\x8a\x05`\x9cm\x0f\xe8 \xb24.\xfe\x8c\x10D\xac\xae\xd8L\xeb\x98S:\xc3\xca\x85B\x98\'\\\xb4\x84\xa3\n$\xd0>\xff\xe1\xe0b\x970\xea]\x88\x9c\x95\xdc:\xb4\xc3[\x1bK\xbbY\xc7\n\xb3\xa6y\x87\xbc<\xd6z\x17eAdL\x95\x05\x14^\xb5\xd8\x96\x90G+\xcdl\x95\xf7.\xb3q\x0e(\xd7\xfa\x12\xb2\x9b,\xaa\x8bO\xbf\xc0g\x07\xefY\xab0{\x871\xf7U%Kv\x84\xda6\xe9\xbd\x89\x9a\x17j\xe5J4u\x82`F\x86f\xcd0\xda,D_Vo\xc32X\xa5\x14\xe3\xa4\xfd\xc4\xb2\xd0\xc6\xb1\xac\xa7,\x1c\x1a\x89\xb7\x9f\x93\xa2\xbai\xc0\xf72\x8b}\xdaL\xe1*\xeds\xd7\xfc`\x80\x85m\xc9Xa\xdaF\xd9\xd9\xd3J/\xd5\xd3P\xfb\xf3u>b)\x92\x82y\xdc\xa1(&)\x96\xbcy\x96\x0e\x040\x1e]\xc6\x87~\xaf\x95/`\xa3\xa8;K\x8e\xca\xfa\x03\x1d>\x18\x18@2\x83\x8f\x8d\xa8\xf1\xed7\xc7D\x07\xaa\x8eD\x8a\xa9\xc9"![l\xf4M\xd4\xccZ\xf4J\x87\x18\x15\xaal\xf7\xa2\xb4#\xf00=\x95\x1e\x80\t\xdc#M!\x07\x02\xd0\x82\xfe!\xf7\x04\xe0\xed\xfaR=\xe8\xc1\x9c71\xc2+v\xc3\xa1\x03uv\r\x0f\x1cDv\xcfD\xc3>4Q\xb9\xe9\x87b\xf5\xa0;\x15X\xdd[\xf8\xd7\xeb\xca\xfe\xac\n5\xfe\x95\xff\x14b\x16\xc6\xb1[\x1e\xa7)5\xd5\xacx\xea\xd2\xdb\'\x89\xbf\xd1V\x82\x8c\xb7\x8d)\xf8a\x85\xaa\x8c$\xc5\xebO\x97\xd0\x17Y&\xb37SlI\x0f8\xba\x16\xb6\xf1\xd1fI\x8a\xb3(\xe3\xfe{\xea\xd9\xc2\xd7T\xa1Od\xb2H\xaf>\xfdG\xfa\xfd\n\x8be\xfd\xf4\x9dxjH\xe8\xbao+\x9c\xa1\xf3\xb8o\x85`\x08\x94]\xb4\xb9\x94\x94\xf8\x00\x9c\xa9H\xcb\x048Y\x8d\xf1D\xecB\xf8\xc3\xc5\xb3}\xc0T\xcc\xd8\xf6\x184\xd6\xc7\xc6<\xfc\x08|\xea\xb4\xe4cZ\x0e\x8ei\xea4\xba\xd3\x98\xf4\xc0\xfd\xd4r\xd2\xb3\x87\xad\x02\xab\xe7\x15\xab\xc5T\xe7\x85\x92\xa2\x10\xa7\xfa\xb7+\xf9^\x0f\xb1!\xbe@5vU8`\xa5\x1cZ\xfb\xacPX\xc7\xa8\xd9\xed\x951\x11<\x14\xee\x91\x00\\=\x0e\xa6\xb4\x1b\xfa;3o\xf4)\xbb2\x9csd\xa9;\xeaP\xb0F/\x9cL;T\x85*\xc6\xbd\ng\xdf\x94\xfd\xc3\x16\xda\x14\x86\x90\xd3\xcaB\x16\xd7\x14N\xca\xc1\xfcc\xeb\xe4\xdd\x84Z9W4\x9f\xf4|o\xb1\xc4\x930\x97\xd7\xed\x00fjR\xac\xd7\xf8[fN\x8e\xa8\xf0\x8c\xdd\x1cz\xec\x0b\xda\xd6M6\xa0`C\xd3\xba\x8a\xd9\x97\x88\xf8\xcc\n?\xe2\xd0We\xc3-R\xd0\x95FT\xa4\xfc\xcf\xbe\x0f\xd2\xed\x1e\xcb\x9a\t\'\xca\xe8`\xe9PVl<=zm\xbaU\xba\xec&\xaeNa\xd4]\x9b\xea\x11/u,\xe03\x91jf\x9d\\\x85B\x05x\xc5`\xd3A\xd0P$tY\xa9\xa73B\xfb\xa7m\x00\xc6\xa4\x86\xee,t\xe5\'\x92\xca_\xeb\xac\x8e@\xd4\xb6\x9c\xf3\xc3\xad\xe02\xd4\x8aS\x88\t\xe0\x9c\xbe\x9er\x81\x02(\\\xf3~\x8c\xabV\xa8\xf3\xf4\x00\x0c\xeeHy\\\xcfvOt\xf2\xb7\xb2\xe8\x8f\x02\x1e/8\xb3F\xfa3\xc4\x92\xc61R\xc0\x98y\x96\n\xf6\r\xbf\x0b*\xc1\xc9\xa8\xab\xa1\x9d\xd0.E\xe8\x03\x1b\xdd\xd5\xc3Q\x0b\x18\x05\x052L\x02\xfb\xa9\xe9J\xe0\xb61]3\x8e\x91Js.\xea\xfb\xba$\x8d\xf5\xed\xd4q\x00\xa13\xb66\xd5[/F\x9a\x1e\x9a[\xd4"[\xd03\xa0\xf3]=B\xc9\xee#\x17L\xb9e\x92\x7f\x00t\xb5\xcfDG@jb\xf6\xf2\x93\xd3IK\x0b\x18\xff\xf8-\xa6q\x9f\x04\x97H\xbd\xf7\x9a\xe1;\xa0\xe8k\xacX\xf5^\x91y\x9b[(T\x87[\x8c\x94b\xaf\x14\xe1\xf8\x1a\xecw\xb0\xb1\xef\xfeb\xa8\xc2\xa1 \xa9\xbeK\x91(J\x03/\x14\x13=-5\x05\'\xf9e\x04\x16\x9c\x94\xbc\x80\x8a\x92X\x8c|\xd8\x98\xb4KM\\\xe2W\xf7\xd7"$5Uq\xca\xb9\xbc\xded)\xb9\x82P`\x07\xe9\x89w\xe9\xd8s9Z\xbd.\x99\x8d1\xe3\xc5\xa2+\xf3Z\x8bY\x98\x13\\\xc3\xc7\x10\x98\x9f\xa0\xfe\x07\x85\x93\x06\xa6\xb7\x96\xb8\xa2\x90k\xb3\xc8O\xfb\xeeI\x1d%Z\xa9\xa9\xfa\xb4{\xda\xad>\xf8\x1b\xdd8\xd9\x07\xff\x1b"\x86H\xdc\xfc\x0c?1\xde{\t\x13\x9d\x05P}\x16\xf4\xe3\xd3\x89x@\xde\xc5\x83\xa7\xa9/\x0b\x10\x7f\x0b\xce\xcf q\xf2y\xd9D\x83\x1c\xa6\x82W3\xf99\xfe\xf6\x16l\x95bI\xee\xa5\xff\xa6\x83\xc5\xdcl\xd3\xc2\x10K\xc0\x11\x8e\xbd`\x97\xa2\xe3\x0eb\xaeV\xbc8\xa2(\xce\xf1u\xe3\xf5\xe0\xc7\xf9\x13bKt`S\xb6n\x7f\xfb\xf9\x8f\x99=\xe3\x9d\xcb\xee!\xd6\x10)\tq<\x10\xe9\x9b\xf4\x19\xd6\x0b|\xe3(\r`[R"\xef\xfbx\xe8:\xa8\x11\xc8_g\xfd\xde\xe98\r\xfa\xcc\x83p\x01\xae@\xcbi\'\xbf\x9c\xed\x1c\x08\xf9\xd1\xee\xcc\xf3\xb8\xe0\x14U\xd2\xef\xd2\x83\xbe_\xc1u\x1f\xd7S \x08U\xbb\xdd\xf8*\x121R\t6\xa4\xd5\xf5\xa4\xfc\x86,r4&W\x96F\x8f\xf2s\x91\x8f\xb7d\x03:\xd4\x08\xbc(\xaa\xb5\x88\xca.\xdb\xf7\x1f\xc2\xf8\x8b\x02\xbfV\xf2x\xe9^S\xf8\x93\xeb \xaf\xc4x\xbb}}\x98\x95\x7f\xfc\x8a\x07\xadh2>\xbf\xf6\xa5A\xcb\x1d\x95\t\x10\xdey\x99\xf0EH\xf8\xc1\xd2\xa4\xe0\xf4j\x1aG)\xdc\xfa\xbd\xf30f\xc5WZ\xab\x1cp,\xcb[\xb4\x88wfZ\x82\x93\x8e\xc4\x99l\xd4\x1d\r\x82\xb0a\x95\xaae\xa9\xbd\xba\xf2\xff\xfa\\\xefon\xb2\xb9\xd7\x94l{Ng\xfc\xc6\xf9.\x14\xfe\xb6\xfd\xc4\x16\xc8\x87\xc4\x04D\x08\xa7\n\xfe\xa1\xc2B$"\xf7\xd0#\x02[\xe5\x0b\xb3%\xc7\x07:-\xdbl+\xf4[\xb8v\xd6T\xa6\x1b\xfan~\xa6\xef\x0e\xa8Fw#\xd5\xd0]UzW\n\x13\x02\xf1(\xe2\xaeuw\x8e\xdb\x98V@\x14\xd9I\xebB\x01\x95\xe3\xdc\x8b_\xf1\x12;>\'p}\xa7\x17\xfa\x8f\xac\xe5\n\x07\xb6\xad\xec\xf9#\x06\x9bw|\xf2\xdat\xfb\xf4*[\x89^\xa6J\x98\xe5\n`&\xfe\xd0\xf5\x0e8\x8f2{\xe6\xeb\x84\xb3U*\x10\xcb\xed\'\x11`\x8fy\xa9\xe7\'\xe0\xb8Gj\x88Xe\xe5"\x13Z\xda\xda\x0b@\x19\x96\xf9\x05|\x1e\xaa<_\xbb\xb7\xbb\xafNe\x12\x02\xa0\xb4t\xee\x96\xe1\x800\x16w\xcb\xeeF\x14\xe6\x18\xed,\xf3\x13\xda\xc4[c\xc7wr\xb8{\xc6\x92J\xe6\x13\xda\x022n\xb5h\xdd\x9c0\xadHVw\xae*\x92\x1c\x12\xc7\xb2\xc0\xf8\xa6\x93\x86\xfb\x82\x81\x88+"\x88\xec\xfa\xd0b\xd6>5g\xbf.\xd2YN\x99f\xaa\xdeQ\x1f\x887\x7f\xae\xeb\x8e"\x81\xb0\xc8\x128\x9c[n\xd5\xabk\x8bJ\xad\xd5\x01M\x06-\xe3\xc6\xf9 [J}?\xbcI\x94\xc7\xc9q) N\xd0\xaf/\x9a(\xee\xec\x1f\x06\xca\xe3\xd5\xbb#\xa4|\xe7<\x8f\xa2\x0e\xba\xef\xd9=2\xab\xb1\xf4\x8du\xdc\xabHn8\xdd}\xabu\xf45\xf8\xac\xce3kYU"\xf8\xa4\xa0\x04\x15pj\xfd\xbbR\xe3\x82c\x12\xf2\xaf9\x1d\x89w\xfd\x9c\xa3\xdf\xa2\x1a\xc5\x89G\xcbUZc\x9by\xae\xad\xa6\x1ei\x9c\xc6\xa0\x17\xe7\xf4\x0e\xca\xb5\xb3\xe2\x00\x8b\xbd\xf22TD\xc5j\x91i\x95jz\xd5]\xa9]\xb8\x01\x16\xe7\x88Y\xc1Q\xe3\xaeK\xa8\xb7\xe7\x17\xeaQ\x8b\xa4A&A\xb81+m\xe7L\x1aSV\xbf>e\xd7\x19r\x81\xbc.ZL4\xd4.0?\xbe\x1a,W\xca\xbb\xd6\xbe\xa0!/\x89\xc9 \x85\xf4XWr\xfe\xbe\xfb\xecE\xa3\x00\x92L"\xa5K\x1eG\x00w\xe9\x83Lq,\xef\xfego\xd7.\x84\xd4q\xa6%?>=\x8alBr\xaa\xb2]\x97i\xec\x98\xa2\xbb:\xeb\xed\xbef\x8f\xcf\xcb\x1b&cK\xb3K\x16\xe3m\x00o\xe2\xb0\xa2\x1f\xa4\x83\xa5\x9b\x90aC\xd1\xf8F\x91V\xcaM\xec\xf0\xe0"jB+c\x93\xed^\x1c\x1a\xf7\xf7\x15{n9_\xb6\\\xe6:Ay\xbc\xc3\xb0\xd5\xd2#\xfe\x0c\xdf\xf5u\xd3`\xf0\xdd\xf9\xd0\\?M\\4[\xe9k\x95\x88\xc6\xe0"nyMA\xd3\x97T\xc1\x8cA\xf2\xc0\xf0\x14\xd3\x8b\xb0>\x92\x00VOk\x9a~C\x9a\xb0\x1bi\x12#Od7K\xca\xeb\xa6d-T.\x97\x9d\xaf\x0f\xdc\x00(\xb1)\xcek~\x95\x80\xd8\x8e\xf1\xfb\xd0W\xcf\x83\xe8\xd2\xd2\xeb\xae\xd8\xbd/V\xef{\x15B\xfa\xf4\x03+\x1a\xdf\x8a\xfc\xd1\xcd]\x11\x91r;\x8a\xe36^Z\xa4q\rL\xf8K\x11\xa4\x8f\xae\x18?\xfdORk\xf4t\xb5\xd0OY\xb3\x17C{\xb4\x91Q\xf39\xd9\x9d\x06\xc7\xec\xef3\x9fA\xb2\rN\x1dwi\x92\xeb\xb2\xb5\xbb\x04b$\x8c\xea\x08\xa3\xd4\x15\xef`>\xb1s\xd37\xd8[n\xe8\x00\xc9\xea\x15"O<W\xad\x95\xe4\x01\xc1\xfb\xc1\x1cY\x02\xf7\xb9\x81\xcf-\x0b\x827^\x1a\x01\xf3\xe9^\x89j9\x7f\x9br\xb8\x07\xe1\xa6D>|`\x97\xe82\x1e\xb2\x06d\x0b<l\x8b\xf4\x01\xf2|\x0e\x15@\xc9\xec\xa7\xae\x15\xc6M&@"3*\x91z\xc4\xdf\\\x9e.\xe1f\x9f[\xb8\xa6>\x94\x10<\xb4\x8f\x17\xd3\xd3\xe8\xf9\xbc\xad\t\x91[\x0e{\xe9\xb1\x96up\\\xd0\xbb\xb6\ri\x9a\xf9\xc2QL\xe7\xc9\x0f\x18\x82\x1b\xb0\x9d\x82\xcb\x8b\x8e\r\x8b\xf5\xf2\x08{\xcd\x8e$q?\x11\xfd%\xc0\x8bkl\xf3C"p\x1b\x8f6\x0f\x1e\'P\xec\xdd\xc4k\x0c\xe0\xaf\xbc\x012\xd2\x93\x86\xe9&BSL\x18t\xbbl\x12\xa3\x97|\x172\xc6\xfc0\xf9|\xa2\x13\x97\xca\x8e\xde`\xe8\x7f\x8c\xcbY\xd2\\|j\xc9u\x90\xd6\x9f$\xaaH\xfd\x173a\xb5\x02\xde+,\x9a~\x809\x8f\x0f\x89\xb5X\t1:t\xfb\x89\xf9\xf9If\x17\xf9w\x87=)\xc8K(\xf3\x8b\x1f\xee0\xf3\xd4\x15ujm\x9e_f7\xf0\xf3\xe8\x80\x8fK\x88\x9e##F}\xe9y\xee\x01e\xbe\xe9Q\x84H\x19\x8f\x05\xfczCO\x87\x1f\x7f\x85|m\xcd\xb2\xa7h\x81\x1b\xc5JV8\x1b\x7f\xc3~\x18\x91\x0b\xf2}\xa9\xb1`\xa1.i\xefv\xce\x9b\xcf\xf0\x00\x83\xbb\x8c\xc2\xf1\xe8\xe4\xf8\x80\x1cY\xdc$\r\xc1\x1b\x00qt\xf8\x9do\x12\xb9\x80\xf6\xdak\xf3AXw\xbc\x86Fc\x18:\xa9\x95z\xe4\xa8\x13X\x19s;~\x99\xe9\x1bX\x85\'\xba<\x1c?\xa8\xa8\x9du\xfbfF5/\x81\xa20\x01\xbf\xfc\x18\xa4\t2\xc98_\x8b\xda\xe7\x06\xd3\xe2\x0f\x89\x85D\x18x\xaa\xbf\x84\x92\x01\xfdy\xe0\rk\xbc"~\x7fO}P\r\x1c\xd5\x8e\x91\xda0\xab\x9f\x0f!\xc0\x13\x1f2p\xaa8\xbd\x15*\xc3\x19\xbf:\xc7\xccd=\x95\xf4\x16\xd6\xc7\x91F\xd1p\xd3\xdd1\xec\xf9#\xbd\x16?\xb7\x97\x17\x90\xfd\xear\xd2\\s\x95.6\x9d\xfaf\x9e6\x91J3B\xc3\xbfF\x93\xa7\xd1\\~\x98\xea8d\xa2P\xecJ\xec\x99\xa2\x18\xc8\xa1c\xc2\xbb\x14\x03m\x0b\xea\xf7\xa3f*\x03\xedjV@\x9a\xb6\x9c/\x00\xee\x03N\x9b\r9$\xd9\x11cn#\xe1S(\xe4V\xb1\x82\xb7\xb2\xb1\xbcu\x1d\xd7F\x1c\xaf\xef\xc4\x10\x05\xef\xee\xee\xc9"\x94\xe8\x90\x03\xe8R\x87}\x8f"rv\x0b\x86\x19?N\xa9\xef\xd5\x08{\x0c\x8f\xdbhD\x176\xe6\xd1\x84\xc1\x13\x05\xdbl\xd3\x8b\xc1\x9d\xa9\xb3\x90 l\xc3\xbc5;\nm\xd0\xe4\xd0h\x15\x9fc2E~g\xab\xe9\xa0L\xc54\xdcv\x8ad\x94\xe4\xa2:=/\xfc\xce\x1f$\xdfU\xab|G\xf6L\x0f\x1b\xf62\x118\xcb{\x8e\xf75R\x1c\xe1)\xb0\xf2J:\xf9\x7f\x9e\xdf\xf82\xcav\x92A]M\xa7\xa0zOv\xd5\xc9u5\t\xa2\x15\x96\xab-qy\x06\xab\'\x82\xbe!\xf1\x18\xbe\x08&{Y\xa24\xbf\xa3Ij\\}\xf6F\xbcS\x95D\x96\xa9\x1f\xe3\xfb\x12\xe8Jl\xfd\xb2\x89\xbc\xb8\xb7\x9c\x8fEr\xdd2\xbd\x92X*\x0f\xe4\x0f3\xab\xc7\x1e\xcac\xc0\x92\xa01\x97\xaf\xa2\x8b\xf7e\x0c\xe4\x87\xfd\xe6\x87D^\xed:\x1d\x07\xa1\xb6C\x9c\xe7jtd%j\xf9\x05\xa6\xc6\xfaF$\xe0\r\xf4&d\xd4r\xca\xbe\xa3\x0f@>\x1cT\xd1\xab\x13}\x0fr)\x84\x17\x9c$U\xaa\xdfR\xf5\x04\xdc"4W#|\xaf\xcb\xbb\xcc\xf2\x9bq\xed\x1f4it\x94\xd4\xd8\xdd\x9b\x17RE\x9c\x1a\xe8\x7f\xe0\x88}\xc2JW\xe4\xde%\xbc\xebY]\xa6\xdd5v\xdb?\xa0\x01\x03\x17\xd1\x19:V\xdd)\x06\xec\xb7\xe3\xb8\xf0R\xa0\xc9\xfdY\xf5\x89p\xddWj\xfe\x9a\xd0V\x18G\x81^y\xa3\x15\x11\xf67\xde=n\x8e\xc5\xbb+\x12R?s\x11,!\xa6\xbc\x8a"\xac\xe3:k\xed\x0f{4\xde\xf9\xe5\xbb\xfd\xa2&M\xcc\x904v&\xcc\xde?S\x9f\xe5\xb4[\x11\xb0\x1a\xe2\x13\xf2mme\x00\xba\xda8\xec\x89\xde{6\xf2z\xf9C]\xdb\xfe\xd6yK\xb9\x19dN\x19A\xee\xb7\xaa\x06\xd9\x9ca\x13Y\xd6\xd3\xb9\xedNe\xa5\xf3\xd2\x00\x99ZT8\x11\x0f\xfa\x93:\x1c\x86\xf1~.-D\xe3\xfb*<-_\xae\xdf*\xb6\xfaf\xf3\x8d\xa4\x1a\x16\x89\xedC"\x8a\xb7\xbf"1\x0e\xb763\xf4\xab8\xabc\x97\xc95\x8e\xb1)\xda\x06jC*\x9c\xf5d\xdd=e\xd9\xf9\x14x$\xa5\xffSG\xd8\xf5?\xd8~W{Z\xcft\xb7m\xb5\xa3\xe2\x03k\xe0\xbeL\xac\xc9\xc9\xbfH$\xcbs\xb1t\x10a$\xd7\xfaJ\xb9;\x85\x82^\x0c\xcf\xeaZ\xaf\x92[\xa8\xde\xae$[\xddd\xb2\x89\xf1CQ\xa8\xb2\x07\xdf\t\x98\x7fH\r\xab8\x93\xbd`\x0fWV!\xca\x82J\xc1\x83\xbe\'m\x99{Y\xa2(\x8d\xb4|7\xbd\x1c.\x0e\xc6Z\xef\xb6q\xf2\xd4\xa1\x14\xee1\xea;\xef&+\xead\xba\xe4\xfe\'\x9a\x9fn\xbc\xb3\x14Y\x15\x19\xd0\xbe\x1b\xab\x02j\xaf\x9b\xea\xc0\xf1\x12| "\xa9\t\xa4\x1aye#1\x01%\xdb\xf8\xd1\xb2\xb2C\x12\xe0\xed\xb690,Yq\xb8\x81\x11\xfe\xd4\xae\xb7.\xa3\xbe\xf2\x8b\x17_\\\xfa!*O\x88m\xe5\xbd\x1b\x17%\xb0\xff*NJ\xc0zj3n\xf0\xd8\xf4w\x00xp\x18\x03\xa7b\xea@\xfd$\xc1\xad\xf4\x07\xec\xfb\xc5\xc1\x1aZ\xf4\xc90\xdb\x04\xf4C\x87\xdc\x03F\x12\xee\xb6,\xc2\xa2\xe1+\xea\x9cA_wt\xb8\xe4>\x17[\xb9\xfaq\xbb\xb7\x7f\x8f!\xe8\xe0r\x83\x836\xe8H\xa7\xc5\x99!\x99nE0/\xe7\'\xf4\x1c\x1f\xae2Uk\xd1~W\xcf\x10\x824\x02\xd4\xa4\x9dC\xb6\x1b\xd8\x8co7\x97\x1ah\xb0\xb5o\xa5\xc8k\xb5\xa2\xbfl\x9b\xdc\xd7f\xc5NRnF\x1fw\xba\xbd\xadik\x89\xe0\xef^\xf9\x17.\xc9C\xc9lN\xec9DT\x86;y\xf9\xdb\x93U\x04\x1e:i\t\xc4)\xafL\xda\x15\x86\xf7\x9f\x16\x04\xf6>cD\x8b\x81&\rJ&\xdd\xd4\x13\\\x8e\xb1\xb1\xdcz\xf8\x841kmf\x82\xaa\x88\x8eR\xc0>\xa3@\xa0,\xed\x0f\xe0O\xa7\xe3\x00l\xe7m\xd7\x14r\xc1\xb0\x92\xc6(@\x94A\xe9\x11)G8\x03\xad\xb4\xfb\xd7\xd6:\x8a\x95@S\x11\xeb\x8e?O\xefq\xc9<\xfdb\xa3\xa7]\xeb\xa5X\x174tw\x9e\xc3\xd2\xc9\x16\xa6v\x15\x06\xbb\x1e\x91y\xff\xa2\xa7\xa7\xfb]\xce\xda\xb2R?\xe0\x1f(\x1a\xd77\xe1\x14*\x7f\xe2\xe2Z\x86\x91#\x89a\x9d\xb4\xad\xe2!,\xf7\xbf\xafa\xef\xe4\xa9\xa6\x0e\x87\xe7\x19x\xb6\xf3\x10L_72J\xaa\x19r\xfa\xa0\xa8\xb4\xa1\xbe\xdb\x03\xc9;\xa5m\x1d\x83r\xfd[\xde\xbf<\xa9\xc4\x8f\x87\xc6\x15p\x02\xe7\xfa\x02\xf4\x1d\xba\xb1y\xd1.\xb8\x81["\xda\x90(\xba>\xc4\xfcIi780\xc8\xad\xc7I\x87p\xf5\xed\xd3\xc8U\xd6\xdb\xd8\x87\xa3!\xfcw\xbe\x86\x12\xa5\xf7i\x1aY.MH\xe9\'\nG\x02N\x11;\xc6\xb3\x81\x9d\xa0\xef\x060\x03iC\xb8\x96y\xd5L<\x98\xbf\x0f\xdc$\xf2e~\x86h\xf2B\xe6\xe6oSk\xc0VS\xd0Z\x88\xb7\xc1\xd32\x93\x98}\xc2U)\x9eG\xb1yU\x9e\xed3\xa0\x15M\x1e\x7f\x81J\xea\xeb\n\xa3\xc4\x91\x8a\xa2SG\x12\xe8\xf4\xc5b\x167\x91\xff\x91\x9f1\xd9t\x8ch2\x0f\t_\xe1!v\xa3\x91\xa9F\xdf\xd5M\x15\x9d\x92i\xa5m\x12\xbd\x1a|b\xaa{\xd7\xc7!}\xdf\xa9\x1e\xbf\x17\xee}\xed\xa9v!\xd0_JS\x013\x90\xa4\x0c\xc2\xfb+\xdb\x1d@\xb4\x0f\xc4\xa0d\na\xd4\n\xc2\xb8)H3\xcf\x9f{\x04x/\xe9Wm\xf8K\xf7\xdf\xfd-!W7s,\x84\xe6\xaciJU9\xff+\x1a\x9c\xd8\'H\x1a\x02\x8e\x1f\xebf\x8e\xf0\\\x1b\xb1h\xb11\xb8Y@\x16\xc91\x80\x85\x19\xeb&&bUrn\x86\x15\x81L\xf9\xb5;\xa4\xba*\xd5\x0c\x1a._\x02C*\xef\x93\xf3\xdd\xff\x920\x1c\x91v\xe6\xdeO\xd3\x93\n\x8b\xa3U\xe7\t\xbc#~\xbe\xb9;\x12\xed\xd46\x16_\xeb\xaeT\xf6\xcd#\xf7\x13B\xacsu\xd0\x9cZf\x86td\xc87c>\xc8\xbd\xb5e\x1c\xdbi\xbe\xfbk\xd3\x17\xc8\x00\xe0\x9e\xa5\xd1\x02\xa9\xf8x\x99\xb1~\xa5\x97\x0boB\x1b\xdf\xec\x87\x96\x8e^\xc1\xf0\x89?\xbfp5\xa7\xb3\x0b\xdf^\x96\xd9\x83\xfd\xc0\x02\x90Z\xe9\xea\xd7\x01\xc7\xbe\x16\xffE\xf7\xdaV\xfa\x93\x0b\xd8\xe3\x83\xf4v\xccQT\xc6\x0c\xcd3F\xff3\x1b,\x03:\x94\xdb\xa0z\xd7gb\xaad\x19C\xf6\xc5\x9c\x11e\n\x12\xde\x8a\x05\xb8\xf77\xf7\xac\x864)m\x11\xd5m\x1c\x9fm\x04o}\xac\xf0M\xe1t\x9ez\xd5\xf3\xa7\xd2\xa6\xbbT\xd4\xac\xf4\xce>\x11Tu\x94\xd6\xb74\xa9u\xe3z\xe0\xebg\x05\xc5\xfa\xf6]Z\xd9\xa7Bt\x0b8a\xd1\nb\x90\x0e\x11c\xb0\xb0\xa5[\xa2\xfbb\x93\x14U\xba\xa1\x9e\xed\x04\x0e\xf2\xfb\x04\xc3]\xf7Wr\x85\x83\xb0r\xa9\x16\xee\xa3g.\xb87\xab\xd1\xfeRt\xce\x8b\xe1\x8d\x14\x97>\x10\xd9\x19\x8e\tj\xda\xc9\xf4\x8a\x1a"l\xfa\x89Q\xc1\xb2\xde\xe62\xb2\xfc\xe6\x91\xe9\xaa~q\x04C8\xb2\'O\x9c\xcc\x8a<<\xb6o\\%\xca>\xde@d\x82\x8az\xa4FW\xabp\xd9\x04P."\x0c\x99&\xd2\xf8\xb0]\xd1\x81\x14Xu\xb2\xb8HW1\x88MC7\x85\xcd\xcb\xf5\xd7\xdb\\\x823\xe0\x18c\xbbS\x9e\xca\xc6d;8w\xc9\x83"V\xeaM\xe1\x16UC\x9a\x8a|O&\xda\x15\xee\xeai\xf9\xa58\x95\r[C%\x80_\xa7\xb4V\x0b\x1ce\xba\xce\x9b{P\xccnz\x7f\x8f\xf1\xe6\xec\x8dK\x95\xf8c\x16\xda\xe0\xbd\x15y\xf2\x1b\x8b\\\xe7\x1dO\xba+\xf6%\xb0Q\xa8\x8a\x9c\x00&l.\x19\xaaj\x9c*\x1bX\xb50\xbe\x1a;\xad\xe7\x08^T\x14\xdcm=A\x15\xeb\xc5\x8c\xcc0*m\xd6\xacN\xfe\xb4\xcd\xad$\xe1\x8b\xc6xM\xe5\xd5\xe9\xcd\x05\x06\x91\xf0\x07\xb2Y\x82\x8d\xabh\xdb\x04\xe0\x9fA\xc9\x11+E\xab\xa0\x0e\xd4g\xc6\xac\x03xbvY\x1b\xb0|b\xbe?\xee&\x8b\xc2n\xe9!G\xc5\xdc\xd4\x87G\x97\xe4\x95a\xf5|\xf0\x15\x01d\xdd\x89lYw\xd6>\x18|\x00\xcf\x97\x1f5\xd2\x9f\xba\x8d\xe8\x16\x9d\x935\x16\xa4R\xb7@P9M\xaeh\xdc\x12\x8c\xba\x88\xf3WQ(\x1c=\x8c\xcfYyL\xfc\x88\x04d\xfd\xd1\n\xcbt\x16\xa7r\x85\x8dh\x91\xcc\x07\xc7Y\x12B\xb4\xae\xda\x95\xa2\xc3\x82\xae_v\xd6h&\x01\xfe\x9a\x7f\x1b\x8b\xd6O\x7f\x81\xf0\x084\x1d\xbc\xda\xc7\xe3\xde\xd3\x0f2\x99x\x07)\x079\xa4$\x86\x1e\xa5\xb7\x8d\x844k\xde\x90\x13\xeb\x8e\xef7\xba\xcaB1\x1d\xe7-f\x92 \x08\xbb\xcbG|\xe8u\x15\xffs\x08\xc6\x14\xee\xd1\x08<\xa84\xb6k\xe7fx,\x89\xa7me\xefE+\xa8I\xcb\xf6\x12\xbeL\xca\xfa\xe3\xc7\x85\xb1\x1d\x98H!\xb2\xa5X\xfe\xc10\x00\xb0\x8e$S\xa6\x12B{)\x0cd\xea\xb4\xa1\x8e\n}\x9b\xcc\xf2\x18y+\xbaA\xe3I\xa7\xb1\x1a\x0b\xcb]\x8b-]\x9c\x99\xc9\xa1\xb1e\\\x15r\xb9x\xcf\xc1\x82\xd6\xaa\x81g\x15\x7f\xef\xa3 \xcf\x15\xf7\xad\xb0\x8eY\xf98\xf9s\x13\x9av\x07\xf7g\x82\xe3;W\xf3\x16^\xc5\xa7F\xe2\x04\x95\x10/\xa6M\x88\xbc\xf9\xd9\x99\x82*\xb9\x18\xf9\x16#\x93ZV\xf8\x08\x1b\x05c\xe0\xf9q.\xa5\x86*\xda6l\x9a\x16\x9bfK\xab\xbe\x07\xb0Z\xe5\xde^\xb8\xcb\x1c\x8c\xdb*d\xf8}\x9d\x03L\xc8\xcdk*\xeb\x11S\xf2\x85\x17F`]\xae\xf1Q+x\xed\xbe\xec\xd0\xa0\xd0\x82\xe3\x91\xee\xd1 \xf3\x8b,\xcaA3x\xb1\x05\xe0\xfb\xa1#\x96\x92\x9ax\x88\rtb\xf92\x80\x070\x1b\xff\x11\xaf\x0b\x9f\x12\x10\xca\xfc{\x95\xe1\xa5\x10U\xe0\x91\x009\x918\xbd\xa9\x9b\xbem\t\xea\x8e\x0b\xb1Q\x1d\xdc]\x01R\xbe)\x84\xa6\xd3\xf2c\x8b\x82n\xd8\x93<\xfe0\xac\xc5()P2\x15\xcd\xd9\xd8\xd3D\x01\xd0\xe2JA\x19c)&\t\x02*\x87O`q\xdd\x1f\xef;\xca\xc3*\xb5\xf9G\xaaZ3\xad\xf3\x93N\xca\xf3\xd4\xc4\xef\xdb\xb1&h\x7fV\xb5\xb5\x82\x83\xb9\xcdRdR\x88\x1et\xef\x11\xee\xb1X\x05K\xecb\xf2\xf8\x00\xd0\xdb\xdd\x97\x19\x9fA5QZ\xfcL\xdf\xaaq\x18\x8832\xe4\x03\x9d\xa1\x91\xd4\x84P\x05\xaf\xdb\x81\xc7\x07\x87\xdc\xe9\x04\xceU\x11}\xbd\xbd\xf759nm\x1a\xf2\xf2^G\x0b)0\xcd!\xeeJ+\x9c\xdc\x1e\xce\xdd\xcc\x97C\x17\x99K\x92\xb9Re\x07\xc1\xa1\xe2p\x0b\x068&f\x80\x95\xc3\x94\x00\x8a\xe9J\xff\xb6?<\xca\xf5\x0b=\xa6\x80\xa1\xb4\'Mb\xf4D\xb2\xa7\xe5\xdco\x84-p\xa9\xd9H\xe88\x08\x01\xfb\xef\xc9\xc5\xd5\x15n\x8e\x91C\xc4\xeb\xa2% \x87\xaaFY\x05KX]\x82\xaaQ\x1f\xee#\xc1\xeb\x8b\xcb\xaa\xf1\xbb\xe1G\xe7\x16H\x0b\xd3^\xa59\x8f\x1d\x99\xc1c]I\xde/N@q\xbf\xd1 \xbc\x07Yv%\xc2\x1c\x11\x95\xd7\x83\xe6r\xd7\x00\xca\x0f\x86\x12\xdf\xaa/\xb9\xb2\xb9\xeb`\xc8G\xde.\xa2Q\xadN~\xbe\x08 \x17\xf6\xf8\xf8\xfe(PREg4\xe7\x9f\x04\x1bj\xdd\x9dF09\xc7\xad\x7fE\xdb\xcc0#\xc6\xe7\xfcv\x86;iq-\x89\xff\x98\xe2\xa5\x048\xfb\x0f+[\x19F\xa0\xd3\xa4\x10\xaa\xe1\x11\xdf\x08\x9f\xa7\xbdIO\'\xcf\x07\x91}\xe5\xcc\xd7\xcb\x1c\xe0my\xdcuD8/8H\xe8N\xcf\x8e\xf19V(\x91F\xa5rx\xa35\xbd\xf5\xe7Y\xd4\x8dk\xe0\xbbo\xc5\xc8\x87\xb3B\x80k\xe1G\xb7\xce\x91\xd9\xdaOJ7\xa0\xf4\xc2\xfb\xfc\x05+^\x1c\xd4;\x91\xca\xf1\xad\xae\x1f\xbc)\xc3\x16\xd8\xbd\x915\x15\xfc\x81;\xa3\xd0\xba\xa5\xb2!\xed{\x93\x9eN\x8b\r\x08k_\x82\xdfb\xda>y\xcdq\x0f\x8d\x0b\x922g\x87\xeb?g\xd1[\x01\xa8`\x86\xbf\x9f\xc0\xc6*.~z\xac=\xc7-\xf2h\x04\xd4`\x96*\xf5X\xb5\x8ff\xcb\xff\x9a\xbd\xfa/\xc1b\xac\xcd8b\xc8b.\x8c\xa86\xc8`\x8c\xa4U?r|fmd\t\xb5\xfc\xca\x03O$\xd8\xafb\x95\x04a\\\xfff\xd2\xed\xdd,H\x12+\x08\xedj\x81d\xa6\xdd\x00H\x02oY\x82\xc85\xff\xe8\xc4\xaal\xd0\x18\x87\xb0\x82\xe2f\x9a\xac]\xe5\x9a\x08qk\x7f,m3\xc4Pi\x01LN\xef[HIA+`\xf9;.N\x1b\xae\x95\xca\x14\x92y\x9e\x14dO\xed\xd1\xf2W\xe9)\xca\xcfq1|R\x89\xa7\r\xa7Q&?%\x12\xe9M)\xecS\xden\xa8`,\xc4:\x8f\xe8j:\xfd\xdf\xddQ\xab\x17\xdd;Z\xa4\xd7\xday\xf0+\x9c\xee\x90)\\\xeb\xe5bU\x1a\xc6\x16\xaf\xd4\xa6\x18\x89\xcb\x94\xb3\xa5\x89\xa7\xd6\xac\xd6\'t\x95\xac\xbe\x82\x90v\xa7oU\x99\t\xf2\xf9b\xd8j\xc5\x96\xa1\xfdD\x9cC\xc8Q\xf0\x19\xa5\x8f.\xe524\xb8n\xf7\x17QG5\xcfMA\xb0\xc9\xceXULt\xa2pl0\x82OT\xea\x93\rGn>I\xabb\xbe\x1e0\xf7hvHtIx\x9d\xb9\xdd\x08\xb7\xd1\xd4r{\xa2P[[\xae\xaf\xd0X#\xa3\xa6\xeb\r$X\xced#\xa3\x9fnP\x12\xee\x9b\xf0\xbb\xf6\\7\xbb\xe9\x93\x9d\xea\xb3\xbf\x06\x04\xbb\xb7\xe8\xcda"\x81\x1b\x82-o\xc5\x01\x1eo\xeaO\xca\xc4\xb4\xe9;\x0e\xc9\xdaR\x8dhL\x17\xcde\x06\xa3\x0e/\x7f\x14]4\tB\xa3\xc3\x91\x16p\xc7\xdf#=\xebWM\x9bx\x98\xe9Q\xd8\x85\xfd\x00I$a\xde\x90\xdd\xa4\x13\xdc[\xda\xb68\x08\x97\xb9!\xa3\x84\xbb\x1eGdt\xab\xd5\x12\x0f\xd2\xd4\xebn\xc0\x98N\x15e\xcc"-\xbf\xca\x13\x08\r\x97\xc8$zr\x1b\xde\xab\x19\x1e;\xaffg\x92\xe1\xa0I\\TF\xd7T\xd9<\xa3\xc8&\xce\x04\xf9:g\xaa\xdf\xbbc\xa9\xa0\x12\xfc\x15\xf2\r2Q\xfe\x0f\xca\xa5\xea\xcbq\xafi\xe2\xb4\xbarH\xbf\xaeD#I\rh+\xf73!\xecE\xb9\x1dNg\xc8D\x81\xec\xd1Ka\xea\xa5&S\xb2z\xa5\'\xf2f$\xc2\x82\x97g|\xf2\x1b\xb7\xaf\xc2\x8d<\xff\xe4\xb2\x84JFf\x9b\xd9\x19}\xb6\xbb`d\xae\xb2d\xa1\x98\xc7\x10%\x1f\x9de\xaf\xa4\xa5\x8b\xc8\r\xd0`\xb0\x88!\xf9X\xcfa\xd0E\xadTm*d\xa4qP3\xfe\x98p^\x0cv\xa17\xf1\x8e\x19+\xfe\x11rc\xc7\x81\xa4\xbal\xa3\x9e\xf4F\x01\n(\xca\x11<z\x9b\x97\x18\x9b\xdc$G`\xce\xe1\xd9n\x81\xd4RvXG\xcd\x8f\xb3\xf9\xfe\xf01\xd8\xb1\x08\x1f\xd4\x95\x88\xff\xe9*\x10\x9a\xe7\xb7rT\xd6H\xb2\x0b\x85\xae\xe2\x97\x9c\xcb\x9c\xcd\xaf\xff\x97\x97\x8d\xe3\x80\xc17\x16[=\n\x96\x9d\xbfB?z\xe2o\xfeRb*A\x0b\x95o@3\x11\x1d\xc5Q\xbe\x1c?\x8e^y\x86\xc2\xd5\xb4\xc4^\xb5\x970\x98v\xfaYO\xafNR\xd6[T\xd8\x8d\xf0\xea\x11X\x9a\xafVL\xaf\x9a\x8ejN\xe8(\x9d\xfa\xab\x8a\xab\xf4.\xb22\xf9f\xb4%4\x82\xe0~b\xf9 3\x15\x9f\x13\xcb\x00\x17\xea\xa6I\xf0\xca\x88\xaf\x11\xf2\xf0OcV8\x16 \x95\xc3\xa3&\x02\xca\x94A\xfc2\x12O\xfb\x0b\'\xbb8\x87V\xc8\x10\xcf\xeb\x18\r&,\xba\x81k\xe1\xfd\xe9\xc6\x0f\xf05\xd7V\x99\x92\xc3\x00\xe7\xc41"\x0e\xbb\xad1\xb1\xca{\xc9\xcc\r<\x04\x8fW\x15\xab\x88\\%\xd0q\x82\x96$O[\xcfbx\x81}\xec\x8b\xfc\x8d\xa2\xbb\xcc-\xdbMKI~#\x90\xde\xb2y\x9f\xcc\xed\xb67"\x9a\x19\x0f}\x0c\xb0\xb8\xaf\x9f\x18\xb1\'\xb0upS\xda\xd3\x99G\xb3\x94"i\x80\x94\xa0\x03\xfc\xe7\xa1\xd1\x92\x9d\xf4\xd7tp\xcc\xf7(\x13\x12\xa5\xed\xa8#\n\\\x1a\xb4\x92\x93\x8b\xbf?\xac\xe4\x93\xbd_\x1d\xfew\x81oI\x16(\x03l\xc8\xfdC\xbd\xf0W\xc3\xef\xe9\xb4\x98\x92\x9b\x85_\xda(\xd4\xb0}*v8\x812S\xcb\x15X1eX\xc8\x95Am\xc6,\xe6}s\xad\xc8\xde\xd83\xfc\xb2o\xed\xdf\xcb\xc6d\x11"!\xde\x0c0\xdd\x1b\x9a\x0c=L\x83c%\xef\n5\xe4\x12Q\xee#\xc1\xa3\x9c\xab\xb7\x84M\xac<\x98x\x9e+B\xed`$\xcf\xc5\x9a\x8a\xcae\xf3\xb0\x81\xc3\xd0\xb6\x98%=\r\xe4-\xc7\r\xbfR\x0cW\xde\xe0\xa6\x83u:lr\x18c$\x9c\x14\xdf\x15\x19$\xa8Y\xe3i\x0c\xd3\x1f\xdd\x1f\xa1\x19\x84F\xb4\xb3\x9et\xf4\xcb\xcd\xd7$\x98j2\xa9\xfa$\xff\x98k-Ct!\x810\xd6\x8b\xf8!\xa8\x83\x9a\x80!F\xab\xd1\x87\xa2%s\xabZYj8\xf4\x95\x81:jx\x96J\x9a\xef\xa5\xe1\xb6\x96_;+\x80x\x12\xb5xAi\x14>\\P0\x05\xca\x98\x91.#\x8f\x08\xd7\x8a;\x92\xdf\xed`\xbba<\xd2\xee\x90\x8f\xba\xfat\xfe\xa8\r\x1aY\x1e\xed\xe8]\x9f\xdf\x03r\xfd:-\xb6\xc3q\xea>(T\xae\x9a\xf82\x9a#\xf7OD\xe4(\xf8OJ\x0f\x98\xce+N7\xcd\xa0\x8b\x85\xa7\xac\x84x\xf1\x80\x9c\x8d\xcbi\x1c\x91\xbb#\x11P\xfdyN\th\xec\x98v\xbb\xed\xfbQ\xb7>\x94\x02Z\xea\xfe\xd6\xfa\xa7a\x83u\x10\xbd\xe8\x13\xf8\xea\xbep\x81\xd4\x04\x87\x9a[\'>\xaaz\xcd-#9Q\x87I\xee0/\xbf\x00\xa2\xa6\xe1N- T3k:\x84S\x17\xdbJ\x18~\x18\x01\xd0\x1ab\xb0A\x92\x08u\x10\xf6]\xb6jcS\x87\xb7\x01\xa2No\xae\x10\xb4V\x8a?\x00\x96\xee\x03\xf8\xda\x0buY_\x7fP]\x9e\x0c\x1f\x85\xc7\x1d!\x03D\xb5=\'\x92~{\xaepW\xf00\xc6_&\xb5\xac\xfb\x08rd\xacD\xe2D\xc9\xa4\xd9\xb0\xc0@\xc1 \xeb\xf2\x04\x96"\x9bjIs\xd4\x9e\xd4Z \xefr\xb3\xfb\xdf\xcd\xadP\\\x1fK\xc6\xcdp\x8b\xeaif7"{\xd3A1\xa1\x81+1\x12\xb2\x11\x9d\x19\\\xe2\x8c,h+\xae\xee\x86\x0eI\xee\x86\x87\x93\xc5i\x9c\n\x90\x9f\x15=R\xbb2\xb5\xb6!\x94\xa3\xaeni\xdb\xf6\xec$\x1e`\x1c\xa9\x02\xa0\xdf\xd6\xc7<\xd4_L\xb7\xff\xbc\x93\xec\x17\x93\x1di\xac\x19\xd0\x0c\xaa&\xef\t\xef\x81\x12\xeaZ#*\xc1S\xfaR\xb1\xbe\xe6\xef\x13\xba\xee\tV\xf7&f\xc1\xc7\x11o\x8c\x186V\xdd\xeaqGR\x1a\xc1\xec,\xa3\x08\xf4.<A/!E\xd4_\xbe&\x18\x05\x15\xdb\xca!i\x04\xb6zSK\xb9\x88\xac\x13-r9\xad\xc0\xa3\x0et\n\xc4n}.\x9dT\x89C&\xcf-x@\xc1\xbf\xbaf\xf3\xd8\xa89q\x80\x1a\xd53q')
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-08T16:23:20.336171
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\x00\xc0\xbd!\\\xe4\xb6\xdb@\xdd@\xcb\xbe\x80\x01U"\x00\x00\x00\x00\x00\x00\x00\x00\x07\x15\xc9\x040\x97B\xa3IH\xe4\x16\x1e\xa5a{(\x8f\xe1vP\x88/Vl\x9f!#L\x92\xf2\x1d\x86\x0f\xbf\x80\x0b\xfb R\x85\xbb\x92\xb3\xc4\xd6\x9dww>\xcb\xd3\x17\x9a\xfd\xbfJ\xab\xe9\x03\x9d\'^\xca\x9d\xdc6\x03\xc9(d^U^w\xbc\x82\x994t\xe8\xe4\xc6~\xe8\xbb\x0cn\n3,\xc9_\xe0\xf0e\x1c\xa3\x8fw\xbdc[-\x19\x0c^\\pm\xa3\x1b\xa5\x80\x98V\x1b\xd1\xf7\xc1%\xc6\x98<3\xf9qJx\xa5\xb24\xe5\x7fc=2~\xed\xf5!,\xc5Tl\x99aq\x19\x04\xc5\xfciW\xdd\xc4\x85Q\x8b\xbb\x88\xac\xc4X-\x02\xc06\']\xca\xf7\xa7\xab\x1c\x15\x82\x8f\\\xbb6\xf1\xcen\xdb\x83p\x05\xda\xec{\xcc0\xf5S\xc1\x89\x9b\xe0\r\x07i\x03M\xdc\xc4\xa7\xb7\x04<C]\xd4\xcb\xdb\xe5\x87\xda>\xc0~\xaf\x0c\xd7\x9f\xa9\\Y\xf0\xa5\x06q\xcan\x9f\xae\xb2t&l\x88\xe2\xa5\x1d\x06D\xa1\x8a!1\xc5f\xc5ew\xff1\xb3\xcc\x9exK\xe4\t\xbdU+\xb3P\x1br\xb3\xb1\xe68RY\xda_b\xf9\xb8\xdb\xfb\xb6\xd1\x7f\xa0Q\x12g\xc0T\xd9\xc2\xc0/\x8a\xfc\xd26\xeb\xceE\xa0\xf4\xecP\x1aDFYvi;p\x08\x8b\xedq\xde\xe8Md\x15\xf1\r\xcd\x90\x94\x8dh\xc4\n\x9c\xe9\xb4\xbb.\x87X\x8c\xdfo\xa77\x9c\x9e\xe9\x0f\x9b\xbc\x07d\xe6\x92\xcc\xb6\xb0\x98}\x85\xc9\xd6X\xb3\xc1\xef_\xf8\x18\xa6\xbb\xa6\xb9}\xe5\x10\xe9oO=t5.\xf3\xdd\xedt\xe62"\x181\xdd\x97\xbe\x92\xeb?\xaf*\x19\xee\xb2I\xb5\xd6F\xc3\xd4\xee\xc3\xaa\t\x1d<\xdb\xd9j\xd9\x1d\xc9\xe1\x18*\xaco\x96\xa9P\xd1\xf4 )\xe1\xc8~L\xc2;\xfdh\\#\x85\xa06\x1e\xfb\xc5\x8f\x03\x11\xc7<[\xac<\x83-\x83\xdfj\xc0\xf8s\xb0\xa2\xce\x07\xfa(i\x8c+\xc61t\xb9\xc5\x86\xb3\x9eb\xfc\xfaJ\x1cf\xa9y\x90\xfd\x1f\xe4ggo\x84\xd2\xd6\xae\xb8\xc1L\xef\x9a\xc9\xa0\xb9~ol\xf6x,y\x04\x8e\xd6\xe0\xf6zlK\x18\xf3\xd0\xe2\x871"yHt\xbb\x8c,\xeb\x05 Z\xefN\xc0\x1ch\xf9\xebO\xbb\xd8\xe7\x03\xeeS+\xa0\xde\x19\xfc\x8d?\xefXR\x1b\xf7\xc1\xa4\x88\x13\xa6\x90\x1c\x0c\x80Fh\xce$\r\xfc\xd7\x04\x95!|\xe3mRO\xcf\xcdP19y\xc7\xbb\xa6\t\xee\xee\x84-=\x13B\xb0A5\xa7\x9c\x89\x819\x8euI\x18r!\xe3\xd8\x7fif]\x9f\x95\x93\rg\xbabY&\xfe\xbc\xa8\xee\r\xad\xc3\x1d:\xec\xcaA\xd1\xec\xb7\x0c\xfe\x9e\xbf+\x19\xaf(Zx\x0c\x96&Tt\x9b9\x9cM\xc2e\xae\xbe\xee\x00\xc6\xc4\xcf\xc7\xbf!\xeb\xe5\xc30\xe3q\x99\xfc^\x91\xb3j=o\xb2\xe2\xf6VL&/X?\x89I+&\x19\xad\x19\xb8\xda\xb3\x14\xbep}\x072\xd7\xefs\xb9\xa9\xc04\xa6\xbb\x94\xb0\x99\x9dSgt\x0ft{\xa4v\xd7\xbaa/\x1d\xb9\xbe;7\xd0\xa8\xcdx\xbe\xa8\xd7o\xa8e\t\x01\xe2\x06F\xa5\\\x10dm$A\x9d7\x86\xf4\xb9\xe5>\xa4\xda\xe74\xb9\x84]*\xc2u\xa2\xf3\x89\x86\x0e\xe2\xe2\x99\x97N\xa0N_\xf7\xb4\'E<\xaf\xe0!\xe3F\x85>\xef\xca\x08\x1a\x0e\xe6A\x8c\xe4T-\xe3\xd4\xccj._\xf3Rc\x1d\x0f*)\x1cfs\x0f\xd1\xca\xc6\x16\xe2\xbf\xf0\xc4\xb5&\x80*]\xf0\xc0R3\xf1\xf1\xd6a?6\x1e4\t\x00_ \xfa\xe6\xb4\x84\x8dP{\xf8\xd3\x87\x1fd\x90$\xf7\x9d\x02u:\xfb\xaft\xe1\xe2/\xd2V\n\xd5\x1e:\x07\x8c\x1a\x16\xd0P\xb5\x80\x12\xaa\xd8\x94\xb4,\\\xae\x84b\xf6\xe9\xecg\x1f\x05\x10+\xf2\nC\xf6e\xb3O\xdc\xbc0\x9b\x02s%\x17$\xc1+\x9e\'@\xfff\xb5\xfe6B\n5\xde\x1c0\xf1$\xcae&#!\x89\x17\xb6:\xcf\x84g\xea\x98\xe4\xcd4Q\x9e\xe5k\xc0\x10\x1a\xd7\x97[F\x88f\xdebS\x17I%\x1f0\xb9~V\xfdz]\xcf\x07Yc\xa1\xf8[0)\xfb~\xdf\xcf\n;8\xc2\xeb+\x1e\xec\xef6nQ\x1d\x1b\xc2:R\xd4=`\x9d\x9e7\xa6\xdf\x88\x1bX\x14\xba#v\x99\x86pL\xb9\xec\xe6\x84\x80K\xbb\xd8\x91\xce\x9bg\xf0\x95\x92\n\xd8\xaa\x9aO_Qh\x8a\xba\xc0\n\x14!\xd4k\x91\x18\xddVE\x19c\xec\x0e\xb7@\x8f,\xe3U56l|L\xe6T\x84\x05\xe18\xa5\n8\xf4\x96!\xfdl\xbd\xf5\xf5\xd7\x93\xb4\xcd\x8dQ|\x01\xe8HC\xde\x04[\x91Y\xe7\x1ci\x8b%\xcf4\xac\xd8;\x02I\xb2S\x05\xfa\x13\x96\xbe\x992\\\x13\x97<\xd6\xd2\x925\xcd3e\xbb0\xb7 \xc2\xcf\nq\nf7\x95\xfe\x8b\xa2\xfdA{\xcd9\xdf\xf6\xc5\x14\xe6\x8aF\xee\xa1}z\x07\r \x05A\x15\xf1c7\xc8\xca\xbd\x80s\xa2f\x02\x95\\\xaf\x8a\x81\xd0%\xd0d\xf2~\xd5\x89f\xa3\x8e\xd0\xbd\xcf \xa5N\xd6\xcfr\xb228\x84F/\x99\xab[(\xb6h\xce\x14\xb4\x94\xe0\xfa\x06\xebxj\x07G\x1e\xc6\x87f\xd4\x17\xdd\xdfSPN\xcbcpW\x87A\x94?\x1dO\x027z\xd92\xa1FB\xed\x9f\x9bYla\xe2]\xa3\x8fa\x95c\xef\x06\xf3D[\x99r\xae\x18\x1b\x85\x11s\x17\x14\xea\xc8v\xab\xa1\xd6\xe254\x00\x92V\x87\x17\xd5\x9cF\xb5\xd9\xb3\xee\xd8\xee5\xe46 \xd9\x05\x1d\x90\x13l\x07\xc0L\x9d\x89z\xda\x0b\xeckWa2u\x9a:\x15\xde\xa4\xf1\x9b\xc1\x99<\x0c\x8d\xc0\xb4\xd9\xea\xf5^b\x80& \xc72\x8b\x01\xcd\x8e\xb2\xd4jR\x96\xa3V\xcd\xff\xdf\xf1N`\x8c\xd5\xd9]\xdc@\xed\xabQ\xdf\x06L$3Q\xab8\xe4\x93\x87\x96( \x84X"\xe4"4*Y\x05\x93J\xab\xe4Z\xde\xef\xfe[",$h\x8e\x08\xdc\x81q4\xd0\xcd\xfe`F3\xad<\x1fX\xa5\xd7\x99\x13\xb3x\x10\xac\xe6\x13\xa4\xf7c\xe0\x07\xd1d\xb2c\x89R\xda^y:}`j\xc60\xfaWD\x8d\xe0\x05\xd84h\x01\x0c\xd2\xba5\x85\x92\xda\x18{E\xd6]\xaf\xc93\x1f\xd9\xc4\xc4u)\x98l\xa9x\x9b#\xd8\x9f\xd8\x89%VY\xdb\xf5\xa3\xbc\xa6\xfc\xfa\x7f\x8e\xe7\xb66Uo\xc8C<\xd5I\xb6}r\x8b\x01\xf8\xb8\xa6\xd3<\xb7\xf1\xf5U9Ps\xb0\x12\xab:z\xe3\xe4K\x97\xc0\x82zO\x11\xfd\xb3twx\xea\xfc\xcdac\xf7\xeb_\x95\x05\xcc\xa7\xbfzZ\xb3]\r\x13>t[Y\xf4\xc8\x935\xf9t\xa2\x12a\xb3\xb3"\xd5R\x83\xfcO\x93 0M\x8aRk7)\xc2\xfb\xe5\xfa\xa3\xc7\xfb\x05I@\xe8\xe8~\x1a\xfb\x8d\x91\x14}\x85\xf1\x96\xbd}\\RD\xb1Z]\xc9\xbaI%`\x97\x17"\xce\xcd\xea,V\x97\xc57\x90\x8a\x173\xb1\xfe\x15\xcc\x97)\xa768\x88\xe3\n/}\xa0\x10\xc1lJ\xf8\t{\xb9\xb1\xcex\x02\xe1!\xe5\xceY\xad0\xcc,h.\x8e\xee2\x0b\xf3\x10\x97zc\xa4/\xd8\xfc\x16|\x8fU;\t\x91\n\x8cs+>\xc3HEA\xaeTf,\xb9\x9c\x17O\xca\x05\xcb\x04W\xa7^++\x10\xd4\xbe\x0c\x9f\x07@\xd1Ya!\x97\x02N<\x1f4\x0f+RL\xc1\xe8!\x9c\x00\xc6\xc4\xd9Y\xa9\xba\x94\x11\x9c\xa5\x08\x03\x83\xe6fC:cX\xee\xe8\nV\xf6Y\r8|\x04\xf4t\xbf\x18Z\xf4\x95\xa0s\xc3\xe4\xfcw\x94\x8cq\xc2\xeb\xe8\xe2o\x05?R4\xc3q0\xd8\x8d_\x90\xa6\x9b\nv_3\xa6\x9d\xe9O\x9f[\x1a\x9b\xb6\xa171\xfa\xd0R\x10\xc5a\x18F\xa1o\xd7\xd1\'P%bVpf\xef\xbf\x9f\xb3\xe3\xc1\xc2F(\xe4T\xd6\xb0\x1dXa\x06\xb8rO\xe8\xe7\xf7\x84\xf0\xb5&\xd8R\xe6\x99\x11Q\xc0m#\xfd`\xe8e\xe4O\xa6\x94\xea\xec\xf0\xadc\t\x1a\x92\xbc\xb5\xcd\x8c\x18\x90P\x1c\x15!T\xd3D\xd4\x89>\x05l\xc9|ILxs\xe3`\xf4\xcaa\xa5\xa4\xfe\r\x01\x9f7G\xb7,\xc5C\xc4\x9a\xfe\x04\x16%\x88\x8f\xcfrf\r\x00\xae&,\x03``\xa9\x11"zaJ\xea\xabX!\xde<\xcf\t\x97\x93\xf2\x1f\xce\xf8\xaa\xa5^\x9e\x1b\xc1\x97>\xa8\x10\xabI\xe2\x95\xfdf\x0761a\xeb\xa8\xe3\xc3T\x8e\xe8\x18Qf\xe5<w\x04\xccE@|\x84nE\xd6\x840=\xa2\xb3\xb4\xc3\x16\x06\x96p\x8f\x92\x03\xb8\xef\xdc%\x0f]eR\xb9_\xbbY\xc4{C\x07\xec\x04Q\xbca\x01\x93\xd9\xf8\xf4\xa4\xea\xe2\xa9M\xb8\xc0b\xeb+[\xac\'\x11\x0f\xad\'\xfb;*\x80u\x1d\xdc\x85\xf3\xc4)I\xb4\xd5\xae3\xff*\xf1)\xa2\x8c\xd5\xe4D\xc6r\x9901Ge\xb3\x8agcH\xbe\xa6\x0c\x80\x14\n\xc9jZ\xf3\x1a\xaf\xc5\x01G\xbc)\x80\xa1\x9a~\x91\xfa\xa0\xd1\x85 \x9e\xf6(\x8b\xd6\x81\x85|\x97W\xdf\xfau\xf3\xca,\x9a\xb8\xfc\xe6\r\x84P\x1d\xc1W\x08B~c\xdf\xa5\xb8\xe0\x9c\xe8$v\x84\x8eC\x97a\xf1H\xf2\x98\xe0G\xf7s\x7fD\x06\xa0\xadJ\x96\x16),+\xe7\xf8\xa9\x10\x18\x0e%\xd39\xce\x85>\xcb\xcf\xd5\x86\x0e\x01\x89\x8a\xb4\x83\x08\xa7\x139\xbdE\xd5\xfe\\\xe8d\xc32\xc4v\x03\xa7\xc7=\x94\x8a\xa9R\xf9W\x88<@\x8f\xb7]\xbd\xf8U\x9b\xc2\x96xU\xec\xf9\xe4Au\xf9\x00\xc7h\xda\x1dBI\xbcz\x97\x17!i?\xe0\x03\xab\xe8#\x95Y\xa1B\xd7@\xfcr|t\xc7\x1c\t\x9f\xeb\xf5\xe9K\x0e\xa8\x82\x94\x91\x8bC\xe6\xd3Hx\x9a\x08\xca\xd8\xa9\x9f\x17\xbc\t\xef\xa5\x835]K*\xe4@@\x02\xe9{\x82\x9cH\xe5G\xdd\xb4\x1c(\x1bBC\x18\x90sc\xd5\xe0\xf1p\x84\xe9\xe8\x1a\x0c\xfe\x9e\xd8\xa9\x81\x11\xbaJ\xcd\xea\xe4/QC-v\xd5A\xe6\r9\xbd\xdc<\x084\x9a\xa3"\x98\xe3\x10\x11\x1b\xa9\xdd\xf9\x86x\x03\x91\n\x9bpz\xb5\x0c\x95\xdf@\xb9\xed\xf3\x0f\xbe\x11\xddt\x96\xeb\x7f\x9e\xa5\x8aV\xa1H\xf6T\xde\x07\xbet\xc2\xa66\xe4\x0cI\n\x8a}f\x87n:\xd2/9\tr{=$\xce\x87x@\xd4`9\xdb\x12T\xdb\x86\xa8<\xceR\xeea\xd7\xa8U\x1d\xd6\xee\xc4\xdft6\xa7U\xad\xcb`\xe7\xc6?ey\xc0\xba\x0b\xac\xc0\xcbw=Y\xb2\r\x04\x81\xea\xd0\xef\t\x8dg\x9c\xe3\\\x12\x9cQ\xffl\xb3V\x87S(\x1bc+\xb4M^\x034\xf1\xb8zP\xfeA\xd1J]\xa9\xec\xc7\xf7\x93\xb8\x87\rH\xd8\x15\xdb[\x8cT`\xc5?\xe4\'S\x84M\x1e\xaa\xd2\xfe\xe9\xa7\xf4\xcf\xd4NVxy!\x0cw&<\xe5+\xa1\xb7\xdc\xdd9\x9eaH\x9f\\=4G\xbf\x0f\x99\xeb%|\xe3K\' b\xf3\xafO\xe9\xca\xfeZ\xe4j\x8fB\xf25\x1f\xa7\xe1\xc6\xe9\xe6u\xd4b\xfa\xb0\xe6u.0\xe6$\x1eU\t\t\xb3Ds\x88\x00k\xc2@\xd5\xd3G\xb0\r\xe9Y!\xc6\x95\xd1\x07\xfd\\\x8e\x18\xb0\xc6-\'\xd4\xa3\xdav\x92\t&5N\xc7\xbf-+)W')
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-08T16:23:20.330821
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\x8b\x065\xb9\xa6\x836t\xa0\xc4\xa1A\xb4;\xaa\x8e\x00\x00\x00\x00\x00\x00\x00\x00\xaf\xf87N\x88K/_\x9b\xccX\x10\xee\xd8\xe3\n\x19\xf1\xa0\xa7\xf7\x1d\xbf7\xe8I0[\xf3\xd03-\x98\xb6\xd0\x17\xd6\xadXd\xb9.\x0f\x9c\x94\xc6\xa4\xb3r\xde\xa5\x1e\x9e\x15\xb5+p\x0fj\x99\r\xae\x9c\xd0\rfC\xae. nC\x83\r\xa3L;\xc5H\x8c\x89\x84\x1c_g\x82\xde\xdeeP3\x9a\xdc*\xca7\xc9l\x8f\xa3\x13^\xb5r+f\xc8\x98\x1dVD\xabO=\x89\x9b\xae\xe2O\x1eL+h72\xa9\x95\x9e\xd6E0\xf8s\x92m\x19\xec\xf2\xa5\x12\x0b\xb1\xf1\x1eql\xbbn\x02\xe3A\xc4-\x85"7X\x0f\xa1\xa6~\xcf\xf1\xfb\xa3POI\x9e\xc8\'\xd6h\xb8\xa9\xc1h\x8a\xca\xfe\x04\xbd\x14\xc3p-b\x88\x06gG^\x06A\x1c5\x92\\\x1fB\xa6{I\xac\\Z\x97\xcc\xba\xce\x99\xbc\xa6\x19\xe3\xc5\t|\xed\xc8\x99\xccx pm\xc5(O\xdf\xb3\xa3\xcdP\xbb\xf8\xccU\x8a\xc7\xc9\xddbL-9\nL\x12\xf0\x83w\xc6\xce\x8b\xea\xd3\x11y\x88\xb8\xa32\x95\xb9\x7fQ\x13MZ\xe1\xd0\x0e\x0c\xe6W\x10\xe8\xbc@Hh\xceV#\x8c:8\xebVv\xf9\xb7rBn\xdbZo\xe6M\xe1\x1b@\x11\xac98\xa5\xefA\xef\xe5\x0ff\xbeY\xccJ\x9a\t=\xd8\xad\x85W\x0b\x18\xbbp\xc6Q\x02\xaey\xc3#\x85\x0f\x82\x90M\xddC\x8b\x87P+(\xfc@\xc0\x9e,]\xa0\xab\x98\xd9\xeb\xdbK\xa8[\xcf\xfa\xbb9\x8b\x9f\xde|"\x1a\xb3M\xc3\xac\xdbo\xdd\xb0\xc0G\xf9\xc5\x9d\xf3\x88\xd71\xb3-6\xe6\xebAnM_\x1b\xb9T\xb5\xe0\x1d\xe2\xf7\xdf\x87\xae+9\xc2\x87\xcd\xcb\xfb7!\x92#\x80\xafB\x05X\xe1\xe4O=\xf4\xd3\x88j;\x8b_\xf8\xda\xb0\x19\xa1\x9a\x83\xb0\xb1b\x9bY:/\xb3n\xf7\x11\xca9\x07+\xce5\xaf\xf2\xac`\xdf\xfc\x1e\xe8\xab\x18"..\r\x11Y\xbd\x1b_|1\xfc\xaf\xa2mS\\\t\xbe\x9d?\x80\x1f\xe7\x95\xfa\x93t1\xb7\xcdZ\x83\xfcZo\xc1\x1d\xdf(\xb7+\xba\x8d\xdc<\xec\xf6Z\xa7\x0fB\xbb\xc3k\x95D\xd7\xb3\x9d/\x80<\x96\xf5\xfc3r\xb7\x81\x12\xeb\x80\x94\x88KB\xd4n+\x03\x04\x83\xa4Nj\xda\xf9a\xa0^\xedE\xa4\x9d\x98\x9c\x8d\x88\xa8\xf0\xba\xb7\x1d\xc2\xa2u\x11\x9a*\x96Z\xaeI\xb5}\xdb\x8f\x8b\x9b\r\xd9\x90\xb0\xf6p0\x9b\x08i[\x89b\xd0-\xfbk{M\x11\x85#\xc0\x98\xb2xD\x15D\xd1b\xdc\xcb\xc4.\x9a<\xa9Ht\xaa\x11\x11\x8c_e\xe3\xa7.#\xb0\xe7\xe5\x08%\xe1\xe4\xe6G\x1f\x93\xbaU\x12\x8a\xc2\xa5?\x9c\xf7e\t\xcd\x88K\xa4\x1c\x1a`\xd3\x15\xe4\xf7:\xf8\xda^\xc8N\r\xe62$\xa8\xf6\x12\x15\x9f\xd0\x0bbi\x9e\xd1\xdd\xa2*\xf9L\xccv\xf7\x07\x17\xd8\x94P\xf9(\xc2[\xa1\xf5\xc5\x9f\xb7f\xcb\x9a\xd1\xd5\xf7\xf8\xd8\xcb\x88\x07bw\x87d\x04WO\x0b\xd9\x7f\x13\xa1\xce\x92"\xa32A\x88\xb2\x9e8S\xa1Y\xfa\xc4Sm\xf8\xf1\x0fFy\xdb\xba\x96\xdf/\xb2 \xe9P\xb3\x17r\xb4\xd7\x04\x11\xb5P2\x93\x00\xdb[/f\xe2\xa4\xd0\xc5\x96\xa3S%`L=\x9c\x96\rT?\xf6\x840\xa4\xd1jzm\xb3-\xfc3\xa3\x8bM\x85qg\x8e\xee\xc9\xe7r\x82\xc2\xde\x00\x0c\x02\xb8.\xe5BD\xf9\x00\xfc\x93\xa9\xeb\xd7\xff1\xf6\xaau\x8b9\xb5\xac_W\x1a\x92\xe8\xae\xd7\x7fmD\x1b\xfd\x81LB(\x9d\xd0\x025\x08\xfa\x94\x87\x03\x05X\x8e)<1\xd3;\x7fcfRL2\xbc\xba\'\xca?N\\\x84\xf3\x9ae\xbf\xa0\x8e\xa9\x08)-\xea\xb7u$0\xa8\xcc\x12z\xb7\xec!F\xed\x19\x1f\xb0\x847\x19\xbe/G`TERy\x0b\x7f\x96\xc4ldD1\x9a\x9b\xcf\xce\x14\xb7\xf5\xf5\xd5\xda\x11\xc1\xeb\x80>\x86\xdc\xf22J `s\xbb\xfa\x0c\x86z\x148\xdb}\xfcT\xa3\xd5\xce\xe69:\xbfu\xc9\x1d\x8dG\xf7v\xbc\xc2\xf3e@+\x94\xe1\x8e.\xa0\x85\x8c\xaa9\x99\xc6\t\xa9$~\xaf\xa0\xd3\x17\x15\xc5P[\x1a}\xc5\x04w"\xe3\xb7\xdb3\x0cN:\x9c\xedg<\xe2+\xab\xe1s\xaf\xf3\xa1\xb8\xf7E\xe5\xb1\xa8L\x8f@\xa8\x92\xc9\x8f\x08j\x96\xee!\x7f>\x05D\x92\xee\xb0\x8d^b\xb0\xf0\x96$\xa3\x9eN\xbdm\xe3\xad\xbe\xfb"N\x9e\xdah\x08N@\x01\xa8\x06\xf4\x19\x1a+Ntsu8\xea\x90\xe8\x89\xae\x05x+!xv\x15S\xf5\xf4\xd4\xabc\xa4F\xe6\xca\xc6p"#\xdf4+B\xfbc2\xbf\x8e\x9f4+\x96\xc3w\xd8x\xbdS\xb7$\x1d\x94\xde\x07r\xaf\x8c6\x97\x11\xf0\xe1t1\xae\xe7\xa4O\xa9\x80Y9:n\x1e|\x14\x03\xe5]}f\xe0\xb1\xe5GP89\xac\x9c\xe0\xed?\x85{|U\x10t\x07\x8e\xa0\xc8\'\xdc\x83!\x04\xf4\xbf\x8cg\xc0\xf3DvG\xf4E\xdbv\x10\x1ah\xf1fJ\xbd\xfb\xd9\x99\x95\xfe|\xff\xf6\x86\xa1{\x03n\xf9\xe5\xe8,d\xa6\xbdd\x9c\xafh\xf2n\x13\x02\x89\xb4LBft\xfa{\xd0\xff\xe2\x15\xdd\xb3\x1a.Z\xf6\x06\xff=d-\xfc\x97\x90\xbc\xf9O\xee\x03\x9a\xe3\xa7\xf9P\xeeXj=`i]\x18\xd38\xa1\x80\xb9o;\xd3\xa2\xaaJ\xe7\xe3\x82GL\xaaHM\xab\xfa&\xbb\x16Y\xb823f\x8cn~\xb8z\x90\xa6\xce\xebe\xb4\xef\xe9\x83t\x8d\xd3\xfc\x19\x99x\xc1\x07\x99+/\xde\x06R\xb8|\xa7\x11[t\x91j\xbbai#\xa7\x08\xc6\x15\x07\xfd\xc9m\xc6\xf6\xf7a\xa7a\xdd\xa7\xf3\x16P\x86\xe0h\x8aK\xb5A;v\xac\x98e\xb3\x1a\x959\x8c\x9a\x18RP\xe1f\x7f-2\xa4N5\x07\xd2\xc1=5\xb47,\xb4\xb4L\xc8\x9e\x9c\xb0\x17\x9a\x8cs\xd80\xd3n,[aKO\xa0\xc3jk\\\xf5F\xa2\xaa\x98rf/t\xa7\xdf\xa4\xffoy\x19\xef\xfd\x85\xcd\xf6\xec\x15g\x84\xee^\xb5\x1b\xa1>13\x9c\xcbk\xc24\xeb\xe3\x06\xa7\xe3\xc8HBve\xba\xd9\xe7\xbd8Aoj\x8e\x1eM/F\xa5.\x982\x9fD\xb6:0\xa0\xe4\xadd\xa9\xe6\xf8\xb9,\x84\xda\x06Z\x16\x966t\\\xff\xe4*N\x9b\x88\x9a\x07I\x13\xa7\x1d\x89\x8dH\xb8s\xa3mp3\xfd\xa5\xab\x90\x8f\xf3\x01?Ro\xd1\xcc\xfcZP4\xa9\xcb\x815&\xecz\xd9\xb7\x03\x8e\xe3\xed\xf45Q\xf9l\x04\xab7\xd2\xc0)\x12\x87w\xd1\xff\x88]]<\\\xaf9\'O\x9a\x04\xd5\x13(q\x94\x93\x99\x1b+\r\x87\x971\x89^~(\x9b\xeb\x13B\xb4T\x9bx\xf6\x88\xcb\xf9-\xbe<\xe3\x17\x90\xb3\xa9\xa5x\x9bK \xeb\xc7\xa5Z|\xc6\xfbA\xcb\xb9Q\xf9\x01f\xbf1/{A}\x10\x992\xccp\xea\xd3\xb43\xd9\x03\xb1e\x0cT\xb1D\x8ds\x87!\n\xab\x167t\x16X\x7f3(\xb8\x98.\xeeX\xfe\xc0\xe2\xdd\xdfO\x8a\xc5PL\x0e\x97BU:\xce\x03i\xae?:\'\xaa\xb9\xf0$\x7f\xf1\xf0\xf3\rF^\n\x81I\'U\xb1\xc8\xbae\x81\xf2\xa1$\xea@pJ\xe7\xe9F\x8b\x896h\xef\x17#J~\x08L\x86\x15\xc7\xa1\x9df\x9f\x83(7m!\xf4\xf5\x92\xcc\x9c\xe4\xb7\x94\x83^\xc1q\x12\xe3^\xa3\xb4P*\x85\x8b\xf2\xee\xbe\xfb7\xc4\x00\xeei\xac\x12\xf8o\x06$V\xb2t\xe1Y\xb8\n\x8f\xb6/\xf3\xfb_\xacU\xb0\x1a\xfb;\x05*a\x18\x9a8f\x94\xdb\xf1\x8d\x8f>\x8cc\xf8\xef\\C\xb3p=j\xf3\xa5\xc7{$|h\x9f\xc4\'\x18S\x18\x90\x80\xda\xe6\x04}\x93\x81\x1e\xee\xe0\x99\x7f\xb1#\xd7\xaf\x8f\xc1\x1a\r\x83\xce#v\xbe\xa8\x81\xaa\xcf=\xe1V\xc8\x17\x06\x98\xc8I\x83\xbdF\x1d\xafNQ{\xae\xcc\xa5_\xc7\xf1\xa2Lt\xe7\xa21\x19A\xae\x01,qQ\x88\xc7\x9a\x84a8\x9cs\xcb\xd8]IP\x87s)\xab\xa8\xc4\x8f\xcb$\xabY2\x18q\xd5?$\x9a\xael\xb1\x98\x06\x93Bap\xb5i\r\xfcN!\x8f\x81\xe7\x1bi\xba\x92P%\xb8XB\x1c\xd0\xd6\x91\rc(\xac\x99.\xbd\x98\xc5\xee\x90\x12\xd95\x1a\xe9#\xba\xc2\x8aQ}\x00?\x98:\x1d@\xb6S\xc0\xde\x93\xf5')
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-08T16:23:20.384679
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\xb7^\x9b\xde\xca\xbc\x93\x85h\xde\x8c\xf9\xa1:\xa4\x82\x00\x00\x00\x00\x00\x00\x00\x00KxD\xbb\xdbMmbc\xc0+C\x82\xce*}\xf4\xd9\xfbEx\xa0\x88\xa5\xca\xdb\xf8\xa3xn\xac\xf4-v\xee\x19i\xa9n\x93\x05\xd0\xf5\xbd\x8fXm\xae\x19\xae\xd6\xdb\x84\xb2\xca\xb6p\x17\x10l\x80\xbf*\xd3;\x14\r\x03\x82\x84\xa6`\xef\xc7;B\x08\x886\xa6P\xb9\x00i\xa1\x0c;\xd5\x19\xb8\xd5\x84P\x89\xf4\xd3"q\x17\x1e\x06=3P\x1e&+t\xb5\xf0\xdaXW\x02R\xdc\x07Y\xcf\x94L\xb1\xf0\xb5E\xf8\x81\x1c{\xb2\x14\x1chFo%\x0e\xfe\xce\xd2\x84a\xe9T\xeb\xdf\xc0X\xf1\x9aM~-\xef\x1c\\~\xd9]F\x03;<\xffg\xa6\xa3Z}\xd6a\xc2c\xd8c\xbaj\x82\xce5E\xd5\xc6A\x12\xb6\xbd\x92\x1a\xffI\xe7]\xb3\x0b\xb4\xc4\xd7\x82\xab\\\x13\xf0\xfcN3\x1d\x17{\x86\xc9W\x143\'t*\x96\xb7v\xb0\x9f\x91e5j\x9a$\xaema3\xc4\xf5&\xb0\x92\xd3\x83<z\xb5\xe9\xa8\xeb\xb0\xa9\xe6$\x91\xa8*\x18Q\xf83qS\xd0h\xe6\xcf+9-\n\xcb\xd6\xfdmG"<CkkHx\x1d\x06&\x9301\x91\x94\xe2\x9b-\xdc5\x10\xa6\xf2\xdf \xdf+\xf5\x8aK\xde\xb9sS\xf33W)\xb6\x84\xc6\x15\xfd\xf6\xab\xc2\xfaM\xf84\x85\xd0\xb1\xe0Z\x97\x0e\xf4\xd7\xc1\x8f\x01\x8d4\x8e\xa9\xb5\xdf\xd3 V\x05mH\xb4~\\-\xb9\xad\x1a%\x83\xfd\xed\x05\xb0w\xd1\xf1;\x89\x06\x92\xaf\xc5\x00\x7f\x80\x98\xf9\xb6\xe3\xfd\x00\xb3j\xdf\xb2\n\xf9\xa7\xd0\xdf5\x04I\xc6\x19\xfe\xf1\xbf\xf4\xcb\x95q\x00s\xfc\x90\xac\x06\xc0\x95p\xdb"\xa8\x8d\xc2\x85ZgY\x16*\xb6Dd\xf5\x12\x97B\xbf7.\xe5\x14L\r\xa1a\xe4\x8a\xb4\xff\xf1\x02z=\xeb@\x94\xce\xa0S\x0fK;\xf4\x90\x97\\\x89#\xb8\x17\x93\x87\xdf\xe1\x83\xeb\x12\xa3v\xb0Mqe\xdf W/\x1fL\xa3\xd6T*\xc5\t\xd9\xdd\xdc\x07d\x94\x8aT3\xc8\x826Z\x18\x8a.]\xdd\x19\xd6\xa1\x8d\xfa\\ \xa5;m\xec\xe3I\xd76\x8e?T\xff0\xd7\xbev\x1c\xb2s\xc8\xff\x11\xedc\t\xab\xe0\xc9\xec\xa0\xa7O\x81zO@\xccjf*\xaeMV,\x86\x83\xb1\xb0^k\xf7\xad\xe2%K\xfe\xe5\x94\x0e\xc3@\x03j\xc1@q\xaf\x8fL\xa6\xd1\x94h,\xd5\xb7v\x1a\x14+\x01\xacrq\xf5c[\x86\t>\xd0\xe9A5\xd1\x95x\x98S\x86\xd0\xc7\x98\x8d\x96\xf6\xd1\xdc-:\xe3\xfb\xb3\xc9\xf4\xb23\xb8\ns4\xf2Zu\xc7\x8b\x7f\x94\x15\x1d4\x8d\x112RI\x12\x1dV\x04\x84\x12\x9e\x1e\x15\xf8\xda1\xf2\xea\x82\xce7#\x1b0\xb2z\xbd-\xd1\x89\xe5\xbfZ\x85\xe0\x1c\xd0k\xe3V\x94_\x87\x1d\x8d\x9d\xe7\xc1c\x91\xe1u\r\xcb=\xd6|u\x10\xf3\x0fQ\xb1\xcbYJ\x15\x8cs\xe8n\x99\xe4\xbb\xa6EP\x85\xbc&\xd3/\xd6\n\x136\xfbH\xe6\xf7\x95\x91\xf4\x88\x1f\xea\xec\xa2\x86\x8bG\xbf\x99s\xcd1~\x89\xfa\x06\x87&6\x16\xa1\x9e\xb4\xae\x97\xbc\xe3}ef\xe7\x99\xffq\xdf[\x07w\xf0D\x02\xd2\xb2\x93\t\xf5\xcf\x95\xfb\xc7^A_\x17.\x83Q\x14s\xd1\xb3\x91z\x12b\x00\x85^\xe7w,N\x19\x80q\x83\xa0\x9a\xb2\x9e\xce\xf7\xa6\x07\xda\xf8\x8e\xd6\xb9\xd3:\x0f\x14\x93F]H\x02\x01^\xe1\xee\xe6\xc3.\xe8\xa0\xaa1\xe2\xe2\x0cdj\xe2\xca\xa0\x90\xee\xe0\xc2\x8a\xe2\xec\x93\xe6\xd2q\x88\xad\x04\xb7\tu\xa5\xd6+\xf2ywQk\xf1"*\xf3!\x8a5\xb7\xca\xdd\xaa\x82u\xed*\x80]\x9a\x90\xb7\xf1[\x11\xbb\x89\x0b\xd7j\xc4\xb9>Ab\xfd0h\xf0\x01V\x137\xaa\x93\x0c\xd3\xe6\xc3\xd7U\xbf\x89\xad\xd7`\r\xa1Q\x90\x16\x01\x01\xa1_\x18!\x9e\xe0\xae\xe8\tyWU\x08M2\\p7y\x9f\xb8B\x81\x08\x1f/-i\xe1]\xfa\x99\xd4\xed\xdb\xf7\xd2\x98n\xb3\xcc\x1f\xb3\xad\xe3\xe9\x08\xe3\xe6\xca\xc0\xc8\xe4\xb0\xe4\xf5<\xe9v\xc5\n\xa8\x16SY\xbcH\xe2SZ`\xd3$\x03|\xd5\x0e\\H\\\xe3\x1f\xa1\x0f\x12\xdd`\xb1\x10\xcb\t\xe2:\x04\xccf')
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-08T16:23:20.392899
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\x8b\x90\xdac\xb8\xb4d\xb0\xbb=)\xb5\x98\x91j\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00|07\xc0e\xe5\x16;\xc5\x0f\x86\xad\r"\xf2!\x88D\xc8\xc8*EH\xd2\x99k1q4~#\xe8{\x88\xecl\x90Co\xd4\x12mR\xd4\xe82\x00$C#q5\x1aI\x99\xfa5 \xd2\xf8u\xa3\xc1(T\xb60\xf1fb\x9e7\x03\xac^!\x84\t\x8a\x04\xc3\xaeQ\xab\x96\x0f\xd1\xdf\x85\xca\xe3Rc\r\xad?Y\xa9\x95\xf0\x9f2>r\xfb\xf2>\xd9\xf4\x91`\x02\x84\xb5_\xf5\xa3\n\x07\xba\xe2\xb5\x98\xe2\x04_\x89>\x07\xd3\x93Q\x1b<m\xf1\xf6\xe7Y8\xff>mf\x1fD\xa8H\x10\xe8\x84\xac\x19\x93\x1c\x06\x96:\x93\xb1\xa1`\xde\x93\xc7J\x88\xaa4\x8a\x82z\xde\xae?R+\xecR<\xf5|\x8c\x9bB\xd9\xf6\x08p\xb3q\xec\'H\xa2\xe3\xc6\xfe:<e\n\xf1\x82\x02\xe0c(2m\xf0]\xd0\nt\xe8\xc7cf\xdcd\xee\xf0\x93\xb2\xb8\x9c\x1b\xef\xc7=\xd4y\x15f\xea\x0b\xe8&D\xf5\xb7\xa8\xd0[1\xcb\xbd\x1e\xa2\xfa}\x17%\x81\xc7[_\xf1J,.\x069\xd7\xc8`"\xae\xcdDA\x844&\xaa\xf1\xa9\x1e\xe62k\xc5mI\xc4\xfd\xb4\x91fq\x9a\xea"a@\x95\xf8H\x1c\xa8\xb2\x03\xe1\t\x9f\x98\xb4\x01}\xb8\xd1\x08\xec\x83\x98Q-obZ\xfd\xf4\x80a~#\x10\xc9@\x19\xd4\x87\x00w\x92\x89[\x8f\xe2\xcb\xcf\xa6\xa4\xc8\xc2\x17y2u\x05\xc3y\xd3\x101r\x0e\x01\x00\x91\xcc\x99ke{\xfa\x8e\x1d%\x03\xcb\xc2\xaaH\x00v&x\xd6\xbeS\xa6\xabA\x82\xad\xdd\xd4Z\xc6\xbe\x99p\x1d\xeb\xb2\xc1\xa2\x81\xc5\xf1\xca\xa8J\xd2\xbf\xe2\xf6\x0e4ul\x98s2\xc1\xcd\xc8\x8b\x87J\xbbb\xf3\xa2\xec\xaa\xab\xce#\xd3\xdf\xe0\xd1/\x14\x1f\x9c\xb8\xb0K\xdfQ\x14\xcad\x83\xad8y\x9dpu\x88\x8f\xe4,;_\xf8\xa2\xd6\x1b\x11\x02\xb1\xe7\x04\xc5\xd7fXoJ9X\xd6\x96\xe6\xe6\x01e\xfa\x08\xfbx!\x98\xa3\xfd\x1c\xe6\xb6\x18\xbd\xf9\xb0\x97\xda\x9e\xc8zvBz\x93\xe8r#\\\xf2\x0b\xc7j\xb9\xadE:\xcaKN\xb1\xe7\\\xeb\xe9Q\x95\xd0\xca\xea$\xe4\x9e\xd7x\xbb\x1dr\x83E\x90\xbf\xe9;\xd8\x04\x1e;~P\x1a\xe0\t\x18=u\x1e\xa8J\xb2d\xa7\xe5\xcc\x0b$\t\xdd?t\xa4D`\xa5X\xcay\xfb\x03\xf6b\x93@\xf0Z&UDhJ>h-\x0b\xd4\x98\x03ER\x00(\xaf\xbc^\xa3\xfe\x91\x02\xbc\x9d5\x82\xee\x04q\x940\xfe(\xa3\x135\xa79S\xef\xd5\xa4_]q\x19n\xfc\x95(\xc14\x0c\xab\xeeb0\xe8\x05\xfa\xab3\xb0\x15\xa8\x80\x9bR\xc4\xce\\,.\xf1D\xc9\xe3\xc7pp\xf1\xa59\x1a\xff$\x89m\xae\xf4\xb6\xc5\'\xf6)M\xdb\xb04\xba\xed\xe6\x1b\x1a\xf2N6Q\x0e\xbd\xdd\x95\xde\xc5\x0fJ\x9f?{g4\x0c\xa1\x91S\xa0\xc6\x03\x19\x8c\xc2\xf0\x19..\xab\xaf\xc8\xd7\xfd\t\xc5\x1d\xd9\x1d\x98|\xba\xe7\xc36\x8c\x9c\xaf\x81\x92\xc3x/N7(\n\xb8\x18UV`\xf3\xb3Na\x11\x0fb\xda\xc5:\x81J&\xd2z\xf7\xaf\x01\n\x9e\x15\xf5^\xd7\x8d\xb5 w\xed\xf9\xf5\x96\xe8\xa1\x02\xb5\x06z\x14\x0b\xbc+N\xd2\x9d\xa8>\x18;\xe0l\xb1\x9e\x8d\x86U\x8fT\xa4\r\xe6\r~P\x0f`\xc1\x04YH\xa9?\x88a\xbe\xcb2;JT\x1f\xa8\x99#\xde\xb1V\x990\xceMf\xa9y\xac\x99K\xa9\x07J\xba\xb3\xc5C\xef*\xe2\xb5&a\xba\xd1/\x90\xd0\x9c\xd3\xa1\xd0d\xa9|6_I\xc1\xde\xcf\xf4\xfd\xf1\xe6\t\xf1\x9c\xde9\xf4\x8d\xf8\x9c3T\x13/C\xfa\xbe\xc1\xf7\xe8\xed\x8c\x1e\x11\xde\xc2\xf9\x9e\xd9W\x0e\xf9\xfb\t8\xb7\xd6t\x99\xf8k\x86H+\xcb\xe0\xd7\xe3|\xd8\x8ao\xba\xa9\x02\xa3j\x0e\x1b\x07\xdcL\xc3o\x10\x88O\x9f\x94)\xf8U0\x80\xd6\xdb\x7f\x1a\xd7\xfc"\x81\\0\xdb\xa1`9\xbfu^\xc1\x17f\xb3\x14\x1fN\xe0Y\xc3\xbd\xf0/ `\xbf\x8b\x855p8\xf4\xb8z\xf1\xdfi\xe3;\xa9\xf4\x89\xbc\x83W\xc9?3eNL<7\xa4h^\xda\xed/\xdd\xd6\xee\xb7No\xb2O:\xb1\xb6\xb9\xd2"\x8a\x003\xe2\r(#d\xa7Iz\x88\x19U\xb4\x01\x9e\xbe\x96\xaa#\x90\xb0\xe5\x86\x80\xf9\xb0d\xa9m2\x9bt\xe8\x1e\x1dK\xbc\x08\x88#\x1cz\xd28\x1b\xd9jq\x93s\x1d/v\xe1|N\xcfg\xeb\xa5t\xea\xf3\xed\xff|G\x18\x0f\xedp\x19\x18w\x9f\x1c\xa3\x1as\x96A\xbb\xeb.\xa8\x8b6\x8c\x89&\xdd\xdbZ\xeb\xbf\x13\xf2Y\xd3\x0f0\xb4\xb6\x1dE\xd91h\xc0\xb4\xca\x0e\xc0\x98\xa5ElE"R\xb4\x13&5\x11*{\xb6F2lC1\x83\xbf\x1f\xa6x3\xb3\xc8\xf9\xdc\xcf\x0b;\xc5\xba)\xae%\x91\xcf\x85PTd\xa4\xd1\xe6\xbb\xffD\xf0s+\xfdh\xb9\xad\xa1q\xdb\xd6":\xaa\xac:C\xbeZ\xfb\xc6\x17V\xab?\x19\x15\xdb\x8a\x15o\xf9+\x0f\xaf(p\x9aG\xbfr\x17*\xac\x9a\xe2\xd2\xbdFP\x91\xf3\x95\xef6f\xbf=\xef\x16\xf8vK@y\xe7&\xb36*n\xa6/\xabH0S\x8e\xe6\xd6\xbe1\xd0\xbd:\xa4\xb2d^\xdc\xbd\xb0\xea\x8e\x99J\xf2\xbc\x8df\xf3\xad\x1c!\xd1S\xdc\x01\xb8\xb1\x10?\xf63\x19J.p\xb8\xc5\xb9\xa1H\x0b\x1f\xf3\x94z\x14\xb9Sz\x1c:n\xb2\xbb~\x1c\xb8\x15s/\x9b\xa2\x08\x01\x1f\xe4\xea\xd7\x9d\x8eR\xaf\xd8\xbcsyy\x95k)\xa1\x90\x89\x1efs\xbeb\xa0\x0el\xb5\xd1\x91\xd0y\x19\x05\x13!\xb3\x7f^\xf7\xba\x84I\x86\x96&%\xb3\x9eX(e\xfe/k_\xa4\x00\xbat\xd0k\xae\xc2Y/\xea1\xe0\xdeSU\x0f`\xdb^\xea\x89\x0c\xa3:\xc2\xbfZvZ|\xbb\x18\xc3\xf9m\x97\xe7\xb0\xfe\xa4p\'\xfe9lB\xb5\x10\xfa\xea\'\xbc\xde\x8e\xdcV\xaa\x0cdk\x84\x14\xda\x11Q\xfe\xc3Y<:\xb7##S\x84\x08\x01\x1e\x94\xb6\xf4X?\xc6Y\x99\xbd\xee&\x96<\x86E\\+\xb9\x84\x07+l\xa6a\xcb\xa3\x8c\x8cf9~T\x9b\\\x87;\x8a3\xd8\n*R\xf2rPx=1\x89\x1bv[\x82\xa6C\xa1-\xad\xda\xfc\x01\xd9\xd7U\xc6V\xa9x\x93\xebcg\x04f\x03\xda\xbf\xad$\xb3\x009\xc0TG\xa8@\x93\xcc\xba.\x87\xee\xcf_\x10`\r\x18tBE\xc3L\x1a\x8f\x1d\x02>X\x01\xd4NwM\xd7.g\xb2\xebC\x1c#\x14Uv\x98.#\xc8\xa8\xe1Q+\xc8\xcb\x9eA\xb49\xd8\xb89\xc9lH\x18ag\xb8\xfa\xbbB\x86\xb6\xec4T\xd7\x89\x0c+\xd8\xc1Vk\x06\x19,\xd4\x00\xed5\x10._\x16s1\xda\xab\xd1$\xc7\x04\xcfqT\xb9\x0f\x00\xcd\x1fai\xe9U9$P~\xdeR\xf1\xfa\xeb\x96c\xf8\xfb5\xec\xfc;\xec\xe2\xb5\x8b\x87|S\xeaf\x0b,\xcd\xbb[p\xd7+\xe8\xd7\xf1\xbbo(w\xbbG\xa6z-\xfcB\x94\x12\x1f40\x82\x1fp\x06\x04\xda\x865u\x12UnK\x05\x15\xf8\xff\x84hV2\xad1\xa17sI\xc7Ci\xe7\xed\xb8\xcdPUo\xf3\x89\x80\xff\xe2\xbcn\x81\xb8\xdeT\xdc\xca/\xa9e\xfd\xc8\xa6\xbdr\x96S\xbc=\xcc+l\xec3UZ=\xc3\xbb\xa9$\x8b\xa0\x8d%=\xb6\xf4Nx,\x1fj\x1cT\xfaq\xaa\xbc"\xe3\xa6x\x0f\x87O)\xd7\xfd\xf0\xc7\xfe\xd0\x0fqn/;\x02L\xe0\xa7\xeb\x91O}&N\x01L\xb3W]*\x997\x04\xa1Ur\xc1k\xac\x13q\xa4\x10&\xfa\xf7\xfc\x96\xf8\x04\xd6e\x87\x04\x85\xfai\xdd\x9b6\xf5\x9di{\x80m\x0e\xa8#\xf0\xa9\xed\xd3\xff\xa3U`\xdbVS\x17\x8fA+\x9c\xfe\xc5\x8b=\x07\xcd\xb0pr\x18\xd4\xfe\rN@V\xd1\xd0\\\x03y\x97\xf5\xf1\x0c[Scz\xd1\x17\xbc\x94*X\x8a\xc6#\x9e1\xbdG\xff\x87]\x97\x7fW\x10\\\x98\x7f\x9f\x92\'3\xc6\xfd\x87\xc4\x96\xc5KX\x19\xbdCy2}OD\xe5+\x8a\x12\xc0+\xed@\xd8\xf0`\n\xf3\xf0\x14\xd4`\x85\xb8\xea_\xb8\x7f\xd6sx\r\xea\xb6\xfa<\xd6\xeb\xe9\x17K\xf2%\xd9\x16\xd5\xfa\x0f\x814b\x10\x06\xe1\x87\x80\x0c\xfa\xb6E\xa9\xec\xe2E\xb7\x99\xe9r\x82\xcc7\xc4\xb6\x1e\xa2\xa6E\x04\x8e\x98\xabv\xc49\x8aC\x85\xf6\x0c\xecs\x8d\xb9\xb3\x94H\x98\xb9?\xe9\xa9Z[\x88\x80[\x9c!CK\xb0T\xb8\x8a}\x13R\xbamE0\x88\x9b\xba\xc2cX Q[\xea@\xc2f[f\xecC\xa3\x182u\xd0\x18\xc3u\xdb\x9c\x1c\x8a\x9e\xfb\xabhzco\xca{\x04\xdb\xf8\xa6M\xbe\x16q\x91PJv\x0e"\xe6\xd2\x89\xac\x0c\xd1~\x18\xab\xa2#\xc2\x81\xc28\x17+sQ\x95q\xa3\xaaF\x19\xb2\xb7\x1d\xaf\xdb\x02\tV\x15\xeb\\\xc4\xeb\xb5\xcb\xac;\xf8\xb8/\xe2\xd8H\xd5\xd0\x9c\x19\xf6\xf4\x0c\xc0)\x1b6\x8c\xf0\x9a\x96\xa3\xbb\r\xd8\x01\x9bP\xa7\xfdxfx-H\xb2\xb5U\xaa\xd5\xcb\xef\r\xe01\xbaTF\xd6\xe7\x00\x16\x08[\x88\x1b\xb63\xadMwt\xed_:\x19\nR\xde\x9d\x91\xf6\xeaLOu\xb3\xfcx\xeej\xe2\xfar\x1c\xf9{vZ\xc9T\xf6\xaa\xf2\x8f\xbd\xab\xc1(\x17\xa2\xf8\xfc!\xd1q,\xde0\xba\xa6s+IF\x85\x1d\x96<\\\xacp\x8bw \xb5"\xcf\xb9\x9f\xc8Y\xbf\xb12)\x81A\xc9\xa7\xad6\xed\x81\xf6\xe0\xe3v\xea )i/\x1a\x8d\x03C3\xe0\xa0\x7f\xde\x15\x08\xe1\xac\x81\xcf]\x8fj\xa7\x8b~\x895\x02f\xdf\xc2,e\xe6\x94x\x8b\xec\x0e\x04l\xca\x88\xcbW\x18~\xfa\xe4\x1d\x11\x92\x12B\xb9\xc3\xa7{\tH\xcfFx\xe9G\xe2\xb6\'\xfc\x05K\xcb\x87l\x12\x10\xaeV\xba\xad\xcb\xe5"\xf8\xec\x02\xd4}0.\xdbHq\xbd\x1b\xc2\xb4\xbe\x00=\xbc\xb8\xfd\xb9\xa2\xb8\xa4\xfeI\xef\tG\x85\xabx\xb8\xf1M\xb1\xd7j\xcb5"\xf0\xf4\xd4\xbe\xfd\xc4\xd5-\x14\xb4C\xb91\xe9\xe3\xa2JK\xc3!\x13&\xaf{\xe2\xcc\xb9\xf3\xceM\x7f\x13L\xc8T_\xddX\t\xdb\x8bH\xc8"\xf12zF\xb1\x18\xfe\x16\xac\xb1\xaf\x18\xd2rmBB\x04\xacKg4o\xa7+7\x18m\xf6w\xc1\xeb\x92\x80\xc8m\xcb\xe9"\x9d\xd0\xc2\x11\xea\x99\x87N\x95\x98\xfc5\xa2\x86X\xdc\x0fwCK\xad\r W&\x96\xa4I\xc2\xf2q\xd0L\xe3p\xf8\x8f\x15\xe0\xe5`\x06a<\x96\x86N\x8c.\xe8\xaeP\xc9\xfe-\xac\xbcv\'\xb7\xb9`\xc8\xafX\x88\x86\xdb\xdaI\xac]\xdb\xf2\x7f[\xe6\xa8\xb0\xe4\xb3\xd8\xb0k\xb4\xacrv\xb6\xdbp\x9b2\xb6\xb3:\x0c"\x0b\xb7^\x9a\xc8R\x84\xa4\xca\x00\xe9@\x9b\x88\xa2\xa28\x0b\x7f\xe5\xb1\xca\xedB%\x11\xe8T\xdb\x8f\x08!Pi]\xdb4\xd1\xe2Uj\xfd\xe9\xc2\xe1\xe1\x10\xe1\xf6\'\xe5\x97\xf4\xac\xc7aj\xf5\x0fA\xff3u\xcf (w\xe2t\x8d\xe9(7H\xa2\xc5\x82\xb9\xd7C?m\x06t\r\xc7\xf7m\xbb\xc1\xb5e\x95\xa2\x8d\xcbv\x97I\\1\x0ea%\xe9\xa5\xc4<g\xe3a\xed\xdd\x16I\x92h\x01\xe9\xb7\xb06V\xbc\x8a\x94\xe2\\\x9bW\xe5\xf5b\xa6\x8c\xf71M\x1e +\xde\xdbe\x83\xb0\xc3A\xdd\xe5\x05\x0c\xa5\xf0\r\xa50k\x19\x83q\xa4\x9c\xa1\x1d.\xf8Y\xb3\x90\xc0\x07\x95\x19\xc3\x05\xdd)\xa8\xf3J\xf2#\x18nM\x94\x0c\xab(y\x9f~\x02\xcf\xc9\x1f\x9c\xd3\xc1\x05]IR\x11\xd2\xab\xec/\xafU\xd04D\x94\xb0\xb6\x18\xd0\xe8Q\xe1\x01@=\x1d\x97\x1d\xc4\x86n\xab\xc8\xbf\xe0\xf9\x01a\x02\xf0!\xc0\xc1Bd\x0b\x07\xc1\xf6L\x82\x12\xb2f\xbb\x90\x1f\xa9R\xee\xd5\xe7\xd1\x82d\xe2\xa5\xd93\x10=G^\xf3=\x82\xf1\xe3\n\x85\r?:n\xe0\xe7\x065\x18\xa4\x9d\xc9\xf8\x8fG#\x94\xc5\xc7\x9c|\x8a\x95\\\x9bdc+\x9c\xf8\xddz\x81+\x99H?T\x10\x9f{q9\x19\xa1\x81\xb9\xfdK%\xf7\xcb\xd7\x91\xb6\xe7\xdd\xfe\xdcB\xb4z\r!\xdb\xfb\x8c\xa4\xe4V"\xfe\x0ejd?\x9c\x16\xe5\x93e\xab\xcf\xd3\x01\xac\xf0hTy\x956f\xab\xc3^\xcfx\xf9\xc3\xd0,Q\xef!y;\xaf\xaex\x9c\x03>\xf6\x03\x010\x91\xcb\x1fS\x93\xf4\x7f\xecg\x94\xaeuP\xb3J\x10\xe3\xa7\x88\xc9T\x1d\xd5\xc6z\xe63\xffb#\xc52\xcb$\x8a\xf7\x82\xcc\xdc\x84\xc5Z\x07\xeei\xad\xd9\xc4\xb0J\x9b\x99\x85*J.\xe2\x90@\x19p\x15\xd9\xe6\x0e\xaf\x08}e\x0bV\xaa\xb0]&\xfc\x16\x83\xf8\xa2z<\xab\x00\xf8\xa6\xe4@~\x9c\xdc\xc8\x12\x89a6\x84\xcd\xe0#_|g\xd8\xfe\x0c\x9d\xd0(\\g\xc1\xb1y\xb3Uh\nn\xea\xdc]!\xc4\xc8\x86\xac\xbeA5F\x14>\x0b\x83J\xacD\xa9\xd4\xe5\xfd5\x1b\xbbg+w\x88\xe6.\xef^\xbd"\xf9\x8a#\x03\xf0-\x8aI}\xcc\xd7b\xe7\xee\x02g\x81r:\xae\x8dqc\xb8)\x12>\x07\x83\xd0OS\x9d\xdc\xe6\xe8\xe9\x8dkJ\xb9\x88C\xe1\xdb\xc5@9\x8cGv\xb5\x19w\x83\xd2\xe6s4\x17\x9f\x8f\xf6.\xbfQ\x16\xbf\xb0\xc1L\xff\x83i\xce\xa3i\xd6`t\x84^^\xae7\x18\xb8[n\xeb\xad\xc8\xa6k\xbfc\xda2y\xb7\x10\xea\x9c\x1a\x19\xc4kI\x98U')
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-08T16:23:20.369222
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\x00\xe6@\xe7\xf3)\xd3\xaf$\x08\xf6B\xcb:\xec\xa1L\x00\x00\x00\x00\x00\x00\x00\x00\xfd(du\xfb)qG\x06\xd2\x122\xe6\x9f\x80\x838nU>\x06\xd7\x05\x80\x1aO\xab\xb0\xfe\x04q\xb5\x00\x05=\xdd\x16^\xd7\x99\xe8b)\x94\x04^EK9\xfd\xba\xf1\'\x9d\x96\xcdd2\n\x83\xa6\x8a\x80F\xb1\xaa\xd7\xa7\xbcA\xa9J\\\'~Jy\xc7\xc1P\xe3 B\x97\xff\xde\xe0\xe0\xc4\x94\x08\xdd\x0c\xa6\\\xc1\xd3\x12\x9a\xa6J\xb0zA\x89 \xe3\xd0\xaa`mm\xc3S\xd3\xbe0\xb9\xe0\xc8Q\x1b5\xf5\x10\x81\x83\xd6\xea\xa3\xeaaO9\xf4]E\xc2\xf1\x08+\xfa?n\x9b\xe2\xaei\xd7;\x9166\xfe\xfc\xc7\x81D\x80\x13v\x86\xdb\xbb\x98Y\xb1\x04\xc7%\x1a`\x01F\x95\x8fw\x15\x1f\xb6s\xb6\x01Wx\x80\xca}51\\?\x04\xd6/\xe5\xda\x90l\xff3\xe1\x94\xa6,\xd0\x1b\xcb\xef\xf2\xb9\t\x8bi\xa2+P\xd5\xa6A\x14)\xc6\xc6\x9b\xc50\xbd\xce\xed\'\xbf3ek6\xb7\x16{E\xba\x87:\xa0c\x0f^^\xc3\x97\x7f\x99o\x15\xd1\xdf|\x14\x0c\xf2K&\x08\xaa:"\xf5b\x81\x8d\xe9(\x8aD\xac\x8d\x1c(\x9a\xb4P0\x9f\xd1\xbb,\xff\xf8\xe0Tr\xcdy\xd8rK\xb3\x8c\x92\xc8\x1a\xe6\xcc?\xf6\x8f\xac&\x07\x08\x18Q`\xdd\xe0\xc9\xeb\xc5\xb7\x97\xd3\xa9\x944\xc7\xcf1%9\xa4\x9f\xcd\xdb\x8c\x98\xa5\xf93\xf5y7\x08\x00\x9e\x7f\x17\x98\x00\xbe\xad;\x0e\x867\xfe]Y\xf3P\x98\xac\xfa\x12A\x8c\xef\x9a\xa1)V\xb9\xeb\xe8\x13f\x1b\xa5\xc1Yu\xd3\xc5\x9b\x02\xe6\x9e\x16C(\x97\xa8\xdd\x15f\xc3\xa1\xde\x84\t\xe2\x0c\t8e=/\xac\xef]Ix\xb1K\xb3W\xc7\xa9\xd5\xb5C\xa9R\x1dK\xf8\xe8\xdb\x8d5\x99\xd8cV+\xb2\xa2\xcd\xa9O(\xb7|\x10=w\x05\x9be\x8f!\xc7\x84\xb6bmG\\&\xe5Y\xc8l\x93\xdeKqe\xf8\x12\xf2\x81\xff\x9f]\r\xe5>z\xeb\x89.\x19\x9c\x92RWC\\\xecpw\x88a\x81(\xa9v!a\x96\x03+\x1f\xab:\xcb\xf0\x01\xfb\xc8\xfe"\x8e\xcd\xbf#\x06\xde\xe9\x84`Y\x03\xab\x04\x9d\xcf\xd2\x1d\xa8\x15\xacHa\xf2"\x82\x0ek\xca\xad\x19\x8e\x9c\x82\x86e|G\xcf\xd2\x96\xad\x11Vh\xb5\x0b\xb4}DqD\xddS\x7f\xdc{\x17\xfc\xff\x04\xfa\xb25\x91\x00Z\xb3\xd4\xc4&\x1eR\xb9\x1c^_g\x9f\xe0Q\x19\xf1\xa0\x9ed.\x1f!\xb3\xcb\x9f\xf1\nP\xce\xd9\xa1y\x1d\xf6\xa4;\x18\x0f\x18\xdf{r\x1d\xed\x87\xbb\xbf\x0b.\r\x8e\xff<1\x00\xe3T\xa2\x00"\x8b\xc2\x92[y\xe5\xcc\xfb\xd82\xa4\xd8|\x05\x99\x15Z)\n\xa5\xa0\xda\x88\x06\xfa)\xaf\xc1\x9c\xc0Z\x81~\xa2\xdf\xeaBwP\xe1\xa4\xea9\x0c\xfc\xfd\xb4\x98\x04i\xbc\xc6\x88\xa8\x0c\xed\xff\xb6\xd7\xf6\x90\x0f,\xfe\xbb\xa5\xb0N\xa7\x17\xd4\x07\xf1\x8d\xd2\xcb\x96.\x9e\xe6\xbc0LN\xf3\xe7\xe3\x10\x94O%\xcd\xd6M\xb8\xd4\xfa\xddLn\x99\xbeX\xe5\xa9i\x16\xe8Kx*|>\xd5\x8e\xeax\x81\xac\t{\x8f\x97\xd0p\x89\xdf\xa1Gc\x82\xee\x02$\xbe\xc9\xcb\xfb\x8a}\xf5\xdb\xb0S\xd7\xff\xceI\xf9"\xb5\xe0\xd8)f\xfb\xfbHF.\x11\x94\xe3\xb4\xbe\x16\xfe\xa0\x86\x85\x90\xe3\xe3\x04\x82\xf0\xe2\xcf_9X\t\xe7\xc2\xd3\x06kB\xa5!C_P\xb5\x12\xa6\x1b^8\x80\xf4@\x81\xcag\xec\x9c\x0c\x14+\x01!i\xdb\x85h\xb9*F \x96\xf1\x12!k\x1d\x96\x10&n\xb0|_\xb1\x0f\xb7 I\x9e\xc2|{\xc1EJ\xa48b\x01\x98\xa1\x0e\x08r!\xd6\xeei\xc0\x19x\xf4qL\xe8s$\x1c\x95a5\x88\\\xef\x9dp\x02\x04g\x1c\xdbv\x91!\x9d\xc1U\xaa!U\xd8\xb4o\xf5\xf2\xf9\x88\xf70eFK\xb2\xb1\xec8\xc3\x80\xc1ruT\xc1\xd7\xd9\xfb\x18!\x85v\xd1\xe4\xd5\xb6y\xf1\xb0P\xa8\xb4P\xf8\xf1\xc1i<\xbd\x83W\x7f\x11\x1d\x1d\x82\xba\x01\xf5\xeb]\xe5y\xd5\xfd\xde\xcb\x89\xcb\x11\xfdn\xb1\x94\x98\xf4R\x1bg{\rC\x9d\x0f\xe2Y\xc0+T\n~\x0b(\x9a\xb4\xa1\xf9\xf4\x08\xf2"tF\r\x95~\xf1\xdd\x17\xf6\x7f\\\xee\xa2\xfd\xfb\xcd\xf4a\xa5\x1b\xcap\xd2\xf4j\xf2):\xfd\x9f;0\x12xR\x9d(\xe9w\xf1\xbd\x82\xc9\xf2\x98`E\xcf\x03\x86\x9b\x06\x15\x07\xcd\xab?\xfe{\x86\x1cZ\x0c\x93\x1c&\xee\x1a.\x98\xc2\x93\xa7\xf8*\x93H\xbc>\x92\xa0OSx6\x06Z:\xb2\xdaK\xe4Wf\r\xe0\x80\xc3\xef)\xc7\xeb\x8f\xa9\nd\x04`C\x90\xbdv\xe3\xe5l(\x8a\x0fj\x18g\x02\r\xc7i\xc7\xe3\xff\x8eQ\\/\xfd\x88\xab_\xaf_\xa4\xd9\xbf\x83\x01\xd5\xf9[\xcf\x0c\x94\x195\xd4\xce\xe0h\xc0k;L\xc2\x10\x94.&\x05N\xa5p\x15h\x17|M\xc8\x9a\xce\x9cmm:\xac\x0e[Bo_\x81\xde\xb6W&8\xf5\x93\x98j\xbd\xb3c\x9ei\'\xa4\x15\x95\xfa\xf3|\xe5\x1d\xb6Eb\xc9\x1a!\xc1G\xc7W\x88LB\x9bF\x97+\x17\x94\xeaJ\xae\xa2\xa4N^\x15\xefh\xd2\xc3\x16\x00\xc7\xda\x1c\xc5\xc7\xc0\xa1\xeb6\xf0\x91\xb7\xff^<\x83F\xb8,H\x04\x9b\xad\xca\xef\xe1\xeb\x9fj\x10p \x8a\x19w\x18\xf3\x87\xb3r\xdf[\x02V%\xdf\xd5sLAP\x0c\x94\x9dT\xceD\x80\xbdA|%\xef\xde\xaf\xa9k\xf6^\xde0U\x19\xd6=A"\xc0\x8ar\xd1\x13wJ\x0bR\x11\xa0\x9f\x17m\xc9\xf1\x1cV1#\xb4\xf4\xc7,~t\x83\xc05\xc7C\x91\t\xaf&\x0f\xd1{\xc4\x1a\x01+~\xf3z\x1eh|\xe7\x03{\x19\x19J\xd0\xc6w&\x82\xbb\xe0\x1f\x93\x15\x04\xe1\xbb:\xeb\xe4')
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