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.
- hiddifypanel/Events.py +27 -4
- hiddifypanel/VERSION +1 -1
- hiddifypanel/VERSION.py +1 -3
- hiddifypanel/__init__.py +7 -3
- hiddifypanel/__main__.py +13 -3
- hiddifypanel/base.py +88 -3
- hiddifypanel/base2.py +40 -3
- hiddifypanel/models/__init__.py +10 -3
- hiddifypanel/models/child.py +26 -4
- hiddifypanel/models/config.py +105 -4
- hiddifypanel/models/config_enum.py +207 -4
- hiddifypanel/models/domain.py +106 -4
- hiddifypanel/models/proxy.py +55 -3
- hiddifypanel/models/usage.py +58 -3
- hiddifypanel/models/user.py +171 -3
- hiddifypanel/panel/__init__.py +7 -4
- hiddifypanel/panel/admin/Actions.py +170 -3
- hiddifypanel/panel/admin/Backup.py +80 -4
- hiddifypanel/panel/admin/ChildAdmin.py +122 -3
- hiddifypanel/panel/admin/ConfigAdmin.py +54 -4
- hiddifypanel/panel/admin/Dashboard.py +70 -4
- hiddifypanel/panel/admin/DomainAdmin.py +195 -4
- hiddifypanel/panel/admin/ProxyAdmin.py +128 -3
- hiddifypanel/panel/admin/QuickSetup.py +127 -4
- hiddifypanel/panel/admin/SettingAdmin.py +224 -3
- hiddifypanel/panel/admin/Terminal.py +51 -4
- hiddifypanel/panel/admin/UserAdmin.py +277 -4
- hiddifypanel/panel/admin/__init__.py +82 -4
- hiddifypanel/panel/admin/adminlte.py +13 -4
- hiddifypanel/panel/admin/commercial_info.py +23 -3
- hiddifypanel/panel/admin/templates/config.html +1 -1
- hiddifypanel/panel/admin/templates/proxy.html +2 -2
- hiddifypanel/panel/admin/websocket.py +9 -3
- hiddifypanel/panel/admin_2.py +33 -3
- hiddifypanel/panel/asset.py +17 -3
- hiddifypanel/panel/cf_api.py +35 -4
- hiddifypanel/panel/clean_ip.py +125 -3
- hiddifypanel/panel/cli.py +172 -3
- hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
- hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
- hiddifypanel/panel/commercial/__init__.py +50 -4
- hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
- hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
- hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
- hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
- hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
- hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
- hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
- hiddifypanel/panel/common.py +98 -3
- hiddifypanel/panel/custom_widgets.py +71 -4
- hiddifypanel/panel/database.py +18 -3
- hiddifypanel/panel/hiddify.py +655 -4
- hiddifypanel/panel/hiddify_api.py +70 -3
- hiddifypanel/panel/init_db.py +393 -3
- hiddifypanel/panel/usage.py +85 -3
- hiddifypanel/panel/user/__init__.py +25 -4
- hiddifypanel/panel/user/link_maker.py +416 -3
- hiddifypanel/panel/user/templates/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +11 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
- hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
- pyarmor_runtime_000000/__init__.py +0 -4
- pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,73 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00p\x10\x00\x00\x12\t\x04\x00/\xcf}\xc8y\xac\xb0\xe1\x94\xfdg\\\xb5\x92\x1b\xfa\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xe6\xa7g\x1d!H)mo\x02\xff\xb1\xf1_\x8b`\xf2\xc4\x1c\x94L3V`\x07\x0f\xf2\xea\xe5\xe6\xbd\x95dp\xf0\xe5*\xc0U9cXK\xa087t\xb8\xb4\x9f\x82\x8eC|-a<$1w}e\x12\x01\x0e\x11\xe4\x0e\xd3Y.r\xd4\xfc\xb3;V\xd6=g\xb5\xfb\x87\xeb\xd5\xf7\x87o-0vD\xa7\xc3\x18\xabCx\xfb\x9cELW4\x04\xc3o#\xf46M<\xc3\x8c-\x89\x13?\xb8\xb1\xd4)008\x84\x9c\xdc\x97h\xafR\xa6\xa5]\xab?7$xxn~\xe1|X\xe8\xc3\x19|\xbaiG\xf5\x7f\x96Sf\x96\x0c\xef\xe1R]\x9an:\xe3G\xd9\xb55\xaf\x04\xdf\xe0\x80@~\x0e0\xb6>\xf4q\x87\xb5\x1c\xc8H\x08kY\x93\xd7T\x10U`\x1e\xb3\xf7\xbe\n\x82#{\xd2\xb0\xc0L\xe8\xd2,\x16h\xber\xbagK4N\xb9\x08\xe8zt\x12I4\x97\xf4\xed%\x13\xb9,\x05\'i\x07\xac\x1f\xd7\xbaG\xcf\xdd)X\x17\x8b,ru\xdf\xbf\x11\xa0Yy\x15\xe6\x19\xb6\x10\x84\xb1\xe0\x8a\x18\x10\xc8ukw\ru\xb3%\xecZV\xb0\xc4\xf6\xb8\x92\xee\xb4O\xbe\xd6\xf0\xca\x04s%x\xe9\x9d\xae\xd4!\xb8B\xf7\xe6\xce\xf6\x11\xe2.q\x1b\xf4\xd7\x0cGa\x84N\xcf\x8ah\x85\xfdE\xa0\x0f\x83\xd4\xa1\x0f\x18\xaeV\x019\x07\xff\x1a\x9c\xe1\xd1I\xf2q0\x14\x870\x85\xe9\xf6\xff\xffp\x8a\x1d]\xb2\x94{\xa8x\xc2y\xd9\xe1^\xb4Y\x01b\xd2E\xf9Uc\x97\xea\x94\x86\xb7\xf8\x99\xa4\\\x0f\xb5q0\x9d\x0c\xbe[\xd5\xfc#]\xe5^g\x9b\x7f\xf6\x85~\x8f\xa4\xca\xab\xda\xab.\x81%".\xa7\xa3d\xa1\xe3L\x8c\x86\'\xdd\r\x06+L,Qx\x8d\x06/\xdb\x04n\xe6\xfd-E\x8f\x10\xaf\x85\x98\xbe\xb3\xb4wgj&\xd0[\x14\xd6\xaa\xc4\xbc\x95\xb66\x07\x1f:\x9fx\xa6\x8a~N\xfcpT\xec\x86\x86\xd6\r\xa0\xc7N\n2\xabc j\xe4\xbf\xa08\xb4\xd7eW\xa6#\x1f\xf2\x9c\x1d\x90@\xd67\xcaPi\x955@7r\x98\xaa\'\x8f_cg\xc4\x17\x9cdGK\x8d<6i\x9c-\xd7\xc6\xc2\xab\x82_\xf59\xb3\xca_\xcb\x84\xc1\x11\xb7\xe2\xe2\\rAt\x9c{\xa3\x8d2\x9ap7F\xd9\xb9\xa9\x0e\xd8\x05K\xa1\x7f\xf4b\xef\xe0\x8b\x7fnx\x04\xd8\xc5S\x92td#\x9c}\x9f\xed\xc2\x17\xdaB\xf1Q\xa6\xbe\xb3D?_\xbe\x19\x90m\xfd\xb9\xe4\xe2O\x89\x08\xfc\xc2\x92\x17\xda\xf0\\\xe1<\'\xd2s\x0f\x8f/\x8f\xc1\x9f\xb9\xb9\xe1\n\x8a\xee\x87\x98\xe0\xf9\xf4|\x9f\xe7*\xec\xa7\x02\x14\xee5/x\x0e\x1d\xdf#\xf6\xae\'\x15\x97s\xa5\x99N\xa0\x01\xa0s%f\x1a\x1f\xd8C\x82\x87\xa8\xeb\xbay6\xfaO\n\xee\xabv\xf7\xe4(\xfdr\x03\xfd\xdcP\x89K\xeac\x08\x1f\xd3\x97\x1f\x06ij\x97D\xf4\xe1\x0fse\xc1\x87\xb2Z\xb7\x08\xb5W\xf6\xaf\xa7Lf\xdd\x11&\xf2\xa2\x1c\x80\xc2\x18\x13\xd9\xcemn\xe4zyc\xe2hY+\xb3g\x05W\xf0o\xc8\xaf\x81\xc2\x8137\xa4\x15\xbbe\xd4\xa3\xeb\xfd\xcc9s=5\xbdCp\xc2\xe0\x8e\x7f\xdb\xac\x95\x85j\xf61.s\xcf\xad2_\xebC\x08\xc0\xec\x14h>\xe94E\xd7Qd\xa3\xf5\x18\xc0\xd2\xdf\xa6\x9d\xa3\xac\xaf(]\xa4\x8eb\xed\xffs\xc5B\xc4O\xb8\xb2\xb1\xfd\x90\\\xaa\xab<\xff\xa1"\xab\xdem%\xf8\x92sut\xd1m\x8eN4\x10B\x8a\xe2hWs\xb2X\xcbn\xf1\xb1\x01\xdb\xd9G\x98\x96?^Jy&A\xcc!\xd6L\x14.Iy\xfc\xb4\xec\xc5P\xa9\xe6\x95KJT\xe8$l\x14\x0b\xb5\xc4\xe1\xdec\xdd\xe2\x99\xef\x13\t8~ao\xb0n\xb7\xb4\xb0\xc5I\x07U\xc3M0\xb2\xf1y\x86W\x03\xe6\x81\x85\x98\x16\xefS\x8d\x01R\x02\x062\x9a=\x10\x83\xae\xb3\xb4y\xb6\x0e\xe0\xed>\xcd\xb8.\xe2<R\x84\xa9\xc1Y\x1f\xc3\x86c\x9b0\xe5\xc2X\xf2\xea\x05\x01b\xff\x90\x8c>\x97\x94\x93q\xa9c\x8d\xce\xe4|:\xe4\x8c}\xc3;\x8f\xe1la\xaeTQ\x8e\x8a\xff\x0e\xadVC\xe7\x1a\xee\x17_\x1clr\x03CQ\xd0\xf9\xbciZ\'WM\xb9H\xfe\xca\x15\xee/\xef\xd5J\xd3\xda\x89U\xca\xce\xd2\xe9\x92\xabR8\xb0\xf5\x96C\xf4\x0f\xccES\xe6\x15\xc1u\x04\x1c\xe1\x8d\xbf\x14\x94f\xd5\xb5\x83"c&(\xd0\xd0\x83\xca\xb1\x10\xdc[F\xf8\x0b:\x08-\x01\x13\x98\xd0\x8bh\xf9\x98\x1fu\xcd\x05(h,\xffq\xf0\xc4\x08\x07\x15\xc2R\xd2\xea\x01\xbc\xee\xca\xdd\x99;\xbd\\\x1cc\xcb\xa1\x9c\xe5\x98d\x02Y\x9aXQ\x1b$j\xd9u\x04{\xaeS\x1a\xba\x83\xdb\xeb\xd5\xe2<\xa0\\\xf5\xbf\x9d\xe8\xc05\x81\xe2\xe8^\xa6\xba\x91\xb2\xa2]\x99\xde\xd9!\x0f \xe5\x0e\xa5\xf3m\xf5\xdb\xfc\xca5\x0f\x14\x1cn\xfb5Z\'\xa8A\x02I\xc1v\xe2#\xb2\xec\x98V.V\xd7h\xc7\x9c\x19\x86\xe91\\\xea9\x97\xee"\xbe|\x15\xef"\xf1\xda.\xbc\x05\x9b\x12\x17\xcf \x8eR\xfa\xcca\xc6z\xe1\x19\xcb\xc4j\xbdm\xb86\x8d\xe1YJ\xa3F\xc5\xe2\xfe\x1as\xed\x15\xc1\x83\x16\xcb\xffK\xe7\x8dv\x0b\x82\xcc\x1a\x0c\xdcC\n\xc8\x94Y8\x92\x84\xa8\xf3\xa7\x9e\x90\xd1Q\xd7\x85\x11?5p\x13\xca\x1a~7\xd1\x89]\xce\xbe\x8d\xd9c\x98\x13ZGA\x00\r\xb3n\x87\xcb\xdf\xf9S|-O\xad;\xccV\xb4\xbcK\x0f\x812\xd6\xa7\x08\xe5\xc9\x1d\x1cH\x8b\x90\xe2\xd7\xe6\xfc\xb7\xb45\x08\xfe\xf8\x91\x08\x17\xf5I\x11v\x9c\xab+wI\xb2\xf9f \x13w\xfa\x9f\xcef\x83\xa7\xa1\xed\xd9\xe6\xd9_\xb7\xe3i\xe0F@\x1c\xb2w\x8fNcP\xbc-\x97\xa8J\xcf\xe4\xdd\x02\x94\xe2nl\xae\xd0\x9ck\xcd\x94@}\xe5\x01Y\xb1\xcd\xa7\xe3\x04|\xfbT-cr\xca\x17]\xd6B\x87\xb5=\xad\xc7\x87\xccE\x87\xe4\xe9\x11L\xe15\xbd\xdd\xeb\xb6\x0f\xe7\xdc\nY^*\xb4\xe6D\x8bn\xfe\xb2Mz\xcb\x98C\x91\x93\x94%\x98\xded\x8e\x92\x18\xba\x87\xaeb0\xf7T\xe5\t\xc5\r\xaf\x1bE\x11\xfa\xcfywW\x1c\xf04\x17%U\x82\xa9Rwp\xc5\xa5?\xb1\xb7O\x18*\xd5\x8c\x11\xb4\xda\xe9Is5"\x11l\xaa\xae\x8c\r,\xf4"+\xdc\x07\x94Q@\x81jz\x83\xed@\x03\x0c\x86E\xcb\x10\x960\xccN\xfc\x07E\xf2F0h\xe2N[\xbdPJ\x9e\xe7\xe3\x1f\x97\x7fF\xed\x0cM\xe3b\xcc\x12\xe3\xe4~\xe1 \x9f\xf6\xf3\x04\xdf\xc0Y\xf2*\x08\xd6\x93\xbc4\xa1\xe5"\x01\x942\x14\x8c\x00\x91D\xfaJ\xe3\'t \x1b\xb4H\xa9Z\xa1\xfd\x87\xb7A\xba\xd3\x1e\x98G\xb9#\xae\xdc\x85,G*T\xd6\xf7\xc0\xb0p!\xcc\x86\x96\x10\x80\xfd\xad\xdd\xfdT\xb9x\xad\xa5\x85#\x99(\xf2W\xd3\xe3HnIs\xedk2,5C\x18\xf8\xd2\xd5\xc6}v2b\xc0(\xb5\xbb\xdf\xaf\xf6\xfd\x0c\x7f\xe4)\xd6 6\xf7\xb5\xdf\x10\xcb\xe5\x12\x8a\x85\xa5B\xb2\xfb\x81\xbd\x8e\x0fY\x90q\x03\x08@e:[\x80\x80.\\\x07E\xf8\x82 +\xb4\x0c\xbfe\xda1+\xb2{\x10\x1d\xa6ktEb\x8f\xfb\xe2f\xc8\x10\xfc\xee\xc8!\xa8vFi{\x8a\xcf\xb1\xee)v=)\xc1\x96\x1d\x8d\x04\xbd\xbe\nb\xff\x06\xc3P\x10r\xed\xf8t\x13\x99\xd5\x8a\xc9\x89A\xc8\xf1;d\n\xec\xf4\xea\xce-\xb3\xbd\\1\x9e\x11\x18\x1d\xc6\xfa\x16\x9a\xab\x82\x10\xca\x7fz\xda\xbf\xb1}\x10s\xdb\x1dL\x1a\xdd\x0e\xc3z\'\xde\xed\xf5\xdb\x14"\xb9\xc7\xd4/\xea"\xb2c.\x07\xf0\xfchb\x1f.\x06\x11op\x99\xf7\x14\x95\xac\xd88\x04\xb7\xf4\xf9\xedM&n\x0f\xff#\xf0\x0c\xfa\xfe{\xc0h\xf6\xf0TL\n\x9c\x89w!\x1b\x7f\xe2\x83\xc9\x1c\xd6\xdaQX\xe1INa\xc4"\xa5\xf9\x1d\xdc)\xd1\xd7G*<-\x10H\xbc\x12\xbd\xe9\x91\xe3\x81\xd4/\x8e\xee9\x03\xa4\xa0x\x8a\xc5\xcf\xecscf?\xb8\xc8\x90*N\x987\x1clA\x17?\xb8\xff\xd8\xe2\xb2K\xdciX\xaf(\xc8\xe8\xfb\xe05\x13\x00\x7f\xbdH\xda\xe7\xb1\xfes\r\xc3\xb1\xb8\xad\xcd\xb5\xc6\x83\x02\'\x0b\xb7yN\xdc_\xa0\x99\x04\xed\xe9\xe3\x87\xca\x9d\x1e\x17\n\xbe\xb7k\x1d\xa5\x87\x1a\xa0$\x8f\xffd\xeb\x8c8\x9f?\xb6\xf6nQ\x8dR\xca#-\xdfc\x0et\xac\xdf\n\xa7S\xcb}\x8c`\xc6\x95\xb7]\x01\x82o\xf5?\x9f\xe5\x08\xc3\x86\x8a\x14fihu\x90\x01}\x9d\xdev\x08\xe01^\xed\x93\xb9\xc1\xcdH\xe1\xb3\x9fjt\xb4\xa9\x11d\x82\xb4\x9c\x19i;ohl\x94\xcc7\xd6\xf0\x08\xf8\x8erg\xc0\xe0#\xb7\xcd\x11\xae\xe3\xe4Nd"\xd9Bj\xed\xd5\x90E\x1f\xcf7\xfd";qr\xac\xd89\x06\r2\x19\x0e\x03\xf0\xc7>\xe5\xd7\xad4\x84\x15wy\xcf\x9e\x0c\xcd\xa7*i\xaa^\xbf\xd5\xd0\xbe(\xd2\xce@\xd9\x1d\xf7\x91\xa5a\x98\x9b\xeb\x7fr\xb2\xaff\xe1q\xc0g9\xdbI\x10\xa4\x9e\xe1\xf1\x88`A\xfer5T\x02E[\x83\x16#\x14\x9b\xe9Fi&H\x1a\x89Mb\xf2^h\xd0\x98dW\xf6i7eta\x7fG\xbe\xe9+\x9bIg\xe1:+\xec\xdc\x12n\xe65\xd2P\x9a\x92\x9ey\xd6\x8a\x12\xca\xdf\x11IP\xaf^!\xfbM!\x0f\x18\xadL\xa1\xbc\xc8\xa5\xfey\xf6\x92\xb9\xfc\x7f\x8b\xb5\x8b\xbb\xce\xee\x01\xd5Y\x1f\xd9\x8b\xdc\x1b\x0c$\x01\xd5a\x9euX7\xf8L\x9b\xab\xa8\x81D\xe1\x97](0\xa0<R\x8a\x89]X(\xfe\xcc\xd3\xd7\x94\xf9\x8e\xf39\xcf\x14\xb8H\x84M\xc74Q\xc3g&,\xc0\xa7Gj\xf9\xd6\xa2l"\xc0f\xdfzQ\xd4|!\x10C\xcc}\xaa\x8d@+\\mRXX\xda\x84*7\x9e\\\xe9O\xdaf\xd4\xea\xe9\xbe\xd8\xaa\x02\xf8\xcbK\xc8\xf9\x08jog\xeb8\xd1\xe6\xc6,\xd4\xff}z\x94\xfei8s\x89s\xbf\xd0\xf7\x84\xb3\x00\xf2Ie\xafx\xb6=zO\x073\x0bV\xcf\xb6a\xe5\x8b\r\xf0}\xcd\x17\x18L \x8bo2 \x84\xac\xddt\t=Lx\x93\x01=i\xa8\x94\x81\xa6\x92\xf0\xb16\x11\xea\x0c\xba*i\xd9N\xc5V\xea\x1aI\xa3`\xcbPJ\xe2\xf2,\x1bo N\xfbL"\x9aM)\xd9v\xe4;\rX\xd36\xba\xb9|^\xe2\xc9\xfe\xa9\x18\xc2\xe5\xfc\xf2\xf7\xc1\x03\x817P\xab3q\xc0\x9e\xfbM\x1a\x1e\xbfy\x80\x0f\xae\x07\x9e\xd4\xec\xd7\x14\x04B2\x14\x95c\x01\xb2\xa6\xdd\xd5\xf3\x1c\xf5V(c\xd5\xaf\xb8\x11\xd7\xb7Ik\xd3\xd7\xba\x0b\xe5\x1a\x0b\xf4\x05+\xc2\x1f\x18E\xb6J\x9d\xfa^\xa8\x89H\xe6\x10|#W\x8f\xea^\x93ov99\xd7\xcc\x99\xeb\xbf\x96\xd5\xa2\xee\x97\x06Q9\x84?{\x8fd\t{\x08\xfd\xc6\xceJ\x9clV5\x9diAW4\x98\x84\x82\\\xc1h,\xbe\x1f\x94\x1a\xf6\xe7\xa94>\x90$1J\x84B\xe4\x0b\x1e\xa2\x0esD4![\xfd=%\x95%N=\r\x95\x90\x9d\x1dQ\xcdm\xd8\x9a\xa7\xf2\xf2\xf3\xb7\xc2w\x7fu\x8du\x06\xd2\xa1{\xf2#\xe4\x93{\x8cl\xb6\x06n\x16\x9dnn^l_%\xb8\x1dg\xe0Q\xd2\r\xb9M\xad%!f\xf9\xf5|oE\xfb\xae\x86j\xaa\x8c\xd2\xe1\xdfJ<\xca\\R\xf1\xfb\xdb\xe5=\xcaZ5\xc49~Qk\xae\xb00\x06<\xc9\xa6a1"#gn\x82 \xe6\xbc\xd6\xce\xd6\xb9r\xb4\xea\x14\xceH\xd6\xd9\xddL\xf9w(I\x91\xff\x81\xf6U\x8f\xfc\x13\xdee!\x1f\xa48\xe5\xc7\xcb\x92F\xe1\xc2\x8b\x95z1a\xd8\xb8a3\xbb\x0b\x1b\xe4!S\xdfk\xfd\xa6^!6\x13\x87\xff\xe3\xad\xac1\xe9\xd02\xe9\x94\x8c~\x02\xbd[\x1fxJ+*\x9a7Y\x05\x03\x19\xf6\x04t\x91\x841u=b\x83%\xf9["\xc3:\xdb3\x91\xb1c\x02\xb3v\x81-\x051\x1b%P;\xba\xd0pG/\xbdU\\5"l\t-,31\xff\x84\xfe\'\x1b\xddI\xa0\xe7\x1b\xfb\xc8y\xd7\xe62\x0e\xf4\t\x96\xb1*s\xf8\xa0\x05$\x8an\xa7\xcc:\x85\x12\xf9$6\xc9\xaa+\xe5<_\x03m\\\x9c\xf2\x93MQz#\rP=\\T\xf0\xea(\x13&\x7f\x9d\xbf\x98\xe4\xe0\x94F:\xc1\x07\xc0\xeaOb\x16\xe0\xb3\xf5\xe3I3\xbf\x05\xcfc\xfcr\xc0d\xe0d\x05d\\v-\xdd\x97s\xe3\x199\xde[\x15\x84G\x05\x8c\x01\x92*\xf6!W-\x96\xaczji\xb8,\x89b\x15\x14\x90\x05\xa7\x11Z\xa7h\x1c\x97DqV\xb0\x86*\x88z\xd5\xb9+(\xd7\xd2G\xdb\xfa\xef\x88\x10\xdaq\x8eg\xc0\xdfv\xc1\xa5C\xdf\xcaY\xf5\x12\xba\xa8\x01\xd0\\\xa2.\x97?Kbc\x12:,N\x8e\xfdj\xbb\xa0\xf9\xd7\xfd\x8427Z\x1d\xf9\xf7m\xdcg\xf5\x02\x11\xe5S=\x15$\x05o9j\xce+\xfb\xbd\xf6C%\xcb\xe2\xecd\xe5\xc1\xaa\xa4C\xafV7\x98\x08\x1b\x08\x9eg\xdd\xe4Q\xc3h(\xbf,\xa6\x12\xbe\xe8\x89b\x80\xf3ba4\x9a\xb7\x82\xe0\xeb\xed\xea\t\xc0\xd0\x9f\r\xf8\xcf\xb1%\xd49\x98U\x19\xf9\x96\xf8p6+\xb7\x8d.\xdc\r\xae\x1c\x18%U9\xacf\xf7\xde\xb7\x11t\x88\x7f\x84\x0c\xa9\xe2p\x06_\xcc\x89\xc0\xc3D\x90\xf7\xf8\x85\xb0p\x1a\x8d\\:\x8a \x15aG\x1e\x99 \xb4I7f\xfa\x7f\x0cY\xe2\xc1x\xa6\x04\x91u\x1b\xb2\x1f\r\xb5@\xa5\xa1U\x18$\xb4!\xcb\xfa\xe9\x8a\x92\x9f\xa0\x89\xf2Y\xe0\xbe\x1d,"qy\xbe\xee\x9f\xdb-\x9b\xbe\xae\xa3J\xa3\xd0\xe5dKv\x17|\x9d\x04\xb7\xbbg\xcf\xceJ\xbe6\x8f\xbb;Zr[M\xc7\xb7V\x19\x08q\x88\xb6\x05\x0b\x9du\x88\xa9\x88\x96\xbc\x8at\x9bK\xe4G?\xbeQ\xe8\x8b\xdf\x03\xcf\x82\xbf\xe32~GY\xc1aF\xf3\xfa\x1d\xd4b\x87\xc9\xff[\xbe\x08\xf4qc\x00\x0e\xb1\xd3\x1a\xa9\x19j\xa8g_\xcc-\n\xc6%-o^\x9a\xe2\x03\xbf{B\x8epl\xfda\xeb([\xca\x06\xb4\xfb+\x9c\x17\xdd^\xd8cd}\xa5\xc9*\x13\n_C\xf0\xea \xa8\x81,\xb8L~\x95\r4\xd7\x99\xee\xd8\xaf\xca \xe9\xc6\x0f`\xe9\xf5\xc8[\xf1\xce\x02qe\xcc~Y,\x89\xedj\xec\xcd\xe5\xa1\xfa]>5\xb4s8<\xd9\xd0\xaa\xfe\xc8ZVX6\x05T\xaa\xb5\xcbv?+\x9bi\xa7\xb6\xb1T\x9e\xa2\xe6\\\x01\x18\xc2I\xb6jr\xf2\xad\x17\xde\xf9l&*\xf1\x88\xed\x06\xcd\x9c\xf9\xee\xc0\xe7\xa3gs\x00\x05\xb2\x8b"\xf8\x99\x0bDwN\xf6\xd453\xf3\xaat.\xc0\xe49g\xb4\xa4:\xc9\xba\xafO\x90p\t\xc0(#\xd4\x90\x13rgv\xf9\xe5\xca\xa78\x1f\xeetU1\xbe\x1dgV\x8en\xf0\x1c\x1e[d\xe9U\xccL\x90\x8fv\x9d\x18\xe2\xc2\x1d\x85|\x18\xd4Ik\xe1^\xd7\xeb\x15\x93\x86\x01\xc1\x03_\xfa\x12D\xb5\x15`\xc2\xe7\xbd-\xb9\xb7l\xc3Y\xfe\xf8-\xbe\xc5>\xdb\x8eAG\xda\x80\x8d\x83\xa0\xd2\xae1\x86W\xf8\xa3\xe3\x16\xfe\xd3\xb8\xca\xbd\x98F\xf4\xbf\xb0#\x8ah\x93\xdf\xae\x1cVK7\x98\x14\x03\xbd\xf7H\xc1\xbd\xf6\xa1\n\x92\xe0\x14\xc9\x8f\x90\xa3\xb2\x84\x94]a[\x0fHl\x98a\xb4"\xbf\x11\xe7\xe8PF\xf46\x833\xa0\\\xee\x0f\xce\xc4\xd9\xfb\x98y-\xd5\xf8|n\xb9j\x86\xe4\xc2G\xb5\r\x9b\x01W\xf0\xc2\xf42on\xad\xdcS3\xa8\xc2}\xf8\xe63\x96K\xba\xd9j\x03\xa0\xc3\xda\xccz#\xb7C\x81R4\xc0U\x8a:\xc0\xc9Rp\x89\x89\xc4\xcc\x92\xfe\xfb\xef\x1dn\x81\xb3\x96V\x8e\x1d\xcd\xbcfHf\x89D\xc274\xcc\xf6\x8c\xefdra\x04`s\xfaM\x0e\x07\x9f\x90?Mc\xef]?\xaa\xc5Z\xdb\xd8\x825\xb9\xc3\xeaP\xa8g\x8f\xad4I;\x0bD\xaf\xb4o\\\xfd+\x1d\'\xc6\x00\x18\x86\x82\xcb\x06\xee\xd7\x95\n\xf0\x7f\xb5\xb4\x91\x04\xec,a\xdc\x1b\x89\xe4[)\xb5\xcd\xe1\xde\xfdz\x02u\xd1\xeb\x81\xa2\xd4/\x1e\x86d\x07;\xde\x0f\x00\x1e\xc5\x0f\x14\x1f\xb9\xb4H\x128\xe6\x90\xd9yZ\xf6h\x9e\'\xa0\xa2\xbc\xa8?\xda\xfd\xba+:\x8e\x0f\xfd\xf0t\x80\x9f\xcbc\xdam\xdb\x9crE\xab2\x89\xc9\xc5J,KW\x8fg\x11J\xfa\xa0+\xef\x11y\x89\x00\xae\x8a2\x99\xc6\xb4\xe6T\x08p\xc3\xc1AEZ\x8ce\xf1$\x99\x93\x17wy{6d\xa9d\xfe9\xdb\xc9l\x15#I\x07\x1a[v:W-9*r\x16wW{\xb0\x82M\xefb\xda\xad\t\xb7\x93\x994\x125/K\x99w\x17\xca\x8c/\xa6\x8b\x84\x81\xb8\xdfFG1\xa8N\xc8\xfc\xd1\xcb\x11\x9bz\x05\xb58\x9f8?\xe7\x8d\xca\xf2\x97\x10P\xd1\xb0P\xdc\x9apk\xaf\xa7i')
|
1
|
+
from telebot import types
|
2
|
+
from flask_babelex import gettext as _
|
3
|
+
from flask import current_app as app
|
4
|
+
from hiddifypanel.models import *
|
5
|
+
from . import bot
|
6
|
+
from hiddifypanel.panel.user.user import get_common_data
|
7
|
+
|
8
|
+
@bot.message_handler(commands=['start'],func=lambda message: "admin" not in message.text)
|
9
|
+
def send_welcome(message):
|
10
|
+
text = message.text
|
11
|
+
uuid = text.split()[1] if len(text.split()) > 1 else None
|
12
|
+
if uuid:
|
13
|
+
bot.reply_to(message, get_usage_msg(uuid), reply_markup=user_keyboard(uuid))
|
14
|
+
else:
|
15
|
+
bot.reply_to(message,
|
16
|
+
_("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
|
17
|
+
"Welcome to hiddifybot.\n"
|
18
|
+
"Start by clicking the link on the panel or entering your UUID."))
|
19
|
+
|
20
|
+
|
21
|
+
def user_keyboard(uuid):
|
22
|
+
return types.InlineKeyboardMarkup(
|
23
|
+
keyboard=[
|
24
|
+
[
|
25
|
+
types.InlineKeyboardButton(
|
26
|
+
text="update",
|
27
|
+
callback_data="update_usage " + uuid
|
28
|
+
)
|
29
|
+
]
|
30
|
+
]
|
31
|
+
)
|
32
|
+
|
33
|
+
|
34
|
+
def get_usage_msg(uuid):
|
35
|
+
with app.app_context():
|
36
|
+
|
37
|
+
user_data = get_common_data(uuid, 'multi')
|
38
|
+
|
39
|
+
user = user_data['user']
|
40
|
+
expire_rel = user_data['expire_rel']
|
41
|
+
reset_day = user_data['reset_day']
|
42
|
+
|
43
|
+
domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
|
44
|
+
user_link=f"https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/"
|
45
|
+
msg = f"""{_('<a href="%(user_link)s"> %(user)s</a>',user_link=user_link ,user=user.name if user.name != "default" else "")}\n\n"""
|
46
|
+
|
47
|
+
msg += f"""{_('user.home.usage.title')} {round(user.current_usage_GB, 3)}GB <b>{_('user.home.usage.from')}</b> {user.usage_limit_GB}GB {_('user.home.usage.monthly') if user.monthly else ''}\n"""
|
48
|
+
msg += f"""<b>{_('user.home.usage.expire')}</b> {expire_rel}"""
|
49
|
+
|
50
|
+
|
51
|
+
if reset_day < 500:
|
52
|
+
msg += f"""\n<b>{_('Reset Usage Time:')}</b> {reset_day} {_('days')}"""
|
53
|
+
|
54
|
+
msg+=f"""\n\n <a href="{user_link}">Home Link</a> - <a href="https://t.me/{bot.username}?start={user.uuid}">Telegram Bot Link</a>"""
|
55
|
+
return msg
|
56
|
+
|
57
|
+
|
58
|
+
@bot.callback_query_handler(func=lambda call: call.data.startswith("update_usage"))
|
59
|
+
def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
|
60
|
+
text = call.data
|
61
|
+
uuid = text.split()[1] if len(text.split()) > 1 else None
|
62
|
+
|
63
|
+
if uuid:
|
64
|
+
try:
|
65
|
+
new_text = get_usage_msg(uuid)
|
66
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,
|
67
|
+
reply_markup=user_keyboard(uuid))
|
68
|
+
bot.answer_callback_query(call.id, text='Updated', show_alert=False, cache_time=1)
|
69
|
+
except Exception as e:
|
70
|
+
print(e)
|
71
|
+
bot.answer_callback_query(call.id, cache_time=1)
|
4
72
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
73
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
from hiddifypanel.panel.commercial.restapi import bot,register_bot
|
2
|
+
|
3
|
+
from . import Usage
|
4
|
+
from . import information
|
5
|
+
from . import admin
|
6
|
+
from . import DefaultResponse#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
7
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,122 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00u\x1e\x00\x00\x12\t\x04\x00\xe8-\x9dN\xea,\x99/\x19\x923\xed\xab?\x8b\x12\x00\x00\x00\x00\x00\x00\x00\x00!\x10{\xa5\xa7\xb2^\x91\xae\x8f-{4f5y\x90-\x11\x15BH\x90\n\x88\x06\xd4\xbb\x1a\xcc\xfb\x00z\xda}\xa79L\xf4\xaeq\xbb\x10\x10l\xb6\x99I\x7f.:\x01\xe6\xb7F\x08\x82\x9b\xa3\xc1\xff\x0f\xfd\xedu\x99\xee\xb7\x0fz[\xd1\xe1*@\xb4SL\x0f\x87\xae\xfe\xea\xff1\x12\x03\xa3V\\\xe3?25_\x98\x83\xc8\x9d\x980!\x86\x0c\x91\x99{|\x0b\xad{\xfb\x92t\r\xc2\x97\xcd\r \t:\x0b\x7f\x8d\x95\x17F4\xd6\xd0\xfaK\x7f\xa6\x7f\xff%\xfeI\x8e\x84\x10)\xf5l\xfd\xdc%\x8b\xbe.\x81\x81\x183\xd5^\x10\xdc\'\'%\xdbp\x85\x1e7\xde\x96\xf0\xb4DH4\xb4\xabT\xfb\xdf0\xbd\xc0\xb4\xe5\xa9\xc8K\x13:h\x8et7\x829\xf6\xcb{$\xb2\xd0\xa6E\x0f\xa2D\x02\xb7q\xe9\xfc\x052\xd7\xeb\xa8\x0f\xd7s\x0f1\xe4\x9a\xc9\xe6\x87\x8d\x9e\xbb\x8c\xff0\x8d\xf9\x88\x02b\xab85\xffu\x18\xed\xe43\x8c~4\x95\xc7\x9cJ$g` \x8a\xde\x9d~M\xf1\x8ej\xc5\xe2\x99\xdf\xe0\x1b$JL@\xc3\xa33\x89\xfbc\xf1\xa09\xc1_\x9c\x01a:\x9e\x15\xb6\xf4\xb0\xfb\x07\x9c\xab8k\x04\xab\x1ct\xaf\xab\xd4p,\'"\xad\xebOP\xf77\xf5\xe9\x02(\xf4\x10-8\xc5\x149\xc7\xd1]\xd0\xc4\xff\xfd\xe8\x94\t\x92dr\x8d4\xb6cy`\xa77\xeb|r` \xb3\xe8\xbe}"\xee\xacE\x07/\xdc\x1fc\xf0\\(\xc3Q-\xc5W\xd0\xd7\x18\xd52\x8ak\xfaL\x1f\x07\xfc\xb7t\xb3y\xcd\xf1K\xa4\xe9\xfbI\xb8\xf11f\x03\x8c\xfd\xd8\xee\xe3\xef\xc3\xa0!\xd9\x12G)\xd32\x91\xf1\xe8o\xcd\x99!\xe7\xa2\xa5V\xec/+C\xf4A\xc4\x9f\xe0%\xcd\xcc\xc9\x18\x03\xf7hM!\x94\t\xb3M\xd29\xc8\xda\x8d5J\xb9GDMt(\x92\xe3\x1a\xcct\x0c\xb9Y\xb2$\xbf\xcb\x8f\xfa\xd1\xaa\xfc},\xd4\xc1j\xdcg}\x18\x83yoo\xe8A@\x95\x1d\x12\xba@\x8d\x07E:\x94\xfbo\nVe\xa08]\xd1\xe6p\xe5\xe8\xa5SF\xf2\\\xb9QDj\xd0\x85^\x87\xa9%\xbaw\x00G\xda\x08\xff\xc9|F\xa4\xc0U{\xe7\x13\x88\x11XO\x94Z1\x91\xc1\x02Ow\x18\xe9\xd64\x9b\x0b\xbc\r\x11\xc4N\x03\xe6\xd9\xc9#m\xca<\xbc\x90\x92\xcaT:\xe6~@\x8fB\xbbe\x11a\x8e"\xe6G7\x16F\xd8\xd2\xe2\x16Qe\x85\x85|\x0fXlC\xe4K\x13\x82|\x85\x8f\x1dLN\xca0_\x8aTR\x86\xfa\x878\xee9hn\xcc\x15sv\xb5\xc4.\x86\r\xbc\xed\xf2h\xf9\x95MAx4\xb8\xbf\xaa4\xfe""=U\xc1+\x0e\xffx\xb0\xa6\xe0"\x9b5\xad$\xe8i\xef\x00\xfae\x9c{;\xac\xf4\x90%\x06m\x99\x01f\xfcz\\\xf1\x1d\xed\xa9\xc4\x99\xa2\xa9\xf8K=*}\xf8\x1d/\x8f-\xf1\xf5\x06\xb7P\xde\xf5\x94\x0f\xe4\xdd\xdb\x0f\xa8j\xa4\x88\x82Vq|\xddY\x19UC\x9f\x85d\x1b\xb4\x14\x8c\xfc\x92\xf1\x1f\xfe\xbbL\x1e\xcd\xf6\x01_\xb1\x97e\xf8R\xbb`]\x18\xacU\x02\x01(\xdcnJR\xf2\xc2\x1a\xea\xf9\x1ae\xcc\xcf\x03\xfa\x89($\xb5\xd9\x86a\x80\xc2\x0b\x07\xa8\xff\xa2\xbb\xf0|\n]\xff\x82\x85M\x11\xe1\xcd\x1e{@}\xc7\xd4\x7f\x99\xa4\x80\x82\xec\xa1\x9c\x11\xed\xe8\xb9\xb6\xef\xa9\xa0&\xa8\x91W>\xab\x85\x8e\xd5R\x8b\xcc\x9c\x9cRS"W\x13\xc6\xc9\xbc\x97\xda\x18\xfa@\xbd\xe2\xa4\t\xfceS\x95\x8a\xc498\xf9\xe9q\xe2\xd1^wS\x7fe\xf2\xc0\xa3c\x1a\x8a\xbbb\x08\x9co}\xe6\xf7\xaa\x8aS\xb6:\x8d\xc4\xd0\xe9\x8e\xa0\x9bS\n-`\x0069#Qvvj\xecd\x1ajm\x97\x8b\xf5\x11\xe8\xe2\x95\x88\xef\\\x14\xbb\xc7E\xf3d\x14[\xa3Y\xb1\x88&\xc2|\x94pa\x1bu\xf5\x04\xdb\x18.\xc3\xaf[\xa6{\xbd\x1bv\x91\xcf9\x82[\xb9\xee\xb5\'\xe2#\xa4&\x1e\x95\x9c\xb6\x0c\x12d\x19\x97\xcf\x92U\xb7\tR\xf3\xef\xf6o\xc8\xaa\xcen~r\xcdL\xed\xd1\xf0\xd5\xd7\xcb\x0c\x99E\x10\xb9\xce\xf0\xdaQ6\x89\xacY,\x87G*\x88\xc8\xaap\xb7\x19%\xfa\x95\x822\xd2\xdbD?\x99bc\x99\xa3U\x1d\xe1h\x97\x94\xd0\xd7Zm\xe5\xe2\xfcX\x13)tC\xa1\xd0-\xb0\x1d\xb5\xf4\xda\x7fWV\xfc\x16\xb8C\xf7\xc1\xcc\x15\xa5S2\xa1\x91\x93\xc2\xb79\xd3C\xbb\xbe\xd9\xbe/\xaeq\xcdK|\x8c9\xddz[D\xfa$\x19\x1b\xab\xb0\xe0O\x17\x8e\xcd\xea\x83k\x917\x9f)\xe9_4\xec\xef3\xbc\xb7X\x95\x18\x1a\x0c\x89\xae\xf906\x12\xa8\xdd\x91\xe3\x14\x9b?\xe2KY\x87^\xf9\xff\x8an\xd8\xab\xd1F\x1e\xc8\xd0\x15<\xcb\x1e\xc6I\xbdU\x10qU\xff\x90o\xdc.tM}\x04[CF\x1c\xcb\xbf\xf7\x8eg^2\xd5\x90\xbdy66\'\rD\xed\xc2\xc1\x04\x07lZZ\xfd\xc4\xae++\x8a\xb6\xeax\xb7\xb83\xdc\xf1\xbb\x06\\7\xf27\xbf\x1e\xd7\x03\xf8`\xb5\x1fE\xbe\x0e(\xc1\xac)\x948\x88\xab=.r\xcb\x86\x0e\x95\x17\xa9\xdf;Z}\xf3\xec\xb7\x97\xe3{\xeb\xf9]\xa7\xa8\xb93\xfa\xa4\xd2&g\x92\x97\xb5\xfb\x95\x19\x03\xb7n\xc8(\x93\x0e\xbc\xcb\xa2\xcd\xa7\xca\xfbTmm\xeb\x07\xa4\xdd\x14\xc6\x805v\x9aCZ\xa8\xde\xd0\x94y\xab\xad\x9d\xc2\xa7\xdc8\xf2|\x14\xad\\\xb0\xdf~.\n\xa9v(\xb7\xafL\'8\x9b/J\xed\x19 \x86\x9e\xcb\xc0A\x84\x04w\x83\xcd\xfc:N;\x07\xa0\x9f\xf3)\xf6\xea\xc3\xaa\x9ah\xf7S\xf8$x\x03\xac=\xd3"\xd3\x82\xa6\x10}\xd3}\xbeh(o\xdb\x07\xde4\xbb[{\x81W\xb7\xe2\'\x89\xdfI`\x07.!\x90\x8c\x1c\xea2\xa5\xef\xb2\xb9)\x99\xb0hz[\x9eB^6)\xd7\x13\xf2\x93c\xb7\x7f\x18\xcb\x9b\xf0\xba\x86\xa6+\x8a\xc7\xdb\x8f8,\x04\xa2\x10T\x1f\xd5\xf8v\xbe\xd0\x86\r\x8d\x1e\xfa\n8\xa0\xe1\xd0F\xa2V\xc4\x88H\x15\x0b\t`\xae\x0c21L\x1a\x1c\x87!\x00\xa1\xf9\x02\xe1\xf1\xad\xb9\xdd\x1d\x02\x05\x89lf\x01\x88\x99Pb\x11\x8e]\xc9\x96\x00\xea\x17o\x12!l\xce\x86\x06|lv\x8f\xa8J\x89\xd7\x90\xbd\x8f\xc1N\xdc\x14\xb4t[8`_\xfb\xb0\xbfj\x9d\x06\x1c\x04fi]\x82\xb8v\xec\xdd_\xfc7\xfaBr\n\x1a\x96\xd7\x00\x97\x16\r\xdc\xbb\xe2.\xcd!\t\x8e?\x8e\x13\xd0\xebX\xea0\xbc\x8c\x84\x96\xdad9\xfc\x8d\xd1\xa4\x7f\xa0X2\x9e8W\xe5\x14\x8cn\x87\x90\xfflz\xd8i\x0f{e\xd9\xd3\x15\xcf\xd0}A,\xb8\x0e9J\xb5"\xf1\'\x10\x9cAU\xd6\xf7\xe1w\x9d_\xe5\xffOxQ\x0e6\x97c}\x9e\x02e.\xe8\xeb\x89\xac/\x1a\xe5x6\x013,\xa40\x1cd\x0b\x94\xd5\xc4\xa5\xf6\x8cE\x92B5O\xdc\xd6\xe2d\xe0\x88\x86"\xe1^\x96\x94K\xd8\xb1\xdc5\xb3\xe5a9jYr\x94SNM\xa7\xc7G\xc5\xbe\xe4J\xff\xb8\xa0""O|\x8b\xd48\xd6]\xfc0z\xfd\x95\x99r^E\x01\nc\xd7\xdd\xbd\xec\x84\xbb\x15\x18\x05\xd4\xe3oP7\xf1\x9f\xf6\x1dk\xd3\xb5\x08uT\xf5<\x03\r\nj\x0f{J\xffd\xd3\xab\x8f\xb0\xd5\xeaN\xe8\xb6)\x9eX\xd4\xbb\x04=\xef]\x12HA\xcc\xdc\x10\xe1\x80\xea:\xf9\xada\xb7y\x19\x06=t\xb8Je\xd1\x05\xf5\xfbO]\xd6g\x16\xe4+0\xc9\xdb\n\x8c\xfc\x9eH\xfb&V\x98\xabl\xe6\xcd\xc4\x86V\xae\xe2\x83\x04\xc4\x07\x8a\xe8\xb4\xe4\xf7]Ua\xb3K\x8c1, \xfa\xef\x91\x16,USPE\xa4"\x13\xdc\xde\xa6\xd9\x1ay\xc2\xdftP\xf1\x8bckB^*\x03\xb8\xf6g\x80\x8a\xa8\xb9\xf4V\xcb4\xec<a\x12\xc3\xc1C\xf7+\xa9\xde\xffN\x80\xa8h\x12v\xb5\xb4\x13\xca\xb2\x87j\x95f\xe0\xb6\xfd\x94\xe3\xfb\x81-W\xe8\x18e \x0b\xe4\x19\x12\xdd\xe6t\xd6\xf3\xf6_\xfe\xe7\xbe\xf5\x14*\x1c\xef\x9cbz\xc9\x03Z\xa9\x95@\xd2\x8f}\x90;C.6b\xe0RP\xf5\xd1Y\xf3&\x15\xd7\x1b\x0b\xd5\x85\xb0\xb0\xc3\xbb\x81n\x86\xd92:\xd8{&|x%*\x91[\x9a\xc3\xd9\x0fhF\xc3\xb2 \xb0rrc\x93\xf2\xac\xcd\xdc\x8a\xe2!m\xe7\xcc#FEW\xc3\xabE\'b\xa8\xf2\xb8\xf1"\xd9\x82Q-\xeb\x86 \'\x9bH\xef4\x00\xd4h\xa8\xb4\xfa\x1f7\xc0\xd0\xb3i:\xb4\xc1\x15\xfet@\xd3\x9e.\xe7\x99\x86_d\x00\t*\xa2\x816\x98\xfa\xb82\xc5\x1c\xc7\x1e~\xf3\x0e\xcf(c3\x08\xdf\xb7\xa1J\x1aL\xa7\xfb\xde\x0f\xdf8\x87\xd3:P\x11\x8b\xda\xa13\xb6T\xc2&2T2\x15\x9amb\t\x8frU$\xc9\xe7! \xdexbb\xd9\x9e\x8e\x1cCu\x83\xd67\x7f\x92\xca\xd4k\x12kM\x85#m\xc3\xadD\x05\xe6\xfb\xd5\x04J\xf4\x8c\x9c\x9cf11b\'\xa5\x11\xa8\xfaDY\xcc\x07\x01.\x82\xb9pz\x07\x11:\n\xfad4\x82\xee`\xfeO\x90\xd8k9\xcf\x90 ?\x89\xdd@\xbe\xef\x15\xcbM\xf6\x14!JkcM+\x1e_vQ\x04\x85_P\x9f\xa8+\xb9\xcc\xb8\xef\x85\xd4s\x14tj\xf3\x9bE\x19RyY\x1c\xc2SD\xffPG\xe9\x19\xdfI\xceh \xa1U\t\x96\xef}A \xe76K\xc3\x07\x96\x9b\xe5\xeb\x9f\xf7\x92\xbd!\xf4$\xb9.\x91\x03\xaf\xe3\xc2^\xbe]\xa3\xabx\x12\xdb\xce\x89s\x08\xa1f/\x9bq\x0eV\x9d9\x99x,\x8e\xdc\x93\x02_\x14P\xd7AI\xfe\x9b\x99\xeco\x08x\x16]\x90\xd4\x82\xc4d\x88\x14\xbb\xd3\x9c\x93\xb03\x19\xbe\x00A\x04\x07;\xe9\xb4S\xe7\xe9\x1boA\x1d\xe0&yB\xe4A)Q\xc825\xa9\x8a\xa3\xb3\xc2kD\xfe\xb0gf\xe5Mi\x15\xabm\xd6\x91U\x02=a\x91\xdd!t\x83[\x8a\x9a5\xc7\x8c\x98\x93\x99\x98\xb3C\x0cN.\x13\x84\xb2\x88\x87w\xd06\xba\xcf\xe7\\)f\xf9\x16\xf9Xq\x13^\xbc\xf2\xedf\x1b\xb2K\xa72\xafq\xe8n\x01`\xdb(\xaah3\xd1\x92\xd0\xfbd\xa9=\xe2\x12I\x9c\xe7X\xbd\x8e\x83F\xe1E\x85\x13+Cc\n0m\x8a#\xf0\xecN\x17A\xcawE-\xc3wb\xfeZ\xd6\xc6\xb5\xe76\xc8\xad\xf7\xda\x12X\x85a\xb9\xc2\x91sA\xb7\xbf\xab\xfa\xb2S\xec\x02\x08\xfe\x06\x1f\x9d\xbb\xf8@V\xeb\xbb3\x8e\x9c\xb9\xe1\x83M\xb5\ti.\xcfi\xe3\xc7\xb1S]h\xf3I\xfag\xb0b\x9a\x9d\x80[j\xaeO\xd03\xba\xa0\x0c\r\x1b\xea4\xf5\x8e\xad\x0c4E\xfe\xab\x03J\x803v\xe0i\xab-\x987%\xf7_|\xd8"\xc9\xdd\xf1\x85\x01\xf94\xfd\x9e\xd3\x1dR\xd2\x8e\xa52;\xa7\x9bMR\xc7\xb0\x15\x05\xc9C\xd4Y\xf9 y#\xa2\xd7\xaa> \xa3\xd6JrA\xff\xa4w)\x1eq\x8e\xa1ZJ\xe0HS\xfbDw\r\x82\xa5\xff\xd7\xec\x90\xd7\x14\x88\x9d\xc5[\xb2\x8dW\x8f]\xf0\xe9\xa9\xdf%z\x90\xea\xb9\xdd*\x7f\xf0\x03\xa5\x83\x0e\x86\xbf\x96H\x08\x9fgY-\xf4q\xd2\xe6=\xc4\xf7?\xba\xb3\x17\xfc\xde\xaa\x0c$\xcbB,\xe9=\xe6\xca\xc0\xab\xa3x\xda\x9a\xab\x1dC\x15\xde\x1d\xb8\xdc\xb9.J\x12.\x02\xc3\x03\xd7\x12\xccZjN\x9a\x81V\x9d\x9c\x0e\xbb\x99\x81\x1a\xde\x9a\x10\x99\x02j\n\x1e^M`B~}\x00,\xc5\x12@\xce\xbfL\x96\xf2\x1c\xb4\xda!\xdc5h\xff\xb3\xdc\xb2\x1f\xca\xcc?\xa0*\xd2W\xbe\xe9R\xf6C!\xe3\t{d\xc4\x89\x1b\xb4\x88\xe8[\x83\xd2D\x94bx!\xbb\x8fI\xa1\xa3\xe6UQ\x1ex\x9dD\xf6\x7f9\xa8\xac\xea\x80\x8c\xfd\xc2\xc6m\x11x\xdeM\x07\x01\xda4D\xc5\xceK\xb6A#\xb7\xe3\xe3\xd7\xcf[\x15k\x86t\xc0\x7f\x98\x17\xb2\xab\x00\xc4\x13UD\xe1\xda\x86\xd1\xcdd\xd2\x8b\x11\xd5\x13On\xef\xffp pR\x0c\xf2\xed\xc9\xde0;\xdc\xf4\xc1\xc8/U+JS\x8f#N\xe5\x83\xcf\xf5W\x0f\xa2d\xfa\x04\x08h\x057)\x83\xa7WgJ\x99k\x17\xfaUs~\xe2\xd5\xdb\xc3z\xef8\x86O\xa2\xc5\xbb\x91\xd5\xe4\xaf\xcb\xb2\x0c\xb8\x16\xa1\xb8\xd0~q\xb0^f\xe5\xbd\xb7\x81M\x05e\xdc\xf9\x1f\x0b\xb3\xcc8.\x9a\xb0\x8f\xc5\x8d\x9f{\xca\xc0\xb4\xcf\xea\x1c\xa9\xd4\x7f\x85\xf9lL\xf1\x90Y\xdfN\xa9\xbc\xa6\x9e\x85\xcc\xab\x9a\ng\x00\x19\x13\x00\x82[\xdb\x15\x13\xf6bJf\xcc!\xa2\xea\xf1Y\xcd\x99\x02\xc4\xb1\x1dV\x8d\xd9\x96%\xa4_j\xf6\xf6\x05\xf4A\xe11JY\x16\x0e\xf0\xb8\xfb\x19i`\xfb\xc2\x1b\x96!Q[\x12"y\x10\x8d\x9aj\x01\xed\x8f\xe0\xa2\x85I\xf9\xbd\x1d\xba\xeagn\xc6o\xdd\x81\xcc3H\x1d\xc7\x8a\xbc\xc1\xe9C\xe6\x0ew=\x8e\xae\xb5\x81\xa9\x84\x1d\xe9i!\xf8\xd2)m\xd7\xec\xfc\xbc\xad\xe2\xf2Y6\xc1h?l\xdf&\x198\x98\xdb\xeb\x97\x8e\x84\x86\xb3\x1a\x91&y\xd9\xcc\xb0\x19\xda\xb5\xb9w\xc7\x9b\\\x03]\xa3zD\x93\xafu\x8a\xac1^+\x9b\xcf*\x07\x95\xc0\x02\xff\x96\xc5]\xb7a\xb8\x15_\xe9^\xd5\xfd\xee\x17\xb1\xba\xc2\x0eYs\x04\rp>\xcb\x15\xea\x85(N\xc8\x0bh\xd2\xef\x9f\xef\xf0\xe1\xc4\x84rC\x0c+\xc2\xc8VV\xf4m\x11\xd5\n\xa8\xbc\x92Sj/\xdc\x8a\x07m\xca\xa8\xb2k\xd7\x07@\xcf\r\xa1=\x87a\n\xf6ZF\xfc\x7fw\t[\xa6\x18\x8f\xea\xbf\xaf\x7f\xc6J\xd4i\xdeT\x1f\xe3\x95\x0fq\xdcb\xd3S\xce\x152\xde\x9e9 B\xd6\xe8\n\xc1R\xf2\'Ra\x0e\x1d\xfd%\xc4\xba\x07\xa3\x19\x8d\xb3\xbaN@0\x93\x9fg\xb8\x9c\x89\xc0\n\x03\x9c\xc4\x0f~\xe9\xbd$\xe1=OCDl\x0f\x92\x9a\x15\x7f\xbf\x04\x93\x85\xd1\xf0\x9ac`\xd0\xd3\xd7^-\x82l2\xa5\xfc\x94\xd0\xa6\x03\x1e\x9f\xd0\x0c\xf4\x1b\xea^H\x7f\xbb)\x11\x13\xb4\xe6\xeb\x98\xb1\x94U\xd1P\xb95)S\xf0\xc0\x9c\xa8;\xd8\x0f\xbbG;\xffR\x88p\x95o\xe2K\x1b\xcag\xe8CNH\xc1#\xdc\xb9\xd2i\x0f\xed\xc7\xa8V\xca\r5|\xff\xca;w+"\xff\x86\xa0\x19\x17$\xb6~\x0e\x8b\x9d\xd0x\xfd1d8Gtf\xfeBQ\r(\x1d\x9b \xc3\x82\x8ft\xa3\x11\xf5\x8a/\xbb\xdb\xc4\xf5\xf5\xf2\x07\x869.\xfc\x88[P\x0ez\xfd\xda\x9c\xf1U\xfa\xbaz/\xeba\xf7\x86\xf3\xf2`\xb7\xbfKh[(\xc7\xc37\x13\xd4\xf1\xa0\x0c\x98\xe5y&\xa3\x1d\xd0\x01\x8a:m\x87\x1f\xee\xdaa\x97\x11\t\xff+\xd1\xd3S\xdf&\xa4v\\\xb2F\x04%\xf0 >X\xbew\xec\x98\'\xa3.O\x05\xfc\x16y\x02\xfcH&\x99\xa48+\x16\x04\xadA\x10\xfc\x91\xba\x99n\x1e\x08\x8e8\x8b*k\x00H\t\x89A\x8c\xc5\xe8x\xd3.\x9d"2\xdbF]\x95\x8c9U\x1bN\xd76\xc4Z=\x7fG\xaa\xbd\xb0L`\xa4\xac\xd4\x1dX\x90\x8d\xb6\x9f*s\xce\xad\xa7c\x15\x1f\x18\x14,\x14\xfa<\\A\xab\xf7I\xaemb-\xb7B\xd0\xb8\xff\xbf\xc7\x19_\xaf\x7f\xd7Rn\xa5\xcd\x1f8\xe1\x85V\x84kA\xefl\xe8[d\x97\xee\xb1\xdf\x9d\xcd\x13b\xdb\xab\x8eJ\xe0Ip\xf0M\x1f>C\xe5\xc7\t\xd1\x164`\xdc\x8c\xf3\xdb]p\x1a\xddL\x10AlH\xbf\xc2\xa5\xbc\xa5\x9e\xdb\x12\xe6 jDL\xf3c\x16\xfczvS\x84\x00\x07\x89\x7f~\x84cH"J\x8e\x15\xde+\x92\xcf\xf5\xf2\xecp!b\x92U\xbf\xa3\xa0E\xb0\x82CL\x96=Q\xd4V <-\xba\xaa\xab\xfa\xa98x\x81.\x95\xf56\xdb9\xfbM+\xc0U\xaf\x12\x9b\xd1u\xd8\x9d\xc6\xcfj\xbc;I\xa6\xeb\x82{\xd6j\xe5\x9cI\x1aXzH\xb9\xf9Rr6 W\x0e\xebSkz\xa1\x91\xb9\xd4\xda\x08>\x9bP5\x16bQ\xc1DD{(\xfa@,\x81<\xd3\xbe-~a\x0f\xbd\xc1\x1f\x9e\xfas{\xdaz\x9e\x16o\xde#\xd09\x05ToAn5\x04)\xb6\xc07}#{5\xde\xaf\xfbs\x91\xe77\x9a\xbbS\xf8h(\x8a\xffA\xc5\xc4\xf2!\xa7\xfa\xcb\xff\x02+\xb4cT\xf0\xd5\x9c\xcc\xe5.AH\x98\x95\xb6A\xbf?g\xfe\xea\xc4E\xd8\xa4\x8e\x9f\x1c3\xcdA\r\xe5\xcd\x01\nx\xd6\x87\x89{7\x1aR*\xe9\xb4\\\x80y\xab\x82,j\x91\x1c\xfa \xda\x88\'\xb5?\xf8\xa4\x1cd\x827\xba\x19\xa8o\xb6\x0e\xec\xdf)\x95\x9d|\x16\xba7\xaf\x1bv\x96\x8apg\xd3\xfc\xd2\x9e\xdd1D\xef\x14\xfb\xed\xee\xa8yR\xbb$\xdc\x0c\\0\xe0Y\x85\x08\xce[\xf7k\xc6lvA\xf9\x01\x12l\xc5\xb1\xe3\xb8Z\xbdQ\x1ed|A<Li\x02\xb3\xb4\xc5\xe1\x85\x00\xdb\x83\xcfHW\x18\x1c\x00\xf9\xe3\x1f\xa3\x8e\xb9\xdb:K\x8c\xda~\xfc\x1f\x13\xed)}\xfc}&\xa2\x1d\xf6\x95N\\\xf8\xdb/\x9fX\xd7\xe5b\x081\x82\x00\x1f6\x88T\xfa\xd6\xb7\xbf\x83\xf8\xdc\xb1\x06[\xc7\xeb\xe2=\xd8^@\xfe\xf8\x7f\x16l\x95\x17\xa2\r\xdf\xe1\x7fC\xd0\x9f\xbfz\xf7\x8cb\xc1i\xf3}\xb4Y(g\xd4\x88\rMN\xd2\xbbI\x04\x0cv17\xee\x88\n\x1c\x97\x86\xf3\x9c8\xc1\x08\xb4\xf4\xf9\xec\x00E\xea\'`\xc4\xac\xb3#\x8fP:\x17JM\xd7K\xe8Y\x85\x07Wn\xd73\xc6\xf1\xdf\x1d\xeb\x91<7\xffy\xc9\xb5\xaa3\xb0\x84\x04^\x14P-\xc6^\xbf\xc8 Sb\xc9x\xc9?\x0cYM\xe9\x04\xa6V\x9b\xae\x85R\xbc\x1a\x14S]\xd6\xeavUu\xb9>\x85K\xf2\x05\xbfjS\xde}S,Y\n\xf2\xd5\x05}\xd8\xc3\x90v\xe6\x19\xbf\xed \x82\xb7\x88\xbf\x94z\xd6\xb5t\xa4\xcc\x17\x02;\xadH\xd6\x05L|}\xa2\xd3\x7f\x1b^#6\x82\xb8\xb8gG\x9d\x16\xdb\xae\x80@t\xa6S\xc0\x1dw8\xc7Y\xb2\x16Ix\x00~\x0b:.=+\x95\x02\xb3\xda\x1d},2U\xc4\xf8;\xe0\x07S\xf0\xe4\xd2\xd6\x87Gh@V]\x0e\x1f\x8b^\xd6\xabk\xbdRp\xaf\x11M\xa4\x15\x9bP\x96\x95\x14\xba\xceiq\x0b\xfc^\x19\xb58M\xb6\xb9$)\xbf\xba\xd3D\xab\xf8\xecu\xfa\\\x87Q\x02.j\xc6\xde\x1b\x034\xec\xdbo\x89\xa6\xb0M\xba\x15\x94z\x119\xc5\x7f\xa2\x01\x11\xc3\x08\xd8\xbewj_\xc3\xe21\x84N\xee1\x99\xac\x0c\\ ~,F\x97f\xcc\xffJ\x00\x92\xb4\xa9\x98\xde\x91\x8d80\x9fpD\xe1\x93\x13\xecS\x1a\xd7\x83\xbaY\xc8\'\x8e\xa7?\x91P\xe8i\xf07\xa6\x11Xy\xdeke\x07\x12:W\xd2\x10\xb30D\xaf\x88J\xf7\xbbu\x1e\xf3\x0f\x8c\x07\x1c\xbd\rW\xbf\xbf4\x05U\xe8\xe2\xe4\x82\xfc#\xb3\xcd}\xe8T)\xd8\xd3\xd0\x15_b\xba*\xa3\x00?\xc6\x83b\x04\xc2I\xf2?\xdb6\xc9\xa8\xb6\xf6\xb08\x82D\x92,A\xe0\xba\x04\xa7\t\xa6\x0f\x93\x87"8A~\x8e\xe4\x87\xc6[R\xd5<v#\xfe\xb0\x91\x82\x87i\xda\xe7\xd9]\xf4\x02\x1b\xcb\xb8\xb3\'\xaaz\xf1\x96\xb2G\x8e\xf5L9\x83\x10\xc6\xfc\x00\x1a\xf7\xe6\xd6*\x19!\x94\x11ka\xd7\xa2\x13\xc0\xef\xd8\xe9z\'<_\x0e>#\xe8l\xfd\x9af\xf3v8_\x87\xf6\x1c\x9e\xa2zdH\x8a\x95\xc1\xd0\xfb;!\x97{\x10\xbd\x99q\xa0\x111,\xed8z?\xfe\x1e\xa9\x1a\xb3\xe5\x96F\x90\xc6\x17#\xe3\xac\x19rw\x0fz\xdc\x93d57\xb0x\x9e \xfbv\x08\x00\xa4\xf8\xf3\xd1\x1c6\xabc\xa6\x83fd(\x06f\x9c\xd1\x19\x9b|\x9e\xc6M(h\xd7\xf2\x99o\xfb\x13\x1f\t\x8a\xdd\xd45\x1dr\xcdL\x92q\x0c\x86\x15\xf7\xde\xebv\x90R\xd7\x07\xaa\x8f\x03G\xc8\xc1\xf1\xc1T\xce/\xfb\xb2\x8eZ\xcbo\xd8\x17\x13\xe4f\x89$\xdf\x7f\xa3\xb0b\xca\xbb\x0f\xe2\xcc\xa3\xab8\xeacl\x9cI\x8bzL\x03\xad\xb6\x0c\x1an\x80\xcd\xa0\x0b\xf4\xd3\x97\x04\xa4\x0f\xa9?\xfb-\xf4p\xb5^\xd2\xd3\xe0\x16\xba\x88\x88\x149\n\x89\xce\x9f\xa6\x13\xef\x91x|2z\x1e\x99.C\x8am\x9e\xb7\xa9\x97_\xa2\x14\xb4*q\x8e\x14r{\xe1\x1c!u\xf1~\xa0\xcb\xa4\xc6\n\xa7\x8b,\xc4m\x7f\xda\x96\x83\xecSj\xef\xd7\xa3\x9ej\x91\xa3\xb6\x0foN5\x89\x08\xe2\xb8\xbf43\xd5\xe3\x82\x98\x92q\x06\x91\x9dy\xd0\x90;\xb5\x87\x9f\xd5\'@\xa5\x84re\xe3\xa1\xdb\x14\x98\x9a\xc8hxD\xce\xae/K\' 0\xe8y\xb0\xfbs\x00\xfd\xabt:\x86s\x9e\x9e\xe5{\xb8-\xd0\xa0QF\x04\x87\x9f\x9d\xf8D\xaai]\xf3\xaa\x1f\xbb0_*<\x0c|3e?\xf6{\x80\xf2\x8f #^\x194\xa6\r\xd3<\xfb\xeb\x0b\x88-v\xda\xbb\x16\xae]\xaf\x8d\xe0\xbd\xaf\x9fXA\xb6;,\xae7\x97\x8f\x96\xf0@\xfd\xd4\x04\xc5/\xb0\n\xe3\xbd\xfc\x92\x8b~^\xc4\x18"\'\x00\x1c(\xa8\xc2\x97\x80\x85\xe9\'\xd7\x89\xe3=*?\xa5\x98\x84\xf3T\xb5\x02D\xe5\x8ek\xca!,p=\x83\xb4$n\x07\xed\x01\x86R\' \xbazB\xfb\x85=!PV-;\xf2x\tvA\xa0\xa0\x1b\\\x11\xe4.~\xba\xcep\xe6\xd3\x81o9\xd8(*-\xd7\x03\xe9\xd2\xe87\xcc\x93K\xbb\xb9\x8c\xfa\x13\xba<O1e\\H\xcf\x13@M\x81S\x97NU_\xbe\x00=\xa9\t~L\xd0m\x90\xd7[Fw\x9f\xb4{K\x19{\xf38\xae\xf25}\xda\xd0\xdeG\x9dAu\x1cZF\x1e\xf4\rY\xb3\xfc\xfd\xd6\x0c\x84\xe4\xc8\x0eD\xb7\n\xf0oye>C\xba\x8a\xab|\xfe\xa2s@S\xe36k\x1d\x1b@\x18\xabg\x14\xa1\x9e\xe8\xaf\x8d\x9ci\xc5\xf9/\xef3c\xf0\\.[n\x87j\x95:\xfb\xd6\xb1\xbd:\xad\x8f\xc6<\x1a\xb0\xb0\xe5b\x08\xf8\xff\xd8\xb6noN\x1d&\xdd-\xdc}\x8f\x0c\xb5g\xd9\xec\x0f\x07\x81\x993\xf2\r\xd4T\x1d\xb3\x08\x08\x8dY\x8f\xd8sef\xa1G\x99(\x05\xff^{U\xd2\x9d\x7f\x08\xbf&\xa53\x934w\xfa\xcb\x04&\xa6\x08\x87ot\xc8\x81\x9b,\x91\xbd~OR\x9c\xed\x8c:\xcf\xb5\xe2i\xb4\n\xc9/\x80\xbe\xf2\xb9\xa8\xdb2=^*\xcd\x15\x8cg\x1f\xe2\x1f#.\x85\xf4\x94\xcc\xa8&\xb6\x83\xb9\xb4%-\xd0i^Q\xb2\x02\x99?~\x9bfV\xe0}\xf8\x1er/\x05\xec\x05\x19}\xfc^N\x90O\xfe\xaa\xed\x97\xc9\x8e\x9a\xf5-k\x9d\x11\xc9\x1c\x9e\xa5\xbc\x14\xe4Tfg\x9f\xaa\x18\x02\x1b\x9e x\xc9\xcdt8@\xc2\xe705o\x9eC\xbf\x821\xc6\xeb\xeb\x8d\x14\x83Lp\x1c\x07\xde\xd1\x16\xd3\x8f\xfa\xccQ\x8c\xde\xa1\x06\x10\x99\x03J\xc4\xa1v\xc2\xed.\x10K\xd8\xa7\xef\x7f\x1e\x82?j\x96\xad]W:\xda\xd4\x9f|\x91\xec\xf6u\xbb\xeb|\xc3\x7f\x92`Z\xd9\xf9\x88\x03\x14\xb3\xda\xe3\xfe/\xdc\xfe\xf7\xd5B\xc9\x872\r\xd2\x93\x92\xa5\xad:\xd5\x11\xa8|\x18\xc7o\x90\xbe\x94\x1d%\xdf\xd8\xf0}\xc6\x8f\xe8a>5i\x1c\xf2\xe7\xae\xb0\xedM:{@\xb0\x81\xa6\x844\xc0\xf7\x9e\xa1\xd5M\x13G\xc0\xbd\x87K\'\xdb\x88\xce\xc5AV,U\n^\x18\x80\xbfBV0\x92\xa8\xfb\xaa\x9e\xe5z\x11.\x89\xc3\xbb\x80\x17\x08g\xc9^\xa3+\xb4@\xb6\xc2\x18d\xd9\xaa\x03\x02\x07\x89\xac\x1f\xc4\xd3\x05j\xa6z>,\xfc\xc4\xcc\xa7\xf3.\xb0\x98d\x13\xc9\x9eY\x1fB\xf6\xfc\xe0w-\xed&\xc5\xec4\xa9\xa4\x93\xecB\xcf\x14\xec\x8b\x0c\xae\xd3:\x14\x15\xa7M\x0f\xf1\xbe`C\xd6h<\x1b\xe00\x1d\x96o\xe7\x10"\x81\xe0\xf7\xd9\x9f\\\xcaF\x83\xa2\xcd;\xb6P\x81\xa3\x80\x99\xd4w\xb6\x0eS\xf0\x1c$\'i\xb0\x1d\x8c\x99l\x9c\x91;\xfem\xec\xc5|\xfe\x94\xd5t\xc6\xd3\xd3&\x11\xf6(\xc1\xb4\x00-\xb5\xe0\xf7\x13\xdd\xe7\xe4\xc2\xbd.\xf7|+(\xa6\xe1\xfe-@\x11k\xa2\xa3\x10\xb7\xac\xc5*\xe1\xdf\x13i\xc8pd&\xb1\xeeA\xaeF#\x80\xa7\xcb(s\\\x1c5J\x1f\x0b\xa9H\xfa\x17_6\x93\xe9\xa7@=\x1d26\xae\x9fx\x7f\xe5\xa8s\xef\xde\xf3\x06b\x97\'\x04#\xa4\x01\xb4\x1b\xe3YV\x9a.\xaa\x9e\xbfL\x93\x1b\x99\xe7\xf1\x18f}Fd\xeb\x12\xca\xa1\x1f\x1e($\xe67\x9e\x91{eV\x03\xcf-\x04!\xe4\xa0w\xec\xb5\xbcs\x13\x85\xb7\x1f5\xb1\x9fO J$Z\xcc\xd0\x1b\xb5\xbc\x7f\xc8\xc0\x1b\x8f\xe3\xa4\x85\xe1\x1c\'\x94\x12\xd6yF\xef\x1eA\x8a\xa7\xa4b\xeb+\xa2\x9e\xc1\xc16\x14\x11%\xcdO~g\x13L@\x99\x028\xbb$\xe2J}A"\xecj\x93\x97H\x9d\x80$\xea\xa1\xcd\xe1dG\xedV\xcaf&}\xf2RW@\xdc\xd0\x04\xb1\xea8\xab\x98\xd1v\xf8\x182\x162\xe2\x9a_\x90\xea\xeefr)\xbd.C\x82Y\xb4:S\'Xj\xe5\xbf\x01\xd2\xb0G\xf7\xef\x19\x1a\xd0\xa2\xd6\x96P\xb5$Q\xb3\xf1(\xf9\xd7\x8f:\xfb<f\x9a\x1eb\xa6\xb9\xfcq\xd0T#\xa1\x1f\x8dY_\x18\xcb\xfc)ZT\x03\x11\xcb=\x87\xa8c\x8faM`"\x9f"\x05{WvB\x08\xc6\xceX=\xcd9\x97\xcdX/d;\xedHsp\xff\rut7\x886\x8a\xaa!\x15lIW\xed\x16\x9a\xde\x83\xfc\x9d\xf7\x17&s\xdf\x9e\x01\x9c\x04@\t\xf0_:cl\x1dp\xce\xd8\xd7\xc3d\xa4\x12\x99\x0e\xcaj\xdaK\xb4\xf65\x93\xcf[m\xc9||\xd6D\xf6\xfa\x8c\x9d\xe1g\xc9v\xe8\xb6\x8b\xc4\xee\xacMg\xc5\xc5\xb8wy.\xef)$\xc1)\x9a\xdd\xab\x99\x94\xc4\xf4\xf4\r;3\xd5\xab\xb2Cc\xfb[\xb7\x92\xf0\xe2l\x8b\x90\xc3\x90\xc8\xbc\x00\xd1b\xd2\xc6\xbc=u\xf04g\x9d\x93\xcd\xd7\xad\x8c\x92\xaake`\xcc\xf1{\x8c\x8fV\xb8CD\xd9\xff\xe5\x07\x8c\xd3\xd61\x84\xab\xee\xc3\xc4p\x8aW\xf4\\\x98\xcd\xd8\xf7\r\x85}\xe0\xfd\x13\x06\xc6S]\xfd\xc5A\xe4h\xbf\xcfw\xc8\x80\x10\x17g\xb6\xcbE\xad\xb0j\xf9B\x06\x03K\xaa\'\x05\xf9R\x93\xa8\xe7pX\x0eKi\xc0?O\xca\x7f\xc6\xc7\xe5\xd5\xc1=\x04a\xbd\x9el\xb0\xb5X/p\xd7\xa7\xe6\x92s\xb2yd\xde\x7f\x1d\xd2\xa8y|\x10\xccaD\x08\x96\xd7\x08\xcc#\xb9\xfc\xddO\x00\xb3\xf5\xa0oL92\xe6\x8f\xf60\xe3\x81\xee8#\xfb\xfd-\xbeD4\x04\x01\xe84\x1eH\x91s\xd5\x84\xe7\x04\xe0\xa4\xdaF\x99`\x03S\x07\xc5\xdf\xe4\xaf7\xb2\xcc\xc6\xe3\xd5\x8e-%\x11\xd8`H\xa9\xcf\xf4\x96\x18.\x1c\xe4\xcf\xf5i\xffP=\x9bo\xcb$",\x04\xff\xc8\xea\xbb\'\xab}%\x80\x9aI}\xdc]\xf0\xf7\xaez\xb4U\x0e\xe7\xd3O\xe1`\xbe\xc6\xf8g\x19\xf2F\xd3j\xf3\x99\x8ak\x14O[\xbeXM0\xa0@)\xd7\xf4\xeb\xdf1!\xd1\x83D\xc0\xfcjQ\xf4\x98\x95Z/\x9e\x85cC\xbb\xec\x90\xbcF|\xd0\xd5\xd2\xb4\xe6\xa9\x089\xf7Y\x0f\x1a\x87\xdb\xee\xd7\x17\xd2S\x88\xf66k\xb7\xae\xc43\x87(n-\x909\x13(_\x15X\xf9\xe8\x92bY\x18$-\x8eZJm\xca7Io\xe66\xac\'{E\xe7\xc8\xde\xca\x11\xbdL\xce]\r\xc0\xd1qu\xd3.\xa3n\xbf\xfa\tXK\xef\xfa\x03\x8e\xa3I\x1c\xd0y\xdd1IS\xb5\x02X\x11t\xadqO\x125\x8b\xceK\xce1P\xf1t\x1c\x04\x01G\xd4\xd9%\x1b\xac\x98E\x19\x93\x96S`\xbb\xe3\x90\xb7\xf4\x13\x81!dC\xa0\x80D\xa2O\xfa\xfcK\xceT\x11\x93\xab\xc6n\x82\x84\xf9py\r\xd2\xbf{\x1a1F\xa1\xa42l\xd0}\xa4\xe7-9\x05\x0eF9e))\x13[\xdaV\x9f:k\xc3\x86\xab\x91\x8b3\x8d[h\xd2@Mm\x14\x16\x1ar\x1d\xdcG\xe5S\xab\x19\xfdT~6h\xe5\xa0t\x01\xc0H\x16P\x07O;\xca\xd1\xe7^k\xfd1\xa7LR#\xb3\xefh\r\x87>\x08\x93\'\x99\xda\x9b,\xba?\x8b~\xe6\xa3\x13a\x90yj+`\xef\xb2\x96\xd0\x03\x04\xe0a\x01\xf7\xc1\xee\xf2}Y\xfc7\xdd7\x9e\xad\x0f\r\x9f\xaauG\x95\x04_\x9f\xe0\xb7\xd0\xa8w \xb2\xf1B\xf78\xa1\xe3\xa3\x84I\x93\xcd\x1bD \xc6\x96\xd5\x88?\xe4G/Bl\xfak\xffZ\x95\xbbi\x94\x82\xb7\xa9\x8cF\x95\xacf\x07-\x9c\x8d\x05~\xa6\xaf\x8e0\x80\x18\xf3\xba\x04\xf187.\x8aF\xf5\xbf\xfb\xde\x93K\x97\xe8E\x97\x06\x0e\x13\x94RFp"@\xe3\xcb6q>"\xecTs\xff\x0b\x96\x9b\xfa\x03\xc5\xd4\x9ay\x1a\xaa\x15\xf3\x86\x93c9\x82\xcd\xb6\xb8\xb8\x82\xa1\x8d\xb3+\xb8\xbd\xc0B\xe1\xbd\xb0U\x0f@9 \xef\xb0QBA\x04\xa8\xdd\xc6\xcf\xab\xd2B\x80\xeb\x8b\xde\x11\xcd\xc1\xe0\xe9\xf1b\xd54\x8d+\xad\x06]\x18^dYe\x17\xa7\xee\x01\x97x\xc6\xdc~\x7f\xdb~\x80\x8a\x1cdS\xb1\xe8-\x8d\xe9/:J\xf1\xaa\x0b\x9b\x92\x1b{\tG\xc19\xeb_\xb6\x18\xd4\x98y\x11o/u\x1c9\x04\xe8\xb7\x96\xbe#P\x07P\x92B5\xcbt\x9d\xc8\x01\x19\xa3\xfd&EV\xe68\xd8>\xf6W\xfc\x18\x01\xa9@=|\xd52#\x81\x90U\x96\xf7}\xe9d\x9d\xcb\x9d\x19\xc4l,_\xdc\xbb\xee\xe2\xd2\xc9\xcd\x90\xcf\x1b9\x06\x88\x9b\xdb^\xef\xeb\xfd=\xc1\xd4\x9b\x9c\x91\xb4o\xf7\x1e\x99\xbbL\xe9\xf6mM\xf9\x85\xa7\xfa\xbe\xf6yZ\x97\x14\x8bL\\1H\xa8\xfbF\x19T\x80F\x81\xba\xa2=Z\x1c\xdb\xe80\xbdj\xf8u\x8c\r\x11UB\xcdN\xb9\xf1xh\xec\xa5\x80o[:\xe1\xd3\xdb\xe1\xcd*\xaf9G\xbd\xa8\x9f\x00 \x18\xe5\xb6\xc4\xb1[\x82\xbf`5\xe2#\xbd\xf5[o\xe7\x057^l\x82\x01\x8b\xe9\x10\x08B\x02E\xabG/.\\\xc5zl2MX\xf1D8\x14z\xe9T\x95\x8a\x0e\xb82=*\xcc\xbf:\xb0\tS\xb6\x80\xc3\xe0F\x1b\xc9\x89\xbeD\x18\xa5\x8b\x04\x8cK\xd7\x84&\xf9\x89\xfdMo\xcf\xa7V\xe3\xa7}\x00n\xda\xdc3\xdd\x0f\xdf\nC2\xde\xf3\x03\x93\xc4\x9e\x91\xb7\x08\x0ey`\x12\x062|\xca\xfb\x95\xe1\x11\x95,\xdf\xac\'\xe5t\xc1\x06\x9d\xb7\x06\xbf\xbe idn\xab^\x9b~\x9c\xb2*\xaax\x0cGr\xf4\x06\xb0\xaa\xd7\xb1$.\x91h\x89\x9cS\x01\xa0\x13\x16\xf2Hf2\x07\xe0\xd8\xb7\xd8s\xbc\x93\x03\xac\xaf.\xc6\x0b\x89\x9b\xdcd\xc3L\xcb\x1fb\x82\x85\rd\x96\xf7_\x17\x85p\x13\x936>X\xeb\xad\nH\xd7\xae\x9a\x19\xa1Z0\xc9\xa6\x03X]\xbb\x1aJV\xa2\xf1\xbb\xc5tHV\xbd7A\xab\xe5\xec\xa5\xa04\xfb\xb1\xc0\xaf\xa61\xde2I\x1b\xef\xcf\x85\xba\xbd>\x1b\xe9\xa8\x9bH\x05\x8b|\x1b\x1e\x17\xb5\x06C\xd7\xfcF\x98\x84C,3\x15\x83\xe7\x863h?f\x9e9\x06\xd0!\x8d\x80\xba\xc2\x1d\x08{\x83\xe8{\x11\xbe\xf1\x1e\x83\xb1\xfdFoh\xb5\x19#y\xfe\xc6P\xfb?\x7f9$\xc6ah\x91}>\x18Z\x95\xfb\xc9\x96VA\xe6\x1a\x10\x0b"\x04\x82\xd1c?\xfd\xa1\xcbN\xc0\xca\x98\xdd\xfe=-$"\xe4\xc1aSY>\xf0;Wu\x9e\x95|\xca\x11\xbe\x0b\x14\x8a\x81G\xfd\x12\x10\x98\xa6\xf5\xe7k7')
|
1
|
+
from . import bot
|
2
|
+
|
3
|
+
from telebot import types
|
4
|
+
from hiddifypanel.models import *
|
5
|
+
import datetime
|
6
|
+
from hiddifypanel.panel.database import db
|
7
|
+
|
8
|
+
@bot.message_handler(commands=['start'],func=lambda message: "admin" in message.text)
|
9
|
+
def send_welcome(message):
|
10
|
+
text = message.text
|
11
|
+
#print("dddd",text)
|
12
|
+
uuid = text.split()[1].split("_")[1] if len(text.split()) > 1 else None
|
13
|
+
if uuid:
|
14
|
+
if uuid==hconfig(ConfigEnum.admin_secret):
|
15
|
+
start_admin(message)
|
16
|
+
return
|
17
|
+
bot.reply_to(message, "error")
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
def start_admin(message):
|
23
|
+
|
24
|
+
bot.reply_to(message,"Welcome to admin bot. Choose your action",reply_markup=admin_keyboard_main())
|
25
|
+
|
26
|
+
def admin_hash():
|
27
|
+
return hash(hconfig(ConfigEnum.admin_secret))%100000
|
28
|
+
|
29
|
+
|
30
|
+
def admin_keyboard_main():
|
31
|
+
|
32
|
+
return types.InlineKeyboardMarkup(keyboard=[[
|
33
|
+
types.InlineKeyboardButton(
|
34
|
+
text="Create Package",
|
35
|
+
callback_data=f'{admin_hash()}create_package'
|
36
|
+
)
|
37
|
+
]
|
38
|
+
]
|
39
|
+
)
|
40
|
+
|
41
|
+
def admin_keyboard_gig(old_action):
|
42
|
+
def keyboard(gig):
|
43
|
+
return types.InlineKeyboardButton(
|
44
|
+
text=f"{gig} GB",
|
45
|
+
callback_data=f"{old_action} {gig}"
|
46
|
+
)
|
47
|
+
return types.InlineKeyboardMarkup(keyboard=[
|
48
|
+
[keyboard(i) for i in range(1,5)] ,
|
49
|
+
[keyboard(5*i) for i in range(1,5)],
|
50
|
+
[keyboard(50*i) for i in range(1,5)]
|
51
|
+
]
|
52
|
+
)
|
53
|
+
def admin_keyboard_days(old_action):
|
54
|
+
def keyboard(days):
|
55
|
+
return types.InlineKeyboardButton(
|
56
|
+
text=f"{days}",
|
57
|
+
callback_data=f"{old_action} {days}"
|
58
|
+
)
|
59
|
+
return types.InlineKeyboardMarkup(keyboard=[
|
60
|
+
[keyboard(i) for i in range(1,16,3)] ,
|
61
|
+
[keyboard(30*i) for i in range(1,5)]
|
62
|
+
]
|
63
|
+
)
|
64
|
+
def admin_keyboard_count(old_action):
|
65
|
+
def keyboard(count):
|
66
|
+
return types.InlineKeyboardButton(
|
67
|
+
text=f"{count}",
|
68
|
+
callback_data=f"{old_action} {count}"
|
69
|
+
)
|
70
|
+
return types.InlineKeyboardMarkup(keyboard=[
|
71
|
+
[keyboard(i) for i in range(1,5)] ,
|
72
|
+
[keyboard(i*5) for i in range(1,5)],
|
73
|
+
[keyboard(i*50) for i in range(1,5)]
|
74
|
+
]
|
75
|
+
)
|
76
|
+
@bot.callback_query_handler(func=lambda call: call.data.startswith(f'{admin_hash()}create_package'))
|
77
|
+
def create_package(call): # <- passes a CallbackQuery type object to your function
|
78
|
+
from . import Usage
|
79
|
+
try:
|
80
|
+
splt=call.data.split(" ")
|
81
|
+
if len(splt)==1:
|
82
|
+
new_text="package size? حجم بسته؟"
|
83
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_gig(call.data))
|
84
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
85
|
+
elif len(splt)==2:
|
86
|
+
new_text="package days? چند روز؟"
|
87
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_days(call.data))
|
88
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
89
|
+
elif len(splt)==3:
|
90
|
+
new_text="How many? چه تعداد؟"
|
91
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_count(call.data))
|
92
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
93
|
+
elif len(splt)==4:
|
94
|
+
gig=int(splt[1])
|
95
|
+
days=int(splt[2])
|
96
|
+
count=int(splt[3])
|
97
|
+
new_text="Wait... لطفا صبر کنید"
|
98
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=None)
|
99
|
+
domain=(ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first()
|
100
|
+
for i in range(1,count+1):
|
101
|
+
user=User(package_days=days,usage_limit_GB=gig,name=f"auto {i} {datetime.date.today()}")
|
102
|
+
db.session.add(user)
|
103
|
+
db.session.commit()
|
104
|
+
# bot.send_message(call.message.chat.id,f"Days: {days} Limit: {gig}GB #{i}\n\n https://{domain.domain}/{hconfig(ConfigEnum.proxy_path)}/{user.uuid}/",reply_markup=Usage.user_keyboard(user.uuid))
|
105
|
+
bot.send_message(call.message.chat.id,Usage.get_usage_msg(user.uuid),reply_markup=Usage.user_keyboard(user.uuid))
|
106
|
+
|
107
|
+
# db.session.commit()
|
108
|
+
new_text="Finished..."
|
109
|
+
bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
|
110
|
+
bot.answer_callback_query(call.id, text="Ok", show_alert=False,cache_time =1)
|
111
|
+
hiddify.quick_apply_users()
|
112
|
+
|
113
|
+
except Exception as e:
|
114
|
+
print (e)
|
115
|
+
# import traceback
|
116
|
+
# traceback.print_stack()
|
117
|
+
# new_text=f"Error {e}"
|
118
|
+
# bot.edit_message_text(new_text, call.message.chat.id, call.message.message_id,reply_markup=admin_keyboard_main())
|
119
|
+
# bot.answer_callback_query(call.id,cache_time =1)
|
120
|
+
|
4
121
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
122
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,125 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xfe\x13\x00\x00\x12\t\x04\x00\x07P\x85\x7f\xef.\\\x8e\x14\x10\xbb\xf3\xee>\x9ch\x00\x00\x00\x00\x00\x00\x00\x00(\xea\xc5J\xb9\xfb$\x92\x87\xe8\x90+h2\xdf\x1a\x1d\x1f\xd7\xd7\xb0\x8a\xcd\xeb\x93\x92\x00gx4\x91\xf3\xd0\xdc\xa9\xb9\x0e\x91\xb6\xfbAD\xc8Z\x91\xc1\xd5\x9b*\xd2\xddI\xf8,1\x86c\xdd\xb4o\x86;\xb3\x07c$\\\x0c\x06\xc4\xc3\x86s\xddd\xadmp\x98=\x05j\xcei\xfe\x0cMa\xf8\xcc\xc5\x195*\xd45\x1f\xe1\xa2.\x87\x98\x11\x99\x87\x8d|\xb2IZ\'p\x80`i\xcd\xces\xf6z\xf5\xfb\xc7\xa5\xfa\x7f"\xe7\xa0\x0f}\xe0I\xb1\xea\x13\xb2k\x17\x99\xd5:\x04\x93t\xc8\x83=\x9f,g\x17#\xd2\x8a\xa9\x83\x95\x14\xc9\xfa4\x04,[5\n\x88\xa6\xec\x8cC"\xa2)U\x00f\n\xd5\xc7s\xe6\xff.\xd8=\xc8x\xaa\xb4)\xfao\xaf\x9d\xce\xf1f\x0f\xdd\xe0j\xaa\xf2\xf1\xb3+\xf1\xb2\xb3\x9f\xd1\xaf#\xf4j\xb0\x9b\xf1\x87\x9db\x1d\xeb\r\xc8\x06LQic\xeb\x06\xffm\xa0\t\xd3RVFx\x94\xbd\x88\xf3\xd8\x83,\xed\xder\x98\xddsHp\xd0\x87Mf\xa6\x87""_\xeex\xd1K\x90J\xe7P\x83\x8e0\x1f\xa6\xdf\xdf\xa6\xbel\x83nc6\xba\x9c*\x15\xcccj\xbe\xd9\x8de\xbeT\x9dy\x07\x95\xf1\x8dG8Z;<h\x89\xafM\xdb\xaf\x84\xf7\x86Pqrn\xa5\xa44^\x8e\x07\xaf\xc4\x95jYl\xfc.z\x90\xf5\t\x8ep*\xd2e\xba]|\xfb\xad=H><\xf1\xfcY}\xdeH%T+\xbe\xb0\xca\r\xa6\xf2I\xaf\xe6Hp&\xeb\xc7S*\xb4=\x88\x19\xf56\xd3\x0e\x99\x1f/\xbaK+`9\xcb\x9fJ\xa0\xbb\x96\xcb\x90\xd8\x7f\x0c\xa2\t\xf2\x9e\xb6\xa4&\xd1\xd8\xaa\xd2\x9cbYo\xfb\xba+\n\x10\xde\x9e\xa1)\x8f?\x8dmj\x8d4\x98p`\xf71\xbcO0\x17|X\x00\xbb-\xde\xc6b)bS\x98Ip4a\xfb\xafT\xf2+\xb8\xd4$\xb7A\x83\xe2\x10\x80\x8d\xb85\x15\xbfD\x8aS\xaa\xd9]\x13\xe7\xcbG\xfd\x82\t\x18\xa4\xfe\xd3\r_\xee\xf0\xcfh\x18\xa3,\xb9\x06Y1\xf8b\x85?QC\xa5\x15\r\xafgd\xceI#O\x9a\x1e\xec\xdfL\xfe\xf9\xccu\x8a,OuDZ\xcc\xbd\x04\x1c\x89\xa7\x1e\x0co\xa8\xbf$\x94%\xf7\xfb\xfeX\xc9\xbf\x85V\x91!\xf9\xdbH\x90l\x8d\xee\xb1:\xae\x93\x10\xce\xc7~R]\xee\'\xf5\xdcXF\xdc:I\xcb\xbf\xf2e\xaf\x86\xa2\x0fD\xf4\x81\xf4\xcc{\x96i\xd5\xe4\xac\xbc\xbb{0u\x15\x84\x86\xd44\xa0\xe6u\xf6G\x80\x98\xa9!\x06\x87\xb9\xa7.K`\xad\x9c\xefV\xb6\xeb\xcbUG\x9e\xd7\xfb\xdfHf\xbfw\xc3\xc7\xe6\xd5~\x8c\x82\x81$\xd1\xf76\xc8\xbbQ\x92b\xf6\x81\xef1C`\x10*\xb9A]\xb4\xdf\x86K\xf8\xb5uy\xe2c\x01\\lc\xd6\x9b\x1d\x15\xad"\x11\xe99\xa8!\xa9\xf5(\xe0\xfaNXp\x1b5\xb0\xb5&F\x98\xd5\xd0\x15(\xf1C@\xeb\x1e\xbc\x8eS\xb1z!U\xe8\x84\xc6\xcf\x05h\x932\xe3GQ\xb9\x88\x96W\xa2B\t\xffl\xaeTY\xc7\xf6\xb2\xb8\x00I!\xdf\xea\x92a\x10\\\xbd%)\xc7\x1aq\xca\xc6\x8d\x93DA.\xd8\x08\x0cyA\xd16yd\xa3i|\xec\xcb\xccU\x02\xfd\xd4\xb9-\x02c\xc7\xaa\xb4\xd2\xce:\xe0.\x85QJ\xbbb\x02D\xb0g^\xc3j\xe7\x90\xa8\xee\xa5<:i\xef\x0e\x06\xc3\x91\x83\xa1&.\xb3\x80\x1fao\x1c\x9f\x1c\xc6\xf9G\xde\xa5\xdews\xd7$}\xa1\xcec\xfb\x9f\xf4\x03/\xb6\xdd\xa3\x17L\xf5G\x1eTA\x04mQIJ\x11+y\\\xc3\xe3\x1c\x89\xdcF\xdf\xc9\x14\x9eyP~t\x95\x9f\\\x84s\xf6\xb6;\x9f\x06\xc6\x960\xce/\x85\xce\xae\x1e\xd7\x16\xd6J\xddH_\xcfTO6z\xf2\x92\x86)\xb2\x82\xd2[\xf0\x989\x0cS\x1e\xa0\x085\x80\xb65\r9\xd1+\x12\xf2\x08j.\x1e]\xa0E"\xa6\xd7.\x81`\xdfO\xd8\xcd\xdd<@L\x14\x947\xe9\xf06"\xee0j $\xbc9u>\xa6\xe1j\xecn\xd7\x02D\xe8\xb4\xa9\xf7\xca\x0c\x98\x10v\x1f\xa1\x14|\x80\x05z\xf8\x18{\x7fj\x05\xc3\xf8\xd5\xae3\xf2\x0e{\xaf\xdf\x88m\xd9\xd9{\xe8\xeb\x88\xa3Oe\xe5\xa7\xcfj\xfa\xd5\x1a>\xe0\x0c:\xb9\x81\xf0Un\xbc:u\xc2\x15\xbc\xb4\xaaZ>\xe0h\xf2Ht\xeaI\x00\xd5C\x96k\xd7X\x87\x83\xc7\x1d^\xcb\x87Vk\xedD\xe4\x9f\x81\xc8\xa4\xa0h\xca2\x1c\xf8]\x80\xc7\xbf!\xf596\xc06\x86\xdcoo\xd1dL\xc7\xea\xd7\x86vU\xcb\xe4Q\x0e\xd1\x94\xc8\xc5\xc4\xc8\xafO\xd1\x8a\xd9\xe4\x1f\x95r-K\x05B\xf6MK\xebZ%\x8bqd\xd6E\xb7@/-}\x92\xed\xd3\xa7\xee\x81B\x0f\x16q0\xec\xe4\xde\x13rd$\xd71j\xe1y\xde\xdb\xe3\x82\xcbzW\rRg\xa5l \x9e\xda\x8fOiK\xf2\xc1-q\xc7;W\x8b:\x92Y5\xb3O\xf6\xe8\xfdh\x93b@\x9a\xfa\x83=\xce3OR\xe0\xe9\xc9C5u\xb26=\xf57\xd3<D\x84\xe6\xc9\x95\xf8\xfe>\xbe\x0fe\x83\x02\xfe\'v\xdfx~\x14\xb54./K(\x19\xd6\x92\xdc0\x83\xf8B\x07\x1c\x02\xd3\x06\xc6\x1c\xeb\xca\xb2\xdf</\x9d"\xae\xad.\xa5\xcb\xff|\x11\xaf\xd9\xc5\xc5\x02\xe3\x05\x0c\xb56\'\n\xd6>S\xd8\xad\xd6\x7f(_J\x13\xae5C\xaf\xe0\xe0\x12\xa7\xc6\xbd\x9eo74\x7f\xfb\xc7\x95\xb5*\xc9p\x8f\x19y\xf6\xf4g\xc2a\xfb8v\xd7\xe2\xa2\x9c y\xebT\x80\xee\xb8\xdc4)\x1aNB{\xb8\xf8b\x9fI(\xf4HOGm>p\xa4N\xa6\xceC\x887\xf2\tS\x06\xfb\xd8d\'(\x80g\xa9:\xf4\x14\xb6\x93\x83\x89YkAY\x9eO\x89\xfao\xae\x96\x0b\xb9\xb0\xc5N\xec\xdb\xaa\x10\x8e\x88[\x93\xa7\x17d_:\xdaw\xc8\x1dr\x94\xbd:\xe3\xc3\xb3\x01\x99\x13\xc8\x04\'\'T\x0e\x93\xaa\xa5\xaa/#4\xf7\xff\xcc\x0c\x806C?\x88"BR\xa65\xef\x8a\xd5\xdaW\xe5\xe3\xc6U\x90\x1e\x9d\x8b\xd5\x0e{&Ml\xe6d\x82n\x82q\xa2\x00\x1eX\xacA\xb0\x86\x83\xd3n\xa6\x829\xdd\x11\\8\xc3p\xd0\x81\x96y)\x1a|\xf6\xbe\x14v\xcb\xae\x8f\xe3:s\xc4\x13\x1a\xe9Xy>\xb1\x9e\xf4%R\xf7\xcexq\x9b\x8a\xaeq\xd9tL+y=\xce\x94U\xbd\xe2\x94\xf8\x83t\xb7s5\xda\x9a\xad\x19\xbb0\x87\x80\x9c3\xae\x87\xb6\x80\xd3L\x1d,\xb1\xf6%\xe2\\\xf9be\xd6\xd0J\xab\x8f\xef|J\xe3.\x15\xc8\t\x8a\x0f\xfd\xd4F\x1e\x06\xf4\xb8/\xe0\x05sI\xb0m\xa0RiC\x8f\xa3\xadUn\x99\xb7\xd4u\x01\x18\xb0\x11d\x00\xe2w\xbd\x95 \x12T[\x07\xd1#\xf78\xc3\xf4]\x9e1\xb3\x1c7/\xed\r\xfcH\x88\xd3\xacL\xf3\xa4 a\t-\x89,_Kx+\xaf\xfd\xfb\xec\xd4P\x8b\r\x14W\xcdCm%\x8c1:@\'\xca\x8a\xd9\xa3\xab\xa2\x97\xe8R\xc1*\x86u\xb2\xb4\xb1F\xb94T\xc2BHx\xd6\xe2\xb7\x01\xd0\xa5\x1b0;\xbagC\xb4Z\xea\xb2\xda>\xb8\xdd\xe8\xe1\x89\xc7 \xcf\x9c\x8d1\x87\xffc2\x94\xc0\xba\x1aX\xcf:\x1bT\'\xde[-(\xb57\x14\xff\x19\x8f\xf1\xaf`\x8d\xfep\xcf\x97\\\x9b\x10XD\x1c\xfejK\xe9\xebP\x86\xb2\x0e\x03\xb8\x85\x87\x8b\xbbw\xd3A\xa2+\xceN4\',\x02\xee\xe6\x14S\x9b\xb7\xc1\x9d\xb2V\xa2pH\x9aw\xc51\xf3\xeb*\xe5y\x80\x82/\x8a\x89b?\x1f\xa6\x03.\x9e\xe3\xf3\xc82<5+-"i\xa5\x95"\xc8\xb5\x8e\xf6\xe3\xd6 Q\x96\x8b\xe9d"o\x9cd\xfbp\x95D\xc4YbUl\x8a9\xf0C\x97\xb9\xfbK\xcc\xdc7\xd5\x03\xc9\xa1\xb1\x10\xc7~\xb1\xbc\xba\x16\x80\xc1_\xf3\x0f\xc9\xb6b\xc0E\xcc\xa7w\xaet\xbe>fG\x1b_?\xf0\x8e^\x87v)h\x99\xf5\xce^N`\x00?\x98J\xea\x12DeM\x84~\xfe\x15\xf2\xaaE\x91\x8e{\xf4\x81\xb2+H\x97}\xe3\xfb\x95\x10S\'\xabG\xd0\xca\x97g\xf3\xa6\xad\xf6H\xd4v&\x9e\xcd\xe1\xa3\x98\x0f\x81\x1d\x91\xf2\'\xdb\xbb\\+\x81\xe5\\\xbd\xb4\xd7\xa4n|[E:+\xeb\xff:G[6\x02\xa1\x11s\x14<\x11\xa8Xo\xc3\xb5e\x9e\xa6ok\x95\xd5G\x80\x84\xaf=\x12\xc4G\xfei\xd5\x85z\xed\xc5\xb8=\x83\xa7\xfe\xf1\xd2%\xa3\xaez\x140\x16O\x00\xf1\xf9\xc6dx\x8aL\xb2l\xc4Z1\xf9,p\xf6\xbcF\x1f\x08\xa7^%\xf0\xc60\xb0\xea\xe7\xad4C\xfd\x874\xf3\xbf2\xf1\xc3*\x97ow\x8en\xbc,\xf6\xae%K\xf9\x15\xfeu\xc0\x9e\xd9t@\xc6\xdb\x8d\xc6X/\x88\x9f\xcc\xea%gE\x02\x0e\xab\x13\x994)9r\x10gTW\x1b/j\xd5\xd5\r\rp\xf8\xee\xef\x15o\xfd{\\\xb5\xfaZ\x96,V\x06e\x8d\x95QK#Np\xd8\xb4\x8a_\x80\x17b\x83)!\x13\xb6;:\xab\x1d\xdc\x8f\xeaT\x0cg\xf1\xfbv\xc6O\'\x11\xd43\x10\x1d]\xbd\xbf{\\e\x18\xb80Z_l\xcf\xc8\xf9\xd9\x0fv\x87\xf4\x1c\x08\x14K \xf3K\x80\x10\x17k\xe4\xe69\r\x17\x0cM\xf4\xc9\'\x82\x7fwfM\x132O\xf2E\xa1\x8f\xbb\t\xba\x9bJ\x06Q>\xcb\x03\x17o\x85\xc2/\xc77S`\t\xa5\x87\xfel\xd0H\xe4\x06{\x06B\x1d\xd8\xa6&\x18IS\xb4\xf7G\xb1X\xba\xd7\xf3\xeb>\xe6\x18\x00\xfb\x1f\xa7\xb2\x89=\xb0v\xab\xf9T\xcc\xf8>\xb1RD\xc5\x18=\x9a\x89Ju\xb7\x1f\x8f\xcd\x15\xfbL\xdb\xfb\x10\x97\xdd\xd1\xe9l\xad`\xb5.\x942)\xea(7\xa1\xcf\x9b6\xa2\xed\x167D\x92\xc7-\x98\xbb\xc5\xc1\xaf\xe6\x85\xc9\x11\x99(I\'\x06\xc6<\x85>\xef\xbe\x9a\x97\x91\xaa\xee\x8e\x146\xd7\xbd\x188\xbb\x191\xf9\x90\x8c\xa9b\xe3\xf3ou5\xa0\x8f\x82\xcd=\xef\xda\xd1w\xb0\xccn`\x93\x84\tIs\xdbY\xedjI\xa4\xbc\xe8\xa6\xac\x16\xfa\xfa\x13\xbe\xe5\xec\xc0\x99,\xa0!\xaf\xad\x9c\x0eaj/\xe0\x98\xe3a\xeb\xb36\xd4e\xd8\x7f.\x029!G\x9bo\xf6`;gS\xd9crU.\xa1e]\x18\x90\x90\x81\xcc\xdd\x9a\xc0\xf2\x0b$\xaa\xc1\x19\x0c\xf7\x8a\x03\x8e\xa9$>\x98\x93$\xb3\n\xeeP\xdc\xae\xfd\x06\xfcG@\x97c\x1269]\x9a\xb1\xc2Z\x1b\xb6\xb9>\\\xfb[\xbcN\xb8vEs\x83\x89\xe6-gl\x0eh\x93i\xd7\xb8\x8e\xd3Mo\x83\xb9\xcb\xf7.!a\x8b\xf0\xbe#\xec!\xfd\xd4\x8c\xa1(3q]\xf4\x8b\x14G\x18\x87\xe3\xdb,\xc2_[\x86x\xec\x8e\xe7\x0c\xafR"\x00|\xd4eza\xe9@\xc6\xe1\xe9\x9e\xda\xba\xf6 \xb6\xa6\x85]Hp\x8e\x8f\xccL w\xe7&GO\xfd\xe5?W#8\xdf@F<\xb3\xfe&z\x9a\x0e\xb4\xfb\xfc\xbd\xac\xd2\x1b\xa7\xc3\x00\xe1\x0c\x88O\xbf^C\x05\x08\xbb\xc7\xea\xee\x86\xfbbs\xf9\xa6$@\x04\x13\x8a\xf4MGu\xf6/Q\xc8\xa1]~{\x93\xa6!\x81\xb1\xc0\x7f%\xf3j\xab\xe2\xaeP5\xfc\xa99\xddl\xa4\x1a)\xbb6\xf8\xa9\xe2k\x1b\x9a\x08\xe9:\n\x8c\x92\xc2\xa7\xbd\x8fwa\xdf\xa2\x1b.b\n\x16\xfc\x9f^\xae\x85l\xdd\xd1\xdd\xf1V&\xa9\xbck\xe7\xa7\x18\xd5~\xbc\xe7\xf02\xb9\x97\'\xe9lh\xe64\x9aU\x8c\x9fc\xe0h\xb7\xb1U\xfa\x98J\xe5^\xbf:B\x7f\xa9W\xca\xd0\xf5\xfe\x98\x85\xd9,\xed\xbb\xfe\x1fV\x9dl,\x91\xeb\xa0/\x81js\xe0a\xadp\\\xd2&\x13F\xa8 3\x1f,\xfd\xa0\x7fo\xa2\xd4\x94\x15\xdfR\t\xc9E\n\xf2\xa7d\xd8r\xcb\x91EF/\xe5\xad\x1a\xd5\x887l\xa4\x85\xebCMvy\xb3\x1b\x81\xc7mJ\xbc\xce%\x16N\n\x1b+\xfa\x8d\xac\x8cKq*]\xec\xdb\x11\xa2_o\x17\xa6\xa4gm\xbd\xe1v\x7f\xe0\xca\x00\xb2\xd4-N\x12\xaf\xa6\xe4\x8b\tV\xc1\x0f\xd3}\xe0ty$\xc0qW\xb6\x14R\xea\xc2\x95u\xcd4\xa9\xe3\xd1|\xb0\xe98\xd2\xd2{\xbe\xf26\xe0\xfa\x1d\x88QN\xc0\xbe\x08\x17J\xf4\xadC$#\x10.\xc2$\xb9\xa8\xdb\xca\x02\x14\x10\xf6\x13\x00O\x9cg`\xda\xe4F\x1f\xe7\x0f\x18\x03\x15\x02\xc7g\x18\xf4\x18Tf \xb6\xaf\r\xa1\x07\xf2\x83\xc0\x80H\x05\xaa\x90\x7fx^\x1b\x8ck\xca*"\xa4c\n)\\\x16\x81\x03\xe9E\x10\xcc\x05\x1c\xd3pxU\xb2o\xcaR\xd4\x1b\x00a^\x95^\x89\x01w:\xb6\x1cF\xaf\xa1Cm=V\xdc\xbc\x08\x17\xfc\xbe\x9a\x1c\xc1\xac\xeeAKE[6}\xb0\xe1\x16\x9aAg\xc7\xb8\x1cI\xfe7}\x05d\xf8\xb7,\x16\n\x05\x05\x1fs*t/\x86\xba\xf3\xfc\xac\xdc\x0f\xa5`\x9f\xb2zUY7\xad~f\x1c1\xabX\xbf\x05\xe7\xc57\xd9\xbcV\x9b\x8a,z\x90:\xec#4\x96.09<\xc5*\x9c|s\xcbvq\xe9\x17\x9a@|\x9d\xc1v\xbe\x9c\x9b\xfb\x86\x9c\x987\xd8\x9a\x1b:\x0b]\xb9\xd6v\x0b\xb3\xe2\x87\xc8\xcan\xe75\xb6n\xb1j0\xfbb\xef\xe7m\x8dM?\xe9\xdd\xae\xefzvB\xcf\xf6\xb0\x82B\x00\xeb\x1f\x9f\xa7w\xc3w\xdf\xe7\xc4\xb2\x98\xf3\xcd\\a\x85X\xa9\x95 \x86\x02\'\xe8\x15\xfc_\x07z\xca\xf5\x1a\xf0\xb5\xf2\x9fr\xcfaEX\tG\xd5\x84t\xb0$\xeb<\x92_\xfci\xbf\xbd\xff\xff\x07\x9a\x90l/\xa9\x00\x15\xce\xdetX\xa1+O\xe0\xf0\xd9l\x18\xf5\x18\xa7\x19\xae7\x1a\x82\x0e\xf4\x15A\xafJ\xacU\xc0r\x87\x9a\xe0\x0b\x08\xa3\r[k"\xa7\xc0"mx\xeaD\x94\r\xd14^\x11>\x16;\xbc\xa7\xefJ\xe4\xd6H\x16;\xdc\x96\xdb\x92\xa3>\xd8\xc7\xab9\x9b\x13U:9\x91\xabS%\x05H\xdd\x83\xa3<#\x15{9\xf4\xd4\x1dm;\xeb\x13$@\x96\x03\xad&\xaa<\x02\n\xbe\xa1\x13\xf8$n\xf6i\xd0\t9_iq\xfa&iC\xfb]\x16\'\xa9I\x1e/\x98\xc7\xbc\x80,\xdf\xe6:\xd7\'\x8c2z:z\xf5e\xfa\xa6{\xf5\x1fA]\x98\x0b\xb8\x12\xd8F\xd7\xb3\xf6\xb1R\xd5qU\xfa\xb3Wu\xbb\x17O"7m\x1fTSoww[\x86\xb9\n\x06\xc7\x08\x15Q\xe007\xf5\xe8\xf3H\xecu^\xa7\x86)]\xed/\x8d\xfb\xdc\x97\xf3.o\x0f\xa0sE1\x1e\xdc\xd65X\xe5\xed\xab+\xb4\xbcT\xe9\xf9\x8eI\xbd\x8bc\xb0\xe5^\xe8lp\xa7\x8c2\xdd\x8a\xc7\x16\x87\xdd\x1c]\xb9e\x14cd\xca\xb6\xc7\xb3\xaf+=;\xc4\xc8\x9dj\xf8J\xd6\xbd\xca\x8b\xad:\x13\xb6\x10\xc8D\xddPY\xa6l-\xe1\xfa\x9e\xfd:m\xdb\x01\xb4\xca\x0e\xf5\xe1\xfe\xe3\xdf\xd8\x88\xb3\x16\xe1 \x93H\xe6\xf0\xfb\xce\x1d&\xf3\xfc"M\xdc\x18\xf7\xaf\xd5}\xca8u\xc3>\x9eQq\x9a\x9d\xce]g\xb8\xfa\x9c\xc3{\x1f\xbe,*"\x99t\xfe\xdf!\xbf\x99\x97\xbd\xe48n\x0c\xc7\xd7\xca\t\x13"^w\xe9[\xafs>\xa0\x9bZ~f\x1a-\xd1\x06\xa5d\xaa\x9f\xb9\xd1\xeb\xcd\x99]n7\tV\xfc\xe1K\xa8\x85\xc2w6`\xb6,\xbb\x10\xb0\xef\x92Q8iD\xde\xf1\xb6:9\xfc\xe9\xab\xb1/\xce\x98l\xd8\xd9\xdf\xda^-\xe5^al@\xf6~J\xe98\xded\xe8<\tCQ\xc76\x04iW\x92\xfb\xebQ\xd1\xf9I\xd0\x81T\x06\xe7\x80\xf5\x9e\x8c\r\x16\xe8K\xa7\xb3!\x18\xb9\xe4b\x06\xb0\xb9\x0c{\x1b\xdaF\xf9]\x8f\x9d*OB\xcaN\xcb\xb6\xd6\xc9\x89\xb1\xe1\x19\x9a\x01@\x88\\l\x84=+Az\x07\xc5\x0b\xfd\xf7\xc9i\xadA\r"\xd6\xd9D\x1a\xec\x99\xd0\x9a\xb3.\xf5\xeb\xc0\xe6\xb0&\xa7\x0e\xfe\x9e\xc3\x11\n!!xGV?\r:~\x88\xd7y \xc2\xdc\xa2\xc30w\xd2\x02`\x86\':\xb77\xa7Iv\x1d_,jS\x10k\xd4[\xc5\xb8\xec\x85w\xed\xfe\xeb\xf5\x7f\x00Q\x05 \xae\xf7d\x16\xb1\xc6\x19\xdcG9\xad\xf1U\xad4G\xe7@\xd2d\xf9\x0e\xdd\xfb\xa7\x04D\x86/\x97.\xcd\x95\x13\xc5D\x1b\x1c3B=\t\xcf~\xe0^3\xa1\xf5\x89\xca\xdc0{\x1c\xbc~\x14\x98\xa4\x11\x0eQLJ\xf0&j\xf3\x16\xdd\x97f\xe1\x84\x9c\xcb\x0e\xea@\x9f\n\x9c=F\xa7@yD9U\xf9\x9a\xa0G\x0c#7\xd6\x8f\xe7\xc92l\x1a\x99\xdcT\xf4}\xa3\x1b\x1a.zSS\x8dG\x82\xbb\xa1\xc6\x8b\xb0\x9b\x97\xea\xa4zH\xbc\xbf<Hq\xb4{x\x9c \xf1\xbe\xc5\xe2\x88e\xe0B\x02\xe0y3\xb5(\xb6,\x01i\xd9m\x06\x16\xe80\rAg"\x19T\xea\xfc(rq\x90:\xcf\xdc\xcbG`0)X\xc7\x16\x11\xabT\x14d\x04e\x04\x98\xb1\xc2\xe7\xe9\xae@f\xa4\xfabw\xf8z\x93\xf0S\xd9\x10\x19F\xf0\xeem\xd63e[\xeb\x8a,\xf9\xc9\x9f\xee\xae[\xe1\xf6"\x93z\x08N\xb1\xafKN\x91m\xcbP2O[\xcb%\x03\xf01\xd8\xe1\xb4F\x12\x02\xa0\xf3\x93\xa8jN\xcdf\x93\xa4\xc4\x8d\xa8a\xb5\x7f\x7f\xa1\xf4\xed\xb2\xf5\xca\x91\xdf<\xbf\xcb\xa7 -\xb8\x84\xff`\xe1\xd0\xad\x1b\xb6\x17V\x19I\xf7,\x19u\x80\xb1x\xf48\x99\x1f\xce\xd9\xbb\xa1l\xab-\xc2\x9e\x9f*0\xd7\xc0j$\xdc\xc5\xaf\xc4\xc1X\xd1\x03m\xf8\xdbl\x7f\xe0\xbfm\xf0\xdc\x92V\xeb\x90\x97\xaf\xc9\xf8TYu/1\x84L\xe6\xc3\xe2\xa2Txy\'\x97\xed"\xe2T(\xa54\xf2\xa6\tO\xf9\xda\x97:%r\xbb\xd03xn\x95\xcc\x83\xd0\xb3c\xa9[\xa6\xf6U=sO\xce\xf0<\x1839\x81\xf8zH\xf2[xZ[;\xb3<\x05\xa9\xb9\xff=\xaf"\x89\xdcY\x16\x19\x97\xbc\x88\xbdt6N\xfb:NAK{\xea:\xf2\xa0\rP\xa5\x06\x8e\x98\xd8\x9f\x9d\xb5\x85\x99\xcf\xc3\xce\xc5\xd3\xc8\xdf\xc24\xff\xb8\xef\xbc\xb2\xd02\xd6\xf9\xda\xdc\xf9\x9e\x9c\xa4c\xd1\x80\x93\x0c\xfcF\x01\xbb\xbbkf_\x83\xc8E\xa1h\xf8\x9e\xcb\xae\x9b\x04\xfb\x9f\xb5\x87o\xadS\x00M\x80\x84%\xc0\xd4\xa1\xfd\x06{\xc1P\x88{\rU\x03\xde\xcf\xf1\xce~\xf6\xe97\xf6L\xbe\x0c\xde\rFx\x939\x05\xbe\xd8\x82\x90\x18~\x9e\xa40\x17\xddr\x10(\x99BW\x10\x8c\xbc\x98\xb1\xb0\x99v\xf3#\xa7\xab\xaefI\x9b\x1ce\xc2\x15\xb0x\xd3\xa3q\x02T\xd5\x9bnF4gW\xfd\xbbb\x8b<\xd6\xc9\x96\xa3\xf2\xa5\xfa\xed\x8e\x8cs$i\xd5\x0e5\x11]Gz7e\xf4<j\xf9l\x89=+u\xff\xaaG}\xbb{\x92\xff*\x00\xde\xe0/\x07\xff\x9er\x8bj\x02\xb4\xef\xce\xbc\x82_o\xb0\x864R~N\xa5\x86\x0b\x0b\xdaP5\xc3\xe4\xfa*x.-\xa6\xb3\xc3\x9eV-*\x08X\xca\xab\x99\xcd\xb6k\x02\x14\x8c\x06?\x82b\xe7"R\xd1\x06 \x1cwE\xffP\xa8\xb6\x8b\xa4\x93\x85\xf1\x11\xc4\x83\xddI\xd7gTd\xfc\x02g\xcdR\x11\xf0\xcf\x15\xc21\r\x84>\xa8Wtn\x87\x13\xb94\x91 z>\x9c\x97\x1d\x84J\xfb\x8fe\xd2^\x85\x8b\xba>Bn\xf4\xceLW\xae\xe4\x8a\xe1\xc3\xef\xd3\xdbQ\x8e\xc3gJg\x80!\x93EQY\x80\xbc\x00\x87\xf1eyC\xd1H\xad\xf7\xfdy\xc3\xb9R9\xe2!2\x1b\xfdF.\xedz\xfa\xe7\x01\xf4m\xdf\xe1\x9dDY)\xfb\xbf2\xa6F\x8f\x9f\xe3^\xe6t\xf6.7o\xedy\xfdKE{)-\x17\x9eQ\x83\x99<\xde,\xce\n5O\x8a\xfb\x1d\x1c\xaf%\xc0RW\xe1\xbf\xf8\x87=Z\xce>Bqj=R\x0e\x96\xe6\xd9\x1e\xd7P\xf6aB\xee\xac:\xce\xe72\\#\xddA\xd7^\xa7\xd5\x97\x9a\x92%\xbd\xe4\x89\xa1\x96\x98`6\x8f\xebf\xad\xdd\x18\x86o\xb7\xc4\x9f\x91\xaf\n\x1a\xaa(\xceL+\x1c\xc9pU9?\x85\xfe\x02\xfdN\xe0\x1aq\xea\x9e\\\xe3\x88\xd9\xbaU\xecM\x125\xb0\x84\x03\x83\x84\\\xedc\xedidI\xd1Rrk+S@[m\xb3\x88p.\xb3\xe2\xf0\x8fQLF\x86\n\xf3/\xf9\xd4\x11\n\xd3j\xaf\x8fV\xe8\x08\xed\x07o\x9d\x95\xf90C\t\x0e9\xcf_\xb8}\xa2\x14\x81\xe2\xf0"\xe0\x05\x8fB7\x01\xdd\x06kfZf;*\x17\x86W\xe5\xe5{u\x93+Ll\xa3a\x7f\x1c\x1aI\x03\x87m\x11f\r\xd0\xdd\x95)\x01\x8b\xf4@\x1cq\xa1Y\xa2\xee\xb6"\x1c[\xfdu\xff\x13\xa8\xe1\x14\xd1\xf2\x056xd\xb0s\x8e\xec')
|
1
|
+
from flask_babelex import gettext as _
|
2
|
+
|
3
|
+
from . import bot
|
4
|
+
from hiddifypanel.panel.user.user import get_common_data
|
5
|
+
from hiddifypanel.models import User
|
6
|
+
|
7
|
+
|
8
|
+
def prepare_me_info(user):
|
9
|
+
"""
|
10
|
+
Prepare response to the "me" command
|
11
|
+
@param user: User instance
|
12
|
+
@return: A text message
|
13
|
+
"""
|
14
|
+
|
15
|
+
response = _("Dear {}\n\n".format(user.name if user.name is not None else "user") +
|
16
|
+
"Your hiddify information is\n" +
|
17
|
+
"UUID: {}\n".format(user.uuid) +
|
18
|
+
"Last online date: {}\n".format(user.last_online) +
|
19
|
+
"Expire time: {}\n".format(user.expiry_time) +
|
20
|
+
"Usage class: {}\n".format(user.mode)
|
21
|
+
)
|
22
|
+
|
23
|
+
return response
|
24
|
+
|
25
|
+
|
26
|
+
def prepare_help_message():
|
27
|
+
"""
|
28
|
+
Prepare response to the "help" command
|
29
|
+
@return: A text message
|
30
|
+
"""
|
31
|
+
|
32
|
+
# command description used in the "help" command
|
33
|
+
commands = {
|
34
|
+
'hello': 'Get started with the the bot',
|
35
|
+
'help': 'Gives you information about the available commands',
|
36
|
+
'info': 'Return information about your usage',
|
37
|
+
'me': 'Return information about your account'
|
38
|
+
}
|
39
|
+
|
40
|
+
# generate help text out of the commands dictionary defined at the top
|
41
|
+
response = "The following commands are available: \n"
|
42
|
+
for key in commands:
|
43
|
+
response += "/" + key + ": "
|
44
|
+
response += commands[key] + "\n"
|
45
|
+
|
46
|
+
return response
|
47
|
+
|
48
|
+
|
49
|
+
def prepare_hello_message():
|
50
|
+
"""
|
51
|
+
Prepare response to the "hello" command
|
52
|
+
@return: A text message
|
53
|
+
"""
|
54
|
+
|
55
|
+
response = _("Hooray \U0001F389 \U0001F389 \U0001F389 \n"
|
56
|
+
"Welcome to hiddifybot.\n"
|
57
|
+
"Start by clicking the link on the panel or entering your UUID.")
|
58
|
+
|
59
|
+
return response
|
60
|
+
|
61
|
+
|
62
|
+
@bot.message_handler(commands=['me'])
|
63
|
+
def command_me(message):
|
64
|
+
"""
|
65
|
+
TelegramBot command "me"
|
66
|
+
@param message:
|
67
|
+
"""
|
68
|
+
|
69
|
+
text = message.text
|
70
|
+
user_uuid = text.split()[1] if len(text.split()) > 1 else None
|
71
|
+
if user_uuid:
|
72
|
+
user = User.query.filter(User.uuid == f'{user_uuid}').first()
|
73
|
+
|
74
|
+
bot.reply_to(message, prepare_me_info(user))
|
75
|
+
else:
|
76
|
+
bot.reply_to(message, "Please enter user_uuid")
|
77
|
+
|
78
|
+
|
79
|
+
@bot.message_handler(commands=['help'])
|
80
|
+
def command_help(message):
|
81
|
+
"""
|
82
|
+
TelegramBot command "help"
|
83
|
+
@param message:
|
84
|
+
"""
|
85
|
+
|
86
|
+
bot.reply_to(message, prepare_help_message())
|
87
|
+
|
88
|
+
|
89
|
+
@bot.message_handler(commands=['hello'])
|
90
|
+
def command_hello(message):
|
91
|
+
"""
|
92
|
+
TelegramBot command "hello"
|
93
|
+
@param message:
|
94
|
+
"""
|
95
|
+
|
96
|
+
bot.reply_to(message, prepare_hello_message())
|
97
|
+
|
98
|
+
|
99
|
+
@bot.message_handler(commands=['info'])
|
100
|
+
def command_info(message):
|
101
|
+
"""
|
102
|
+
TelegramBot command "info"
|
103
|
+
@param message:
|
104
|
+
"""
|
105
|
+
print(message)
|
106
|
+
text = message.text
|
107
|
+
user_uuid = text.split()[1] if len(text.split()) > 1 else None
|
108
|
+
print(user_uuid, text)
|
109
|
+
if user_uuid:
|
110
|
+
user = User.query.filter(User.uuid == f'{user_uuid}').first()
|
111
|
+
information = get_common_data(user_uuid, 'multi')
|
112
|
+
|
113
|
+
bot.reply_to(message,
|
114
|
+
_("Your hiddify instance information \n" +
|
115
|
+
"Domain: {} \n".format(information['domain']) +
|
116
|
+
"Usage limit: {} GB\n".format(user.usage_limit_GB) +
|
117
|
+
"Current usage: {} GB\n".format(user.current_usage_GB) +
|
118
|
+
"Expires at: {} \n".format(information['expire_s']) +
|
119
|
+
"Remaining days: {} \n".format(information['expire_days']) +
|
120
|
+
"\n\n Happy using \U0001F389 \U0001F389 \U0001F389 \n"
|
121
|
+
))
|
122
|
+
else:
|
123
|
+
bot.reply_to(message, "Please enter user_uuid")
|
4
124
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
125
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/panel/common.py
CHANGED
@@ -1,5 +1,100 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x85\x11\x00\x00\x12\t\x04\x00q\xd9\x1b\x18\xcb4\xa4\xc6\xa1\xe6\xf2\x07"`\xcfB\x00\x00\x00\x00\x00\x00\x00\x00\x8ba\x13\x8a\xd0\xe9M\xcf[\xf4\x95\xdc\xde\xf8\xb2\xf5\x92(T\xbf\xf1uh\xe4\x8d<\x1fg\x8c\x00\xf9q\xec\x83\x14\xe4\xf9\xbb\xaa\x87ts#\x81\xf0G\x84\\<\xb2\xe5wt=\xaa\x8fn\xc8G9\xfd\x8e2\x83\xc5\x92\x80\xe9s\xea\x19EV\xef3\x02D\xa3\xa9\xfc\xcd&\xf0\xaa\x89\r\xdf\x80z5\xaeB\xcd\xfc\x8cN\x1e6\xe2\x1d\'\xa5\xf1G\xdc\xd7A\r\xf8\xf8-\xfc\xeb.\x04\xd9x\x1e\xb7p\xcd\x19\xa0\xf5\xe8oB\x87\xba0\xeeUYNM\xf3-\xa1\xe4\x0e;7\xef\xefT5\xd6 \xfb\x15\xc9!\xa4L\x8a\xa8\xf6\xd3\x1ap!\\l\x06u\xa5\xda\xad95\x96a\xba(\x16T\xac\x90\xff\xa4\xe8q\x96\x034f\x8d\xa5\xba\xf5e\xc1\xad\x00\xeaMm\xea}\x92\xa9\x9cm\x16\xa2\xaatLe\xa1\xf3`\xcc40|X^\xa9\xd6j\xf7\xdeu\x04\x04\x01\xd0\xc9\x94\xa6l\x95\xe5\xc8\xbc,*\n7dc\xa0\xec{\xde\xdb\xc4Y\xa7^\xe3<\x10T\xd3\xe8\xeaZN2\xe5Q\x14\r-\x06O\xa2\xa4\x84w\x05\xa9\x87x\xf7\x90\x01\xc2\xb0V\x9d\x0ct\x0b\xe0\xb3j\xdbb@\x85t\\\xaf?\x90hc\xf2\xebN\x06\xfa\xa5S+\xf3w\xdc\x1fB\x8e\x05\xfe*o\xbb{\xf8J\xc0g\xf8\x86\xa8\xd1RHs\xb4-\x13i\xe2\x06\xc2\xf9\xfc6\xcf\x98\x81g\x03\'\xab\xde;\xb0?\x81\xeas\xf4o\x11\x96\x92\x1c\xb1\xf2\x8d\xe8\xef\x07\xde\x89\x14\xad\xe3\xb1\xfd\xe4\x9e\xbe\xce\x13\xad3\xa1\t"(}\xf3\x94\x1e\x81\x9fK\xd1,\xa80o\xef\xf7\xd4\x8fy?\x16\xe6nP5\xcf=\xbc\xf5\x10\x83e\xcd\x01<\xe5\x8e\x9b\xf6\xcc\x9b|{j\xfe\xbb\xd1\xc4\xce\x91\xd4a\x18(\xa7\xde\xdbI\xc2\xe8\xed\xb1\xcc\xd2\xb2\xf0G-\x9bB\xea\xf3\x96\xd1\x0f8\xb3US\x1c\x1a\x0eS\xb5\xdd\x17\xa8I\xaf\x87\xd1L\xabs\xb3@y\xda,\x9ery\x82\x10\xc0}\x83\xd2\x97\xae)x\xc9\x93\xc6\xe7\xa5j\xe2\xc9\xc4Y\xb9\x18\xe9\x9a\xcf\xa2\x802\x91q\xc3\xdc\xdf\xd9D\x9ex\xc2/S\xa7\x82*\x05\xe7\xf2\x15\x02\xcfp\xb6\x11\x11\n-\x1b\xdc\xc0\x18H\xea\x96\x8c]\x1b\xdd\x06\x89t^\x91\x9f\xd7\xb1\xce\xe7\xe2}\xcb\xa4\x8a%<Sp\x18[\xbe\x85\x89\x06*\x1f\x9c.\x9e\r]\x9f\xca\x9c\x06\x0c=\xca\rR\xe3U\x98\x96*\x13\x1e\x1a[\xa7-\x86\xf4]B^\xa6\x04\xd9\xf7\x9f\xb30)\xfeQ\xcb\x0eXor\xf6\xe59\x0fb\x0c\xc9L\x14\x9a\xd6\x00 \xca\x80\xb6\xd2\x8cA\xb33\xf2\xb4g(S\xc8\x96\\\'\xdf\xf5\xef\xa4\x94\xfa`5k\x835[$B1\xcb\x9c_\x80\xfcx0\xcf\xe1Y$}\x0c\x1f\xa2\xa1x\'\xdcU\xcf1\x00\xf6>\xdd\xfb\xbf\xb9i\xc9M-\xcfcH7\xea\xc3i!\x9c\xa3\xcc\xf85E_B\xb9W\xfe\x103iZ\x85\x89\x14\x04\n\x86\xb4\x90\x80\xf1b\x82\x81\xd3\x1f\xafk\x98\xc1\xa7\xf0^?\xf1\x98\xd2Q\x13\xa88\xf4\xef\xce\x9f\xf5\ruW7[\x18\xd5\t{`j\xdf\xed\xa6\x01\x85,\x06:-\x10\x94\xbb\x12\xe4\xd0\xc1\xf0~\xa2\xa9L\xbd\x04\xfb\x15m\xd1\xd4\xd4\xdc\x9e\xa5$\xc0\xe5J\xb8\x81\x97\xd1GW|\xe4\x9d\\yN\xe2\xef\xb3\xedk\xfe\xee>\xe8\x11!Igu\xb5\xf0b\xab\xc2\xb0I\xbc\xc05F]X\xe2\xd5\xb0\xb3\xaeV:\x8b\xa0Y$\'\x90\xaeX\x01\x88\x92@{\xcc\tK`\x13\x9aE\xea\xc4\xe0~\x9e\xb1B\xed\x842?[9\x02G\xd1\x9c\xfd\xb2\xeb\xb9#z\xfe\xae\x08-\xa3\xa9$\xfce#\'\xa2\xbd\xbd\xa3|\xb9\xbbIcu\xfa\xd2\x86l\xf3_\xe9\x7f\xe7\x9e\x8d\xe0\x12\xa9\x8ex\x85\xf0\xa0\x86\xd8|n\xa5\\\x04\xae\x8a\xb4o\xfa\x05\xd7Qk\xa0z\xd5\xedm\xb0\x1a\xc7\xa7\x14\x1b?\xe2\x80L\x9f\x9ef&\xa7\xc5\x95\xc0\xed\x1fm\xee\x80\x95a\xf2,\xd6\xc0\xb9\x85/\xe2{\x85\x88\xbd5\x06g\xb1n/\xa0\xed6\xcd{PCM\xcf\xbe\xe22\xf6\xc4\xbf\xe8]\xf6\xa6\x97\xcdY\xa3\x19\xf0A\x86\x95\x1a\xf1\x18\x9b[gr8zI\x17j\x00\xcbD\x1c\xe7\x1a\x8a\x96\x98M\x0f6\x99\xb8i\xcb\xcf6t^\x08[s\xed:\xcd\x8eZ\x06\xb8\xf1<\xdf\xfcA]\xb6.cCCm\x10\x1aYAx\x8f\x1d\xeb\x0c\xf6\n\xa7\xc2\xb7_\x8fV\x08\xd5aA:\xa8\x1e5\xd82\x01!\xbb\xefx{\x96zQ\xff\xffl(\xc6T\xdeV;\xe8\xb1\xf1&`A\xb0\x93\x9c\xff\x03\xc0\xd8\xf7\x81B\x86\xdd\xd9O.$\xef\x14\xde\x17Ia2\x97\xcb\x1c19=b\x9f\x15\x90\xfbC\xa8\xb2:\xd7\x02\xa0\xccp\xbe\x964Esf\x06\x0f\xf0\x11\xa08\xb0t\x1b\x19\x8f\x97b\x95\xaa\xcbE\x06\xe6\xe0\x1dR\xe5\xae>\x9d$\x97\\\x92a6\xbc\xb655\t\xb7\xfbqR\x9c\x0c\x8bP\xfd*\xd9\xe4\x17\x01\x9d\xd6\x8d\xa9\x89\xf8\x13r\xa8\xb2\x8c\xbf\x80j\xb5\xc4\xf0\x13U-\xb4o\x872[Q*\xc0\xa6k1\x1b\xc4\rAn\\\xe0\xd3,\xe5.\r\x13T\xa6\xf3\xbe-s\xec\x07\xa0\x1d\xdfu\x03\xfe\xea\x81t\xacw\x10g\xaf\xfe\xd9Uh\xfc\x04]e\x0b\x0e\xef\xf2C\xdf\xb8s"\xaf\xc5+\x97\xe1\x04\x0e\xfd\xac\xce)\'Rk+T\xa3HY\x80\x19w\x8f\x8c\xd6%\xc1\x81h\xech\xc5\xc9\xda\x19\x8a*\x9d\xa5\xa8W\x83NL\xb8J\x03\xe5\xde\x0e\xbdl\xc8\xc8M\x8a\xc0\xa11\xad\'\xe6\x0c\x16\xa7\xe5\x04\xdcC\x10\xd2\x9b\x1c\x8aU:\xeb\xf4n\'\xc6u\x8d3\xf4\x05\xd3\xbe\xea\xf9\x06\xb8\x87oc\x15\xc1\xcb\xb2\xda\xbb\x8d\xb6\xa7\xe4\x87\x8a\xbb\x86\xd4L?\x90Q\xb5Y\xa8\x0e\x00T\x07$rDr\x9e\xcf\xf9\x16\x98?\xc3nBWb\xd67\xb7\xe6\x15ZD\x8b\xf4N=@P2P\xd6\xff\xb9\x81]_QW\xb4\xfbn\xd5\xf3;61\x13:~Y)\xc7z\x8a\x01\x14\x13t\x11\x8dA\x8e[o\xf7\xb4K\x93\xe0Y\xfc\xf4\xf6@\x8f\xe0\x8aI\x87\x83\x84\xe3\xb3\x17)O\xf3\x0f\xa8\xf4mX\x0b\xd8\x0fc\x0f\xa9\x99n\x0c\xf0\x8dky\x13?,\xd3\xac\x83\x90\xf8D\xf6\xab2\x13\xaa\xffA\xb0^K\xf0Y\xd9C}\x19\xab\x11\xae\xcfX\x83>\xbd\xb4\xb8yD2\xf0}G0}K\xc4\xfc\xfd\xac\x0e\x94\xaaX\xa1o\xf9\x998E\x08\xfc9t\xb12\x97\x84\x8bw\x84\xf6\x88\xf8/\x9eK\xe2\xb5B$sc\xbd\xfc\xda\xeaVn\x0cr\xc9V\x03Y\xeaVJ\xce\x0eK\x17\x15\xc0\xceG41\xc7-\x17\xe4\xa4\x8d\xcb\x08\xf7\xfd\xc1FVi\':\r\xb99\xfa\xd2\x1cTT\xbb\xc6$\x82\x93\x80\x10Y\xb6\xad\xde\x12G\x8f\xecLj9\xcd8\x8aP\xbe,\x13\xb3\r\x86\x14\xa6E\xd8{D\x9a\x7f\xeb\x1f\xe4\xad\x87SP\xb8\x83\xc4\xf04\x8b\xa9\xf5s\x9b6{\x9b\xcdeR\xb3w\xc5_\xe2\xa6\xb3*\x7fw\xf7Y\x1e\xbd\x7f\xf5\xfc\xa4-\x7f\xb2\xe0\x81\xe4\x05\x10\x8d\xe1\\\x0e\x83\xee\x06\xf7\x8b\xcb_V\x1cO:\xb4\x9a\xb3SZ\x83\xbd\x0e\xb8\x12BK\x05\xb8+\xa6lF\x08\x9a\x1b\xed\xc2\x06S\xb5\x96 !\xbf\xb3A\xfc\x9a\xfc\xac^m\xe92X1B{Pm\x0e\x10#\xa8n\x83\xc3Z&\xcb\xd2\x01\xca\xd9\x91\\\xa5\xa0fd\x12\xda\xd6\xb9\x1f\x1cG\x9f\x1c\'\xb2$\x8d\xef:\x06I;i\x9c\x18}\x8d\xfe*\xaft\x81-\x1d;X\xa7)6\xc7HZ\x1d\x0b%l\xca|\xbe0Xd\xec>P\xf1\xe2\x93\xd7\xe9\x96-\r\x9e\x9bC\x84@>\xccwv\x98\xe3w\x1e\x8b(@\x1b\x10T\x07\xd8\x81\x9f\x88c\xee\xc3r\xeb\xb6J\xd0gW\xccy\xf5v\xe1j\x81\xdb6\xf4:\xe5\xa6x_\xc6dt\x1c\xfdF,\x95\x15(\x82\xa7g\xaf?$\xc1\xff\xaf\xdf\xc3\xc2\xeef}\xc3\x1av.\xc3\x9cX\t\x12Q\xd3\xc2\x11\xf2]\xf3\xee\xea\x03[">{o}\xa1x\xed\x11\x88\xbf3\xdc\xf58Z\xf9\xcd\xa3\x9d,\xd3\x05\xb2d\xd2\xa4\xa7\xb4\xa1+#\xe1\xaa\xe4,\x02\xf8\xb1\x05\xa2cy\x1b\xdb\xd6 4EGCt\x7f\xce5\'k\xbbp\x92\xdd\xd0\xc3\x7fm\xce_YW\xec\x95U4\x9d\xa8\xf7\xa96+\xb0\xba.Bas\xaf\xc2E`\x14\x9f\x93\xb8^\xb8)t4\xe3g\xd8\xb9\xb6\xabDq6\x8e.\xebG,n\x82\xcc\x1aJ\xf7\xff\xb7<\xb4\xd8\x9a\x9f\x189\x88\x17\xc3^\x8a\x7f\xd1\xf7\xb6?j\xe0K;,\x1f\xbb\x17\x90\xdb\x8f\xe2p\xc2\xd1\xcf\x13 \xee\x19;~\x86\xef5\x04\xbc\xbf{\xb4\xf36M\x04+\xeb\xccA\xd6\x8a\x01.Y\x0b!\xaf\xea\x80\x95\x96\xb0\x1c\x82;]\x8c\xec\x9d\x98\xbb\xc5\xf7\x13\x1c\xf8\x97\xc5\xd8\x87\x88\x8e\xab\x06\'#2\x85=\xb23G\xcb\x1e\xea\x88O\xcc(|WwA\xca\x7f\xa8s\xc1\x81?r\xa6\xc9\xf0\x9f\xd5!\xa5j\xed.i\x16\x97\x98*\x03\x0fd\xa5|n\x1d\xcd\x0b\xf7%,\xf5\xf2\xb4:\xdaK\xf5\x86\xa5\xdav\x8cz\xbcB\x8d\xdb`\xd9\x1cs\x0bY\xdc\x15\x86P\x15\xb1\xf0S\x88\xde(m\x11\xe2\x81\xb1\x9a\x93`\x8a\xb7E\xdd\xd7\x94\xf7h\xf8\x0feE\xb9E\x14\xcd\xabQ\xa7\xf0JU\xd23>T\xc3,\x10\x99\xdd\xc7P\x8e\xd2\xdf\xe3\x95\\kz\xcb\xd7\x99F\x08\xa2\xa3s\xce\xfd\x17\x85~\x17\x1d\x15o\x99\xae\xd1\xc1\xaaAAo\x02\xf2\x8f\x8f\x96\x97\x1f\xa8\xdcQPt\xce\xaa\xa6]\x1a\xb2\x10\xe7%\xe8Z\x83\xa5\xe5\x11\nt\xb6\x88\xcdV\x97\xe2\xfeC\xa5\xcb\x8b\x85\x88\xcd\x10\xf90\xfe\x81\x01\x05\tlr\x08<P.\xa3\x11\x1c\xef\x1a\xce\xd9\\\x834\x04\x13\xd1m\xfa\xdbI\xc3\xc9\x1f\xc5\x91\x00Z\xa6/h/i\xc9\xdaq\x98\x86\xcdj\xde\xfa\xfb\xafs\xca#A\xd7\xc0\xffn\xed\x8e\xca\xf2x\x80\x9f\xaf\x94A\xe5\x92\n\xa0\x05\xb1#\xec\x167\xbdT@A5\x93\x84\x84\xf3\xa4]\x9b\x83\x8c\xd3\xb4\xd3s\xb4\xb9\xc2\xdf\xbb5b\x84\xb11\xb8\x8bf\xb2\x04\xa3\x0e\xfeLD\x9f\x9fV\xb3\x9ac\xf5l\x14]\xe0\xbb\x96\xc1\xa1<\xa5\xaa\xc7\xfd\xda\x9f\x9dE3\x99x\xce\xa7\x0cj\xf7\x0f+\x12(,\xbcRY\xf3\x16\x9c\xea\xc4\x8e\x82!\x89R\x98\xbe\x870\xe8/d/\x0c;\xbc\xcaN\xfd\x87\xc3\xf4\xb9\xa4>x1\xe3\xdc\xa0\x8a\xc0l\x0be\x08\xc3\xfe\xff\x10\xce\xc5\xb6&\x0ca\x84\x1c`\nW\x06y\x94Q\xc2Z\x82]E\xfa\x1f\xffc}\xb8M]\xcd\xe5\x16\x88\x9bf\n\x08&\xf3\xc4\xeb\x96BP\xce\x16\xe6\x07c(\xb3\x1f\xe9\xe7\x8e\x18\xd3\xf5\xda\xedtC\xfbK\xd4oJ\xec\x9aL\x869\x1c\xb7<\xc0x\xc5\x05t\xc25\xaeQ\x95\xa6\xfc*\x9a4xwn\xa7u\x1e\x84*#ZP\xf4+\xe2}\xe3\xf2\xb8@\x87\x04\xe9A\xa5\xe2\xc2\xb5M#\xd0\xf7q\xf5\xe0\x88\xcbf\xd2x\xd2\xd8\xc8\xb5\xc5\xc3k\xda,[TAA\x0f\xa9\x9c\xdcc\x8d\xaaP#1\x002\x19oN\xbc\xf1\x07\x87 \xec\xfdL=\x97\xa7\x03\xe1\x04\x0b\x8bx\xd9\x88\xfe`\xe8\xc2\x82\x86lSq|F1\x98\x8fT\xf97<b\xa0\x8e\x98$\xc9\x14\xe2\xd2\x1c\x81\xfe\xdd\x9a\xe1\xde\xf4\x17\x03\xa0\xa4sO\x85m\x19\xd1\xf2\xe5\xd7\xe3Ly\xb1NWyMo\xa5s\x046\xaf~\x8bb\xcf\xc1N\x16\xc2\x99\xdc\xe1\x08\xe9\xf0\x1e\x99\xb30o\nj\x94\x19\xa6um7WUku\xcc\xe2\xf1\xd0\xbeP\x90\xa4\xb8\n\x16rx\x04=O\r\x9boRp&\xeeN\xf4\x82\xfe+W\xebqA\x8c\xe7:\x1e\x9f\xe0q\xe0f\'\xe9\xb9\t\xc6"`\x06\\\xbe\xe7\xdfi\xd7\x1e\x0f\xa4\xa2:\xd6\x87\xb7\xf7\x12\xab\xc9\xc9\xba}\xaa!Z\xdd~\xc9\xa2U\xaf{\xc3\x00p\xce\xb6\x19\xaf|\xb0\nqT\xf2\xd2\xcab~\xd3\x8c\'\x0e\x95\xa7\x9bq\xa8\xaa&\xed\xa3\x08\xec\xfa\x13\xea"\x88\x16o\x98\x92-\xb4-\x99MAZI\xadM\x9b\xcaD\xfe-Np\x9e\x7f\xa9p.\xc1\x85\xe8\x03\xbb\xb1\\\xa0\xea\xa1\xc9\x15\xdeZSd\x15\x98\x1bq\x0b]\x96\x83\x8b\x05&\r\xa9y\xdcT\xdc\xec\xc1S\xfe\x14\xf8\xe8\xf3\x9e\xc4\xd8/T\xb5 \x82\x1c\x81x\x9c\xa3"\x05\x8f\x0b\xfc\xd9\x19\x0fV=,\'rA|ovx\x17U\x99L\x175\xe1\xc0\n\x10b\x0e,\xceD\xa9\xfb(?\xe6A*\x16\xc0p\xce%\xe3\x80\x9c\x84\xdfgD\xe9z%\xe9\xce\xec\x9fSX\xed\xcd\xec\xbc\xed\xf4\xd48\x8322kF\xfc\x0clp\xe8\x00~2v\xa9\xcc\x91"(\xcc\xbd\xc14\xbeFX\xc2GyS\xc7H\x83\xc5\xd6!\xba`;{\xb1A\xe99ZH\xbe\xd4\xbff\xf2\xcf\x1fw-\xc8\xf5\xa3\xba\xac\x15\x84\x9d\xd2\x8e\x8a\x92\xc0\x14\xb5\x04\tG[\'\xeb\xf1\xb4_\xf5k\x1d\x0f\x14\xd1\x01\x8d\xfd\xbeHze`e;a\xc4\xc9\x80A\xcf\x9e\xc2*@\xe6\xee\xfc\xfa\xb5\xab~\xeb\xe8\xd9\xd8\xc1\t/\x8b\xe8\x84\xbf\xd7\xd7\xf9\xf1V\xccc\xbe\xba,\xd8\xf26\x84j\x08\x80\xee\x07\x1e\xd0\xbd\x1e\xe9\xa2\xb2-\xbe76]\xc1}\xc7\x9a\xc5%\xa5\xba\xae%\x92_{(e\x8c\xccTY\xf9\xde\xe1*%\xf6\x89\xf3\xddr\x0b\xdf\xc3\x97G\xce\xf9M\xe3\x10\x8c\xa4\x7f\xe1<\xae^\xb7\xf0\xe2oA\xc4\x8d+\x92k\xc1\x85\x01\x0c`YrHb\xe4"\x12\x8dx\xd3\xd0*\xb9\xbde\xd80{a&ol=\xeb\xc4z\x03C\xdf[\\y\xed\xb78s\n\x937H\xad\x9cY\xb8\xcb^i\xbd \xed\xed$/\x80z\xc6\x9c\xd5XT\xa56\xb4\xc8\xdd.\xed\x15\xc7<>\xa3)\xadv\xb1<\xb5\xb7\x0c\xe5l\x9c\x1b+3F\\\xfb\xb4,\x1c\x12\xc0\x13\xfe\x1d\xdb\xd31\x0f\xb6n\x9a`{~\xfb\x006%\xa7hhT\xfd5\'\x8d\xca\xf2\xd1.{\'-R\x06Vz7\xf1\xe3\x92Q\x05\x97\xc4Ah\xe3Z\xc7\t2\xebc\xe26\x86 M\xcfo\n\x1en\x87\xc1\xfc\xd4\xb6\x15fb\xe5W_\xe3\xed\xa6\xfdL}\xee]<\xc1\x1a\xae1\xe8\xce\xeaK#-\x9b\x0f\xd7\xad\x1c3f\xb9\xac\x12$\x7fU}\xf1K\xd9v\x80\xa5\xfc\x15R&W\x9en\x0fW\xea\xa7\x0f\t\xaa\x18\xb0I\xd3zE`\xa8-3\xec\xafL\xd2\xe71s\x14)4~\xbe;@O{#^\x93n.k\nkp\x8b\xa0\xd4Dz\xad\xad\x15\xfb\xc7\xd0\x97b\xc2\xee\xf0\xb4\n\x88\x1a\xbd}\xc5\x81\xb9)H:UtzI\xb7hp\xaeB|fZ\\\xf0\xf2\x06\xdc\xb4\xd7H\x82F\xbe\x1a\xeb\x19\x00\x9748h\xbdk\x81\x0e\x88\x19\x91\xadKvd0\xb0O#e\xc8\x8d\xf6\xb8\xa1r\x04E\xa3\xb0y\x12\x83\xf8\xeds\xd494]5\xcf\xe2\xe7u\xa3g%`7\xa4!\x1c\x0e\xfc\x116\xc5N\xde?M{\x0c7Q\x1c\xee\xc8\xa3\xcd\xb3Z\xb2\x9f\xed\xa8\x07\xe2bnB\x0fv\xb10\xcd\x9f\xbf\xf9\x92:\x84\xf6\xbc bYj\x0f\xfc\xc8\xb2\x0e\xbf\x9c\xc3HB\xfe%\xc0w\xd1z\x05\\\x1f<\xd2\x1ft!\x10\x04\x8a\xd7\xd0\x7f\x89\x96\x81\x0e`\xf3\xa7v\x0eL\x9dhO\x99\xec\xf4<\x0b\xb5\xe1\xed\x90\xef\xf3)\xd4p>\x00F))\x08\x1f\x1a\xf5>*\xa8\x9dBf\xd9\x07M\xe8\xb2\xc2\x06\'\xfc\xd8g\xd6I\xf74<g\xb1\x8fp\xdb\xad\xc8e\xe2\x9e|\x00\xea+(:\xb2\xd4\xc2X\xb2\x14\x15kI\x1c}\x835\xe5\x13\xb8&U\x19t$-an\xef\xf1\x18\xb4\xca3>\xc8\x17Mx\xfe\xa0V\xc8R\xee\x9a\x19\xc8\xebf\x8d\x1d\xcb\xb7\x8d\x9a\x19\x82D\xad_\x83\xcb\x97\x92\x0ce\xc1F\xed\xbe\x15~\xba\x9d:\xad\xc2\xa2\x0f\x88\x03\xad\x15\xbc9&\xef\xa0\xcf\xf7\x98\xf0}\tb4W\x97\x99d(Lj\x9c\xcdV\xf1\xc8M\xda\x9f\xc2\x12Z8v\xa7T\xe4\x03\xf1`\xeb}\xe3\xf9\xac\xa4KXZ\xe5\xc7\r\x99j\xce\xc4c\x8a\xdb\n\x1a\x04\'\xf6\xcfr\n\xc8\xe5\xeb\x1b\\=\xe3\x84d\xcb|\x8f;\xa1\xf9\xe2\x1e\n\x96w\x8b\xb6\x14\x15\x01\xee\x03\xef\xa7\xcf\xdcu\x8b\xf6\xdf\xa3\xc9\xa9\x01 \x0c}g\x87]\xed\xbd\n2\xb5\xa5 Y\xc5\x0c\x84\x1e\x1e\x85<\xe9\xd6\xb2-\x17BT\'\x02\xb0\x97\xf1F\xea\xdeW\x1d5Y\x9a>\xf7\x95\xfc}\xb9\x97A~2\x9e\\N\t\x17\xfeb\xe8\xf8g\x0c\xdd\x8c\xd4\x84\n?\xdf^\xf1/\xb5\x1av\x93F\x1a\xd9\xea\x92\x02:\xad\x0bE\xc6\xda\r<x\xb1\xbb\x04[\x04\xd4qD\xab\xb0\xee\x92\xed\xb8:\xef\xf7-?\xcc:\xad\t\xe59\xec\x1cs\xf7\xeci\xe9\xf4\xf2\\\xc0\xff\xec\x9e\x91\x81\xbay\xfc\x19I\x02\xba\x90\xf6\xf9\xa3P\xe9\x16\xd9\x05lE\x84\xa6\xb9v\xce\xc5VKu\xd0\xca\x1e\xad\x18,c\xf7\xbeLO~\xff\xb0L"\xa2\n/w\xea\x11\xeb:!He\xea\xb3V\xd8v\xfb\xa4&H\xf8<r\x07\x00\x0c\xe7\x15\x15\xa6Cq\xd2_\xa5I.\x1e\xa5I\x96\xd0!gv\xf5~G\xfc\xf8\x94\x04&\xdcP\x8bq6\xe6\x8c\xcfql\xf4]9\'\xff\xfc\xf4\x99c\xfc\x03\xda/=\xdc\xd5\x8c8j\xd3\xd2\x1f#\x13y\xa4Z\x8b\xbc\x99+\x0e\xc4j\xa93a\xf0yGO\xd8\x91\n\x83X\xcc\xcf=\\\xdbf\xf8\x8f\xd9\x98\x8b\xdf\x8ez\xc54\x9f\xf5\xabb$6\x82\xd4\x03y\xc0\xbf.\x0f\x16[<\x9e\xe5\t\xc3\xf3\xa9"\xb7\x845\x8e\x9b~\xe1\xc7\xd3\x94u-\x86F\xed\x06\xf8\xbeE\x1c2Le\xde1_\x1a\xc4@KH\x18\x03\x81\x8d\xdf\x9b\x00\xfdfB\x95\xa8@F\xa7o\xfe=\x0f\xab\x9c,)\xea\x99q\x9c\x1aF\xed\x88\x1a\xb6Zr+\x13f\x84\xa3\x01\xfe\xbf\xebk\x1e\xfbB\x96\x13~\x0eM\x8dR\x02\xb5\xa6\x99\xbe\xb8f,|4\xcc<\xcd\xc8\x8e\xcf\xd4')
|
1
|
+
from flask import g, jsonify, abort, render_template, request, send_from_directory
|
2
|
+
from hiddifypanel.models import *
|
3
|
+
from hiddifypanel.panel import hiddify
|
4
|
+
import uuid
|
5
|
+
from flask import g, send_from_directory, url_for,session
|
6
|
+
import traceback
|
7
|
+
import user_agents
|
8
|
+
import hiddifypanel
|
9
|
+
|
10
|
+
def init_app(app):
|
11
|
+
app.jinja_env.globals['ConfigEnum'] = ConfigEnum
|
12
|
+
app.jinja_env.globals['DomainType'] = DomainType
|
13
|
+
app.jinja_env.globals['UserMode'] = UserMode
|
14
|
+
app.jinja_env.globals['hconfig'] = hconfig
|
15
|
+
|
16
|
+
@app.errorhandler(Exception)
|
17
|
+
def internal_server_error(e):
|
18
|
+
if not hasattr(e, 'code') or e.code == 500:
|
19
|
+
trace = traceback.format_exc()
|
20
|
+
import lastversion
|
21
|
+
last_version=lastversion.latest("hiddifypanel",at="pip")
|
22
|
+
|
23
|
+
has_update= "dev" not in hiddifypanel.__version__ and f'{last_version}' != hiddifypanel.__version__
|
24
|
+
return render_template('500.html', error=e, trace=trace,has_update=has_update,last_version=last_version), 500
|
25
|
+
# if e.code in [400,401,403]:
|
26
|
+
# return render_template('access-denied.html',error=e), e.code
|
27
|
+
|
28
|
+
return render_template('error.html', error=e), e.code
|
29
|
+
|
30
|
+
@app.url_defaults
|
31
|
+
def add_proxy_path_user(endpoint, values):
|
32
|
+
|
33
|
+
if 'user_secret' not in values and hasattr(g, 'user_uuid'):
|
34
|
+
values['user_secret'] = f'{g.user_uuid}'
|
35
|
+
if 'proxy_path' not in values:
|
36
|
+
# values['proxy_path']=f'{g.proxy_path}'
|
37
|
+
values['proxy_path'] = hconfig(ConfigEnum.proxy_path)
|
38
|
+
|
39
|
+
@app.route("/<proxy_path>/videos/<file>")
|
40
|
+
def videos(file):
|
41
|
+
print("file", file, app.config['HIDDIFY_CONFIG_PATH'] +
|
42
|
+
'/hiddify-panel/videos/'+file)
|
43
|
+
return send_from_directory(app.config['HIDDIFY_CONFIG_PATH']+'/hiddify-panel/videos/', file)
|
44
|
+
# @app.template_filter()
|
45
|
+
# def rel_datetime(value):
|
46
|
+
# diff=datetime.datetime.now()-value
|
47
|
+
# return format_timedelta(diff, add_direction=True, locale=hconfig(ConfigEnum.lang))
|
48
|
+
|
49
|
+
@app.url_value_preprocessor
|
50
|
+
def pull_secret_code(endpoint, values):
|
51
|
+
# print("Y",endpoint, values)
|
52
|
+
# if values is None:
|
53
|
+
# return
|
54
|
+
|
55
|
+
g.user = None
|
56
|
+
g.user_uuid = None
|
57
|
+
g.is_admin = False
|
58
|
+
|
59
|
+
|
60
|
+
if request.args.get('darkmode')!=None:
|
61
|
+
session['darkmode'] = request.args.get('darkmode','').lower()=='true'
|
62
|
+
g.darkmode=session.get('darkmode', False)
|
63
|
+
|
64
|
+
if request.args.get('pwa')!=None:
|
65
|
+
session['pwa'] = request.args.get('pwa','').lower()=='true'
|
66
|
+
g.pwa=session.get('pwa', False)
|
67
|
+
|
68
|
+
g.user_agent = user_agents.parse(request.user_agent.string)
|
69
|
+
if g.user_agent.is_bot:
|
70
|
+
abort(400, "invalid")
|
71
|
+
g.proxy_path = values.pop('proxy_path', None) if values else None
|
72
|
+
if g.proxy_path != hconfig(ConfigEnum.proxy_path):
|
73
|
+
abort(400, "Invalid Proxy Path")
|
74
|
+
if endpoint == 'static' or endpoint == "videos":
|
75
|
+
return
|
76
|
+
tmp_secret = values.pop('user_secret', None) if values else None
|
77
|
+
try:
|
78
|
+
if tmp_secret:
|
79
|
+
g.user_uuid = uuid.UUID(tmp_secret)
|
80
|
+
except:
|
81
|
+
# raise PermissionError("Invalid secret")
|
82
|
+
abort(400, 'invalid user')
|
83
|
+
g.is_admin = g.user_uuid == uuid.UUID(hconfig(ConfigEnum.admin_secret))
|
84
|
+
bare_path=request.path.replace(g.proxy_path,"").replace(tmp_secret,"").lower()
|
85
|
+
if not g.is_admin:
|
86
|
+
g.user = User.query.filter(User.uuid == f'{g.user_uuid}').first()
|
87
|
+
if not g.user:
|
88
|
+
abort(401, 'invalid user')
|
89
|
+
if endpoint and ("admin" in endpoint or "api" in endpoint):
|
90
|
+
# raise PermissionError("Access Denied")
|
91
|
+
abort(403, 'Access Denied')
|
92
|
+
if "admin" in bare_path or "api" in bare_path:
|
93
|
+
abort(403, 'Access Denied')
|
94
|
+
|
95
|
+
if hconfig(ConfigEnum.telegram_bot_token):
|
96
|
+
from hiddifypanel.panel.commercial.telegrambot import bot
|
97
|
+
g.bot=bot
|
98
|
+
# print(g.user)
|
4
99
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
100
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|