hiddifypanel 3.0.0.dev63__cp310-cp310-manylinux2014_x86_64.whl → 3.0.0.dev65__cp310-cp310-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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:22.032376
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x004*\x00\x00\x12\t\x04\x00y\x9b\x91z6\x9ef\xfa\xb1\xd64\xaf\x96\tq\xce\x00\x00\x00\x00\x00\x00\x00\x00cb|X\xb9r\x93\x94^\xc4\x163\xa9\x9a\x90p\xdaL\xb5c\xfaR\x93\xb4\xbb\xc6\xb9\x83J\xff(5_\x11U\xa3tZT(\x04\x98:7\xdc\xaa\x16\xef\x81_M\xc9r\x82\x8a\x88\x84\xb8\x89\xeb3\x80\xf6\xe0\xfc\xb5\xa82\xb0J\x96\xac5\xab\xd1\x86\xa6\x98r5\xb5\xfc\xb5@\xee\xd9M\x1f\xc8\x1a3\x91\xfa\xa2\xd1\xfd^\xcd\xb9I\xc7h\x15\x00\xa7\x1c\r\x1eY\x8f\xdf^wS\xf5\xd0\xb4\xf0\x94t\x92T8\xb6\x96\xc2\xd1\xcd\xe2\xa7}-\xfd\x9a\xb8\x86\xe2Y}K\xb2m\x9b\xdc\xc2\xab\xbf\xa5\xc6\xbe\xf9j\xef\xd7\xa11\xbe\x07]\xa8\x94\xc4\xc1J\xa1\xa3t\x93\x96P;\xb5\xa30\xc7\xb5-VX\xfd1c\xd3\x98J\x9f#\xdaf\xe7\xd3\xa6\x18\x92g\x04\x8c\x81?\xa1t\x03PG\x83\x8e\xb8u\xb2\x8d\xd5X\xc7\xd4\xc1\x0b\x9b\xed\xcc\x90\xa0\xa1\xb7\xf9\xd9\x7f\xfcnbA\xb4N\xd4j\xa0\xc0\x96r6Ja\x8aj>\xd4\xf1S\xabP\x83_\xad\xdc-\xd4\xd5\x17\x95\xadt-C7B\x8c`[ [_.\x8ei\x93W\x8dHTlg%\x90\xe3\xc5\xa9\xca\xe0\xf4\x19^\x14\xae7\x8d\xd8\xbf\x9a"qk\xe3H&*\xf9\xca*\xc4&\x86n\xbe\xb5\x95\xc7\xab\xb2\xfb\xb0p\xfeb\x11u\xa6\xbc\xb9+\\R\x1e+\x9c\xb7\xe9\xd0S\x94\xa0CB\rQ\xf9(8\xcfq<\x9b\x7fsU\xbd\x14\x9dB\xc4z\xeb:\x03\xc1\xebO\xe3\xe2\xb1\xc4\x18\xf0\xe0\x0bQ\xf0Z\xae\xf0\xaf\x9d\xce*t\x11\xb5\xe8oT\x1c&\x83h.D\xf8J\xad\xb3"\x941\xbez\'3\x8a\xe6Z\xcb<\xa5\x9e\\\x82Y\xdap\xdf_\xc4\xda\xfd*\xa5r\xfcwh\xb8"H\xc9\xb9\x9e\xea\xb0\xbf\xac\xe0\xa2\x07\xfe\x90F\x1f\xfeW\xb8\x06\xbd\x84\xa1\xd5au\xd8\xbc\xf5\x01\xc4\xed\x84fgFn2g\xfa\x8bJ\xad\xdeZ1\xf82\xff\xcb\x93<\x89\xcb6\x85zj2\xc7\xf1&\xa9`\xb8\'\x91a\x05\x18\xfc\x96\x03\xc5\x00~\rb\xae8S\xf9\x95\x8a__\xeb\xc6\xd6\xb1\x9e\n\xe2\x15\xab\\v\x88J\x0e?\xdb\xc9\x9c\xa5zM^\xcal\xae_\xbeFcU\xfd\xb7,\x7f.\x14\xb5\x90\xd2\x98\x1c\xcb\xaa\xc0.\xc16\xf0S\xfc\xed\xb4\x93\xc0\xf3\x82\x9e{\x1d\x86\x98rIxx\x0b\x93\xe7\xbe\xb5vj\xa0\xd8\xf1se\xe3Nz\x82\xaehq\x08o(B@W\x03\xe6\xca\xd93\x9f\x14s\xe6%Z\x15\xbf|\xdcK\xed\xa8\x01\xc4\xbd\x16=\xd3e\x8f\xe2\xc0\x1c\x0ff\x1bPo\xfb\xe4\xae"\xc8({\xecP\xe1\xdc\x8e\x03\xde\x1a\x04\x13R\x94\xcdY\x02\xaaL\xc3\x19\x10b\x85\xb6\xbb\r\x7fo\x1c\xa5X\xbd,U\x8be\xcd\xda\xacq\xb9\xe9|\x94K6O\xbb\x8f\xfa\x8a\xa4<\xffTUi18\x1fC\x86\xd9`\xa6\x8d\x0b\xfc}\xb8UzB\x0bN~5\x82\xddH\xbfq,\xd2\x94\x9e\xfe\x8c\xb0\xbe\x85g<\x83\x8f.th\xda\xc2qY\x84\xa6\xdbiy\xd7_\\\xbb\xb8;[\xb5\xcf\xc7\n\xb8\xbd\x82\'\xc6 \xee3P\xde\x05\xc5\xeb2V7`eU\xb1\xc6\r\x9d\xf1\xca\xe8 C4p\xae\xc3\x84N\x8f^\x98\x82W\xb9m\x1e\xf38\xe7\xd3\xe0^IGW\t0\xf6\xedB"\x16\xb1M\x85\xba8o\xbc"66\r|\x87\xaf\x89\xaaD\xd4U\xb22rod\xb3=gJ\x9bK\xeb)N\x94 \x9dq\x1e\xee`\xdc\x83\x16\x12\xb9\xf3\xc6\xea\x01\x0e,(#R\xc2\xf6\x8a\xe5\xabD\x1d\xdb\xab\xe3\x96\x93\xff\x17\xd7\xdc\x91\xa8\x95T1G\xc8\xfdR\xd5\xef\t=%lT\x0f\x96,B}:\x9c3\x9e\x11\xb1\xf6\x908H%-^:s\xf2\xac2\x90\\U\xf9\xf5\xf1\xf7&P\xac!#\x1aSI\xb3\x81\xffA\xb2,\xaa\xddu}\x1b\x0c\x1f1\xb4\xc9\x8aE\x0f\xd4B\xc6\xb2\xe0S\x03\x04_\xf6u\xa2\r\xa8\x9b\xaa\x9e\x00\x9d7\xf5x/\xe5B\x89\x99\xdeWcVY\xe0\x10\xf9\x14\x03\xfd\xf4\x11aNoG\xb8\xb5D\xac\t\x05\xc1\xdf\xf9\xebg\xf6D[\x15lH\xc2\r\x00\xb3\xde[\x13I\x91 \xc3v=.\x90\xff\xe2f\xf2\x0fn\xd1\x9e\x0ekU\x12\x89\x17IB\x9a#}B\xa4\x00K\rx,\xab\xd1\xea\xf2\xe4|\xc7\x86\xc3j%>\xc4\xe0\x8b}n\x97F\xae\x99`o\xf1\xa6\xc7\xc27\xeb\x8b\xc9\xb2\xe1\x08\xf0s\x97yw\x90\xbbB\xb7M;Q\x85\x96Q\xc6}zt\x86O\xbe\xde[\xb2\x1b\t|(u3\xccjI\xd7\x90R#\xce\xeb\xf9X3V\x97\xa2\x836\xb7\x06\xa2"Y8\xab\x10\xdcYy\xf37KZYlmi\x95\x16\x85\xb3\x9dS\xf7\xc0\x06vX\xa42\xda\xa2\xbd\xdeE\n\x9bp\xd3:\x856\x146\xb8@\xd9t\xe7e\x7fx"\xa8v\x1a^\xaa\xa2\xc9>3\x0c\xbb\xeb7\xb4\n\x0f\xa8*\xbfe\x0b}\xcd\x98\xfe7\xbf\x12>\xa1\xb1\x1e\xc5\x0b\xfc%\xdd\x18&\xe9\x00Si\xb6g\x04C@\x94~\x0b%\xb9\xc8\xb1\xb8Y\xd7sl\xd2\xc0 :TW\n\x0cJpI\xed\xd9+\xd7BQ\xe6\x9b\xf9\xb3"\x1a\x98\x7fH\xb7\x90\x07\t\x8a\xbe[d\x11\xcb,g\xce\xe2\xb1=\x17C\xb4\x1e=\x0cn\xc6!K\xa0BH)EKL\x95\x8a\xec\\l\'{&O1\xb9\x92\x85\xf2\xfb\xa1\xce\xdd\xef8\\\x9dcgeG6D\xb8\xd2\x94\xeby\xc4\x81>\xbf\x99\x07n\x8d7\xdd\x8as\xc0\xf3\xa4j\x12\xdfO\x19\x96\x11\xa6<\x9dm\xd7#2\x9aw\x87\xd9\x02^g\xed\xdaUu!m\xb7x\xfb\x82j\x821(;\xf3\x00@\xbb\x9f\x83\x04\x90\t\nM\x94W\xb4t\xf5$\xd0X[R-V\xb8\xad\x8f>}\x1d\xad\x00\xd0Ju\xf1\x81c\x95\x95;\xb6g\xf4T \xb6v\x90\x8e\xed6:K6\x9e:~\xd8\r\xb1\x1d\xb0\x91E\x0c\xae\x9e+iB\xdbGAq\xfd\x96\xacA<\x97\xba\xc5\xa9\x9c\xb3\xc4\xfd\xa9\xe9\xa3\x02hj\xc3b_\x8a\x95g\x98|Z"\x19P\x9bB\xbb\x1f\xb75i\x88{\x8b/\x7f\xbb\xbf(k\xcfS\x88\xe5\x1c\xfa\xf1\xb9\xce\x91\x80\xa9\xe75!\x1a\x9b\x1fP\x85\x89E\x8b\x9073\xfd\x8a1\x11G[C\xfaz\xd1\xe3\x8a\xda\x19\x99\xd5\xd8\xc8\xc6\xb2\xbfB\xa6\x89R\x18\xadmg\xf5\x18\x0b\x7f\x94u\\)\x9d\xe8 \x85\x88-\x9f\x92|\x0b\x9b\x01\'A\xe1\x8eZE\x8e\xc5G\x9f\x0e\xf4p\xfc?\xbfW\xc3P?\xe4\xb3\xae%*\x1b\xcc\xe3\x81\x9fn/,\x8d\x0b\x0e\x85qY6\xf8\x1b\x98\x1dE\xa9\x92\x93\x8e\xa7\xd1\x92\xa8\x9bZ.\x8b\xbf\xc6\x03\xda\xbf\xf7\xef3\xd5@\xc86ib\x98\xebC\x86]\xbb\xba\xc5\xc2\xd0\x06\xef\xd0\xfa\xf7\x1c\xac\xb3\xbe1V\xda\x91\x8b"8z\x97h\x15eTX6\xcf\xf8{I.5\xbd\x16>\xe9\x14\x19\xadsZ\x94\x05D\xcay\xae\xac)Wj\xc7$,\xe3ck\xe4F\x1fb\xcf\xba$\xf5\xd3P\x90\xcaBu\xa9\x02Y\x06\'\xd8\x07(\xd0nv\x80\xba\x8b<O~u\t\x04\xe4\xad\x06=\x00H\x7f\x0c\x0b\xd8\xa0z\xfd{(\x8c\x94\x00a\xe4\xe8\xa8\x18(<_\xa5Q\xb0\xdb\xa0R\r\'/v\x16o5\xce\x9c\x1c\x1ayRG\xada\xbb\x00\x9a\x19\x9aV\x18.\xd2\xbd\x94\xef\xe5\xba\x9e\xd1\x93\x03\xad\x89\x06\xec\xdf\xcd\xdf+\x16\xc1\x13\x00\x8dj:\x02SP\xb5410\x8d^\x95\xd54\xd0\xf5\x0fK^h~bu\r_\xb2[\xf9z\xfcV\x1b\xc3\xa7Qh\xb3Ui\x1a\xe5)G\x88\xea%JNZg\x0c\x11\xfe\xbcy\x03\'\x10\xc86\xbc\x12\xa4u\xb0\x8a4\xe7\xb6I\xcd\xb6\xa0x\x1e\xd6B\xb3I\xe2\xeb.\x04 \x9a\x84\x84\xe9\xae\xd332\xfc%\x16\x08(\xd5\xf25j\xde\x1b98l)\x86\xb7#\xdd\xfa\xb2c\xe9fH\xf0\x97\x99Q\xa5\x90h\xb3\xc3\x10\x05\x97\xe2\x15R\x85\x86\x98L\x9aX\x0f\xc4\x9d\xf8\x069j\x17\xb5\xd8\x8b\xd8\x15\x08\x83`\x7f\x1c\x0c\xdc\x9e5\xa3\xa8\xdd\xbb\x05/\x9bL\xc6\x06\xbe\xc2EA,>\x96\xeb\xb6c\xf0\'\xc0\xb6\x1f\xca\x06\xe5\x93\t\xb7\t\xa1-A\x99\x7f\xf8\xd1SD\x82\x88_Gs\x95~\xc4\xbe\xb4_\xd1\x0e5\x1d+\xd7*x\xfd\xf8\x89\n(s\x93\xd8\x19\x94f\x80}c\t\xb3\xabZ\x7f\xc54a\x8a\x99\x96\xebCY\x91\xf2\x84\x98\xb2&:\x15\x99Q\xf4\x0b\x14\r\x01\x8b\x00\x01[?\xd1\xd2\xc7\xb3\x87\x01\xe0<[\xa8\xc8\xc42\xd4\x8ap\xa2\xf1o\xad\xd0|<G\x80g[\xa2\xc5z{\xe4y^\xdf\x86CY\x04[\x02\xb2c\xf9>\xb3n\xbb\xeb\xc0E\xea\x0c\xaa\x05I\xc4\x0ei\x81\xd2\rd\xd6\x1e\x11\x07\x10H\xb32\xafV\x92eT0\x97\x12\x01\x95D^\x03a_B\xbfK.\xe0\xab\x10\xd0\x12\xb0k)\x95\x03\r<\xacx\xe3\xf2\tL\x1e?\x9fd\x89\xe6.\x91\xa9\x9br\xacD\xd7_\xb2,/\x164\x135\x82+B1\xfb\x9f:S\x94K\xb9\xf0\x9a)&\x816q"\x88\x9c\x88\xa6\xad}*\x1e\xb9\xf2\xefO\x8c\xd80\x8e\xc6N\xcfM\x88\xf0\xf4\x84\xefQ\xbdO\xea\x07\xad\x8a3\xde\x963\n\x0e=rO0\xf6\xf9j\xfb\x141u\xf6`<fV\x1a\x87\xa7m\xaa\xe9P$N\xe9\xecN\xf4\x98\nX\xb3\xc1C\x8e\xd77=t\xfa&\xc2\x87? \xd2\xe0;\xb0\x93?\xaeS2\xd7\x8e\x879c\x9d\x14{\xbcO\x18w\xb6\xc1\xc8\xba\xd0\xf0\x8d\x90&KBQd-;i\x1e\x95y\xdd\xe6Q\x08\x107\xc2\x81\xbchD=\xfe\xf2\xf6\x8d\xc7\x9b\xe2\xee\xb8#}\x9b\x9dz\x06\x9fGRx\x1f\xcc\rf2\x18\xfc7$d\x12|(\x89\xb3\x14\xf0\xed\x8a\xe8(a\x1c\xff\xe0!\x87\x15\x8a\xe4\x93\x07\xdbH\x9f<\xe4?g\xd8m\xff=\x08N\x1e=i\xd6\x89\x8fe$\xd4Q\xb3)\xeco)\x84E>>oM\xd4f\xcc\xa2#\x8e\x07\xb9\xac?\xfb.\xd7\xfdB\x18bFj\xe8\xa8)\xa7\x9e2MNI\xfe\x19\xc9\xa4\x02\xbd\x05\xca%4X\x97D\x05\x13]\x9d\xa1\xff1$\x07_\xfe\xb2i\xf7\xff\n\x9aO\xf7y\xa4}\x8b\xe42\xa9\xc6\xa9\x86q\xc5\x90\xfe\xdd\xd3q\xb2\x8c\x8e\xcbL\x04O7]\xed\n@\xb2;\x833A\xa5\x19\xa0\xf8\x10w\xf5\n`\xd4\x0f\t2\xe7\xc8\x85/\xb6\xff_\xf4\x05E\x8d3x\x00?\xa625\xe7Y"\x0e`\xaa\x82|e\x10\xd1\xccF\xba\xa5\x81\x84\x19~\x83@\xef\xa4\xc8<[\xff\xbe+o\x85\xa8\x9a\x89 \xdb\xf4\xdaH\xc9\xc5l\x89G\xdcZ6P-\xdcx\x0f\xd4i\x14\x12\xfa"\x9a\xb9\xa1S|\xed\xdb\xd6\xb5\xc9\x01\xe5\xb1o\xe4 :EgL6&8w\xc2\xdalf\xec\x1a\xf6\x83vM\xac\xf7W\xb26\xe3\x85\xef\x1c$q\x87\xf0;\x99\xd4\xffnO\xf7l`\xc0\xa9U\xee\xa5\xb5\x9b\x9a%x\r>L\xd6|F\xe4\xf2}\xe6E\x99\x1b\xff{\x9f\xf8\x17\xe6\xc1\xda\xbe\xac\xc8`\xbb\xf2\x05\xd1\xe9[n\xa1\xb9\x10\xb7\xd8\r\x19\xcb8>T\xd2\xc1\x07QN:abL\xcb\xca.\x01\xbb\x17\xfdc\xae\xb3\x9a\xc2\xf6\x1e\xda\x82\xf8m;/\xa0e\x85\x8b<yR\xbb\xb3Zu\xef\xa1\xa4\x8b<\xd0\xb4\x11*\x94\xae\xbc\xec\xfd\xa6\xf9\x19k\x9c\xc4\x81\x85\xc8\x8d\x07\xce\xde\xfb\xa3\xc9\x88\x13\xd9\x8a_i\xda\xc5\x91\x84\xe1c$1\xf1cs\xea\xecl5e\xe4y\x93\x9eM\xc9\x10\x15\xaf\xc4\x8f\x89+\xf3\x97\x98\xb04\x8a\x99qy8\x00\x94ey\xf8\xc0\xab\xe4\xc1Pb\x1c1+\xdf\xf1\xe7V)\x05\x81H`\xe7\xf2"\tyt\xbc\xa5\xaf\x8cT\x03\xea\x9d\x1c\xfd\xb1\xecD\n\xba\xd5\xf9\x15(\xda\xf0*HD\x87\x8eT\x87\x02\xab\xd2\x83\x18J\xf3\x1c0-\x8a\xebl\xf2\x85\xbeD}\xfd\x94\xac]\xc2)8\x8d\xac\xaf\x0fE`M\x91c\x89d\x8d\xd3\xd7\xb12\xba\xc5i){p\x0e\xc4 Da\x13-\xfb\xa71j\xe7\x02\xfe\x9b\x8a \xa2X~\r\x82\x1a\xfc\xfc\xd7\x18\xf4\xfbc8\x00A\x04W\xe9\x94Q<\x8c/\x04qO\xd3+O\x96\xd2\x0cR\x16\xa2\xe8C&\x1a\x93\xbeq\x872\xc1\x03\xcb\x1a\xc1\x15G_fB\xc2\xe8\xaa\x1f\xda\tv\xb9\xcc52[\xc8\xcd\xa2\xc0\xa9;\xc4\xd9P\xa8\xbfZ\x0bD \xe3\x1bl\xd3\xc5\xe2g.\x04\xa9\x837\xaai\x1f\xbag$\x9a\xb3\xbft\x7f\x18qp\xc5[\xa8\xce\x00\xa2m^\x06bX\t\x08\xd9\x08\xab\x88ve\xfd\x97\xaa\x17AS\x84\xec\xd3 \xd1\x7f\x9a\xd8\x10y\xa8\xdd\xc2\xc0\x9a@\xdf\xa9_\x88\xc0\xa1\x16\xfd\xb6\xbe\xc7\xeee\xdd\xce\xfb$\x9b\x17\xb6\xb1\xc2\xf87\xb3\x9eod\x06\xbb\x08\xde\xa0~x-\xe7P\xc8\x9a\xea\xcaX_\xfbey\xff\xbf\x1fu\xb5@\x9ar?\xe9\xa0\x87\xe3\x00\x07\xa1\xd5\xaazv\xce\xd4\xb6\xfe-\xdf\x86\xeet-\xac\xb4\x19\x01\x08gQ\x0e\xe5\xa3\xd9\xeb\xe5\xb7`\xf1\xd1ch\x98\x08=\x9d\x95\xf4Z\xf4\x01\x8d\x06\xb5:\xe2\xbc\xb5a\xf2B\xff\xa7X\xdaR\xcay\x12\xa5}\xd3BnW\xb2\x7f\xc2\x85\x91\xfc3\xb6\xd09]\xfb\xc9\x92\xc8#\n\xdf\xf2\x9c\xd8\x0b\x8a\'\xb3\xd3m\x11`\xcc\xbd\xb9/\x85\x12\x05U0\xe2\xfb;\'f7M\x1c;\x8cK\x83\xe4\xfb\xc3\xd3:\xa4H\x18\xe8>\xda\xf3%t\x89\x91\x8br(\x8b\x0b\x06\xad\x1b\xe5R\r\x87\xd8\xf8\xf9\xc0{s\xf0\x0b\x10\xaf\xbbz:\x8d\x0e>\xb8\xdc\xf1\x0b%\xbe\xc0\x98\xd9N0d\xe7E\x1f\xedh\x8d\xa6=\x86\x9f\x86|\x16\x8b\xbaX\x0fW\'\x88\x0en2a{/ryb\xa7lq\xfao\x0e~\x10\xfc\x13\xf2\xbd\x92\x07F\xa9\x03ny\xda\xde\xd0\xf7\r\xa3\x11\xe17"\x98\xb7\xfb\x82\x1d\xc3\x88P\x0fOd\x87\x15\x81\xca\x18\x8b/n\x1b\xf9\xe6V\x02D`\xda;\xd9\xda\x96\x88\xf2\xb5|\xd8\x9f\xb4T/\xcd\x80\\\xcc*\xc2\xd4m\xd4 )\x14\x9dJ\x8a\xbb\xabcA\xab\x86\xees\xf6)\xe86un\xae\xd5\xf0\x94\xe2\xe1\xe3\x85%\x0e\xc8\xee\x89\x93\x9a\x1egDH\xb8\xfe\xa0I\xfcm~\x99P\xc0\x87.:\xf9\xce\xc5\xed\x11y\x01\x9e_\xa6/\xf0\x9c]\xf14\xee\x1a9\xabJ\xe6\x86\x9de3j\xcf\x84\x0e)\x04h:#\x08K\x9b\x96\xd2\xd6\n\xcbC\x95\xe4\xbf\xd74nX\x7f\xa2X?\x15 \\\x05WqU\x0f%\x86\xe7\x91\xceu\r\x90\xce8\x8dr\x8fGO\x94\xfb]\xc0\xff\x80\xaf\xdfP<F\xf9\x0b\xbc\xd9k]\x82p\xe8A\x06\x19\xc7\x0b\xae\xa5\xc6\x8a\x0c\xca\xcd\xed\nS\xa1\xe3-\xebv\xa7\x18\xd8EQ\xa6IcRM\x9b2\xb3G\xdd\xe6)\xc9Y*\xbd\xfa\xdf\xb4\xf7`\x9f\xdf\xcf><oL\x0f\x17\xe6\x86\xd0/\xc8.(j\xd2j\xa2Z\x1e\xdaA\xed\xfa\xbe\x18\xfe*\xcfp\x94\x9e\xa5\xafS\xc3\xb6t\xb0\xa7\x16Af\xdc\xde0L\xfc\xa8\x90\xb6\xfb\x19\xea3\x9d\x89}/\x8a0wR\x0f\xdb\xb2\xe6_3D\x96\xb1\xdaJx!M\xe52#`FNK}A\xf6<\x04>\xff\xa7i\'k\x1aZ\x8a\x02*T\xc7\xb2V\x81\xe9e\xf9\tBOI\x818\xf8\xc1\xa4\xd0q\n\x872\x94\xe9\xc1\xdb\x9b\xbd{\xcf.\x1a\xd9z\t`\x08\x16j\xe7\xc8\xba+\xec\x87\xba\xbcf\x0e\xf5G\x05\xd3\xb4X\xab\x04E[\xd8\x00(\xd8D_\xa0_\x99\x04B\x16?iz\xe1\x9c\x87?\x19\x8d\xfb\x1br$\xb6\x8b\x81.\xcfn\xc6\xb6y\x15(\xe2*\x0f\xae"\xa8C+\xef*-N31\xca\xdc\xec\x92\xe1`*\xcc#O\xedW\xb2C\x18Vk\xc3)\x1b\x11\x11\xbc0\xc5\xd1d\\\x96\xdbl\x125\\[\x99z\xeb\x88-4\xb2\xd1/\x99\x90|\xf9&\xea\xed\x0b\x01\xd0\xd9\xa3\x9e\x82\x8cJ\xd2$\xc0x\xf2j\xeba\xb6\xc9P\x89\nm\xed\xc2\'\x85D\xe207G\xca\xf1\xe4\x9dCG4QDkY^\xbch\xef\t\xe8O\xde\xfeF(\x8e\xce\xac\x81\x9f,\x0e\x88F~j\x8d\xcb\x84\xa0\x93\xfdxi\x8c\xe3B}o\xfeC\xf8`7\xdaD\x1d;\x00PoE\x12,2%b\x08\xd5\x1c\xda\xdeQ\xea\xc9\x80\x96\x8b1\xad\xa3\x01\xf1\x11+0-\xd9V\x8ee\x89\x1c\xb8\xf7"nlB\xd3\xd9u\xb6\xa0\x80\xe1\xcc\xacR0Ws\xff\xb8\x16\xden-\xa3);\x97\xea\xd0\xc7$\xb8p\xfeQ\xc0\x90&\x91\xcb\'\xbf\x87U\xb1\x19wb\xe0;\xc2\xb5\xef0\x17\xab\x1c\x02\x9a+\xab\x11\xeep\x15H\x10\xa3\xdb\xcd\xdal\xc0\x14~5F\x8bs\x0bc\x16\xb5\x97"\xaf5\x92\x7fS7\xf8\xae\xeeB\x91!K\x1a\xda\x1ek\x0fJ\xea\xd8\xeeT\xb0\x1bX\x0b{\xa7p9\xee\xaa\xc8\xbc\x8d\x80{\x1at\x80\xb6\xfcVS\x83\x9a\x93_\xce\xb5XIUH\x81\xb4\xdd\xaf\xf5\x97J\xb0\x16\xadt8\xd4\xfbB`\xe5Y\xceY\xe5n\xc4hv\xb1\xf16\xe3\xa9#\xef\xfc\xd91R\xaaH\xc4Z\x06\x92-\xfa\x1d\x1a\x91\xc6H/\xd5\xd9\xe6ge\x85\x8f\x8dN\xff\x9d54\xfd*\xe1\x81y5)\xea\xdd\x83m\x11l\xcfB4@\xce\xaf \\\x17\xe9\xa7_\xf5\xa8H\xbf\x1co\xeb\xbd\xc4\xb7\x91u&\x1er\xe0W*\x1dFz\x15).\n\xaa\xf0g\x99\x8a\x0f\x12!\xcf\x13i\x04B\xf0{L/\x98\x8f\xfd@\xf8\xdbp/K\xe8\xa2\xa3\xdd\xf3v\xd5j\x1bw\xc3AV\x12\xb8\x8a\xe1\xef\xf7\xbe\xbe!%\x1ajY\xb1ra\xe2\xe4\xc9\xeeV\xfbe\xce)\xd8\xd3\xd3w\x92oL#\xf2cB\x81\xe3]z\xb7\xe9\x05\xe7\x1c\xd8\x10\xcfd\xdb\x03$\xe3\xe6\x1b\x91\xcf%\xbe/\xf7R\xc7\x133\x0e\x1a\xe1\x8e\xddcv\x01\x1c\xf1\xd37#R?GT~Qw\x12i\x82q\xa1\xad$4\x10\x84\x95\xf4\xbf\xd8,K\xb4\xfbO\xa5\xa6I\xa5\xdfS\xb9\xd3\xef3\xfa\x99}\x0f-O4\x82\xe7\\\xa1:\xae\xc5\xa4)\xc3\xbc\xad\xef~<<\xca\xb0\xee\x19\xa3(\xba\x10\x1a\x0f+\xfeBR\xc5\xab-\xf1\x85\xe4R\xbb\x14\xb3\xa5\xa5R\xef\xe3\x8d\xc8\xf6#\xc8Y\xecl\x10\x88;\x0f\xab$\xec\xecZ\xc0\xb0\x13\xd1\xeb\\8\x9fM;\xfb\x19\x81\xf0I\xa2\xca\x14\xf2\xa7\xba)\xfbd;Kh\x1aG\x06`\xe6\x06$\xe7\xf1\xcd\xd0\xe9\xb5Z\x8co\xa63r\xc7\x04~R\xa8\r\xe8\x8b\xa9\xe0\xad\xe3\xd7\xc5\xa7\x14Y\xd6]SDC\x82ZN\xd9\xca\xf7\xc9\xc9\xc4\\\xa4\xca\xa6\xc6\x1e8v\xe2@\xce\x8a\xc4\x90O\xbb<\xe2\xfb\x02\x82\x83\x83\x17\x86G\xd4\x0bg\xc1\xf7\x05\xdfO\xb2\xc2vo\xcf\xab\xeb\xc0\x82\x956\x8fM\xe4v\x92_\xda\xb6\x95\x84\xbd\x8ceq\x9bY\xa9\xe6\x16Y\xb7\x1f\x9e\xb9\xabjb\x1er\xc2\x1d\x88\x9c\xbc\xde~\xde\xeb<\xc8\xdf\x9f\xad\x0f\x81:H\xf6\x85Zz\xe9I!\xb8\xf8\xc9G#Z\x11\xc5Q^\xdf\xfcyDu-5\x8a\x95C\x9c\xae\xf3Ef\x91\x92\x83<$\x00\x85h\'\xab\\\xf8$\xb6\xa1\\\x18m\xa9\xbc\xbf^\x82\x94\x84\xba\nc\x88\xfe\xfe\x14\x87\x08KH\x1b\x07\xa7\xdf\x7f\x11\x97+\x83\xec!\xc9\xe3\xae\xda\x86\x19#[f\x10-\xc1i_\xce\x955\xca\x1ab\x12\x880\xaa\xfb\xfe\x9c\xcaRt1\xd5\\\xe9\xa2ni\xfd\xca\x98R\x10=\xf5\x1f\x94\x9dxC`\x06\xbc[\xd0D\x04\x999\xd5q\t\xd4\xaaB\xa9^\xa1p\x0e;O\xa1mJ}\xc6\xe7\x02\x94\xa5,=\x13U\xa7F\xb9\xa0\x9a\xf0<\x0c\x06\x06\x96\xa0\xa2a\x1cZ2\xaf\x00\xe6\xc3u\xff\x8d\xd7\x9fZ\xfa\xd0""\x9f|\x1c\xf1\xb2Q6\xfa\xae]j\xdb?P\tg\x8aa\xd9\xed\x8bZ\xd5{\xaa\x95\xae\xb9\xb0_\x8ev\xc4,*\xad=f\x81\xcd\xe9\xcd\x8b\x83N\r>](\xbe9\x94\xc8\x93AEsB>\x86\xf9\xc9[Y\x8a\xb1\xf5,\x92zg\xc9\xcf\xfb\x05ur1\xd6"\r\xa0\xa6\x8e\xff\xf9>\xd7L3\x1c\x0e\xe0\xfe\xd7\xc2\x06\x07\x9b\x80c\xb6[\x10\xacr\x07\x88\x9d\x1fq\xe4\x1ed\xa6\xb3\xdf\xe6&Q\x94fOn\x16\x8e\xda\x07kG\xe5\xea\x91aP\xac\x15\xba4\xde\xad#\x16\xbb\xbfy^~[lgvS`\x86}o\xb5~\xf0\xdb\x18\x94\xc5\xe7%z\xfb\x1dx\x9b9\x850\xd1\xc8\xc0\x91\xdf\xc0\xd1Mo(\x9d\xe2r\xa5\x1f\x87\xbb\xa6\x0f 9\x1b\xdbk\x88\xd3\x12\xb1\xbd\x9dr\nC^9\x86\xad\xf3\xfcE\x9b\xe3\xb1\xa0\x11P\x1dF\x8c:\xfb\xd3\xc1oy\x82\xae\xc8\xe6\xe2L)\x91\xb9:3)6\xcf8\xd7\x14A\x91\xb1Sh\xc06\x13\n\xb3\x05\xf3\xc2\x88\x13\x97W\xf0\x11UiK\xf1)\xb6\xd2F\xeb\xc8\x86{=\xc2\x94\xea>*\xca\x1c)\xb08\xff\x06\x95s\x9d7\xae\x0b\x12#\xeb\x1b\xfcg\x1b\xc9\x7fr1\xb1\x99\x0b\x8e\rj\xa4_fn;\xcb\x99\x06XZ\xc4\x19\xac\xcfb\xa7\xea\xa2$\xca\xc9\xc3\xc6\xe0o-\x08)m\xd0;.\xfc\x92b\xd2F\xc1{I\xcb\xe9UY\xf3\x84T\x1c\x1e@2\x9e_\xb7\x8e\x90\xdf\xa4\x06a\xc9\x15\x01;\xc9\xd8\xcdOq\xbe\xf3n}s\xf6E[1\x94\xf9E\xf9\xe4\xb7e}\nq\xd1\x8f\x04\xe7\xbfE.0\x02?\xa8Z8\x0c\x84\x88\xd8\xd1\x1cU\xc8\xeb\xdf<*\x9a\xc1y|\xfe\x03\x96\xa02\x05wp\xa5\xaf;\x1f\x9d3\x82%\xfc\xd3\xd8\xab`\xae\x19\xea[ \\\xc7\x03\xa1\xf98\xc2\x8f\x08\x92-\xf2RU\xd1\x8bK\x0b\x92}\xb2PIo7\x07(y\xc4\xd8$\x04\x9c\x0b\xb5\x16V\xadkd\x1dK#g}Z\xf5\xc9\xee0\xd4\xd8\xe3\xbdr\x02"\xcc\xf99L!\xff/\xd6\x00\xc9.5\x0e`\x04\x10\x1b\xfb\x83\x84G\xe5]\xcei\xbd\t\x84\xdfs\xb4\xa4\xbf\x89\x98NA\xa7sN\x94D\xaf\x95R\x0e\xc9\xfc\xfdXk=^\xb1P\xd2W\xb7m\t\x02\x0c9Is\xb5#\xa8\x19\x96\xba\x81\\#B!\x87BSc\xde\x0e\xdcN\x86\xe52\x88c\xcaG1\xc9\x0c\x99\x98\x03\xdb:\xcay\x82*2f\xb3\xbd\xbe\xdbK\x9a\xf8f6\xa5\x07A\xf5C\xe3 \x8e\xbd6\x853p$MV\xbb7\x04\xaa\xb5\xfeCyF\x9d\x16\x05\xa1a|%\x90\\\xf7[\xad\xb3\xd4:\xb1q1M\xd4=\xd2\xf3p\x92**\xf0\x9f\xac\xc0\x95Ldz;\xa1\xad{A\x92\x19\x0c\xfc\xc9\xbb\xf0i)BN\xc9H\xe3\xbe]%\xcez\xf7&\x9e*8\x91\xaeO\xec\x14Z\xdc/\xc87\xc7\xf6\xfa\xf6\x87\xb6^6b\x03\xfd\xc0(\xc6\x06\x01\xd0D\'\x90\x08j\xee2\xdaw\'\xdc|\n\xed\xee\x9c\x91\xfa\x86-e\xec0m\xdev\xea\xe6\x17#\xc1\xc2\xb80\xad\xebx\x0e\x9b\xb4\x9c\x1b\x14\xca\xfc\x95#\x87\xbc@\xca)\xdb \xd2\xfd\x8b3b,P\xce\xcd\xdc/\xe5Q\xc4\x93\xad\x02\x91\x07]\xc4\x1a?\xc5{qM\x89\xf5\xfe\xb4\x1a\x0f\x10\xf3h]\xf8wVJ\xe4\r@\x0b\x87\xe8m,b\x91/\xab\x0c\x03\x8a\xde\x06-\xcf\x8dW\\\xb1\xa3\xc5F\x97p\xcd\x89\xd8U\xc1\x1a\x92i9w\xef\xc9)\xea\x8d\x8d\x95)\x80\xa7\xaa\xd4\xb6\xfa\xa6SW\x1eB\'\xa1\x85|\xe1)\x1e\x9a\x00\xd16x\x8er\xce\xa9v;\xa9:\x15o\xf0\xb5\x9a\xc8\xbf\x0f&\xeei\xc6a8\x88!\x8b\xe3V,y\xd2?\xc7A\xbe\xd4;\x9d\xe1\xb5\xaf\x12\x03\x08fa\x89Y6\x81)\xd64\x1eW\x1d\x89j\xdb 0d\xdd\xfc\xf5\x17\x872\xab 5t\xe1K^\x8dP\x9f\xa5\xbfC\xb9\xb5\x1abnq}\x11\xd9c\x08\x8byB\x85Jr\xcc\xbc\x12\xf5qQ\x8a9\xda5\xaf\xc7Z\xfd\x19k\xcc\xc8~\t\x04\xa8\\\x12\xdd\x82K\x08\xd3\x8f\x8b\xb0L\x18\x19\xa7"\xa3l[\x1e\xaf\xf8n-\x12\x1c\x0c\xac\x89\xff5Y\xa3Y\x86\xa5p,\xa9)L\xf6\xbe\xe1_\x1c\xe9\x1b\xba]\xca\xa8\x06>\x06\x10\xc5}^\xd9?r\xff\xb1\xd5#:\xfb\x1d\xdb\xbd\x1aL\xa1\xab\xecv\xc8k\x0e\x10\x02\xc8\xe9g\xac\xc2\x92\xb8@3\x13\xe4\xbb\xde?\x90x\x8a?\xc0E\x0e\xc8\xc3\xab\xbc|\xff\xf1\x99\xd9\xe6\x01$\xe6A\xe0\xc7\xc2\xa0.\xe7\x19\xb6\x8f\xcbU\x13w\x9d\xd2\xecZ\x02\x0cz\ny\x02\xf3\xf0\xc5,:\x0bh9\xb45j\x95\xc0Bx&\xd3\x12g\xd0G\x9d@=.\xd6S\xc2\x11\xec<\x94\x89\xe4\xf8\t\x8b\xddxu\xd0\xbf\x94\xe2\x13\xa0\xf1\x8e\xdb~e\xb1Q\xb2\xb8\xceg\\\xf2\xac\xdf\x02\x90\xb3\xbc\x89U\x14\xdc\xb03]L\xa3\xfd\xd8\xc9\xee\xb6\x00E\xb9\x9c\x97\xb3\xe9\x94\x9b\x1c\x7f\x96\x925\x9c)\xf2\xe9\xe2\xbb\xb6\x80\xb8\xbb\x07\xdf""\xb2_\xd8Vd.\xc9\xbe\x82Y/\r\xb4\x15\x10\x16\xe2\xfcG$GUB\x13\xaf@\xe9k\x12\xbe \xf6d\x8b\x9a\xdc\xe1\x05#h}\xc0QZ\xff\xbb2\xe0\x04E\x1b\x86d\xbey\xc0\xab\x85\x98\x03:\x1d)\xec\xd6Q\xda\x12\xd2\xeb?\x81\xb29\x9b\xf8\xa7h\xae\xebv\xb8\x87\x04\x13]y\x11\xe2F\x1d\x9e\x9f\xe8\x16K\x03\xdc\x0fC\xa7\xff\x8a#\x05\xa7\xfdv\xf3\xc0\x8c&\xd3A\xfc~\xec\xcaf$\xdd\xb0\x96>%\x1c\xba\xfe\x0c\xc4\x9e\xa2\x84f"\x85\x8b\xfc]\x98)/\xe0\xb6\xec)\xb0R:\x10\xba\x9c\x1b\x90\x0c5\xa0\x06\x9c\t\x8c\xc3\x13@\xe4"e\x18s\x1eD\xc1L\xba\x1cL\xa5\xf2\xf3\x1a\xfd\xe0\xe5\x93\xe5Yo\x03^\xf8Ha]H\xdc+#\xf3v[:\xb7\xe0\x86\x96\xb1r\xf6r\xd6\xb1\x05\xed\r\x16f\x806\xea\xc0\xdf\xdb\x90\x12N\x11\xac6^ I\xdd\xf9\x8c\xdc~x\xc4\xca\x9f\x1cb\xa0<X\x9b\xef\xfeV\xdcH\xa6ge\xc0\xd6\t$T\xe2Q \xdew\x12\x95\xe2\xa8\xe1\xea\x04\xe9:\x1e,\xd3G\x18\xfe/q`\xff\xf9Z]\xda\x02:\x8c\xb0\xd0Q\xd1\xdc\xd3\xf1 u\\\xc0\x0e.\xe1\x84\xdf^\x97\x0f\\f\xcf\x99\xf2\x11\xbfY\xf4\xcc$\x8b9\xdb\x84\xfcC_\x15\x04=\x005\xe8W\xe1\xee\xf0\xf6\xb4DR\xed\xe0e\x9b\x95h1\x9bw\xf3\xfa\x13\'\xf8\xb1\xfc\xcd?\xeaf83a\xa2)\xb5i\x05FaTG\xb0\x9a\x89D\xa5u\xd41\x8a\x14t\x06\xa7qG\x04\x9d\xcc0\xba\xd3\xeb\x84;\xe0P\xcf%\x04y=\x82\xa9\xacN\x173\x1aw;N\xbe*\xf5\xef\xc2\xcbp]\xf2\xd9M\xb3H\x9d\x17\x85\x1d \xd7\x9b@>\xa7\xb6X\xee\xbe\xb0\xda\xec1\x91\xc6\x19R\x16\x88\x87\xb1\xc8;\xdc\xf3\xfb\xfc"3\xbeu\x15\xf3m\xd0\x01\xfa7\x13av6\x0f-0#x\xfdP,S/\x1a\xdd\xe1\xbczQ\xeb7\xa9\xce\xab\xda?\x1f9\xd8d\x9c\xc2\xf8\x96)?\xb9\x99:D\x85\x84\x97\x8d\x97\x9a\xba~\x18\x9e\x90t\x8f\x9b\x8cOG\xdf\xfa\xcd\x10R~\x02_\xcd\x85i\xf8\x18\x89\x02\xcf\t\xdc\xcc\x97\xe8\xf6ez\x06\xf8\x1a\x84\xd96.T\xab\x10\x1f\xd0\xba\x85\x98oVrV\xe5\\\xf4\xa7\xea0iO1\xa8\xf2\xec4YG\xce\xce,g~y\x10\x05)\xb4\x18\x14\x10\x8a[\xa0\xf0\xc1\x145\x10O\xb0F0!\xb3\xa7\x89vv\xfaFBj\x0c\xf0\xe0\xf1J<\xab\xdd+\xf1\x16\xca\x14\xce;\xd0\x8c\xba\xea]JD|\x7f\t\xe1\xc6!\xf2|\xa1>u\x9d\x8fD\xf7\xb5\x99\xf0x\xf5\xff\xf2\x8b\x1b\xe0\xa8\xbb\xc2\xd5w\x88\xf5\x9b3\xf1\xbd\x16\x87\xbc\xbfCS\x90K\xb0\x97\\\xf0l\n\x15V\x10\xd1\xa3x\x04\xab\xe5\xa6+[\x00\xe2EF\xc5\xac\xf6\x1e\xab6B \xc0\x94U\\\xd9{b\x14<D\xba\x88\x00\xde\n\xbc\x0c\xf0Lt\xafai\x90\n-.\xaf\x8d\'z(\x1f{LGWq$%\xc2\xb6\x8es\xe7\xb5>y\x90R0\xe8\xb7=~\x85\x9a\x90}\xee\xe2\x14\x01q\xa9\x03U\xf6"\x9d\x8e_\xe3\xe4Z\xe1\x16F9\x81Vhx\x9b\xce\x02.[a\t;l>@z\xacu\x96^\xd4\xcc\xde\x8b\x8c\x1a\x92\xd8\xee\xbd7\x8a\xa6\xd4\x070\x0f1v0\x1c\xe6\x8ez\xc9,\xf8\xb1\x0b\xfc\x10}\xb2\x95\x15\xf5\xd6h\xfa\xe1\xfaB\xc1L\xa2{\x1d`\xdc`\xa6Q\xe8\xb6\x07\xa6\xcf\xd9}\xba\xc6\xf8L\xc8\x90<\x11P\xd6-\xbd\xd8\xa8y?\x1bH\xae\xc4\xc8\xa7\x0e\x13>C~\xafJ\x89\n\xb7]\x90R\xd5\xb2\x01}\xd1{\xd4\xf7f\xa0\x82\x04\xb0N*\x00$\xa8N!c@8y\x0e\x13\xe4\x1c\xcbe\xae6\xd4&\xfad?\xdc\x1cA\tn\x88%=\xa2I\xce\x86\x86N\xc3s\xee\xa7\x11\x08iZ\x01\xbd\xdexgo\xb8\xc8\x9f\x97\x07\xa6\xfcM\xa2\xf9\x92\xc3\xf9\x19\xe4T\xb62\xe7\x1b\r\xbf\xb3\xc3\x87\xe9Bg\x98\xc4\xa5TT\xa6]6\xae\xbfw\xa6\x02\x1d,\xba\xef\x8d\x83\xbb\xd9\xc4/\x8f$\x13BS#\xf7\x1ab$w\xe6\xa7\x05\x18A9\x03K\x99\xf7\xbb\xe6\xbe\x10F\xf3TE\x92\x18pw\xf8\x86\x8e<\xa9\xf5]L\x19\xeb\x90\xdfGU\x84\x07\x98~\xcb/t\xe1\xfb\xd2\nu\x1b\x8c\xab\xc6\xe4\xd1?K\xeaY\xdefh\xcb\x1b\xf2^gN (\xf5m\xdd\xad\xc4y\xc8\x98\xf3b\x1a\xc8\xdf\xc1\xeb/CC\x98\x87\x85C3\xeb\'\'\xb6\x8e0\xc6~\xcb%v\xf1g#pvP\x0e\xa9\x8a\x04\x89l\x9b\x03"\t\xacwa\x07w\x9c\x85P\xb4+\xb7\xdf\x02\x97\x99\x04f\xf0\x19\xe4\xd9c\x0fZ\x8eY,\\\xb2\xfb\x99\xc2x_\x1c\xf1\x04\xc4\xc4L8/\xb4\xab\x081\x02&~9\x8f\xab(a8\x98\xcc\xa4\xdaT\x8c\xdf{x\xf0F\xbf9\xdc\xd8\xb4\x00tF\xef\xf7\xed\x9f\x0c\x90\xee\xbe\xf2\xa5L{ta\xd5\x97c\xce#6\x15\xe4D\x0e\r\xb7t\xc2\x19MQ\x94\xb1\x81\x08\xcb\xda1J\x95\xb97\xb0\xef\xc0]\xb4\xbcdE\xb4\xd0\xb9.\xa62\xca\n\x1e\xab\x12D\xddB\xf13o\xdd\xd2\xcd\x061\xb8\xd7\xf5\x81\xfe}\xa9Q8\x9f\xee\xc0Q\xa5Z\x85c\x1b ?\x05}\xdf\xdc+Q!h\x9c\xb6\x1bw\xa8\xe9\xd5?1.\x8f\x01C\x86\x81\xfa\xc31\x91h\xcbP\xe6\xf8\xe7y\xda\xd1\xd6\xd2\xcf\xcd\xb0c/H\xc7\xed\x00\x0b\x05$1\xe6\xd7Fr\xafq\xbd\xc1\xc6\xaae\xd8\x1a\x95\xcc9\xb3\x11\xf4\xd9\xbd\x82\x06S\xf8\x97\n\x04\xba~\r\x03\xb2t\xcd\xa3\xa6\x8d7R\x19\x87^Vp[o\x98\xa8\\G1\x15%\x95\xd5\xde\xd0A\\T\xa7\xd2\x9b\x89\xc3,r\xb5m9M\x89\x9d\x1bLM\xcbMm\xf1\x83\x9a\xb2\x00\xe7\xeb\x18F\x13W1\xb3I$J1\xaa\xd1J\x98\xa2U\x9d{\x81\r\xd6\xd0\xfb\xd2\xbaD\x15\x93\x96\xe1&N\x85\xdc\x88O\x84w\xf5\xf6\x00d\xec\x81?\x90Z\xb2\xa5\xa1\xe0DFF\x94\x0b*l\x1c\x16J\xbb#\xdd79\xb34\x13\x90%p\xf9\xc4\xda\x97\x15\xfa^\r\xe0)8\xb9\xd5\xba\x04\xfdLHy\n\xc4l\xd1}\x87\xd2\xdd\x90A\xcc\xab>q\xab\x86\x1d\xfe\x16_\xaer\xe4}Vu\xaa\x077\x15!x\xfcIT\xa3\x95\xc7Q\xda^c\x05\'\x96DB\xc1\r-\x9d+!g\x1c\x0b\xa1\x0b\x9c\x1b\xd2\xbe\xa8u\xa8Y\xc0<\xf3\x80B\xe5\xe9~q\xfe\xf4!s\xc4\xad\x1a\xf1}z\x9e@u\xa1(T\xc0\xbe\x18\x19\x86\x1e\'\xc5Lm\xbe_\x8c\x07\x1bikSrsR\x1e\xb5\x05\x01\xadn!\xb7\xe4\xa6\x9f>f\x9dH[g\xd3\xffq\rCS$\xf0\xca\x02\xf9\x9c?a\xf3\xff\xdf\x91[\xa0)5}\x14\xd4\x15\xedB\xac[\xca\xba5 \'\xdd\xf1\xd2\x05\x02\xab2\xd4\xed\x15\x8ac60\xcb(S}\xe8\xc8c\xe9Q*\xa8\t\xae*\n\ril\n)\xe3A\x83N\x1e\x91N\x86\xb1x\x9c\xa0b\xf9f\x04\x0e\x07\xa9\x82k4|6YBO\xf6\xaa\x8c 5"\x88\x18\xa5\xc4\xca5O\xb6t9\x01\xbf )\xda\xa5A\xc6\xd8\x85s.\x8e\x0c7\x8e_\xf0\x81L~w\x1cb\xe6\xda\xec\xb1\xaa\x1e\x18P1\xed\xf0\xfc1\xd6\xdc\xe6L\xad\x9c\xea\xa5\xc7\xdc\x0e\x81\x1a\xbf0\x94~\x14\xf11\xd7Jo\x005\x93\x15\x08I\x03\x96\xe7Xl\xe9\x81^A\xfcJ^(g\x89\xcaa\xd4\xb4\xb4\x11\xbe\xc6\xa2\x94\xae\xc8\x10\x1aU\xc7\xbe\x1b\x87YF";\xb9\x99\xcf\xef\xe6m@(\xfd\xc5n\xa7\xf0r\xc3:v\xc2\xbf\xa0\xd3~k:\xf9e\\\xaf\xde6\xd5\xd8\xf1\x8aZ\x9fT\xc0\xa3"s\x02\x13\x89\x85\xde\xde\'f\xe9A\xf7\xbdh1\xcbW\x1a"5=C\xa8&_xC\xcc;qf3Q\x80)\xb7\xd4b\xfb\x94\xab9\x0e9Vg\xde\xb9\xa8m\xc8\x7f\x1b\xc2\xf9\x8f\x91\xeeaZ*8_l\x1d,\xbc\xfeJ\x12\xdbs\xbd(\n\xa5\xfbz\x02\xa7z</\n\xcf\xe3\xcc\x8c.\xbcl$Z \x19@\xdd\xc3\xf8QD\xf6\xe8\xfe\x07BBJ\xee\xacP|\xbc\x1a:v*\xd1+k\x99\xba\x8f\xc6\x1fC\xb1k\x90\xc3\x99\x85\xaba\x8e(\xd92\xb1\xa4u\xd94F\xf0R\xbc\xef\xc3\x07^ \xa4\x0cE\x00s\xe6q\x87\xcdqd\xcbt\x87\x15\xe0dDj\xe8\xd0\xef\xea\xe0g\xe5WJ\x89\x89G\xdb\xea\xca\xb9\xe1A\x9b\xff\xe7:\x9c\x1f\x14L,*\xb9\x17)\x1ej\x18=\xf1\xa2n<\xb0\x8d)\x06-5-\xadT+\xc7q\xde\xe7y8\xe0\x063s\xb9\x83R\xefk\xd0\xfcCt\x9bY\x0cxH\xdf\x85\x96\x1f\xc9\x84\xdbk%\x81\x0b\xa79L\xae|_\x14\xf3p8_C>*\xefy\x1c|\xf7\xc5ML,c|\xf8L\xe9,\x90\xc46\xd8\xdf\x8f\xb20\xab\xec\x91w;\x972|3\xbe\x8e\xb9<E\xcd(6\xe4#\x96\xacl\xe7\xfb2\xdf\x81\xa0IJ\x1f]\xfd7\x85\xcd\xad\xf6\x87N2I\xfc\xeb]\xcfg\xb7\x83s,,.\xefe\xb8\xd4\xd4\xd5\xa43\xce\x19\xc7\xbf\x18|*j\x13&\xc5\x01\x93\x98\x98r]\x8bF\x08\xf3z[y6Of\xebo\x82\xabu\x99/=rT\x04a\x9e\x89d"\xfc\x18\xc9\xce\xb8L\xe3\xc9me\xb5>\xef\'\xa8o\xf8\x12\xda\xa9\\\xe6\x19\xd1\x9d[Q\xd9@\xb4\xb0\x15\x0e\nO\x9d\xb3\xf2\x81\xae\x05\xbf\xf5\x91\x02\x91\xd9\xf0\xc2\xe7\xad&\xa3\x83\x96^\x88\x91\xe5\x93\x91\xd2\x99\xed\xae\'\x16K\xddI\xfb\x93\xce\x96)\xc7\xbek\xe1\xdcn\x98`\xa1\x06\xfbj\xd0r\xdd\x98y\xf6\xe5\x80\xdb\x12\x99\xe1\xf9-\xb4\xe1\x887\xde\xde\x93\xd9\xb7\x08\xbd\x80.\xa4\x1a\x0c&\x11\xdb&\xc7(p\x801B\xfb\xfe\x94 \xb9\x82\x07[\xaf\xeao\xf40`\\\xa1\x91\xfc75Ot\x83\x9bQ\xbe\xd7v\x08\xa1\x90"\xc7|y.\x83\xe6-\xed\xd9X\xfb\x1a\xd5f\xc8\xca\xaf\xac^\x85K\x17\xd0SU\xba\n\xb2v\r\x95i\xe9]\xaa\x8dj^\xe0\xbf\xa8A\x1e\xe0\xd1k\x08\xd3+5\x8e\xffzJ\xf2\xbb\xaaz\xe8\xb37|b\xa1XT\x87\x81\x90\xb3\xea\x00\x1f\x9d\xa1>\x857\x969\xc7\'Xp@\xfe\xa2]f\xdd5\xc9\xe7\xc08x!\tT\x03\x04\xca\xb98\xe6\x85\x83\xec\x8e\xf4\xcf\xb9\x8b\xc4\t{\xf9\'\xa1\xe2\x9d\xed>\xf9n\x9a\xeb"\xad\x0b\x9a\xc8t`\xacH\xf3\x89\x1c:\xcb5x\xfcx*T\xbf\x9f\xae\xa4\xbar\x87\x07\xd2\xb2\x89A\xb9B\xe3\xed4\x95\xbd\x1e J\xd6\x88\x11\xdd,\xb5\x00\xf2\xa6\x80\xb2\x88\xb8,l\xfd"z\xa1\xae\xfe\xb4\xa4b\x9ap\xdc\x8b\xac8\x18\xb9\xf4:5<\xa0h\xf0\xac\xea\x03\xdc\xafs)\x87\xaf\xfbh\xee\x81\x8b-\xd5\x08\x88\xae\x0fZw\xa3\xb92G\xf4D\xf4)\xe0\x01\x90\xe7f\x9f\xb9\xe2i\x02\xa70\xdc\xfc\xd4\x06X\xbb\x9c=W\x88c\xb5i\x07\xa8\xc1\xb9\xc3T-\x87\x93\xca\xec\xbd"\xa6\xf3\x1f\x82\xaa]a9\xeeZ\x99\x8b;Y(\xbfKd\xaf?\x9a"\xb61s\xde\x01f\x02\x86\x84\xec\xf1Q\x9e\xbb~?\xeat\xf5\xe0\xd4O\x80gY\xb6\xe3\x05\x9a1\x01^R\xff\xa3\xb3\xf9\xddUa\xb4"(\x1a\xfa\xef\x0b\xee\xa6\x14\x0e\xda\x02Wq=Uw\x89\xae_\xcf\xfe\xa6V\xd3\xdf|.\xd2\xb9+\xc9\xbdD\xc6\xa5\xc8g\x86\x1e\xa1\x8f\xdaeO\x8ff\xe4Y\x1aU+\x05\xc6\x0c\x06_\ti\xd1\xb0\xe9<T/`|[\x85\xdf\xcfr\xc7\xf9\xdf\xfa\xdc{\x98\xfdo\xeb\x12)\xee\xaeP&\xed\xe9L\x96Rd\x89\xdb\xb8P\x90\xb7\xa5;\xf4\xa6\x8a\xe6pv\xac\xef\xab\xae\x8e\x1a\xe6\xc0\xc9\x01\xf4c\t\xe5\xf8E8\xf5w\xa2\x14\x94\xee+\xdaf\x10.\xed\x80l\x00\x14\x01\x83>*\xec\xbeG\xc3W\x11\xde&\x06q{\xb5\x97r_\x10\x0c\xe3M6\xe4\x80s\x00\xa0\xebqe\x7f).\x19T\x96\x9c\xb2\x1a\xec\xfe\xf8\xd3\xbf|\x89\xd2}[$\x91\x88G\xb6\x0fS\xfb\x8f\x92\x1e+\xa9\x01\x14\xb0\xee\'G\x060\x81\xaa\xaa\x11Z\xc1\x8a\xad\x18\x94"\xe1\\\xe1R]\xe1\xca&7\xd9\xa2\xfd\x07ZJ\x7f\xb5\xd9\x01\xe2L)D>j\xa7u\x10\xcb[\xb48\x0c\xddk\xb6\xa1=\x1d\xab\xbb\xc1\x90X\x1b8\xaf\xb34\xb4\x06\xa0\xa2\x95\x91\xdeY\xe6\x1c\xfbR\xd8\xca\xbcd\x97\x18\xac\xe3\xd3/\\\xfbc\x0f\xb7\xb1\x91>!\xbe}8\x11p\xe1G\xf3\x16)\x9dsdh\x82\x16\xf3\x89Nn\xefY\x00\x89\x81\x8d\xb10z\xed\x9b\xe6d\xadK\xafA\x9b\xd0C\x0f\xda\xc0>\x1e`7\x02s\x0c\x9c\x03\xf6\xa4\xe4+\x9fz\n\xdc\xdb\xae\x83\x16l\xa6\xaa\xa9[\xcc\x88\x8aP\x87*\xe70mT\x14\x14\xcfO9\xf2\xdd\x02#\xe5\x1f\xf8\x95\xcb\x1d\xfe\xa2\x12Z\x17\xa1\x90GM\xea\x13\xeb\xf7\xfc\xdf\x8b\x90\xfa\x8d\x9e\xf0\xa5\xe2\x1f\xa10\xe7Sl\x08WY\xea#\xc4R\xec\x85\xd0u\xb3\xf2\x8bYNy\x82*\x10Bp\xb48}o\x1a\x99\xe1X\xf6^\n\xb07\xb4:\x99tFj\xae\x1f\x8aM/\x9b\x90\x84k9|\x9aY\t.8\xf3\xe0\xaf\x8a=6\xcd\xc2\xa4\xdd\x91\x91\xd89(\x83.\x8d\x08~\x1d5\xd7\r\x89VV\xa5\x14D\xf7\x98\xdd\x11\t\xb5F\x95`\x94*\x1e\xb5i e\x8c\xadq&\x8b\x80\xd4$\x11%\xd2\xa2\xb0$1\xda\xc7U\xd1\x1b@\x00\xb5a\xc8\n\x12\x0c\xd67\xf9G\xeb\xc5.8=\x18\xbc\x07~\x13%>\x99/\xb4\xf1Q\xe2\xa6\x96\x93\xe6\xf8\xcf\xc1\xd8\xd5T\x00\xd5\xfc\xd4\xd8u\x90\x0eH\x87\x05dC\xdeT\x1cu\xe7O\xa7E\x96a1h\xc9<\t\x85\x13.1\x1dy\xcb\x9fNu\xda\x81\xa5\x13E:e\xac\xf8t\xd6\xa9_\x12\xa1\xe8,\xc6\n\xa2s\xb1\xcf\x0b\xee\xd58\xe8\xa4\xb3\xd9d=\x8fT\x9dq*.\xe1jq.\xe1m\x05\x06.%O\x16\x06\xfa\xd83X\x9b\xe1A\x03\x08\xb1\xdd`6\x06:\x8d\xc0\x8a\x01ca\'\x12\xa5\xd3$\xff<Mq\x8b\x0c\xc6\xcf\xbdlz\xe8h\x80\xbd=\xf2\x0e\xcc\xf4\x88\xde\xd9\x85T\xed\xe57;H\xadx\x8f+\x9f\xbe\x89\xf0A\x7f%M\xa0\xe6\xc4\xb3\x95dX\xe5\xd9\xa7\xdb\x13\x03jy\xdf\x16Y\x1ck\x06\xd2)\xa5`~\xdb\x03\xa3;\xa2\xce\xca\x82$"\xa2\xd3\xf0\x99_h\x1f\x18z\xb7\xa4\xa8\xafB\xa1A\xe5,\xd9\xa0\xea\xc5\xc6\xc5\xe6:\xc5\xd3\xfe\x9b\xaa\xb1\x1f\xb6\'\xd7\x18\x9ak\xaa\xe1\x86\xd3\xd0\x84\xaa[!\xf3\x8e\xeb\x93\x12\x93\xac0\xc1\xbd)c\x90\xb5\xcf\x13\xf7\x8b\xf4\xcdz\x0bA\xab\xc6\x12Lq=\xb9,3\xb1fM\xb2N\xdc\x04r\xdd\xef\xdfC\xebP]\xd4\xce:\xecC1\x0b/\'/\xf4\xf48\x9f\xa5\x1ec\xe9\xab\x87\xf7`c^\xd7\xee)\x0f\xb6\xe80l\xc6\x85\xf1\xaa\x0c\xdb\xdd\x05p\xa7{\x95\x84w+\xd0\xbbm\x10N\xe6\x00\xa6#\xe2fF\x017\xf0\xc9\x0e\x16\x8aZ\xeb4\x8c\xccg 3E<\x9e\xd7\x10\xb4\x12\x8d\xf8E\x06\xc9|\xd0s\xc2\n\x12xk\xa14\xc5\xeej\x1c\x1bS\'\xf2\x16\x19j\xf6I\xac\xe9/\x12\x15\x15\x98M\xc1\x90Pa\xa5\xe4)$\xfd\xbc\xa1\x04:U\xbe\xa0\xf0q\xce\x1a\x07\x1c\xa0\xea\xa2\x8bknTU\x87\x9f\x17]\x08\xa7\\\xd6_!{&\x87\x95\xb8E\xf2M\xcc:\xbfR\xa9\xa6\xa2\xed\x910\xb8"4\xf1\xb00\xb2Q\x7f\x98}\xcdt\xec\xa5PK\x8fy\n\x065G\x0f,\x19\xb9\xe2\xa9\x01j`\x1an\x19\xc5t\x88|\xff\x05B\x899\xddz\xf3[f2;lD\xf6\x93,\xda\x8a`\x92O\xa5\x93 \xa0\x90\xb6fr\x15\xe4#D\xe2CP\x94O\x99\xa8|\x0et\x7fD@\xd9\xa3\x8d%E\x11\x97\xd79\x11,\x98\xe2\x02q\x98\x01 H^\x94\x86\x1fv\x07\xac\xf8\xeek\x12\x988\xb0\xf0;L\xddKu\x1d\x18\x95\x93\xcb\xa2;+\x10\xda?}\x93~\x92F\x1e7\xccq\xe6\x19N\xb1)W\x1a\x00\xda\xcbV%g>\xed\xe3\xfbY\xf9G\xe3\x03\x92\x01b\x1f\x08\xd9\x91iM\x8f\x0f\x8e3W\xdc\xeeb\xb4\xca\xb6\x01\x7f\xa4N\r\xaae\x03\xc2%O-8ydG\xf2\x15\xb5\xde=\xfdwL\x88vEn\xf6\xb8\xf1\x8b\xfd\xd6\xcd\xe0\xcd^\xfe\x1d\x88\xdb\xe6E\x90\xe2\xa4W\xc9$\x12\x9c\x9e\x80\x1d}>l\xbfu\x96t}\x14\xa2ecv@\x81\xe7-\xe5?\xb8\x08\xcbY6\xef\xcf\xcf\x7f\xa3\xdd,\x96\xde4nJ/\x9cP\xceJ\xa4|og\x87\xbd\xcb\xd5\xb4\xc6C\x9a\xed\x1d\x9f\xb4\xdb\xbf\x8e\t\n%\xbfq\x81\x0e\xd6\x9cr3\xb72i+X5\xa9\x0b\xcbD\x1cPY\xa1\x02\xccZk\xb4G\xe8\x8d\x0em]U\x7f\x0e\x9eB\xcdf\xf2\x8b#\x9d\x05\x1e\x84\xf0\xc3\xc7\xe1\x1fU_&f\x06\x81N\x85\x10\x8e\xf7n\x89G\xfd\xcf\x00U\xec\xae3\xa0\xc9^/QT\xd8\x9a\x9dCN\x9c\xd5}_\t7T\x1c\\m\x97Q/\xa4.\xde\x1b\x89\x8b\x80\xc9\x10\x19\xcf[\xda\xa3W%\xdd"\n(\xf0)\xde\xa8\xd1\tu\xad\xe5\xach\x06\xe4\x1d\xa9\xf77:V\x08^\x9cB\x17\xc1\x9c\xc4\x86\xf5w2\x01>\x1f\xd5\xe4\xb2\x91\xd0\x00\xd6\xb3\xa2\x9dG\xd7|\xc1V\xbesT\x87\xc4\xe6u\x9b.\x13Y\xa2\x98X\x81)\x91&6\xf0\xe2\x9f\x01\xa3h\x00\xbd-\xd6lL}:\x8b?\x108)\xfb\xde\xa5\xa1\x1fQG}\xbfc\x0f\xdd\x1d\xdbV\x17J\xe4!]\x86\xaeig\x12j\xab\x90\xaf\xadm\x96~\xe9\xb3\x9c\xcf<\x94E#w{\x9c\xcfE\xc4x\xd3\xb5\xafx\xc0\x06v\x02\x07\x8c\x8e\xbc\xdb\rQj\xeexIe\x7f\xe6\x98\x04\x87\x1e\xe9\x91OR\x01\xda\x82;\xc9\xac;\xecR\xb2\xca\x18\x1b\xe0\x07R\xb69B\x1f\x03#\xb5\x0c\xfa\t\xf4b\xcb\x0e!\xact\xdd\'\r|\xe2[\x99E}|\xf8\xb8\x8a3\x99\x95\x9f\x8ef\x1c\\\xa57\xeaA\xc8\x94\x9c/\x9f:E\x83:!\xe6\xf7\xca\xab\xe2Y\xba\x19\x8a f\xff\x0c!\x81\xffQN\xb3m_\x13\xbcL*,\\6\x11\xa5\x14\xf1\x98\xa9\x10\x11\x96\xc8\x8cg=}\x86!E\xbe37\xb6\xfa,B\xdb&\xd8AkwX\xcdh\xb0\x9bV3')
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:22.054224
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x04\x0b\x00\x00\x12\t\x04\x003\xc5\xbf\x0bACv\xef\xec\r\x1d\x82"5i\xee\x00\x00\x00\x00\x00\x00\x00\x002\x9b\x1a\x88.\xab\xe9,\x01\x16g\xc7\x86X\xa8\x94\xbfT2\x0f9\xb1\xfca\t\x12l\xa5\x00x}(kX\xfc\xde\xc3\xd4\r\xcf\xeb\xa3\x92H\xa0\x99J\x81a\xf7R\xc1skF\xf4\x99\x94\x86p\x7f&\xbc\x94\xb9c\xa8-\x9c\x94\x15I\xdez\xfeR=2\xc7\xd1\x19?)N\xf6\xfa\xa2K<\xce\xa8\xf3\xab\xd4\xa6\xfdD\xe2\xe7\xee\xc6\x14m\x1d\x1f\xc9)\x98I\xed\x19%-P\xb4\xb5m<~\xb1\xbd\xe6\x8e\x1ek\'B\n\xb7]ee\x7f\xeb\xa2\xb0\x85\xe3\xb5\x93\xa0\x84({\xe0m\x15zA\xfaj=SM\xa2Wh\t\xc4F\n\xee\n\xcf\x88b8"\xb7\x04\xa4\xae\xcc\xee\x15\xc9\x90\xdc\xef\x82\x84\xd4\xe5\x13\\\x8a\x0b\x1b\xe9&\xe3\'w\xb7\x17\xc7\x93\x01e\xa4u\x03"\x8a\xb3\x9a\x16[23!*\xf7\xae7\xbb,,\x1b\xee\x10\x93m\xb5\xc4\xab\x9d\xdev6\xeaKp\xaa\x94\xd0\xab\xe0:\x7fs_R\xe3:\xc4\x95lk~\x10\xc50\xa2c80\x8f\xbc\x81\xa5\xafp\xdbC\x84\x0e5K<\x00O\xd3\xf7uU?\x008~\xaa3u \xbd1G*\xfb\xc9\x8d|\x96\x0b]j\xd2\xb6\xa6E\xa0k\x95pj\xacimb\xfbE*mN;T\xa1\xeaOB\xc4{\x87\xb7:\xaa)\xfb\x08\x18\x9e\xf0,\x0ed.P\xd6\x89\xffO\x0b\xeeU&t\x8c\xfd0T\x9eF\x18\xaa+\xaeJ\xf4i\xdfJ\x01z\xa7=\xa9\xf7\xff\x03\x03X\xa3\xb9y\x9f3\xb4\xed\xf4\x9a\xb4|G\x17\xf91=\xd1\xcf43M\xb6\xb8\t\xd5\xcc\x04\xc5\x8d\xe2p\x1d\x12\xf9`\xfbs\xe72,\xc7\xe0,d\x00\xb3\xd4\xe0\x93\xf48E\x17\xfd\xe2\xb1\x96\xaaE\x10\xd6j\xf740\xca\xbc]\xcaF._\xf2\xa1\xb3\xda\xb5\xac\xda\xf8y\xf8i9m\x0ex\xce\xc08Y\xa8(1\x85bx\x98\x1e\xa6\x1c\xf8\xf8\xbb#\x06-`L&\xb6\x8b\x9d0>!\xe6\x80\xfbe\xbfg\xd48\x13&=\xa8\xc3\n\x8f\x86\x9a4\xbah\x1aIr\x07\xca\xaeU\x0b\x1e\x0f\xf3\x9cI\xdf\x98g_\x9e:GY^\xa7\xee\xa3Y-\xd1\xcd\x02-\xee\x8d\x0b\xf2\xf9P\xcd\xd8\x16\xea\xc2\xba\x8fh=\xbb\xdf\xca\xbf\xf7\xab.\xde\xb0o\xfb>o\xc5\xfc\r\x12\xf8j\x1fsEb\xf9Q\xcd\xca\x92u\xe8\x92\x96\xe0\xb9OJNxe\x9f\x1c\x95\x03\n\xff\xf3\x91Ii\xd7\xe4\xf4\xe7\xaa\xb9\xaa&\'$\x12L\x1f\xcc$\xc6U\xfd\xe8\x99\xa9f\x93\x8e\x90: \n\x84b\xa6\xa6\x8aM\x96\xab\xd4\n\x84\x14:/r\x84\xe8\x85\xd7\x8c/\\\xa9\xb9\xebr\xdf\x13\x9c{+L5\xecA\xc5\xa2\xb5\xc6\xdcR\xf7q\xfad\xc7\x13H\xa6\xd0WV\xb34\xce\xbaI\xb3\xfa\xbf"O\xca\xfb\xfacF\x19p&\x99\xfa\x11\xd3\xaa\x00Yh\xe6\x1e\x9b\xba!s\xc8M\xfd\x0c\xa9\xbe\x97\xd3\xd4"\xd4j*\xe0\x8c\xb6\xc6dD\x08\xb6\x10\x93V\xc0\xa0\t\x7f\x13\x89\x02VU\xcf"\xd6\xf9=\xfa\xbc\xc8s2\xb0\xdf\'\x1do_\xe8o\xe1\x89\xb2K\x97\x95\xdb\xe0H\xeaH}\xe3>\x7f\xb4D\xfakn\\Jk\x849\xcb\xae\x0c\x92\x06\\\x1b\xad\xcb\xf1\xc7\xaf\tq\x12\x84y\xdc\'\xbf\x84a\xf5\x1f\x8b\x9d\xa3\x11\xb2\xa2_+\xc2`\tw\x14@`\xc5\x02\xfej,\xa0\xf3\x85\xf3\xad\xf2\xf7\xa0Y\xe1!;\x82\x11\x86\xc1/\xe0\x02\xe0\xcb\x9da:\xa0\x87\x97\r\x85\xf5\xb9\xcf\x0e\x175\x83C\'\x0c\xbe\x92\xd9=\xfbx\x04\xbf\xd9\xb6q\xcf:\xb3\x90\xe6d\x01\xe2\xe5VT8\xd6\xd9y\xe78\x85\x17\xff\xf8r\xd1\x9a\x88=\x07\xcb\xb5*z\xb3\xe1\xc8I`\x999"\xb4\xef\x81\xd5\x82\xa2\xe9\x9b\xd1\x14\x82\x9b\x9f\x8aZ\x16?Q\x19q[f\x87\xff__\x05\x01VZ\xba\x80CZ\x19\xc6c<\xf0\xe1\xfd\x85h\x10\xe9]\x94\xc8\xbd\x12\x95\x7f\xc7\xc7\xa3S\x08s:\xe5\x98M\xcb\x0c0D\x7f\x05\n\xf5\xec3\'\xdb\xb2\xc3\xad9.e\xc4\xdaINAD\'\xa7\x15@ZfO\xbd\xa0\r,\x1bek\xf4\xfeh?\xda\xaf\x9f\x9a\xbd\x8b]\xb5\xbf\x01\xb5\x9c^J\xd2\xf4\x9fz\x8b\xcc\xbc;\x89\xc1\x0c\xf6\xcc\x87\xad\x15T\xfd\xf0v\xbb\x00\xff\x9f!\x15\xc12\xaf\x04\xa0\x1d\x89i\xb5Z\x7f\xf4@2\xcb\x91\xb1\xf5\x8e\xa2<\x19!#\xf1\xba\x8b}t\x02\xd3l\xaa\xad{\xb4\xc0\x9el\xb5\xf3\x85a\xc1\xe0\x06\xd4\xd9\xf5\xfd\x14\x7ffn8V\xe6\xc4\xde\xb47\xc1\xc3\xaf:.\xe3)\t\x8d\xf6\xed\xd8j\xc0\xd9\xd2\xc2B\xa5\xcd\xa8\xc5\xd1\xb1\x00\xf8\x8e\x16Z.\x8d\xbe\x87n\xf4\x1e\xe4$\'\xcd\xd4\x93\xc1\x07\xf2\xe5\x89z\xa0\xcc%\x10\xde:b\x88\xa2y^H9\x1d4\xd0hv\x15Oa\xce\x92\x0f\xc1\x18\x03\xc2%CA\x06\xaf<]RF\xd0F?\x1b\r\x12\x04\xa2\x16u\xfd\xd5\xd3\x9d\xe5,\xf3w|@ J\xd3\xcdg$\xc4\xc7\x9b\x80\x82\xf9\x11jn\xbf\xefq\xce#l\xfaH4\x91!v\xf8\xba6Rk.\xe1\xf4\x10O\x85>p\x05\xf4\xa8\x8f\xbbp]\x1eT\xb4\x7fq\x9c\xc8\x9e\xda+\x88K\xc0\xdep\xa82/\xf1\xa1\xce\n\x89\x8b\xd7<\x14S\xaf3\xa5\xe2}|\x9a\x96\x11\x1b\xd6\xd8\xdcT\rD\xa8\xaaT\xc7\xeb\x89\xdb\x8a\xd7\x04\x9d\xd1\t:\xc9\x02\xd9\xf5mp9\x04n\xef{\x8f\x17u\xd6\x8b]\xbb\xe2\xfa\xf5\xff\xd0\xcd\xc2\xe47\x15\xe4\x04#S5a\x07{f$$M\x89-S\x8b\xbf,\xa0fQ\xd2\xe8\xfe\xe4\xbc\xe2\xe2e,\xb1G\xc2J\xe1\xef\xfe \x05\xef\x9c~+(\x91y\xf3_yW{h\xe3\xbd\xecM\xbf\xdc\x1c4QuU\xfbu\x18Yy\x9f\x92u(\x17\x86\x17\x0e\xfdyR\xa0[\x7f\xe2\xc9\x97_\xeb\xfd\x99\xa2\x15\xa4\x08\x08\xc8W\xa8\xdc\xa6\xeb\x1d\xb8+F^\xe2\xe5\xdb\x9e\x8d\xc75\x11\xf3\x06\xec\x96\x0e\xe9P\xf8\x08\x1a\xf8\xe0KPh\xbe\x10\x95dG\xc0\x1e\xdf\xa6\xa8{rt~\xc4\xae\xb8\x87\xf2\x9f^\x89h\xfeY:\xa0\xaa\xd0\x1c\xcf\x12A\x88\xf7\xbe\x0f\xab\xb72C\x00\x96\xc4\xbeM/\xd0\xae R\xc67\xa9\x18gP\xdb\xf7\xc3\xd8.\xd7\xcb\xc5\x9ck=\xac\xba\x16\x11G\xb0\xe8SMo\x11\x93\x00\xe9{\x0b\x9c&C\xe2\xd4/\x89\xd4#\xbd\xcf\xa4\x91G\xc7\xa5\x87\xe8\xc1\x9f\xd7<9\xe53\x8a\xea%b:\xd3\xd8\xf5wh:i\xc3\x93\x14\xd8\xfe9\x86\xba:\x1cq\x04\xe4\xfc\xa3\x1by\xa0\xf4v:\x8b<\xcd\xc0\xa3EmCT`X\xa4j_\xc2\xb0\x92\xdd\x11\xd6\xda\x94\xd7*-\xa6x\xf3\xb3d\xef\xb6\x9c\xd7\xde\xf1\xe9t\x98#L\xad\xc1\xdb\x8e\xc5\xb8.W\x98H*A\x0b=O\x86\xb0\xc4^\xbe\x8e\x97\xf1"\xcf\x8f\xbe\xe6\'\x9cY/\xf3\xc5\xaeo\xbeD\xa4"\t\x1c\xf2B\x02l\x99\x14\x88\x8f?\xf9\xc8\x07\xd3!\x0f \xae\xf8\x02>r\x83R\xdb\xa9\xdb\xf8\xf9\xccu`x\xf9\xab\x9a\r8\xbci\xa8\x00=\xbd\x173\x96\xebj>\xde\x19\xfa\xf7\x1c\x1e\r\xbc\xa5\xec\xe3\xc6\xafb\xe5\xc3\xb9\x024V\xe2\x8d\x8fJBG\x07ifQ\xc9\xdcn\x85\xa7\x85?\xc0-\x98\xdf\xb4,\x81\x00=0\xea\x00M\xc9\x89\xb7w\xcd\xe8\xdf\x90\xff\x19\x19oy\xf1lPo#L\xaf\xf8\xabCg\xc6d\xfb\xc0 x\xab\xa8\xee\x13u\xe1-\x15\xd9>\xa5\xcd\xd9eT&wW\xfc\xa7\xcd\xaf\xb82\xc1b,\xe5\x02K\x8d4\x02\xdd\xd9\xe1\x1a\x05\xc8q\xd4\xf5\xcc\x1e\x88\x90\xa5\xcd\x8e\xc2\x98\xe1\xd3b\xfb\xbd\xa5=QWG6F\x8a0\x9f\xf0\xfd\xa9eh/\xbcV\xb2\xfa\xab\x92\x10[\xe4\x9ck\x8c\x91$\xce\x86\x10Se\x1cL\xc6\xb4w\xf0\xea{\xael\\\xda\x18\xd8/T\x06\xf3\xb3\x8a<l}-a\x19\x8b\xe4\x96\x8a2f\xb1\xfag\xf3o\xb3\xb8\xef\x9b\xbb/:2\x01V7\xe9?\xb1\xd4\xa9\xa4\xdf\xedi\xf1K\xc1\x95<Wlp6J!3\x82%\xf4\x7f\xd7\\$\xc3\xa8\x8aP\x86\xa0\x81\xb6\x982\xea\x83\x07{\x87\x94[\xcd\xebM\xe9\x12\x03_\xe1\xfa\x99\xeeD\xab\xceD\xb5\xcb~V`\xb0\x84\x87\xe7h\x93\x8a.\xaa5\xc6q&>s\x920N\x07R\xb1\xc4\x1c\x82\x18t*\x17M\xb7t\xf4\x00b)j\xdc\x14\x16\x16Eiz9\xde\xf0\x92\x8f\x12\x9c\xce\x84O\x1b\xa9\x96\x0f\x15\x1e(\xfc\xdd{\x0c\\\xe7.\xe42\x80\xe6W\xb24\x0c\xa0v\x80\x93a2u/\xb3\xbf\xb0{\xe2KH\x19\x06\x0c\x9b\x8d\xb0\x0f\xcdeS\x0b\xcf#\xf2%\xe8\t~\xc4\x02\x9a\xf0\x0b\xdbl\xd40=b\x1d\x07\xd4@3x\x88\xcfO\x0f8\x9cJwA\xf7\xdcr\x8a\xd0e\xd7\xa5R\xa9:\xc6[\xdb\xe7\xf0\x99{\x08\xe1o\x83\xeb\xa9~qUx\x8e\xfeQe\xe6x\x03X\xb75\xa8\xa9\xad\xa4\xd4\xa8"\xc4Xw\xf2\x0c\xe1B\'\xb24l,a\x14y"\xc2\xc8\xaf\xaeI\xd5\xde\xdc\xc0\xc7f\xb4\xe4\xd2Z\xb6\x8do\xd4Z\x9c\xb0\x864/\x88\x17\x84G\xe0GF\x0b\x193R\xcevy\xe0\xbeiy\xa9\x1cB\x8f\xf8\xe3l\x02F\x89\x18h\x0e\xc9\'\xd8\xca\x85xbc\x97\r\x01GD\x1fw\xe4\xf1#\xa0yH\x0e\xad\xfe\xcd\x17\x8b\xecu\xf3=tTW\xe9\xf1\xa7V\x02\xa2\xc7h\xf3\x174\x0f;\x04}=\x8aX\xb7\xcc"E\x08\xe3\xc0^e\xf2b\xf0\xacc\x04\xcf\xe1E\x1b\xc3E\xf9A\xe4\x84\xcb)\x16vM\xde\x9en\xca\x02\xb9\xba\xa7$p\x17\x11P\x9es\x81\xe5\xef\xc4,9\x81c\xb3\xa2\'\xa3{\xab)nL\x08\xcb\x13\xcd\xe8\xc1\xbb\xfd\xcdf\xe1\xc0o\xed5\x9b]{M\xdfH\x1b\x0b\x03p\x95\x94\x1b"\xcd\x9930\x16\x91\x89\x7f\xc2b;\xbc\xb66\x1dp\xa5\xd2\x97\xfa\xe7\x8a\t\xb6\xef4\xa6M\x1a\xcf\xf8j\x03\xee\x86\xed\x89"\xba\x12P\x8a\x8b\xe0\xdb/\x80I\x18\x85\xfd\xfd@\x7fm\xcb\xdew\x1b\x17\x99eL\xdf0\x18\x7f\xea\x17_\xc0\xf0\xa3m7\xd2S\x8f\x80n(\xd7d~\xad\xb8\x13\xd2\x83w\xacC\xf34~\x93h\'#r\x8aw^\xcf\xceG\x1f\x17Z-G2\x93\xf5\\\xeb$\x92\xad1\xa5&n\xce\xf08\xf0\xb3/~\xecH-(\xc4cU\x0ci5\x7fA\xf5\x13\xa4\xbd\x87\xd8\x80~M\x0b_\x8f+\x97\xfe\x8eMKxb\x12\xd7Q\xd5\xf3\x94\xf4\x87\x91xn\xc2\xde\xc7\x84\x9el]\xfa\xb1\x08\xb0\x80\'t\xe23/r\x1e\xa1\x0b\x1cC\xbd\x04\n\xf2\xc9\xa8\xfd\x88;r\x8aq\x12\x85\x03y\xed9\xdap6\xfc\xbe\x1fj\xd3m\xe3\xecM\xde\xc3m\xfe\xdd\xd4\xc3\xd7x \xf8 \x9f\xd8\xb7\x92/wnya\xa8%\xf4\x82\x8fN\t\xff\x87y?f$^\x10l\xf4Ef\xb4\xec\xce\x13Dehf\xb4g\x06_\x8e\xa6?]\x17\x89\xf7\xa6\xc1f\x8fu\x8e\xad8mS\xe5/\x11N\xb1\xce_\x0b\x1c>\xe7\x7f,*\xc8c\xa0\x85J/\x87\xa1\x14\xc0yNBg\xca\x94\xa2\xae;5\x9b~?\x06v)\xd8\x00\xe8"m\xe7W\xbd\xd9<\x86\xf2+1V\xfa\xe7\xb7\'\xbf\x980\x9aS\xd8x\x1b\xbb\xbd\xd6O\xbdYN\xfc\xd7\xe5\r\xf4')
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:22.047974
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00e\x08\x00\x00\x12\t\x04\x00\x9d\x06\xd6~\x925\xa0\x12\xadm\xe2\x11,\xb9\\\x99\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x1d\xc8*\xd8\xbf\xf1\x9a\x0f\xea)\xdc\xedeDMi\xbeVk\xb0\xba\xd6\xa4W\tnJ\xd0t\xd1q]\xfbT\t\x05<\'N\xb0\x0b\xf2\xe7\r5u\x1c\xf9\xcf\xf5\xa9\x8bhf\xa5\xcc\x03\xaa\xbd\xb5\xf4\xce\xa1\x02\xdeG$:F\x94M^\xa5\x1d\x1a\x1c\xc3\xad\xd6>\xbe\xbcR\xdc\x15\xed[\xb8bH\xb8\xc0_Q\xf5\x0f\rM\x10\x05\x10\xc6\xc1a5tP{aL\x8c?\x82\x91\xd6\xbbx\xe9R\x05h\x1a\x0e\xb60\xb9%\x1c.\xf1\xfe~\x8a\xb88^\xfd`]\xdbS\x9bv\xfd\x13\x9b\xca\xa3\xb1\xcb\xfd{a\r6\x13\x87G%$/t\xa2\xfa\xa6\xf7\xd0H\x97\xb0%\xe2*\xd9\xb0\xbeq\x91\xf0\xa1\xf2\xe0\xceh\xa3\xe1&F\x15\x80!\xe9\xf9\x99E\xca5\xe4\xc6\x07(\x11\x8bX\xfdS\xcbY\xd57j\x97"\xf0\xba\x9a\xac\x94\xf8\x1f\xa6l\xcd-\x90\x8a\x13\x05`\x7f\x91I\xaa\x11\xb0\x89\xd6u\xa5\x856\x88p\xf6 L\x11\xeb|H>\xaf\x1b\x93\xf6\x97\xf6\xc2(\x04\x0f#{\xa7@F\x01\x1c\x01\x1b\x18\xf0\xf2\xfc1\x9b\xae\xa16\xd2"B\xd3H\x86 \x04\xe4\xbc\xfdV\x17\x186\r\xf1|\x1d\xf9\xd3l\xe4#\xec\xf2\xe9\x99N\x0cX`\x11$\x0f\xc2K\xcb\x17>\x8dY\xa3\xb1K\xd5TW\xb9\x08\xb71=\xfa\x99nt\xb5\x01\x16\x97}\x9b\\f\xec\x1bu>\x84\xab~\x1d\x9a\xb9X\x8f\xde\xf3\xe6\xa6@\xc0\x19N\xde\x8cH\x7f\xd2F\xe1\xa8\xb8U\xf2P\xe6\xe4\xddlCMA\x13\x82\x9f\xe3\x92j\x1e\x01\x1b\xadn\xd70\xcf\xa1VqTP=\x9an\x8dZFJ{Dw\x83p8\xc0\x01\xc9\xbd\xcc\x18\xb9a:\x03h\x10\x1c\x96a\xd7V\x89\xe8q5!\xe0\xac`\xb9\xa8\x8en\x06\xffW}\xecJ\xdf\xf1 \xef\xcfA\xfd\xaeK\xbb\xdb\x0b\xa4q=\xda\x9f\x9e1\xb9\xc9\xb9\x1d\xc1 \xe9L\x1e\xc48N\xa5\xfbj\x9fj\xdf]O\xf0\xfb\xdf\xba\x8b\xac\x1c\xec\xcf\x8f\xd9\x95\xcc\xd0\r\xa30em\xe9\xd8\xc2\xf8\xc5\x12\xf7\xc9\xfbN\xa4NS\x91\xa1\xcb\r\xaa\x88\x86\xc4\x1e\xfe\xd7\x90+<\xe1\xa25g4b\xecu\xb4$pU\x1c\x9aV\r\xaa\x07\xd8\x88\xa09\x8a\xdc\xa0\\G\xcf\xb2\xec\xc0\xed\xa5\x98L\x15\xc2\xced\xdc\xda\xb4\xa1\x87mQ\xb9\x85\xd0+\xa5\x1c^\xc4\xa10G\r\x13\x80H\xf4\xf5\xcd\xb0\x1e[\xe5$\x06\x15Q\xa4\xb1\xe2\xfa/\xdd.M\xf10\xb8y\x82Jj(\xee\x04\x06\xa0\xf8\xbe\xefO\xd21\x19\x82ciqX\xf9\xc3\xae\x15\xb4?3\xc2\x11\xac\xdf\x8b\x12z{\xb0\xfa]\r\\,\xb2,e\x9e[>\xf1\xd0uP\xd0\xca9\xc3\xab\x14\x934\x8f\xc4,\x93\x8f\x82\xc6\x17\xb4\xe9\xb0*S\x1fh\x92\xf1\x91\x92\xc6\xb7"U/@\x82K\xd1\t\xe1\r\xad\xfb\x86\xeb\xd1\xc5\xf3R:\xab\xbbR\xb7\xb8SJ\xd5\x13\x98\x1fX\xe0\xa2\xc4\x1e\x17\xfe\xb4b-\x02\xe2\xf5\xac\xc2f\xfbK\xf1\xb7:w\xd7.\x89 \xfaz\xf2\x13\x9a\x9e\xa4e"\xde\xcc\xcf\xeb\xd1%\x1eaWV\x8d\x85\xb9o\xa5\xbb\xb9\xe4\xbf\xea\xf6\xf1\t\x7f\x05\x10\xd8\xfet\x05~J\xd7\x8b\xebbk\r\xbcb\x975<Z\x85\xff\xe5\xdc>\xcfjN\xf9\xde\xef\x83\xfa\x87^\x14h\x8c`\x99\xde\x0e\x99)@\x0e\x90]\xeaM\xdd\xee\x15\xf2!\x12\xbfoq\xf7\xfc;\xf4\xc1t\xc8\'\'7\x81\x14\xe2\x02\xfa\x9f#\xd2J)\x98s\xe2\xdf\xf2\xfeC\xb0\xa7\xe4\x94\xdf\xaf\xf3\xa5\x05\x85\x93\xaf\xa4XG^\xb4"\x9eq\xd3\x91\x9a\x92\xb4|\x1eJ\xf0U\x81\xdf\xaa\xe2\x83^2I>%\xa0\x11\x7f\xe6\xa0Y!\x9c\xf1B:\xbdK\x07W\xe2\x9e#{\xe5\xc1\x954\xd3[\r\x8e#V\xcb"\x83n\xa2E\x92&bl^)\xb8y\xc6p\x86\xbb\xd4\x8ct\xd4\xed\xac\xae\x81m/1\xa4\xc4\x10_\x92#Q\xach}\x97\x99\xd2=\x83>\xec\xb9\xc4\xd6\xc9\xaf+CUE\x99\x18Y\x04e*w\x0b][\xcc\xd0\xeb\xd7\xe0\xd1\xe8\xf5\xd6\x89\x08\x07\xef\xd7)x\x00\x90G\x07\xd4\x16\xa0\xa8\xc8\xc6\xdb\xc4\xb1V\xec\x01\x95\xa9:\xb6\x1b\xd0x\xb3\x19-\x99%\'#\x92\xe9\xed\xf1\x91=\xa9\xb6\xd7?)y\xab\xc9\xc4\x99\xde\xbb\x93\x14\x87\xf1@\xea\xf8(\x9c\r\xe5\xb5J\x02\x03\x8f";\xe2s\xa6\x7fs\x1d\xaf0U~\'L@\xc1\xf5\xdd\xf81\xcf\xa1q\x92\xf1|\',\xa9\xe62\xd4V\xab\x1e\xfch3\xa1\x1f\xdb\xa4\xee\xb7\xae\xb7\xc1\xdc\xe5\x07\xfbn\x90\xd2"\xfb\t\xf9$\x18\xfb\x078\xdb\x8b\xaf8\x83\x927\xa4\xb7\xa8?\x96\x0fP\x8e@\xc6Q\xf1\x0c\xed\xae\xfb\x84\xc6U6?\xd34\x00*\xf7_Z\xb2\x1b\xc1>\x08V" u\x03F\x97\xb0[V$4\xe2\xab\x10\xe8\xbf\xd2\x81\x82\t\x868%M\x0fe\nc\x99\x0c\x90e^\xb0$\xa0t\x89\xfe\xf2\xd0\xd3,\x0e\xa2"\x8c\xa6\x01\x06v\x8d\x8a\x1bx\xac\xad\xc5\xf1\x80dw\xee\x8azC\xfb\xb8\x05#\xb3\xf0N\x0f\xb8\xa1\xcf\x03#\xc6J\x05\xb6+}\xc6n\x0e5\xdf\xb8\xab\xa7\x8d\xcd\xcc<\xd1~v\xd3h\x10M\xaa\xdc\xc9Z\x99\xb9\xe2\x90g\x1c\xa8Ps\xffc\xb2)\xef\xc1x\x92L\x05\x01\xcbz?\xd4+\xad\xbc"\x04]\xca\x96r\x89\x8dN\xe0?\x06\xe91Og\xb2D\xe8\xea\xa5\x08\xf1U#\xef\x81\xb7\x88\xf4\x01I\xdds2.\xb6k\xe8\xd6\xf9\xa6\x13\x86\\\xc0\x86\xcd\x85\xc9\x80\xf0\'\xdc\xf7\xd3Q\xb5\x926\x18H\xbff\xa1\xc8w\xa2]\x1f\xfa\xcdl\xb7\x0f\x10\xa9\x88\x95)\x9cJ;1\xcb\xd8\xe55\xce1[K%:\xef\x8b!ew\x85\xfdM\xc2\x1b\xcdrw}\xc4k\xa1\xbb\xf6\xd2\xd6\xb1E\x1aO\xe3$:\xa3\xee\xe2\xd9H\x91]\x8f\xfe\n\x98\x1d\xeb\xf3\x04\xbd\xe3\x94\xc8\x1e\x11o\x9a\rt\xc6B\xbd\xda\xed\xa7\x9e\xafY\n\x89\x05\xe3\xc4%\xb02{c\xc5\xcd\xac\xe7\xc2\xef\xbd\x95\xb3\xbe\xdc`d\x8ca\xb7\x08<\xd5\xe4/\xf7\x0e\xaa\xdf3\x1d\x99\xfa\xda5\x19\xd0r\xa1:Z\x99-\xf6\x1aN\xd1\x80\\\xee\xae\x9e\x83u\xa6?1\x8c\xddl\x0c\x98\x89\x1b\x00>V^CW\x94s\x8a!\x93$/\xc6\x17\x98\xf2\x02\x0cD[iwH\xee\xa2Y\xc6<\xc3\x81\xa87\xd2\x08\xba\x97m\x83\xce\xd0\xc0\xf6\xa1\\\xcam\x10\x99\xa2\xbb\x96{B\x92Kf\x84N\xc5\\\xe7b\x0f\x92\xe2\xcc)\xeb9J\xab\xf0~Fj\xb4\xd1\xd1Mu\xad\x16\x9a\x8dN?\x92\x08\x9d\xaa0\xb2\xba\x16\xec\x98\xb9\xe1\xa7\xd77n\xa0\xe4\xb3\xa5(\xa9\xca\xab\x13s\xf2\x12\xa5[\x88\xad\xb7X\xf0e\x0b\x99\x88\xcbUw\x8axkb\x0f\xf2i\x18n\x194%\xc8m\xd46\xfeD\xb0\xf6\xe9\r\x08\x8e\xff\xec\x8a\x81[h\xa3\x88\x15\xb2\xea\x8d\xee\x13/\xce\x0b\xf4\xd2\xf6\x8f})\xbf7R\x9d[\x9f\xe6\xb9\xa3\xb2\xf4k\xb4c\nZ\x02[\xa7\xc1\n\xd4\xaf\xd0\xa2\xde\x13\xa1\x87*\xfe\xf5\xa3\xbd\xb1\xebN\xfc\xaf\x9b\x8b\xc8=CpZ\xcb\xf7=2\x80\x05\xa0\xe6\xb0\xf1\xf8\x82F\x7f}\'b\xf4\xd5\xd5k\x12\xcc\xdf\xfdT\x19\xee;\x8d\xc8c\xb7Z\x01\x14\x9c\xd1~\xe3\xc7\xd4\xb9\x1dz\xc5x\xaeE\xbb\xafd\xb7\xeb\xad*K\xc0\x9d\x94\x0c\xe4\x87(lig\xb6\x9e\x07\xf6\xf1d\xa5\x8c\xcb\xbb\x1aP\xfe\x96\xc5\xa7j\x0b\xf6G\xbd\x1826,\x9e\xb0\x9fV\xdd\x1a\xe6\xe4u@\xcb\x05?d\xcc\xe4\x81\x7f\x13\x92\xb6Q\xdc\xaa\xd9\rfaYa\xa0\x0bwqtLz"u\xfcb\xfd\xea}\x93g\n\xadM_\xaf!j\xe6\xab\xb6\x87.\xcb\xcd\x8a\xec\xe5\xe5\xa4\xb1\xd6\r\r\xb8\xd7.\n\x1a\xe4\xa3v\xbdd\x03\xc7\xac\xeal\xf01\x1a."\xab|\xbd\xb1<\x11\xc9\x98\x87\xab\x11c\x94\xb9\x930D\x0e\x1d\xf8\xfdk\xd8LTI\xba\x1e\xccip\xdd\xb6\xfb\r\x13\x118\xaa+\x00??h\xfd\x82]m?\xb6x\xf2\xfe\xbf\xe2\x00\xf7@\xb5z\xcbj\xc3\xda\x8eidr\xf5\xc1\x1f-\x11\x0bB\x93\xd9\x14\x08\xb5\x82\xf7\xe81\xacaS\x94\xdf\x7f\x96\xc9k0G\xb4\xb7\xed\x0bX)\'\xd5,\x84c\xf8z\x85\x0eL\x8f\xd5\xfbk\x86H\xbb\x10\xc5\xfa-n\xe2\xfc\xbd\xc2`\xa1\xf75\xd2V(\x8bG\xee\xd8\xff\x10\xbd\xda\xaa\x0e\xd6)\x84-D\t\xe6\xd8\xf4\xff_._\x0bM\xf7\xfe\xee\xa9\xa2\x9fn\x18\xd0\x08\x8f\x03\xe2\x18\xd9\x9aA\x0c5\xcb\xf5B\x0c\xa5\xeb\x03\x02(a*\xd8e\xbb')
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:22.108178
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x001\x04\x00\x00\x12\t\x04\x00g\x01;\x8e;\x9e\xab\xc2\x8a\x9f\x97\x81zH\x96\xf1\x00\x00\x00\x00\x00\x00\x00\x00\x85\xdbv\xeb\x19\xfb\xb8?X\ta`4j\x83\xd5t\x1c\xeeY\xec?\xed$\xc1G8\xf1f\x9a\x039\x1a\xf1d\x18\x1f;$\xbdKX\xf6\xe9\x8b\x8e\x84\xee\xca1\xf2G\x18\x96\xae?eGB$\x05_r\xd5mu\x87\x04S\x82\x1a\xa1\xbe\x08\xc8\x87vM\xaf\xbd\xd0\xcdZ\xa3d\xa1\xf9\x90\xc6\xf5\xf5\x80\xa1\x19\xcb\x97\x0e\x97v\x99T\x98M\x97\xc2\x17\x91\n\x9b\xe6\xa8\x032Wa\xb0l\r\\\xbd\x80\xc5\xbd\t\x19\xd7\x12\x89\xc4\x8b\xf8\x06\x19k\x91\xf0\xa7(\xc1F\xb8\x04\x96\xa9\xec\x90^\x7fV&\x85\x10\n\x01J\xd2JEl1\xd4&\xd2\x92\x05@\x8a\xa0\x9d\xcc\xe7rXG\xc2\xab\x95\xb7\xb6\x186`\xa2\x18c.K\xbc~n|\x16\xc5\xb6\xd6Gr4g\xab\x08\xc8|\xef\xf4hW\n\xc6h\xa7p\x18C\x0e\x9d\x99\xcbs\xb2GY\x03\x08\x97~O\xa0l\x97\x04\x823<:\xd5I].\xc1\x1d!pL\t\x18d,mp\xa8^\xf8\x04\x1f\xe6\xe5V\xa0d\x88\x1b\t\xb2\xa2\xc4m\x9e\xdbR\x14\xdd\xbc2k`\xd8\xec\xa1\x0c\x88ia\x0ed\xb4\x86\xad\x0b/\xbd\x85\xf1\xbc\xd7\xe5\xc5$\xd9b\xa2~\xbc\x13U\xb3Y\xed\x8d\xb8h\xdbX\xf1a\xa6gi*+\x86\x8aH\xaaS\x00\x01\xd2\x0e\xc7f\x14?V\x9d\x13\xa0\x82-\xfc\xf9\xb5\x19\xe5\xff\x16,Y\x8a?\x0c\x9b\xb8t\x01\x0c\x19\xcd2\xf9\x83\x95B!\x05\xa9G\x1f\x85\xc5\xf0e\xdb\xfe\xf9\xe0\x952\x12\xf3e\x16\xe4\xd5\x98\x82\xc0\x14\x94m\x91Qb\x86e\xc8\r\xda,#M8\xb1\xfd?\x16R@\xf1m\x97\xb8\x1c\x94\x93\x8a\x9ek\x06ob\x14\xd9\xfb\xb2zC>\xd5\xf5j\xd4\x0f7\x8d\x02l\xbe\x99K\x1e\x8e\x85\xf0\x99\x07>\x14\x91N\x1bHj\x14_F\xf0l\x9a\n\x15\x04\xfe\xa5\xd3\x9f\'1\xbf\xe3\xf8\x13]\xcdY\xe1\xadn\xc8\xddk\x16D\xc1\xc0\xefg\x98\xa0\x02\xc9|\x17\x1d\xff\xec\xf0\xb8\xcdTV\xb2\x05\x9fJ\x19\xb2\xa1\xe1\x94z^R!S\x96\x98\xa3?\xd1\xfa\x0f\t\xdfV\x8dIE\x08\xb8w\xe4\xbe\xcc\x98\xf8L\xc5,e%\xe3{\xb2\xed"PZ\x81]\xf7\xe5!I\xc5\xbe\xbe1\x9fS\x84"\x8a\x9c$Y,\xa2R\xe1\\\xdb\'\xd9\x864]*\x88\xb3\xca1\xa1\xde\xc3H"\x91\xe6\xd9\x93\x07\xd8\xd5m \xf08A\x94\xc1O\x85\xe9\xf5\xa2\x15\xbe*6\x90||\xa9u&\xd7X\xffV\xb8\xccP\xe7\xdb\xf2\x8d\xf5S\xd7\r\xdf\xc3/~{\x94{\x8e\xf3\xc1\xca\xfb\xdd\x9c\x11\xd4\x9f\xffx\xa3\xff\x0b\x99L:\xe61s\xa0.\xfc\x90\x06\xe9S\xa9\x1aN\x89\x14\xc4\xa7\x95\xa3kl3?Z\xb7o\xb0}\xa0\x1f\x0c\x87>]kE\xd9\xa5\xed\xe8\x8f\xb2\x0f0\xc6\x04\xe5+\xb4\x16\xdb\xd12q\x07>z~\xb3\x7fK\xc7\x07\xb9EM\x99H\xb4Q\x10G\xf7b\x19\xf2\xaa\xd1_\xaamT/<\xd5\x17\xf8Fo\xae\x9e\xeb\xa5\xd4s:\x19\x18h\xc0\x7f\xd4\x15\x1e\t\x83\xa8\xe4Q~\x8a\xa5\xd0\x8b\x8b\x99\x85{IM\xcaB\xa4\xfbD\x8a\x1f<d\x084\xacM\xde}\x99\xe71\x8e\x95\x90\xfdP\xda\x15!o\x95u\xd3\xdf\xf7j\xe4\xf6IO\xc0\xbd\x08\xed\x87\xd3\x9a\xfb\xde\xd6\xdc\xd2@\x1b\x1d>\xc0\x0bl\x84m\xea_kH\xa63\x89}\x0e\xb7S\x97;\\z\x12m\xb2Z\xa4E\x11\x9e\x15\xe5\xc9t\xe6%*\xfc\xb7\x0e(\x939\xbesgD\xb6\x9a!\x0b\xdd\xce\n\xf8R\xeck\x9c\x85?|\x0f\xf2\xed"2\xc7\x03\x98h\xe0\x14\xec\xd74sA\x8eG\x89\xcb\xe4\xeb\x9f\x9b\xaa\xd5gO\xb4\xbe\xfd\xea\xa5\x025E\xfb6\xfd\tM\xe01\xc4D\x8dn\x9b\xac0\x1f\x959}4\xc5T\xb9\xa9a\xcb\x9an\xe83\xf6Eg\x8e(\xc9\n\xf8\xb0\xe0\x7fv\x10p\x9d\x19\xfdG\xffz\xb3\xd4,j\xba%E\xadh=\xa6\x94\xc3\x92\xa7\xb4UI\x90:\x15\xbfP \x84\x0b\x11,\x13\'\xca,\xdb\x0fe\xa2Y\x84\xb6"\xbe\xfe\x0eMD \xc1#\x0e\x9e4\xcd\n\x98\xda\x8c\x93\x1f\xf0\x95+\xec43m\x83\x13\xea\xed"\xf5\x98s\xbc\xf2\xee\xb3\xa4\x07bG\x13\r\xa2\xbf\x83\xa0\xc4\x9bJ\xb1 8\xfd\xdc\xe2\xf7\x0eT')
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:22.117612
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00b\r\x00\x00\x12\t\x04\x00J\xfe\xe2\x97\x8b\x87=\xb7\xd4\xd4\xd5\x9e\xe2\\\x90\x18\x00\x00\x00\x00\x00\x00\x00\x00y\xc9j*\x15\x1e\x7fm\xb8Fa#{z\n\xe9$F\x9e\x99QL\x10L3S\x8d\xa7\xf1\xa57\xb0\xea\\\xa8\xff\xc7\xe7\xa7({\x01\x88s(\\\x97O\xa6\'\xfa`\xff\xe8\x82\x87\xc9C\xdc\xc2\xb7\xff\x14=\xb3z/\x08\xf5\xe6,\xa2o\x97g\xeb{x5\x1fY\xa0m;\xa4\xa7\xf5\xff\xc8\xfd\xa2\x96\x04\xb08\x98;6\x08\x95\xd8;\x97\xd2\x87c\x98>r\x7f\xabv\x06\xa9\x14\xe4j\xfa-\xd9\x9c\x1b{\xe8\x99\x1b\xe5\xa4\xd1o\xb1sk\x8fM\xbe|\x1e|\xa6\xa8\xad\xf4\xe9K\x8f\xd8\xec\x03m\xf9i\xb0\xe7r\xca\xab\x1d\xcc\x1cj\xc5\x13\xda\xd7t\xdb\xcc\x17\x84[N\xc3_\xdf\x08\xdb0a\x07b\xfd\x94\x85w\xd0\x9d\x1c\x81\x81\xa3\xef\x95e\x05\xaa\x0f\xbbd\x9d\xb5Z\x80lf\xe7\t`A\x18\xd2^\x82\x9d*\x9c\x9a\xbf\x91\xc0\xb3y\x1d\x01\x1c\xc2\xf3G\xd6R\x1b\xbch\x00~\xcb\xcd\xf9U\xe06"\xf9\x81n\xe4\xb7\xe5q\x98\x88Q\xa4m\xbf\xc2\xb2h\x18\x876\xf9q\xf1\xfa\xbd\xa7/\x9f\x19\x0f-\xe4\\ \x89\x82\xea\x8a\x0c" 2\xa0j\xbc_\xed8\x8c\xa45\x1c\xa5{c\x12\x13R\xc6\x9d=m\xb7\x95\xa3\xd3]\x92\xf0\x89\xf6|W!"\x89k\xcc\x82\xfcB\x88\xb6F<\x8e\x9f\xa4tX\xcdu\xcf\xbf\xa4\x00\xd8]n\x8b}\x02U\xc2_\x16\xca]K\xe9\xfc0\xe56\x86}\x02\xb09)\xccb\xfbB\xf6\xef\x98\xe9\xd7\x19[\xc6`\x19\xa0\x8a\xe9i\x83\x8b/\x0c\x17T\xc05\x1eu\xacd\x86\xac\xc8#\x05%Cu\x06\xdf\x8e?\xf79\x08\x9b\xaa\xebe2b\xde\xbeM\x99 \x87\xa3d\x8e\xcd\xffR\x877e\xcc\x12T\xd6\xeb\x13\xdcFjZ\x82_\x99Q\\u\xdb\xd7\xf7+\x8e\xdcE\x12U\xf9|\xeb4%\xdc\x9f\x98)\xe4Z\xe5\xe2\xf5\xa5\x9f.e t\xe1\xf3\xf7\x82B\xfdB\xb9U\xd6b\xb0r\x8d\x19\x12NY\xa0\x1dz\x13\x1a\xdb\xb1\x12/-\x1c\xa7:\x15\x1e\x1e\x19\x9b\xb4$\x0c\x92bR\xcf\x1e1\xb4\xa8t\xf2#V\xec\x1c./\xc3\xed\xea\x8a\x86\x85{\x90$\xbfTQ8RN\x03\xd0E\xfe\xa1k\xf8+\x90\x9b\xbf\nn\xfe\xf9\x8e\x81\xb6I\x1a\xb8\xb0\xb3\xbc\xcf\x1c\xa7\xb8\xf7L\x9d4\xae\xef\xfb\xd6S\x0c\x93;\xe7\xf5\xbf\xd2v%]\xc9\xfc\xf9\xc3\xe7\xfb\xff3\x97W\xb9\x10\xe4\xb6\xb1\xe9\xa3\x1ab\x99\xf7\xe8\xb3\xe6\xc5U\xfd\x93\xecw\xa0\x85\xaf^\x04\xa1~\x9a\xf9\x1dE\xdc\xaa\x0c\x8bW\\\'T\xa5\x1bGF6Md\xf1\xedP{\xf3\xebc\x94~\x92{2\x9c\x8f0u\xb3\\!pF\xec\xee\xd4\xdc\r\xe8t\x93\x87I\x14*\x92\xe8\x1c\x16\xdd W\x102\xc6p\xb6\xe9X*xp(\xc3\xa9\xce\xdf\xfbe\xd8\xe5\xf5sP\xb9\xb8\xf6\x8e9\xc7\x82L\x13\xee\x8a\'\x9c\xfb\xbcR\xa8\x85&\xb8CoWKUTK=\xdb\xa9\x8a\xb0\xc0\xc2\xa0\x1a\xfb*{\xb6\x84%\xb8\xd4\x0cZA\xb7\x8f\x9e\xae\xb4\xc6\xd2\xe6\xd9\xfbI>9{x\xea8`BN?S\xe8>F,\xc3\xca)\xa4\x92\xb6\xb1Q.\xd1\xe4\xfd\xad\x0ex\xa59\xc5Qt\x140\xd9\xa5|\xce\xea\xd6\xa9\xd8K\xf4\x970\xb1Kt\xb9\x10\xe1Q\xe6%\xc7\x11Y\xdb\xdd\xf6mLBJmC\xed\xb5!l\x8b\x9f\xd7\xa2\xa1:\x17X\x89\x9cR\xb8\xf3\xea\x1a\xa8\xe2\xd1O\xf3\x12\x18o\x8ctNY\r\x1d\x96\x91\xf2%\xcc\xe5\xa9\x19P\xbbz\xd8B`4\xa4H\x9a\xfa\xc6\xa6\x94\xb9\xb4\xe6\x12M\x11"\xb6\xb7\x11\x12\xbd?\x80\x0bYev\xd4K\xd88/~\xe4\x804\xd0\x99&\x19\x08-\xd5a\x90\xadp\xaf\xa0&.\x8aM&\xf9aJ\xdf\n\r\xf1\xc8.G\x8d"\xd4\xaa\x073\xb8Z\xa5\xd8\'\xed\xfdz3\x1aM\xfbCF\xf5\xdf\xf6\xf2(\x91\xd0\xc3\x8b9\xc6\xd8JY\xfc\xd79\xa3C)\x0b8)\xdc\xdc\xe84_m\xfb\xb2\x89\xdbm\x8b\x83\xdb\xb2Mw+\xad\xc9\xc7Y\xf5M\x17\xbf\x12\xf9\xd3\x01\xb5\xe9\xb2\xea\xfd\x9e~XU\x07fF\xf6&NmlJ\x08\xe6\xf7\x1d\x90\\\x03\x92#-\x1fOG\x96`\xf6\xa3\xb6\xdc\xf7\xab\x15\xcbb\xe3\xf7A}\x0e\x14\x98\xacw\xf8m\x08\\4\x84\xde}\xbb\x01\xf0\xdb)\xa5b\x12\xb3b \x10\x90_\xba\x9b\xd5\x02\xce\xec\x94\x0f\xbd\x8ew\x0c9\x89\xbc12\n8\xce\x0b\x9f[\x99[\x83\xa9M\x00\x8b\xb4\x06w0\x95\t\xcc\xe6\x14k\x07\xdd\xca\xaev\xa9\t<\x16\x0e#\xde\xe6\x8d\x8b\n\x14&\xb1\xb5\x83\xe6\xa8\x0bJ\x9bA\x7f\xb6s\x1c\x9cC\xf4\x95\x83\x92\xa4\xd5\xba\x95\x1d\xcf\xd5\xef\xf6b\x12\x1f\'z\xbf\xb9\xeb\x9e\xf9\x94\xf85u\xeb\x18\x12\xe9\xacpq%\x89\xe0\x01Q\x9d\xff\x18y\x1c\x08\x9eO\xbb\x8a*\xc3\x02)}st\xa9\xb0\x8a\xb6#\x11\xb1\x91x7\x8a\xc9\xd7\xf27X;\xee_\t7\x84T\xaf\x06\xd4\xb5\xf8a\xf5\xd6/\xbe\xbc\xfb\x88vM\xff7\x89X\xfb(\x08\x1d\x99>\x18\x81\xe5\x93Te\x81^l\x82\xc4\xd9\x88\x9c\xf9h(d\xe9\x99|\xf9\xfd\xb9z\xa3\x00\xaeu\xebq\xf5\x07\xe46\xabK<\x06\xa9P\xb7(\x01\x1cS\t&\xb9\x14\xfa\xcb\x1d\xe9H\xf3\xe5\x19S\xaf\xf3\x89=\x9e$\xcc\n\x83\xb9pC\xa3A\x1b\xb8\x8ej3\xac\xce\x1f\\wM\x89\x85y\xf1m%\xc5\x93\x82\x8a\xdd\x00\xc4\x9d\xd2\xc7\xb3NR\xb8&\xa7\xa7@\xfc4o\xed\x00Y`\x18\x14\xd6&E\xad}7 \xe8\xe3y\x93\xee"w\x86\xbept\n\x00\\[x\xed\x07\x8f\x8cXx\x15\xb5\x05= \xa4\xe1)>\x92\r\xc4\x80\xc1\xf2\xb0\xa4P\xe1\xe6N\xa3\xf4\xe5\xed\x14X\xad\x95\xb8\x8dQLy\xd3A\x02O\xe9\xb2S\xb3\xe5\xb9\x84\x11\xfe\xf3|\xc81d\x15\x00\xf0\x1dA\x84O\x08\xab\xbe\x0e)\xd0\x03V\xc2\xe7\x0eE\t\xd5d\xb5s\xa7\xf5A\x1d\xb5\xae\xb0\x0c\xa3\x83\xeey\xdaT\x10\xa8\xd0P\x14\x1a\xa7Le|\xa3\xcc\xa1\xb8\x15\xe9_r\xafQ\xcf\x8f\x11\xe7\x19_\xd4\xaah7\x97\xfa\xabJ\x9bL\xdb/\x11\xb6\xd6\xb1\xba\xb3]\x9a}\x1c\xc5\x1c\xf4\x01\x88\xef1\xe9\xa9\xf2n\x9aM\xa0\xacy\xb6\x8c.X\xfdy8\xaf\xa3\xa3+\x8b\xfcapU\xf4\xb3\xe9\xd7\x1e\xb6L\x94~\xd6\x03\x80\x06H\x0e=h\x80we\x13gj\xa1\x91\xb9\xee$\xd1\xa2\x8a\x9eWB0\x04g\x97\x14\xe4\x97\x99\xcei<\x84_+\x02jvN\x8f\x8c\xe3S\\\x81\x80%\xe1:\xdd<v\xa5>\xe0\x04\x9b\x90\\\x0b\x99\x19S\xb2Kb\xa0\xa5lt\xc1\xad\xa6tD\x8b\nf\x82S\xb9\xe9\xea\xa4\x03\x14C\xba\xbd\xef\xfa#\xfcT^\xb7\x05\x9a\n\xee7\x18)\x93%\xd6\xbc\xbc\xa9\xe7\xd3\xb1\xa6O>\xff\x8c\x13\x9d\x9d\x1d\xb7\x8f\xb4K_\xf9\xe4s&=,\x7f\xa4\x80r\t\x02Z\xdf\xb5\x93\xf6\x01U\xb6\x16\xba\x82\xd5\xb8\xd5=\x0f\xf6\x12\xd9<\xfaT$\x9di\x9d\xce\xffq\xae\x82\x96\xc6\xd2\x9e\xb8Z\x04\x1d\xb7\xc9\xea\xc1\xeb\x96\x1d+T\xf1 \xd3j\x94\xd2\x19\x87\xfd\xf4\x9e\xa0mYLHu\x0b\xed\xf0\xb2\xba\x95\x11\xee\xf7 \xae\xf0\xa2dE\xdc\x89\xae\xd5\xca\x9c\xe8\x9bJ\x88l\x83D\x9d\xb1O!\xed\xcb$C_\x11R\\O\xc3C\xecj&[\xb8\x81\x18\xd95R\xf6r\x92C@\x15u\x03\x85\x14x\xdf\x87\xca\xb0\x1a\xfex\xa8\xb8i?1\x1b\\\xd8\x94\xeb\xc2\x95\xf20@\xf4\xef\x07 t\xf2+n\xe72\x92\xc4\xb2\xbdi\\c\x87;\xb2\xc2\x9e\xe0a\xd4\x10\xd1\x822qO\xf8\x0e+\x99\xf7\x96,\x17\x87+\xb2\xfah\x1ff\xaf\x025\x9a\x1c\xf5\xbf\x83\x82T\x9ag\xbb#\x9c0-\x0b\xd1CZ\xb1\xb3H\xf8\xcae\xa5\x98\xadI9jP+\x97\xa2\xf1\xa7\xa3\x90\xda\ryv:@\xa2\xffO\xbb\x8c\xfc\xf0L]\xb0\xaa\xb7?l\x1fS\x8e\xbeR\xcc\xe1Y\xef\xd9\xb3i%\n\xb2\xd1Y+5\xee\xdcA"\xc7\x13td\x8e%\x91\x88\xb6_\xe3\x1c\xf3a\xe6o\xffS\xf5\x10\x7f\xbeJ\xb6e\xca \xc4\xc3 \xa5W\xe9|:\x1e\x84\xa3\xf6|\xe5\xe0\xa9\x8e\xd7s>\x98\x0eF82\xb1&\x99\xf2\x18U\xbc\xbc _t.\x86\xaa\xdf\xf0\x18L\n\xa9_6\x95\x98,\xf9\xe8\xbb\xd56R\xccI\xe1\x18\x0c?\xcd\x01\xa5s\x88\xf3(OY\x93r{\x80\xbb>\x88\x94\x89\xf4\x15\x91\xbe\x81\xd7\xd7\x9b\xfc\xe9\xe2q(\xb0\x1f\n\x94\xe3\xa6\xaf\xae\x88X\x86\xcd\x909\x7f\x8f\xf3\r\xb8\x11X\xa7\x84& f\xbd\xf4\x11L\x9d\xa3\xb7\x95_O\xb2C\x15\xaf\xce_8\xe2;M\xa4\xa0\xd5\xb9\xe7\x84\x86\x96Y)\x12\x13b\x15\xca\r\x9d\xe8\t\x98\ra_\xd82\xdc_\xb3\xdf6\xd5"\x02dT+[\xe5\xef\\\x0f\xea\xf6\xe0\xbdd\xf6!\xe6\x1dp\xfe+\xb4\x04 R6\xd1y\xc7Z.\x07T\xa1\xae\x0c\xe3K\xaf$\\\x99\xf9\x00\xc4\x93\xfd\x08~S\x8e\xcao#\x1d2\xd3\xef\xb0-i\x12\xc0p\xd1J\xab\xe5\x01\xa4gY\xcf\xb6\xa2\x86K\xf9s\xb2kq\xba\xc0t\x0bs\xa0\xac\x07\x8aKK\xae]\x06!?\x98\xdbeb\x93\xe9}\xf7j\x06O`\xe9/ \xf4\xbb\xfcm\x87\x9f\xc5\x15~\xa6\xe2\xd5gn\xf2\xe2\xd1\xd1%2s\xdd\xbb\xf1\x14H\xfd\xc5\xd0d \xb5|&.{\x89\x0b\x8b\x95O\x0e\x02\xa4\x00{\xa4d\x19\xaf\x91\xba\x9c\xed\xe9\xaa\x8f`:U\xb9+\xb9\x1d\x04 V\x13\xca\xb1E\x0c\xb4[\xc0\xbf\xb8\xd7T=\x9b\x0e.\x90\x03\xecE\x86\xc6\xd8s)\xe0\x87\xfbH\x8b\x96\xcb\x13\\\x8e\xc3"&P\x07\xc1 ;"Nl\xeeN-L\\\x0fS\x0f\xd15j\xcfA_ma\x91\xfc2\x88]\xdam\xed\x9c\xcdM\x12g\x9e\x8f?\x88\xbd\xcf\xa7\xf7\x06\xcal\xce6\xef\x04\x12[\xf5\xd4\x08\x9am\x084\xd5\xcb\xcf\xa7\x96\xbe\xdbv\xed\x86(\x80\x7f\t\x1b\x1d\x13\x1cb\x85\xc3L\xf7\xc1\xcb1\x1d\xba\xab\x90-\x9c\x0b\x86NlT=K\xaa\x8c\xb2\xdbI3\xdc\t\xb5\xfb\x8c\x134%\x9f+\x9a\x8ew}\x0c\xdf\xfa^I\xc0\xfd\xd1\x98:\xacI\xc2\xe8\xe5\xaf\xde\x1b\'\x7f\xe0P\xe7\xce\xe5\xe1\xbc\x9fGp\xb7L\xb8\xf9^\xbe\x01E\xaf:\xa8M\xafS\xb0\xce\t)\x0bh\xdd\xde\x98\x8f\x93\x97\xee\xb3\x9a\xf6a4\xf6&\xa7\xe7\x1ct\x8c4L\xcc\xfa\x98\xe2~\xe4\x9e)\n\x9d\xd7\x7f`S\xef\xfa\xe0\xb9X\xcf73R\x91`\x1b\x95\xe1\xa9\xba\xe3\x05e\xab^\xc6\xdfV\x0c\xdeOb\xb6h!\xd6.\x9a\x16\xe87?@\xa8\x07\xc0\xd2\x9b\xcfx?<\tC-\xef}\x16\xff,Kq\x9a\xbc6\x98\x7f\xa8\xe5+\xeb\x85\xdbi\xfa2m\x83\xd8uf\xcfU\xe0\xd8\xd8\x9a\x9f\xb8\\\x1f\x08\x18\xa7\x1d\x80\x971\x90?\x0c\xb4\x86u?\xbc\xa6\x06\xf3\x0f\x0f\xc3D\xa6\xa3\xef<\'\x91\xd7\xc2\xaa\x01\xbb]u`(\xf0\x84VJ\x96a\xc5\xe4M\xdag\xa4\xcb\xba\x86\xc9kj\xe5\x97\x8d\x18\x0e\x88\x88g,]\xf5\x0b\xaee\xe3\x7fb\xb6\x88.\x1e\xf2\xf9\xd9\x16\x04LR\xc1FyHD\x90\xf3\xe4`\x8b\x19\x07&\n\xe1\x93\xac\xf7\xaf\x03\x14[\xf3/:r\x8b\xbcqj8:z1\xbc\x96!\x9f\xbb\x82*82\x01\x04+\x90Y\xc3\x01N\xfaAK[-!\x81\xa8r\x8e\x8b\x16\x80\xc7\xc3\xacy\x06\xec\x96\x9er\xa6"_7\xb9\x96K\xb3\xaa\xa5l\x85N4\xbe7u\xf4O\t\xfe\x86@\xb4{\xd8\x14\x9b\xd1z01\'\x83\x12\x8e@\xb3\xde\xca8\xaeoimL\xfd"\x9b\x9c \xe3\xda#\x1d z\x90\xf9\xfb\xa1\x0b\xab\xe61x\x00\xa1\x81M/\x81\xc7#\xbc\xe9\x1d\x89\xa6\xa7\xa1\x1b\xec\xe8!\xf0\x06\xd3\xdbn^\xb1\xc0\xb2\x08\xbb\xb7\'\xe5g\x8c\x87\xcc\xd6\x8c\xa7V\xa5\x06H\x98\x06\xdfn-\x94(\xb9\xb1\x83\xbbl\x02\x1c\xaf.\xa7\xcc:\x06\xa4\x80R\xb2I\x8f[]\x07\xe1l\xabZ0\x97\x013\xffRH)#\x90\r\x9f \x9b\xc6\xa7\xccd\x89E\x8d\x1e7\xe3-g\xf3\x03\xc6{U\xadZ\xcd\xa0\x97\x01\xff0<;7\x8aK\xb2\xe2\xac\xb4\x10V\x7f\xb2\xb7\xab\x17\x1d\x87[s\x00*\xa2\xb8p\xc1\x9b7\x19/\xd0V]\x079J\xebhnp~\x94>\xe3\xa7\xc1;\xb0\xf5\x81\n\x02u\xf3\x88\xa2\x93\xe7jH\x18*\xfe\n\xa1\x17o\x90L\xdd\xb0\x85\xd3\xd65\xb0\xcd\x1d\x16.\xaf\x9f=\xecto\xe0\xdaZ\xb5V\xd3\x19v\xdd\x1a\xe2\xeb\x1b\x89\xd7\xdc\xb9\x0c\x8d\x1cR\x8f_z\x19?\xc4A\x82=\xed\x81\'hL\xb9\xe7\xc7\xe4\xde\xd5qh\xa34\xf7\xc8\xae\xa8\xcc\xc3\xbe\xc5\x9aq\x92\xf5\x9fp\x8a#j\xc6\xf6\xdd1"\xde\xcf\xfc\x9e\xe8\t\xa5\xf0G\xa2QV\xfeg\xf3\xf9\x9e\x0cE\x9c\xba\xd5U8|\x96\xfb\xaf\xbb\xf7\x8d\'\xbf\xbe\x87aZ\xcc\x960FBv\xd5\xben\xe1F\x85\xedQ\xa1jL7\xca\x05\xacm1\xfd\xb3\x03\x0c\n\xec\xff\xb5\x1d\xfc\xd9\r\x9a\xb9\x83\xe2\x1b\x1c\xac\xf3\x06\xc4\xf3\xa1\xca\x00\x04|\xf6K\xfev\x9b\xc3-b\xe4\xf5i\xfa\xa6\xd1Xz@+\x8c\xc9\xe7\x87<\xab\xfd\xc4 \x1eYx\x80\xfd\xe7\xc7N\xa9\xae\x0c)vbs\xec\xef\xe9\t\x82`Q_\x84\xb8Ag\xe1\xf8\xc4\xb4\xa2\xf08\x97\x10\x90\xe3;\x18 \xc8\xa6\x8bj\x08\x18b44)\xa9Z%\xb7y\xf0@\xbf4/D\xa9\x01\xa0\xcb\xc6\xc7\x10:\xee!p\xae&\xb1\xa3\x94\xbd\xf5v\x18\x9a\x15I\x0e\xf3\xd3x\xa1\xff\xf2,c\xcd\xba')
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:22.090945
2
- from pyarmor_runtime_000000 import __pyarmor__
3
- __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x9f\x05\x00\x00\x12\t\x04\x00\x0e\xa2\x7f\xce\xf7\x1bs\x92\x8a\xc4\x8d\x9d|\x10*T\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xa0O\x94!{\xe8\xc8\x855\xb5y+e\x93\xe5\xbb)\x8dL=It\xb06\xc5Q>\xf9\x15\r\x91\xba\x92\xf4\x97\x7f\x90\x1c+\x06CgZ\xc2&\x9c\xaf\x14\xc7\xfb\xf9\xf6\xd9\xf0B\xe5{\x8b\x9b\x99qDN\xdb\xbb\xc9`A\xef\x1dK< \x84a\x85\x99q\xcc\xcb-\xc40{\x03\xa4\x8c\xa3\x07YVF\x90.n\x10\x94.h\x9e14\xe5\xe9\xa3~w\xc0;\xb9\xf5m[\x95\x9f\x9b\x15\x1e\xbc\xf5\n\xec\xce\x8e\x1d\xef\x98\x9a\xceM\xad\xfbX\xd3y\xfe3\xaf\xfe\x19l\xcc\x89\xcf\x85\x050\xc9D\xf6FD\xe7\xeb\xe8\x11\xee\xbfk\x1f\x96o\xd9@x*\x95A\xa7\xd3\xbd\xe6\xdd\xac\x84F\x9a\xe7\x8fb\x86.\xc7lp\x16\xa5\xffaU\xc5\xef\x97tlB?\xb8\xec\x91\xd3\xd4}"\x93\xba\x85W\xac\x10q\xb3\xf6\x8a\xb3\x89\x1ebB-\\G\x89X\xb3l\xc2\xfe\xcaR\xd2\xd3\x81\xe0\x83\x1ce\xdf$\xbe!\xaanX\xad@.y\xda$e\xa2i\xbf\x18\xec>\x1a!\x1a\xd0\x8a\xff\x9d\x1fU`\x160=F\x17<:O\x9e\xc0\xbe-\x02\x97\x8dP\xf0\x1c\x96\xbf\xa0\xdc\xbbk2\xb2\x8a\x8dH\x92c^\x07&\xdd\xf7\xcb\xd6\x18\x04\xc0\xde\x8e\x16FR. \x1a&\x87\x04*+\'\xa3$\xaf1\x04\x07\x9c3\x88?j\x9f\x04\xac\xcc\xd6\xe4:\xe6M\r58\xac\xd50(2\xd8\xb4\x9b\x9f\x80?\xc0\xda_L\xca\xa9=[\x171\xed\xe8$=\x82\x9d\x8d\xd3\x87J4\xac\x93\x19\x1bKF?\xb8.\x1c\xb2Wz\xbey{\xddj\x07\xb7b\xf6\xc9r8e\x07N\xc6rD4t4\x85~\xe8\\\t\xb2\x00\xe5\xb1\xe9\xa1X\xe5\x9d\xbf\xdc|j\xa8\xd9\x1c\xf9JK\xde\xdbsS\x16\x9a\x9f\xddg\xd7\xff\xa7Jn\x95\t\x03\n\x98\xe0\xf6\xb4\xb2\xbbJ\xc9\xd1\xad\x92\xccC\xc0VO\xa1\xb8\\\xc4\x1b\xff\xbf\x1a\x14\xae:F2\x97yOa\xedw\xccXcv{S\xa2*\xe3\xb0MbB\xdaT\xfa\x1fgA\x00\x86_\x1dA\xe3\x87\x0c\x15(\xecDo+\xa9\xaf\xa0\x1a\x18P\xe1h/S\xf6\xafoU83|\x14\xeb\x1b\rkQ\'\x19\xeb\x0b\x89\xda\xf1\xeeTz\x9d\xbb\xd1\xd8I\xe9\xf3\x8et\xeb\x93\xac/ Q\xea\xe7:\xdf\xe8c7 \x00\x97:=\xecwV\xd3H_7\x1dh\x89\xe6\x97 \xbdhb\xde\xd36\xce\x92\xc3\xc4,\xb1\xec-\x85L\xf5\xa8o\xdd\x84L@\x07\xf4\x07\xc8\x98V\xe2\xa5~\xee\x89i\xb0\x97\xb1I\xf8-\xa8\xf0\x0e\x86\x9e\xb3\x05\xeb\x98)\xca\xb7\x97P\x89\xd3\xdc\xdc\xea\xf9\xbdr\xe5\xab\x16\xce\xc6\xe8\x9e\xc6\x99M\xd6\x97\xf2?}\x1c~\xa4\xd2\x8b\xf8\xda\x1b%\xfc"|\xe6\\\xee\xcd\xdb\xe5\xb7\xbb\xc5F\xa7iJfByQhP_K\xd3\x0b(;7~\xe0IGC0\xe1|\x1d1\xfc\xfa\xb1\xef3<fr\x87~\xa3OI\x9b\x88MC\xea\xa8U\xc5s\xd2\xd3;\xaa\xfc~ \xbd\xb54\x92\x92\x96\x923\xec\xee+\xec\xb3\xbf\xea\xa9\xabwt\xdd%\xe7+iy\xaarh\xfe\x91?^fO\xfa\x0e\x12\xc64li_\xa5\xcf\x8fc\x02\xe6b\xb7\x97\x83]\xeeEjl\xc7\x85\xe4_\xb6\x85K\x9c\x84\xd0[\xa4dL\xdbz\xe0)\xca\xee\xe1\xc0\x07+\xde\xb3z\xe7~\x16\xbc\x98\xec\x0f\xf7\x16\x8a\x05s\'\xbf\xd9A\x8a\x83\xf7\xd9#\xfe\xd9B\x8e\x1cwI\x19\xdeM0|\x91\xe7)H\xcf\xe8\xbd%\xe0\xa7\xb8\xc9foFx4\x0b\nt\x97%\xeel\x9e\x9af\xa6\x89X\x99)\xee\x06\xf4\x07\xe5\x0cH\xbe\xb5\xe4\xba\xca\xfbW\xfa0\xa3=\x99\x9bVj\xae\x11\xb5X\xf9\xa5\xe6\xf4\x0f\xd603\x9c\xe1\x83\xb8$\xc3\x05\xc7\x9f\x80\x8b\x04\x94Dce\x9c\x92\xa3\xd9_\xb9\xe6\xd5ho\xacc\xbbe\x9aCV\xaf\xf3A\xd4\xdc\xe5\xa0\x17(\xd2\xd7\xd6\x89\xf0\x85\xf9Y\x90I\x86\xcd\xe1\xbfU\xc0\xa0 {HjAYa\x08#ka\xae[\x1a8$\x96g\x0eX\x03t(\x1a(\x86\x0c\x82\xafc\x96^DM`\x99\x90\xf4Y\xac\x8d\x03,>\x1a\xf4s&%\xfe\xed\xaaiB\xa5L\x1c\xa9\x17&Y\x95\x05B\x87\xd5r0\xda\xf4\xed\xf0\xca\x832\xa3"\xfat\xdaI.\x08\x1cq\xb3\x94\xdc\xb8\xd9\x81W\xed\xb0\x04\xb03N\x0c\xda\x18$\xed\xdcqi\xffZp"\x8f\x9e\xa2Qd\x08\x92p \xc5]5\x96a\xc6\x9cKJ\xf6\xbbw\xac`\x80\xa2\x8cyYp\xecF\x88\x1a\x9a\x08q\x0b\x0f\xd7B\xc1\xc2\'\xd3ch\xa6\x95\x17\xab$y\x99a\x14\xf4\xfa\xf2\x7f\x98\x89#z\xcaI\xea\xa7\x82Z\xb2J\xfb\xab\xee\xe0\x92\xbfJ\x89\x0fA\x92\xd1p\xd6\x80IPU\x1d\x80j\xf5\xd5\xa7^\xff\xf4$1K\xfe\xa2\x0c\xdd"f\xfc\xa6.bk\x16$\xa0~F\xaaz\xec\xc1fz\x932\xf2\x19F\xa9\x1fS\xeb\x19\xdf<\xe8Y\xbf\xd7\xe81m\x04\xc1^B\xb2\x99\xf4\x18$\x93\xf6\xcb\xcc\xff\x96\xa2@-\x134\xf4\xc9A[\xfd\x0bf\x00\x15\xb7\xec\xdc\xfb\xc73o}\xdf{u\xdc\x9c\x94\xebM\xc2w\xc4\x9c:M\xfa*h\xc06\xaa~{SC"\xbeF\x7f;\\~EEi\xa2Kd\xcf\x90\xfb]M\xc8\x19.9m2\xcfB\x85\'\x1c\xfa\x19\xcb\x9b\\\xec\xb5.[_W4\xf2\xb76\xf3\x99\xbe\x8b\x8c4u~\x0e\x91\xa5h\x19\x14\x04\xa3\xd1 \xda\xe2\xf4q\xf9\x1f\x9a\x16r\xa8\x19@5\xc4r\xf4~\xaf\xad\xea0\xcc\x98\xbc\xde\x1b\x88\xaa\xa5M4\x19=\x0c~@\x06\x00\x8fH\xa1$\xd0\xa80y\xdb\x03c\x1a\x86C\xcb/&vo\xd7_\xd4gt\xfd\x0e\xb6\xb1\xc9\xe4Rc\'/')
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