hiddifypanel 3.0.0.dev64__cp39-cp39-manylinux2014_x86_64.whl → 3.0.0.dev65__cp39-cp39-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/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 +6 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +67 -69
- hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev64.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.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev64.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
hiddifypanel/panel/user/user.py
CHANGED
@@ -1,5 +1,235 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x03\'\x00\x00\x12\t\x04\x00\r\xc0c\xe2L\xe3\xb0\x92<\x01\x17\xfb\xbe\xdc\xaf\xb6\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x86YjG\xc2\xf0\xfeI-}\xb1\xd0\x98\xff\xe2\xb1\x1b\xc4\x9aq\x81\x91\x99\xc1\xdf\x84\xafD\x80\xa0\xa9\x05\r}FV\xbe\x1f\xf6&\xbb\x01\xf4\xbb\x94\xc0\xd9\xa0\x14\x9c\xea\'-,\n\xf2O\xa5\x88q\xb33\xc1\xff\xf4L\xa8\xb0\x17\xc5\n\x9d\x14\xdbmC\xc7/\nm8\x91\xa8h\xb0A\xa4\xe3\x8fyb\x17M\xca\xce\xd2\x85\xb5V\xcftRz\xbf^qq)\x92\xe5\xba\x9a\xa1~+B\xfbD\xfcf\xaf\x98uz\x1b\x9b\xc9A\xfe\xd2\x86\xa9\xa4\xd6L\xffK\\u\xb0t\xe97\xa9\xeeU\xc1?h)\xd0+\x85\x16\n\x8a\xbe\xce\x06\xc1:\x1d\xa9*m2,\xef\xdf\xfa\\\x85\xa9\x8aq^\xbcl\x92_\x8fg\x9f+?\x15\x96\xe7\x85\xfe)\xe9\xd3\xc8mX\xfa\xfa\xaf\xee\xaf\xc2\xfc\xfe\xd1\xe5[\x9fz\x95\xf1x\xbc\x8dza\x14\x9f\x97P\xaf\xcc\x99\xe8C;\n9\xdbl\xaag\x1b\xdf\xf7\x8b\x08 \x0fP*\xb6x\xf5?C\xc0\x1d\x81\r\x131\xc0\xbce\xd7\x8b\xaf9hWc\xc01<\x10\x1c .G\xdd\xbbl\xc0.h\xab\x17\xbf\x0e;Pd\xc0 \xdd@\xaf\x9a5\xa6w\xde\xae\xf7\xad\x9d(P\x003>\x9a}M\x18H`\xdd\xe3\x93b\xc0%-\xc7\xea\xa1\x8f7\x9a\x93%W\xac\xe6\xa6\xc1z\xc3\xdc\xd7\xe4\xe2D|\xdf\x82\xfb\x8c:`\xe9\x10|A\x97,\xab\xe2\xbc\x08i \t-\x81;5\x8f\xab\xed\xf0\x1f\xe4&\x13t\xcb\x04]\xff\xe9\xd2\x8aV\x01\xad\xadF|\xfb\xa6\xce\xb9\x1b\x14X\r\x94?\xeb0\x1a\xfcw\xbf\x83u\x03\xe9a\xb2LD|\xf5\x9d\x9c\xa0\xdf6\xf8\x93\x9c\xb0Y\x8b0\x9a\xf0\xb1\xd0o\x17\xaaS\xffTP*}Y\x97V\x04x\x0bt\x96p)\xa0n\xbf\xa1\xe3\xe36\xc5V\xbe[\xc7\xf2\x12!\xcb\xd1\xc2\x82\x07-\xb9\x87Zz\xbd\tQ\xfa\xd1\x85\x02\x18\xc5\xbb\x14 O\xd6\x9b\xba\xdb\x83zx$V\xbf\x117\xae\x84\x00S\rsV\x8d\xe4o\xd1\xbdc\xcbf\xdb\xba\xd4o\x1e0C\x01f\xa2-S\x8aiX\x00\xd1\xdb\xb5\x02\xdf\xa1!\x1a\xfe\xc0\xaa\xf1\xa3\xd9\x14?\xe6W\x84LO\xd5\xdc\x16\xa3\xcab\x9e\xbb\xe1\xd9\xb3O\x99\x89O\x9a\xd5\xba\x14\x9c\x16\xc0\x7f\xff,/\nU\x13\x01W\xa5I\xf9W\xeb\x99\x87\xb2\xd4\xd4+\x9c\xbdA\xbdn\xa3\x1d\x9d\xc5\xa2\xe2\xed\x08\xfb\xde\xc74\x86\x8c\xdb\xca\xec\xf6\xaed\xd48\x84\xa5\x17\xe12\xc1"\x9fl\xb1V\x97\xab\xa9\xa7\xb5_\xd4\x06h\x97Uz\xc0\x95DH2\xe7^>\xb0\xcaZ\x15\xf7\x0b\x1cm.\xfc_\xe2\x92\xa7\x8f[<\xfc^2\x07\xd7\xa7\xa8W)!\x963\xf5\xd9\xa9\xfa^mv8\xa9\'($Y\xe8<\xbc)|\xcc\xe6\x18\xbfM\x9a"w\xed\x924\xd1\x18Q\x15\x8b\x18\xde\xa1\xba\x05\xb4\xf6\xae\xcboX\xf1\xe8\xd3\x80>\x8da\x02.\xf4"\xf068\x12\xc1\xc1!z\xb1\xe7\xab\x96\xbb\xf0L\x0c8p\xc9\xad\x05(\x8d\x87=\x12\xdd\x9a\xdf>\xa5y*\x88\x15g"+\x1c\xb4\x9f\x1b\x94D\xfb\xb7\xef\x9f\xc8\x13\x97J\xe7\xf5_\xa0t\n\x8c\x1bp\x07u$\xda\x03\xc74\xc7tTM\xc1}\xb1\x15\xa0\x98u\xf4\x08Y\xad\xf3\xa9N\xb1\xd1\x05\xb7\xa0\xcc\x8a\x96\x18\x14\x94i)\xb6\x88\xe15\x95,\x02\xc8F\x9an\xe7\x898\xe2\xd0\x8a\x95\x0c\xd1f1=\xbc\x893\x0b\xf7\xc7\xf8\x91\x87b\xca;]\x9f?\x88\x13\xa3\x89\x85_\x13\x82\xfb\xa0~\x98a+\xb5sj\xd7\xcfU\x94O\x02\xbe\x1d\xd7\x1aY\x01E\xeb=\x82\xd5\x1a\x18\xcaw\x86\x08j\xeep\xb6I\xbd8\xa22\x0f\x9c\xee\x8d\x7f\x8b\xdfy$\x97?[>\xb0\x0cj\x180k\x07\xb60\xfb\xff\x8c?!\xe82z\'C\xff,\x8e\x8c\xb4\xcf\xbf\x05\xbb\xee\xb7\xe5_\xa7\xbb\x8a5\xdd\xbe\xac\x8e\xc1\xaf\xd6\x93\xaf\xbc\xb1\xd3g\xc9\x13\xa4\xeaZ@\x93t\x1d[\x08\xe6\x85L]n\xe7XmV\xb8&\xb5\xe0\xb0\x07$\x90\x07\x97\xd1YM\xb8\x12\x8crI\xd7\x8a\xf6\x97\xc8\xcc\x1b\xfc\tl\x92\x17\xea\xc8\xaf\x1d\x89\x15\x88\xf4\xacX\xe5\xcb#7|YM\x879\xf7\x0c\xc7\xf5|H\xf4\x7f\xcbQ\xea"ZG$\xbcS@\xae\xe4\x9f\xd1\xca\xf1\x94\xb2\nHT\xf1\x02\x15I\xc3f\xb9\x96\x19\xfb\t|\x9a\xbb\x13\x17\x0c\x1ew\x0c=\x8b\x1a\x9d\x0f\xbe8K\xf6\xa8\xe4qz\xbc>\x01\xab\x0cx\xcc\xeaH!)\xe3@\xdf\xbe\x9e\xbf*E\xa8\xaa\'\x8c\xca\xb3a\x8a\xd3\x830)\xaa\xd6GJZ\x19 \xfcB\xa3\xcd\x8a\xed83]\x19\x0c0\xbd\x8c\xa6\r\xc5\r\xe3\x0bF\x92\xdb\xd7\x1c)M\xb1\xd4\x93\xc7\t\x8a\xeb\x89K,\xf2\xbbM\x01\xbc|K\x9f~\x16\xbe\xa2*\x11m\x91}L\xe4\xdf+\x03w\x9a\x12#\x94g\x07\xfbw"\x0b5r\xa9\xac\\gc\xce\xde\xbf\x8c\xaf\xd6\xc6\x8bN\xe7\xa3\xfa\xc4\x1f\xd4 \nb\x96\xfa\x139\xf2is\xbd\x08Y\xa4\x82\xc4\n\x90\x96\xb0I\xa5&\xbfHj*\xd0\xa3\t,\xfa9&7\xba\x0e\nc\x9e\x13\x84Nc\xd4\xaa#=%\xa0\xa4\xa6\x93\xc6\xef\x1dZh\x8b\xb2\x07J\xae\x1d-\x97\x1f5\xe9\xc7,+\xdf|\x83\xf0\x84\xc8\xc1\xaa~\x16\x91\xd8%\xc0\xbbo\xa7\xdfR\xccx#\xa6\xf9\xc7\xe6,!\xf306*,\x8c!x1\xa2\xb8Q\x85\xacg\xd7v\x99\xd4\xe1\x96\xf1Z\x1a5\xcdH\xb3dh\x8a\x86\xf5H\xf0\x1c\x83\xd7Ox\xb81\x8b"\xe3\x8c\xc7\xc6\xcc\x8b\x8f\xc9+\x86q$&\x1a\xd7\xad\xc5\xbe\xa0\xe7\xd1\xff:+\xab\xb4K\x89}\xaf\xb9\'\xaf\xaa\xa8\xda\xfb9N\x82x\xda\x88_.d\x03h\x86\x87\xf9]\xd2\x89\xad\xf6\x11u\x12\x0c\xdb_@\xf0\xfe\xd5v=F\x10\xad!\xfa\x9c\xebZn\xd3@\xe3\xaaP\xeb\xc7J=x\x01\x80N\xb9-\xe4k0w\xd0O\t\xb7\xbbd8\xb7H,\xabR{\x82\xbc\x9f\xab\xdc\x8d\xf1%\xc3\xc5\x17\xb3eh\xfc\xf25\xb6\x85\xccAO\xafN\x02\xcb\xfa\r\x8a\x97\xf4\xca \x059\'\xa2v)5I\xcd\x82!I`#@%6\'\x16W\x06\xde8\x0c%/\x02\xc5|\xc8\x96U|\x90 i\x1aa\xe1\xf5\x14?r6\x8fZ\x8a\xecz\x11\x076\x83\x04\x06~\t\x14\xe8L\xb6F\x01`\x88W\x98\n\xba\x1f\x067\xe4\x1cdZ:\x12u_\xa6`\xba\x1cJ\xb07.-3\x1d\xdcY\x8c Y\xcap\x12I\xbf\xd4\x1d\x0bC\xf3\xb9E\x16"\xa2~\x95\x00\x93\xe4\xe3rF\x865\xcdq\x10\x08\x06c\xa3\x8c\xaa\x8d\x01X\x85\t[\xd11.\x00\xd2\xa6\xf3\x8e+Q\x846P9\xc3\xcf\xa1;<\x9b\x14f\xcd;\x98\xe0\xc8[n\xf0N9F\xe6\xd6Az\x0c\xbc\xe5{r+\r\x02T\xe8;\x9f\xdc\x8e\x10\x7fb\x08\xf59\x11\xdbftW\xda\xef\x8aV\xd1\xd7\xe5\x04\xcatG\xd8\xa0\x17\xb8~\x1a\x18\x95\xf7Q\x91J\xae\xc5\x04\x89\xc8}\\\xd8\\.\xf8 \x05\xf5D3]R\x8e\xef\x9fx1D\xfc\x95dh\x96\x93\x80\x96\x7f\xb8z\xf6\xfa\xd2\t,\x91_\xe1\xb2\t=4\x86V\xb9\xda\t\xee\xc16\x9e\x03\xa10\xed\xd1B\xdc\xdd-nl\x9a\x1ci\xd2\xb3\xe9\xe5\x92b\xc9D0oI\xbf\x0e\x86\x8dATq\xc0\xb5\xad-\x86\x8c7\xf7\xba\x89\xb97[!\x85yz9\xdc2I\xe6\x00q)\x95\x98m8\x12\xb1\x016\xf9\xab\xda\xd5\x18\xfah\xa3,\xdc\x07\xc9\xef\x90\x95\x05\x90\xcbE\x02\xa6H\x8d\x08\x8a\xd6q\xe8\t\xa7\xf0<\x1a\xd6\xbd<)w\xaf\x03\r!\\\x01\xca\xa6\x0e:\x88\x95\x1b5\x80)\xbb\xec\x1c\x0c\xee.\x086E\xba\xa4\xa9E,\xd5@?\xcd+\x1dh\xca\x01\xa5<Kb3\x9cjy/\xe5hkJ\xeb\x8drH9\x193\x80\xb7?\x8bg\xe2\x89\x00\xfd\xc8\x9f\xa1\x11\xb9&gg\xa3|\x13m4Z^\x1c\x02\xd6\x03<\x07\x99\xa5\x04\x85\xfb\xb3`a\xc9\x9b\xf4\xed\xd2\x97\xec\xe2\x97\xf1\x87\xd4\xc0\xa8\xb6\xf1\x17\xf2\x17\x0f\x10\x82\xf2\x9dvj+\x95&\xe2.\xe1\xcf\xa9A>\x9eC\xb3zj]\xb3qU0\x9d|\x8c\xf2\xef\x8b\x89\r\xd1]\xc2\xee\xa1\x95\xc5!\xb5Y\xe3f*%\x93< \xcd\x17C\xf18\xd2\xfd\xcd\x9f\xcb\xad\xac\xc1\xfa\xcd\xcd9\xa3\xd8\xcb\xf4\xca\xf7\xf9\x90\x82\xe4\x06\xe5\x1cA\xc1Cn##H\xaf\xd6\xb7\x12\\\x1e\xb7S\x1b\xab\x10\xdc>\x99X\xdb\x08\xf3\x8e\x9d\x9c\xb2\xe4\xf76Y\xbe\x00z\xab\xa9\x0b\x87\x95m\xb9r\xa1Lj\x8f\x07gd\x12\xc6\xa3\xb2x\xd8q\xa7\xd5\xa4\xc0[PwZ)$\x16\x19\xec\x9f\x02\x93(\x99\x9e*\xba\xb1\x17\xa6\x8d\x91Zb\x80\x10\xb3k\xd3\xd7\xa2bmU\xd15\xc8\x9fc\x1c\xed\x8eF\x12eHt\x8e\x84?k\xe8`\xe5&0M\xa1n\xd1\xda]\x1a\x10^\xe7\x87k\xe7s\xbb\x0b\x11\xb0\xf7\r/\x0b+\xd2\xb6x\xc3\xd6`\xa7lu\xc6\xfdQ%\xbeP\x11\x1d\xe3\x9e\xe9\x9fX\x93\xdd!\xa2AT[\xf4+\xf7\x1d$\x86\xa5\xeas\xe9\x01\xc8\x88\xa9\x06\x17\xfb=|\xe6\x85\x99\xe4\xb7\x17t\xd3\xdfE\x03E\tH\xa2\xe0\xd8\x94\xff%\x84|o6\xd6 \xa0ow\xabos\x1a.\xd1aHJ\xfb=\xebW7\xed\xa93\x0e\xbe\x05P\xb2b\xb5\xd1\xda\x1a\xc0\x94\xcb\xabNxZ\xe9\x1d\xebZ\xcac`\x19\xf9_!\x88\xdby\xfb\x1d\xb8\xe0\x14Y\xc4e\x1a\x83\xf2z\x07\x97Z\xaau\x02\x16\xf8\xbcC\x18{3\x0ce%ZF\x1an\x91\xe0~&\xab\x8b\xf4\xa5\xaaW[\xbe-\xe1\x19>,\xae\x87\xb2\x8f\x88\x19\x8b\xc13\xc0\x18\x8d\xefNo?\xd1\xb8\x04\xedAcA\x14\\P\xac\xf9\x1e\xcc\x07fQ\xb0\xc2q%}y\x12q\xdb\x1f\xb3\xd8\x15\x80\x9b\x01J8vI\xd3!\xccW\xfc\xb20\xbde/\x11\xd1x*\xba\xd0\x9b\x13\x99r\xc7\xb2\xe7 \xf0\xdbm\xe8K\x80\x86 \x01&TA\xaa\x1d\xf0\x0e\xc1\xd4K\xbcX\xbd\x8b\xee$\xfd\xf7urX\xa71\xd3$\xcb)xM\xe0\x19\x07\x9e\xe00\xe1\x7fL|\xd4\xa4\x950\x02.J\x13\xae?v\x00\x02\x059\x86\xa1\x8bl\xa8\xdb\xd0\x11\xc25~\x9d\xefvtU\x9f\xb9>Q\x97\r\xcb\xf4\xe0+\xfbQ\x888\x81\xed\x9f\x15Kx\xe7\xd1\x99t\xc3\x14\r/\xbf65Y\x0cc}\x80\xc2\xcf\x08\xc9UZ\xa2\xd8.\x90\x0b~\xfc\x95>\xae\xf7\xb5c7\xac0?\x97\x0fc\x02\xc7\x9c\xf4n\x18\x8c<#\xb2\xc2\xf3\xcd\xa7\xb8!\xc9\x81\xffeLZ\xfd\xff$\xb99\x85\xc8AI\x86\xbf,#\xbe~\xcfj/\x0ep-\x8e\x14x\xd4\x1ck\r\x10\xbf\xd7\xab\xa1\xff\xd2\x9cq\xf9V\xcb\xcd\xfc\xfa\xdf\xc1\xbe\x05\x93M\x9d\xda\xbf\x87\x96\xf6\xc6\xd5\xfd\xdf\x83\xfaY\xc0\xc9\xbf\xf4k\x887j\x9f\x11\x00V\x86\xb4\xd0\xbb\xe0\x87\xa0\x0b8\x90w\xddY\xae^\xb8\x12\x13 q\x82\xd3\x97\xf1j\xb9\xd4\x9d\xb3\x03@\x0f\xed\x92Q\x15i\xecf\xef\xa1D\xa6\xd5oj\xefc\x89\x8a\x0c^?\xe82\xd2\xf4\x86\x8eT\xec\x8e\xb8\xaf2\xbe\xa5\x93\xa3\xfd\x90r\xad5\xc5\x96\xce&\xaeV)0\x929<\\\xe4\xbd&\x99\x9b}H\xcc\x8e\x8f\x7f\x10\xe5eSr\xf8.\x9e\x8aS\x1d5\xec,\xdcU\xcdV\xae\x05R\xd3\xb4\x9e\xfdq)*\xc9\xd3\xb5\xd7\x8d>\x89r0Z8xJ\xdb\xcf\xa9\xb7\x8cs\xbeu\x8c\xefi\xac\n\xcc\x03\xe8\xd5w\xd9\xd0\xea\x0b.\x8e\xf2_\x9c\xfa=/\xea\xcf!\xefV\x0c\x82\x19\xa0\x82\xbc\xe4\xed\xd2"\x04\x16\xf7\x9b\xd1a\xa1\x1f\x8c\xab\xaf/\xeb\x14>\xa3\xc1\xa9r{\xc3\x84\x97\x1esn\xd5\x14g\xf0\x92\xc7\xf1x\xc3S\x8f\x10\xb3y\x16\xa2\x89:nH]\xe2T\xce\xeel\xda\xf4\x9f\xbd\x97\xb9\xcf\xc6\xbc\xd7e\xb9\x95\xcc\xd9;g\x0fG1\xd4\xe0\xc1\x0c\x11A\xf4\xbb\xf05q\xd1\x8c/\x9c\xc4\xadtx#(\xbe\x01Y\xaaq\xdaQ=3\xc9t(\x1bA\xc6AE\xb2+\xae\xd3@\xc7\xd3]m\xa9&\xbc\xab\xbf\xe2\xf6\x01.I.\x98\x0cb7\x96\x87\x92\xce 7s5\xc0"M~\xd94P\x15I\xe9\xe8\x19\xb2\xc5\xce4\xf8\xc3\x8cT[\x9b\xc7A\x85\xa1\x9eo\xadK\xcd\xdbg\xba\x84i\x84:\x96\x0f\x1f\xdf\xb3=\\\xa8\xba\x96 \x92\x15u\x8c\x89\x8e\xceH\xe4lI\xaeY\x07\x14\x9dZ)\x93@\xe2\x95\xc1\xaf\xde\x9a\x1c\xac\xee~c2\x06_\xd2\x08\x86\xd7\r\xa8\xdb5>\x06\xf2\x9b\xd3\xb3\xd8\xfc>\xbbW\xb8\xd2H\xe1\x11\xb0\xa4`i<\xf4v\r\x0e\x924J\xbb-\xf8\x10\x04a\xcc\xd2\x0f\xc0R\xd6 0\xffs\xf1\xb3\x07&\xbb\x9c\x04\x15\'R\xf8\xe8\xd0\xaa=\xd6\\\x8b\x840\x88.o\x85\xa7/\xe6\xaf\xd2\x8d\xaf\xfbX`\xd6H\xc7p\xa4f-Ok_\x1e\x93\xd54\xc9`4\xa3&@\xb8\x1dR\x10\x08\xe3\x16P:\x12\xdf\xb8|,U\xb1V\xfe\xc8+\xff ~\xd2\xcc\xb7\x03\xa4\xc5!!\xe5\xcer\x9b\x02\xe3\x96\xcc#\xe7AK\xf1\xe8\xe7\xcb\n\x95_j<\xfc\xce\xbc\x00J\xef\xe5,\'5\xc2\xf7f\xf60\x15Y\xca\x94\xab\xd5\x0fb4\xde\x14\xf0mK\xad\xb2S\xe8\x9d\x98o\xa6\xa45Ka\xb1q\xb3\xed\xf3\xca[\x1dN\xcd:K\xde\xf2\x1e\xcdf\xb9\xd1Z\x80\xc0\x15\x15\x11\xe9x\xd7\x8eX\xfc\x93\x1d8i\xb7\x010\xf9n&\x1e3\\#3m\x97\x02\x8a\tu\x9b\x17\x8e;\xc0\xc997\x93\xc2q\x7f\n7\x1e^\xbf/\x19?\xc5\xd5\xce\xd2BTsPY\x9f\xed\xce\x81\xb7\xa7\xba\xdai\xc6\x14\x80A\x03\x8fY\x96\xbd\xcf\xd0k\xb9\xe2\x1c\x9b\xe6:\x89\x1a\xc4\x86\x15\x8a\xe4\x7f\x10\xbf\xf0\x06\xa6\x82\xe0\xe4a\x08\xf5\x86g\x16\x89\x7fv\xb3\xca\xaa\xd6\xdb\x1c\xf4#\xd3!\x03!U\xb4\xbfM\xbf\r\xb1X\xcd5X\x8f\xcf\xaaL\xd1\xaaKA\x7f\n\x0b*\x9a{\xf7\xa4\xbd&\xc7M\xfe\x1f\xfb\xcaI!b+\xa1\xdc\\\xd6m\xbc\x14\x13\xc8\xa1\xca\xbc7?\xcad\x89\xd0\x94\x95\x14e\xfa\xb7\x98pi\xe1\xaa\x98\x1c!\xd1EY\xf4\xc3\xe4>\xfear\x16X\xd8O\x04iO\x98\x1e\x90{\x9a\xb5\'669\x95\xf4\xc3q\xe9U\xca\xd7\xe3\x11\x85 \x88\xc8x\x8b\x0f\x95\xe5Q\n\xcd\x1c\xf9\x12\x18\xdf/\xdcIgV\xb3\xba\xe5r\x8a\x82.Rt\xcb\x9b\xb5\x1f\xef+\xf3\xcc\xb0\xd6T\xe4~\xa73 \xec\xb7\xbd\xfb\xfb\xb3st\xb7j\xa4\xd6vb#f6\xa3\x7f\xa0\xdd\xd6\x8e\x905_\x9d\xaa\x94\xec\x10\x00\x08\xa8\x88\xdeu\xe0\xd2\xa8\xde-\xc7"\xe3\xd8\xa4\xfer\x96\xf8A_\xfdV\xc0\x7f\xf1M6\x8a\xe2)\xf9_.\x0b\x03d\xd9\xf7f]5k\x18o\x92\xac\x996P\xe8\xc6p)\xd2?\xd5\xbb$\xfbp\x80A\xd1\x86\xee\xc3\xc8\xb7\xb0\x01.I\x85\nP\xf4V\x87g\xc5\xc7\x94\xff\x91\xde\xcf\xa9\x99~\x12\x8d\x10\xc89\x1d\x99\nx\xeb\x9f\xeaK\x93R\xb6\xba\xd1\xedjrA\x08dw\x96*6\xf1\xc3\x91\x17\xfa\x9b^\xf8\x95\xb9\xd4\xafv\xbe\x0b\x900#&\x13\xb6\xa3\xe2\xe2\xfct\x15}\xec\xc4\tkw\x8b\xd3\x84\xd9/P\xa6\xf7\xf5\x0e\x93\xf5\x1a\xa4\x17\x9fJ\xfcZ[\xbdK\xbf\x87\xed)5\x8c\xfa\x83\x1f\x19\xad\x08\x01\xaecC@}\xadL8\x1d\xaf[J\xe9Ap\xb9\xbe\x8c\xfe\x9f\xf6\x0f\xbc\xe6\xb8.+_B\x90\xec4\x8fZns\x1f\x827\xd0\xb4\xae\x14_\xd3\xf7]\xd8DR\xcb\xdb\xd3L$\xa5\xf3\x1e\xa9\xb1\xf4\xc5@\x18x\xb1E\xba\xb0lf\x1d\xd5\xb2\xcd\x91e\xce(\xf6\xc5\x9f\xd8;\x9cG\xa2\xdcr\x90\x9bvSw\xe88=J\xb7\xc7\xf7\xf3Y\x9d\xbf\xf4\r>\xb1?I\xbdB\xae\x9fIn\xbcMN6\xd0w\x17\x81v\xc9 [/w:\xf0\xb8\xddj\x80\x11\x15a)\xe0\x02\xb7\xba\x07\xb0\xa4\x81g\x82\xaccS\xb0\x1a \x19\x9a\xb4s\xd6f\x87\xf2\xb8~\x0e\xf9\xb4\x84M>\xd7\xc0\x94\xc0\xc0\x88\xeb\xb9X\xff\xc4&\xd7vI\x05b\x00!\xd4\xe3\xd7\xb6\x8f& \xe1"\xee\xfca\xa6L\xce\xab\xa4\xed\xdf@\xa5\xf5\n1\xf2\xce~\x13\t\t\xefyZ^\x0b"#U_\xfda\xba\x08Rw\x92#\xd5\x12\xd2\xcf~5\xc9\x1e\xadd\xb3\x8f\xe4\xd1\x1d\x8bS\xff\ro\x84\xc6\x02%\xed,\xa9\xbd\x05\xa4\xd3b\x0bN\xe8\x97u\xb4c\xe5\x94\x93\xee\xcf$K}\xb4\x8b\x85E\x01J\xeb\xfa\x07P\tf\xee\x7f{\xb1\xdd~Y\x9d\xea\xa8=a\xad%\x9c\xc9\x1av\xd1\xf8\xa0\xb1\xc7\xc9\xf9\xc3\xb0\xcb^\x0b:\xc6)"\x01\x82\xed\x92h-T\xbd\xc1(J\xe1\xfd\xd0D{\x94\r\x82\xb4z\x1e+Vb\x99 \xae\xfb\xcd\x07r\x9epA\x96v6\xcfw~p\x887\xc0\x162\x11!\xa8aa\xc6\x03\xa7\xd5\xd5\xae\nS\x15\xc2\xad\xcf\xb5\xe3K\x90\xaf\x1c\x8b\x81\xe5\xbb\x03\x01\x80\xf8V\xbd\xac~\x1f\xf3\xd1l\x88&\n\xdb\xc5\x06\x11$\xda\xd8_q5mo\x10]\xd8\xca/\xe3\xc6\x16\xf7h\x8e\xc5jyg\x8fS\xfb\x8bH\xccD\t\xf5~-\xd4\xd3\x9f\xadv\x9b\xd2\xac\xbd@\'\x1ctzUX\xbai\x17\x1c5\x92\xc4L\x06\xab\x95\x10\x81\x8f6a\x11g\xe2M\xf0\xe7\xae\xf4AM\xf3ERve-\xedJ&[\x1c\xacb\xd9\xb4\xd4\xc9\xd8\xb9\x17\xf1F8A\xe1\xccyF\x8d\xb7\x80$\x03v\xd9"b\x15\xbb_\x1d\x8a/=\x96\x96\xb7\xc7\'\xe2\xde\x1d&K\x87\xba\x11\xe3\x85\xf2L\x85\x87t\xd5\x07\xc0\xf8\xc5\x89r\xd5w\xc4\x8c>\xc3\xfb\x0e?\xba \xc3b\xe2\x9b\xc0"&\x04\xd9\xbe\xaa\x94\xf1\xdd\xed\xe2Ss\x01\xc9\xab\t\x80\x858\x14\xb0&\xb8\x01bI\xf1\x8d2r\x87\x1cs\xe4F\x0f^,H\xfe0%\xe8\xcfCcU\xcb\x16\x0b\xe31I\x17\xdc}]8\x08>\xb6\x81\x16\x9b\xa0M[\x0b\xe66\x0c\xbf\xe7\n6F\xa9E\xe4\x92l\x92\x0b\x98\xe0\xa8\xb1/\x99Jx\xb4\xc7\xbc\xc4\x8b\xba\xe1\xaa\xce\xdfz\xa6\xb0?\x8e)\xa6\xd0vTzO\x83\'\x84U\xf5\x93\xa0j\'\x8e?\xf2\x0c\x85\x11\xf3\xfc\xe8\xf6\x126%\x8a\xe2k\xf9h\xdc\xa7*\x9d\x7f$\xcaZ\x04\xca\xfb\x8f\x91w\xdbK\xa2\x08\xc7\x1b\x1e\x81\xdd\x05\x13\x9d\xd7;\x12\x95F\xfc\xfe\xa2\xab=I\x05\xbeS\xb3\xbd\x80\xb7@\xf3}.\xc1\x7f\xb5\xd1n\xc7\xc7\xd1\xdd\xd2\xd0\xbeq\x92\xf6I\xaa\xb5.\x90P\xd0w\x05\x94\n\xccDD\xeeT\xe9\x92\'\x82`\x04\xf9\x1b\xc7NC\xde\xf6\xc33\xe1\xc6P\x04\xb9\x07K\xd6\x12\xa5P\x9f\x02\xacqaU\xe4\xcdY\xd4HY}OP\xb9J\x87\xc1\x10Wh\x14\x96\xfc\xdb\xd5u\xd2\xa0_\xb9\xed\xb3\xc3\x9f\xfb=^K\x13\xbf\x07P\xac\xa6\x9f\x01,`\xeb\x0c\x9c\x7f\xee\xe6Ln\xfem\xaa\r1A\x9b&g\xed\xab\xcb\x01@+I\xf8\xdc&\x1cV\x0cT\xa1\xe6X\xb7\x17\xf4\xee;\xbc\x90qFN|\xf0\x86\xd1\xdb\x15\x00\x8a\t\xdf\xf4\x14\xa1\x8e\xceR\xfb\x9a\xe1\x89;\x15\xc7\x9eK[\xd9UZgj^\x08\x12|O\xde\xd7n\x00]\xe6\x94\x9a\xb4\xe9\xd3k<at\xda\x81\x05\x99\xc7Wf\xbf\xcb\xf8\x17Q\xd5\xe2\x9f\x86{\xed\xa1OC\x8c^\x10z n\xc7\x92\\\xe9\xaa\xe0\xbe\xb4\xdd\x08\x1d[\x0c\x10\xed*c\xa8}|\xf9\xaf\xe2\x1a&2\x8a\x18\xa7)k \x12x\xfeYL\xdc\xf5~\xc16(\x1f\x04<\x9d\x8b\xe2\x07x\xd1\xde(\x87=Y\xbf\x05\x17\xfbD\x11\xc9\xe3)\nF"\xe4\xf0P\xf72R<.8\x8e\x0e\xba\xb7\xddcaF\x9f\x83J\x0e\x19\xab\xb4\xb1\xef\xb1h\x8e\xdbJ\xbe+R@\xa5O\x1a\xdb/h+4\x1b@\x00\x01\x0b%\xc7M\xe2o"\xdb\x9fo\xdf\x1e\xe8Q\xb3\xaa\xc6\x9d\x97\x1c\xd0e\xfe\xb3aG\x9c\x168\n\xae\x96H&1\xa2Af\xe02\xe0d\xe3n\xc0\x1c\x0c\xc3)$\xf5\x1f-\x1c\'2\x05\x06Y\xf12Aw\xf0\xac\x14\xa9\x8f\x8fR\xbd\xfa\xd7\x81\x98n\x8b\x17\xfb\xd32-\xfd\xeelcK\xe2:u\xa0#\x7f\xa2|\xe3L\xacC\xd3\x91\x89\xa3\xb9.\xd5\xfd}hf\x1d\x01\x9b5\xe7\x94\xd4\x7fo\xc8Q\xdai.2\xc9\x06\x1f\xf8\x06\xb1\xd0\xf2\xff\x1cw\xe1\xf0?\xdfW\x99[r\x0c\x91\xb7@-\xccn\x87\xb6T\xad9=\xe1\xff\xba\tO\x90\xc9\x88\x7f\xb5\x04\xa0\xec\x91h\x15 \x17+;\x1c\xa08\xf4\x0f{0\xee\x86\x9a\xeaX\x85\xef\x91K\xb0y\xc5\xb2\xb4>\xb3\x85y\xb1N\xcd\xcd>i\x8a].A\xba\x157)$\xdb\xf1;=H;\x08\xed\x18%u\xd6\xc1\xb8\xcb\xa4(Fg\xa6\xad)DQ\xc3\x97\xe0\xff\xd6#~\x13WJh\x7fE\x19S\x13\x00(r\xcb\x83\xd2\x91 C\x7f\t\x8e\xe5\xd6\xea\xc6\x86\xee\xbbZ\x9c\x0f\xfau\xa662y\xf1\x02\x04\xdbe+\x84k\xbc\x07\x08\x14\x17\xca\x97\xdc\x87\xb1\xd4\xb3V\x80\x19!\x865\x8cEK\x97)&\xe0k\xf2=\xd4\x9d=\xd6\'\xb7\xe7H\xd1|4\x01\xec\xf7\xf3k\x87\xda\xf2\xf6\xd1g\xc14\xc6[\xc1>\xe6\xe6\x98\x0f\x1eq\xf8\x04\xe7\x94wm\xda\xff\x97\x91\xf7\x9a\x08[V\xdc\xbc\xa9\xb6\x8a\xbb\xd0\xa6\x1eJ\xbc6\'#\x13\xc1;8]~\xf4-h\xff\xcd\x99\x9f\xdd\x03\xc7\x1c,\xa4\xaf\xf9\xff\xf0\x84\xf7\xedM*\x11~ \xe5Y\x07H\xa4lIZ\xb4DT\\d\xb1fm*f\xf1Nc\xda\x80\xe4\x10c?@U}/\x01\xe4\xb3a\x1c\xc1\xe5{\xbcK\x99I\xe7\xe8\xc8\xdcbE(\xb5\xd7{\xc8\xef\xf7\xeb\x96\xec\xcc\x80\x96\xc6\xe1*S\xb3(\xe0\x17\x95O\xc8l\x7fC{\x1d\xe2\xfc=\x8b\xfeo\xc1=\x8e\xed\x99e\xc0\x86\xad\xa4\x80\xe0J"\xcb\x0b\x8e\xf3\xadD=\xffcQ\xb2\x88\x9f\xf5B\xdd \xf2m\xf5\xfa,\x06y]&\xf8\xfe\xffM\xa0Et\xeb\x11N=v\xdb)\n\xb1+\x01\xb0\x87\xdb>2\xa4\x9b\\\x9c\xf5\x98aA\xd9l`j\xdf\xf5u\x18\xb8\x07sX\xa7\xb2r=\xa8\x040\xaa\x96\x0bK\xb3\x08\xbb\xefi\xab\x1cCd\xcaq\x84\x91L}\x92E\x8a\'\x94VZ\xcd\xab\x9c5\x99A\xc6\x8eaGj:92~\xa1Q\xc2\xaf(\xbe\x086g\xc1\xa6X\xbc\xf0\x05G\xc5Z\xcd\xad#\xb2M\x81\xa8\xb4\xe0.\xd9\x8cXe\xf0 \xe2\xd8\xe1p\xd5R\x92L\xcc\x7f\xa3\x13(\xeel\x85*@\xf5\xc5\xdd\xcb\xb3"\xb9\xf3\x82D\x9e(\xd7I\x90\x94\x19\x0f\x1d\x10\x10\xe6\xa8Y}\xfbV@X"nx4\x02\xc7B\xbf>:c\xab\x94\x80\x0cw\xd1[\x8a\x93\x15}rk\x14\xe8g!\xc01\x7f\xe22_\x9b\xb59\r\xc6\x1eS\xfdb\xc5\x16\'D\x0e\x04\xebd\xd8\xdd\xb1~)\xe1\x07\xf2\x1d\xde\x7f95\xe9\xa8\xad\xd7\x89\x96D\xa9\xc3\xe5\xcc\x86\xb8\xe4\xe6\\Z\xe6\xa43\xea\xfa\xb5\xf2U\x1f\xbbE8\x9e\xff\xadP\xeb\x90X\x99\xd1\xf3<\xb2\x15\xac\x8405hhXC\xef\x92\xea\x84\xb3\x8a\xe0\xe8\xac\x80\xa0\x0f\xf6|\x1f\xe7\x1b\xf5\xec\xfd\xefG\xac^\xed\x1fJlw\xe7+T\x90-\xd4\x02:\xbaC\x16|\x90\x10\x03C\x15\x08`\xcf\xfb\x1c\xa2\xdb\x15\xe6\xf4\x83\xa0\xdd\xe0\x84\xb2!(\x9e\x8f\x95\x01\xd9m\x85\x18\xa7\xfb\x15\xb7\xd9yC3\xf1\x19v\x7f\'\x13=G\xde\x13w\xeb\xb2\xee\r\x1a-\x12]\xcc\x18P\x89\x9d\x07:W\x9b\xc1\xfcN\x8eG\xf6\xedw\xa6\xdcb`\xb8\xdem\x90F\x97\xeb\xfc\x963Q1\xf4c\xe3\x1e\x84\xa5\x02\xa1\'n\xbcoED\x16\x1d4\xbe5\x90\xe4\xb6\x94\x0b\x907A\xa0 \x93I\xbc\xe5j\xb4\xacj\xa5;\r\xb0\x16\x86h\rB\xf9X\x02\xdfuB\x94VX\rw,T\xae\x1c\x1e\xae\x1c\xb61X\x1c\xdc\xa5\x89_\xdf\x19\xb8~LD\xea\\\x86_\x1c<\x8d\x95\xec\xc8\x03Z\xbf\xdd\x14\xa5\x7f\xb9JF`\xaa\x11\xcfj\x8f\x1eAc\xa5\xac\xdc(\xe3o\xa5w\xcd\xaee\x15\t\xa1\x0f\'=^\xdeh`K!f\xf7\'\x16x\xb8\xc4z<\xec.}`v`\xc9S\xfce\xd1sC\x10fS\xdb\x8c\x11\xbe\x83k\xca\xb5\t\xc0\xb7j)\x8d\x81\xdcWOR\x9f#J\x15)U\xa3\xec\x18\xff\xa1*B\x1d\xa7\xba\x998\x9b\x96\xdfP\xc5\x15FGpL\xd2\xd1\xfe"\x85\xec\xb5\xd3\xe0\xe1S\xe3\r\x07\xfch\xdf\x14\x10\x83P\xc0\xbaE\xb9@\xb34,\x15\x02\xf74\x14\x8dF\x18r\xc96\x12bG\xfc\x97\x1f\x94\xb6\x93\xa5\xa2w\xbdvoJm\xc7\xa8h\xeb\x94O\xc9\x9bJ\x0cf(\xb2\x85\xfc\xcb\xf0\x8fk\x1fg\xe4\x00\x14}\x96\xaa\x17\xfa\x13\x1b\x92\x10\xf7\x97\xd7oF\xf0\x03\r1\xd8yl\xe4\x12\xe4\x9e\xab\x9bR(\xae\x99v\x92^^c\x99\x16\xe4J\xbf\x84PXVB\xc1z?\xc6\x86\x88\xde\x13\x19c\x111\x88\xcf\xf5\xd9,*[\xdf\xee\x86V\xa4E\xc2rF\x91\\\xf7\x9f\\\x9c6U\x02\xefW\xd2\xe7kL\x11m\xaa3\x96;\xf4\x08\xce^\xda\x1f9\x03\xd6\xf3{\xda\x9d\x9d\xb5\xbb_V\xf2A;\x15\xa5\x908\xb1y\x05\xcf\xef\x9f[\x192x\xb9${\x9bL\xd5\xe8ORF\xe0\x7f\x04\x10\xec)\xe8\xa1\xedh\xba\nMxkg\xdd<?\x9eid_\xdf\xf8\xd6\xec=;~\xe7\xa7M\xcbVOq\xc8\x04"\xbe\x1e g\xdc!\x94\xc6\xee\x84\x0b\xafm\xa3}Y\x92\xf2\xe6\xd9\xc7\xac\xd1\xac\xff\xc4\xa5\x05\xa6\x07]\t\x83[\x91K\x1d\xceOc&i\x19\x96\xae\xab\x04\xbcb[\xa6\xb4\x16]\xbcN\xafpSK\xcc\xcf\xd9\xf4N\x08|\x03\xe6\x1aH\x1e/\xc2\x9b@\xc0\x8c% 8\xc2o\x99D\xaam\xfc#\xe8T$r\x14\x13\xd6\x0c\xbcD2Q\xa3\x0b\xaa\x98\x82\x9c\xbc\x181\xfd\xfd\xff\xc8\xd5v\x14s$]\x04\xb9H\xd9\x92h\xefs\xdb\x94\x85\xb4\xc4\xf8\x8b\xb9s\xd8\x00\xefo\x00D\\\xccd\xf5\xfcD^\x85\x9b\xa9\xb8=U9\xfa\xb5u\xd2}\n\x8d\xe5\x0fV\x88\xd4\x8e4KFc\xb2\xdc\xe1d\xb3b>/\x80.\xe0`\xd0\x17\xf4\xfe5\xb8\x94t\xda\xfa\xdaf\xfe3V\xd1\xb1\x16&\x9c\x16k\xffZrZ4\x1e\x92\x1c\x8fL\x9d\x1d\x06V\x86\xcf;\xfa2\xd7\xfe\xb0!\x12]ey|0\x1c\xdf&,\x82\xd3!\xa0]\xbe&5\xb2\xd1\xb4\xab\x94\xef\xc0"\x16vd\xad\xd0\'\xa3e\xacO5\x1e\x89e;\xc9\x95\xdcL}8\xef\x00\x97ZR\xdby\x00\xef\x9e\x04\x16\x03\xad/k\xca\n\xe6\xc4\xf3\r\xbe\xc5\xf8\xaa\x91\xc5c\x95\xdb\x1e\xd3[\xc0\xe3&\x96\x96O\x04\xaf\xceMqY\xc4n\xf9-\xd2A\xc9\x98\xaf\x93#\xe7\xa2\xea\xc3j\xdc\x13\xa9l\xc1\xc6w\xe1\xfca\xaf\xd1`\xa7\n\x0b\xfbxI(\x9d]\xbc\x01,\xb4\xdb\x15\x12\x97\x0f\xca\xdd\x94\xc7\x83xt\xc4\xd6\xc7\xea\xe9\x06)\x8d6\x17g"\xd4\x1b\xbd\x0f\x07)]k>&\xed\xdd3\x91\xf2\xebB`ah\x80\xa8-\'\x82\xd9\x0f\xaf\xdb\xce\x90\xbf\x1a\x98\xca<\xc2\xd8HbF\xe5\xcdP\x01\xdc0\xda\xf8\xc9\xef\xf2\x1fcz\\\xa8\x1e\xb7\x05ksN\x89j\xf6\xf3\xa5I%"\x9b\xdex\xa1\x12Wx:Z\xf6<br\xcf\x10.\x91\x83\x17\xe4\xd7\\<\xc1\x8a:QI@\x15rg\xf6\xb1Q\xcf\xd5}\xe6\xcf\x8b\xb2(\xdbp,\x8b\t\x0e\x03\xd9>\xfb\xdd\x00nR\xac\xf3L\x95]\x81\xd7v\xd0\x9a\x13\x06\x03\xd1I6\xac\xac6\xdc\x1c9X/]\xfc\xcd\n\xa5h\x02i&\xb4\x9a\xa7\xa5\xbcS\xe2\xb4\xdc(~\xfcbW/m\xd0\x7f2@`H\x15A\xd1\xfc\xcb\x1c\xdd\x98\xc9\xd7\x84,\x820\xe7\xde\xb0A\xfb\x1e\xfdv\xb6\xab\xef\xd1j\xc8\x9cf[t\x86\x1e\x0e\xc2B\xa1\x89\x1c\xd0\xa9\xaf\x03n\xbf\xaeH\x10\xedU\xdf\x14\x03!\x9b\x01\xebV\xc4A\xde\x9a\xb6L"\xa2\xc2\x94\xfb(j\x8e\x13\xf8\xa3\x9a\x9c\t\xbb;z;$-\xf17\x94\xeb\x0e\xb8\'hY\xd6\xd6\x89\xa1 \xc3\xb6\x0b\xb9\x08~\xdc\xde7>{b\x7f_\xd4\x1dQM\xf2\r\x03Qi\xe4\xb0W\xff?\xe9\xf5\x8b@\xf1\x89r\xbd\xbb`\x91\xb87\x10\xdd\xa5\xd2\x8cQu\xf9\x80$\xcd\x02\xf7-\xa1\xbb\x93\xff\xfb\xe0\xfdT\x83>}\xa5}\xc6\xd4b\x85\xbb\x89-|!\xc4a\xc89\xd2V\xf7"\xf4\x80qU3=\xb7\xf94\xbf\x08\xec\xb1\xcd\xf8LQ\x9a\x0bU\x1d\xf8\xcb\xfeN\xf7\xbd\xcc\xee\x97\xeeD\xc5\xac\xb5\x1ei\x9bC\xa19\xfc\xeb\xbb\xd8\xf7\x86\xa8\x0c\xd3\x9d\x86P\xa8\xfb\xef\xc9a\x12\x86\x18\xe34`\xd0\xbb_b\xfc\xf0\x03W\x80\x11\x16XW\x18\x00/V\xdd\x9e\xae\xa6P\xf8}\xe0\xc8\xec9]\xa1)\xdbm0\xbe\x9a\xa6\x99\x80G:\x1eXm\x0f\xae*K*\xbf\xc3v\x9fp\x054K)\x8a;\xc1`NZ\xaa\xc4\x03\tTf-e\x1ae\xc6\xe7\xc5\n\xa1j\r\x07Ga\xf5\xf0\xc2Yx\x90\xe3_\xce\xa5!\xf6\xf7\xae\xad%\xbd\xb0\xe4\x9c!@\x80"MaY\xfa\xc3"-\x0b\xcf\xea\x9d\xb8m\xc6-M\x95\xd5\xb9!\xb1\x12\xb9\x0bOtp.\xc5\xad\xf0\xc6\x16,\x8e\x16:]\xd8r\xf6\xebZhz\xec\xe6\xd1\xe8\xfd\x88\xc4\xf7\x01\xa2^\x07ms-<\xb0\xe0\xa0\x05S\x19\xb8\xed\x1b\x858\x1b\xe6#\xa5`\xacUQ\xeb:v\xb2\x05\xc4{\xc9\xd3r\x9b\xcb\xa7\x82.|\xef\n^\xde\x80\xb5\x81u\xff!\x16\xb0Q%\xafI%\xe5o\x94\x05\xa9\xc2\x13v\x85R\xdb\xeb\xd2\xbe\xdc=\xcd)\xee\xa3\xf3\xbb\xa1;\xf2\x04\x10@\'L\x7f[\xa3\xaf\xa1\x1c[\xc5\xff\x0c{\xb1WZ\xbf\x98\xd8\xfcW\xbf\xa1\x8e\x02\x17o~T\x0eK*\x0f\x9e`m\xca\xe6\xb1O1\xaf.\x13~\xfccAe<\xcb\xee\xfek\xefp*\x89\x16}u\x86U\x88\xa8\x0eeuo$_\x13w\x1fp\x8d\xfbM\x04*x8(7\x11\x8e\xb4\xd6\xd3\x84\xe8\xb7\xce\x00\x06\xaa\xd7\x9f\xf9p\x13\xb9o-6\xcag\xbf(e@\\\xc2\x9e,\x1c\xf1\x0c\xa4\x845@`\x92A\xb4\xb1\xa8\x86\xb0\xfb\x0f\xe6\xaf\xafo8\x93@\xa9\x0c\x8f\xf9\x9b\x85\xab\xbd\xc6\xc1\xe5k\xfb]iV{\xff\x10X\xf0\xa0@D\rT@\xf8[\xeflf\xe3\xee\xa6\xdf\xd9S]\x9cyZ\xdd\xb9\x88\xdf\xdbkL\x11\xd0\xdb\x1bO\x9e\xec?S\x02\xee\xd8\xc7\xc6\xfc\xb1\x07\xcey\xf8\xbb\xe5\xe0\xcc\xf4:\x9288B|\r[gD\xcb\xce\x94\x19)P3\xe0O\xd2\x9b\x9fX0;\x9c\xc5Q\\\xc9\x11H\x9a\x14\xafe\x8c\xa8\xcc\xc3\x88\x83\x813\xdf\xc7\x1a\xa5\x82\xa4(N|\xa7D\xc4\r\xbbt\x84\xc7\xbdQA\xbfH4F#\xc5z\xcb\xf9\xc2Tu\x89+O*\xcb\xa3\xdc\x82\x7f\xf65\x08\x7f%E\xff\xac=2\xe9\xa8\x0f\x0c\xc8@\xf9g\x0b\xd1\x94\x8d\xdb\x1e\xc1\xd2c\x85@\xc5\x84\xc8=\xc7\x0c\x9d\x1cz\xd35\x0b\xb1\xfa/}\t\xa88"\xc4\x1e.\x83g\xc5\xee\x07\x0ev\xc9\xceS\x88\'\xce\x03\x9c?u\xb1\x89\xbfSP\xcf\xec&l\xd3\x80q\x1c\x06\xcc\xe7)\x12Q\xb5\xb8{\xbe\xd2\xdd 9\x84Z\x90\x12\xbf!\xf9P\xb7\xb9\xa3a\xd1M\x7fc\xce\xa1\xe5\x96\x10W\xe1p\xacD\x0cZ\xe0\x87\x9cuF\xca\x96\xc9\xd1\x04U\x18= \x1a$\'\xd2-\x10\x93\x0f\x82Z!Z\x0bl\x1f\x8c\xb0\xef\xcd \xbe\x1a?\x13\xcb\x92\x89\xef\x8c\xc1g\xad\x04\x19\xa8\x00\x9e\x15P\xf1p.\x1f\xc5K\x89\xde\x10NH\xc9|\xb4\xb8\xd1M\xc7G\xfa\x16>\x80!88/\xf2V\x9e\xb1\xcb\xff\xc6\x1a\xa3L=\xb0&\xfe\xbc\xc8\xfb\xba\x86\xb6\xc3*9\x04E\xb8\xc94\xbe\x82o\x8a\t\x1f\xf6\xdf\xa4\xaf\xc4\x1e\x04\xdd\x82\x1e\xdf[\x0cI\xb1\x16\xc6\x88\x1c\x0e\x0e5Q"N14)\x87\x8d \\\xf1\xc0\xdc\xe7GD\xa5\xe6o)\xecey\xb3\xed\x1f9\r5\xa6\x1a+\xd0y\x8bq\xe4!n7\xca\xcc\x17\x9bj\x0e\xcd\n\xa0\xd0\xe1/y>\x96,\x05\x7f\xacU\xe6\xc4")0\x8e\x16~\x0b\x03b&\x1a9Vk\xb2b\x11\x9d\xe4[\x9b\xe8k\xa3\xfd\x12\xb9W\xdff\x05\x8b\xcd\xdc+Sm\x17\xd9\x87j\xf7\xd8zr\r\xb1\r\xfb\xadJ\xa9\x02\xf8h\xa0\x16l\xea\xd5\xfb\x19\xf1\xb6j\xc9Hl\xe2\xdc?\x89,\xc3\xf0X\xc1\xdeG\xa0\xe8\xad\x1d\x8a\xe4p\x88J\xf8~s\xa2\x8dK\x8apCai5H]\xdbz;k\xbf\xe7\x8f\xe7p&\xff\t?\xba\xe7\xedt\xea\x13\xa2S\xdc\x99E\xf0\xe8\x9c\xdc\x17\xb1\x9dn\xeaS\x1b7I\tV\xa6z\x9e\xe7,vZ>m\x8b\xa4B\x89\xee\xda \x95\xcb^/\xc4P\x12\x94T\x0e|\x86+R$\xbf\x8c\xd2\xde=<\xe4\xdb\xf9\xdc\x01b\xc3\xa1\xd0\xcc\xdeW\x14\xcfw\x14\x1cw,\xf0\xebe\xea\xd2\xa43\xe3T\xd5\xb9&X\xfe\x0e\xb6TRT\x8f\xb2\xe6\xba\xb9\xae\xc6\x13\x9d\xab\\(7\xdb\xd9<721\xa9\xccv\xeb\xac\x86j\x15\xaa8A\xc92A\x1al)\x9eq\xd2p=\x01K\x92\\\xc3\x082\xf7\xf5r\x04\xa9\x1c\x84\xac\x1f\xe5tG\xea\xa1=\x8eo`\xa5!\xafx\xc5\x01. \xa8\xeb\xe1\x80\x1a8\xd1\x13\x93g/\xb8\x94f)\xee\xf0\xccr*\\\xbd\x89(IJM\xf3\xda\xda\x89(\xb3\xa3\xd6+0@\xb5\x17\xd0\xbaD\xe2\\\xdd\xf7\xf1\x04}\xc6\x80\xfa\xcc\xa1\x19\x92\xeei\xe2&\xe1\xc6\x9e\xa3\xa5\xb8\xfb\xc3\x0bOr\xf3\xa7\x86\xe0kn\xaf\xe4\x9d \xf1\xde\x1b\xb0\x1f\x1f\x87\x01\x064\xff\xfd"T\xda\xf5\xdd.\x80?\xb2\x01\xe1\x9c^Q\xdf\xc8q\x0c\xfd\xdd\x85c\x0ed\xf5^\x91\xaa\x8f\x14\xa2\'\xb3\x9c\xea1\x94#\xf0\x85\xd4\xbf"\xd11\xd7\x7fU\xef\x15\x0cfp\xcd\xb0\xca\x82\xb0\xe8YVH>K\x9a\xcd\x14ae:p3\xf1l\x84\x04\xb9$\x0e*\xa2\xa1:\x95P\x01]D:\xbc\xc6\x95\x07\xc8rq\x88\xda\xa7B^#\x1e\x95N\x80\x04Z\xbe45\xae\x9e\xd4m\x01\x91\x1b\x04t\xa3\xfe\xd0w\x16S\x8c\x83\xfd*\xfdf\x16\ru*Z\xef\xfc\xe9-RS95\xb9\x9e\x84X!)8uG\x03\xa2.\xf8\xcc6\xd8\x04\x97\x00\xd1\x9ftQ-\xa2.0\xa1\x98\x99\xb9k\x84WAk\x97\xd0\x12\x05\xeb\xee\x14ULX\x0eM\xf1\xcd\xc5\x813C\xaa\x93\x00\xa5\xa1Cz\xaeVc\x9b\xf5xNi\x90r\x92}Y\xa2\x7fVn\x08\xfb\xaa\xe93\xd8\xc3\x0e\x10\'W`O=Zi\xd1\xd1\x97^\x07\xf5\x1f\x9e\xd3\x00\xd7\x9c\xc0\xd5\xb2\xbf\x01\xf4,\x9d\x8e2\x12\r\xab#\xc5*cg1\xcf\xbc\'\x9a\xda\xb7Z\xfbJ.\xb5\x81\xe5\xf2 h\xb5\x9f\xf0\xbbk\x92\xbc\xe9\xf7\xe3R\xff\x8f+r\x02{\xe9\xe2\x80]Mk\x9c\xfe\xac\x9e\xfar\x16\xb6I\xc5\xf8!/\x0b\xf2$\x91\xb3\x83\xe7V\xe2%d\x1c\x8ev\x9c\x13\xd5v\x89|\x96\xa3\x9e\\\xd9|\x98\xd1\xaa\xe5\xf2q\x8e\xe1^\xfe\xaep\xcc\x1d\x8d\xb2\x8cZ\xf8v\x05/&\xa3\x03\xef\x18\xe9ca\xb3\xb2/\x11!8N\x9d\xe0\xe4f\x1dP\x13p[u2\x14\x98.\x07g\xcb7\xb5\x91\x03\xf0~\x9b\x07i=7>\xff\xa0(\xa0\x81\xabAi\xf8\xc30\r\xbd#\xa2\xf4\x99\x8bsq\x1c\x07\x0e\x1d\xce\xf6~\xa7\xdfx]!\xbb?\xdf\xbbt\r\xca\x19n\x7f\xcf+\xb5r\xc4\xd2]\x1d\xf5\x1f!.\xe2\xbe\xfaj>\x0c\xcd\xf2\xb2\x81O\nFo"\x83#\xcc]\xc9a\x01X\xf8\x04_\x7f)\xac\xec\x9c\xde]k\x8c\xec.\xbc|\x0b\x8f!&\xb7\x83\x88\xf1u\x9c\x07\x1d\x14\x04:*\xa5\xc4\x16=S\x920\xb5\xd4\x89\xf1\xf1\xd4!\xcf \xd0\x87tgI\x86\'|Q\xad_\xb8qf\x80\xb7\x8c\xf75\xc3\x80\x8ea\x0f\xbe\xdbmh\xe3a4J\xbd\n\\/\x9fi\xd7X?\xff\x85\xee\xad\xffcc\x06\x7f.\x16\xb0\xd9\xd3@5\n#yEP\xe1\xe6\xe6\x1a\xcd\xbe[\xf3\x9f\xf0\xc4\x81\x1d\xddb^\x99j\xa8d\xc3fL|:r\x85\xa0\xca\xfc\xb0\x909cu\xbe\x07\x19\xdaS\xc2/B:\x97P_\xecJ\x8a\xe8\x81T\xe8O\x8d\xc5\x93K&\x88\xdc\xa5\xb9\xa5\x1f@\xb35\x8by\xd5\x07\xe7\xbe.\xa1\x05\xbf\x16\xdc\x19x\x8dD,\xc9\xdalg?e\xb8\xdcDz\xa1\xbf4N\x97\x8a=\xbeF\x1c\xdf\x87V}HI\xf9\xed\xcd\x94z\x05\xd80\x8d\xcd\xa0\xbfw\xd7\x82\xec\x0c\x0c\xb4\xf6\x16\x1dR\xb7\xe5\xa4l\xf1\xc7\xccy\x012\x00Z-FUoN\x80>\x1b\xf3p\xd5\xc3\x19nr\xf1u\xfc\xf0\xf2^\x04g\x18\x84\x7f\xe8\xb6^-N:\xbc\xcf\xad\xb7\xa7\x8d\xd2m\x12JCPFO\xed7n)<\x04Z\x8aq\x85>*\x97\x17\x9d\xf2O\xd49X\xed\x82`t&\\\x1f\x07a\xc9\x9daY\xdf\xb85\xdc6l4\x8fC+L\xc7\x7f\x86t\xdc\xc5\xa4m\xc3\xf4=,\x7f\x90_\x8d\xeb\xa3\x1ar\xe3\x9c\x9dN-x\x0222\x1c9\x03\xd0a\xe4?,\xe4N~%\x91?\x0cl\xb1\x04\xd1\x93;64\x98\xde\x185oat\xb7GN\xa3>\xe2#\x83\x9cm\xb9>\xe6yQ\xb0)\xc5\xc3\xec\x9f\xe9\xd2A\x90a\x9c\xafoN:|T7\x8am\x8bZ\xa0K2t\x02\x15b\x0c\x96-\x0e\x1b\xe0\x97\x94\x8f\xa5p\xd8BC\xfd7Wh\xfc\x9d^\xf1\xe8\xd6|W\x9c\x17\xf9\'\xf23\xa5\x972N\x12\xc4\x0e\x01\xbc#S\xbd\xc0k\x12\x81Tjk^\xe7\x85t|S\xc9\xc6\xa0]\xc8\xe7\xa3&C\xcfd\xf6\xe6\x9b\xd8\x00\x98i\xa9\xc1\xc0\xbc\xa8\xdb\x11\x95\xfa\x14{8\xa1K\x93\xc3aV\x8f\xe7]=\xad,9\xaa \x8f\x993\xaa\xff\x91\x0f\x0eO\xf2\x0e\xc4\x8e\xc3\xaa\x91\xdcE\xedc.\xf5\x1a\x88i\x11Z_\xa21\x11\xe4+Ui\xb2\xa4\x87\xb8\xb0\xcf-\x85\xce\xc4\xa6\xec\xff|-\x92;p\x96\xb2\xe4\xf7u\xaa\xf6\x10\\?\x1e\xfc\x02N\x1f\xe0\xf8\xf9%R\x8d\xa6)j\xb8\xedp\xd7H\xe7\x02\xcf\x9b\xe5aZ\x07\xe8W\\\x86\x81\xdb}l\xbalr\xf6\xb8\x12\xce#\xb2N\x90\x9ca\xdc\x10\xdee\xf9M\x14\xd8xP\x1e\xd2\xf19y\xc8\xfc\xbed\x17\xdd\xd4\x84\xfd\x85`\x1a\x94\x9at\x0f\xf9\xfd\xa8\x9ez\x11\xb4.\x11SY\x8b\x88\x10/Jd\x90^S\xbb\x1aJ4\xd7\x00]Ot\x9dd\x8f\xb9\xcf\x0cq\x0bC\x99!\x82?UoQ|l\xbe\xcb\xdb\xb4\xd1kT\x00\x986;\xad5\xe0,\xff\x82\x14L\xd5\xff\xd7E\x99\xce\xbb\xce\x05d\xc8\x92\xcd\x80}U\xff\xbe\xa0\x0f\xd9\xc5\x8bya\xec23\xaeP\x12\xb1* \x0e\xe6\xc1\xb8\xe7\x9f\x0ci\xdc!\xa9\x17\xdc\xd7Y\xf0f\x1b\x17Q\xe2\x0b\xf1\x03\r\x96\xc7\x9e\xc1c\xb28cl\xecU\xca_az\x83\xa1\xad,92\xb8\xa5\xba6\xc3\xec}\xed_L\xd3Wi<\xb7\xcc\xe90\x9c\x07\x16\x94\xfd\r:\xa1\xd2\xaf\x92\xa7\\\xa3"\x18\xfa`\xd3\xf3\x80\xf8\xbe\xd1\x0c\x84\x0essU\x98H\xb3\xbb\xb0\x9ee\x07\xb7Eg\x1aO\x83O\x86\xaf\xc3\x13\x0c"3\x9cP\xda~96\xf3\xf9\x0fl\xf4\xdc\xfa_Hy\xba\x15.\x91\xa0O\x80h\xaa%\x99\x9ey4q~\x19\x98\xe6|U\x8eM\x04\xaa\x98C\xb4\xc3\xf1d\n\xa9\x00t\x19\x9f\xc8\xef\xfc\x15<\xf0\xc6\\j_O\xf4\x93T\xbf\x8f[~\xb27\n\xae\xd2~*\xc4\xa1\xac\xad\n\x84\xf6\x028\xec\x8c\x02\x1f\x97\x86\x88m:\xe2\x0c\x0ea\'f\\J\x0b<\x0b\x94\xf0\xa7\xcc\x1f')
|
1
|
+
|
2
|
+
from flask import abort, render_template,request,Response,g,url_for,jsonify
|
3
|
+
from wtforms.validators import Regexp,ValidationError
|
4
|
+
import urllib,uuid
|
5
|
+
import datetime
|
6
|
+
from hiddifypanel.models import *
|
7
|
+
from hiddifypanel.panel.database import db
|
8
|
+
from hiddifypanel.panel import hiddify,clean_ip
|
9
|
+
|
10
|
+
from . import link_maker
|
11
|
+
from flask_classful import FlaskView,route
|
12
|
+
import random
|
13
|
+
from urllib.parse import urlparse
|
14
|
+
import user_agents
|
15
|
+
|
16
|
+
|
17
|
+
class UserView(FlaskView):
|
18
|
+
|
19
|
+
@route('/old')
|
20
|
+
@route('/old/')
|
21
|
+
def index(self):
|
22
|
+
|
23
|
+
c=get_common_data(g.user_uuid,mode="")
|
24
|
+
user_agent = user_agents.parse(request.user_agent.string)
|
25
|
+
|
26
|
+
|
27
|
+
return render_template('home/index.html',**c,ua=user_agent)
|
28
|
+
@route('/multi/')
|
29
|
+
@route('/multi')
|
30
|
+
def multi(self):
|
31
|
+
|
32
|
+
c=get_common_data(g.user_uuid,mode="multi")
|
33
|
+
|
34
|
+
user_agent = user_agents.parse(request.user_agent.string)
|
35
|
+
|
36
|
+
return render_template('home/multi.html',**c,ua=user_agent)
|
37
|
+
|
38
|
+
@route('/new/')
|
39
|
+
@route('/new')
|
40
|
+
@route('/')
|
41
|
+
def new(self):
|
42
|
+
|
43
|
+
c=get_common_data(g.user_uuid,mode="new")
|
44
|
+
|
45
|
+
user_agent = user_agents.parse(request.user_agent.string)
|
46
|
+
|
47
|
+
return render_template('home/multi.html',**c,ua=user_agent)
|
48
|
+
|
49
|
+
@route('/clash/<meta_or_normal>/proxies.yml')
|
50
|
+
@route('/clash/proxies.yml')
|
51
|
+
def clash_proxies(self,meta_or_normal="normal"):
|
52
|
+
mode=request.args.get("mode")
|
53
|
+
domain=request.args.get("domain",None)
|
54
|
+
|
55
|
+
|
56
|
+
c=get_common_data(g.user_uuid,mode,filter_domain=domain)
|
57
|
+
resp= Response(render_template('clash_proxies.yml',meta_or_normal=meta_or_normal,**c))
|
58
|
+
resp.mimetype="text/plain"
|
59
|
+
|
60
|
+
return resp
|
61
|
+
|
62
|
+
@route('/clash/<typ>.yml')
|
63
|
+
@route('/clash/<meta_or_normal>/<typ>.yml')
|
64
|
+
def clash_config(self,meta_or_normal="normal",typ="all.yml"):
|
65
|
+
mode=request.args.get("mode")
|
66
|
+
|
67
|
+
c=get_common_data(g.user_uuid,mode)
|
68
|
+
|
69
|
+
|
70
|
+
hash_rnd=random.randint(0,1000000) #hash(f'{c}')
|
71
|
+
resp= Response(render_template('clash_config.yml',typ=typ,meta_or_normal=meta_or_normal,**c,hash=hash_rnd))
|
72
|
+
resp.mimetype="text/plain"
|
73
|
+
resp.headers['Subscription-Userinfo']=f"upload=0;download={c['usage_current_b']};total={c['usage_limit_b']};expire={c['expire_s']}"
|
74
|
+
return resp
|
75
|
+
|
76
|
+
@route('/all.txt')
|
77
|
+
def all_configs(self):
|
78
|
+
mode=request.args.get("mode")
|
79
|
+
base64=request.args.get("base64","").lower()=="true"
|
80
|
+
c=get_common_data(g.user_uuid,mode)
|
81
|
+
# response.content_type = 'text/plain';
|
82
|
+
|
83
|
+
resp= render_template('all_configs.txt',**c,base64=do_base_64)
|
84
|
+
res=""
|
85
|
+
for line in resp.split("\n"):
|
86
|
+
if "vmess://" in line:
|
87
|
+
line="vmess://"+do_base_64(line.replace("vmess://",""))
|
88
|
+
res+=line+"\n"
|
89
|
+
if base64:
|
90
|
+
res=do_base_64(res)
|
91
|
+
resp= Response(res)
|
92
|
+
resp.mimetype="text/plain"
|
93
|
+
resp.headers['Subscription-Userinfo']=f"upload=0;download={c['usage_current_b']};total={c['usage_limit_b']};expire={c['expire_s']}"
|
94
|
+
return resp
|
95
|
+
|
96
|
+
@route('/manifest.webmanifest')
|
97
|
+
def create_pwa_manifest(self):
|
98
|
+
|
99
|
+
domain=urlparse(request.base_url).hostname
|
100
|
+
name=(domain if g.is_admin else g.user.name)
|
101
|
+
return jsonify({
|
102
|
+
"name": f"Hiddify {name}",
|
103
|
+
"short_name": f"{name}"[:12],
|
104
|
+
"theme_color": "#f2f4fb",
|
105
|
+
"background_color": "#1a1b21",
|
106
|
+
"display": "standalone",
|
107
|
+
"scope": f"/",
|
108
|
+
"start_url": f"https://{domain}"+url_for("admin.Dashboard:index" if g.is_admin else "user2.UserView:new_1")+"?pwa=true",
|
109
|
+
"description": "Hiddify, for a free Internet",
|
110
|
+
"orientation": "any",
|
111
|
+
"icons": [
|
112
|
+
{
|
113
|
+
"src": url_for('static', filename='images/hiddify-dark.png'),
|
114
|
+
"sizes": "512x512",
|
115
|
+
"type": "image/png",
|
116
|
+
"purpose": "maskable any"
|
117
|
+
}
|
118
|
+
]
|
119
|
+
})
|
120
|
+
|
121
|
+
@route("/offline.html")
|
122
|
+
def offline():
|
123
|
+
return f"Not Connected <a href='/{hconfig(ConfigEnum.proxy_path)}/{g.user.uuid}/'>click for reload</a>"
|
124
|
+
def do_base_64(str):
|
125
|
+
import base64
|
126
|
+
resp=base64.b64encode(f'{str}'.encode("utf-8"))
|
127
|
+
return resp.decode()
|
128
|
+
|
129
|
+
def get_common_data(user_uuid,mode,no_domain=False,filter_domain=None):
|
130
|
+
default_asn=request.args.get("asn")
|
131
|
+
if filter_domain:
|
132
|
+
domain=filter_domain
|
133
|
+
db_domain=Domain.query.filter(Domain.domain==domain).first() or Domain(domain=domain,mode=DomainType.direct,cdn_ip='',show_domains=[],child_id=0)
|
134
|
+
domains=[db_domain]
|
135
|
+
else:
|
136
|
+
domain=urlparse(request.base_url).hostname if not no_domain else None
|
137
|
+
if hconfig(ConfigEnum.is_parent):
|
138
|
+
from hiddifypanel.panel.commercial import ParentDomain
|
139
|
+
db_domain=ParentDomain.query.filter(ParentDomain.domain==domain).first() or ParentDomain(domain=domain,show_domains=[])
|
140
|
+
else:
|
141
|
+
db_domain=Domain.query.filter(Domain.domain==domain).first() or Domain(domain=domain,mode=DomainType.direct,cdn_ip='',show_domains=[])
|
142
|
+
if not db_domain:
|
143
|
+
db_domain=Domain(domain=domain,mode=DomainType.direct,show_domains=[])
|
144
|
+
print("no domain")
|
145
|
+
flash(_("This domain does not exist in the panel!" + domain))
|
146
|
+
print("HI")
|
147
|
+
if mode =='multi':
|
148
|
+
domains=Domain.query.all()
|
149
|
+
elif mode =='new':
|
150
|
+
# db_domain=Domain.query.filter(Domain.domain==domain).first()
|
151
|
+
domains=db_domain.show_domains or Domain.query.all()
|
152
|
+
else:
|
153
|
+
|
154
|
+
domains=[db_domain]
|
155
|
+
direct_host= domain
|
156
|
+
|
157
|
+
# if db_domain and db_domain.mode==DomainType.cdn:
|
158
|
+
# direct_domain_db=Domain.query.filter(Domain.mode==DomainType.direct).first()
|
159
|
+
# if not direct_domain_db:
|
160
|
+
# direct_host=urllib.request.urlopen('https://v4.ident.me/').read().decode('utf8')
|
161
|
+
# direct_domain_db=Domain(domain=direct_host,mode=DomainType.direct)
|
162
|
+
|
163
|
+
# domains.append(direct_domain_db)
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
# uuid_secret=str(uuid.UUID(user_secret))
|
168
|
+
user=User.query.filter(User.uuid==f'{user_uuid}').first()
|
169
|
+
if user is None:
|
170
|
+
abort(401,"Invalid User")
|
171
|
+
|
172
|
+
has_auto_cdn=False
|
173
|
+
for d in domains:
|
174
|
+
db.session.expunge(d)
|
175
|
+
d.has_auto_ip=False
|
176
|
+
if d.mode==DomainType.auto_cdn_ip or d.cdn_ip:
|
177
|
+
has_auto_cdn=True
|
178
|
+
d.has_auto_ip=d.mode==DomainType.auto_cdn_ip or "MTN" in d.cdn_ip
|
179
|
+
d.cdn_ip=clean_ip.get_clean_ip(d.cdn_ip,d.mode==DomainType.auto_cdn_ip ,default_asn)
|
180
|
+
print("autocdn ip mode ",d.cdn_ip)
|
181
|
+
if "*" in d.domain:
|
182
|
+
d.domain=d.domain.replace("*",hiddify.get_random_string(5,15))
|
183
|
+
|
184
|
+
|
185
|
+
package_mode_dic={
|
186
|
+
UserMode.daily:1,
|
187
|
+
UserMode.weekly:7,
|
188
|
+
UserMode.monthly:30
|
189
|
+
|
190
|
+
}
|
191
|
+
bot=None
|
192
|
+
if hconfig(ConfigEnum.license):
|
193
|
+
from hiddifypanel.panel.telegrambot import bot
|
194
|
+
|
195
|
+
g.locale= hconfig(ConfigEnum.lang)
|
196
|
+
expire_days=remaining_days(user)
|
197
|
+
reset_days=days_to_reset(user)
|
198
|
+
# print(reset_days)
|
199
|
+
# raise
|
200
|
+
if reset_days>=expire_days:
|
201
|
+
reset_days=1000
|
202
|
+
# print(reset_days,expire_days,reset_days<=expire_days)
|
203
|
+
expire_s=int((datetime.date.today()+datetime.timedelta(days=expire_days)-datetime.date(1970, 1, 1)).total_seconds())
|
204
|
+
|
205
|
+
user_ip=clean_ip.get_real_user_ip()
|
206
|
+
return {
|
207
|
+
# 'direct_host':direct_host,
|
208
|
+
'user':user,
|
209
|
+
'user_activate':is_user_active(user),
|
210
|
+
'domain':domain,
|
211
|
+
'mode':mode,
|
212
|
+
'fake_ip_for_sub_link':datetime.datetime.now().strftime(f"20.%y.%m.%d:{max(1,datetime.datetime.now().hour)}"),
|
213
|
+
'usage_limit_b':int(user.usage_limit_GB*1024*1024*1024),
|
214
|
+
'usage_current_b':int(user.current_usage_GB*1024*1024*1024),
|
215
|
+
'expire_s':expire_s,
|
216
|
+
'expire_days':expire_days,
|
217
|
+
'expire_rel':hiddify.format_timedelta(datetime.timedelta(days=expire_days)),
|
218
|
+
'reset_day':reset_days,
|
219
|
+
'hconfigs':get_hconfigs(),
|
220
|
+
'hdomains':get_hdomains(),
|
221
|
+
'ConfigEnum':ConfigEnum,
|
222
|
+
'link_maker':link_maker,
|
223
|
+
'domains':domains,
|
224
|
+
"bot":bot,
|
225
|
+
"db_domain":db_domain,
|
226
|
+
"telegram_enable":hconfig(ConfigEnum.telegram_enable) and any([d for d in domains if d.mode!=DomainType.cdn and d.mode!=DomainType.auto_cdn_ip ]),
|
227
|
+
"ip":user_ip,
|
228
|
+
"ip_debug":clean_ip.get_real_user_ip_debug(user_ip),
|
229
|
+
"asn":clean_ip.get_asn_short_name(user_ip),
|
230
|
+
"country":clean_ip.get_country(user_ip),
|
231
|
+
'has_auto_cdn':has_auto_cdn
|
232
|
+
}
|
233
|
+
|
4
234
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
235
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/templates/500.html
CHANGED
hiddifypanel/xray_api.py
CHANGED
@@ -1,5 +1,111 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00t\x15\x00\x00\x12\t\x04\x00\xb8\xfbw\x0fN!+(=Gqb^\xc9\xd7\xc1\x00\x00\x00\x00\x00\x00\x00\x00])t\x1f\x0cj~\x8d\xea\x9b\xcd\xf6\x16i\xb4\x07\x11\xc5\xae\xc6\xe7\x98\xe8N\x83vxl\xcdh\xac\xea\xd9\xf3\xfd\xa4\xfaj=V\xf6\x1at\xcd\x90\x8b\x80\xc0n\xect\xe76\xccL\x95q\xba_\x05:\xd2\xbb\x16p\xf4\xc3\x94\x0c\'\xe3\x16t\xe4\x0c\x80\xf7<.F\xb9o\xce>\x14\x05\xc3\xdb%\x18yM|y\xacJ\x01%\x89\x07\xad\x90\x82\xdci\x98\x8cD\xf3hP\x953\xdf\xec2!\x1a\x8d%\xf5\xc6r8r\xd2Q\xb0\xa3\xfb\xaf\xc7\xd7\n\x19\xf3t\xe4\xe7Eq\x17\x00M\xb9+\xc1\xfa\xba\xd2W\x83\xfe\xdb\xc9\x1c\xf5\xbbj\xa2\x00a\xc5\xab\x97\xe3\r\x1a#A\x04\xf0\x18\xf9s)\xc8\xb6sTo\xc1\xa6\x87\n\x04\xa3p\xf8\xe2\x9e\x81\xbc\xd9%\xf8s:\xe4\xbbx\x12\\\xae\x9dr\xd5\xef\xf1\x85%\xcf\x04\x1b\x9dH\xff\xbe\xc1\xfb\xfbVM\x1cs\xe0\x9ee\xbb;\xf8X\xf0*\x16cL\x9ep\x15W\xe4\xc2$\xe9\xfa7\xc5\x97\x141\x1c,n\x95\xa3\xdc\xe0I\x89\xb0\xb5\xd4\x93F\x06\x84\x1e\xc7\xc9\xeb\xe0\xe30=\xe8\xa6?\xe7>\xbaf&)\x89\x10\x04\'\xca\xee\xc9\xb5\xbf3\xd5\xbb\xf7\x0ekh\xac\x88\x93\x14"V2\xf4\xc5\xa48N[:\xc5RD\x10\xbb\x90^\x92\x84.~\x970\xccy\xcd\xca\xc3\x93\xae\x10\x1b\xe7n\xaa\xa3\x95\xa7|\xf9\xd3?\xbdy\x17\x93.\xa8\x93\x91t\xacI\x8f7\x17\xf0\xf5+y\xba\xac`\'f3k\xe8\x17\x82\xbeR\x90))\xc1_\xdc\xbf9\xf1\xc3\x9b\xb3\xc8^>\xe0Rf\xd5\x0f\xd8\xee:\xc4\x11y\xa93\xeb\xbd\x04\x08\xe5+\x06\xb9\x84\xdc\x8a\x90%\x97I\xdc\x04\xfe\xbc\x07\xbeI\xdc\xea4p9}\x98;\xd3\x82\xa2\'q\xc7\xe4\xed\x11|\x1dv\xce)5\xd5\x8e\xc3\xf7G\xd6}\xe03\x93\xb6\x04\xdbdNZ\x97$;\x99\xb2\xf8fO\'\xa1\x9c*\x96\x1aZ\xe2\xe9\x08\xb9\x0c\xe0\xd1M\\\xcb\xe1\xc3\xd4\xab\x12\xc0\x83\x93"f\xad\xd3R\xf0\x81\xc0gb\xe5\xefC4\xbd\xd5\xba?\x82\x84%q\xe6\xb7\xac5\xd2m\t\xc7u\xa5O\xeb\xc5I\xadWS\xc1\x99\x05a@\x18+\xb1@\xa0\x04\xfc\x8d\xd8\xf6r\xd0\x1a=\x1d\xc9\'\x10\xbdoxi\xe0E>\xdc\x9d\x9d7F\x937\x15\x00h\xc6}\xe81\xee\xa7\xc7\xed\x04\xc3\r\xd4\xd150p\xea\xe4O#^\xf0\xbaX\xf9(?\x19\xd3\x9a\x82\x7f\xfew`|\xc3\xe2\xb7\xa3\x81\x0e&)\x03s|r\xbf\xa7\xe1?a\xc1\x98A\x8fP\xda\xd7\x99g\xc1\x88\\\x87;\xe9A\x96|\x9a\xd6\xd1./c~}\xc2W\x1a\xeb\xd4\x19\xe4T\xf2\xa2\xa7\xecM\xac\x16\x96\xd7\x0b\xb3\x16\xb8\xd8A\xed\xab\x9c7\xd1=v\x15\x16N$\\\x90d\xd8\x10\x12)\xfa\xaf\xeb2%\\\x0e3\xc4Th\xb0\x05R\xc78AJ\xb1:\xfe\x1fg\x1f\x8ff\xa9`\x03\xd7\xb7\xd7r[s\xed\x94\x96\xaf+\x08\x96&\xf8D\xa6\x15\x9e\x1d\x9d\xa2\xdfqA\xc3\xe3\xb2r\x8a\x99_FT\xdd\xf6\x83~\xe9\x90=\xa6\xa3\x15\\9\x92\xcd\x10\xa4\x96\x90\xdb\xcd\xb1a[Px\x98b\xd5#z\x99\x84\xcc\xfb\xb6<L\x0e\rY\xce\xee\xfd\xef\xc3J5\xac\xb8+i\xfc\xe47\xb7H\xee[c\x00\x9c\xc3]\x0f\xc3\xfc\x8f]\x1a0\x13?\xa9\x88K\xfb\xc8\x1b\xe7\xf6\x9a\x95\xe1\xbb\xe8\x89\xad\xaa=)\x9eXI\xff\xab\x91h\xad\xf4\xb5\xcd\x1c\x87w\xed\x97\xd3\x7f\x83TF\x95\n\xf7Y\xef\xa1\xf9\xcd\xa6\xeed\x11\xfb\xab\xa7\xc3\x9e\xac\xe4\xb1Q\xaft4\xb2+\x03\x160\xe9@|\xaa\xd6v@\x9f\x82\x97\xb0B\x8c\x1d\xac(\xbb\xff\xa4\\i\xd4\x06\xb4-{r)\x03\x01>\xb2rCNJL\xfa\xf4\x9d\x1d\x9d\x01\x8aP\x82\x11\xfa\xd9\xcd/\x12\x9d"\x15\x1a\xdc\xb1y\x02\xc0\\\xa7\xaf\x19\xf27x\xcd\xe7\xf0\xfe\xcc\xfe\xc1X\xc0\x8e\xf0\xee\xd2\xb1\x82+\xcf|\xb9\xc6\xa5\x9c\x16\x02Y\x08\xe4p\xb6H\x8a{pTl3b\xccJ.\xdb\xa2\x8fZ\x16.\x94d\xe3\x13.\xaa\x92\xc0\x12x\x90\x01s\x12rYo\xe2\x86\xba\xce?\x14-1:\xd3\x7fN!e\xb68q)\xcd\xb0\x1f\x08C\xde\xbeT)\xcdy\xea~\xc3v[\xa3\xb2\x86p[\xe7Z;\x15\x98\x17\x1f\x7f\xfd\x92mR\xdcI\x10\xc5\xedX\xea\xf3\xc7\xaa\x8a\xaf\x94\x82\x84GT\xe8eb,\x10\x1e[\xbd\xa3\xdc+Q\xc4F\\@\x0e\xd2\x9cMU\x9ej\x7f6\xa7v\xf4\xf4\xb6kV\xa3\xb4\xc7\x18\x9d<\x89\xce\xf7\x8d\x8d>\xdb$\xc1\xc2\x03p\xf9\xce\xbd\x01\xba\x1f\x83g@<\xa6A\x11I\xd3m\xbc\xe4\x11\xde\x80\xe9\xf6\xcfR\xcb\xf8\xe5\xb4\xc0D\x9b\xa4}-\xe2\x1dwt\x15\x1f\xbd\xb2\xf9\x8e\xb7\xd5\xfd5\x81G:@\xd8D\xed3o\x8f\x99\x1d.\xbd\xb7\xd9\x94\x15\xee\xcaRw\x06\x13\xd9\x8d\xf7\xfe\x14/2/K\xbc\x80\xa8\x9eN\x90\xc7\xef\xdcl\x9b#\xa2\xd0\x93\x9c\xdd\xf9\xae$4G\xfd\xe5%\xf5\xd3\x10\xddiU\x8e=\x8e\x7fW\\j\x8a\xe04\xb2\x8c\\\xe1\xd1\xab\xb6\xbf\xff\xb3g2lG\xaf\x1b(k\x11\x9e\x0c\x04\xb5\x160\x9b\x10h\xeb\x8f1\xe2\x95rFm\xf8\xdc\xe1\xc1^\xff\x8b\x18\xd6\x93\x03JXP\xf7\xbeh\x1c\xfb\xc6\x05L\xe9A\x89\xb8\xc4J\xd5\xa8\xab(OH\xa6[nB\x0b+\xbdq"\xde\xf3\xe3\xa6\xc2\x9b\xb6\xd8\xe4UO\x9d[bw\xc6\xf6\xa2\xd3\xe8\xce\xd6\xd9n\xa4e\xb0\xbc\x04l\xf7\xef\xd7\xe6z\x83\x14\xa6\x9d-H\x13\x02\x10\x95\x7f\xc3\xd0c\xf4\x02c\xbb\x07v\xed\xda\xbb!\xb6\x9a?\x1e\x0c v\x02+\xe4!\xba\xd9\xdf\xd1!)\x8b\xe2\xa5\xa7\xbf<\xec\x87~6\xda\xe5\xaf\x1b\xb2\x02\xeb\x94[\xadB\r\x03\xa6$q\xb7\xa7\xacf\x15\x95Z\xf6\xff\xb5\x0b8\x91\x80\xde\xc5J\xf5\xba\xb0\xc4\xd6\x03\xf5\xe9%\x7f7c\xc5J\x07\xccm&\t6}\xec\x1f\x96\xee\x9fyMy\xad\xc6d\xc6V\xd4\xb3\xa1\xd1\x05\x83\xca\xb0F\x0c\xc2\x03\x9dT\x8c\xc4\xbc\xfe\xb1\x06\xeam\x8d\x02\x16E\xac\xde\x8d\x7f\xbf\x94\xdf\x8f\x89\xdbX\x1f\xfd)\x98Y\xba7\xd3v\xee\xc3w\xca\xf1\x16\x92\x80o\xef\x19,g\x89\x11\x96C@x\xd4HlH&\xbf\xaf\x95\xa9\x89D\x06w\xc4:O\xf8\xb2u\xc5\xcbJ\xd9\xc4\xa1\x17Tw\xd8~ob\x96a>\n\x9a\x81+\xaa\x17\xf8\x05\x92C\x9bh\xa2\xca\n"\xd4\x104P\xa8.\x8fC\xa9k\xa0\x11\x07e\xb0\x06\xb7\x1a\xb1\x08.\x15\r\x9c~\x17Z\xea\xeb\xae\xaf\xc7\xb3AI\x12N\xf9\xe7\x0b`;7\x99\x01\xf4W\x839\xc8\xd8\xf1\xb1\xbf\x83,=\xd5\x93\xber\x9ee\x98\xed{\xb5\x9d:\xdd\xb9!\xca\xe7\xfc\xdaL\xa0B\xcb\x894\x0eWb\xef\x01\xcd\x80\xc8\x0c\xb2\xc2TQc\xff\x81\xd6f\xf9U\x9c\xe7\x1bpm\xba|\xdc\xb4Jq\xed\xc2\x08gB\xa5\xda@<e\x81\x97\xd6(%"D\xa0\xbe\xe2\xf8+\xa3\x19\xd6\x04I[\xed\xac2\xfe\x83\x1f\x87R\x99\x81ll\\\xc7\x85\xa1\x89\xe2Q\x98LO\x95\x00z\x17\xd3\x1c|\xfb\xa9]:\xeaMF*J\xec\xa5&\xb0\x17\xa6\xd5\n\xd9{8\xbe6q\x1d\xb7\x05\xe8\xda^\x94\xc7I\xe8\x9b\xba\xbf\xb3}\xf9\xceJ2\x9a\x86\x18s\xe4\xf8\xfe\x05\xed Z\x8b\x07X(\x9d\xf1\x13\xb1\xa1\x10.\x7f\x16<\x96\xb2;\xc8\xf6\xbb+R\xcb\x12\xe8ta\x0b\xa7.\xe4\x96\x94\xf6\xba\xa2L\xbe\xd81\x92\xb4(\x05\xdf=@\xb0W\xad}\x18%N\x08\xa75;D4\x1a>\x84\x96\xb9\xb1\x9f\x92\xc6%Mn\xf4\x05\xe2C\xcf\x87\x15\xaf\xe2dR\n\xf9\xbf\xe2t\x1c0\xc0\xde8\x9d\xdb\xc5\x9d\x81\x99\xb8\xbf\xb4[\xff-{\xbd\\R\x84Y\xf2}\xd5\x0e~x\xcd.dZ\xbd\x14M\xa3\x1b\xec\xca\xdc\x98\xf4\xfd\x82\xf9\xc2\xd4\x1b\x8b\xeb\x10:\xb0@=\x01\xd3\x10!1=\xfds\xf9\x9e\x11\x0eH\xbe\x16\xab\xe8\x98\xc6K\x8a\xf4b\xc3\xcaC\xcc_{jS5\xcd\x00\x11\x13&\xba\xa9\x9aP!\x8d_\xc0\x04\x92C7\xa8\xdf/\xfb\x17$\xe6\xdd(Ij\xe6\x95\xc2l\xe2\xec\xf7b\xa7F\xa9\xe8\x81\xbf\xb0v\x95\xf6\x1a\xfc\xc2\xa6Z\xb42\xa0\x98\xf2\x81\xcc\x98@\xba\xf8\xde\x88\x0f%\xf7\xf0\xd7QH\x0b\x85\x00V\x85\xbe\x98\x957\xbd\x00\x03\xf7p\x97o Mb!\xe2\x0b-\x8c\x9e|\x82\xf4\xe2C\x00a\xe6\xec\x0e>\xbd\x14Vu\xad\xb8\xca\xb0\x04\xb2\xaf0\xc8\x04\xd9O\xb9}\xfb5\x93\xd2\x86\xc2q\xef\xdcM\xaf\xd0\xd0\xa8\x08\x14\xb8\xe2\xaa\xa0@\x7f\xd5i\x85\x01\xce4\xfec\x16!<\x91\xe6\xf6<;\xd3\x01$vyF\x82\xf0\xe2\xd8\x88gJ\xaf\x17\t\x1f\xf2\xaf\xe9\xf5\xfcw\x9d|\xd5\x91\xed\xd9S\x99\xcb\x91\xff\x15\xe7\x85\x98\x8f\xfcY.\x1f\xc2\xbb\x8a\xec\x0bUF0\xa9\x03\x1ey\x1bb\xcfs\x99>\xa5\x0e\xba\xa3\xe3\xea\xc5\xc8\xb5\x00\x1c\xcd\x1f\xc8\xc9\xe2;}J\xfe)`\x962\x19\xd4\r\xba\t\r\x14\x83\x15\xec4Dw\x08\xf7Cu\x07h7f\xed"\xb5\xf1\x1e\xa3\xc0=\x9b\x8dU(Y\xc6\xc6\xdd\x9d\xe6\x94\xf0\xb8\x01\xbdRO\x85L\xf7>\x15,\xf9_\x1a\x96\x98 \xd3\xc9\xde\xdf\xdbq|}\x894f5\x93q\xb4\xc8j\x14\xbe\x9e\xac\xe4\xd1\xb8\x17\x06JeH\x96g\x1e<\x93\x1e\x80\xe1\x06\x0e\xbd(j<\x9b\x0cW>\x18\xbd\x10\xf7\x16F\xca(%A\xadM\xcd\xd8\xc3\xb8\xc3\x94H\x8d\xe7\xf9\xb1>`k]\x02\xf4\xed\x86|\x89`\xb7\xb8\x89\xf4\'\x95\x82\x1b\xa1oiU?\x85I\xfc1\x96\x02\\>\xb8\xa6\x93\x9f0\x1el\x82\xa8\xed\xa2I\x08}\x92\xcf-\x82=\xcf\xbc\x93\xadz)\xa6)JJU\xdf\x9e\x80\xd1C@uWX\xdd\x0b\xdf\x15"\x88%\x80\xd1-\x04\xe2o\x13\xcf\xbc\xb3\xdf\xcaKZ\x1f\x03\x15\xf2\xf3:\xa2\xc9\xaf \xda\x96\x99Z\x1e<~\x864\x15p_\x8308@\xc5\xdd\x9b4\xd2\x9f\xb3\x87\xb1\x10m\xca\x15ql\x96\x97\x98\xe4zEm#W\xae5\x87ev2-\x04\x16\x82\x18\xa8\xb6<+`R\xd7\xb8\xaf\x8c"\xf6MG\x1cs\xf6\xe1\x99\xff\xdf\xee\xb1J\xe7V~\xb3\x9f\xfc\xd9\xf5FOW\x16\xd6\x83\xdc\xe7\xff\x8c\xdfr1p/\x90\x19<\xba|4\r\x13\x8e\xfc\xff\x18\x84\xb8Dq\xc0\x0f\x00\xdf\x19Ai\xdb\x9c\x8ag\xc1@I`\xabbi\xa0PZ\xef]wN/\x1eGX\x83\xfc\xbe\xfe\xb15gV\xd3\r-}J\xf0\x95\xfa+{@\xe3\x80\xcf\xaa\xa1\x9d\xd8\xe8\x98\xcd\x8eM\xe3\x886`7H\x98\xd9\xaan\x15\x814\x07\x0f\x19W^\xfc\x1a\'\xb4D\r{{\xa0\xd7\x82b\xd0Q\xd2\x9f\xd2\xedQ\xf1\xf9\x1bC?Z\x9fs\xc4\xa1\xb1\xc4b\n\x951\x05\xf1\x81\xb6\xcd%\xaa\xb2vJ\xc6\x15\x15`\x83\x16\x9e\x86\xd6\x13\xc8\x88^\x18F\xc0~\xac\x8c\x8c\xd5\x8agk\x88\x14\xcd\xe2\xc3\xd06\x1c\xfb\xf2\xce\xbe\x91\xce.@\x15\xd5!\xfa\xd2\x92\x13\xfe\xfa\xc1\xa0\x9f\xacPeF\xc5\xdaD\xa8\xcax\xdc3\x10\xaf0\xf1@\xea\x84\xcd\xc4\xec]\x9e\xb7\xd3\x88s\x82\xd1,c\xc1_\xe1\x8di\xf7\xbf\x0ciT+\xb0Oq\xfcV\xa7\xad_\xa4\xc2De`\x8a\xbb>C\xe4\xa6\xcc\x80*m\x9b&\xf4\x87\x99\x19\xcb\xd8\xea\x8fQ\x13\xdc\x1a\xf0Z\x88KB\xdd\xc3\xe3\x91\xb6<\xd6h\xb350e(\x01\xc4\x8f\xaa\xd9\xc8\xdaSW\xab\xb4\xaa\xa8\xb4KN\xab\xe54(\xdb)\x94\xd8\xaf\x12c\x0f\xaaM\xe10\x1azi\x82\xf1\x9d\x8b}\xb4\x8a\x03\xd8\xcb`\xdc\xfb\xffa\xd7D\x91L\xa4\\\x84~S\xa7\xcaa\xf0\xbe\xc0\xbc\x85/s(m9p\xd01x\xf4\x00\xcf\x89\xbe\x9b\x13\xa2\xcb\x0f\xb1\x86\xe3\x93F\x1f\x1fy\xe8\xb5St}\x9aC\xde\xc0\xe8^\x83W^\xe3a\xde{\xa1\xcf\xc4\xfcs\xd6\xbe3\xd8\x85\xea\x15\x05\xd0=\xdd\xed\xe9%p\x1dy\x04%\xa1\x16\xf5\xf0N\xf5P\x9b\xfd\x93\x9e \x93\t\xd7EC\x880\x9f\xb6\xa4\x8a[\xe9=&\x9f\x94\xa1\xb9R\xef\xf3S\x96\xa6\xbb\xf2M\x10Qd\xc77\x05\xb0_PZlpE\xd4\x1d\x94\xd9\xa7\x9aj\xf1_\xa5\x84\xad\x96\xaf\xd5\xa2\xebi\xda7e\xb1\x86\x12\xd9\xb4\xd2Slo\xd9\x17\xa1:0,e<\x97`(j\x7f\xe5\xb2j@,\x963\x82\x87>\xbf0\xdf\xc9{\xe6A5IM8\xd2\x1b\xb8\x9d\xa4\xcc\xd5\xf3\x12Zj\xf6:;\x1c \xb3g\nu\xd6\x9e#\x12\x801\x8cB\xdc\xabZ\xeaH\x05\xc6k\x0b\x96\xb0\xa0\xe7r\xfd\x184\x8b^\x95\xda\xe5\x88\xdc\x9a\xd6Jz\x1c[_\xb1\xb9\x8a\xd1\xa9\xdfa\x80\xa1\xce\xc5\xf5D\xd3+\x94\x18g\xd7\xea\xadTqbZ\x0f%B\xa4\x94q\xe1\x99\xe061\x9bF\xb8\xb4\x17\x85\xaa\xc3\x18*\xc7\xb79a\xd1\x9fI|\x84\xc1G\xfb#9\x87p\xa3)\xb0\x05\x82\xb9\xac$r\x15@\x05\x9fpG\x16\xa0\xd0e\xd4-\x8b\x8dIL\x98[\xb6xH\xb2j\xc5\xeb\xc7\x9dw}~c}*\xeb\xd5k\xaf@\xdc\'\xb8\x1c*\x1f\xe3z\xdceQY\xd3\xd8\xec\xfa{yN\xe4h\xc1\xb3\x00\xe2\x0b\x144?>\xf6J\xcc\xab\x18M\xc0\x99\x04\x11\xff\xd1\x0e\x05\x17:\x15\x81\xf9v\x0fdA\xf9\x07\xfd\xd9\x0e(\x8eRQ\xd1\xd9^\x0eS\x00\x0e3r[_K\xd0cK3\xe8FX\xed\xb0\xaf\xbc$+\x0b\x03\xa5\x0f\xf0f\xba\x12\xa9\x9d)IQ\\\xbe\xfa\xacJF\x85W\x1b\x03\xcbd\xdb\x08\xf4\xd7\xb4\xc9!\xfe\t\x08:m84\x05\x82\x16|\xa1\x0ee\x00\xb8\xf1d\xfd1\xf9\x7fa\xd7m\xd2h\x1b\xcd \xac\xa2H\xa7\xf6\xac\xc7\xdc\xf7\x15\xed\xf6LZ\xac\x8f/\xb3\xe3\xbf\xa8\xae\xe5\x0bS;\x8d\xc5(\xcbS\xc9Z\x8f\xd3~\x9a\xb1\x01\xbd@\x1e\xc2\xa4\xbd\xf3\xe5\x9e\x11RJ\xa9\x0e\x8c\x8a\xfc\x88-\x8at\x0f\x12\x9d\xea\xf9\xb2>\x8c\xd2\xe7\xae\r\x11~=\xea/\x1a\xb0\x17`\x8f\xa9Px\xc9\xde\xe2\xa3\x1f=\xfc\xe7\x91\xc9E/\xb0\xe1J8\xbb\xc6\xbe!\xdc V\xee\xad\x91\x10\xfaM\x98\xb4\x84WdC\xd1\xc0\xf7H\xb3\xc8\xcf\x1bhzb\xbd\x9eo&4,&\x86\xb8\xdb\x0c\xec$H\x93\xb0\x10\xeax\xf5{-u\x9f\xc2\x99Q,\xd5\xda\x83\xb5\xb0\xb3\xc4,\xbeP\x19CZ\x197l\xec\xb9.\xb8\xd1^I\x1c\x80-a\'I7d\xc4r\xd3\xdc<\x01q\x19\xab\xfa\x95\xdf+\xd3\x82m\xe8=\xc2N\x12\xac\xe4% \xc0z\x8cH\xad5t\xff\xee\x18\x06\xe4\xbd\x98\xe36\xf8\x98q(R\x13\x10\xc6\x9c\xedD\xeb\x9a\x89\x8dA\x0b\xb2;\xf1\xaa\x0c\x07\xb6}|wgZ\x02\xde\x8am6\xf50r\x10\xde\xbeC\xaew\xf9_N\xb4\r\xa7A\xd9\x13mL\x17h\'$(HG\x8evpt\x8av\x08.\x10\xdb\xb0|RE\xeb\xaf\x07s|\xd4A\x8b\xb3<\xe5\x0f\x9dR\'\xdal;\x95_\x9f\x89\x0b\xfe\xd0\xc7\xe3h\xdc\xb7\xca.\x16D\xa8\x93\xf9x\xac\xafFn\x1e\x19\x7f\xa6\xf2@pak\x85$\xa7\x82\xfe\x8f\xa6\xb0\xd8\xbf\xac\t\x84\xc5I\x88c\xae\xaf;"\x17\xe9\x9bf\xe3\xc1\xe4\xa8\x1c\x07\xfc\xf2\xd4\xd1\x90\xff.X\x89\xfb\xd2a\xd1?\xa9,\x8d4+\x1e\xb6"c!\xb3;\x01B\x04\xd6+\xc9\xe3\x16\x0f6\xca;\x04\xf1\xc6\xa2\xd5>\x08\x03\x88\xae\xe5\xb5}\xf4\xab\\\x81<J\xdf\x9e\xd5pA\xa1\x94\xf7\x16\xa7\xe7\xd2\xa6Ja\x07\x1dG\xaa\xb0\x9e*5\xdd\x1a\x183]B\xd9IW\xba\xd0A3\xec\xfe\xd7t\xdd#5\x0c\xd6\xe1\x07\xda\xe5\xcf\xa7|kuV\x1f\xa04\xa3\x0b\x97\x15W\xfe{7*-$\x0f\xc0\xea\xeb\xc8\xdc\xebm\xf96H\xf0\xfb\x94\xefZ\xfb\xc5]\x14\xa2\xb3\xea\xe6\x8c4\x81x\xef\x15&\xa7,\xc7$?\x9f#\x17\x96\xab\x91W3\xd0\x01i\xe1|\xa4\x9bn|\x16(\xe4\xcb\xb7w\x11t\xbb\x04\xe7_.\x88\xc48\x1e\xd3\xef\xa4\xb8~\xde6\xc7\x16\x13\xb1=\x10\x9f+\x15\xed\x13H\x13G\xee\x89\xbb\x0f\x1c\x01\xa1GSU\xee\xd6"\xe7\xd4\xd3\x9b\xef(\x9b\x91\xe9\x8f`n\xd3\xfb\x80\x1d<\xf3I\x04\xccS\x95\xf9\xa9}\xd2\xa6\xc0\'\xdd\xc0\x0f \x92\xc2|J\xb4\xbb\x15\x85\xc19\x9f\xbc\x8e\x99\xdf\x86>]\x9b$\xf6\x0b\xf1\xc2\xf2E4\x9dx\x18},\xaa\xbeq\xadTu\xa9U\xe4\xb4L\xf8\xc3\x11\x84\x94Uh>x\xd0B\xd2G\xd8\x95\x0bo\xf4\x18\xfa\xf6h\xbb\x19?5*\xd8\xae\xcd"\x95tMY\xc3\x83\xd0\x03\x91\xd3q\xbf=\x0b(0w\x97\xd6\xa1\xe7\x10\xfem\xf8v\xf9q\x8c\xb1\x9b\xf3n\xa5\xfe:k\x84J.\xab\xf6\x93\xd7\xc5@\xf8{\xa6kT\x14\xdfhX\r\x01\xf8\x16)\x15pT`\xe81S\x9f\x7f\xe4rcciYz\xd2\xe9\xa5\x9b\x1cF\xed\x9bM]\xeb\xc46\x82m\x17\xb3\xa0\xabOt7B\xcbR\xd9\xa5\xb0m\x11Bk\xce*\x0f\x18\xde\x06\x88\xe9p\x1d\x97\x06\x17\x9c\x8c\x96\xd0\x8e\xa2\x0e\xd0\x07L\xb9\xba\xfc\xf4\xa3\x93f\xac\x03.~m\xcdu\xdb\xa5\xaf\x9a[KuG\xa5\xc5\x05\x0c0\xf3\x9e\x9e\xf8\x91\xb3(\xe3\x93#\xba\xa6\t\xf2v\xb8^\xd4\xd7\x84P\xb3\x05\x83\xd3I\xa5y\xde]\x90\xd8(/\xe1\xaa\xeeQ\x98k\xddS\xb6\x85 s\xd4-\xffz\xa1\xe8!\xe0S\xe6\xc2ui\x1b\xe0\xd5\x96\xa1Y\x98\xd4([eu\xdf\x9e\xe4\x9c\xb9\x08|\x91\xcd\tH\xf5ce\xf0\xe7Z\xddX\x0bUB\xfe\xe9\x89\xbd\xfc\xf6 \xf94\x9f\x84q\x1d\xea\x98\x99\x92w7\r\xf0\x8a\x81\x9c\xdc\xdd\xa4\x99\x89D\xc3`v\xefV\x90\t /8\x8e\xf8\x90\nRa\x08\xfc\xce\x85\xb5F\xe2\x04h\x01\xae\xcec\xe5\xfa\xcb\xb6\t\x07\x90&\x99\xb0\xeb\xb1\xba\xecZkrW\xe2R$\xb0\xda.\xaa\xaa{\\\x07\xbekh\x92\'k+\xc9\xe6\x89\tK\x82a\nZ*\xba\xdf\xb5\x02\x8dT\xb0\xb8\x1d~M\xed\x82\xa8\xc8\x86\x8e|\x9f\xb6P,BAf\x0f\r\xf4\xae%\x14\x123\xbd\xcf\x0cqr!d\xe3\xd5\x1e^\xa8\xb4j]%S8\x8fO1H\x7fO\xc5\xf7I\x94\xc7\xcd\xa4\x9b\xd7\x9e\xbe\x1d\x05\x99"\x1a,A{m\x8f\x16\xdc\x0bwy\x0b\xf29I\xe0\xa9,\t{\x14d)\x8b\x87,9e\x04]\x8cB;R\x84\xac& \x83)\xe3#\x94\xca\t\x87\\W\x1e\xd5N\x19\xcb\xe0\x94>\xa4\x84\xd7\x02\x07X\x9f\x16s\x16n&@\xe3\x10\x05H\xa5>QN\xb7\xde\x1e\xdb\xd8\xf0\xdd\xd8l\x02\xf7\xce\xf6\xa0\xa3Q!\x82\x9e\xdb\x0b\xa0\xd3?p?Z<\xac\xd4l\x1c`\x9e\x8e\x80\x8dq\xe6pz\xef \xb2\x11\x87\x93\xad\xd7\xb7*t\x999\x98L\xb96\xa2\t\x81I\xea\xd6=\xcb\x0f\x03M\xf3Y\xe3H\xbc\xef\xf3\xbc\xf6\xe6\xeb\x7f9{\x04/Ut\x0184c\x06\xf3d\x8c\xb0j\xd4DS\xe4\x0c]o{Vk!\x92\xf5Lm\xce\x91\xb8\x82\xfcBQ\xe1\x01\x9f\x89\x80dH\xa1\x1d,\x15(\\\x9a\xc8\xf8p\x7f6XI\xfb\x93\xb8\\`2\x0c\xfa\xd7\xed\xbd\xf6\xa7\xc3j?o\xf2\x1f\x00\xe6\xacd\xbbR\x8fG\xe9\xf3h\xa2N\xe2\xce\'\xea:|\xd5\xaa]l@\xe1s\xe6\x90\x96G}\x90\x1a\x81\x02X\xf2\x08\xf1\x87\xbc@\rN\x84\x14\xf8G\xb6zF\xf2jll\x0fF\xecu\xcf\xf9\xc9\xc9\xae$\x8bE\xaew\xa2"\xc9=\x94\x9b\xfa\xc8]\x03\t\x04\xa1\x8b\x87V\x04\xca\xa2\xd6\xb7U\xf8\xc5\x91\xb5\x9c\x045\xbbY\x03\xaa\x9e\x08\t\xb8\xb9a\x1c3\xe2\x8eI\xee\x8aZQ\t\n\xcb\xf6\xf7\xe4t\x87k\x0c\xc2\xf8\x88\xf451\x93|\x9d#\xb6-\x14\xa6\xcd\x86\xac\x8dV&1\xb2\xdek\x1f\xe7\xf6\xfe\x90\xefa\x86\xea\x8f\xdaM\x9f7\xf8{\x9f^\xe8tc5\xe8\x99]\xab1\xa40\xad\xc3\x19\x1dI\x12\xb6\xf2l\xefS<R\xd4\x14S\xce4\'S\xa8s\xbf\xe2SO]\xdeg\xa5W\xc54\xcc\x18R\xcc\xbf\t(Q\x16\xcc\xf0\r\\\xe1\xfd\x04\xb4\x89\xe1\xfadv\xdbp\xf5wf\xc7,\xec*\xcc\xfd\xe3\x1e\x1a\xbd\xc1\xabP\xcb\xd2!L.\xa3\ru\x8e\x84\x08\x9eL \x7f\xaf\xbd\xc3?_\xdb\x84\xf0j\xc8V\x0f\x8d\xa2\xd6\xe4\xd3\xb9\xe2v\xe3u\xaaJ\xa5i\xa6;`&\x1c\xb0\x8bS\xb9\x03C\x1b\x10\xe5~\xa3\xd5\xe1d\x8f:P\xad\xad\x85\xdc$\xacQ\x9b\xa0\x93\x08\x14\xb6u\x06\xf3\xff\xce\xce\x00\x15\x9c:Wh\xbdk!E%\x16\xfdv\x05\x98\xdd\x86QR\xb7\xbbs\x14\xfdS_\xf0l\xb6%\xc7\xbc\xd0\xfd\xf5\x17\x1d\xda\xbb\xf6]\x92\xddy\x8a\xf8I\x18\x9d\xf5\xd6\xbbO?{Nyj\xa8\xa8\x92u\xc0z\rr\xea\x89p\xf9\xafz\x91\x98\x89\x92\xe8\x81\xf6<\xc6\x82\xe7Xy\x8a\xe8\xea\xe1\xd08\x9a\xb62m]\x19\xec\xd1\x0b\xde\x1e\x1f\x89\xd5ks\xdcr\xb2\xbd\x88\x9b\x02,P%\x98\x0cp%7\x16\xb0\xe8\x8c\xe1\x80\xda\xefI\xd8\xf5W\x88\xfe<H1E\xd7\xe0\n\xdf\xaa\xf2\xd0\xa8\x1e\xc7\x16\xe6\x7f_;\x81d9\xd0;XzAz%\x8a\xa6\x1b\xb2^\x94\x18.\xe2\xa9\xe8\xa5\xdd\xd3N\xeb,\x1e\x0b\xae\xc3,\xd8\xd2\x87\x82\x04\xc3;\xf1\x15\xf1\xdbB\t\x8c\x18\xfc\x9f\xa8\x1e\xa8\x0c2\x0fv\t\xb6\xc9:\x87\xca\xbcX\xbd\x81\xff\xc5\x0e\x17\xb0#\xbc\x8e\xc6b\x82 *\xdd\xe6t\x9a\xe0WN>9\xd53I\x12\xe7\xc3\xbf\x92\x84~W\x13\xf90K\x87\xd7\xf6\xa6\x1e\x85*C\\\xa1%!\x1c\xa9-\xdb\xb9\x8eo\x0cn\x11\xf2\x01\xc7\xcbR\x8cKL\x8d\xe6\x0cE\xae\xc2\xc3\xdbP\xb5\xb6v\x81\xb3gK\xbb\xbbWe\x02\x15D~')
|
1
|
+
import xtlsapi
|
2
|
+
from hiddifypanel.models import *
|
3
|
+
def get_xray_client():
|
4
|
+
if hconfig(ConfigEnum.is_parent):
|
5
|
+
return
|
6
|
+
return xtlsapi.XrayClient('127.0.0.1', 10085)
|
7
|
+
|
8
|
+
def get_enabled_users():
|
9
|
+
if hconfig(ConfigEnum.is_parent):
|
10
|
+
return
|
11
|
+
xray_client=get_xray_client()
|
12
|
+
users=User.query.all()
|
13
|
+
t="xtls"
|
14
|
+
protocol="vless"
|
15
|
+
enabled={}
|
16
|
+
for u in users:
|
17
|
+
uuid=u.uuid
|
18
|
+
try:
|
19
|
+
xray_client.add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='xtls-rprx-vision',alter_id=0,cipher='chacha20_poly1305')
|
20
|
+
xray_client.remove_client(t,f'{uuid}@hiddify.com')
|
21
|
+
enabled[uuid]=0
|
22
|
+
except xtlsapi.exceptions.EmailAlreadyExists as e:
|
23
|
+
enabled[uuid]=1
|
24
|
+
except Exception as e:
|
25
|
+
print(f"error {e}")
|
26
|
+
enabled[uuid]=e
|
27
|
+
return enabled
|
28
|
+
|
29
|
+
def get_inbound_tags():
|
30
|
+
if hconfig(ConfigEnum.is_parent):
|
31
|
+
return
|
32
|
+
try:
|
33
|
+
xray_client=get_xray_client()
|
34
|
+
inbounds= [inb.name.split(">>>")[1] for inb in xray_client.stats_query('inbound')]
|
35
|
+
print(f"Success in get inbound tags {inbounds}" )
|
36
|
+
except Exception as e:
|
37
|
+
print(f"error in get inbound tags {e}" )
|
38
|
+
inbounds=[]
|
39
|
+
return list(set(inbounds))
|
40
|
+
def add_client(uuid):
|
41
|
+
if hconfig(ConfigEnum.is_parent):
|
42
|
+
return
|
43
|
+
xray_client=get_xray_client()
|
44
|
+
tags=get_inbound_tags()
|
45
|
+
proto_map={
|
46
|
+
'vless':'vless',
|
47
|
+
'xtls':'vless',
|
48
|
+
'quic':'vless',
|
49
|
+
'trojan':'trojan',
|
50
|
+
'vmess':'vmess',
|
51
|
+
'ss':'shadowsocks',
|
52
|
+
'v2ray':'shadowsocks',
|
53
|
+
'kcp':'vless',
|
54
|
+
'dispatcher':'trojan',
|
55
|
+
}
|
56
|
+
def proto(t):
|
57
|
+
res='',''
|
58
|
+
for p,protocol in proto_map.items():
|
59
|
+
if p in t:
|
60
|
+
res=p,protocol
|
61
|
+
break
|
62
|
+
return res
|
63
|
+
for t in tags:
|
64
|
+
try:
|
65
|
+
p,protocol =proto(t)
|
66
|
+
if not p:
|
67
|
+
continue
|
68
|
+
if protocol=="vless" and p!="xtls":
|
69
|
+
xray_client.add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='\0',)
|
70
|
+
else:
|
71
|
+
xray_client.add_client(t,f'{uuid}', f'{uuid}@hiddify.com',protocol=protocol,flow='xtls-rprx-vision',alter_id=0,cipher='chacha20_poly1305')
|
72
|
+
print(f"Success add {uuid} {t}")
|
73
|
+
except Exception as e:
|
74
|
+
print(f"error in add {uuid} {t} {e}" )
|
75
|
+
pass
|
76
|
+
|
77
|
+
def remove_client(uuid):
|
78
|
+
if hconfig(ConfigEnum.is_parent):
|
79
|
+
return
|
80
|
+
xray_client=get_xray_client()
|
81
|
+
tags=get_inbound_tags()
|
82
|
+
|
83
|
+
for t in tags:
|
84
|
+
try:
|
85
|
+
xray_client.remove_client(t, f'{uuid}@hiddify.com')
|
86
|
+
print(f"Success remove {uuid} {t}")
|
87
|
+
except Exception as e:
|
88
|
+
print(f"error in remove {uuid} {t} {e}" )
|
89
|
+
pass
|
90
|
+
|
91
|
+
def get_usage(uuid,reset=False):
|
92
|
+
if hconfig(ConfigEnum.is_parent):
|
93
|
+
return
|
94
|
+
xray_client=get_xray_client()
|
95
|
+
d = xray_client.get_client_download_traffic(f'{uuid}@hiddify.com',reset=reset)
|
96
|
+
u = xray_client.get_client_upload_traffic(f'{uuid}@hiddify.com',reset=reset)
|
97
|
+
print(f"Success {uuid} d={d} u={u}" )
|
98
|
+
res=None
|
99
|
+
if d is None:
|
100
|
+
res= u
|
101
|
+
elif u is None:
|
102
|
+
res= d
|
103
|
+
else:
|
104
|
+
res= d+u
|
105
|
+
return res
|
106
|
+
|
107
|
+
|
108
|
+
def hconfig(a):
|
109
|
+
pass
|
4
110
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
111
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|