hiddifypanel 3.0.0.dev63__cp38-cp38-manylinux2014_x86_64.whl → 3.0.0.dev65__cp38-cp38-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. hiddifypanel/Events.py +27 -4
  2. hiddifypanel/VERSION +1 -1
  3. hiddifypanel/VERSION.py +1 -3
  4. hiddifypanel/__init__.py +7 -3
  5. hiddifypanel/__main__.py +13 -3
  6. hiddifypanel/base.py +88 -3
  7. hiddifypanel/base2.py +40 -3
  8. hiddifypanel/models/__init__.py +10 -3
  9. hiddifypanel/models/child.py +26 -4
  10. hiddifypanel/models/config.py +105 -4
  11. hiddifypanel/models/config_enum.py +207 -4
  12. hiddifypanel/models/domain.py +106 -4
  13. hiddifypanel/models/proxy.py +55 -3
  14. hiddifypanel/models/usage.py +58 -3
  15. hiddifypanel/models/user.py +171 -3
  16. hiddifypanel/panel/__init__.py +7 -4
  17. hiddifypanel/panel/admin/Actions.py +170 -3
  18. hiddifypanel/panel/admin/Backup.py +80 -4
  19. hiddifypanel/panel/admin/ChildAdmin.py +122 -3
  20. hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
  21. hiddifypanel/panel/admin/Dashboard.py +70 -4
  22. hiddifypanel/panel/admin/DomainAdmin.py +195 -4
  23. hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
  24. hiddifypanel/panel/admin/QuickSetup.py +127 -4
  25. hiddifypanel/panel/admin/SettingAdmin.py +224 -3
  26. hiddifypanel/panel/admin/Terminal.py +51 -4
  27. hiddifypanel/panel/admin/UserAdmin.py +277 -4
  28. hiddifypanel/panel/admin/__init__.py +82 -4
  29. hiddifypanel/panel/admin/adminlte.py +13 -4
  30. hiddifypanel/panel/admin/commercial_info.py +23 -3
  31. hiddifypanel/panel/admin/templates/config.html +1 -1
  32. hiddifypanel/panel/admin/templates/proxy.html +2 -2
  33. hiddifypanel/panel/admin/websocket.py +9 -3
  34. hiddifypanel/panel/admin_2.py +33 -3
  35. hiddifypanel/panel/asset.py +17 -3
  36. hiddifypanel/panel/cf_api.py +35 -4
  37. hiddifypanel/panel/clean_ip.py +125 -3
  38. hiddifypanel/panel/cli.py +172 -3
  39. hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
  40. hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
  41. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
  42. hiddifypanel/panel/commercial/__init__.py +50 -4
  43. hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
  44. hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
  45. hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
  46. hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
  47. hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
  48. hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
  49. hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
  50. hiddifypanel/panel/common.py +98 -3
  51. hiddifypanel/panel/custom_widgets.py +71 -4
  52. hiddifypanel/panel/database.py +18 -3
  53. hiddifypanel/panel/hiddify.py +655 -4
  54. hiddifypanel/panel/hiddify_api.py +70 -3
  55. hiddifypanel/panel/init_db.py +393 -3
  56. hiddifypanel/panel/usage.py +85 -3
  57. hiddifypanel/panel/user/__init__.py +25 -4
  58. hiddifypanel/panel/user/link_maker.py +416 -3
  59. hiddifypanel/panel/user/templates/home/multi.html +1 -1
  60. hiddifypanel/panel/user/user.py +233 -3
  61. hiddifypanel/static/css/custom.css +11 -0
  62. hiddifypanel/templates/500.html +1 -1
  63. hiddifypanel/xray_api.py +109 -3
  64. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
  65. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
  66. hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
  67. hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
  68. pyarmor_runtime_000000/__init__.py +0 -4
  69. pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
  70. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
  71. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
  72. {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,72 @@
1
- # 2023-04-08T15:11:13.698048
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\xfa\r\x00\x00\x12\t\x04\x00\xa8\x1e\x18\xf2u\x8d\xaf\xecP\xf1w\r&\x13\xb6U\x00\x00\x00\x00\x00\x00\x00\x00T\xd4\x08%\x15`\xd0$\xcd\xc9\x05\x04\xcd\x9a\x15\x0cU\xbd\xa7x\xbcX\x94,\xa9\x96\xd2\xa6\xb0T\x15lx~?\xe8K\xb2\xb6\x16Zt\xab\xda\xefC\x88k\xf7n\xe5\x81\x9b\xca\xa1\xe7\'\xdc\xc7O\xb8\xdf \x01\xde\x96(6\xb9\xe2\xd4\x16;\x82\xa0T\x94\x0f0B\x80X\xcb\xf8\xc1\xf6\x1e\xc3\xe6\x1bl(\xc2\xacM\xf3\x10\xdd\x93\xab\xac\x0fB\x1a2\xd8*\x9bS\x11\x81\x0e\xe6\xe4\xdd\x07\xe4\x15\x0e\xd0\x81\x08\xb0\x16\x9f\x99\xe7\xe6\nl\xc4\x04\x05\xd7\x812\xdeX\xf2MW\xe7\x95\x8e\xf0\xc6\xe7c7\x1f,\\X\x14\x17\'\xd1\xa1\xc9q!\x05\xb3\xc1\xda\xb6\x01\xabe\xa2\x1a\x85\x19:\xfa\x80\xc4P\xe1\xf6\x80\xae\x9e\xd0o|\x10\xbcW\x9e\xaf\xcf\xa0j\xfe*\xb5\x88-\xb8v\xb4/\xa3\x8a`\x8d\x89<}8\x832\xacvV\x7fPQ\x8a\xed\x85\x85\xb7DD\xcdF>@o+b\x01\xea\x97|Z\x00H\xd1&\x1f\x9b\xc3\xc6BZ\x93(\xc2\x96]\x84\xbe9\x11Y,\x1c\xba\xe4\xbc\x1a\x9a\xd6S\xc0b\xe6\xb3\x87\xe7\xeao\xbe\xce6\xdam!\x0c\x966\xa0\x8d\x07Wh\x08\xc2\x81\xb3\x91?Hp\x96G<\xd0\x96H\x8b\xc9\x0b\xb4\x8cM\xaf\xd7.R\x874=\xdc\x9e#f\xe0\xcd\x9a\x16\x1c\x15\x1b\x1c\x14\x87\xdem\xea\x9c\xed\xf0`9J\xde\xda\xff\xc7L\x10\\}^\x0f\xda\xa1=?\x1c\xbd\xe1\xd3\xc3\x93w\x1b\x02|\xee\x9eo\xc43^\x9e\x11a\x16\x96GR\xf5\xaa\x7f\xf1\xa2\xc1\xc9k\xfd\x8c\x99\x89\xa3P\xacr\xa9>J\xb3\xa0\x90Y\xe4\xbc\xe9\x0e\xad\x13`\xaf\xdb\x83\x14\xd8\'\xcc\xf8\xe7\xf2\n\x8e\xbf\xd1Xy>\xff\x100N\xe6\xdea\x03j \xdb\xc4#\xbd:\xf2+\xe0d\xc8\x17P\xbd\xact;&\xd11m\x97\xc1n\xa3\xa7\xed\x02\xb3\xd3`I\xdf{\xdf\x12}O)|2K\xaaF\x86\xac\x94\xe1\xca\xce!\x87-\xe2Vs\x07{\x04\x15\xbdo\xa6H\xb5ook\x96\xda\n\x86]\x16\xddA\xe2N\xd7\x87\x01Sl\xadS]E4\x9b(b\x9fF\xba\x9d\\\xba\xa0\x88\x14\x9d\x99\xbf\xa4\xcb\x95n\xdb\x9cse\xaa\xe1\xc9\xd4|[ \xe1\xff\x8c\xc9\x14\x8fga\xb4\xe9\xecq\xf6\xden+\xc4\xb6V\xf40\xc7\r~0\r\xfa\xd1\x05\xf4\xc1\xd5;n\xc9\xc2\x9b\xc9\xc7\xa5\xbdo\xb0\xa4\xfd\xd1\xab\x0c\xf6\x16\xb3\x85\n\t\xfdFnM\xa6\xd6(\x1f\xb0\xa6\x8f\xe7\xde\xf2\xdbX\x91\x9b\xc6K\xb2Jd\x1c\x9d^2\xe8\xf9\x93\xf6D\x0c\xae\x81i\x18\xa4\xa2`\x1c\xadSl0\xb3\xde\x8d\x19\x02\'\x0e\x1fNL;\x0c\xe4s3\xb2VI\xee\xcaOx\xcb\xfa\x87\xf5\xdbr\x10W\xcfz\xeb\x02\x14e\x15\x90\x02\xc0\x02O|\xb1\x8dl\x16\x8d\x11\xe6t\'T\x9a3\x08qx\x87\xb9&d\xc9\x02\x92\x8d\x06\xa3S\xbe\xb2\x9f/\xd3\xbe\x8e\x13iU\xd3B\xec*\xd0\xfe\xd8G\x19\xd2GP1\x0fo\x82\xba?z\x88^r\xbeO`\xc08d\x04\x07\xf2\xb7xH\x1cMi\xaa\xe6\xc1\xfaTD\xc1\xab\xfc\xd9=?\xe0\xcc\x9cY<\xbd}\x9b\x17<\xabn\xb3\xb0+I=}\x16\xaa\x14\x0b()d\x1e*N\xe6\xf1\xda"\x06\xb8\xf6\xd1\x8d\x04\xbf\x99\xfax{\xeeU\xe7\xe9Qc\xffQMo\x08\xd2\xe7m\xc3d(\xc2I\x93"\xcd\xb2X~v\x86VD\xae\x1f\xa0\x84\x1d\x0e5\xa7N\xc5\xef\xeep\xb1\xaaM-\xc9l2#0Cu\xa4N\xbc\x04x\x98\x8a\xe4\r\x1b,=\x12\x7f=\xa9v\x03\xfaE\xa9\xfb\xc3p\xef\x88\x17\x85_\xaff\xdfsp*\r\xa7\x98\x9c^m\xad\\\x15\xa94\x07\x85\xf7~\x05\x04\xc2\x14%J\xc75.]Q\xb1\xd0\x1c4S\x08\xa5vO\xae\xa4\xf8\\\x7f\xd7fu@1}2\x86\xd1\xf0q\xd1\x9cg\xed\xd8\x88\x84\x92\x91X\xf3\xe7\x13c\x9d\xcf\\\x80\xa9h\xf6Tl\x9f[\xe9\xc2\x83\x0fM\xe6\xfb^(\xcd\xaa\xe3R\xddU@\xd5*\xe2sm\xcbA\xb0\x95\x03\xbe\xdcj\xd5\xe4\xb1\xc2\xf1\xed"cl\x99\x88D\xbb\x00\x83\x07\xf0\xb8\x97\x9d\xbc0,\xe2\xce\xd5\xf4;y\xa4URA\xaf\xe58\xb5\xd3.t\x85\xe2\xc5\x8a\xd5d\x96\x1f\xa0\xaa\x88\xa2\xba2;\xd1\xc8\xe0\xa9\x95\x85\xe9\x16\xd1\xb6yR\x0b\x8b"c\x89Q\xab8\xb0fm\xe2\x9b\xa7I\x82\xb5R\x81\xda.@H\xd3W\x1dn,\x08\xc2G\x00@nr\xf3E\x8d@\xed\xce\xa7\xf1\xc9\xb024C\x91\x0ec\xc2\x07\xcfAh\x120"\xe3Mz\x86$L\x166\xff\x9c\xe4\xfbM\x98}\x82.\x837\x80Hl\xdb\x80\x82v\xda\xf4\x03\xd9\x8dt\xb3"h\xd9\x82U\x97_(\xd3\xe5\xcek\x86<w\x14\xf2\x95\xcay\xefF\xee0\x91H1\xe9i\xdb\xec\x1bhYO\xfd\xa6\xb7o\x86\x1f\xd9\x1d\x02:T$\xb6\x1a\x8fV\x7f\x0e-\xb4\xb8q\xf4\xael\xe8)\xf5\x94*\x94\xb9\x8aq@\x91\x0e\xfc\xe7\x9d\x95\x80\xf4\x9a\x1f\x89\x8c;p<\x8fH\xe6\xc7\xa4\x85\x08\xdf\x1e\x8f\xcc\x94\xc2\xe4A\xa8\xe4<\x81\xbb\xa59m\xfb,\xac\x0b7H\xf0\t\xe7\xe3\xb9\xacf\xd6)\xbc7\x1f\xe0\xbca!\xd7Hu\xaf\x98\x9f\xfe\xec\xfe\xb7T\xbd\x83\xb9`\xae\x97\xe0\xe8\xaf\xa8\xa0:\x93\xdeJ\xea\x15\x0e\xdf\x98;r7\xa8\xca\xde\xa3\x04Ky"\xdd~\x95|\xca\xb9t\x16j\x04\xf7n\x1a~vm\x04\x18/\x04q\xe8\x00\xbd"V\xeb\xa8\x8b\xf8o\x9cXe\x03\xdd\xe8aaC"\x11\xd1\x9a\x00\xea1\xdc\xd7\x93\xa7/\xdf\xb4\xcc}G\x05\xe3\x0fo\'M6\xd9\xd1\x8bg%f\x7f\x06\xd1-\xbf\xdf\xdb$u\xea_k\x00zh}\x17H\xa6y\xb1j\xf7Y\n\xfa\xe1l\xe8d\xd1\xe0Z\x97\xc9\x06M\xfdZ\xacb\x7f\xcf\xaa\xf6\xb7\x01\xba\r\xa5\xb8M\xa7\x80e"/\xcd\xf8bf\x01"e6\x17\x16\xb2\xec\xccIJ\x99\x1b\x80 \x1bJ\xe9\x0e1h\r\xa3\xc8\x8d\x19{e\x16R*\xaa\x93\x18\xbb=\xa3\xee\x81\xbc\x9a\x197EDkKN\x9e\xdd1r\xcd\xc5\xc8\x19\xd5V\x84O)1j\xeaO\x08|\xc6Ko#{<\xa3\xe6\xd4\n\xbe=;SrW\xdd\xe6:\xe3Bb3\x06\xddw0\xb8\xed\xd9\xa87\x1b]5g\x96yK\x90\x8d=\x14\x84sB_]\xbd\x15Z\x01\x00P/\\t\xe2\xec\xfa\xf7F\xba\xc1y\xce\xb3\x87a\xf5)V\xdfn\x9a\x93\'\xae\x8fb\xb4<\xec;\xd9\xdfe\x05K\xdd|j6J\x06\xd8\xe2K\x90\xab\x94\xbb\x10\xdf\xa1TG\x83\xbc\xfbK\x90`s\x98\xe6\x86\x12g\xab\xe0\xb0b\x03N\xdc?\x02\xcf;\x90\xfa\xe1\xe7\x00\xc2z\xf6;y\xbd\xf7\xb29\x90\x8a\xaf\x07\xee\xa0\xaeH\xb9\xa4\x12\x1b\x1c?U\xa6\xa5\xaf\x99D\xb0@ \xed.\'\x9c\x0b\x1c\xf34\xe4\xcfX%\xf4E\x19O\xb4IN\xa2\xa4\xfb\x05\xc3>\x99\xd8\x19|n\x89\xf3\x16c*z\x06^l\xa2\x0f\x08z\xd5\x18)\xd46#\x92\x15\xaesH\x0f\xa7\x9f\xde\x87WI\x0b\x9d\x97;G\x1f\x08\xd2\x9dh\xaf\xa4\xc1_o1\x85"\xf8\xb3\xf45\x00X\xbc\n\xee\xde\xe3c=%\xfe}\xc8\xe7\xc7\xd7:\xe4\xc6$;\xb6-\xdf\x10\x80e\xf5(o\xa5O^n\xfe\x06\x91\xca)_\x8c\x12#\x19\x06!\xa0\'\xdd%\xf94\xadi\xaa\x8d\x11\'\xb5\xb4\xbdAxq\xc4\xcf\xe9/\xed*q\x9f\x9dB\xbb\xd6\x92\xc1\xbe\xe7\x88\x87c\xf1y\x807?\x9b\x10\xa0\xd3\xf4\xd7\x0c\xfdn\xd6\xc7-\xce\x02\x97\xe2\'\x19\x80Vo\xff\xf3a\x01\xf9\xe3>2z\xa7\xcf\xf4\x95=\xd2P\xe9f\xdb\xcc-\xc9(\x12\xd3a\xd0\x18Uqa\x94\xee\x13E\xf1\xa1\x80\x0f;+\xf5\xfd\xad\xb6\x82Q~J\xac#\xcd\xac[+\xc0T\x9fE\xe6_\x02%\x15\xa2\xac@\x15\xd6,\x9d\xe6\xb5\xe1\xd4X{\x83\xe7K\xf5\'h\xa6Y\xdd\xca; K\nC\xd0\x90\xb1\x16:\xfe\x84\xa3\x90[\xb2\xc6o\xa6.\xaaE:0\xcd\x04\xbe\x9d\x95\xa9Ls&ih3\x08~\xaa\xc1\xac\xf2\x14\xe3\xf6\xd7MV\xe8u\xc5QM\xf9&\xe0\x08\xb9\xdd[+\x18\xbbk\xd3\xb8\xf1\xee\xf0\xa8\\\xdf\xd7\x8d\x95E\x963\x9f\xbe\xc64`\x90\x1d\x18#\xbf\xfd\xc9\t\xc6\x17\xb0\xe5\xa2\x11V\x0bFa\xd2P\x9cwrp\xd71\xd5\xa6\xc1\x8b~w\x9b#t@{\xb5\xf9%)\xdb.\xb9\x15\xdb\xef\xfa\xe4\xf2K\x1b\x8f\xc8\x0b\x86J\x8e\xff\x84;\xd2R\x12\x8b\xd1\xad\x81g\xe4V\xd5\x8e\xbb?\xa9\xf2\x8c;\xfb\xed\x13\x8cZ\xde\x98\xce\x03\xb2\xc9\x96$\ntW\x12=!.\xed\\\xaf\xf9\xdc\xd1m\xfc\x054\xe3r\x00\x83\x90\x84\xf5R)]Q\x92\xaf\xd1\xdf\xb063l$\\\x18\x90\x1e\x87\x0e\n\xbe=\xa2\x8f\xb5v\x95D\x81\xc84\x81\x83\xc6eBivV\xca\\\xae\x1d\xfd%`\xd5\xf3\xd7B\xa8x\x00\x9aV4:L)\x08\x04_\xd1\xc9\'\xb0\x8f~R nM\xb0F\x9c\x10W\xf0GW\xed\xf1\xff\xbc\x8c\xe1\xef\xb6Q\x0f\x1d\xcd\xc9%\xea\xa8\xfe\xe8G\xf3C\xdc\xc4\xf2\x07\xf6\x0c\x98\xd3\xd9>\xf0u\x17\xad\x8b\xb3\x80\xb0\x0e\xcd\xe2\x87R\xedd\xe7{\xe0\xf4\x088\x88\x00..V \x0b-\x8c\xa8V\x1b\xfc\x0cK#q+\xd2\x8a\x85UF\x99?\x9f\xce\x9f\x1c:\xc6{\x1bx\xd0\xe5\x9e\x9e\xdb\xfc\x81\xdc\x9a\xea\xe7?\xcf\xbdI6E\xa2#\xfb\xeaor\xf2m\x13\xec\xa7{\xea \xdf\xb9\xbco\x15\x819XB\x8aS\xde\x8f~\x98\x1f\xf5\xee\xb6\x9a\t\xf1\x86\xe0T_\xf0\xde\x9a\xbc\x98\xee\x8a=\xfb\xe6\xb1p\xb45\x90\x04\x14!Ij\x1bH\xfa\xdb\xea.\xa1VW\x88A(\x8cl\x88\xa4\x08o?x\xe90\xdc\xc3RC\xe0,\x04A\xbf"U\xff\x97\x0b\xb1]\xe0\xe7=9Q\x0b:j\n\xa20J\x9b\x14\xeaQ2\x97W\x8e\x98\xcdy\x91\xb1\x13\xff\xfb\x8f\x92r\xbeV\xfa\xa0.|\xf5\xeb\x0e+#w9B\xa6\xfa\x99m}G\xbb\xf2\x89i4\xba\xe2\x80\x11\xf8\x89\x03\xf8\xa3\xbf\xf8\xb2n\x98\xff-\xea\xc2Q\xaaYx\x1c7E\xc4\xe4\xe5s\xb4\xa0\xce=Xq\x14\xe1NXy\xc9\xc7\xe9H\xf1\x82\xb5\x8aG_<\xc7L!\xf9\xd9\xc5\x9c\x9b4Bg\x9d\xc39\xda\xcc\x97u\x92\x85\xfa\x8a\xd2$\xddk\xbb\xf7\x0b\xcd\xae\x18\xd16\xce<\x14\xae\xa7\x1b\xb5\xc1\xefv\xbc\xfe\x00|\x1f\x0e\xda\x17N\xb0\x15J\x90\xf1\x83\xdb2m&\xaf4M\xb5\xcb\xd8\x11e\x89\xd6\x8a\xe1\xca\xd1ei\xa4\xb8\x08\tR0\xa9]\x9e\\/\x048s\x97\xc1\xe5h\xf7\xc4#\xcfd0y\xb1\xb3\n\x06\xc2\xd4\xe6\x17J\xb4\xddE\xc3TQ\xb1qy\x0f\xc4n\x828\x08\xb9ID\xa7\'[S\xc4\x00\xf9\xec\x98\xdb\xfa\x08\xec?\x8e\xb5edz\x056\xd7\x07\xffEv5e_\xc6\xd5X=\xdf}\xad F\x19\x8e\x00\x84\x8a\xf3\xc6y9W\x01\xdc5\xec\x9c\x1cq\xf8\xb3qa\xb5\xfd\xf3\xf3B}s\xdcK\x95k\xfe\xb1\x89\x1f\xeb\xf1\x0efZ}+\x10\xa2\xe7\xe3s\xbe\xf9\xe3C\xa7\x1cO_i\xecp\xd9\xf9\xef\r\xf4\xca\xea.F!\x8b\x03\xbdHN\xb6P\x8b\xfay=1Q\xdfpTlw\xfe\x1a\x17I\x0c\x9e\x93\x9cQ\x1ew\xa2\x1b\xe9I\xfb\xce\xb4]B\xdf\r+\xa0\xb2\t2z&\xa8,\x9d\xc2za\x9e\xfc\x86\x7f\x11:\xb4\x08\xb6$\xcf\x0f\xfa?\x1bg\x1fe]\xee\xbceq\x1e(G\xa9\t\xaaG\xf6Lqw\xde\x87\xa6CUd\xb2\xbc\xa7\xca\x1a\xe8-\x81\x13\x8d\x9d\xdb\x02~ \xadR\xfdx\x15n/\x8fw\xd5\xe5\xb1\xf5\xbaJ\x96~\x05\xe0\xd6NR\xfb\xd5\xa1\xb7\xa5\x7f\x83DV\xa3\x10\x1d&[@>\x08NR\xd7r\xe4\x9eb\xbe\xcf\xdd\x1dF\x03\xc5\x8e\xbbd\xd5\xab\x11\xaf\xcd@\xf1dN|\x01\xc4\xaa\x88\x00\x9f\xe3Q\xdc$\x85\xb8\xd3\x9dU\n\xb1\x89m{w\x1b\xedtaW!\x15\xc6n\x03t#>p2\xb0\x17\xee2N\x01\xb7\xf8\xed\x0c\x9b\xba\xfe\xde\xab\xee\xd0@$k\xe2~\xcfD}`\xe0\x03d\xd1\x8bT\xfb-\x03\xe7od,\xe1\xac\x8f\xaa\xe6\xb3n\x10\xf9\xa6\xe7rdY\xf3\x18\xdc=r\xc1,%\x925\xef\xf81\x10_\xcc\xdb{&\xf3\xe0\xa0*\n2\\V\xfc(\x99\xc5p\x96\n\xcb\x16\x1b$\xf3V\x94\x16=1\x1c\x11\xb8.\xa2\xf5\xff\xbd-\xbc\x8f\x8ex\x15eV\x03R\x12\xf9\xf5eH\x1b\xb7\x14\x07\xfaIYF\x85\x9eC\x9d\x82K\xec\x11\x16l\xe8\xb0\xf3\'\x05W6me\xf5\xb6\x85r\n/D\xfdU\xfd\x84\xcf8\x99\xf07\xfd\x93\xef\xadm\xf3t\xeb\xe7I\x10\xe8\x9a8H\xcf\x0b`\xe0\xadi\xb9h\xe9\xf5\xa8\xd0\x19l\r\xee{\x98\xd7[O\x9b\xedM;\xad\xbd\xd6\xbf\x03\xca\xbe\x81\x1b\x92\xf7\x9a\xcb<\x97$\x0c\xa6\xe8\x12\x8d5\xf8\xd1\xc0r\xcep\xc8\xd2\xf6k\xd65\x15ly\xfbn\xa2V\x15\xd9\x94\x02\x86\x19\x04\xf3\x90\xb6\xec\x8a\xddCV\xca\xca\xba:\x13\xa2\x1c\xf11\x06\xea6\xde\xbbJ\xde\xca\xd9Z\xfct\x02\xb1\x18\xff\x8f\xa5\x85M$\xa8\xf1\x00\x92\xcc\x8dA`Q5a\xd0\xe8\x11\x00\x8f\x1c\xcc\xfe\xef@fk )h\x07\xf9\xf4\x86\xddj\x03U\xc5r\x88g\x0c\'?\x14\x95\x02\xc3\x97\x02=\xc8opI\x0e\xb3\xefr\x97+\xcei&\xb9\x84F\x91u%Sw\x8b\xf9\xe4\xef}\xb8\x14\xcd\x95\xe0\xc7\xdb\x961\xbdmEH\xe7\x88\x80\\\xd7\x83\xf4L*\xd2\xf9:b\xaf\xc9I\xe4\x84\xb4s =\x8b=\x92\xe7\x9d\xaft;c\xd9\xe5r\xed\x0b@`\xf2"\x03?u\x7f\x80?\x0c\x18&\xbc\xf1\xceC\xf5\xbe\xa8\xea\xb4\xect\xfc\x99\x82b\x93q\xc3R\xac\x07\xa6\xdc ?Dz\x1b\xf0;]\x8bN\x92M\'\xd99\x83\x10\x82\xf9\x86T\x84X\x95\xa2\xc8W\xf6_\'\xa0\xcc\x17\xa0T\x06\xaf\xf40^\xdf\x15\xd4\x1d\xf7\xe5\x00\xfa \x9a\xa7\xa6\xf1\xe1\xea\xb6\x98\x18\xc4\xc0n\x1c\x00}\xa8OL\x08\xf9x\xbe\xb1\xfc^8/&\xdd8\x00\x9f8\x93\xa1Bd}\xcd\xc6\xc9d\x8a~\x85\x04\x91\xf8\xd4\x93\x81\xe0\x91\x1c\x10\x18\x9a\x84')
1
+ from hiddifypanel.models import *
2
+ from hiddifypanel.panel import hiddify
3
+ import json
4
+ def sync_child_to_parent(parent_link=None):
5
+ parent_link= parent_link or hconfig(ConfigEnum.parent_panel)
6
+ if not parent_link:
7
+ raise ConnectionError("no parent link")
8
+
9
+ return send_to_panel(f"{parent_link}/api/v1/sync_child/",'PUT',hiddify.dump_db_to_dict())
10
+
11
+ def add_user_usage_to_parent(dbusers_bytes,parent_link=None):
12
+ uuid_bytes={u.uuid:b for u,b in dbusers_bytes.items()}
13
+ new_user_data=send_to_panel(parent_link+"api/v1/add_usage/",'PUT',uuid_bytes)
14
+
15
+
16
+ uuid_status={u.uuid:is_user_active(u) for u in dbusers_bytes}
17
+ hiddify.set_db_from_json(new_user_data,override_child=True,override_child_id=None,remove_users=True)
18
+ have_change=False
19
+ for u in User.query.all():
20
+ if u not in uuid_status:
21
+ have_change=True
22
+ break
23
+ if is_user_active(u)!=uuid_status[u]:
24
+ have_change=True
25
+ break
26
+ if have_change:
27
+ hiddify.quick_apply_users()
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+ def send_to_parent_panel(parent_link=None):
36
+ send_to_panel(parent_link)
37
+
38
+ def send_to_panel(url,method="GET",data=None):
39
+ try:
40
+ import requests
41
+ from requests.adapters import HTTPAdapter
42
+ from requests.packages.urllib3.util.retry import Retry
43
+
44
+ retry_strategy = Retry(
45
+ total=3,
46
+ backoff_factor=0.5,
47
+ status_forcelist=[429, 500, 502, 503, 504],
48
+ method_whitelist=["HEAD", "GET", "OPTIONS"]
49
+ )
50
+ adapter = HTTPAdapter(max_retries=retry_strategy)
51
+ http = requests.Session()
52
+ http.mount("https://", adapter)
53
+ http.mount("http://", adapter)
54
+
55
+ headers = {'Content-Type': 'application/json',
56
+ 'Unique-Id': hconfig(ConfigEnum.unique_id)}
57
+ print(headers)
58
+ if method=="GET":
59
+ response = http.get(url,params=data,headers=headers)
60
+ if method == "PUT":
61
+ response = http.put(url,json=data,headers=headers)
62
+
63
+ res= response.json()
64
+ print(res)
65
+ return res
66
+ except Exception as e:
67
+ print(e)
68
+ print(url)
69
+ print(headers)
70
+ print(json.dumps(data,indent=4,default=str))
4
71
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
72
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product
@@ -1,5 +1,395 @@
1
- # 2023-04-08T15:11:13.766767
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\xe0@\x00\x00\x12\t\x04\x00\x8c\xa2e\x17\x85|!]_9t\xa6\xf8\xaf\xcc\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x9b~Q&\x08?\x05;\x19\xec\x83\xb7\xf0hBLmN\xbb\xca\x87\xc8\x05\xfdv\x99\xa6\xf6\xa4\x02\x1e\xe83!\x08N\n\xfe;9\xe3L\xf8\\\x02\xf2\xf1-\xa5N\x94*\xdd\xb1\xb7\xe0\xb0\xba\xdc\x9b%\xd7\xd0A\x02\x9dF\x86\xbb$[\xb7H\xf0\xe2\xe9T9\xba\x92\xd4sn:-i\xcaQ\x07\xfb-F\x12m\xb8\xa4K\x046\x8c\xe7\x02Aol\x16z\xb3\xd2<\xb5 \xf54>9\xc1,^[\x0e\x10\x08p\xc6\x8a\x99\xa9\x92\xf8L\xcb\x16R\x02\x07\xafqL\xda\xf0\xae\\\x8b\x8e\x0e\xe8r\xaf\xcf\xc8\xa9\xb4X\x94Q\x9e\xff\x00\xfdD\xd8\x01Z\xb1\xef\x1d\x02c\xcc\xe6KJa\xdd\xf7{T\xc7Y\x9a\xc5\xe5\xf4\xd3\xa1#\x07\x08\xe3\x9el\x88{\xd3\xc2<<\x06\x8a\x0fGo_6\x82+kG\x0b\x18fB\xf8\xfa\x89\n\xc7\x03\xb8\xfa1p!\x0e\rH~\x86~\x15\xa8%\xd0\x1c\x0f\x18\x84\x18\x10Y$Yy\xd6\x97\xd0_\x05\xc0?\x9b\x9bQoZ\xf4iyQ}\x7f\x81\xc7Ux?\xfaV\xb7\xa0\x19\xc5f2^9\xfc\xd8>[\xed\x97\x94a\xa0B\xb6\'b%~wK\x0e!\x80\xdc\xb9\xca\x14\x8f7(F\t\\@\xe1\xc3txd\xc8\x94\xa5!\xa4D\xc4\xef\xc6\xfd\x14\'nG]\xc3\x9b\x19z\xce\xb8r^\x1b[\x0f\xf4\x18\xe0\x1e%\x93\x83N\xcc\x18b\xff\x03:\xa7\xba\xe5\xf1\x12\xe4,\\\xc0\xf4\xf1\x84ux~\xa3\xe9:\x8b\x9a\x9ar\x9e\xd0 _[\x04\xde\xe7\x9d\xfd8_*B\x81\x07\xf2s/\x07G{<\xcb\xe4\xd1\x82h\xa7O\x88i\xdd\x19G\xcc\xdf\x1ba\xaa_\xfajn\xaa\xad\xe4y\x8e\xd4HI)\\k-}\xfd\x92\x88r\x9ci\xc7y\xf0\x92Y\xea\t\x96\xd4\xb3\xaa{\x1d\x11\x90\xf1\x9e\x05N\xb9\xc9\x83O\x87#\x8d\xa8\xa2\xcf\x88\xd9{66\xf8\xf4\x96d\xd7p\x12\xadW\'J\xf7\x13b\xf2\xdf\xaei\xdb\xc9\xa8>\xc2\x15~\xa2^\x85\xbb}\x14\xfeH\x19\xdeN[\xaa\xbe3wO\nQ[b4x7\x07\x98?\xec\xc2`\x80\x16\x05)\xae\x1d\x87R\xdc)\x9c1n\xf052\xbb6<\x86\x9c?5p)3T&_XN+\x91h\x0e.4Q\xd2\xc0\xcd\xf2i"\x1fZ|\x8f[\x01\xb1\xdc\xb6\x7fUn\x9f0\x96-F\xc66\xf3\xdd@\xc6\xf4\xbc\x1c\xafF\x04\xa8\xa0\xefjJR\xb8a\xd9\xb6\xe9\x9e\xf8\r\x8f\xbe\x1cu\x80\xca"\x1f!Z\xe72\x84\x83\xe5\x94-\x88L\x8b\x1f\x15H\x921\xe4\xe2*\xde\xec\x82\xe5j]\x83B\xa6\x1a\x82\x94\xcd\xf8\xfeyI`/\xd4x\xa0k\x12MXP4\xa7\nw\xed\x04N\x94%?\xba\xa6\xaf\xeak\xf0e\xe7c\xc8\x96\xd5>\'\xf4\x12\xf8\xf5\x96\xe6\x03`\x8b\xb6\xa7\xa1!\xd3\x94\xfd\x15p\xa2\x8b\xc7D\xf39@\xa6\xf0\x950\xacj\xa0\xf8\xcc\xe9\x845\xc2\x88\xf4f\x06\x18(l\xcf\xe9N\xe4h\x81\x02\xc1\x8c\x17\x18@\xb3\xd9~\xd5\\vx\x06w\x02\xb4\xa3I\xf7@&\xc6\xd4.G\x1bH!Af\x80\xa4\x1e\xa9\xefnnD2<\xd5\x85\x1c \xb3\xb4\x8eH\xf0\xa5\xcf\xa9l}1\xf7\x01\xfe\x1c&\xf0]so\xb3\xd60?\x19"\xa6\xa5dm\xc5q\x1d\xe2\xdd(\xec\xef\xd8\xe0\x0b\x00\xcf\x98\r\xc4\x8e\x83A \xd7\x8f\xc7\xffe\x00d\x94]\xabg\x88\x94]S\xc24nv\xf3\xads\x90/\xc6\x80\x9f\x8f\xeb\xa9\x8f\x95\'+\xa8\x1a}A\x7fH9\xd7Oyv\x1d]]\xbbb\x9c2n\xae<lCt\xf9N\xd2A\x9d&\xe0\xf2\x8f\xd0\x0f\xd5t\xcc_\x9cU\x00O\t\x1f@\x99\xe9\xec\xee\x99l\x93\x13\xec#\xaf\xe3\xcf\xcaYj\xba\x82\x03\'5\xf7E\xde\xdaYvY\xdc\xea\xe5\xaa\x0e\x8f\x80};p\xeb\xed\x9f\xc3\x81\x82\xb2\xff\xc2\xc4]\r\xb1\xb2m\x88rA=\x1bGa\xc2R\xcf\x9e\xc3\xe0\x10\xed\x9791\x879A%.{\x0b\xb8JN@\xe6^\x17A\xbf\x02\x83\xdd\x11\x99\xe7\xca\xd5z\xe4\xebHxs\xc1\xa4_$\xec\x99O\x16\xe3A\xdb\xd4#\x8b\x1f\xc8\xa1]`\xfb\xa4J\xb2T\xfc\xe8b\x82+\x11\xe2\xf8k\x95W\xe3\xabx\xa6\xecr\x07\xf6\x8d\n,c]\xfe\x80S\x8b\xe7\x89\xb8\xe9SN}\xf7"\x0f;]\x17MdI\xa5\x0e\xa5\xfbx\x02\xe5\xe0\x9a\x9fX\xd1?\x00c\xbf\x88Z\xc2\x82\x1b\x08\xbf\xcf\x04j\xd8\xe3>\x8a\xe6\xb6\xe6\xa6\x9b\xb3_\xaa\x06\xc5D2\t5{\x84\xe5\xb8\xb2\x873,\n\xe8\xa9\xc2\x9aukl\xbf\xa6I\xb0\x1f\r\x9e\xe0\x87<\xa9N\xcb\x13\xc6\xb4e\xf9\xad\xb9\xcb\xb6\xe2\xa7\xf2\xc5"\x9d\x92\'\xf5tO\x96`\\@7\xe9\x80\xc0\xcf\xa7\x9a\xbd\x9e\x97\xa0\x0e3f\xdej\xc6\xa4\xd8o\xef\xf5\x8a\x81\x96L\xa8.\x1a\xf7\xae3H(0\xe2\xb7\x1b\xb6\xad\xa0\xd8\xaao\x91\xb1\xc9xoi\xda9\xf9\x9e;m\xcd-\xde\x14\xae\xf3\x86j\xb9\x14w\xfe\xe9\xffB\xce\xbfV\xb5\xc2&\x13\xec\x9e\xf1\x0e\x00\xeb\xcc\xed\x10\xb2q\xfd\xa6\x13\x1eB|\x17\x12q\xcf\xe9\xec\x80L\x8d\x95\xd9^?\xa8S\x8b}Q\xc8W\xee\xe5\x8e%\xbcv\xa9"e\xe4v6<\xdcz"\xd0o\xda\xcb\xdb3\x0c$R\xb0[\x82&\xbe\x9d\x0fh?[e\xdd\xdd6\x06\x13*\xed\xb1o\xe7\x1b\xd7\xaf\xe3\xabB\x0f\xfd\x14\xe8\xdbC>kC\xc9T{\xd5\x07\x0c\xfc\xa7`\x02\xdf\xb4\x00T\x8a\x12\x8a\xbb\x86\xc2\x85\xabl\xe32G\x14D\x1f\xa1\',X\xb8\nc\x19\xab\xdc\xba\xbf\xf8M\xe1y\xfc\'$=i\x08\xa7<b\x9a\x92N\xb1\x9e \t\xdb\x7f\xa2\xab\xd5\x88\xed1\\\xddgn\xb9\xe4+\x8e\xb2:%\x9bv\xd0\x86\x7f\xd2\xe5(|\xb4T\xfe\xe1\xe0r\xdcA\xe6\xe0\x1d\xaf\x1c\xbb{\xd4\x90\xa6!\xda\xe5\xc4\xf3h\xd6\\\xa8\xb7\xafb\x8d\x9d\xad\xd4i\xbe\xce\xdc\x13K\xac\xdaHw\xb4\x92\xffk#\xdeDU*l`\xefJ\t\xc5\xf49^\xd0\x82\xc7\xa3\xf2N\xf0>5\xe1\x1c\xe5\xab2N\x1es\xf0\n\xb5J\x88+N(\xa6\xa6\xe4\x96\x86\xe2X\xadL,!N*\xfdsN\x9f\xd5\x02=@\xbe6\x87\xf8+\xaaz0\xa47\xbc\xb0\x1bG6\x10q\xa37\x0c?\x88\xc1\xbe&\x014\xd5\x85\xadysb\xf3V\xf8\x8d\xcbA\xd5/W\xb5a\x8f\x1d\xb4wnZw#\xa5\x1f\xd8\x86x(J\r\x8c\x8a\xf1ND \x86\xb5\x19\xf5_X\x12\x0e1d\xa60\xef\xfd3E\r\xef\xaa\x05\x13<\xd1\x9dV>\xf0\x0ec\xe50\xb8\x9d>\x07+\xeb\xa4\xadKu\xac!\xd9}\xa8\xa8\x14\x12\xb1\x94:\xa2\xc0\xb9x\x8d\xdfr\x0e\x9b\xde\x00\x8b\xaf\xf8\xbc-\xa8\x04LV\x8fu\xf8\x18\xe6\x9e0\n\xd4\xed\x90\xe5T\xf2\xcb\xd2&\xa3\xe4\xd9 4s\xf8\xbb\x95/\xbd\xf5\x14\x83\x886\xfc\xc0h\xfad\x9f\x85\x1b\xb2\xd7\x82\x87\xfe\xcf\xd8\x0fp\xb2\x15,\x1b\xff\xa6x\'\xc8\xba\xb5\xad\xfb)\xbc\xfa\xc6\xa9\xf5&\xdb\x8c\xf3\xc6\xd9\x8a\xbb\xf5\x01\x92\xfe\xbbyn\x8b\xd6\xb8\xa8\x0em\xd6\xa6\xad\xe8\'^\x08A>5+K(X\xb3E\xa3\x8fg\xea\xc06\xfd\xc7\xbd,;\xf8Oe\xca#6\xb2g\xf8\xf8"\x91o2\xfbx0\x929\x12\x8bN\xa1\xb8E\\\x9a \x81U-\x13.\xdeMw\xd2G\x82\x98\xd5\x1b\xda\xfaX\xedN\xf2\x12\xcbw\x14\xa0\x0c\xcc!X\x0f32w*\xfd\x04\xf8\x91\xb0\x15\xac\x1b\xc8\xfa\xf0\xec\xbd\xe5\x82\xf3\xccD\xff\xc3"e\x07$\xc6+(\xd3\xc4\xa4\x90\x9ba\x0b\xc9w_\x85\x95\xfe\x08\xa76\xae\xa5>\t\x11\xd2\xa5\xc76\x15\x89\xd6\xbem\xc7\xe3\n\xe0\x9e\xddO\xd3x!\x00\x17\x95r\xfa\x8eI\xc3\x8e\xf0\x7f\x83\xef\xbaE\xf7{\xc8\xa5T\xd4#\xa3\ndD\xcb\x96\xe1\x81\xbfA\r\x8a\xff\xeb:\xf8\x85n\x89\x84\x11\x8c{\xdf\xa2\x00^\xed\xdfS\xce\x97\xa9\xdeWI\x8di^\x02\x1fY\x8d+fT\x16\x9bG\x9e\xb6H,u\x10md\xa9\xc0\x00\x17\x18\xab\x83\xa5\xe8Z\xcb\x10\xca\xc3\x8b\x90\xcaJe\xde<\x88\xee\x085\x90\x9f\x08<\x06\xdcD\x83\xc2x\x17\x0c\xfe2`\xec\x7f\xd4\xbf\xcb\x98MK\xccR\xa7a\x17v8w1Z\x1b\xf0t\x1b\x16YZ<\xe2\xbb&\xad\x18\xb7h\xf8\x94)\xc7(\x97\x9fv\xc6*\x9d\xf1\x86\x8a\x9b\x1aU\xe7\x96eB\x8d_J\x96\xae[\xdf\xecN\x18\x0e3\x80<\xc2\xa681\x8b\xc0K\xed\xa0\xf0\x83Y\x05\xe6<\x04i\x16\xc3\xf6\x82\x16\xbfU\xda\xdd4\x8d\xf0\xdc\x95\x83\x0f\xe6;\x1b@}\xb8\x07\x9e\xfe\xaa\x9f|(\x87K\xd9\xa7|\xf5m&\x1d\x1f\x1d\x86\x123a(\xee\xcf?\x97\xb8\x03b\xe4G\x04\xdb\xd8\xfcs\xdcA>\xff\xa4\xc6\x8d\xab\xedC\x8f\xbdz\xeb~V\xd8r\xf0~g.\x8fpX\xf4\x86j\xbe.\x19\x8c\x7f\xcamqX\xb0\xe4G+\xd6\x11\x8a\x07\xa7\xc6\xa4\xd3k\xa7U|\xe1\xbf&\x89\x0fO\xc7\\Y\xb7\x87[\x95\xc2\xae\xa6\xf3\xd1@&F8Sj\xcfq&\r\xba8\x9caey4\xe1S\x99\xbe\xed\xe7\xa6\x1a\x96\x87R\x83P\xcd\x90\xffVG\xe2n\xf0\x7f\xb5b\xc7\xe0\x08.f\xac\x82\xd7\x8b\xcd\xa7\x03X\xc2,\xf0b\xf6\x9a\xb0\xda\n\\\xd0\xd8\x98\x95MD*\xcfi\xc3&El\x7frK\xcc\xad\x89\xce\xb5"C\x8b\x9e\x03\xfb\xb9iU^\nH\x89\xa0\x86FNmle?j\x14\xfb\x14,\xfc\xb8\x82\xa1E\x95\xd6m/\xdd\xa5\xae\x15i\xcf/\xe5?\xf6s\x07\x0f\t\xef\x1bV4\x94\x9d\xc05\xf7\t\xb8\xc7\xafN\xb0\x8a\x9f\xea\xf4z\xe0\\*\xbe\n\x89Hn5\xe3\xecAU`\xd1\xe7\x96\xac\xc3\x17\xe4H\xa6\xce=\xa1N_\xfb\x97\xc1\x8a\\\xfb\x89\x1ed\x08\xf3\xbc\x95g\xe3g\xaf:\xe4\xf4A<0\xbcV\xeb\xc7\x05\x8ax\x9d\xea\x9dh\x9b\x9b\xbc\xe9>\x0c\xd1\xac\xd9\xdb\\T\xc9\x1c\xe3xF~\xc0\xb3\x9aa\xd5~\xe8fy\n*Q}\\-aW\xe5\t\xbc\xd7\x1fK\x0c\xb1\xa8\x04\x02\xe0!\xf48\x88nR\x0f\xc5j\x9b\x8ey~\xb9\x88\xefw \xe0\x926?\x92\x9a\x12\x86\x16\x00\xa0\xde\xf6\x86O\xdd\x1e\xc6\xdb\xd3\xe0\x0e\x94\xf18\x08\xb1\xf6\x9dP\xb9mQ\xa6P\n\xf0\xd8F\x8bN\xb0\xc31>s\xde\x1e\x9b\xf1\x91z\x1b\x04\xa9Y;uc\xf1\x9e\x81r\xfe.B\xc1\x8c\xaay\xfd \xaa$\xdd7\x0e\xff\xc2\x8f\xd5\xaa\xb5\xd7\x9b\xd0\x98J%\xa2*\x9f\x89\xf0Cs\\l\x8f,\xf7\xa1\x17\x1fm\x1e\xb4\x15\xb4\x06\xa9\xa2/\xf2\xee \xfd\xb5;\xa2Y\xe3\xc6\x13\x00HC\xe8\x07\xb4T\x9a\x9f*\x91 X}\xe6\r\x8f\xf4\xb1\xb8O\xe92>\x1f_DU\xbe\xe5\xb8\x11\x86\tw\xff\xef\x03\x9bd\\#\xab\xde"\x87@\xb7=\x10\xae\xc2\xa4\xfdX\x95L\xd3\x02\xbd8x/\x8f1\xfd\xc4+]\x1c\x8f\xe5\xec\x8a\xed\xe2L;\xac\x80\x9c\xa6\x01\xee6n\x96\x06\xe4td\xe3\x1f\xb7\x8c\xfd\xa8i\xe0\xd2#V(\xa1q\xd6\x80\x126\xe9\x9b\x9e\x80\x00\n\xc4\x9f\xe6\xfd-\xd4!p\xfc\xce\x06\xf9Qg#t\xc3\xbe)\x1bT\xa1\x00\xb8Kc\x19vC\x92;\xf6\x10o\xd6\x07\xe8\xbea\xd7\xcc"\x19U\x1e\x1a\n\xe8\x1a\xfa\xc8\xb8\x0eS.\x85\xc7\x1b\xef\xaf\x9c\xcf\xd6\x17St\r&\xa4\xee{\xe3\xc1\x14\xf3\xc5d\x91(\xf5\xa1"\xd7\xc4R\x90\x1d\xe7\xca\xc5\xa2\xf90\xc5\xe1\xab\xad3a\x9e\xec\xce\xd90\x80\xf09y\xa9&\n@(c\x829s]\xa7\xca\xc5{a+\xddY\x91\x15|B\x9c\xb3\x82\\\xa1\x12\xf31\xc2be\xbfZ\xaf3\xebC\x95\x1b\x94`\xf0H_\x9as9#\x0e\x86\xd1\x19(\x0f\xc6\xd0\x15|R#\x8a`?v\xbfgM\xe3\x9b\x14E\xfb\xbc\x17\x1d\xf8\xdd\xc9|);\x83\xb5\x1f\xe0{r\xca\xce\xef\xbe\x9b\x9b\xd3\xc2\xe7\x81\xab>[\x14\xce\xa2\xe8\xf1l\x87\x0c\xfbUw\xac\xa0\xcb\x0f\xe5S\xc72\xb9\x1cbr\xbf\xd6h\xd3\x18/\x90\x17\xad?\xdf\xde;q\xe2\xed\xc2\xc1m\xe4K\xc0\xd3\x9f0I\xdd\xe9a\t\x1a\xb6\xe3\x8cYFz,\xce\xd4\x9d\x81\xff\xadY\xdf3*(B\x1d&H\xb8\xb2\xb8\x19X03ZN\xc7\x1f\x06B\xf5\x92;sh9\x88\x1aB\x17\x9d{9_g\xdc\x02}\x88@a\x1au\x83\x84R/#\x8fU\xa4\xe4\x80\xe8\x076;\x0e\x9c\x96,$\xd6D\x0cB\xf3\x06\x12\xaft\xe0a8\x10@\n\xe9\xf4\x81\xa3\xd5\xb7\xb8\xcb\xd4\xddB\x18/\xeeI\xb8\xf3|7\xf5\xa6Zd1\x00F\x9f\xbc\xe0\xd8\xbeK\xb5\x01v\x9c\xc9\xa2]FA=\xd5.\xfc\x87\xe5\xa4\xd6\x9a\xe3#9\xdf\xc8\x8b\xef\xcb89\x92BSV\xaa\x13\x19\x97\xa6KA\x9e\x16x\xb3m\x9e\xff\x8fi\xac\x01\x07t\xf4\x97\xecU\xe4\xb6\x82\x0b\xfe9\xbb\xf9a\t\x8a[`~\xb0\x87ba4\x8eA\xc8\xca\x90KW\xd6\xff\xa3\xaf),u\x97\xe0\xec\x8d}\x97\xa6\xd4\x85\x8es?\x7f\xf1\xd6\xa1\x05\xd4\xcf\x9a\xb7Wr\x87\x9eS\xef<\xa4\xcd\xa6{\xd9\xb6\x8d\x04\x958I\xe9!\x0e|\x13\xb6\xc6\xa2\xf8\xe6\x06\xd3\xbc0\x8b\xa8\xc5\xadpr!?\xe8)g\n\x19\x85\xffye\x17\xff\xe7\xf9\x12\xff\x19*\xda\x80\xb3\x9b+\xde\xc0c\xbb$WA\xc4\x81$\x1aL\xe9Q\x91I\xbb\x92Y\x10@\x17B\xfc\x92\x89\xb8\xdf!e>R\xbf\xc1\x83\x03pp\x02\xb45&6\xb0\x8fK\x0ej\xd6\xa6\x13\xad\xed0)C(\x15\xa4\xc1\xc0q\xed\xf5q\xd8\xcew\xbf\xfa\xd7\x1b@\xa9\xec\xe7pu\xe2\n\xcb\xfe$\xf2\x14\xffo\xafr\\\xe4\x02\xeb\x83\xc8\xb5\xe4\x94C\xa6\xddw\x029\x8b,\x8e\'\xf6k\xdaU\x1fJFs\x9260\xc7\x87\xe5w\xc9\xe4rP\'%W\xab\xa6\x0eV\x17\xc2\xfe\xe4\xa9\xbe\xe0\x88\x18g\xb7\xc7\xecR\xaf\xd8\xdd\x1b\xb8R&\'\xefC\xb2sE?\xb1P\x84\xb5B\x08:=Y)d\xc0\rH\xf0[\xc62\xbe\x1d:\xbe\xa9\x9a\xb3T\x1e\xa7\xd3\xefOS\xa9\x8e\xc6\x91M\xa6\xec\x06z\xa4\xf7\x87s\xa6\xa9\xdf\xda\xe0Z\x9fvP@\xaaFv\x9f\xb9\x85\xa69\xff\xa4C\xe0\t\x16\xee\xdc\x85\xdaL\xd5\xc3\xde\x1a\xe6\xe6\xc4\xfa\x02"\xc6 \xe2N\xef&\x9a\x8aK\xb9\xc2q@\x0bR>W\x148\xc1\xb2H\xa53\x8d\x16g\xcd\xca\xa5\xf0n#uz\xe5^\x18\x1d\x17\x11\xca\x98O\xde\xb2\xdb=9WR\xb0\xd2\x03\xe1^\x00^\xe4\x8c\x15"\xfe\xd4z&\xa5\xf1\x98o\x86\xcf\xcc\x7f\xe1\r\x9d\x1d\xca\x91\xa5C\xd8*F\x90\xc9\xbel\x9e3&\x8e\x8f\x99\xa0\xc2\xc0\x92\xe5\xd2\xa5}\x9773\xa6+\x12\xa4\x07\xad:M\xea\x85<\x9f)\x0c\x95\xd28\xc5\xc3\x10Z\x95\xc4\x1f,FN\x8e\x11\x1f\xf4\xf51\x17b\xb0k\x8b\xd1\x1a\xf8l\n,\xc5\x90\xfc\xe7\xf5?\x83-\x03\xef^\xf5\xe9\xaa\xbb\x1a\x8f\xed..\xe0\xe7\xd0oBGii\x9f\xe1\xd3\xf9\x85\x85DQ\x19G\xac\x02\xfa;\x86q\xc8\xb7\x9c\xb5g^/#\xef\xc9\x961\x1fY\x9e,\x16>7\xfcmp\xf8\xb8\xeb\xe8T\x85\x15?\xfawR\x08k\xc5\xeb\'n\x13\xad\x80\xee\x0e\xaaC\xaf\xcdU\xffN`jYr\xc0\x11\xfa\x05\x08AX\xff\x19\xe7g\xfd\xb7\xb0\xb3\xc1\xd7J\xc2\x9d\xc4v\xeb\xd1\xc8w\xc1\xb4MJ\xdc\xd7\x9f\xc4\xc7\xe6\xae\x9eO"\x80\xae\xc6\xb5\xe4,\xe4\xeeW\xc6y\x18\x8aGv\xa8\xd2\x04\'\t\xa5\xa8\xf2\x8b\x10-3n\x11\xa3\xe3\x93(\xdc\x16\x05\x94\x8dC\xf5\xfa\xf3;\xcaRgx\xfc\xc7\xb7P_$\xd8L{\xf7j\x07\xde$\xc1\x12X\x86\xb7\xc3:\x08v\x13kd\x9e\x17p\x9b"\xd8\xc3\xc0rA\xfe\xd6\xba\x89\x9f\x98\x0b3\xa9\xe6X\x83\xd0\x11CL\xdfI\xb0\xbeA\xa8\xfb\xf5\x02\x86z\x8c\x8a=\xbc\x99:y\x86\xfd\x0ccA\xff\xb6\xa2V\x0c\\yBC\xa1\x1f\xdf\xc4\xef\xea\xd1a\xe1\x81\xcd.KHP\x051\x11\xe8\xb7\xb3:\x11\x8e\x9a{v\x05\xb6e#\x1fV*R\xb5\xbb)\xba\xac\xd0\xa2c\x93\xeet\x1f]\xa7\x04\xd0\x8f\xf5\xf1\xdd/;gF\xa8v{\xc7%\x03\xd1\x1b\tD\x92\xfd\xe8\xf9\xda\xdam\xa4\xd6\x12\xf3\xd0=\xa6\x80?\x94\x15a\x18%\xeb\xc1\xfdD <#WQ\xc8n\xd8\x91\xacxu\xfdX\xae\x0c\xa4\x84X\xc3\xf5\xf7d\xb7\x85\x8e,\xcc\xce\xf4\xe1\xd2Yf\xa3\xa0"\xf2\x16\x95\x9e\x08/#K\xeb@0\x96(\x99\xf3\x9f+\x8f\xe7\xd2\x1a\x16\xc7\xc3_6\x9a\xe3\x90\x8e%\x01I8$E(X\xb8L,a\xd0\xfaJ\xce\xca\x7fn\xf4*q\xbe\x8d\x83\x0f|\xda?\x83\xef0\x9e\x1a\'d\xa9\x02\xcc$<{\xecC\x01T\xab\x87ahO\xf3\xd4\x05\xf1\x97\x04l\x8a-\xbc]\x19\xdc\xabArp\x97\x89\xe1\r\x93\xa10x8\x81\x94\xea\x12\xc2\xfcPg{\xf2\xe3y\xb8i(\x0b\x15\n\xd5\x85">\xe4\xa6\x88\xdf\xf6\xd0\x97T6\x18\x03\x1b\xb5HXSk-\x82\xb2/\xf96\xbc\xc5\xd1\x08\xf07"\xcai\xfb\x0c\xef9%q\xb1T\x19\xf6J_PZ\x93\x97Q\x967\x13\xdc^#\xd3\x89\xf5\x01\x81\x91\x02y\xdbR\xf9bN\xfd\x81\x13a\xb0\xb1l\xb0\x0f\x9fe\xcdt\x95K\x80\xac\x15\x18\x89\'wA\xbc@\x1a\x1b\x9b#\xad\xe6\x04\xcf\rd2>\t\xbb\x94a\x83\x99\xa5\xa6\xfe%"\xe4\x95G\xbc\x9f\x84\xa4G\xfb\x11cI\x9e\x98"\xb18\x17\xcc<7\xc9r\xcd\xf9\xdd\xae_\x1c2\xdeP\xf3\xdd\x11|[7\xa3!w\x80Rl\xe5\x04Q\\\x18\xf7\x17G\xaf\x83\xdf)`\t\x03yBp\xaa?\xfb3_I\xd3D4@\xd3\x19\xcb\xf7\xfdv\xf5\xa1>\xefA\xc8s\xf5\x81\xb8\x8f\x9f)\x99\xb0^\xa4\xe8\xe2\x97\xde\xca\x94\x8d\xe9\x9aB\xe7\xc6vrS\xdcG\x9dg\x03\x8e\xc0\xdf\xbe\x1b\xb7\x8a\xf3\xfbjI\x1a\xe3\xf9\xa9\xb1\xaf\xd5\x03\xbb\xc9hm\xa6\xf1\x1c\txk2\xc6\x1d`\xad\xc8mE=\xd4\xba\x9eE!\x1ac\xdc\xf3WR\xaeo\x02\xb9a\xfc\x0f\xb9\xf0\xb4\x0eT\x11\x14\xb7\x12U\xc6\xc0 \xe0\x15^r|\xc0\x0c,\xa5\xf3\r\xef\xaa(\x9c\x9e\xbaj8{\x92\xc5R \r\x1d\xc1\xdd5\x98$AGe\x0b\x1d\xc8\xac\xdf\x7f2\xc1\n\xe2\x947\x96\x15\x00E\xfc\xa8?\x8a\x8f\xe0\xfal\xe0\x01\x08\x92\x87]\xe3\xc3[}\xe3_\xa5{1\x85\x8b\xb7\xf8\xb1\xfd\xd7\x08\xca\xc0\xd95\xfa\xd8\x99\x01\xb0|\xa5:\xea\x00j\xb4\xa1\xa0\xa7\xe8\xcd\xa9&\xba\xceD`\xa9r\x1e]*g.4\xdc\x0b\'->(\xb0<_\xdd\xcd\x9f\x90T\x8b\xe8\x1d\xcf\xa5H^!:\xce%\xa3\xfd\x18$j\x9f\x8d\x01\x91$u\xff>k\xaa\xa6G\xee\x94\xfc\x825\x1dqE\xc0lD4\x05\xf9\xfchn\n\xd4+\xe5\xb1`\xc8P#S1\x813\x00|E\xf9?\xae\xe1S\xd950\x0e\xb4KjF>\x08v^\x85b\xf8-\xe1\xd6\x1c\x12\x19\x08\xbf=\x0c\x85\xdf\xdb\x7f\x11\xa4\xea\xa9.tC\xc6\xde\x85\xa0?\xa8\xbd-\xf9\x92FQ\xd1<\xb2\xaa\xdf0\xd2WI<}`\xaa\x13\xef\x9e\x9f\xfb\x9d\xd8P$\xbbt\xe1\x00p\x85\x06\xf5\xa7\x8c\xdd\xfc\x9e\x8a\x8b\xca\xb1@v\xd2\xd6\xba"c\xfa\xce\xa5j\x9dd\xc79d\xbe\x13{\xbb\\C\x86c\xe6\x0e\x10#\x16?\xaa\xda\xbc\xe0q\xe3\xec\xb7\xfa#\x18\xad\xb3\xf1\x1eOz\xcf!\x9cR\xc6\xef\xd7\x01Cl\x07\xa5&w\xb7i\x87 \xc6,\xd3g\xde\x8a\xf6\xb3\nW,<\xd2\xc9\xd0\xbeO\xd4\x1a\x0c\\\x8b\xfa\xce\xfb\x12\xe9\xbb\xa8\x9dqc\xdb\xf8\xb0\xc4\xf1\x85\x8buC\xd6\xe9\x87\xb9\x0c\xe8\xba\x94\x1aP 1\x86\xc0vP&\x15\xa7Y\'G#\x0b\xc4\xb8\xe8\x9d\xcf4Y\xf2}\xf8wv\x7f\x94\xf9U_`\xae\xfb\x0c\x9f=-\x8cX\\\xedO;\xb1\xc1\xbeM/.^\xed\xd8\xfe\xbc\xee\xa0\x1a\xefb-\\\x03\xfa8\xf6m\xeblH\x98\xe5\xc7\xd46\xaa6\xbd\r"i_4r\xf6|\x0f\x18u\x9c\xe7\x15\xbdU\xe3\xa3\xf5g\xb9\xe7\xfd\xe2\xb5\x19Z\xb9\xa4\xaa\xb1\xf6c\x84\xa0"\xcb\x07d}\xdd\t\xf6\x1b\x85\x13>\x03`v\x1fF\xe8\x94d\x05\x7f.\xf1\x8e!\n-+\xaf\x06\t1&$R\xb7Q\xa2\x02E\x14\xbdk-o\x1d\xcc\xe3&\xcf/e\xf1\xc4\nt[N\xb9\xb7%@x\x8c\xd3\x16\x14n\xc5_\xc6\xcc&\x9d;\xe6\xa2\xdf?\x83\xa71\x9c\rh\x90N\x88H\xfb\xca\xd5k\x8e\xaf\xab\xc2\xa0/ \xe5\x86\x057p\xfci\xb3\xb8\xaf\xe1m\xe5\x89\xd0<\xd0\xac\x86\x8f\x9fn3\x0e}\xfb\xef\x11\xd2\xf2%\xf9Vb\x12vm^x\x17\xf4\xa9\xe4\xee\t%/\x0c\xdb\x9ck?\xf2T\x8e\x06\xfd\xc6\xa8\xc6\xf7Q\xab\xa6tF\xd9\xf0M\xc4\xbfN\xcc\xf8\x8a\xb5\x1f=\xdc\xf3\xf9i\xe8\xa6.\xc8c^q:Z\xfb\x85\xa5\xed\xb6}\x1c\xd0R\x82\xe3G\x85DA\xc9\x02;\xc3TJ!\xbe*!(l\xd9\x8f\x95\x96\xbb\x08\xda\x05\xa3\xca\x88j\xbe^[a\x036\xc1\x9agioP\xf6G\xd0\x97o\x06\xf2\x17\xca\xb96F\xcc\xa6W\xa1\xb0\x86l\xf2x3\x98\x8c!\x93\xee\x7f\x03;57\xeeH=\xb9\xed\x9f[\x92&\xe7\x1d\xcd[\xbb^\xe1\xf0\n\xe8\x99\x02\x10\x08\xddB\x11\x92.p\x876\x9c\x13\x0c\x80\xe9\xc7u\x1c\\\xfd\xab\xf0g\xb1\x90\xd6\x83Dr\xab\xb8xw\xd5\xb2\xe7\xcd)\xf2.\x80\x08fs\xa8\xaa\xeft\xab\xd1`{\x8e\x17H>\xdb\xf9\xb6Z1\xd9\x9f\xfc\x17n\xb9A\xc7r\xc8L<\n\x1b\xb5!\xeb\xee\xb1\x1d\xfd\xe6\x98o\xc5^}*\x07\x9d\x9e!-\xd2jbCz\xc2=4a\xd68)\x90\xf6\x1c\x9c\xa4\x97\x7f\x0c\xcb;o\xf5\xb9\xe9\xfdB\xc2\xf9\x9d\xce\xfd\xd7\xa3,B\x90\xf3\xed\x9f\xf8\xeb\xfe\'\xd2/\x16y`\x9bA \xd5\x9d\xcfZ\xc9/xU\xae\xe4\x17\xb8\x1f{\n~A\xed\xc6\xaa\x8e\x11\xf6T\xa4\x18<\xc9\xb7\x98\xa4\xc72\x1d\x9c\xbc\x81\x8a\x1c\xbcs\xf9\x03\xa4\x7f\xabaj\x9b]\xb2\xfc]\x9eu\x9d\x80\x06E\x9c\x8e%mzpE\x95\xb9l\xf0\xf9\xaa\x1e\x07N=\xebc-\x94\xb6\xc9\xa6\xc325\x9f~\xdfm8\xed\xe6\xdf7\x0f\xd1B\xa6\xe9\xeb\xbc\xf3\x90\xb9\x9b\xa9\x9eW(\xfc\'6\x13: Y\x81\xc5!c\xfa\xee:\xa7W!T\x89\xdc;::\x8e\xce\xef\x16TE\xbb\xd7\xd4|&\x90\xa4\x14\xde\x0f\n\xea\xdbu\x82=\x94\x89\xba2%\xe1\xf9\x15\x12\xfe\xef\x85\xee\xf5Z(\x04\xd5\x9c\x9d\x1a,\x9bQ\xb5N\xfc\x83\x82-\xdf\x1b\'\xe1\xc7\xd2I\x04@\x82\x1e_\xca\x98\xceE-\xa7\xc8xZ\x7f\x1c\xe3}I\xd1Ej\xe9\xa2\xc0\xcf\x19"bfv\r?\x08EMtbS;\xb4\xf5\x1a\x02\x06\x94\x96qA\x0bgk\xd0\xedU0\x9ca\xfc\xaa\xc7\xf8]wt\xcbV\xbbh+\xe7Q\x0c\xdf\xc7\xe3\xa4=\x81]\xdb\xa5(\xa4fKN\rcy\xe7\x06\xb5u\xc0\xb5 \xb9\xfb>\x01\x89\xba\x81\xdd\x94\xd5!KV0c\x05\xf3.\x1b\xd1B:a\xf4~b\xdc#\xe4(3\x82xY@\x1f\xeb\x1dzh\xf8\x04\xfb\x83\xe8|\xe54\xde*\x18\xad%\xe5\xee\\\x8d\x8af\xf5\xff\xd1\x9f\x82P\n4b(\x9c{J?*\xa1\xab|V5/?\xe51\xefe9\xff\xd3\xa9\x17\xaf\xe8\xd1%l\xa0\xb2{\x8e\x85\xadd+\x15\xb1\x99BgzVTDG\x82\x03L\xb3Ug3\x81#+\xae\x94\x17\x84\x01\xaf\x8f\x19f\xbb\xf4[R\x1d\xad\x07i\xd3\xe5b\xdcg3T\xfcL\xd4\x97e\x9bjj\xbe\xcd\xa4\xe3j\x99Mnm\xb6\xab(4GAu\xa3\xf6\x1f)\x98\xbc\x97\xd0yz-\xe43\\U\x9b\xbd\x93#\xf6\xe6 {{\x12\xb3\x8c\x9e\xbe4\xc4\xd5*\x0b[\x94\xb9\xb7\xba\xff.wu\x0f?#\xd7k\xfe6\xf7\x87r/+Y\x0e\xc4\xec\x19,\x1a\x013\x94\xb7>X\'\xd6\xa8})\x92\xc8\xefa_\x00P\x17\xca\xf4\xa7,~\x16t\xa6\x88Mh%#\xd9\xdf\xd8Uj1a\x9a\xac<o\x86\xd3\xe0\x9a\x1d\xd9\xc6>\x9f\x0cd\xe1"\x01\xc3%9\xb9\r\x88\xf4;\xdc\xa8\xbb\xee\x8dU\xe0\x86\r\x18\xfd\xeb\xd0K\x99\xdcO\xf7U_\x1dwg\xad\xa7W\xe8\xa9\xe7\xce\xac\x15\x9541L\xe49\xae\x0c\x0fe\x04\x0e\xf1T\x841Ji\xc7\x85A\x9a\x83R0?\xd8&\x8a3\xacu9e\x92 \x90-aU\x08\tyOE\x05\xb1D2\xf1q\xdc\x1e\xa8\xaf\xcb\x82u\x89<\x87\xcf]]a\xc4u4\xc1\x98TbV\xef\xb5(\xb7\xb2\xa8\x10\xe6\xc07r\x82\xba\xee\xae<j\xef\x10p\xedm\x01\xe9\xbe\xd2Hr\xbc\xe9\xaf$\x8c\xb3\x9a\xd3\x96wd\xe7/\xa64\xc9\xe9\xf4G\xd6\xae*h\x82\xb3\x81A\xfd7\xb0\x8e#>\xbb?f\xeb-ZI\xd3\xb8\x05-{y\x0b4\xa9\x06$\xa8\xc8\x8cx\xa7\t\xf3!\x18w8\x8c\xdb\x13\xfe#\x95S\x91Qn^\xa9\x0c\x11Z\xf6\x83\xa1\xa6\xc3\x9d\x01\xee#@rk\xd3\xee\xe7\xe8\x08\xa7\xad\x06\xd9Q\xd1\xdf\xa5\x9b.8]]]\x97\x8f\x1b\x85\x19M\x17\xf5\x0e\xdf\xf1m\xac\x0f\x84>\x99\x8d\xad\x1eb\xa7\x85\x9f\xbem#\xfa\xa9\xb1\xbf\x06kq#^\x94:\xae\xe6\xa6\xe0W\xca\xf6\xb0\x01\x90\x95s\xafx\xd4\x92\x16YS\x05\xfe\x9e\xd6\xfc\x03}\xf7\xb4(\x89JFW\xac\xfa\xee\x10JK\x0b\xffp\x1f\x19-\xa8f\xed\x9b\x08b\xb9z\xc9\x1aG\x92\\\xed\x19n\xe0\xb8\n\xbd\xb5&\xeb_z\x03V\x03W\xe0\\\xef,m\xb0N\x15\xb8E\xa2\xb7\xadA\xd6\x99#\x91\x0eU\xa7i0\xe88\x887\x0f\x05\xb8\x8e\xd1\xef2\xd6\xf4\xeeH U\xcbH\xc5\x1e\x13{\x8dh\x06\xf6\x1d\x89\x08NB\x1e\xaf\xed\xc2&\x1e\xa4|\xf0\x98\xde\xcc\xee\xd9\x95\xcb\xd9 \xeaKN\xa5\x17\xd8\xee\x07\xb4K\xf3\xe9a%y\xca\xf6\xec\x02\x12\xcb\x02\x9aP:x\xcc\xc3\x1d:\x14\x11\x8f\xcb#\x8dT\r\\D;\xee\x9d\xab\xb6\xcc\x9e\x84\xb6\xaf\x95Ze_d\xbf\xfd\x07\xb6*\xf3&\x90:\x84\xbc\xae]\xd4?\xebN\xcc\x10\xbcX\xe1Ahl\xb9\xef\xb3\xddS-\x83\x9c\xe2\xc6p=$\x172[\x99Y\xdb\xa3\xa6\x9e0\x92\x7f\xd2F\xdesd5IU\xe9\xd9|\xa0\x10\xf24\xc2\xa3\x19\xa0=A\xf7\xae\xa9\xfe\x04\xef\x10\r\xa7\xe2+\n^\r\xea\xd7l\xc0\xb2\x02\xe9\xad\x7f4\x831\r>2\xea\xb5c\x19\xb7e\xaf\x92\x85\x86\x0e\xaa\xa6\x0e\xe9\x0e\xc7\xf7m\x8f\x8b\xa5O\x1c\x0f\x18%\x05I\x11\x9f\xc9i\xa7\xbcv`\x02\x9d\x1dL\x8d\xda\x98\xd5]%\xb9\xb8p\xc8\x19Y]yq\xe2\x99c\xacc\xcck\x00\x8f-H\xa59S\xf6k\xed3Os8\xe2} \xe4\xea\xef\xf3g\xa5\xfc\x06\xc7\xca\x95\xde\x9c\x82\x9a\x82\xf6\x1a\xaa?+\xff\x9d\x1eY\x8f\x14\xf3e(\xba\xc5\xcb\t\xdcl\xee~\xd1\x97L\x9dz{\xdb\x98\x19\x0f.\xd0_0\x1f}\xd0!\x06\xebk\xf1\t\xaf\x9c\xd7yO)y8\x14Y\xb1#U1MM\xb1\x07\x101@b\xe8a\xdcv\x86Q\x93\xfc\x10U\x7f\xa4\x82\x01e\xa31)[\x03W[2\x14\xfb\xd9\xcc\x9cn\xf1\n\xb2\xc7\xd6Z\xce\x86\xb4Z\xfaA\xceS\x04\xd5y\xec\xb3Vk\xd8\xa8o\x18F.^\xb2\x99\xae$\\\xf1\x1d\xc0H\xe1\x95\xa9\x00\xdb\xe0\\\xf6sU"\xef:\xef\xbb\x9eP!\xbb,\xab\x0e\x1d\xb7O\t\xa1T\x1c/88J\x86\xed\xe4:\xf9\xf3)R\x9c\x18lE\xe6\x02G4sS1\xfd\xd2\x97j\x9d\x96\x96\xff\xa4\x10\xea\xd4\xb62\x0c\xa8m\x02\xceT\xebV\t\x82\xb3\xee\x17\x128\xae\x0b\x0e\'\x10\x86\x15Q\xbb`@C\xd7z\x8aS\x817\x93\x94\x88\x05\x93\xc4\xc5\x89\xccT\xd5\x8f\xee\xae\x12\xecU\xed\x9d\xcbWi\xe1R\xae_\xf0\x82?4\xcd\xcd|\xd4\xa1[\x0b:\x0bf\x96:\x02\xc0\xc1\xd8\xacc\xc7H\x17c\x98U\xbcL\x8a\xd3\x08\xc4\x06\xef\x10q%%0}F^7\xdbe\x8f\xaa\x82\xa2\x1c\x1a\x8a\x00\xa4\xd9\xb0\xc7\x0c0\x88\xd9Hj\x0c\xf5\xc2\xf2S\x11\x1b\xe3\x02\xe9\xc2c\x92{\x82cC\xbd\x15\xb1\x1e`\xee\xbb\x16\xe3\xf4w(*\xd7\x93\xe9\xcc\x00\xb3@\xe0\x89\x8e\x06c\xf6\xfaVF\xbcG\xf0\x80m\x94SL\xca\x95\xf4\x9f=p\x9a\x05\x9e/\xc2\x18\x92P?I\xb0\x19\x91aa\xa2$.\xc2\xb0v\xe0\rH\x0cLZ\xb8\n\xb3\xf8[\x91A\xb6/7c~1{\xdd\x87\xb4\x9e?BOf"\xba\x1a)\xe52\xa8\xa4\x81\x11\xf6\xe2,\xc1\xce\x02\x0c\xd4\xedy*\x89U\xcb\n\x91D\xf1\x97\r7w!>>\xcc9h\x04\xc2S%\x1c\x03\xc0x\xe1\xe8\x1f\xaeWjzD\xe6\n\xb1\x96\xa0\xae\xa9\xbcXs#\xca\xe6\xde\x8d\xc7+J\xe9\xfb\xaa\xe2s\xc5\r\xbb|ubB\xb8\xda\xe3\x7f\xdbv\xe9\xac\xc6\xc7\xb2u\xe6\x94%d\xb1\xef~\x05,;\xa9>\xd2A\x8c\xad\x02\xb6c\x14GM\x17\xc6\xffG\x83\xbb\x1d\xea(fZ:\xea\xc0\x80\x86\xcd\xd5\xf2\xfa\xc6\x9f\xe4\x9f\xee\x7fq\x10\x18`,\xe8?\xd0\xb0C}^\xe5\xf5%S\xb5\x99:J\xcc\xa9%N\xbf\xb1#4\xf3\xf6\x8bz6\x89X\xa5\xca\x83\xeb"\xee6i\x88\xe2\xae\xe3\x12\x1b\x99\x14^|_\xb4%\xed\x05$\r\xbc\xb5_\x86\xb6G9\xces5\xa4\x8e\xabXV\xfe\xc3\xf3\xd1\xcba\xc8\xd57\x99\xb1j\x02\x95\xday\x02\x80\xcdXP\x14\xe6\x0e\xf9\xd8qip\xa7\x03:\xcd\'/v=o\xe8\x8fW:\xbb\xb8\xbc\xd2\xaa\xd4\x8f#>\r"\xc2\xd9\xe3\xd0\x00A\xf7\xfb-(\xcegj>\x85\xc0\xa9\x85\xcawN}q\x13d\x96\xfa\xe48\xdf\x99\x10q:\xe9ub\xf8\xb2\xf9\x13\xad/\xf4\x12s\xd2\xfaJPr\x97\xf5\xf3\xb4\x85e\x93\x9a\xa5\x82qz\xdf\xe8\rr\xf0?$\rh\r\xbd\xa6\x11>s0\xd7-p\x13F@s\xb0\x82@\x19}\xb8\xaex}Gu\xa7bj\xfeA\x19\xc1\xdfY\xf4\x01?UFR;\xaa\xbf\xdf \x03\xf2\x06\x98a\x0b F\x8a\xf7\xe5\xea\x95|w\xfe<+\xb8\x0e\x02\xf1\xbce\x8f\xc4\xdc\xe2\x07\xba3C\x04gD\xc6\x8fD\x1b\x9c\x15\xb2\xb3Vp4\xa9\xd3\xf4f\x06sIv\xbd\x14\x9f\xfc\x83\xcb\ty\ncP\xf7\xf66\x9a\r\x1c\x91#e\xcc\xd4\x94X\xfe\xcc\xc1U\x18\xf5\xf6\xd1\xed\x18\x81Dz\xaf\x7f@N\xd1\x197\r\x85\xd6\xcaf\xf3:\xe3";\x1f\xf3\xd5\xdf\xde\xd8sGS\x15^\xb6\xc0\x90\n\xcd\xa0\xdd\xbe\x8c\xb44\x043B\x96\xe9\xf3\xfb\x0f_\xf0$\xccAvz,\x0c\xeb+j\xca\xd7 \xb8\xc1\xb6\xa7\xbe#]W,\xf8`\xac\xa2\xd5^\x96\x9bg\x12\xa2\xea\x86l\x8fd3\x19\xe9\x8d\x87\xc9a\xd1\x9e0{S\x99\x03\x859\xfe\x88D\x9d\x9f\xf7\xbf\xda\x0f\xa7HZ\xe5\xb8\x83\x91\x86\xb3\xe4\xb5\xa9\x8b\xd4\x02/Vs\xb0\xb9\x90\x8b\xf6]#\x0f\xe3\xf1\x08\x17NUnU\xef\xe5#\xc1A\x061q\x84\xa4\xb7\xbf\xbb\x88\x7f\x07\xec.\xed\x81\x9c\xca<\x929+\xa4w\xd2f\t\xea\x89\x04N\x18O\xe4#\xb9u5\xc1\xe8\xa9e\xbd\x85\xf3s\xfdu\x0bfO\xd6\xe4\xa4V\xea1\xd0A\xbb\x98\xd1\xac\x9a\xa6"\xc0f\xd7\x1eLr\x9c\x04{\xbf\xb5(\x13\xeb\xdf}\xd4z\xaa\xb7\xb4qn\x07\x87uRv\xd4\xe5\x8b\xc1z\tr\xfa\xe4-\x9a\x95\xc7\xa1\x97X\x1d:\xb3\xeeU\xdfF\xc7\xf2\xa6!\xc2\xd4\xdfv\x0b|\xf4\xc9\x03\x0fp\xbc}\xe1s.\xf7\xf4\xae\xa6&\x17\xa5W\x01\xe1J\x96\x81c\xf9\xc2\x02\xd5=\xca\x1byo\xea\xfc\x8b\x19\xb0\x8f\xd9A\xe60\xd3N\xec\xe8}\xbb\x0cf\xe9\x1a\xc2\x94nV\x9a\'Hqt\xed\xfd\xce\xa9R\xabTE\x8d\x13\xf6\x07\xb2\xber\xf3\xdf\x8d\xbe\xbd\x84\x86\xe4\x81\xc7\xaa\xfewK\xaa"be\xf2\x90\xfd\x91a\n\xb6\xbc\xb2\xec\xe2\x0c<\x8f\xaa\xb0}\xb5\x05\x0c1N\x07X\x13IpO<[\xf1\xd0\xea\x85%I\x1b\xb7\xfd\xc0v,\x94\xe1\xc8\x99\x1aD\xf7_)\rF<\xd5N[\xf8\xb5\xf1\xadd\x0bh\x03\x1a\x1dAR\xcbql_g\xfa\xd0S\xc4h\x8f\xd1\xa5\xbc\x992K\xa8\xab\xbdrI\xfd`\x83\x1a\xeb\x85\x8e{\xb2t\xcf991\xa3\xdb\xf7\x0e\xad\x11\xa5\xf6B\x8fJ\xd4\x85\x9elx\xca\xb6\x88\xec\'\xb9\xe5S\x8d\xaf\xce\xa5\xf3\xf9\x1d]\xfa\xeds\xb2#\x81f\x08\xc6K\xbc00\xa1\xe5(\xa5/\xb4*8\xfa\xe3|\x03(\xd1\xdd.\x97\xb1S-;O\xdb\xd2]\x12\x95\x0bV\xc8A\xfaIh$+\xb6(\x9b\xf2\x99\x87\xbap&vZ\xbe\x1f\x99\x83\xb4\x99>\xd1\xe1\xe2\xb2\x93\xad;\xca2\x82\'\x9a\xb8H\xf5\x97\xa3\xa0\x17\xd5\x94}\xd3\xa0\xd0\xb0\x8f\xf9r_\x9f\xe5\xf7j\xae\x89\x93\x8a\x7f_\xaa\xba\x84\xbe\xc0V\xf1*s\x9e\xaf`N%\xca\xaf\xb6c\xe6V\x9f\xc0\xccqw\xba\xd3l\xd9\x14 \xcav\x16N\x1b\xfd\xa9\xf2}>r!\x8a \x8d&\xaaG\x15\x8a\xd0\x99]QxK;\x8d\x9f\x88\xd7\xee\x83\x978%\x8e\xbb\x08\xcf\xe5\xc9\xed<\xe3SQ\xd2/=VZZon\x9dR|\xea\x07;\xe4JfX\xda79)\xb1V\xd0\x84\xce\x03\xf4M\xab\xab\xddN[F\x08\x05\xf3\x1c\xb6\xde\xb9n\x8a\xdcktKi`\xcbU\x98\x1b\xff\xfa\x1bo`s\x842YA\xcf1U:B\xfbB\xf9\xd4\xe4\xea\x8e\xaaYn(\xed\x06\xaa\xfc\xcaO\xc7RG0\xa4\x86\x8d2\xee\x18 \x04[iz\x9e\x99t1>p.\xc2\x1c\x10\x14\\9dk\x8b\xbc\xad\x1c\xb1a$\xf6\x0f\x17>\xdd,\xf8OM3T\x90\x8b\x05~\x1a\x91\x87\x98\xd2EO\xcc\x86E\x0c\x1b\xe6i\xaeDr\x92\x9a8\xd4x\xcdl\xba\xd4\x82\\\x9b\xa0\x8bKW\xe3\x07\xed\x00&ef\xcfL\xc4D\xe1\xe5\xea\xa5\xcfum\xe27\xeb\x80O\xdd\xb5;\x97\xdb_$sn\xbd\xd8\x14q\x9e\xc3\xd9\xfb\xd7\xb8a\x06\'\xe9\xcb\x03\x85\xdd#\x17\xf0\xd53\x03!:\x10h\x98\x06\xc1\xd4\xf1\x1f\xea\xefyj\xaa\x82f\x0b\xf8\xa1\xef5\xa5\x92\x04\xab\xf3\xff g4L\x95\xd6"\x9d.=\xeaZE!\x93\x8b\xb9\xddS\x9d\xd5\xe90\x12\x83\x85i\xa0S\xbd=\x92m\x1f\xef\x86Ri8\xfa\x1a-\xbd\x999k.\x88e\xd8\x93\xdc\x97p43\xd8{\xe4\xfa\xbe\xb1\xe1\xf9\xcf9\x80}\x8cCP\xde\x94d\xc4\xaa\x0f)\x85q\xf8\xd8\x1b,\x11 /\xc5\x08\xe9\xa0\x9fA\xd6:\xda. <\xd3\xdc\x99\x1a\xfa0\xbd\xcc\xb2\x13!R-\xdcV\xf2\x830\x96\xee/A\xbd;)-\x01\xbfV}k\x0c\xe5\x18PUj2\xbb\xfb\xaa\'\x9d\x07\xa0\x9c\xed\xec\xe1.\xde\xa4o_\x7f\xb4\xa1\xc9\x15\x11\x11 \x99\xc0\xbe\xf7\x1f\x80\xdc{n\x95\xd8\xd6\xcf!\xb0\x9d\x89\x13\x80cg\x17\x0e\xb6}\x9a\x12\x1b4\x97\xb5\x96(\x0fK\x92B0\xe3\xb0\xde\xb0\x0f8\xde_\x9dTi[\xeb@\x98\x00\xc6\xfc\xfc\xf6\x83T\x1f\xfeX[\xcd\xde\x1d\x07\xc2\xff\xd3\xd9\x9bSX5\xf4\x14\x99\x19\xf8\xf9zB\x8a\\|"\xfc\xc0\xed\xcdp\xa4r\xb0\x94x\xdc1\xd4\xa4u\x8a+\x19[\x16"S\xe7Y\x8en\x06\xd6\x06\xc5\xa1\xd7a^%\x81\x02j\xf9\xbc\xd2\xee*G\xe1\xcf\x89\xe8L?\xb7;M\x9bh\x16N/\x08\x9b:\xff\x91\xac\xe6\xe4;\xcb\'D\x07\xb8\xde+\xf7%\xb1_\x04r\x91\x8e\xa3\x83\xea\x8c(\xc2\x83z1\x98e\xa1\x94\xcd\xa0\xc5\x8f]\xc3\xbbm\xc9{C-\x08Xg\x0e\xebzMwy\xec\x0ba\xc1\xfc\xec|\xca\xdaa\xee\xaaN\xe6$\x8a\xd6\x7fd\xcb\x11\xbbc\xce\xf8\xaa\xb6d\xd4\xa5\x0e\xc6,{y\x00\xd5?\x89\x19\xba}\xd6\x9cH\xda\xc5fKX\xf3C\xb4_\x14m\xc0\xf4\xd9f\xc4\xa4\xa1\x13\x86\xaa\'\x91XF\xe4<\xa5 @\xc1\x94l~\x8b*#I\x94\xfc\xc0\x15\xe1\x0e\xe3I\xe0\xb5\x98N\x92\xf8u3\xc8qd\xd8\x1c%\x9a\xbd\xbe\xa3\xfd\xb3\xfal\x89hyXLm\xedo\x03\x0cc\'\x8e_\x8a\xedR\x16\xf2\x17\xaf\x8f\x18\xf1z!\xa1\x8b\xd5\xd1\xad\x00\x03J \xa1]`\xf9\xe9\xc4\x0f\xc24;\tP\xfe\xf0]\x83\x90"\xeb\'v\xfa\x9d\xb9,\xda\xb0(-\x97\xcf\xc6\xe9\x8bC\x82-\xef\xff\xfaV\x1f\xe7l&\x17\xb0W\x0f\xc9*\xd8\xbcHV\x0f,|\xfan\x98\xca>\x13\xf2d\xcf,u\xe7z\x82T\xbf\x85\xe9L\xc6\x97\xdd\xde\xf0\x19\xb5\xea\x14W\x92\x97\xe7"\x07\xb6\xb0\x90yxd\xae0\xfa\x14\xbd\x04\xd0\xa3\x94\x10\x1e\xb9\x93\x89{\xd08+\xed\x99[A\xcaA\xad\x177\xaf\x93\x84Q\xcaD\x7fss\x12\x85\xed\xdd<jB\x1d@vQ\xd2]\x93\t\xe1\xbb\xb3&\xe5c\xd0\xbc\xe6\xabb\x12\n\xd9>\x16\xd1\xd6\xd6\x0fYUhT\xa1\x86\x1e\xb8_\xf08\xa8\xb5\xdb\xcc[\x97\x82[UL\x7f\n\x15\xe4^A\xb5!\xe3\xc7\xbfu\xcf\x8e\x17 5\xc0Q@\x90\xa5I\x16J b<\x00\xcdk\x9do@\xbc\x01\xb5.\xa65\x0c\xdc\x1cW\xb56w\x9eP\xd7\xfc\xc0pNV\xe1\xea0\xb7_F%R(8l\xbe\x1d}r?\xf2\xaa\'U\xcb\xdc\xc3\'\xbb>P\r\xe0\xb4U\xe6\xe9\xf6J\xd9?\x95\xf5A^\x1e\xaf\x10y\x88\xf3\xa65BZ\xc4|\xc1\xf6\xdc\xc4A\x85\x07\xd5\xf4\x92\x02jY[\xc6<\xf1\xab\xe7F\xac\x9b\xbb\xb4!6Y,\x99F\x1eX\x1d\xdc\x03\xad\xc3G\x0b\xe1\x8a\x85Pp\x8a=u\x03\x8d\xa3,\xc1"\x00\xda\xbb\x80\x1fG\xdc\xb1\x7f\xc7+\xeb\xfe\xc5\xb0\xcd\x03%\x1b\xda\xf7\xaeb\xae{,\xcb:\xb5\x08\xe4w\x9a\xbf\x0f4\r\x80\xc7\xa1dD2\xe7}F$\xeb\x8fB\xd2\xc4\xd5\xae\\\xa0\xb8\x0brwa\x99X\x1c\xce\x82R\x01\xdc\xbf\xf87?\xf8P\xc3<\xf3\x81\xfa\x0f\xf2\x9d\x86\xc4]\r\x94\x85YI\xd6!u\xc3\x88\x88F\xad\xdd\xb1\xdd\xf5\x81l\x85\xb7V50>Yp\xb6\xb1\x0eT\xdd \xc5\xd5\xb5o\xef\x02O\xc2,r\xb3\x18\xa2\x18b\x00\x13\xa2\xbe\xc5@\x04\x90*\xfan\x0bO\xaf\x06\xe6\x83RH\xc7\xdaN\x13\x83\x8dB\xf6O}r\xf7\xa7\xd1\xa1\xa4U\x0cv \x15P\xbc7\x87\x8c\xe3*r\xab\xcc\xadC\xfa\xd2\r\x97BB\xc5/94\xeaS\xd6\xa2\x90\x0c\xf4.Y\xc3\xa2gP\xfd\x07\x901m\xccl\x95%`\xdd\xf1\xaa\xe5\x12\xd0\xd3\x0b\x878\xd4ZL|\x8d\xaa-\x8d\xafY\xd7\x15N\xbfl\x181\x01B\xb0\xc0\x18\x9bm\xce\xa5\'44O,\x8c"\x14x]\\\n\x81\xfa\xc6\xce\x91T-\xa1\x8cZ\xb0b\xb73\x93\xe2\x7f358\x1a\xd9\x83\x8d\xa2\x11o\x06]+6\xc6h\x11\xc6\xf9\x1c4\x0f\xad\xe9I\xdb\x7f7:\x96\xab\x1cm,\xfd\xbb\xf3I\xf5\n%\x1f\xad1\xcb\x93\xb0O\xb7\x8a\xd2\x01!2\x9d\xe2\xd5\x81\xd1uL\ni\xbc9\xbb\x8f1\x10\xd8\xda+\xd9H\x9c\x0f%\x1fn\xe2:\xa7x\xeexR\x18\xb7\x97\x07\x8c\xd7\x065\x7f\x11\x9d\xa57vX+\xce\xa9i\x9c\xeaE\xcf\xf9$\xc2-\xf07\x0b\n\xb0\x19\xb0F\xf5\xa3Q\xb3\x97\xfd#"\xfd\xd9\x9f\xb8\xad\xbb\x7f\xb9T\x93\xed_\x88f\xde(\x19\xc9\xb7\xc4\xfe6\x02\x17\xb1~\xc2\x98x\xfa\x87\xca3cK\x0c\xe7I!Z\xb2\xc0\x7f\xcev\xa4\x00M\x9d\x92L\x8cF\xe8"?[`\xcc\x8c\x04\xf8\xd3\xbc\xa7;\xe3\x8b\xfa\xbcL\xcb4?\xb2\xae\x88c\xb1o\x84r\x11\x98\xdbJ\x8e\x8eqg{\x02\x14x\x1d\x81~I\xe9R%\xba{\x88F+wU\xd8^\xb5\x94%\xe32\xf5\xa5\xda\x03\xd3\\F\r6@S4\xa4kE\xd8\xca\xed\xf3\xb8\x93Yj\x18\xfbl+\x0f\xc2\x8c\x07+\xf6\x9e\x03\xd4\xf6\xe6<\xb2\x8a\xbb\xcbu:\xb25[\xb6\xc3\r]\'Bb,W\x8e\xe8)2\xbc:G@\x18\xd6\x01\x07z\x19MG\x16*\xbd\x8d\x00\x1fD*+\xe2O\xed\x04\xe1+T=C%\xd4 \xc3\x86\xa8U\x85\xae[\x9c\x86|\xac\xbd\x1f\x86\'\xbeqN\xcb-\xebC~W\xce(!C@\xe5\xb7t\xc0\xa1\xa9M\x7f\x07n\xa2\x0e\xae\xaer\x1ee\x05\xbaJo\x8f\x9d#6\xc2\x1bk\x04\xf2B\xe5\x1b\x063\x1e\xa9w8\xe9AY6\xa3\xf8!\x16goj<\xeb%v\xdd\xfc\xbc\x13\xf1\xd9$\xbf*\rI\xd3\xe7\xb7jp;\xb6\xcc\x8a\xe8GrA\xd3\x05\x07\x14\x05\x16\xa5\xc0\xd6\xf99\xa5\x94\xa8\x9f\xb8n\xe6\x16*k\xb2\x17\x98XAd\xff\x9e\xfc\x97\x80>\xc0\xb0Z-\xa7I\xa1LD\x85G\xf6B\xfd1\xa4r\xd5\x9e\x1cx\x89\xf9\xfb(\x03\xed&w\xd6\xffE\xfe\xb3\xa9!\x8a\xae@4\x14\xad]\x00G\x9f\x9cr\xcf\x1f\x7f\xc8\xc9\xbe.\x0e\xb6\xcd\x92\xa9\xb1\xd9\x95(\xc9#\xc2\xf6;a)6-i{\x82\xf2Y\xeb\xbe\x0f\xd1\xa1\x86\x9b\xf4q\n\x10IE\x1a!\x07\x07\xc96\xb8.\x89g\x12\xf0=\x1b()3\x06\xae\xdc\xab\xa38\x14\r\x9d\x10\x11;\x87G\x90OJ\xd2\x9a\xb3\xb7\x7f\xcam\x19\xdc\xde\xee\x1aL\x1eI\x14\x81k\xf5\x15C]\x95\xf6gI\xbb\x08b7oX*8\x8f\x86\x96\x04\x9ag)\x14\xad\xdc\xf3Z\xd5\xfc\x1d\xc8K\x11\x8dykz"\xddj\x85\xd6\x89\r\xfd\xd6\x06\xf1Q>\xa8.$;w\x12J#a\xaa\\\x93\x12\x95\xab-\xad\xaf\xcc1"\x80\x81M\x9a\n\xc4RR`=\x8f\x88w\xab\xf5z`\xd8\x90\x94\xbc\xce{.Mr\x98}\xda\x81\xde\xfa\xb1\xa3Q\xa2\xc6\x9b\n\xe8P\x12:\xbd\x86\xb4N\x8d@\x90}\xd3\xef\x1e\x0f\xf5\xb69\xe9\x05\xbc\x986f\xefk]\xa9\xeb\xaf\xd57\xce\xd0\xb6$\x80;*\t\x96\xff\x98\x00L$y\xf2]\xbe\x0f\xca\xab\xb4:\x8dZ\xde\xa8\x99-\x18\x02\xff\xebz#\x04\xa53\xebG\xcd\xf9\xde\\0V\x80S\xc4-\xe9\xd3x\xb7\x7f\xc8\x8c\xb1@\xc9\xf9\xba\x9fM\x1d\xb6r\xb3pV$\xb7;\x13\x87X\x1c{\xbcw(\x0c\x1b\x9a1\xc1\x1b\xde\xba\xa9\\(Q\xdb`$\x97q\xf5g\x04k\xb7\x01\x1f\x84\xd5\x1d\xec\xc7H\x988@\x9c\\\xed\x08_`\x835b\x7f\xc8\xfdP\x9a\x0c#\x8f \xbd.\x1b\xfdR\xacO\xb4\x99k\x17T\xe6\xaa*RV5Z\xdft\x87\x97\xbf\xa5\x9a?\x08\x84\xfa\xfbo\x89\xf3g9\xc0>5\xa1\x90\x858r\xa7\xea\xbb\xf2\x8e?\t#\xbe]Dr?\xbfZ3?\x9f0:\x86\xa2\xb0\xb5\xcf\xae\xb4r!\x00\xef$z\xe5\x17\xffT\xe0\xbe\xa5>\xa2/D\'\x1a\xac\x8c)\t\xbb,\xea[X\xe1\xdf\xf6\xb4O\xa11\xaffY]\xb5\xbe\xcc\x82\x81\x9c14P\x14\x06Vo\x02\x8e\xdc\xe6S\x01\xfb\xa2\x1e0\xbb\xfa\xac\x87\xe5\x8c\xe9p\xb0\x80\xd0aFq\x86\xc9F\xdc\x90\xday8?\xad\xd8.\x99\xd2\x8c\xc5\x9f\xc5\xaa\xcf\xa6\xcc\xef\xfe\xc0S0h\xe1\x03\xfb\xc1\xe5\xe3\xfae\xdc\xf3\x1bGu\x7f\x17Y<\xad\x13\x1a\x1f\x05k\xb8\x04\xd7*\xda\xde\xc6Kg\xf6\x11`\x89zh\x15\x1e\x9cB\x17@\xe6\xe5\x9f\xc8\x9d\x81\xc4\x8cOwR\x05\xadw\xde\x11\xc1k\x9c\xbcC\xee\xb2a\x8fi\xd7\x14\n\x83\xcf\xcd\xa4\x99s\x80t2 \xbc\x19;|\xc0\xd7\xf1\xf0v\x96\xfd\xbc\xf1\xec\xf4c\x01\xf9\xa9?\xf9\xd1e\xf0\x18qgp\xdb\x9d\xbc\xb7\xd3\xe2\xb57\r\xf2\xaf\r\xa62Es\xc3\xc2\x148^\x95\x97\xe9\x7fnm\xfb\xae4\x80\xacNH\xbcQYzI\xee\x9a7\xbab\x0ed\xf2\x81M\xa7\x1fk\x1c\x00^W\x01\xf1\xd8\xacG2[q/(\x0c\x1co\x80\xb3KW\xec\x1f\xf9\x99\xa2m}h@\x8f\xbf\xdf\xbb5\x85@y\xa4\x9c\xeb\xbe\xff\x08"\xb0+\xe4\'.\x8f-\x81A;\xc9:}\xe28\xe4\\\x93\n\x08\x0c\xb7\xac\x9b\xf5\x9c\x9b\x1c\xec!\xd8\xf9y\xce\x1e\xd4X\xcc\xe8\x0fE\x02\x84)\xff\x0eY\xcd\x94<\r\xce3T%\x92\xe8\xefP\x95x\xa2\x9c\xbc\xf9\xdf}\xc08\xb4\xfd-\xf5\x12p\x8cOKD\xae\xe1\xf9\x9d\xdek)\x94\xb3\x91\x85\x15\n9#\xf3\x194\\\x89\xa3x\xa9\xee!\xf3\xc4n\xaaw\xee\xbb,;\x91\xf0A0\xca\xb6\xf0[\x82\xcd\x9f\x88\xa7t\x1ew\x12\xc7o}\x93\x97?\xdd)\xfdM\xacHS\xfb\x85Ns\x7f\xbc\xd3\x8d\xf9\x8fl\x14\xf0\x92\x9dI-\xd9:7R\xa4\xc0sp\xb0-\xeb\xc4nx\xe3\x1e\x1b\x99\xbb\xa22e5E\xe6\xa9$&\xa9\xb1b\xd6\x0e\xbb\xb0:\x8f\x0ekf\x1f#\xc0\xd4\xe7\x13\x99\xfc\xe6\x16\xb9\xecl`\xa9\xf5D}]G\x9f,\xe9\x80Wq\xbe\xed\xa0\x90\x10\xd54\x06\xcf\xa9K\xe5\xfdd=67uD\x08\xf9\xfc\xd1A\xb4\xfcYH\x9a\xbc\x0fx\xf6\xb0\xd7e\xe9\xd6\xc3t\xaa\x90F\xeb`\xf6\x96\xcc\xde\xe3LB\xc91\x1b9V5\x94\x1b\xca\xee\xa2\xdc\xefq_\x02|[Y2\xa7\xbbN\xda\xdeh_B\xe6\x9dp\xb1\xf9\xd1\'\xf7\xe2\xdd\' \x9a\xf1Q*|V\x0b76aEJ\xfd\x07\xe9\xc2Q\x92D\xf7\x80^\xf0\xd3\x8cI\xee\xc0R\x8e=\xf8\xaf\x06/\x1aAk\xe9`\x8a\xc9\xd2.\xa1n\xb9\nP\x062\xbb\xca\xfc\xf8\xe8e\x10M|<\x9d\xb2\nq\xe3D\xc2\xa0\xd5\t7\xbfpv1D,0T\x19\xb3\xe2v\xb8\x8c\x07\xa5\xa3\x8b\xf8\x9a\xc4A\xee\xbf\x90\xc6\xe8*\xb7:\xb8\xe6\xe3p\xd7\xb0\x99"\x0f\xf6U\xc4N\x8a\xde\x10\x1d\x06u\xbf\xc6#b\xa0\xba.\x98\x85\r\xa48\xeb\x00C\xaf\xdb%\xa0\x8f\xd7.\xf7\x15\xbc\xc3+\xe6\x1a?\xd9\xc6\xf2 \xe4=\x1a\xc7\x9b\xe4\\\xf1\xefd_\xca\xdb6\xdc\xac\xabz\xf6\x95\'E\xa1\xa3\xf7\xb0\x8e\xe0\xc6F\xd0@1\x9f!\xdb\xb94n\xbc\x14z\xa3\xa3v\xa0\xa7;G^\xdb\xecC\xf1;h\x82\xa0\x0e\xfbz\x18\x8eT\x8c\t\x141\xf8j\xee\xd2\x9e\xf5\xac\xdc\n\xbde\xb1\x9c\xa8\xf3\x0c}$\xfe\xbe8\xdf\x9ag\x18\x18P\xec+\xb9\xaeW\xe2\x9d\xaaU\xc8\x9d0)\xfa\xae\\\x85\xd6\xbe\xacj\xa7W\x01\x92M\x88\xa6\x97\xc46*Q\xc3<\x08d\xeeM1\x7f%X\x1d\x8c\xde\xfc\x07\xab2M\x82\xe5w\x0b\x8b\x85a\xd6G\xbf\xc8\xcd\x1b\xe4\x9e\xab\xf0[\x8a\x9e\xdca \xa4\xfbI\xed|$\x15\x05\xb5nE\x15\x06\x9e\xaak2\xe0\xd1\xbe\\\xab\xc3\xdcZ\xb3?\x88\xbaw\xa1X_\x9e\x198L\xcf\xf9\xb9`\x17\x1c\xaa\xc7\xdf\x92\x12\xeb\x91\x17.\xab\xafj\xea-\x87\xa1\x0f;9N\xc2w\xbb\x15\x00\xc2\x8bY8`\x94\xd5*\xb4\xa3\xf1\x86\x16C\x8c\xa3#\x1e\x8et\xa0\x8b*\x1d\x10`\x12g\xd4\x0eX\x14s\xd6\xce\xa0\x87tY\x8bA\xe0\xab\x8a\xebM\x8as\x9c\xd5\x8e\xee\xf8||\xecIBh\xd1M\x0eE7\x0e2a\xb7\xd1\xd35\xe1\xcc1a\xf0\xc0\xcfFT\xc1\x00,}\xcd\x0c\xeew\x0b\x0b$\xea\xf56Sk^\x1e4\xf47*\xc56/\xbe\xf2TVu\x19\x1a\x1aHbF\xd4\xe4`\x98\xbf\xb8j~p\xc1\xb0}W\xc0\xb1\xb5\x11}\xd3\x88\rc\xf1\xab\xc0R\xff\x03\ng)\xd9C\xba|%\xabp\x83\x94\xd7\xf4\xc1\x93G\x1fa\x16\x08\x9b0 \x84>\xd6\xa6\xb0t{\xac4\xee"\xb6K}R^-\xec9\xcd\x96\x85\xd4;ul#{\xe1\x82\xd6\x8a=\xc5\x12\xc8\x1a\x9d\x96\x08\x91N\x96eM\xe5!)=\xe7\x0e|q\x8eM\xa7\xe9\xed\x99\x85_\xc8\xd6\xd9\x98 \xba\x16\xf4\x18\x85y\x04\xe3\x02lH\xab\xdb<2\xff\x9192\x1e\x91&\x07\x13^X\xd3e\xe5\x8b\xa1<:b\x04\x1a>\xd6\xc3\x08X-\xc6gfg{\x8f\xda\xf9A\x8f\xb3#\x8c"a\xf7@^\x08\xa8\xfdm\xa5\xf4\xbd\x1a\x17\x19\xc5p\x08\xa2~Bw\x89 \xebJQ\xbfK3E%\x14\x9a\x00\x89s\x87\x97P\xdas+\xd8\x97\xbc\'|\x0f\\\xce\x97\x00\tnDvKet\x95!\xf6b\xdb\'\x15STE\xbd%\xdbE\x7f\t\x1d\xa2\xbb\x072\xe3\xbf\x86\xdbG\xbc\xed\xb7\xab>\x812W\x8ap\xfc\xda\x1f:\xb3\x96pl\xbd\x93\xf1\xfd\xfc\xe7\t\x8a\xa4\x16\xbci6/\xdd\xc4AH@\xf8\xc5\x0e\xf5\xc4\xd1\x05\x98r\x99\xb0Pp\x9b\xdaq\x13\xd4|\x18\x00\x80\x96\xe7\xdb\xfe\x90\x0b\x10Z\xd4r\xf2\xa1\x0b\x01\x96\x9af\x12\x80\xc0\x8fR\x06\xc0\xa4\x96\xff\x1b\xc5;\xc1\x1e\x12\x86\x8fSc\x1f\xfc\x9f\xd9\xc6\x86\x14|OR\xaf1\x85=l[\xd36\nA\xe9.\x93\x1f\xc6U`\xa2\xa3\xb3q\xddx\xf4t\xb9Z\x1fl\tI\x9e\xe4\xf3\x81\x8av\xc6v\x155\xe59\x10g\xe7\xdd\xda\xe5\x1e\x88\xe1c\xff\x8a\x00\'\x99\xb2\xb4\xc3\x0e~c\xea\xf2x\xe3\x1f\xf54ckLC\xf6*Thm\x82\x1e\xa65e\xe9t+\xd1\x02\xd6\xac\xd0\x02\x8b?\xe2B&\xd0j\x8b\xa5\xdf\xfe\xd6\xb3\xb7\xdd\x11l\xf2\xd5_\x036\xc1X[I\x0fD\x15W\x85\xc4\xe99\x8bZy!e\xfe\xb5\xfac\xf2R5\xf6\xb3\x83]\x02~)\xc4\xf1Z\x98\xdfc\xcf\rm\xcd\x12\xba.!\x82\x9dn1\xcb\x97.~\x0e\xd5\xef\xcce\xdc\xb6\rR\x96b\xd6w|\x97\xb6\xd4S(\xf0Gk\xbb\xc1\x86\x8d\x9d\xd4\xeba#\xec\x07\xef\xee%\xcf&\xc2\x87\x14\xdc\x12\xb1E\xaf\x1f2,$\xc4\xbc\xb4tuD\xb3@5\x8cB\x85\xf7\x19\x9e\xea!\xeb\x82\xcd,c\xa7*0\xba\xd5\x95\x8d\xc7\xd1\xa7\x00\xd2\x99\x07\'\xbe\x85\x88\x17Q\xb5\xc2\xef8}\x0f\xbb\xbe\xceh\x15b*E?\x80\xf7\xf1\xc7|4\xa2\xbc\xdc\xbb\x18\xc2\xa1\x16\xf1\xeb\xd4\xe4\x13a\x00\xf0\xa3@\xf8(~\xcb\xe5}\x98\xfe\xf6\xeb\x9f$bv\xd2\x90\x05\xbe\xf7\x14\xbbO\xbc\xd0\xd6m\xec@\xf0=\xaf}W\xd3\x9a(\x19\xd2\xd5\xff\x8b\xd7\x904n\x0b\x8dV\x12M\x14\'e\x7f\x00h\xff\xe7.\n,\xe6jh\xb2\xa9\x14\xf0\x1c)\x9c\x9d\xad\xe10\xb4y\x8d|\xce"zj\x97\xc2y\xd0\xbd#\x80\xb38\x9eK\xcc\xb3\xbe\xd8?\xcb\x17\x16\x10\x8e\xe7~\xe1\xee\xf6(\xd6C\xa1\xb0\xec\xa4\xcc\xcb\xbb\xbc\xee6\x00~\xd3\xc5(\x80\xa3C\x82L7bS5!\x0b\x82R\xb7\x85vF\xb4\xf1:@w\xeb92\xeaD\xb4l\xb0\x81l;\x84\xf4\xbb\xc5)\xfc\xeb\x96\xb7\xfcU\xa6\xe1:Q\xe5\x9f\x95\x18\x91\xb1/\x076\xfaO\xf5\xce\x16V\xebd23\xa7\xd4\xae\xa7\xfbi\xa4\x12\xf5d\x83e\x16\x85\x87bq\x18\x03=\xe4\xaa\x1f\xc3\xa2\xb50\xc4\xe3l\xd0p\x07f:\xfb\xddp\xadW\xc8\x94\xe4gIIn\x95I9)\x93;\xfe\'\xc1\xf7\xd2\x06\xa8\xcd\x07v\x07\x0b\xb3\r\xc14\'^\x19\x93\xc5\xa9\xdc\xa5\xcd\xd4\x87i\xfd4a\x0c\xb3\x0c\xf1\x90\xaf\xec]\x9f\xf9\xb9[M\xb7O\xcb\xe7\xb4#L\x04\x87\xa5`\xac\xcd\xee&C>\xad\xa3#i\xa14j[\xe3\xc3\xc5\xb1\x95\t?\xcc\x913\x9dV\x82S\x10\x9b\x82f_Y\x0f\x18\x89\x16\xc4\xe7\xc4\x92\xe6\xebG\x9a\x1f_N\n\xf1a\xff\x1c\xabK \xcc\x92t>\xcc\xe1\x1b\xcc\x83\xff_\xb1\x8c\xb6\xd0\xcb\xfa\xd6m\x1c\x8a\x8a+7\x11\xff\xf5\xcf\xc58/\xea\xa2bU\xb49_\x03\xea\xd5\x9d\xa5\xaa\x08\x03m\xeeh\x9f\xc9\x10\xcd\x93\xd1\xc9\x9e\xf9\xa9r\xd5\xa5\x8bR\x0b\xad\xe17|\xdb\x80#^\xa8\x86\x1d>/\x12\x94\xb3\xeaT\x15bu^\xbc\xd2\xee7\xd3z]y{\x99\xe6\x9c\xf55N\x15B\x80\x08\x9f\xbeRr\xd2d\xce\xac\x83\xbb\x81\x0e<\xfcJ\x13\x0b\xec\xb0n\xea\'\xeb\x86\xdb\x8dw\xd9\xa1\xbbI\x87\x94#\xcc ~E\x1c\xd6\x13\x9b\xd2\xc7\xc6\xecMD^5\xd0\xdc\x9d\x13G\xdbV\xcc|\xa4\xd87s\n\xf0\xa1\x95\x90T\xb8f8\x1d\x1e\xda1\xfe\xc4\xa8\xc9\x08\xc94\xc9\x81\xc7\x81}O\xf93}\xe0\xaa\x95\x0b\xfd\xed(\x8dQ\x14\x1f&:\xea%\xfc\x0f-U\xb6\x8a\x07\xc0Z\xe5\xaa\xe5\xaa\xb9\x80v\x8f\xf0\xca\xb5\x86\xdd\x1c\x0c\x04$\x81=\x1d\xa5\xde\nz\xbcl\x14k\xaa\xde%\x0cKD\xdaN\xf3\xe7\xd9(\xdb?\x8f\x8eU\xf6\xb4s\xca\xf6Z]\x1ej\xffVA\xd8\xca<\x95^R\'\xa5\x1f\xe5\xb6\xb45\x11 \xcd\x85x\xa5\xe2\x1cl\xb7\xb4\x893v\x1a\xdb\x9b\x1c\xad\xbc\xcf\xa1V~$\xc2n6\'t\xe9]\x16*h\x8eCDxI\x1a#o\x99\xe2\xe3\x95?\xce&zT\x1dB\xe3\xd7\xce\xa95\x01E,\x9e\xba\x171\x0b\xedG,\xb8[#\xdd;Sq^\x14\x89w_J\xbdK\xa6\xa7YM\xd5mQ\xaddb\xb4\x023O\xed\xbb9\x12\xa9U\x17\xc5\xc0\xcdN\xc8i\x83\xab\x85\x84\x86\x00\x00\x8e_\x96:\x1c\xa5K\xec\x84\x8d\n\x1c\xde\xb8\x8d\x04\xcf\x9f\xcb5r+o74.\xaf\xfdf\x89\xcc\xb2\xdfo\x9f\xe3\xe1\xf3O\x96\xa4\x08\x19\x16\x16R\xe4\x0c\xf4~\xe6\xbcdYI\xac=U\x8c|GM\xf14L\x0eu\xd9H\xc0k\t\xcf\xd1R\x10 \xda2\x91\x08\x93\xcf\xe7\x08\xfb?OoU\x95a\x1d\xab\x90\x8b@n\x1b\xd7\x8dUI6\x9a\x90d\xad$\xcd\x9fv\xdc{\xfa\x85\x88U\xf8\xe2H\x93:K\xe5\x17\xf4\x15\xdd\x08\xb6\xc4\x87\xba\xf3\x93\xdf\xa5/\xef<k"\x98k\xb4W\x00\x946\x13\x99C\x83\x1fH\x919TK \x9d\xdb\t\xe3\x92\xb1\xc1u\x9e\xa9\xd6\x1c\x00\xe3\x07\x8a.^X\x98\x1e\xaac\x89\xb5\xb8\xc1\x9b\x9b\xfa\x10\xb7\xee\xa9\xdf\x90\xef\xb1\xd1\x8bw\xcd\xe7\xec\xa4(\xad\x81\xaa\x16\xc3\x83\xa3\xc1\x85\x97\xaa\xa8\x8c\x007\xe6p\xa9\xaa\xb6\x1br\xff\xecw\x95h"\xe8\xc8\x11\xdak\x85\xb8\xe7\x8e\xce\x96\xb4\xc5\x16\xcd\xe4\x80?\xb62\xb9J1\xbae\x8c\xc8;\x87\xc7\xb5\x0e\xb0\xa4\x881\xf0BQ\xaaG\xad::x\xef"~i\x8a$}\xc4\xfb\x14\x0e`\x1a>>{U\xa1\\\xf5T)\xa2y\xfa\x02\x0e.=/a\x9b-z)r\xec\xa6\x88/\xc7\x95\x89l\x05\xcc\n-o\xed\xca\xecl\xceZr:\x1c\xe2\xb1;&%\x9e\x08\xeeI\'\x1e\xc3\x19\xd1_tJ\x8d\x89\x8b\xbdo\xf8P5\x9e\xc3\xbbN?\xd5\xf1=\xe5v\xc8\xaeV\x90\xfb\xd0\x988\xca\x97\x95gj/\x0b\xbe\xd8\xf4\xf9O\xa0\xf4\x19>aa\xac\xef\xac\x9b5\xaa\xff\xc1\x1cw\xac\xf2\xc0-0\xca\xaf\x07\xb84\x9a~#C*)$\x0f[<\x86\x06.\xc7\xd4W\xa5j\xc1lP=25 \xdc\xb8ui\xbfen\xe1\xa6FP\x1e\xe9\x91K\xc7F\xe8\x90\xdc\xbc\xce\xf5\xb2C\xffV\xee\x1b\xae\xd1\xf7\xb9\x94Qo\x8c\\\xc0\xad4\x17U\x92\xaem\xa8<\xe4\x83A\xce\x1c\xe3\xca\x15\xcb!\xa5\xf8\x1e\x1cQ\x8c2\x1f\x87\x17\xc3\x9d\xdd~\xb7~\x89\xa3\xa7\x8c\x0f\xbd\xa2p(,7,\x07\xae\x07\x9e8\x83n\xdb\x10Aj\xf8B\x01\x91\xc4\xcawA\x025S\xf1\xde\x8f\x08Y\xf7^3\x00\x060%\xfbFG\x1d\xa0\x12\xa4\x8a\xc4\xb8\x05\xc5~\\\x8a\x8c\xce\xc7\xd4)32\x92\x806\r\x01\xd3N2\xbaj\x9fO\xe6/!T+|\xfa &Z\xb2Q`\x84\x87@W\x19\xe9},\x9f\xf8\x9aX\xbbU\xf4\xbe\x1c\xeb\x87#j\xff\x8cT^\x0f\x0c\xdb\xd2\xfd\x0b1\xcf\x02$\xf1?\xcb@\xb8\x1c\xc4H+\xa0)\xfc\xa9J\xf6\xb2\xdc\x191p\x12\xe5\xb3\x90\xb6\xc0[K\x8fy\x17\x9e\xd4O\xab96\x95(\xc2\xe3\xf0C\xc2a\xa2l\xad\x96\x9cc\x16q%D\xe74o\x87z\xe5\x10)\xff\\\x04\xc6\xb6\xb1`\xba"\xad\x92\x98sg"a\xae\x05\x08\x15\xacA\x88\x03@\xf0]6A\x0c\x95^@\x1es\x15\x04MO\xc6#\xed\x88\xa2\xa0\x8d&{\xccw;\xc2\x1c\xd8\x90\x93\xfaU\xda\xec\x18\xb7\xbd\x10\x83\xcf\x00\x881X}\xb7\xba/\xc5\xa8!\xb1\xdb\xd3+\xc5]\x024&\x04mL\xa03\xed\xc2\xd6\xc4\x96\x94\xeaw\xfe\x80\xa2\xfd0R\x87~\xae\xa5#\xb6&\x87-4\x1f\x1c\xd0\x13\x92\x92Rka\x86~2\x10\x94\x85)\xff\xcdO#\xff\xf8\x81\xf9\xdc\x01P\xa5\xa8\x06K<\'h;LW\xcck7\xb6\xefF)\xa2\'\r\x18\'\x89\xbb]\x06\xac\xcf\xde\xc3P\xe4z.\x9b\x1b\xca\xd8\xaf\xe1o\xe8,\to\xf7K>Q\'\xaf\x14\xd0}\xdf\x84C\xa9n+\xdb\xb5\xaf\xbe%\x03S\x1d\x95\xad\x17Uk\xd2l\xba%\x00\xc8\x80TW\x801b+A>\xb5\x06\x15\x86G\xbb\xc6\xf9\x86\xf56\xf8\xff\xc6/\xba\xa7\xfa\xf2\x89\xdb\x9f\xad\n\xe7\x90\xabwO\xc6%\xfa\x18\xe7\xd8\x1e\xde\xe9\x98T\xc1\x80\xe3_\xbb\xb7AunB\xbf\xd4}\xccS\xabrS2\xadp\xc4J\xe3N\x17\x91\x1a\r\xa5e\x94l\x11I@pN\x93m\xd90\xc4CM\x9cK\x90\x05\xbf\x9c\x00\xf6TJ\x0c\xf2\x91\xc9\xffkm\x9e\xac\xac^\xb7t\xa5\x13\xfb\x114\x87iO-7\\\xc0AK\xe6i(\xf3\x15\x8b\xeb5\xc0\xae\xda\xea\xb5~A\xec\xea\xfai1fAyx\x14\xee\xdb\xd7\x85\xb4\x08\x8e\x0e\\\xcf\x85O\x7fA\xf9\x02\xd9a\xe5*/\x07\xc7\x87\x80\x81\xbaO\xc2(\t\xfa8y\x9c\xae\xbfxG\xef\xad.\xeb\xaaf\xf2a\'0\x07\xd5\x974\x18\xfb\xe3\x00H\xf4y\xa2\x1a\x81\xfd\xb3H\x8c\xc9\x95==A&\xb3\xf2g\xd9\xc4\xea\xbc#2\x89\xec\x86[PvF\xeaW\x05L\xc8X\xb0\x88\xd6TT\x95j\xf1\x12\x1c\xd0\xb8.\xb3\xd0i/iu\x02\xde\x97\xdc-o\x86u\x83\x0b\x92\xeb\x95\x9b\xd2\xfaO\xce\xac\x1a\x96m\xdai\xc7\x0f\xb1\x83\xe6az\x0b`\x947?D\x82\xbe\xf5\xdf\xc97\xec\x8e$Zg_<\x14M\xe7\xe6\x8a\x90jT\xe4a\xf2\x8d\xd2\xceP\x1d!\xf3`\x10\x9a\xa4!\xd0 }\x95jS\x0f\xf2\x821\x91\xc8e_O\xe4P\xb0\x8d\x1c\x10S\x0c\xe7\xedA\xf5\xebzx\xd4\x03\xe10&\xa3@D\x9d\xd3\xb2\xf6\x00=\xd7\xf6\x0f\xd1\xaf}\xf6\xbc\x16Z\xe3ir\x0c\x1c\x12(\xd6"\x80\x10\xac\xa8u1X~i\xd8\xb8\xf6\xbe-\x8c\x13V4f\x99\xcbHv\nH\x11\x18:\x94\xc8R\x081\xd9\x95\xfb\x9d\xe5\xc4\xe7\xb1K\xee\xcd\xc0\x8e\x05s\xbb\xe2Z\xe3cM(f\xb3\xe1\xb9\xb0\xc4sU70\x11\xb2\x9f\xc3rX\xd4\xc8\xbe5\xcc\xca:\x84\xddf\x8a5\xe5%m\x10\xf1R{<\xa9O\xa3\xc7\xae\xc0\x0c%7\xc5\xce\xc6\x1f\r\x8d\xc2&%\xf4;\xe7.q\xf1\x8b}U\xd8\x80F\x06\xc3yI\x8f\xa1%8+\xdfe\xa1d\x8d\x18%1\xd7\xb0\x94\xcf\x14D\xa2K\xe7\xf5\xfe\xff \xa5%\xe75\xab;g]\x9bz\xbf\x8a\xea\x82x\xce\x1b\xfa\xb0+\\7\xf7\x184>\x18Q+\xe6\xf1\x1e\x82\x14\xbf\x80[\xd1r\xb1K+\xd9\x1a\x84\xc6\xe0F\x93\x83i\x08\xfdsq\x9b>\x08\xdd\xd6\xf6F\x8bu\x8f\x84\xfd:\xdd\x9dzBa\xee\x97V\x0bM\x16\xc0\x8f\xad%9\x88";\xbc\xcf\x86\x8bj\xdfni\x10\x0f\xe2C\x83\x82\xbf\x1b\xbc\xa8\xc4\xacg\xfa_q\xe3\x84\xc2\xf9jQ\r\xfc\xca/\x83\xab\x9d\x05\\;o\x8f\xbf\x1e\x84\x97\x11%d%\xc6A6\x13\xed\x88G3\xa8\xc2wEW\xd5\x98\x82\x98\x9bk4_u\\\x99\xdf(\xeb\xdf\xdf\xf0\xa8C4\xf7\x8c\xbb}\x910\xb2\xad6\xc9\xc1\xaf7P5^\x1e\xc3Or\xde-\xe0\xba\x9a\xca?\x1d\x1c^ns0\xa0/\xb4\xa5O\xe0G\xff*\xfd\x8a\x8ar\x13d\xcfZ6\x04\nt\njV\xd7\x98\xf7Lk\xce\x88[\xe5\x1e\x16\xe8\xa6\xb3[J\xc9\xf4\xfa\x9c\x8d\xb3G\x01XL\xc3\x0f\xb2\xc4,y\xea\xd8!7\x83\x92I\xf2\xb2\x06`8=\xdf$\xe7\xcd\x8d\x82I\x04j}\x06t\x00\x91\x1e\x02\xe1\xc6]f\xf5\xb9\xf5\x98/\x81X\x81\xefz\xf2\xe3\x89\xd5[\xe9\x10\x02\xc3\x96\xc7A!\x98h\xa1~x\x0c\x0c\xf1\x0b\xe4;\x99\x854\xc4\xadD\xddO\x03\x05\xb2\xa2\xd36kU\x8b\xf1\x06\xbd\x16\xd1\x11?\x93C\xac\x1d\x81\xb5\x9b\x80\x9a\xac+\x1f\t\xae,\x9e\xce\x91d5\x10\x8a\xa3\xcb\x96Y\xaf\xc2z\xa6\x98Wm\xd5\xfd\x9c\x158\xed\x0ctG\xf0\xeb\xf8\xd8\x83\xbd\xdb\xf7\x8e\xf8T\x92\x8e\xd0\x17yW\x01\x07\xc8\x18UG\x18\'W\x0b\xb6oP\x9e\x01\x83p$bT3\xa3\xca\xc6\xc18\xae\xee\x87A{\xb9\xab\x93\xc8U\x85\xbf\x17L\xc8!\xd8,\xd85\xd9\xc4\x1f\xef,\xa7\xab\xe7\x0f\xd3W\x00\xb8\x93\xc3S\x93\x87\xf7\xc6[\x11W_(\x1b\x9c\xdf\x081~t\x95\x833\xb0/\xd9\xca\xc6\xea\xe4\x04i\xee\xfc\xdc\x82\xe5\x00"j\x1f\x1f\xbb!\xbf\xda7\x12\x8c&\xf1\x89\xfc\xb7\xaf\xd7\xb0\x17f\xc2yk\xc7\x12\x97\xe2ax\xf0a>e\xae&\x08%\'Os\xd0\xf8\x19\xdb\x85\xc2\x08\xd0\x9a\x13\xc1P\x8d\xb2\xc6\xa6uU\xcdn]i\xff\xf7\x93\x16Y\xf1\xac\xd2]\nW\xa7\xc2\xbd\xd1(\xf1\t\xda\xbf\x82\xc9TV*\xaa\xbc\x9a2k\xc6l7W\x97m\xfbn\x93\xf5c*\x1e\x87\xb7T9\xc1\xdcX\xdd\xfe\xd7g\xf0\xcc\x96f\xa90(FN\xba\x873\xd3S\xc3i\t\xa3\xd0K\x90|A\xbd(\xec}\x0bX]\'\xec\xf8\xdf\xb5\xda\xbf\xce\xb6z\xaa\xf0\x04\x01\xe8\xc1\xa5L\x9a\xfc,T"t\xfa{\x82\xe1n#\xf8B\x80\x1d\xce\xd7\\06\x91\x8bk\xa1\xc1\xe7\xafE\x97j4S\xc6\xe9\x7f\x9bb\\\xa9j\xa0T\x87X\xd0\xcd\xd0.\xe6q\xaf\xd7\xecD\n\xeb\xc7?\x80\x17\x03_\xd4Pj\x0c\x84V;\xcd\xca\x9fu\xc7\xa1+\x13#pj\xe4\xde\xb9#\x87\xa3\x11\x97\xe6\xbb\x81\xd5\xc4\xebVGd\x98\xd16\xca\xd7y\xf5\xf4\n\x9f\xab,\xc8a\xa0\nd\xbe#\x86\xa1\x1d\xd3X\x9b\xe9\x05\xbbFr\x91\x0c?\xc3\x92D\xaf\xef*\xfd\xa7\x81.\xd4\x83\xaf\xa8\xb1\xc7QhH?\xd4\xf5\x1f)9A{\xe9p\x8c+Q-`\xcb\xfdk\x82\'$\x88s\x1c3h4\xda[U\xd9\xcc\xf8\x04\x86\xe7Kg\x19\xac,M\x05C\xcb\x84\x86<x"\xa1\x8d\x83&<%\xe0\t\xefE\xef\xe2S,$\x11\xe2\xcd\x1e\xb5\xef\xb2\xf6\xbf\x9d\xb8~X*\xe1\x13s\xd7\x19\x8f\x17\xc2Z5@)}\x8fD\xa6\xe1\x03\xfbO\x07\xa4\xb2\x9a\x05\xbd\xe8%\xfb\x14\x95?\xd3\xe2\xef\x1a\x82F5\xe0\x9bF\x1c\x89\xbb\xf8\xd7\xcc\x8d\xc0o\xa737\x03\r\xa9(Wd\xb3\x04~\x9f\x8bt<#l>+\x95\x0e\x8f\xc2\xc9\x1cQ\x97H,I\x16\xc2`A1\xd1Dj? R\x8b|\x07\xe66\xe6\x8b\xf3k|b\xd5\xe3%\xe8\xd3\xd2\xb7\xc8\xcfF$\xbf^/\t\x0c\x05\xda*\xab\x92=\xa4\xe1\x99+G\xcf\xc6u\x90\xa9Z\x87\xd1\x8aW6~_\xf4\x05BY\x88w\x15\xd0\xd7\xf1\xb4U\xba\x8a\xcatp\xa61*cl\xd0\xc6-\x0c\xd9\x90\xe2\r\x8f\x93_\x8b\x06\x17\xb2\xb2\nI)\xc9^\x1d\x03\xbd\xfd\xc7_\xf2\n\xffG\xccD\x17\xcc\xea\xec\x9f\x19i\xcde\x8a\x94\tq\x11qa\xdf\x1d(<\xf1\x7f\x8a\xcd\xbf\xe3\xa7\x98\r\xbfYW\x83\xae\xa6\xd9\xe7\x10!\\\x98\xb8\x9c\xfc\xd9\xed\x03\xc8\x01\xe8[\x1f\x7f\xee\x9a\xdc\x05\xf51\xa5\x94\xab\xa6(q_-Yw\xd9b\x06\'\xb3-\xbbT\xce7\\\xb8{;\xb9%\xe4t\x80\xa2\xa6\xfa\x05}\xf2\xe2\xdb\xe7\xdf\xc6\xdd!\xea\x17\xa9\x15\x13\xc4\x95\x04\xe7@f\x8e9\xce\xaaQ\xe8\'\xc9\x1b\x83^V>5\x04%\xa7\xca.\x91@\xde\xc2\x9f(\xf8R\xe4\xbe\x96\x80\x05\xf4\xecL\x13\x13lY~\x1d\x13rqZ\xf5\x7f=\xf4\xbd\x13\xac{$\x03wn\xc3\x95\xa8\xd5\x98\\Y\x8d\xda\xe7\x92\xfb\xb78\xfe;\\\xba\xect3\xacY\xc5\xc4`\xf3?\xeb\x1e\xa5@\x16\xd3\xa3\x1b\xcaLc\xcf9\xcf\x94V\xe3\xa97\xc7op\t\x180\x15\xad\x82J\x99\xee\xf4\xf9\xb3\xc6\x166b\x06O4\x86\xfe%%\x03-\xa5_i\xf8~\x94\xa1\xf9\xb2j\x8c\x17]\xa7\xb6\xbf\x90b\xa1\xd6\x10f\xcf-\xffV\xa8\xf6%b\xf3(>\xd2\xa2\xbb!\xc7\x94\xc8\xcbV\xc0\xa7\xc0r\x95\xf4v\x93\xa5N?\xca\x9b\xb7\xc0\\\xfa\xa1\xa9\\\xfbLb\x95\\\xf6\xa8\xb8\x9c<\xe3-s\xe2\x85\x15\x14,KT/D\x86v\xf6\xa1\x81Y1\x0b<\xd7X\xf2\xfa[\xfb\xc8\xbe\xd2A\xea\x85\xea~\xa8\x93K=\xd1\x87\xe2*K\xd9\x14\xfc0\xa8\x021Nr[\x94(\xe0\xc5v\x14\x05\x92\xc4\xd8\xf8\xe1\xd9\x08\xa7Gu[\x1ccL\\b\xb4\x1fcO\xa2\xf0\xf4;\xb5\xbf*\x12L\x8f\xe5\x9e0>/!\x05o\xa5\xc1\xd0@\x85\xc2\xc9ND}\xeck:i\x1a\xff\x11\x06\xbf\xefA\xc1<Sr\xb6\xca;\xe0\xc4\xffX\xa5%\xad\x8bsLy2~u\xdf\x01J"u\x1d\xcdKX\x97#0\xa1\xce\x06d.\xf2\xe8\xb3\xbb\xf9\x1a{\xa1\x80,\x19?\xaa\xf4DC\xcdCEl\x07\x13\xfe\xf7\x87\xdcI\xbaW\xa6\xb9u\x1a\x13M\x05\x8fs:\xc0!\x96c\x86\x9e\x0c\x9c\x15\xb4q\xa4 \x0f%\xb2\x89\x836/\x04\xd3D\xb3S\xde\xcd\xda\x85\xa66y>\xccW\xe5\xe7\xf0\xcen\xc2\xba\xf5vn\xfd\xd2\xc1\xee\x02\x1f$@\xb6\x14\x03B\x07\xd0\x82\x8d<s6t\xf3m+\xcf\xb7\t\x1en8f\xd8\xf6Q(\xda\x95\x81\x8a\x1d\x9c\\X\x19}\xd8\x19\xadec6jl\x99\xb8j\x89\xaa\xf7\x16Yr\xd2w\xbe\xd0\x14\xc9\xc6p\xf7\xfb\xf7\xc9\r5\xc9\xf9a\xdd\x05O\xa0G\xa7N\xdd\xd5\xaa\xf5\xb1-\x12u\xd8\xc4\x97\n\xebvD\xa1\xbe\x8a\x15\xfdkt~\xe3\xc6\xee\xc3\xcb')
1
+ from hiddifypanel.models import *
2
+ from hiddifypanel.panel.database import db
3
+ import sys
4
+ from hiddifypanel import Events
5
+
6
+
7
+
8
+ from dateutil import relativedelta
9
+ import datetime
10
+
11
+ from hiddifypanel.panel import hiddify
12
+ import random
13
+ import uuid
14
+ import urllib
15
+ import string
16
+
17
+ def init_db():
18
+ db.create_all()
19
+
20
+ try:
21
+ db.engine.execute(f'update proxy set transport="WS" where transport = "ws"')
22
+ db.engine.execute(f'DELETE from proxy where transport = "h1"')
23
+ except:
24
+ pass
25
+ if hconfig(ConfigEnum.license):
26
+ add_column(ParentDomain.alias)
27
+ add_column(User.start_date)
28
+ add_column(User.package_days)
29
+ add_column(Child.unique_id)
30
+ add_column(Domain.alias)
31
+ add_column(Domain.child_id)
32
+ add_column(Proxy.child_id)
33
+ add_column(BoolConfig.child_id)
34
+ add_column(StrConfig.child_id)
35
+
36
+ if len(Domain.query.all())!=0 and BoolConfig.query.count()==0:
37
+ db.engine.execute(f'DROP TABLE bool_config')
38
+ db.engine.execute(f'ALTER TABLE bool_config_old RENAME TO bool_config')
39
+ if len(Domain.query.all())!=0 and StrConfig.query.count()==0:
40
+ db.engine.execute(f'DROP TABLE str_config')
41
+ db.engine.execute(f'ALTER TABLE str_config_old RENAME TO str_config')
42
+
43
+ try:
44
+ add_column(User.monthly)
45
+ db.engine.execute('ALTER TABLE user RENAME COLUMN monthly_usage_limit_GB TO usage_limit_GB')
46
+ except:
47
+ pass
48
+ try:
49
+ db.engine.execute(f'update str_config set child_id=0 where child_id is NULL')
50
+ db.engine.execute(f'update bool_config set child_id=0 where child_id is NULL')
51
+ db.engine.execute(f'update domain set child_id=0 where child_id is NULL')
52
+ db.engine.execute(f'update proxy set child_id=0 where child_id is NULL')
53
+ except:
54
+ pass
55
+
56
+ add_column(Domain.cdn_ip)
57
+ db_version=int(hconfig(ConfigEnum.db_version) or 0)
58
+ start_version=db_version
59
+ # print(f"Current DB version is {db_version}")
60
+ if not Child.query.filter(Child.id==0).first():
61
+ print(Child.query.filter(Child.id==0).first())
62
+ db.session.add(Child(unique_id="self",id=0))
63
+ db.session.commit()
64
+
65
+
66
+ for ver in range(1,40):
67
+ if ver<=db_version:continue
68
+
69
+ db_action=sys.modules[__name__].__dict__.get(f'_v{ver}',None)
70
+ if not db_action:continue
71
+ if start_version==0 and ver==10:continue
72
+
73
+ print(f"Updating db from version {db_version}")
74
+ db_action()
75
+ Events.db_init_event.notify(db_version=db_version)
76
+ print(f"Updated successfuly db from version {db_version} to {ver}")
77
+
78
+ db_version=ver
79
+ db.session.commit()
80
+ set_hconfig(ConfigEnum.db_version,db_version,commit=False)
81
+
82
+
83
+ db.session.commit()
84
+ return BoolConfig.query.all()
85
+
86
+ def _v27():
87
+ # add_config_if_not_exist(ConfigEnum.cloudflare, "")
88
+ set_hconfig(ConfigEnum.netdata, False)
89
+ def _v26():
90
+ add_config_if_not_exist(ConfigEnum.cloudflare, "")
91
+
92
+ def _v25():
93
+ add_config_if_not_exist(ConfigEnum.country, "ir")
94
+ add_config_if_not_exist(ConfigEnum.parent_panel, "")
95
+ add_config_if_not_exist(ConfigEnum.is_parent, False)
96
+ add_config_if_not_exist(ConfigEnum.license, "")
97
+
98
+
99
+
100
+ def _v21():
101
+ db.session.bulk_save_objects(get_proxy_rows_v1())
102
+
103
+
104
+ def _v20():
105
+ if hconfig(ConfigEnum.domain_fronting_domain):
106
+ fake_domains=[hconfig(ConfigEnum.domain_fronting_domain)]
107
+
108
+ direct_domain=Domain.query.filter(Domain.mode in [DomainType.direct,DomainType.relay]).first()
109
+ if direct_domain:
110
+ direct_host=direct_domain.domain
111
+ else:
112
+ direct_host=hiddify.get_ip(4)
113
+
114
+ for fd in fake_domains:
115
+ if not Domain.query.filter(Domain.domain==fd).first():
116
+ db.session.add(Domain(domain=fd,mode='fake',alias='moved from domain fronting',cdn_ip=direct_host))
117
+
118
+ def _v19():
119
+ set_hconfig(ConfigEnum.path_trojan,get_random_string(7,15))
120
+ set_hconfig(ConfigEnum.path_vless,get_random_string(7,15))
121
+ set_hconfig(ConfigEnum.path_vmess,get_random_string(7,15))
122
+ set_hconfig(ConfigEnum.path_ss,get_random_string(7,15))
123
+ set_hconfig(ConfigEnum.path_grpc,get_random_string(7,15))
124
+ set_hconfig(ConfigEnum.path_tcp,get_random_string(7,15))
125
+ set_hconfig(ConfigEnum.path_ws,get_random_string(7,15))
126
+
127
+
128
+ def _v17():
129
+ for u in User.query.all():
130
+ if u.expiry_time:
131
+ if not u.package_days:
132
+ if not u.last_reset_time:
133
+ u.package_days=(u.expiry_time-datetime.date.today()).days
134
+ u.start_date=datetime.date.today()
135
+ else:
136
+ u.package_days=(u.expiry_time-u.last_reset_time).days
137
+ u.start_date=u.last_reset_time
138
+ u.expiry_time=None
139
+
140
+
141
+
142
+ def _v16():
143
+
144
+ add_config_if_not_exist(ConfigEnum.tuic_enable,False)
145
+ add_config_if_not_exist(ConfigEnum.shadowtls_enable,False)
146
+ add_config_if_not_exist(ConfigEnum.shadowtls_fakedomain,"en.wikipedia.org")
147
+
148
+
149
+
150
+
151
+ def _v14():
152
+ add_config_if_not_exist(ConfigEnum.utls,"chrome")
153
+
154
+ def _v13():
155
+ add_config_if_not_exist(ConfigEnum.telegram_bot_token,"")
156
+ add_config_if_not_exist(ConfigEnum.package_mode,"release")
157
+
158
+ def _v12():
159
+ db.engine.execute(f'drop TABLE child')
160
+ db.create_all()
161
+ db.session.add(Child(id=0,unique_id="default"))
162
+
163
+ def _v11():
164
+ add_column(User.last_online)
165
+
166
+
167
+
168
+
169
+ def _v1():
170
+
171
+ next10year = datetime.date.today() + relativedelta.relativedelta(years=6)
172
+ external_ip=hiddify.get_ip(4)
173
+ rnd_domains=get_random_domains(5)
174
+ data = [
175
+ StrConfig(key=ConfigEnum.db_version,value=1),
176
+ User(name="default",usage_limit_GB=3000,package_days=3650,mode=UserMode.weekly),
177
+ Domain(domain=external_ip+".sslip.io",mode=DomainType.direct),
178
+ StrConfig(key=ConfigEnum.admin_secret,value=str(uuid.uuid4())),
179
+ StrConfig(key=ConfigEnum.http_ports,value="80"),
180
+ StrConfig(key=ConfigEnum.tls_ports,value="443"),
181
+
182
+ StrConfig(key=ConfigEnum.decoy_domain,value=rnd_domains[0]),
183
+ StrConfig(key=ConfigEnum.proxy_path,value=get_random_string()),
184
+ BoolConfig(key=ConfigEnum.firewall,value=True),
185
+ BoolConfig(key=ConfigEnum.netdata,value=True),
186
+ StrConfig(key=ConfigEnum.lang,value='fa'),
187
+
188
+ BoolConfig(key=ConfigEnum.block_iran_sites,value=True),
189
+ BoolConfig(key=ConfigEnum.allow_invalid_sni,value=True),
190
+ BoolConfig(key=ConfigEnum.kcp_enable,value=False),
191
+ StrConfig(key=ConfigEnum.kcp_ports,value="88"),
192
+ BoolConfig(key=ConfigEnum.auto_update,value=True),
193
+ BoolConfig(key=ConfigEnum.speed_test,value=True),
194
+ BoolConfig(key=ConfigEnum.only_ipv4,value=False),
195
+
196
+ BoolConfig(key=ConfigEnum.vmess_enable,value=True),
197
+ BoolConfig(key=ConfigEnum.http_proxy_enable,value=True),
198
+ StrConfig(key=ConfigEnum.shared_secret,value=str(uuid.uuid4())),
199
+
200
+ BoolConfig(key=ConfigEnum.telegram_enable,value=True),
201
+ # StrConfig(key=ConfigEnum.telegram_secret,value=uuid.uuid4().hex),
202
+ StrConfig(key=ConfigEnum.telegram_adtag,value=""),
203
+ StrConfig(key=ConfigEnum.telegram_fakedomain, value=rnd_domains[1]),
204
+
205
+ BoolConfig(key=ConfigEnum.ssfaketls_enable,value=False),
206
+ # StrConfig(key=ConfigEnum.ssfaketls_secret,value=str(uuid.uuid4())),
207
+ StrConfig(key=ConfigEnum.ssfaketls_fakedomain, value=rnd_domains[2]),
208
+
209
+ BoolConfig(key=ConfigEnum.shadowtls_enable,value=False),
210
+ # StrConfig(key=ConfigEnum.shadowtls_secret,value=str(uuid.uuid4())),
211
+ StrConfig(key=ConfigEnum.shadowtls_fakedomain, value=rnd_domains[3]),
212
+
213
+ BoolConfig(key=ConfigEnum.ssr_enable,value=False),
214
+ # StrConfig(key=ConfigEnum.ssr_secret,value=str(uuid.uuid4())),
215
+ StrConfig(key=ConfigEnum.ssr_fakedomain, value=rnd_domains[4]),
216
+
217
+ BoolConfig(key=ConfigEnum.tuic_enable,value=False),
218
+ StrConfig(key=ConfigEnum.tuic_port,value=3048),
219
+
220
+ BoolConfig(key=ConfigEnum.domain_fronting_tls_enable,value=False),
221
+ BoolConfig(key=ConfigEnum.domain_fronting_http_enable,value=False),
222
+ StrConfig(key=ConfigEnum.domain_fronting_domain,value=""),
223
+
224
+ # BoolConfig(key=ConfigEnum.torrent_block,value=False),
225
+
226
+ *get_proxy_rows_v1()
227
+ ]
228
+ fake_domains=['speedtest.net']
229
+ for fd in fake_domains:
230
+ if not Domain.query.filter(Domain.domain==fd).first():
231
+ db.session.add(Domain(domain=fd,mode='fake',alias='fake domain',cdn_ip=external_ip))
232
+ # for c in ConfigEnum:
233
+ # if c in [d.key for d in data if type(d) in [BoolConfig,StrConfig]]:
234
+ # continue
235
+ # if c.type()==bool:
236
+ # data.append(BoolConfig(key=c,value=False))
237
+ # else:
238
+ # data.append(StrConfig(key=c,value=""))
239
+
240
+
241
+
242
+ db.session.bulk_save_objects(data)
243
+
244
+ def _v2():
245
+ add_config_if_not_exist(ConfigEnum.telegram_lib, "python")
246
+ add_config_if_not_exist(ConfigEnum.admin_lang, hconfig(ConfigEnum.lang))
247
+
248
+ def _v3():
249
+ add_config_if_not_exist(ConfigEnum.branding_title, "")
250
+ add_config_if_not_exist(ConfigEnum.branding_site, "")
251
+ add_config_if_not_exist(ConfigEnum.branding_freetext, "")
252
+ add_config_if_not_exist(ConfigEnum.v2ray_enable, False)
253
+
254
+
255
+ def _v6():
256
+ try:
257
+ Proxy.query.filter(Proxy.name=='tls XTLS direct trojan').delete()
258
+ Proxy.query.filter(Proxy.name=='tls XTLSVision direct trojan').delete()
259
+ except:
260
+ pass
261
+ # db.session.bulk_save_objects([
262
+ # *make_proxy_rows(["XTLS direct vless"])
263
+ # ])
264
+
265
+
266
+ def _v9():
267
+ try:
268
+ add_column(User.mode)
269
+ add_column(User.comment)
270
+ for u in User.query.all():
271
+ u.mode= UserMode.monthly if u.monthly else UserMode.no_reset
272
+ except:
273
+ pass
274
+
275
+ add_config_if_not_exist(ConfigEnum.is_parent, False)
276
+ add_config_if_not_exist(ConfigEnum.parent_panel, '')
277
+ add_config_if_not_exist(ConfigEnum.unique_id,str(uuid.uuid4()))
278
+
279
+ def _v10():
280
+ all_configs=get_hconfigs()
281
+ try:
282
+ db.engine.execute("ALTER TABLE `str_config` RENAME TO `str_config_old`")
283
+ db.engine.execute("ALTER TABLE `bool_config` RENAME TO `bool_config_old`")
284
+ except:
285
+ pass
286
+ db.create_all()
287
+
288
+ rows=[]
289
+
290
+ for c,v in all_configs.items():
291
+ if c.type()==bool:
292
+ rows.append(BoolConfig(key=c,value=v,child_id=0))
293
+ else:
294
+ rows.append(StrConfig(key=c,value=v,child_id=0))
295
+
296
+ db.session.bulk_save_objects(rows)
297
+
298
+
299
+
300
+
301
+
302
+ def get_proxy_rows_v1():
303
+ return make_proxy_rows([
304
+ # 'WS Fake vless',
305
+ # 'WS Fake trojan',
306
+ # 'WS Fake vmess',
307
+ # 'grpc Fake vless',
308
+ # 'grpc Fake trojan',
309
+ # 'grpc Fake vmess',
310
+ # "XTLS direct vless",
311
+ # "XTLS direct trojan",
312
+ "XTLS direct vless",
313
+ "WS direct vless",
314
+ "WS direct trojan",
315
+ "WS direct vmess",
316
+ "WS CDN vless",
317
+ "WS CDN trojan",
318
+ "WS CDN vmess",
319
+ "grpc CDN vless",
320
+ "grpc CDN trojan",
321
+ "grpc CDN vmess",
322
+ "tcp direct vless",
323
+ "tcp direct trojan",
324
+ "tcp direct vmess",
325
+ "grpc direct vless",
326
+ "grpc direct trojan",
327
+ "grpc direct vmess",
328
+ # "h1 direct vless",
329
+ # "h1 direct vmess",
330
+ "faketls direct ss",
331
+ "WS direct v2ray",
332
+ "shadowtls direct ss",
333
+ "tcp direct ssr",
334
+ "WS CDN v2ray"]
335
+ )
336
+
337
+ def make_proxy_rows(cfgs):
338
+
339
+ for l3 in ["tls_h2","tls", "http", "kcp"]:
340
+ for c in cfgs:
341
+ transport,cdn,proto=c.split(" ")
342
+ if l3=="kcp" and cdn!="direct":
343
+ continue
344
+ if proto=="trojan" and l3 not in ["tls",'xtls','tls_h2']:
345
+ continue
346
+ if transport in ["grpc","XTLS","faketls"] and l3=="http":
347
+ continue
348
+ # if l3 == "tls_h2" and transport =="grpc":
349
+ # continue
350
+ enable=l3!="http" or proto=="vmess"
351
+ if not Proxy.query.filter(Proxy.l3==l3,Proxy.transport==transport,Proxy.cdn==cdn,Proxy.proto==proto).first():
352
+ yield Proxy(l3=l3,transport=transport,cdn=cdn,proto=proto,enable=enable,name=f'{l3} {c}')
353
+
354
+
355
+ def add_config_if_not_exist(key:ConfigEnum,val):
356
+ table=BoolConfig if key.type()==bool else StrConfig
357
+ if table.query.filter(table.key==key).count()==0:
358
+ db.session.add(table(key=key,value=val,child_id=0))
359
+ def add_column(column):
360
+ try:
361
+ column_type = column.type.compile(db.engine.dialect)
362
+ db.engine.execute(f'ALTER TABLE {column.table.name} ADD COLUMN {column.name} {column_type}')
363
+ except:
364
+ pass
365
+
366
+
367
+ def get_random_string(min_=10,max_=30):
368
+ # With combination of lower and upper case
369
+ length=random.randint(min_, max_)
370
+ characters = string.ascii_letters + string.digits
371
+ result_str = ''.join(random.choice(characters) for i in range(length))
372
+ return result_str
373
+
374
+ def get_random_domains(count=1,retry=3):
375
+ try:
376
+ irurl="https://api.ooni.io/api/v1/measurements?probe_cc=IR&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
377
+ # cnurl="https://api.ooni.io/api/v1/measurements?probe_cc=CN&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
378
+ import requests
379
+ data_ir=requests.get(irurl).json()
380
+ # data_cn=requests.get(url).json()
381
+ from urllib.parse import urlparse
382
+ domains=[urlparse(d['input']).netloc.lower() for d in data_ir['results'] if d['scores']['blocking_country']==0.0]
383
+ domains=[d for d in domains if not d.endswith(".ir")]
384
+
385
+ return random.sample(domains, count)
386
+ except Exception as e:
387
+ print('Error, getting random domains... ',e,'retrying...',retry)
388
+ if retry<=0:
389
+ defdomains=["fa.wikipedia.org",'en.wikipedia.org','wikipedia.org','yahoo.com','en.yahoo.com']
390
+ print('Error, using default domains')
391
+ return random.sample(defdomains, count)
392
+ return get_random_domains(count,retry-1)
393
+
4
394
  #واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
5
395
  #Email hiddify@gmail.com for free permium version. Do not crack this cheap product