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
@@ -1,5 +1,418 @@
|
|
1
|
-
|
2
|
-
|
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\xc43\x00\x00\x12\t\x04\x00?[\xda\xe5\xa1?\n\xfd\x82+\xb1\xa5\x14\x1c\xa1\r\x00\x00\x00\x00\x00\x00\x00\x00\x80(\xe8\xb5\xae\xf3\x0e\xea\x93]t\x01\xa8p\xf2\xe9|\xd1\xea\xe5\xe0FJ\xf1\x95\xa4\xeb#\x0b8\x1a%(T\nX\x04\xb0x\xb8\x1c\xb6\xb5\x91T\xf3\x009\x83$\x9a+ \xc4-9LRd.\xca\xbd_2\xd3;W\xae=\n\xed\x05p\x03$u\n\x13\x9f\xf7\x90&\x91}\xc8\x91\x9cV\x10\xafx{\x83\xf7~\xdb\xdcg;\xf4\xed\xb2a\xf6\xf6w\xe5K\xb13\x95&\xbb\xb9\x0e\xc7@-M\x0f\xbd?\xc5\x84\xb2\xbc\x18\xcf\x9bJ\xcb_\xb7\xee\x1a\x19\xd1Gv\x19\xa64\xa9\xa0\'\xae\t#=\xc0\xfe\xe8\x1d\r\xef/"j\xaa\xaaC\x91\xf9\x04\x91\xf8\xac\xa6\x047\xd7s\x07\xcfu[\x98s\x9c\xd4\x92\xcd*6\x9c\xac\xb3vRw\x8c\n\n\x9ak9#6\xd1\x9f\xe3W\x04\x04\x91\x15\xc8V`\x95\xb0/\x84\xb3\x1d"t\xae\x95\xcccKKz\xa62\xf2Q\xa8\x05\xdc~W\r\x00\r\x96\x11\xdf\xb2\xc28\x85\x14\xd1h\xe6\xaa\xf3 eK\x00\'(]l\xb6vw$\x94PE\xf4\xdc\x92\x0bYU\x92\xe1\r\xe4Q\x84=\x13\xb6\xa0u\t Q\r\xb0\xa3\xben\xfdU\x121HG6\xb3\x85_:A\x1d+M\xa8\xa2\x10\xff\x8b\xf5\x05\x10\x10\x0c\xc9#*-*\x8e6\x1e\\bq0\x86e3#1\xbe\xd1\xd7\xd0\xff\xe3G\x8c\xee\xd6\x0f\x06\xc3z\xa8\n\xbd\xe7\xa6H\x8a\x10X;S\tQ\xa6Y\xa1W\xee)6\x10\xebL\x01\x9a\x8a\xa49\x19\xf4\x9e :\x92;\xc0s#\xc9\x97\xb4s\xac\xb4\x0f{K\x98\xf1h\x8c%\x9b\xb6\xa1b\x9f@\xd9\x95\xabD\xad\xd4\x9c\x8d\x91O\x80\r\x81\xf1\x94\xf3!\x9d\xd5Y|\x02\xe3\xb0\x14\x91\r|\xbe\x11\xf2\x0c\x84\xda\xe4DK\xe7#\x88%\xa0\x01\xde\xe7\xaf<[T\xc5\xd3\x9e\xfe0\xe2\x18\xa3\xd7xz\xb3\xec\x0e3\xdf0\xb16g\xc2\xaf\x9f\x94\x03\'\xa4\x9b\xd4 \x12%Q\xdeL\xba\x85PA^,.\x1d\xfd\xff7-\xce\xe4Z\xae\x02\xdb2{\xa8\xf0\xc8B\x8c\xe0\x9b\x074I\xed\xd9Q|\xf7\xa1\x993\x99TQ\x81\t\x15\xb7\\!\xff:\x90\xbaw\x15:\xc2\xf8\xc5\xdd\x1e/\x1d\xc0\xe3\t:\x8cR\xac\xc0\x92Lf\x9eMrH\x877B[\xf6Jk\xf0yhF\x15<\x94\x03,\x01#\x84\xdaW\x81\xe1\xb04\xc9\xa6\xfdY\xd4wu\xba\xfe\x9b\x93\xaeRP\xd6\xfe\x07\x12\xf0\xf6\xb6\xcb}\xa1J\x93\xcb\xa5\xe7Sr(Zc\n1\xe2\xd1\xe6\xee:\xae\x86\x15]\x14\xa1\xb66\xfdR\xf3[\x8e\x8a9\xdd\xb9\xfb\x86\xfd\xa0\xfd\x870\x9f5X\x18\xecE]\xb1oP1\xe1\x8c\x9d\x96\x1d\xff\xcb \xd4\x98\x0f\xc6\xef\xc8\x9d\xf3y\xb2\xed7\xf8\xb4\x14\xf5\x16.\x94\xfe\xb9\xf6\x13\xd3\xc4A\xb8\xbf\xde.\x87TaS\x06\xbd\xfb\x18{\xd4FU\x8e\x10|pX\'\xdd\x84\xe7#\t\x14\x89\xdf\xb6\xf5n\xdf\x11\xdc\x16\xc5\xe7\xed\x1dav\x1d\xbc7\x0e\xae\xc57\xf5\x06t\xcd\xc7B\xce\xf3\x81H\xbc\x810\xc2Wu\xf6\x97\xa2\x11X\xd8\x125`J\xec\xc4\xbe\x84\xc6\xfb\xa1\xdcx\x9d\xc8\xd5\x04h6\xcf#\xf5%]\xdb\xfah\xf4\xef.\xc6t\xf6\xb0\x83\x1c\xe1\xdb\x02X\xe3\xe6\xdb/\xd58\xf25\xba\xc8\xc3K\xcc%f\xabsc\x01\xd2-\'\x0e\x8e\xed\xb8x`=\xe6\xf0\n\xb5=?\xdc\x9eck\x0e\x1dB\x844V\x1bx\xbd\x8b\x88c\xa8\xf6\x0b\xe9\t|E\xf7\xf1(X,\x18h\xc3\xd2\x1a\x9d\x08\x16\xb4\r\xf3\xd5\xb0!)_\xce+\xb1\x17\x8f:\xdf\xfeOv\xe7\x97\xb6\x10\x9c\x1e4\x08d\xf2\xe8\x98\xad\x9fD\x10q\x13\x17yW\xbeM\x96$\xb7\x071\xaab\xe0\x04\x1eN\x97+\xfb\xd1x\x08\xa4\x92\xa8\x15\xae8\xf6\x86\xaf\t\xd3\\\xd6\x03y\xdavqC\xd9\xf0\xe2z\xfcu^\xa0U\x9f\xfa9\xc4x\x0e c2\x06\xec\xbcIlq\xf7\x9f\x16\x9fZ\xc76\xcb\x07\x08D\x89\'\xc4h\x9eDf\xea\x84\x08\x9b\xee\x90\xeb%\xc8Cb\x8a\xe3\x99\xe0/u\xe4\xee\x95F\xf9\x00I\x11\xf6M\x1cc\x1f\x8d \xfc!K\xee@HM\x8d\x8b\x9c\x1fP\x08R\xb5B\x85\n\xd2\x9c\xd5\r\xa8\xda\x1c\x85\x9f &O<y\x98\xb8\x8ch\xe26\xbf,\x1a\x03\xb2YL\xc7\xdbB\xa2\xf2\xe1\xda\xec\x17\x80\x03\xf1\xf8"\xaf\xb4#|\x8e\x10;\x86nB\xc7r\xea,\xd1\n\xa6v\x92\xc6;\xf6uwt\x02\xc4\x9d\xe7\ny\xf7\x1fx\x89\xf5\xdb\x1fI\xeeF\x9c\xdf-\xac\xa3\x90\x88xBx8\xf7Y|\xff\xaa0Rd\x81\xf7\x88\x896\x83\x83\x00\xa1\xfam\x91Z\x06xy\xfd\x02\xf2\xd9\x81J\xe5\x7f\x8b\xc8\xe7D\xf6\x11hH\xe5\xcdTzft\'\xcah.\xee\xe4\xc64\xf5\xfa2\x93E)\xa4nW\xb8\xd7<\x05\xb5\x8fP\xc5\xba;\x9e\x8e0.\xf2q\x8a;\x9e\x8ej\xdd\xa1^\xb1O\x9fI\xa0\xc1\x1e\xf7f\x90\xed\xcd\xe1\xe8\xbc\xacD\xf4\xcee9\x00I\xd8I\x1b<\xad\xa9J\xea\xf0Q\x8a\x94\x9d\xfb\x8e\xba\xec\xa5B\xef\xd1\x1b6\x0e\xad\xea&\xca\x17E\xad\x92\xb3q\xca\xe4cP\xc1\x110\x04\x10P2\xe9\xa8\xdenAL\xa1\xa8\xc9U\x97P\xe3\x03c\x0f\xa0\xdb?\t\x95\x9eC\xd9l\xe4\xaa\xc3\x84.\x89\x04\xb5\xe6\x1b\xe661JlL\xc9\x80\xdb\xbd\xe3y\xfa\x05\xe1\x81"\n9\x8e\x1c^\xe6\xae\xfe\xf6\x88]\xba\xd0\xfb\xaa1\xaf[0\x07:\xcf\xe3`(\xc1\'\xd9NH\xc5\xb8*\x95\xfa\xdc#\xfd\x98\xdd\xfe\xb8\xbc\x8d\xf0\xf4\xfd\x80\x06kC\xaa/h\x92\xbb\xc7f=\xcc\xb1D\xaeo*\xf4qw\x15\x03e\x9aX\xcb\x93\xa6b\xbaH\x9cz\x96w\xc2r\xe4\x85\xd6\xfc\xe9o>V\xeb\xd1\xfa\xa1\r\xb8<\x8c#& 7\x11z\x10c?\xb2\x17h\x0f\x03\x1d\x81\xdd\x93\xe1\x12\x8d\xb4\xad%)\x10\xba\x8a\x8b\xe5\xd0:W\x90\xd6\x1a\xc8\xc785\xefY\xa1\x8d\xe8\xf9\x129(\xe1\xf4v\xa0\x17\x7f\x96H\xceu\xe4)\x08\xcaj\x04\xbb\x0f\xfd\xe4\x0f\xda\x822\xe8\x18r\x9a\x1b\x8d\xdd1\x0b=\xbb\xeb\x835\x0c\xb4&\x1c\xfbF\xc8SV\x8cT\x02p6mc2\xaa\x1e\xeaq\xed\xb5\x03\xc6\xee\xb0\xf4\x7f\x0f|Zf\xb0\x08oq_\xa1w\xe1\xa4\x84\xbd\x01\x0c\xdc\xd1\x96\xff\xb6\xee\xdb\x99\xe7\xfbW\xce6\xab\x87w\x8a\xaa\x80 \x9f\x07\xda\x03\xedR\xa3]\xb2\xe8\x98\xcf\x90\x04\xe9\xee:\xae\x9b\xf5\x1c\xbaJ%s\x0f&"\xce\x97A\xfdt\xbec\x19\xc6\xcc\xbc\x9f\xce\x02sG\xd4\xe3\xccc;\xd2p\xd7\x9a \x8dq\xfc\x1d\xb6\xc0\xed\x9d7.k\xe7y&PM\xac\xd9\r\xaa|@5C:z\xde>\xe2\xb8\x0f\xe6\x8c\x92\x0c[\xc1~\x18\xb0`\xc7\xfc;\xab\x8aY\x1br\x05o\xfa\xc7\x9a 4M\xf2\xd2\xbe\x0c|\x92\xc2\x92\x8f\xad\x96%\x99\x8d\xc8\x18d\xee@\x8d\xa5\xf3\n\xde\xe4z+\xd4\xf3\xf8\xc7V\xd9U\xb5\x7f\xfcfK~\xf3\xbdD\xb1q\xe1\x87\xa0\xf7\xa2\xf5!\xac\x1cs\x82\xecT\xfd\xb9\x07{\x9e\xbf]\x18;\xbc\xc2\xd3\xcd\xd2Q\xf3T\x95\x93\xc1\x03\x9b&{X=\x89=\x83I[\xe2\x00\x19\x8b\xd1\xef9A\xfd\x992;P\x90P\xe7`\x0c\xa7\x81zN\xa0\xe4?,\xce\xd8\x846\xf9\xbe?\xe8a\x9bn(\xd4$h\xdd\x87G\xf9\xbc\xc1\xa8\xa5\xe1a*\xa6T\xc8\xe4,\xa1]\x07S\xa0JK2\xe2\x81eI\x87{I\x7f\xaa\xb70c\x8e/\xe8\x9d\xfb\xd36\x94\x86\x02\x92\x82E\x99\xca\xf7\x80\xdc?\xf5;P+\x96\xf2;\xfeiO\xb8R\x0e\xd9.>-\n\xee\xa5\xd7\x9d\xcf\x1b\xd3\x8d\xd9\xa5\xf9\xf7pL\xa0P\xb9#K\xae\xb1\xc1\xe0\x98L]\x0f\xb0\xe5^\x96A\xff\x90\xce\x89\x02cs9u\xb21 \x8b\xeb\xe5\xb5\x9ct\xa7\x0e\x01\xaa\xc7\xcd\xe3\x04pb(\xc9\xea\x12\\\x8eA\x0c\x18\xdfR(\x8b\xcd[\x17\xafgOY/0\x97\x927\xc3\xaf\xea\x06\xd5\x1cT&\xa0\xeeS\xd5\xf8:\x80s\xb0E3R\xd2A\x8b\xb8\xe1=\x90\xc9(_=b\x18\x0b4\xd5\x9c#\xad\xe0\xc49-[A\xc6E\x81\xa4p\x11hz\n\xd9\x98\xb0\xa0_8U\xd8\xd31\xa6\x0c\x1e\xae\x7f\xd6\x0f\x85sIF\xd0O|\xaf\xf2\x84\x01T\xd9m9\x8fQ,\xb3m\x0fE\x85\xa5\xc3\x0c8|\xc1\xac=\xdf\x042\x9c\xbe\x0f\xbd\xe0\xb1\xb3j\x18L}\xf8\xb5`/&RF\xcb\xa0v\xcb\'\xea18\x00uFD\xcd\x82\xc0\xbd\xbd\xf37[\x9e\x83\xa8\xea\xb3\xff\xe1\x04;\xfb\xaf\x99S\xb1\x9a\xe3\xc3\x98\xa9LQ^\x1e*\x91g\x94\xfe\x9b8%\x9c\x8e/\x11\xdf\x93\xc4"\xfeC\xacG:<&\x1b\x9a\xc2H\xa9s{\xfa0\x9d\n(\xf4\x98Z\x01#G\x91\x17A\n\x02\'O\xa9FGfI?\xa7\xdd&\xe9\xa1\xeb\x10\xb5\xdd\x1aif\xdf\xd5\xb1\xc8\xc6Rb\xad\xdc4\xdcudt?\x10\x88w\xa7\x03\xdb\xa8\x93@\xf6\xb8U\xf4\xa9\x1e\xa2\x16\xa6q\x0eP5\x1d\x1d(\xee`\xd0>?l\xd7\xba\xc5\xe9>\x8b\xae\xcb\x970Aj\xb8X6\xc6\x11*C\xd8N\xfc\xb5"\xa6\xe0S\xe0\xb7R\xe3\xbdx\x93\xec6y\xd12\xea\xf7\r\xaf\xc9u0\xed\x9fp\x0bt\r\xe1\xb9oX\r\xfc\xab\xf5\x99V*\x88\x19S/\x14E&\x81V\x1a\nJ\xcd\xf7\xfe\xadg\tpR\xcd\x86e\x81\x0cPR\xdf8\x8d\r\xc7\xba\xb0s\x1b\xc5\xf6\x991\x965(F\\\xf4\x91:\xe9\xd9$`*ND\x14\x91f\xbf\x97dP\x83\x1f\x06\xa4\xa2\xec:\x7f\x9e\xf5\x83&\x93J\x7f\xfb\xe5\xeb\x05D\x01\x07\xa2^)\x1b\xf4\xad\x85*\x8b\xd5$\xc6x\xee\x02\xd7\x89g\xa3\x94\x80\x08R>T\xc5U\xf8\xbe\x8e\x13\xa2\xc1\xdb/GC\x19\xe6#nx\x16S^\xb1\x9c\x8e\xaft\xc4\x9dL\xca9\\\xfbo\xa6\x02\xdbh\xaf\xca\x0f\x0b\x05\xb8YM\x074\xce&\xbd\xaf\xe6K\x14d\x9a&Q\x95\x86)m\xa03hk\x1c\xb2\xfb\xd2d\x99\x10\xb7\x86\xe3\xc0\x05C\x83\x8aw\nWj\x9b\xfb\xc2r\x1cB4\xaf\x87\xbf\xdb\xea\xf47e\xe0\xa75`\x01&x\x92\x92s\xaft\xc2\xb8\xf4M\t\xb2\xf3@\xdc\xaf\xee\x81h\x86\xe7L,\x0b\xbaj\x98\xe2\x80\xdd\xbc\r\xa1\x1e)Y~\xbf\xf3\xf8\x94\x18\xa8\xe1\xcf\xfa!U\xc0G\x18\xd5T\xc3\xf8%L\x90\xd4X\x8d\x17jP\xb0\x0ceh \xb9\xc6\xc3r\xad\xeb\x9a\xd5\x9c\xc4\xcc,\xd3\xcd\xbe\x86\x1e\x0f\x07\xe9{\x9dI\t\x06Tg;\xd6\xd2\xfc\xd1\xf1?\xabw\xb3\xab\xa9\xd8\xd1\xddb\x8c\x89\x1e\x05\x17A\xa6T\xae\xd5\xd6\xf5\x0b\xb0\x94\xb5#Mc[\xe2\x06\xab\xe7\xa3e\xb2\xe7\xe4~\x94\xeao\x08\xfa+\xd5\xd7\x17);X\xb0\xe5BZ\xdc\xd2\xb4\x0fB\x19\x88\x1cM\x0f\x90\xfa`\x80sO\x19\x91H\x832\xf1$){\n+;\xb9\xf2\xad\xf2\x82)ucQ\xac\xf1%\x10^\x89\xb7\xd5\xd8\x9a\xd3m\xc1\xd8\xd2\xbf\xb9.\x8dg\xc4RQ\xc2S\xa8\x00\x89*\x91\xcfR\xaf\xfc\x88\x12\xa9\t\x85\xee\xb6\x16\x7f\x8a\x9e[6\xb8\x99\x02\xdb_\xfb\xa0\xe3\x12\x9do\x98\x94\xf7c\xd8e\xcf\x93\x17\x1a\x1fL\xa5xi\x8d\xda\xfb\x9b\xc4\xf2\xb8\xd5qb>\x05\xc9\x82\x8a\n\xab%4_[\xd7J\xcf[2\xb23J\x83\xe5@\x82`\xf8n1z\xb6\xd2\xba\xec\x13\xf2\x049\xd2\n\xa8\x88`\xa5"I\x88\xfa\xa6\xb3\x91\xb3\xe0y\x1e\xc4\xe5\xf8\x899\xa6~\x92\xff\xc7\x8eP@%\xe0\xa5\xe4qG\\\x02\xf3\x0e#.\xc5\xaa\xb6^#\x98\x93\xcd\xa3s\xdb\xd6\x06p\x1dP\xb3\x1a\x9a\xd4\xe9\xc3\xfa#EH\xaf\xb9\xaaj1\x11\xb6\xf3;\xce\xc3\xff~;\xb4\xa0m\xc4S\'\x87\xfe#4\xc0\x8b\xfdX\xa9-"\xab\x82\x84\xf4\xf4\xec\xa4\xf2^\t 7m\xcd{\xb5\xd8\x94\xbc0P\x0fg\xc3\xb2\xc9y(\xcf\xf6\x95\xb6Fo\x17\x90\x15;\x16Du\x1a\x8b~\xdc\xc7(\xbe/\x10j\xc8\xa8\xb3\x96\xd8E\n\xe9\xcd\xdeo\xfd\x90rH\xaf"_\x0b\x1c\xdf\x0bu\xe9A\xc0X\xbb\x9a\xb4\xf4\x04\x97\x1bE\xc0G\x11\xbf\x08\xe5\xeb\xb4\xf6\x9e1\x0c\xaa\xb33p\xba\xe3n\x03X~\xb7\xc06\xad\x9d\xb0M\xb9\x97\xf8}<\xc2\xf8uS\xe6\xe9L\xd8\x8c\xe1\xe6\xa2{.\xd5}\xe3\xeb#]\xbf\xfe\x03\x87\x81)j\xa9\x85\x12R%\x93\x98\xa5\xd3\x02\xd6\x15\xa3+\xdc\xbc\x07\xb3\xb8W\x96i\xdb\x95\xe1\x8a\'\xdd]\x8e\xc4U+\xa6+\x19\xb4\x86|\xf9\xb2\xc1bq\xa7\xfd\t|\xc3`\xa3\xfa!\x1fw\x04\x00\x04&"\xdeMen\xb96$;d\xaf\xa8\xc0q#\x14\xfd\xecP\x9d2`/K\\<\xf2\xa3\xfb>\x1a\xe2\xc8\xb7\x97\xe3*\xeco^\xe0\x9b\xeb\\\x97\xaa\x97\xc2\x0bn\xa7hg?\xdcM\xb0b\xf2\xbfRL\x9c\x1e|\x10FT\xe2}\x16\xe6\x9a%G\x7fz\xf4o+\xf6\x88PNg\xce\xd7\x03\xac`Aw\x12\x08\x14\x84\x01\xac\x17\x1f?\xa1\x1fC;\xccS}\xf4\xf4\xff\xa4\x0b\xdb\xe0\xa6&!)r\xe0m\x99\x0c<\xac$\xe7f\xaf\x04n@\xddq\x05E\xac)-&\xe0\xbf\x13\xffo\xf7\r\x14t\t\xde\xe0\x87\xbb\xba\\\xa0\xe7\x83l0\xa19[\xd7f?)3\xf81\xc9\xc1Z=\xc8N4l\x90\x85m>L\x86\x9eu\x01J\x80P\x9dc\xfe\xb87\x0cMd\x0eCQ\x03\xbf\xd5\xa4\xe3\x8a\xc3%Q\x04\xba\xa2\xaa\xfd\xb4\xf1\xc0\x1a\x98g\xf0\x7fi\xf3a\x9f\x83\x00\x8a\x11\xfbf>\xe9s\x05y\xca\xe9;\xa1\xa1\xd0`\xff\xc1?\xa5\xa6\xac\xa0!\xa7\xa1(\xab\xf2d\x19\x13O\x1e\x84n\x917\x83\x00\xa6F")W\xa9\xc2.-H\xbd\x07\x17\x96tb\xd3\x16\xf1P\xf7u7\x87l\x81 p\x08<\xb6 \xb7C\xfb\xa8&5\xb7\xa3\xaa%\r\xbe\xb9\x80\x93\xe3\xdf\xdfj\x13S\xe1&\x7f\xe8Hz\xcb\xb3F\x8b\xf5\x8dC\xac$\xf1\x06o\x9f9\xfa-\xa1\x82\xa1\xc6g\x0b\\+\xfb\x07\x9a.\xc6\xaaQ\x94\xff\xcbY}K\xd5\x81v\x95\x19\xb8\x1f\xea\xbe"\x1fT\xe9\xc7\xd1\xc8\xd0\xa4\x1c~\x16\xaf\x9bQH\xd1\xf76\xecK\xe5\x83\xc5)X\x1c\xa0\xed\x9f\xa7P\xc4\x8c\x06`/^q\t\x9c\xf6\xbc\xacD\x13J.ZvT\\2\x18\xbdnYp&\xfb\x0fd\x9a\xd8\x85\xa4o\x15N\xb9\xf0\xef&\x19_w$lFH^b\xd5\xa0i\xed\x16\x90U\x14"\xd8\x98\x12\x94h\x04u1k\xbc\xd3\x85\x7f\xea\x91\xf8\xa7\x9c\xc5h\xeb\x9d!\x03\xec\xbcG$&\xc3#\xf5\x11_\n\x13+\xe0\xcd\xf6\x0c\xaa\x15\x9a\x1e\xc4-\xdf\x11\xfa\x8c\xf2\x8a\x83\x8f\x8c4O\xe4\x14X\xa3\x97\xff\x10\xfe[\xd4n\xd7\x94\x1d\xadY\x1e\xc1\x9a\xf5P\xbf\'$\xc7\xe9\x1e\x01\xf4\xcb\x00\x87\xd4\x99\x07\x0f\x88\xdc\xca;{\x03\xf9\xa4\xe3\x1eehp"\xcd\x03\xe6\xa6\xd4W\xdfL\x864\x87t\x03>\x05\xbc\xf9\xc1\x13\xdcX\x1e\xe7\x9fv\xc2#\x1b\xdc\x10I\xf1\xedR\xab\xcd\xe3\x13\xa7\xf4\xaa+\x9f\xef\xaa\xc17\x18\x9fo\xebL\xb0\xd1\x9d\xde@\x14\x0e\xeb\xe4\xc7\xf9Cd\xbbXq\xa03C\xa5MC\x06\xac\x9e\x9b\xfc\xe7$\x8f\xdc4 \xa7\xc1\xb9%\x95\x93=\xb3g:d\xd2\xdb\xaa\xdf\x01\xfc1C"\xdc\xc6\x1c\xae\xda\xcaC=\xff:\xd0S e\xf5@\xe5g\xc2\xc1\x17\xb4e\x96\xb1Us|\xd9X;\xd3\xfb\xe27\x01\xb6\x9e\xf4U\xc4 5\x18y\xc14\xbc\xb5\xe5\xef-T\xe8\x96\t\x1a\xedz\x1e\x9d\x86\xcf\x13\xff\xe7\xd5G\xf75\xd8``\xd9ke\xeeq/_T\x06\x01\x9d\xb1\xec\xa2p\xecZ\xf6\x96Qh\x1b$0\xe1\x19\xa5i|d\x9e\xca\x8d\xaaF\xc7\xf8\xbc+B\xf0\x98k\xed\x8a\x90:\x8d\x01\xc1\xd1\xb8\xddH\x02"\xec\xbb\xe9\x1e\xce5\xa6\xc93\xc6\x94e\xb5\xc5R\x8c\xb1\xfb,(b.=V\r\x7f \x9e{#\xec\xa0!\xfa\xab\x879\xab\xf4\x95|\xa4x\xed\xd7\t\x03O\x17L!M\x10\x87\x13\x98\x07\xd2\xcf\x1e\xf1\x84\xbe\x0bi\xd3M.#\xe0\x15J\xf0\x98\xa9\x9f]\x81\xeeD\x1df\x1f\xe6<\\\x19 \x9b\x1aW\xa5\xb5\xa4\x97\xc6\xb4\xbfk\xbf\xae\xd6Mf\x1e\x806\x91\x83\x054\x01R\xa4\x03\x82m\x05\x81z\x81\xafP\xe6a\x88\xeb.-\x9b\r\xc6\xd9\x0e\xfc9\xba3\xeb\xc1\xd9\xbe\x0e\x85i\xed`th\xb4\xd6h\xf2v\x1f\xc5\xbf\xe5\xa6LF\xb4{!\xbd$(]A\r\xb5"X\x11h\xefLw)\xcc1\xf9\x8cz\x0b6\xb1$\x0b\x89\xecx\xedY\xddU\xa5\xfch1q\xc6%\xae\xa3\x85\xceNqhw\xd3\xa65\x0e\xcf\xbe\xc2\t\xfa\x03G\x88\x1b9\x91\xc7\xb3\xdeZ-36Y\xb02\xd0\x08\x93H`\xf7\xe7\xafU+h\x07\xc7$\xbf\xc0\x94\xfc\xf3\xecz\x9e)\xfbv\x81\x83t,#AkbO\x02kn\'\xb4\xc6\xf2f!6\x06\xbf\xaf\x81\xe0i\xfe"\xabs\xc5\x8b\x85\xa4I\x8a\xbb\x94Fu\x9bT\xd4\xda\x90\x8c\x8a\x90\xda\xb8\xfdtA\x13gL\xa5\x90.kPe!\x8e\xdcPS\x10\x0bn.R\xf2stm\x1b/\x8fi\x00\xba\xf4\xa4|?\xf1\x19VZ(9}\x1d!\xeb\xffO\xf56\x92\xf3:\xae\xd1\n*_\xdf\xf5`SB\xa0\xfd\x95"$\t\x01_\x9c\xf8\xc6\xc4l#\xa4 \xe4\x7fX\x94\xeb\\\x85\xc7\x80E\xf9=\xf0\x1c\x1f\xb0&\x08\xa8\xe0+\x0bY\xb1\xa0\x9a\xb1\x947\nK\xd7Q0\xd2\x18^\xfb\xee\x10\xbd\xf6E&-r\xcb=\xda\t{X\xd3\xeaW\xbflN\x98\x0eZ\xab\x8a\xd1,\x82IU\xbf]}/$7\xdb\x8f\xdbm\x17 E\xf2p\xf1\xd9\xbex\xcd\xde\x1d&x\xb6\xeatO\xeb\xccQ\xce\x1e\xec\x8ac \xf93\xe3\xa0Z\x80\x10\xfd0h\xa7\xcc;\xb9\x17Y\xc7\x83\x9c\xa6*59S,\x1f\xb0\xfd\xf4\x04\x04Y\xce(~\x85(\ts\xf5\xee#\x07\xb7\x0f-\xd1\x86\xa2m\xf9\x14\x7fb\xc4nh\xec\x89p\x7f\xdb+\xf9O9\xbb\x17\xa5]Z\xa1B[%\x033\xdb\xbc\x1e5`\x1a\xe9\x08\x18o\xcd\xd3H\x13\x03\x87\x9e4\xa3_\xf0kI\xf0\xfa\'j7\xb6sg<Ri\x90~\xf0>\x19\x05)\xf8\xb2e\xc6\x15h0b\x8e\xa1\x80\x8b\xa6\n\xd0^T\xea*\x9b`O"T\xd8\xbe^\xeb\xbf\xba\xf8\x9f\xf4\x87\xf3}\xcb\xaa\xa3\xac\x8b\xba\xe0\x878\xfc\xf0EX\xb4\x81\xec#\x80\xa4\x94\xa2\xc9\xa1\xb6)\xc3v\xe0!\x0c \x1d+}\x8a\x12\xa5\xe8\xfe\xca\xa0\xb6\x13T%_\x9d\xcb\xac7\x0b\x84\xd9z69\xd3\x98:#\x95\x11\xe0\xbc\x98{\xc1\xa5\xf8\xc9\xdc*4\xed\xdb,\xf5\xa9/{\xf1t\x8f\x0ea\x9d\\\xfe\xa9WyY\xd9\xb2w\t\x1f\xbf>\xec\x81\xcb\xd4/ R\x86y}hu\xee5n\xfd[P\x96BH\xaa\xd5oc\xe0\x1fB\xbe\xa8SNw\tT\xe4D\xa2\x84\xc9?(A\ta\x0fT\x8do\x85-\xd3\rOy\x8c>P\\\xfdG^+\x13\x8a\xae\xcc<\xbfK\ncr.u\xd1\t\xd8\xb6[\x8aj\xe6\x9d\xd04\x19\x06\x9d+\xff\xef\xe2\xbbJ\xa6\x8af>\x14~\x89\xf0<\x1d%\xb7\xad\xb9\x1d\xac<<I-\x83\xdf\x94`\x94:X\x16\xbb\xed\xe5p\x10\xc6\x1b\xc4u\xbel\xa7\x8a\'\xe2\x7f\x91\x0eiz\xda\xd7\'\x1b\x01\xcf\xd4\xcd\x94\xffy\xb8{ZM\'9j\x90\x94B\xdcl\x18/\xad\xd0\xb4\n2\x9b\x82\xe3\xcb\x8e\x9d\xcd)\xf8n\x9c0\xc6\xb0\xaf?w>\xcc\xc5\xed\x9f!\x10>\x0e\xec\x86\xa9Z\xde$\xed\x8c\x00\xb0\x96EIat\xc8\xfc%\xf9C\xcfg2\xa6\x00\xcd\x883\xf2\x02\x9f\xfa.#\xb5\xe0\xf1\xf16\x92\xe1\xd7\xbb\xfa\x1az-\x13t\xbf\x8b\xf7>\x80<\x15\x04\x97\xfd\x12\x000\x0c#\xf6\xb66\xc4V\x87m\xe3\xeaz\xd4\xc9>Tq\x7f%\x9f\xedW\x8c\xb5\x94s\xebc\x82\xf9\xb4{\xee\xecR\x1b\x07\xb1\xf8WI/\xe7\xcb~A\xa8\xfb\x11J\xbc\x97\x8f\x7f\xf9d\x95\xa9\xcd\xcc3\xf7N^e\xeeH\xe7 \xa7\xf1\xec\xf2FD\xd1\xec\x92(U\xd6\x92a\xff\xfdHv\xaf\xc3\xb1\xef\xce\x00=\xe6$4{X\xc8\xafI\xec)\x1e\xf3\xba\x9a\x17Ve-6~\x7f\xfc\\{z\xef\xe2.\x87\x9cv,R\xaa\x01\xd3\x85\x9al\x82\xd9OC\x7fqX-[\xc5\xbc\x95\xc0\x865\xdad\x17\x8a\x17\x8akM\xd2l\x13\xf4\x8dK\xdd\x1e.\xb5o|!U\xcd\x05c\xe1\x04\x88\xfd\xfe\x87\xbd\xbf/oe\xaa{\xb1\xc8\xba\x9a\xa2\xd9\xd4c\xe2:\xc7\xfe\xea\nI\x00s\x94t\xd4\xae~!\xe22K^\xe049(\x11\x05\x91_/[1<\x91\x04+3\\\xb6@t\xec"\x89l\xfd\xff\xfc\x93#\xc2\xa3,.\xcdb0\x8d\x9b\x90aM\xd0%\xbc\xbetV.D\x06f\x9du\xa5Z\xd5\xe8\\\xf2\xea\xed\xf7\x86\x93\x85\\\xbb\xfe\xb9\xa3\xa1L\xea%\xd4{\x10\xa7\x0cu\x9fT\xb8\xd4\xed\x9b\xf1\xc8\x16\x87^\x8f\xf06\xb7\xea\xc7\x10\xfe\'\xe12\xe8\x9e\xc8;%\x19\xfb\xdc3\x8a#\x08\x1d\x96(\x868DZ\xcb\xe8X\x18i\xd7\x0b\x8a\x0f\xed\x02\x14i\xb1>]\xc9\xe0p\x87-\xe1\xdc\xabcJ-\xdaw<\x15\x0e]\x90a\xa4\xa6\xb1\xf7OB:\xdc\xd0\xcfNdQ\x888;\xfa\xe8\xca\x92Ad\x1e\xc9C\x1a\xe6\xff |\x19\x83L\x00\x90\x8bc\xc4 8\xcc\x13\xaaqGr\xdbWv\x86\x9a\xf8o_\x07e|\xfd\xa4\xf6\xabl>h\xe4\xce\xa0S\xaf\xd7\xa9\xdb\xb6\xdf5\xfd;\xcc-#y\x91\xae\x81\x03\xd9\xa9\xd3\xbb\x8abZ\xa5\xbe\xfd\x04\x7f~B-\xf3\xb6\x87B\n\xe2u\x19\x18&\xf60\xe0_u\x04\x03\xa3M \xb28=N\xda\xc1?\xa4RKi6\xe1\x0e%\xf7\xb7w\xf5\xbf`<\xe18\xfeHy(Zdp\'\x80\x82fX\xf6\xc3k\xcf\xd4\x1a\xb7\xa9\xe0\x9f\x00\xea\x8dN\x81\xf0-\x90q\xf9\xc0\xd2\xd8\x18\xecQ\xf1\xdd\xc6\xff\x0bp\xe2\xcc\xd3B\x16\x06\xea\xdb=\xca\xa3\xca\xad\xdf\xf5a\xfc;Ioy\r\xa1\'\xbf\x9an\xb4\xdc\xf9\x94G8,\x89\xb1\x04D\xb1\x15\xee\xc8*\x91v{e?.a]\xc3\x9b\xa9\xa8\x16\xd1\xc4\xcfJ\x90\x182d=\x00\xb7\x8f\xeea\xb5\xc93@\xc0\xeeOx\x0b\xc2T\x1b\x0fi\xf0w\xbe4:/\x84f\xcb\xbe\xbeD\xd9\xa8\xcc\xbb\x12m\xfb\xaf\xd7\xff\x83\xf9z\x03\xc2\xd1\xab\xef\x1fZW\xd3\xe8mz\xa6\x05\xee\xeaUq\x8d\xa3\xe6&%f\x01\xbe`\xac\xcd\xc1\xdbn\x8e\xa0ifOb\xd2\xfb\x91\x88v@\x8eK\xc5\xb4\xd4o0o\xe8E\x8e\xc4\xa2\xd9?Uj\xfa\x9f1\xf4\xe9z\xe7\x99|\x13C\xaf<&j\xf3Z\x01\x8d\xfd`-\x16\x06\xe2\x0ck\x0f\xea\x1e7\x91CHjU\x07O\x94["\x99s7\x1c\x13\xb3\xe3M\xee/\x80\nHD\xa2\xec\x11\x9f\x17j9\xd7\x87\x8cn\xe5\xdd\x08.I2w\xba\xfa\x8eJ\xc2\xef\xae\xd8\xe2ba\xcdd\x03k\x0cq|\xc0\xa6StI\xc0\x85^\x8c\xf0\xc7.\xb14;L2\x98\xaa\x1d5\x89\x064\x16;\xbdl\x08\xc3\x1c\xeb\xa7\xe5\xd7\xc9\x01\x13\x11\xa0g\xc7b\xab\xb1\x08\xa1U0\xcc\xed\x1d\xd8\x8e\x8d\xd4\xd7\xbbu$=\x8c$#\x19\x87\x9d\x9c+\x8d&O\xf5l9t\xa9\xda\xa0>\x97\x85\x93)QZ<x\xa6>[7\xa4\xe68\xc57-B\xcc\x1b\xc3n\x84\xcav\x17\xa0\xd7Z\x05\xbb\xa3\x01\x82\xf9\xe7\xf4\xcf\xd6\xf7iq\x8c.w\x18\xd7U\xfd\xc0\x95\xe1\x04)\xa1\x00\xf3\x86\xf4\xec\x8a;\xbf\xe4\n\xcd\xe8g\x85\x80\xba\x0f\x8d\xf5\xed\xdeJ\x0e"\xe40I\x0b\xab]K\xed\x8aI\xe7p\xf6\x1c\xf0`\xae\xc9\x0c:\xc1\xfcw\xaa\xcb\xb4C\xc8\\\xb8\x92\xe3\n\x8e\x00U\xc2"\xa5/\xa6\x92\xa9]\xc5E\xe4\x02(\x14\x16\xf8(\xabb\xc1x\x87+bb\xabs"el\xda\x1bQ\xe4\x02Q\x9a[\xc7L\xd8`i\xc1\xedM/\xeb\xbe\xd3yEfQ\xf0\xbd\xce\xf7\xd4\x01\x17\xfc0=\x16^w5\xb6\xde\x82\xeak\xc9\x14^\\\xdcw? \xf6W\xf3\x84\x18s\x9c\xe5\x16\xc5\x16\xd8\xaa\xc67\xfc\x0e\xe2$2\x9f\x04P\r\x9f[-e\xb6R\x1fy\t\xe5\xbb\x98\xfc\x14\x97d\xdd\xcb^\xe2\xc2\x8e\x89\xbc&\x11\xc9\x086\xdc\x16\n\xe2J\xe1\\\xa6j \xe5O\xdc]\x84\xec\xc1\x8b\xe8\x13x\xa3\xc60\xe5\x8b-m\x95\xc1\x00\xc90\xb4\xfb-G\xaa~\xdb\xe13\x80\xa2\xf9\x97\xcb\xa3V\x1e\x1d\x90.\xde\xeb9]T\xa6\x04O\xd3\x1cg5\x80\xd50\x1ey\xa2Z\xc3F\xff\xe7\xdc\xb9\x15\xf1\x83\xae\xc4\xe7=H\x1ao\xbf\x08\xf7s\x96\x1e\x03?\x9ci\x11j\x1b\xf7\r\x16\x85\'\xea$\xc6|\x1aS[\x198\xd2p\x03B\xc8j\x98}\x1bW3\xda9]\xfd\x03\x99^\xfb\x15\x8f\x88\xb6g\xfas*H\xe4\x1f\xd7j\x85\x83\xcb\xd0\xb9\xaf&\xd0+\xb8\xbd\xbd\xc4}\xaekm\xddM\x8e\xfd\x99\xee\x84\x83\x8fT\xd2\xc7-%;\xd46\xa4\x15\x9d\x9e\xf1\xf2c\xbeC\x1d\xbc\xd2\x87O\xac\x1dtH"n^6?+^\xb8lh\xcb8H\x9cLp\xffQoA\x02\xf67\xc3\x042:\xb7c\xeb\xd7\xc5d\xf53\xc1\xf9\xcb\xaf\xc0\x91s\x9d.9\xecb*\xe3\x9bd\xc2\xdf{\xb2a2\xedD8\xc6N\x8a\x19\xd28\xc3\xe9"O\x90\xe5\xde\x92qu\x80;&\xb13pmQC\xaa\x1e\x9av\xcb\x08\xbb<\x872(\x83\xfaZ\xee\xc2\xa1\xb7\xb1\xe5\xf8-\xd5\xee\x03\xd9\x13#\n`C@)\x08\xc5\t\x86\xba\xaf\xad\xdf\r\x85\xeajF\xf2\xa2V\xe9?\x1d\x8aG<\xa7q\x88\x00\xceAY<\x1f\x8d\xbdw \x9c`\xd83\xbc\xe3\x7f/q\xd3\xa3\x8d\r\xf1\n\xb5\xd0\x8a\x1cg\xc6\xf9\xa7d\x1b@Js+&\x9f\xb3\x00\xf0\x85\x13(F\xc3\xb3\x93\xfd\xcf\xa551\xdc\x9d_;O2\x88j\xd1E\xb8\x91\x8f/\xa7\x1a\x9f\xc0u\x93\x01NHmX\xc3\x8fd\xc3\n\x0f\x96i\xbb\xc8\xf9 ./H\xd5~\xeb-\xe9\x18\xbff\xd5X\xa0}&%\xf2;\x0c\x838\xb0\xc0\x81\xdd\x0b\xb8\xa8Y\xc9\xac\xd6%1,\xab\x14\xc8\xb5\xaf\xb9TN3\x04D\x89e@j\xde\x8e\'\x1a\xac\x8d\xac\xfatc\x16\xb9\xacB\x15\xf5\x98\x1c\x8fR\x84_\xdc\xe0\xe2\x87\xb9Wgp\xf5.\xe3>\xed\x8bE\x7fl4=\x8c\x8c r\x8d\xa8\x9f\x8d.\xd7\xf007{\r<R\x0c\xd6\xb2y/\x98Q+*\xf8\x1cONTyY\x8b\xdb\xee-\xd9Y\x88W\xd38,\xd5(\x08[\xcc}\xf6z=\x89\xd6@\x02\x0ex\x0b\xe2U;\xd2\xa2\xf2\xc5\xa7\xdd\xcb[\x16\x1al\x16\xf7\xad\x14\x95\xb3\x95\x03\x02\x18y +Q\xf8\xbb\xd2\xf5M+\xd5enT\xd1!\xdd\x1a\xb73\xe5\x96\xe4\x15ympE&\xb6\x06\x08\\\xed\x1d\xb6*\xe9\x8f\n\x1c\x99i\xdbV\xd1\xe8gl\x1c\xc9\xb6\x97\xa0\x04`\xad\x13\x00\x05\x03\x00*m\x92H\x85\xb3\xc7\xd2\xc2\xe0|V\xbe\xc1\xe2\xccW\xe3\xe3\x89\xed\xcf$hPy$\x93\x1e2X\x9b\xfd\x80o\xa2Q7\xb7w\xbd\xc2\x85\x1f\x12\xe0\xf8-\xe1\x7fY\x932$\xaa\x8e\xfb\xd3\x18\x9c$\x08\x8d1\r$H\xb6\x0e\xde\x14Z\x82A\xcf\xcb\xde\x0c\xc8\xc9\xe8\x9eAe\xc4\x18\xe0w\xd7\xcc\xc4\xa9v\x85\xef\xb6\xac\xc1\t\xb5\xf5"\xd78\xc8\xb6\xd2F\xf1\x18 \x13$\xbb\xa7\x13NF\xce\xe7;\x17\x90\xb5\xbb\x02u\xa7\x1a\xf28>\xb2+M\xcbCx\x9d\xce|< \xea\x11\x85\xea>b\xe4+\xf3F_SL\xea\xe8G\xee\x19\xedG#\x19\x11\x9b\t\xeb\xba\xf71p_=G?"\xc0\xb8\xeeh\xd1\x07\n\x1d\xc0yj\xb1\xfe\xc9\xb3\xd0|\xb8Cy\xa0g\xaa\xb9\xd6(\xf6\xdb\xb5\x00\xf8\xeaC\x07\xf0\xfc\xe0\x00T\xe4k\xf5\x0b\xa9\xab\xdd\n*X\x8f\xc8<\xe1\xb1\xbd\x8c\x92o\xd4\xa7\xcb[p{\x91\xa1Sa\xfcy\xc73\xa9\x112\x9a\x80\xcb\xad\xb2^e\x18\xa5\x7fc\xb2$\x81k\x86M\x97\xd3\x86\x8f\xfb\x92\xf4\xfd\xe9gg\x1c\x04\xb4\x03ln\xce\x8bI\x80\xc5\xd6e\xa4(\x0b\xec\xac\xa0\x03\xba\x0c)>\xf0>~\x0bVW\x0e<|\x035j\x83C\x00\x1c\r\xf5\x16\x16z\xc5n\x97V\x98$\x04/G\xad\xd1\'\xa3rx\xb6\xd4\xb5<\x98\xee\x7fA\xaf\xd2\xffd\x8a8\xd8"\x1a\xd7F\xfa.\xf7\x03\xf4\x11\xc8e\x93=\xf3z\x8fV\x9dryW\xd4\xa5B\x83\x96Qr\xd6\xfbwU+\xc0\xfc\xd0"n\x9f\xa4_\x98Ya\x06\x88S?\x1c*\xbb\xe4\xc4\xebZ\x9c\xe1\xdcTW}P\xa6\x92\x8e\xf0\x1et\xd5\xacS\x0f\x14i\xf0\xfb>\xa47a\xb5\x18\xd1\x9e\x06\xd4\x98\x99)\x14\x9a\xd1&\xeb\xb9\xd2\xcd\xad\xdb\x90\xcf\x85\xf8\xccvnM[\xff\xcd\xb5\xe1^\x05*C*\x08\x83\x81\x9f\xeb\x17\xe9vR\xb3):\xcfw\xab\xf7\x00\xddx|Q\xd9R\xac\x97p\xe0\xce\xf6^\xca\x9b/\x86\x18\x1e\xd4\x05\\\xbdEoQ\xf3\xc0\xad\xa7\xf9\x14-\xbam\xb9Q\x91\x00\x0c&#\x1b7\xba\xeb\xe7z\xb1\xb1\x95\x89\xae.q\xbc\xedP\x92 \x8aN\x10\xa1OG\xd9u/6\xb8P\x12X\x1f\x02\xe1\n\xaeAO\xc7\xed\x82\xe9F\xff\xad&\xab{\xca\x88$\xdfU\x16X\x969\x83\xcbv\xa7\x8b\x04N\x0cu\xf2\xb4\xdf\x04\x96\xc3L\x03\xda\x15\x05v\x03\x00\xd1}#\x84\xee{b3k\xf3\x92\xe7\x9dJ\xeey\x83\xa2Jd\xf5sG\x8a!/\x99\xad\xd8\x8c@\xd8\x97\xb4|\xc6RN\xc6\x93~\xe8%\x89\x9d\xc33{\x8d\xed\x93\x87FH\xb6\xe0\x82?\xb0\xaa\xeb0\xb1\xf1+6Y\x7f\xca\x0b\xe6\xfde\xc8$X\x1cT"\xd2B\xf6!\xf1|W\rg4\x84\xdc[!\xbd\xed\xc30(\x06\xa6\x86\xc78\xec8nU\x99~\x16_~N_\xf8z\xc7\x83>~g\x05\xda\n\x98\xf5|\x04-\x85\xd7Y\x05\xc2\x17\x13\xc8\x127\\5\xdcq9I\xe3\xfbnW\xc6&\xba\xfa\xa9)\xeb\xc9\xdd\x83]\xc9k*\xcc\xd7\xcb\x89\xcc\x98Z$\xca\x19\xa8V\x82\x12=\x9bdh\xa7\x89\xf9\xc2\x1a)\x08R\xdft2y\'\xd6\xff\xf3\xcb\x06\x82{\xb8\xc4R(\xba\x0c\x85u!\xb6\xca\xcf\xef\x9a\x01\xe1x\xab\xea|D\x14\xe3\xd7\xba<\x11\x86c\xda(\xac2\xd9CK8\xc7\xf2\xac\x7f\x15\x0e0\x00\xb6\x1b YE\xf0\xf2Y?b\n6\xf0\x816,x\xe2\xd5\xb5\xe4\xdaYP\x91\xe6,\xca\xf9ML\xbf{\x9a\xa2\x16\xe51\xc2\xf4?\x11}\xbd\xc0\x935\xa6\x04m8\xd0\xadz\xf7\x17\x90]\xd5s\xca\xf5\xad\xa3\xe1\xc86\xc3\xed\x1a\xe4XQE\xc4\x1e\xa7\xbe\xa7\x9c\x8b\xe3\x16}\xbc\x00\xc1\xfcY\xa7\x065\x14\xdfc\x1bT\xa9\xb6\x8e\xa8h\xfa1_\x83\xc9J\xf3g\x86\xd7=\xf3\xd1\xefWn\x86\x0b\x9a\xd2\xfe\xa7\xff\\\xf0\xcd\x88\xba\xdd\xec\x81\x19\xe2\xb1B\x11\xc8\\\xdb\x06D\x8d\xdeo\xc8\xd7\x91;\xf3\xd8\xdd\xac\xf4\x99:\x14t\xb9\x0e\xcbO\xeb\xf7:\xbf\x16\xec\x91b\xc9\x95\x9c]U\x9b\x9b+\x9a\x97\x82$\xe7\xdd\x0c\xaclC\x8b\xb8\xc4\x96\x0b\xe3\x8d\xb1<\x06\x0b\xa4\xfe\'\xe2H\xd1 \xd6\x83Tew\xb0\xf7\xc5\x1aI\xe8\xd2\xc4\x13\x93\x89\x06\xff\xb9\xf1\x8b\x81\x7fh\xfb9g\xd5\xf4y\x84\x0c2|\xea\x8e9\x14\x8c\x1b"\x8c4\xfc\x8b/\xdbeJQ\x83\xfc\xf4\x0f\xae\xe5\xcf\x0c\x81\xec\x9a\xb7\xa32\xd8\x8b\x80|\x12\xe7\x8c\x80c\x01\xeb\x94\xa2\x89\x84\xa1\xba\xaa\xff5\x7f!\xd1>\xf8n\x83E\xcab\xbe\xcb*\x0fI\x82F\xbf\x05\xeej\x9b;\xb9\xed\x06\xa0\x07"\xe3\xf0\xc4nX\x13\xe8\x9dM\xb0\xa3\xe9\x17\x0cFs\xdd\xe4HRE\xb0\xdd\xe7\xdb?\xbf\xcf\xdf\xae\xda\x83\xcb\xc5\xe6b%\x14\xb8H\xaa\x12\x10\xe3\xeb*\x9cb\xf2\x11\xc8\x9d\xa5\xc1\xa2a\xb5\\\xa1n\xb0\xf9y\xb24\xa8\x05Q\x01+4c\xb4\x87\x0b\xb9\xd8\x1d\x0e\n\x13T\xe0\xda\xe6p\x9a\xdf=\xd6\xbd\r\x1e2\xdb\xa3\xcb\x01J\xe8\x8d4$p\x0c\xba\xe9t\xdd\xe4M9?\xdfB\x8b\x96\xf8O\xa7\xe1(S@wE\xda\xc0\xac\x10\xde\x84;r\xef\x9e\x87!\xc38c\x88\xa5\xaaa\xe4\xd8\x1cA\xdbM`\x9e\xbf\xbc\xb3\x1fuE\x12\x84\x12/*\xc6\xff(\x1f\x7f\xfd\xfa\xfbQ\xb7J\x03\xd0\x02\x1c\xd4c\xcc9\xa2\xa7\x86\xf2h\x84\xf0\xbc\x81\x90\r\x10.\xb3\x95\xf5\xb3\x9e\xd9\xc2\xc6\x83\xf1\x91\xb6\x90\x98\xe4z\x1e\x9b\xa5\x1fAC\x85\x84J\xca\x04\x06\xf6\x1a\xc1\xc3w\xfd\xae\xa0U\xfa?\xbc8\xe4\xfd.\xfb\x9d\xa2\x86\x93\xc0\t\x0e\xf2r\xc6\xaf8:wm\xb76@sxH\x97\xccj\xe7D\xc8\xc9\xb6:\xf5\xf0+l\xac8r\r\x7f\x8e\x06\xbcB\xbcC\xf8i\x04#\x86,R4\xd3\xe6\x11\x98\xd9\xee\xe3_!\xbe\x8e\xd6&\xd7\xd4\x87Z/\x8d\x9c\x02i\xea\xc4\xa3\x9d\x1f\x81h\x87\xf3G\xb5\xbam\x8b\xc0\xc4\x9a\xe3z\xa2^\xc9\x08\xfbMC\x07g\xd5k\xa5\xf1\xd7\\q\x97\x85\xde\x02T\x8d\x91\xb3U\xee\x82?!\x9f\xcfJ\xd4\x0b|t\x8b\x15q\x12\x98\x96k\xbd#\x8d\'R=\x94]\xe9\xf2\xff\xb5fqu\xddR\xd0kNp\x11\x11\xc2\x84\xd3\xdbB\x84\xf8\xcf\xf9qf\xf5\x93\xd1)\xf9\xbd^\x9c-\xc19\xe5\xc3 Y\xe8sp\xe8\xce\x15\xa45\x96\x9a\x18\xb2\xc6\xb2z\x98\x15oo\x80\x0fUU\xcd\xf54\xa8\t\xf267,\xed\xe0{\xea\xa7\xae;\xf7G\xce!\xc0.\xd3\xcc\xe6\xd4\n\x8f\xa5\xf8\xf45\xac\xda\xad\xff\xf9fb\xf5\xdb\x9d3i\xb9D\xed\xe4\x8f\xeb\xbd\x17\xdb\xda\xc9\xb8\x91\xa1\xda\x94/\x9b\x0b5\xe4-\x98HK\xc0\xf6\xf8}\n\x9a/{\x1f08p\x1d@\xc5#\x92uf\x8c\xfe\x051\xf0\x04\xaa\xfe+\x90O\xc6ye\xd3\x1d\x07\xbf\xfa\x810z2?\x83\xbe\xba\xfc\xed\x94\x81\xaff\'\x91\t\'\xb2\x1b\x0eIk\x91jL8{>E\xb6\xbf\x15P\xed\xcf\xed 8\xf5h\x15c\xd3\xe5{f\xb6\\.\x1e\x12\n\x12\xe8\xc2\xfbw\xd0Z\xf1\xd0\x82\xbc#2\x8cF\x14\xb8b;\xdf7\xd1\xf6UGF\xd0x\x89mBx\xcc*8\xdb\xbb\x04:\xc8\\\x99\xc3\xc6I\xa6\t\xd9\xb7\x17D#7\x8d\x0c\xc5\x07\x9bg\xbb\xe4\x84P\xe3]\xd6\xb7_\x8a\xda\x87\x01w\xaf\xf9\xd5\xb4\xb1\xd0\xd5\x96u\xe8\xfd\xc1b1n\x03\xa2\xb8\xb1\x89\x0b\x1b\x18>\xc1\xdd\x94Ap\xce\xa2J\xb9\xb2\x94\x1b\xa5O\xac~\x83\xcf\x98B\x1e\x8e\x8d}\tq!%9d\xa8\'\xeb\x18H\xf7\xbe9-,_\x8f\'FS\xb2\x82\xab\x15\xd0\xf6\x08Syr.\xf6\xce \x12}A\xd9>\xcf\xc8%\xf4\xcf\xc6\xae\xfaZ\xb6\x90\xe2\n&\xcd|\x95\xb6.\xa0\xdc\xef\x94\x93\xf2\x96\t\xacPl\x89bQS\x11`\xe8u\t\xed\xd0N\xb5\xc4\x1d\xa4\x14\xb6\xd3\xe6\x05\\\xe0_%\xea\x86\x8f\x1eJ\xedDm^, \x95\x9a\xd8\xa1P\xcd\xdf2\xe4[""\xad\xcbn\xb2\xb3N\x14\xc2HM~\x91\x9f\xf2p\xbf\x8cS\xe4\xea\x879\xdd|\xf7\xe4\x01\xce\x93\xdfN\xed7\x99\x1d\xf6\x06N\xfd\x9d\xc8`\xd8\x92\x94\x9da\xf9\xb6OlcU\xefn9H\xbc\xe5\xff\xd9\xb2I\xed\x14\xfa\xc7\xd1\xf5\t\x0f\xc2\x7f\x9b\xad\x95\xcdb\x8c\n;\xc8\xde\x93+e\x81L7>%L\x90\x1f\x06L/\x8f\x02t\x08^\xca`\xb2\xdf\xa7\xc3\x04\x91\x8dJ\x8a\x15\xfc\xa5Y\xb1\x08\x07\xe8P\xfd\xed\xc1\xa9\xc5ue\xa2\xc8k\x9e\x90i.\xdf#\xaa\xec\x11\xf6G\x17o\x01I\xe5\x8c\xcek\x9f\x8b\xfb\xe4\x8e\xf3\x10\rn\x0b\xfc\x83\xa9N\xf3\xcc\x8f\x0fe\x0e\xda\xac\x8a\x11\xffx\xe7\x80\x17\xef\x1d\xa4LPn\xbbU@u\n+c\xf4*\xbe\xadq\xe5\xbe\xcf6\xb2\xa4aO\xfc\xdc\xcd\xcd\xc4\xcf\x88\x98\x10\xa0k\xa7\x99\xc1\xc9\xe4\xb3\xeeN\xfe\x8ffe/\xed\x1f\x8d\xc5\\p[h&<#\x92\x0bmE\x94\xd3z\xc0R\xfeRckAIs\xd3\xb0\xac\xdf{L%\'\xb6\x96#\xfc\xac\x8f\xab\xa9\x81\xec\x98\xcc\x0e\xf5\x05\xae\xbb\x0e\xfb\xee\x98\xa2\xe7\xd4\xf1H\x8b\xef\xc0La\xde-:U^qG!\t\xaa\x17\x8b\xfc>\xaa\xf6\x1a\x9e\x1b\xe7\xe8\xbf7\xde5\xeb\x07:\x14\xa3\xe4j9ynO=\xfe\xed\xbdC\x95H\x17K=\xdb\xc2\xcb\x1dc\xdd\xa0L\x8d\x97\xa3\xb90(\x07/\xa6I\xb6<{}\xe6\xdc/\xe0\xc8\xc7\xf4\x07\xdc\xe7\xfb\xbd\x94*i\x1e498\x9d\xbc\xd5\xf9\xf6\x1e\x8b\x94\x16\r\xae\x12\xbb\r\xa5,R&\x93\x9b\xf7d\xf0\x10\n\x0c\xddU\xec\xee\x02\xcc\x11\x88O\xf6\xe6\x16*|F\x87\x08}\xdcg\x04\xe7\xae\x0bgY\x0f\xf7\xc8Q\x15\x8e0F\x8b\xd2\xf7i!\xdf\x11\xf9\xfdVm_\xfd\xab`\xb2\x91)2n\xbchy\xec\xa3\x9ca\x15\xf1vt\xa3=\xca\xc2\xfa1\xa7E\xaa\xc2\xaf6i~`\x80\xa3\xef\x10\xa4T\tUA\xbf\xf3\x1e=\xdb\x8882\xa3\x17\x89MJ\xd4\xe3q"\xa5\x8d\xf7\xe1\xfc\x98\x99s\x94.\x11z\xd1\xd9\x9bs\xf1\x8368\x16\xe8\x1e\xee\xe9\x1d\xe2\xea4\xcc\x08vo\r7\xa3\x12\x159\xcf\xf7m\x9cU\x8f3\x1e\xd9c\xa5\x1e\x1exe\xe7\xfa\x16\xb3\xfd\xac\x1f\xdfr\x01\x92#\xcat\x83(\xbb\xa9)\xdc\xae0k\x977]n\xfc\xdc\xa8\x18\x1d\xef\x8c{\x89`]p\xa95z\xa9zU\xae\xe7\x8e\x9f\xfe \xaa;\x01\xd9\x82\xdb E\xfc\xd7D\x901\xf7\xb6T}\x05\x15\x15\x8a\xe0\xb9\xf5r\xe2]@\x87"c\x9a\x86\xfb\x94\x9f\r\x85\xfd\xbc\xfe\xfe]\xa2j\xaf\xd9\xc3Drd\xf0(\xf5T\x06\xf6FO|\xe4\xe1\xd4$Y\xfc\x9a\xedP2\xe7}q\xb5\xadR\xea\xd6.8H5\xc2K\xd3\xf5\x85\xc6\xe6\x9c\x04\xe0\xb8\xc8\xc5%E\xafC\x04\xf5\'\xb0\xbe\xc0s\x0c(\x90Bk\xcaA!\x01\xe9\xef\x16\x1eEd\xdb\xc1\xe6\x8bVN"o\x9c\xf7(m\xccV\xe0\xa7\xb0u\xac\x86\xfc\xa7\xe8\xb7 \xe8\xce\xe6\xaem\x9a\xb1H0\x809.\x06\x04\x06z?\x14\x0e\x13\x94\xfb\xed\xf9\x83\xf7t\x9f\x8e\xe1\x0e;(\x93$/m|T\xa2\xfbt{\xc9.\xf6\x8c\xaf\xa6[\n\x13\x0f\x92H\xbbNJ\xcf7\xe6\x10Jf\x8a\xce\xcc\xfd=\xb17\x1e\xf3\x0eMU\x7f1\x06*\xb9\x8e\x03\x81A:\x7f{5\x04H\x8c\xe4\x15\xcc\xde\xd8\x02\x06\xc7\x7f\x9c\xfe\xca\xe9\x02k^\xcdGd\x80\xa6m`*\x9c\x19\x08\xe1\xbe\xba\x89i>\x9d\xc4Ob\xf9U4>L\xb0\x9aK\xd4\xae\xaa\xb9\t\x9d\xc9\xc1\xed\xf0\x0c\x1c\xd5\x9c\xb4\xe8\xe6\xaaJm\x00\x84)(\r^\xdc\x81~\xd0#\x86\xc0\xc9C1\xeb(\x15\xccL\x01\xb0\x89Y\x91\xcd\xd8\x94\t\x83/\x1e\xf7\xb6,\x81+\x91\xf9DR6\x10\xcdx\x04\xc8\x0eH\xd9\x16bf\x01Z(\x19\x80\xdft\x0e\xa7\xcef6\xc4\xd1\xa2\x01\xef\x9a\x07\xccr\x80\xa1Gs\x81\xf8\x14\xe2]5\xf5+x!\x84\x01\xf1\x8e\x1e\xd2q\xcf\xdd\xdd#Q[V\x98U\xfb\x8e?\xb7l\xd7\xb7o:~D\xb1Xc\xfdf3\x7f\xe7\xff!q\xda\x02\'\n@\x93\xe1\xa0r\xd3z(\xf4oh\x02]\xa1\x7f\x05\xe4C\xb3F\xad_cf\x01\xb3\x1eP\x15\xa0\xaf\xdbl!\x17\x9a\xb5L6\xde\xd0?rO\x81\x8an\xb94\xf2\xaf\x9f^\x9e\xeci\x01q\x96\x7f\xad\x15lj,\xae\x94W\x12%NSo\xbb\xf9}\xa9\xfa\x04\x9e\x1a)\xc7\xc11\x9cy\x02\x8b\xec\xf8\xe7.r \x1e\x04\xba#\xee\x1b\xc5\xf0h\xbbn\xf8s\xd7\xcfI\x14\x18\x98c\xaf{\xa6\xfaq\xc3\xfa<\x1c\x9a\xb3o\xd7\x99\x80\xf6h\xb7\xbf\x1e\xb0\x93\xfdg8\x88\xb8\xd9)emF\xa4R\xba\xd0x\'Z\x82/R\xb2Q\x01\\f8\xde\x1d\xdf\x87\xa1\x00\xfb\x1f\xcb\x10\x86N\x08&\'\x8d\xf7@\xc4\x88\x12\xec:"\x16\xa3\x02\xd1\xb3\x80t\xea\xe4\x84:\xb7l\xb7G\xc9\x8b#\xf2\xfd\xadG\xc7g\xe4;\x1008\x88Y\xd8\x18\xe9\xca\xb0\x94\x15\xe8B]\xb2\x81\xe3\xd1\xfc\\\xcc\xaf\xeb\x01lZ\xac\xe9\x04M\x1e\xba\x03\x8b\x06\x05\xb7T\x024\xa2C\xce7x\xbft\xfb\x12z|\xc3\xa2\'\xd7\x9a\xe7Z\x1a\xd1\xd9\x9f\xb5\x92r\xd4yU\xf1\xb1\xa3\xaeWO=t`L\xe1~\x99\xba\xab\xa9I\x93\xc1\x11-/\xf5\xff\xb3\xa4\x0c\xc0\xe2\x00Z\xa6\x84\x99\xc5\xc3J\xa7\x15\xdar\xb7\xb9CM\xba\x1f\xf4\x84\x17\x90\xd0\x90\xdc\'nh\xe7\xc8n/\xd5\x01\xe2~\x10^\xa0\x98\x93\xd3L_hY\xfa\xa4\x14\xaf#%`\xaf\xc6yZF{-\x0ex\x0e\x83%\xe1\xcdt\xc1T\xc7\xcd\xe7\x1d\xaa;Rp\xcfT\xdcvd\xea\x91\x10X\xa2\xaf\x05`w\x7fP\xe3j\x99\xb0\xed\xce\xb1\xa8\xf9\x14\x95\xa3\x11D\xbc\x03\xee\xbc\x01~vME-\xaf\xa0pM\xd8`\xd2\n\x8ci/\x98=m\x83Lq;\xc9\xd9j\xac\xf8\x83\xecWo\x9b^@\xdb\x0f\xbf\x93\xbe\xbf\x97\xb4\xd1sw=\xe2\x02\xe4d\xde\xb4\xfa\xb9\xf8\xd1\xb7a~\x13\x9d\x12$\x14|\xdf-\xdcFK\x1d\x94\r\xbf\xc1-;W\xf4\xb8e\xdbt\n+f\x99\xb5)F\x1b\x8e\x1ek\x80\xb6\x94\x12:\xe1ed\x17\xacH\x0b\xcby\xf2}\xe82\x94\xdf\xf3\xac\x99\x9a9vH\xbc\xd5tZ\xf8\r\x10\x84\x9d\xed_,\xf1\xd8uJY\xae*\xb8h\xda\n\xa7z\xca\xb27\x14\xcd\xeb\x97W\x07\xb99\x185\xacQ\x1f\xc2n\xcb\x00\xac!\x1d\xcbP\xfe\xee\xd0\xec\x83R\xd3JE\xc63\xc3\xb4o\x00s\x9b\x9e\xba\x0e\xa6Za\xb8\xa5(w \xd7:\xe4gF\xae\x14@ze\x06\x92\x89\xe8g\x1aE\xc8\xa6\x0ea\xda>\x02\x8a\xa3\xe0\x9cS\xd4\x00\xc8C\xc1\xc4w\x1b\xffE\xf9\xd6\xf8\xcfD\x17[\x1d_\xe9.x\xeecj\xd5\x82+Fe\x05\xf3\xea\xf8d@C\xa0\xa7`^\x17\x8d\x0e\xb7f\xaa\x10\x91\xcci\xb3b]\xe5\xe6\x91\xea\x1c\x0bj\xffj\x19\x04\x0f\x13Q\x97\xa0\xe0\xc1\x10)\x9c\xefY%\x87\xfcw\xe7\xe1\xb1\xcan\xbf\xf0%\xe1\n\xf9\xef\x93\x89D\xf4\t\x8a\xc1\x9eo\xb4\x1b\xc6{?\x11\x01\x9d\xf9\xf90\xb2\xc4eK\xdd\x85\x1f~6\xd7\xde\x03z\xe2\xd5\xcb\xa2\xcdMD\xf7&@}l\x9e\x8a\xff\x88|\x8f\x0fZ\xcc&75\\\x02\x07\xd7\xf5\xaaAM\xfc\\=@!\xd4\x8e\x08\xaef\x85bZ\xd2P\xcf\x1b\xf3x\xe4\r\x1f\xfb\x05T\x08\x87\xce\xf7\x99\xcf\xef\xc2\x0c\xbf_V\xa5e\xd7\xea\x0e\xba\x16K)\x9f\x0b\x88\xf2k\xbe\xdc\x8b\xeb\xcdl\xaf\xba\x00*\xdby\xa2c\x1f\xbf\xf4\x95\xa4\r\x02\xa4!\x96\x19\x1d\xf5_7\xa0\xfd\xa7r(\x9bn\xc4\xdc\xb0rH\x91\xc6\x9b\x91\xda\x85fsg&i\x7f)\xa4B\xe2Xxv\x8b#Y\x98)\x88f\t\xde\t\x0bZos\xceyQ\x80\xfd\xa8\x89\xe0\xd7\xb7(\xa3:\x1bi\xdc=\x89\xbf\rJ\xefA\xc0+\xf8\x1f\xb3T\x13\xb68\x16j\x16\xdb9\xae\xea\x15\xf6\x8fT\r\xc6\x8c\xdcl2N\xcaC\xed\xbe\x8a\xc0\xe6\xa0\x83@\xb9+@p^\xa3\n\xba\x94\x17A\xf8~\xbd\xfb\x83\xd6\xd7\x1c\'\xc3K\xdb\x1c\xa8I\xbbC9qs\xc4\xa2\xf4\xa4\xf6\xa8w\xbe\xe6]\x83\xcf\x8c#\xb8\x19\xf7\x10\xc7\xe9K\x84\x9d})cx\x89\xb0W\xff\x0c<;\xd9Ni\x8b\xe3vv\xe2-\x04/R(~\xc7\x93\xd9@f\xe0\xe5\xbd\xe2\x1a\\\ri\xeb\xc9m\x19\xc0\x7f\xda\xbe\xd9\xe6qj\x17\x9eZ\x8f\x86\x80\x15.\xe6Y\xecX7\xf5\x81\xce\x18m5\x95:F\xf7\x12\xa2\xe8\x01\x9d^\xc1\xb0a\x14`\xd7\x84\xca\nm\xf4\x8e\xabZ\x99!p\x0f\xb6\xc4\xd15\x95\xf0inpj\x18\xdd\x10\xaf\x0b\x16a\xbaa\x11\x03\x96\x83\xa6\x0b\x87\x0f\x15;I\xd1W\x9b\xabgZZ\xb0PRM\x83\x8f\xd0\x01\xa7Xi\x0f\xfc\x02\xe0\xc2\x1ecK\x17\xbaP`\x01$\n.L:\xc5Ir\xf17\x16\xa2\xff\x07OJ\x92a\xfd4!\x8e\x84 \x95hF\x10H\x98\x1eP\xf5\xb2\xa3\x1e\x12\xb1\xc7lY\x87\xd4\x92x\x10\x98\xba*\xdd\xa8\x0bO\x95\xd1\x83\x81\xb6\xe1\xddZ\x8f\xf2\xd3\xa92\x1ecl\xdd-\xa3\xc9\xa2\x93<\x96E\n/\xd7\xde\xf1M\xd7\xad\xd7\xa0N\x97]\xaf\xe6\xc5\xffI\xa2\xc3m\xd7\x8c\x0cl\xb2\xe5\\p\x15\x0c\x08y\x19w\x16\xf8pM\xa9J\xa5\xef\xa69\x97\'\xeb\x90\x1e\xe6\xd2\x16\xc8O\xcb\xc4\x9ba\x93\x83\xee\x94\x1e0Z\xd6\x81U\xec\x00dDx\xd38\xd1\xbdeL\ta\x1f\x12\xe3)\xfc\xcbB\x81\x0e\x91\xf6I\xd7iT\x802{r\x9c,\x0b\x92\xe93\x01\x12\xfb\x1c\x16\x9b\xc5\xb1\xa1\xaf\xd0\xa4\xa4\x93\x85M\xd4;\xfc\xd7.\x01Y\xde$T!/\x9cj\xb8\xf6\n\xef\xf4\xe9\xe4\xd3,\xbf\x18{W\xb7\x95\xf0\xec\xbd\x0f\xe3<\xaa\xc7\x92\x87\xaa\x12\xa2\xc23\xe0k\xa9\xa6\xfafTY\xe4\xe4A~_\x149o\xfd\xad\x1d\xd66\xd1\x06\xae]\xae}Bm\x91QQ\xcd\xe8\xd7F\xa7\xcf\x9f\xee\x0b:\xac0)\xf5\x82\xf4\xa4X\xb4\x12@\x81;\xbeo\xc7\xad\xcb1\xa5E\x1e\xc5J\xcaQ\xa48\xf4\xe91\r\xbbi~%\xd0#\x84\xa71\x82^\x87L/\x84R]s\xb3\xe9\x80\xa8\xacr\xe9\x96\xd5\xc6\x82\xf3>\x9a\x1a<\x00\xe8>\xb4\xf7h\xdeY\xd1\xf2\r\xb5\'`\x1e\xca\xb5[\xa8$G\x85\xc5\x1b\x1d\x8d\x1d\xc4\xa0C\x15\x0f\xe6\xa7\x05\xf9R\x875\x99\xce\x19\x1b\xf9\xfc\x06\x18s;I \x8aN\x04\xc9\xcb"\x9c6\x01\xe2u\xa3\xc4R\x92\xf4!\xfa\x83l\x1e\x80}0[&sC\x8b\xe1/\x9e\x94W\x85}\rE\xec\xdf3\x96\x94R\xb0[\xb3\x92\xaeN\xb1\xae\xbb\x12)\x97d\x9c\x92\xb7\xa9\xb5\x0c\xf1\xcd\x9b\x95\x06\xbd\xfe\xa5\x88\xc5\x1c\xf1\x012A&h\x15ARl][\xa4\xfd\xe1\x06"\x9d,\xbc\x84;Y5\x88\x9aJh;\xf0\x851\x9cE\xce\x1ag\x1fQ\x18G\x1e\xa1\x14\x96\xe0\xbf\xa2\x92\x8c\x14\xe1\xc9\xfet\x0b\x08%\x01\x14z?\xb9\x0f\xf2P\x85\xb5\xf4\xc4V<g]\xb1\x1awO\xc5\xdb~\xd2">Y\x9dgw\xcf\xa3\x85>\x91r1\xf1\xaf\xe89\xc9\xe5\x13\xe2\x04\xb3/\xf8~\x8b\x1d\x1ax\xcbR\xb2\xceJ\xe9\xd0_\xfa\xcdXz\xc6.vr\x18\xcb\x9f\xb2\x83\xc7\'\xa7f\x9b\x83\x90\x90M&X\x1f\x11s\xc7X\x82\xd7\x9am:\x99v\xdd\x8e\xe2\x16_w\x8a\x08o\xfc\xbf )\xad\xd3\xaf\x0e\x15R8\xa1\x04\x11t\xf4c\x9b\x9a\xfa\x11e\xf5\xdc\xed\xd6`O\xd5,\xbfAk\x92Z\x99\xf9\xd0\x8a\tb\xc1\x1a`\xd8-\xf9O\xdc\xdd\xa4<\xcc\xea\xcb\xde\xab\x99\x85\xa7\xfb\x024k\xf4\xf0\x1b\x8c[\x12\x94\xea\x85j\xdb\xe5\x00\xb5m\xf2`\xb1K\xf76\x03\x05\x89\xd8\x8a\x04\xe38=\xb1v\xfa\xbd\xb1R\x1c\xdax\xc5\xd0\xc4^\xe8\x88\xa1\x87\x8di\xf4\xd3~H\xe0:V,\x1cx\xa0O\xf2*7\xf7 e\x96\xeb\xd7C\x98\xf5*%gy\xcf \xc6\x1c\x16\xc6\xc1X\xd1\x07r;\xa8\xdbB8h{\xe4\xd8\t\x84\xd1\x06\x1alxG\x88\x03\x18\xac\xd4\x98&\xacc\xcdomb\xc2\xd7\xee1\xda\xa5\x15Chz\xfb^b\xa3\x88\x94\xc9VK\x02U\xb8 \x85}\x85)\xa2qs\x82\xb9\xe7z\x1d\xe0f,\x11!\x1e\x83\x16\\\n\xb7\xb8\x0f\t\xaa\x07\xe4\x194s\xc7\xc3a\xb7\x95j4\xce\xff\x9ee\x8f\xa8\x88\xfeB.E*\'\xd8\xd7U\xa8\xd7\n\\\xc9\xff\x01Xd2\xcep\xe7\xf7\xe6P\xc8\xb2\xf2\x18\x89|%\xb4\xbe\xdaD~@p\x82:\xba\xc4>\xc5\x16<ec7\xa1\xf9\x8a\xc6^)aZ\xf5?\xb0\x0e\x85X\xa9\xc4\xa1Q\x1e\x13\xf9\x08Tu\xb8\x07\xe5\xe4\xf7B\xad\xc6Y\x14]\xd5\x16\xd0\xb0ZB\x94\x17\xa7\xf8\xa1\x1a/i~\xe3\x91^P\xfb\xa9\x85\xad\x17\xcb\x12\x1c\xa4%\xf2\x10\xa7\xa8LA\xa5\xf04\xbe\xf4dTf\xcd\x0c\xda\xf2J\x16\xa2\x95\xbb\xa7\x98\xb8\x94\x93RQ"0\x0c\'4<]\xe9\x9f\x95\n\x19U\xc9s\xa3\x8b\x96\x0c)i\x16<n\x9e\xdc\xb9\x11W\xb8\xcd\x17sh9)\xb4\xe0\t\xee\xadH\x81=(}Yki\x1c\xe8=t`\x82e\xbaH\x7f\xbf\x84\xb5u\xc3P\x1a(\x10\xca\x11\xeb\xfd\xcbq\x17\xf5m\xf0\xeb\\\x00Hy\xc3\xe0\x98fQb{\x14wC\xd2\xa73g\x04\xf4\xd0\xb3y\xa5J\xb5\xa6\x12\xbf\x83\xac+;L"\xb4\xe5u\x99\xe7\xb1\xd1E\x7f\x08\x16E\xc8\x8aA\x12\x0f\xf8\xa3\x03.%]\xb0\xca\x9e\xd2Hc\xa3\xf6mFAf\xc6\xdc\xd0\xfe\xe5\x01Y\xc3\x12\xa2*\x8f\xf9l\xa9\x03i\xffV\xe8\x0cck\x1e\x02\xdd,\xd8\x88\xf5XWO\x84\xf9\xc3G\xd1\xd2\xf8\xadxcI \x9b\xe1\xc9*;\x17v.l\xcdB\x8fz\xa1pP\xa6^\x830r\xbbA\xecb\x14U\t\x085\x91{/\t\xeb\x02e\x95d\x929q\xc8\x89t^i2@\xd4\x86\xeb\xb8\xccj\x19\xd5b\xba+\xe9\xd8d\xd1K)\xa2\x16v2\x1f\x89\x11\xbb\xa7\r\xefy\xe4K\xe6:\xbeOPn+\xad\xea\x1d\x84\xd7\x88\xef\xf3\xcf\x1a\x84i{b\xed\xd9\xd1\xbe\xacY\x03\x11N\x1b\xf3*\xcf\xd6\xb6\xdc,\x19\x01Ik\x9e\x0fd\x93\xf4W,\xac?X:\xe3\x12\x81E\xf8\x07\xa7\xa1:\xc1N\xbb\x08wh?\x11uH\xa6P\xd1\xe0\x96\xd3\xb1\xce\xa3\x1a\xbf\x112\x1b\xd2\xc7nY\\G\xd7\xa7\x94\xcc7h\xfe\xac\xc7\x9aR6\xfbp\xb8u\xec\xd4B\x03\xd6,\x01\xe14\xa8\xd6/\xe0\xde\xa5\xdf8#-\x0c\x82\xf0\xa8Zd{>dDg\xef\xfe@\x81k\xd2\xcfT\xd5\x7f \xc4F\xe4\xbc\x8a\t\x84\xb5\xec[\xcal\x1e\xb8n=T\xff\x7f\x84i\x98e\x05\x9a\xe6\x14\xf2\x16S\x93\x06\xa64\x93\xb5\xc0\xfa\xd2\xf8\xab$%&\xd2\x9b\x04\x9c\xf2V5\xcb\xf4E\t\xc1\x8ac\x1f-dqP\xfe\xaf\xa0\xc1\xdb%_-\x9a/\xef\xfd\x86\x8b\x7f*\t\xbc\xb8\xdc\n\x93\x17\xf4\x1dv9b\x9c\xba\xe46\xeeRk\xbbVCM\xb2k\xefd\xd6X\x91(\x83\xa1\x00@I\xfe\xbe\xaf(\xb35\xa6R|6P"W\xaf\xf5`\x04\xd8\xd8\xbb\x8c\xde\xdb\x92\xc4\xe0\x13\xbe\x9d\\1\xe0\x1e1\x9e\xcd\xfd\xe07n\x98i8R\xb6F\x8cB\xc2b\x8f\x8b\x9aJe\xcc\xc6\x1f5\xb2\xbf|{#\x11VT\x15e.Fd\x00\x06\xeb\xb8$M\x01o\xea\xd2@\x89\x1bQ\xfb\xa4\xaa\x8d&\xfd\xc4\xf2\xbf,\xf7W\xbe\xdeV|B\xb9\xc1)\x8cl\xc9\x82\xce\x00\x9fd\x12\xc4\xa6\xad_^f\xee\xcc\x8cB2\xbf\xd8u\xc3\xca\xf0\xc14\xfb\xa2\xe3\xea\x9f\x9b/\x89\xb5\xa5\x01\xd5=\x98\x8a\xe0J\xcc\x90P\xa5\xc6>-\xc6v!\x9c\xcd\x83\xe3)0\xdf\x01Hn\xa0\xa5H\x8a\xd4\x9c\x1d D\x0b\xd5I\x84\xbfK\xc1\x16\x80\xc0x\xcb\x05o\xc1\xc7=\xea9\xc6\xfbz\x1eL\xad\xac\x91j\xb4\xad\xda\xa4.\x1a\xedv\xc2s\x93m\x00\x94d@\xce\x94\xa3\x9f.\x1b\xc2~~\xe7aO/\x7f~!\xa7\xfc\xbb\xcd\xd3\x14h\x95f9L\x96;\x9b8\x08\xcai3\xb4<\xb2\x9auB4\xae\xe7\x8e\xde\xbdm0\xf4\xe9\xc3N\xf6\x84.\xe9 \x12\xf7\xa7=\xae=\xb8\xc6\xcf_l\xd1\xb3\xa8\xa0)Z\xea\x9bmF-h\x1c\n\xbb\x8b\x05\x9f6\xd4\x10\x85\xdc\xff\xc7yMa\xaa\x00\xe5\x87\xb6\x86\x1e\xecr\xb9\xebG\xac0\xbe\x16\xcf\x14G\x039\xb79\xc9\xf4I\xbe{nYM\xf3`\x06\xd6mN\xec\xdc\xb8\xd7B\x11\x97,\x15\xde\xea!X\x1d\xc0w\xa5\xa7\xf3Xh\x07l+\x15\x80\xfa\xdd\x1d\xcb\xae\xf4\x96\xb7\x10\xd4d\xac\xb5\xe0\xfaq\xf51\x1f\xd5)Z\xc9\xbc\x93\x98\x9aN\xd5\x85\x85\x84\x12\xe2\xb3lM\xc4\xf4G}\x10\xd0\xfe(op\xdd\xd8\xc7\xdcO\x9a{\xb9\xa7\xa0\xd1[\xb4\xd5 \xaa\x17\xe6f\x17\x98\x90\xa13j\xc2\xe67\xe5d\x95k\x101E\x12)\xdc]\x0e[\x95\x89\xa0aJ\x87\x06\x13\xefL\x8d\x04\tn\x08\xed\xe2Vt\x06\xd4\xa4\xee\x00.M\xe2n\xb9\x1c<S`w\xeeWQ\x87m\x9d\xe4\x05\xec\x08\xd1w\x15\xeaH\xc1\xa6\xa6\xab6\xd9\x9c\xe9\xd6"\xf4\x9f\xa2\xa5\\T\xda;\xf9l\xf7\xf4\x87\xd7\x04\x02\x0e\\\x0b\xd2\xda\xd9?^\xe23U}QE+vl\xa0\xf5\xf9\xb0\xb2')
|
1
|
+
from flask import g,request
|
2
|
+
import enum
|
3
|
+
from hiddifypanel.models import *
|
4
|
+
import yaml
|
5
|
+
import json
|
6
|
+
from hiddifypanel.panel import hiddify
|
7
|
+
|
8
|
+
|
9
|
+
def all_proxies(child_id=0):
|
10
|
+
all_proxies = hiddify.get_available_proxies(child_id)
|
11
|
+
all_proxies = [p for p in all_proxies if p.enable]
|
12
|
+
# all_cfg=Proxy.query.filter(Proxy.enable==True).all()
|
13
|
+
# if not hconfig(ConfigEnum.domain_fronting_domain):
|
14
|
+
# all_cfg=[c for c in all_cfg if 'Fake' not in c.cdn]
|
15
|
+
# if not g.is_cdn:
|
16
|
+
# all_cfg=[c for c in all_cfg if 'CDN' not in c.cdn]
|
17
|
+
# if not hconfig(ConfigEnum.ssfaketls_enable):
|
18
|
+
# all_cfg=[c for c in all_cfg if 'faketls' not in c.transport and 'v2ray' not in c.proto]
|
19
|
+
# if not hconfig(ConfigEnum.vmess_enable):
|
20
|
+
# all_cfg=[c for c in all_cfg if 'vmess' not in c.proto]
|
21
|
+
|
22
|
+
return all_proxies
|
23
|
+
|
24
|
+
|
25
|
+
def proxy_info(name, mode="tls"):
|
26
|
+
return "error"
|
27
|
+
|
28
|
+
|
29
|
+
def pbase64(full_str):
|
30
|
+
return full_str
|
31
|
+
str = full_str.split("vmess://")[1]
|
32
|
+
import base64
|
33
|
+
resp = base64.b64encode(f'{str}'.encode("utf-8"))
|
34
|
+
return "vmess://"+resp.decode()
|
35
|
+
|
36
|
+
|
37
|
+
def make_proxy(proxy, domain_db, phttp=80, ptls=443):
|
38
|
+
if type(phttp) == str:
|
39
|
+
phttp = int(phttp) if phttp != "None" else None
|
40
|
+
if type(ptls) == str:
|
41
|
+
ptls = int(ptls) if ptls != "None" else None
|
42
|
+
l3 = proxy.l3
|
43
|
+
|
44
|
+
domain = domain_db.domain
|
45
|
+
|
46
|
+
child_id = domain_db.child_id
|
47
|
+
hconfigs = get_hconfigs(child_id)
|
48
|
+
port = 0
|
49
|
+
|
50
|
+
if l3 in [ProxyL3.tls, ProxyL3.tls_h2, ProxyL3.tls_h2_h1]:
|
51
|
+
port = ptls
|
52
|
+
elif l3 == "http":
|
53
|
+
port = phttp
|
54
|
+
elif l3 == "kcp":
|
55
|
+
port = hconfigs[ConfigEnum.kcp_ports].split(",")[0]
|
56
|
+
elif l3 == "tuic":
|
57
|
+
port = hconfigs[ConfigEnum.tuic_port].split(",")[0]
|
58
|
+
|
59
|
+
name = proxy.name
|
60
|
+
if not port:
|
61
|
+
return {'name': name, 'msg': "port not defined",'type':'error', 'proto': proxy.proto}
|
62
|
+
|
63
|
+
is_cdn = ProxyCDN.CDN in proxy.cdn
|
64
|
+
if is_cdn and domain_db.mode not in [DomainType.cdn,DomainType.auto_cdn_ip]:
|
65
|
+
# print("cdn proxy not in cdn domain", domain, name)
|
66
|
+
return {'name': name, 'msg': "cdn proxy not in cdn domain",'type':'debug', 'proto': proxy.proto}
|
67
|
+
if not is_cdn and domain_db.mode in [DomainType.cdn,DomainType.auto_cdn_ip]:
|
68
|
+
# print("not cdn proxy in cdn domain", domain, name, proxy.cdn)
|
69
|
+
return {'name': name, 'msg': "not cdn proxy in cdn domain",'type':'debug', 'proto': proxy.proto}
|
70
|
+
|
71
|
+
cdn_forced_host = domain_db.cdn_ip or domain_db.domain
|
72
|
+
|
73
|
+
base = {
|
74
|
+
'name': name.replace(" ", "_"),
|
75
|
+
'cdn': is_cdn,
|
76
|
+
'mode': "CDN" if is_cdn else "direct",
|
77
|
+
'l3': l3,
|
78
|
+
'host': domain,
|
79
|
+
'port': port,
|
80
|
+
'server': cdn_forced_host,
|
81
|
+
'sni': domain,
|
82
|
+
'uuid': str(g.user_uuid),
|
83
|
+
'proto': proxy.proto,
|
84
|
+
'transport': proxy.transport,
|
85
|
+
'proxy_path': hconfigs[ConfigEnum.proxy_path],
|
86
|
+
'alpn': "h2" if proxy.l3 == 'tls_h2' else 'h2,http/1.1' if proxy.l3 == 'tls_h2_h1' else "http/1.1",
|
87
|
+
'extra_info': f'{domain_db.alias or domain}',
|
88
|
+
'fingerprint': hconfigs[ConfigEnum.utls],
|
89
|
+
'allow_insecure': domain_db.mode == DomainType.fake or "Fake" in proxy.cdn,
|
90
|
+
'dbe':proxy,
|
91
|
+
'dbdomain':domain_db
|
92
|
+
}
|
93
|
+
|
94
|
+
if base["proto"] == "trojan" and "tls" not in l3:
|
95
|
+
return {'name': name, 'msg': "trojan but not tls",'type':'warning', 'proto': proxy.proto}
|
96
|
+
|
97
|
+
if l3 == "http" and "XTLS" in proxy.transport:
|
98
|
+
return {'name': name, 'msg': "http and xtls???",'type':'warning', 'proto': proxy.proto}
|
99
|
+
if l3 == "http" and base["proto"] in ["ss", "ssr"]:
|
100
|
+
return {'name': name, 'msg': "http and ss or ssr???",'type':'warning', 'proto': proxy.proto}
|
101
|
+
if proxy.proto in ProxyProto.vmess:
|
102
|
+
base['cipher']="chacha20-poly1305"
|
103
|
+
if "Fake" in proxy.cdn:
|
104
|
+
if not hconfigs[ConfigEnum.domain_fronting_domain]:
|
105
|
+
return {'name': name, 'msg': "no domain_fronting_domain",'type':'debug', 'proto': proxy.proto}
|
106
|
+
if l3 == "http" and not hconfigs[ConfigEnum.domain_fronting_http_enable]:
|
107
|
+
return {'name': name, 'msg': "no http in domain_fronting_domain",'type':'debug', 'proto': proxy.proto}
|
108
|
+
if l3 == "tls" and not hconfigs[ConfigEnum.domain_fronting_tls_enable]:
|
109
|
+
return {'name': name, 'msg': "no tls in domain_fronting_domain",'type':'debug', 'proto': proxy.proto}
|
110
|
+
base['server'] = hconfigs[ConfigEnum.domain_fronting_domain]
|
111
|
+
base['sni'] = hconfigs[ConfigEnum.domain_fronting_domain]
|
112
|
+
# base["host"]=domain
|
113
|
+
base['mode'] = 'Fake'
|
114
|
+
|
115
|
+
elif l3 == "http" and not hconfigs[ConfigEnum.http_proxy_enable]:
|
116
|
+
return {'name': name, 'msg': "http but http is disabled ",'type':'debug', 'proto': proxy.proto}
|
117
|
+
path = {
|
118
|
+
'vless': f'{hconfigs[ConfigEnum.path_vless]}',
|
119
|
+
'trojan': f'{hconfigs[ConfigEnum.path_trojan]}',
|
120
|
+
'vmess': f'{hconfigs[ConfigEnum.path_vmess]}',
|
121
|
+
'ss': f'{hconfigs[ConfigEnum.path_ss]}',
|
122
|
+
'v2ray': f'{hconfigs[ConfigEnum.path_ss]}'
|
123
|
+
}
|
124
|
+
|
125
|
+
if base["proto"] in ['v2ray', 'ss', 'ssr']:
|
126
|
+
base['cipher'] = 'chacha20-ietf-poly1305'
|
127
|
+
if "shadowtls" not in proxy.transport:
|
128
|
+
base['uuid'] = f'{hconfigs[ConfigEnum.shared_secret]}'
|
129
|
+
|
130
|
+
if base["proto"] == "ssr":
|
131
|
+
base["ssr-obfs"] = "tls1.2_ticket_auth"
|
132
|
+
base["ssr-protocol"] = "auth_sha1_v4"
|
133
|
+
base["fakedomain"] = hconfigs[ConfigEnum.ssr_fakedomain]
|
134
|
+
base["mode"] = "FakeTLS"
|
135
|
+
return base
|
136
|
+
elif "faketls" in proxy.transport:
|
137
|
+
base['fakedomain'] = hconfigs[ConfigEnum.ssfaketls_fakedomain]
|
138
|
+
base['mode'] = 'FakeTLS'
|
139
|
+
return base
|
140
|
+
elif "shadowtls" in proxy.transport:
|
141
|
+
|
142
|
+
base['fakedomain'] = hconfigs[ConfigEnum.shadowtls_fakedomain]
|
143
|
+
base['mode'] = 'ShadowTLS'
|
144
|
+
return base
|
145
|
+
|
146
|
+
if "XTLS" in proxy.transport:
|
147
|
+
base['flow'] = 'xtls-rprx-vision'
|
148
|
+
return {**base, 'transport': 'tcp', 'l3': 'xtls'}
|
149
|
+
if "tcp" in proxy.transport:
|
150
|
+
base['transport'] = 'tcp'
|
151
|
+
base['path'] = f'/{path[base["proto"]]}{hconfigs[ConfigEnum.path_tcp]}'
|
152
|
+
return base
|
153
|
+
if proxy.transport in ["ws", "WS"]:
|
154
|
+
base['transport'] = 'ws'
|
155
|
+
base['path'] = f'/{path[base["proto"]]}{hconfigs[ConfigEnum.path_ws]}'
|
156
|
+
base["host"] = domain
|
157
|
+
return base
|
158
|
+
|
159
|
+
if proxy.transport == "grpc":
|
160
|
+
base['transport'] = 'grpc'
|
161
|
+
base['grpc_mode'] = "multi"
|
162
|
+
base['grpc_service_name'] = f'{path[base["proto"]]}{hconfigs[ConfigEnum.path_grpc]}'
|
163
|
+
base['path'] = base['grpc_service_name']
|
164
|
+
return base
|
165
|
+
|
166
|
+
if "h1" in proxy.transport:
|
167
|
+
base['transport'] = 'tcp'
|
168
|
+
base['alpn'] = 'http/1.1'
|
169
|
+
return base
|
170
|
+
return {'name': name, 'msg': 'not valid','type':'error', 'proto': proxy.proto}
|
171
|
+
|
172
|
+
|
173
|
+
def to_link(proxy):
|
174
|
+
if 'error' in proxy:
|
175
|
+
return proxy
|
176
|
+
|
177
|
+
name_link = proxy["name"]+"_"+proxy['extra_info']
|
178
|
+
if proxy['proto'] == 'vmess':
|
179
|
+
# print(proxy)
|
180
|
+
vmess_type = None
|
181
|
+
if proxy["transport"] == 'tcp':
|
182
|
+
vmess_type = 'http'
|
183
|
+
if 'grpc_mode' in proxy:
|
184
|
+
vmess_type = proxy['grpc_mode']
|
185
|
+
vmess_data = {"v": "2",
|
186
|
+
"ps": name_link,
|
187
|
+
"add": proxy['server'],
|
188
|
+
"port": proxy['port'],
|
189
|
+
"id": proxy["uuid"],
|
190
|
+
"aid": "0",
|
191
|
+
"scy": proxy['cipher'],
|
192
|
+
"net": proxy["transport"],
|
193
|
+
"type": vmess_type or "none",
|
194
|
+
"host": proxy.get("host", ""),
|
195
|
+
"alpn": proxy.get("alpn", "h2,http/1.1"),
|
196
|
+
"path": proxy["path"] if "path" in proxy else "",
|
197
|
+
"tls": "tls" if "tls" in proxy["l3"] else "",
|
198
|
+
"sni": proxy["sni"],
|
199
|
+
"fp": proxy["fingerprint"]
|
200
|
+
}
|
201
|
+
|
202
|
+
return pbase64(f'vmess://{json.dumps(vmess_data)}')
|
203
|
+
if proxy['proto'] == "ssr":
|
204
|
+
baseurl = f'ssr://proxy["encryption"]:{proxy["uuid"]}@{proxy["server"]}:{proxy["port"]}'
|
205
|
+
return baseurl
|
206
|
+
if proxy['proto'] in ['ss', 'v2ray']:
|
207
|
+
baseurl = f'ss://proxy["encryption"]:{proxy["uuid"]}@{proxy["server"]}:{proxy["port"]}'
|
208
|
+
if proxy['mode'] == 'faketls':
|
209
|
+
return f'{baseurl}?plugin=obfs-local%3Bobfs%3Dtls%3Bobfs-host%3D{proxy["fakedomain"]}&udp-over-tcp=true#{name_link}'
|
210
|
+
if proxy['mode'] == 'shadowtls':
|
211
|
+
return f'{baseurl}?plugin=shadow-tls%3Bpassword%3D{proxy["proxy_path"]}%3Bhost%3D{proxy["fakedomain"]}&udp-over-tcp=true#{name_link}'
|
212
|
+
if proxy['proto'] == 'v2ray':
|
213
|
+
return f'{baseurl}?plugin=v2ray-plugin%3Bmode%3Dwebsocket%3Bpath%3D{proxy["path"]}%3Bhost%3D{proxy["host"]}%3Btls&udp-over-tcp=true#{name_link}'
|
214
|
+
|
215
|
+
infos = f'&sni={proxy["sni"]}&type={proxy["transport"]}'
|
216
|
+
|
217
|
+
infos += f"&alpn={proxy['alpn']}"
|
218
|
+
|
219
|
+
# infos+=f'&alpn={proxy["alpn"]}'
|
220
|
+
infos += f'&path={proxy["path"]}' if "path" in proxy else ""
|
221
|
+
infos += f'&host={proxy["host"]}' if "host" in proxy else ""
|
222
|
+
if "grpc" == proxy["transport"]:
|
223
|
+
infos += f'&serviceName={proxy["grpc_service_name"]}&mode={proxy["grpc_mode"]}'
|
224
|
+
if 'vless' == proxy['proto']:
|
225
|
+
infos += "&encryption=none"
|
226
|
+
if proxy.get('fingerprint','none')!='none':
|
227
|
+
infos += "&fp="+proxy['fingerprint']
|
228
|
+
if proxy['l3'] != 'quic':
|
229
|
+
infos += '&headerType=None' # if not quic
|
230
|
+
if proxy['mode'] == 'Fake' or proxy['allow_insecure']:
|
231
|
+
infos += "&allowInsecure=true"
|
232
|
+
|
233
|
+
infos += f'#{name_link}'
|
234
|
+
baseurl = f'{proxy["proto"]}://{proxy["uuid"]}@{proxy["server"]}:{proxy["port"]}'
|
235
|
+
if 'xtls' == proxy['l3']:
|
236
|
+
return f'{baseurl}?flow={proxy["flow"]}&security=tls&type=tcp{infos}'
|
237
|
+
if proxy['l3'] == 'http':
|
238
|
+
return f'{baseurl}?security=none{infos}'
|
239
|
+
if 'tls' in proxy['l3']:
|
240
|
+
return f'{baseurl}?security=tls{infos}'
|
241
|
+
return proxy
|
242
|
+
|
243
|
+
def to_clash_yml(proxy):
|
244
|
+
return yaml.dump(to_clash(proxy))
|
245
|
+
|
246
|
+
|
247
|
+
def to_clash(proxy, meta_or_normal):
|
248
|
+
name=proxy['name']
|
249
|
+
if proxy['l3'] == "kcp":
|
250
|
+
return {'name': name, 'msg': "clash not support kcp",'type':'debug'}
|
251
|
+
if proxy.get('flow', '') == "xtls-rprx-vision":
|
252
|
+
return {'name': name, 'msg': "vision not supported",'type':'debug'}
|
253
|
+
if meta_or_normal == "normal":
|
254
|
+
if proxy['proto'] == "vless":
|
255
|
+
return {'name': name, 'msg': "vless not supported in clash",'type':'debug'}
|
256
|
+
if proxy['l3'] == "xtls":
|
257
|
+
return {'name': name, 'msg': "xtls not supported in clash",'type':'debug'}
|
258
|
+
if proxy['transport'] == "shadowtls":
|
259
|
+
return {'name': name, 'msg': "shadowtls not supported in clash",'type':'debug'}
|
260
|
+
if proxy['l3']==ProxyL3.tls_h2 and proxy['proto'] in [ProxyProto.vmess,ProxyProto.vless] and proxy['dbe'].cdn==ProxyCDN.direct:
|
261
|
+
return {'name': name, 'msg': "bug tls_h2 vmess and vless in clash meta",'type':'warning'}
|
262
|
+
base = {}
|
263
|
+
# vmess ws
|
264
|
+
base["name"] = f"""{proxy["name"]} {proxy['extra_info']} {proxy['port']} {proxy["dbdomain"].id}"""
|
265
|
+
base["type"] = str(proxy["proto"])
|
266
|
+
base["server"] = proxy["server"]
|
267
|
+
base["port"] = proxy["port"]
|
268
|
+
base['alpn'] = proxy['alpn'].split(',')
|
269
|
+
if proxy["proto"] == "ssr":
|
270
|
+
base["cipher"] = proxy["cipher"]
|
271
|
+
base["password"] = proxy["uuid"]
|
272
|
+
base["udp"] = True
|
273
|
+
base["obfs"] = proxy["ssr-obfs"]
|
274
|
+
base["protocol"] = proxy["ssr-protocol"]
|
275
|
+
base["obfs-param"] = proxy["fakedomain"]
|
276
|
+
return base
|
277
|
+
elif proxy["proto"] in ["ss", "v2ray"]:
|
278
|
+
base["cipher"] = proxy["cipher"]
|
279
|
+
base["password"] = proxy["uuid"]
|
280
|
+
base["udp_over_tcp"] = True
|
281
|
+
if proxy["transport"] == "faketls":
|
282
|
+
base["plugin"] = "obfs"
|
283
|
+
base["plugin-opts"] = {
|
284
|
+
"mode": 'tls',
|
285
|
+
"host": proxy["fakedomain"]
|
286
|
+
}
|
287
|
+
elif proxy["transport"] == "shadowtls":
|
288
|
+
base["plugin"] = "shadow-tls"
|
289
|
+
base["plugin-opts"] = {
|
290
|
+
"host": proxy["fakedomain"],
|
291
|
+
"password": proxy["proxy_path"]
|
292
|
+
}
|
293
|
+
|
294
|
+
elif proxy["proto"] == "v2ray":
|
295
|
+
base["plugin"] = "v2ray-plugin"
|
296
|
+
base["type"] = "ss"
|
297
|
+
base["plugin-opts"] = {
|
298
|
+
"mode": "websocket",
|
299
|
+
"tls": "tls" in proxy["l3"] ,
|
300
|
+
"skip-cert-verify": proxy["mode"] == "Fake" or proxy['allow_insecure'],
|
301
|
+
"host": proxy['sni'],
|
302
|
+
"path": proxy["path"]
|
303
|
+
}
|
304
|
+
return base
|
305
|
+
elif proxy["proto"] == "trojan":
|
306
|
+
base["password"] = proxy["uuid"]
|
307
|
+
base["sni"] = proxy["sni"]
|
308
|
+
|
309
|
+
else:
|
310
|
+
base["uuid"] = proxy["uuid"]
|
311
|
+
base["servername"] = proxy["sni"]
|
312
|
+
base["tls"] = "tls" in proxy["l3"]
|
313
|
+
# if meta_or_normal == "meta":
|
314
|
+
# base['client-fingerprint'] = proxy['fingerprint']
|
315
|
+
if "xtls" == proxy['l3']:
|
316
|
+
base["flow"] = proxy['flow']
|
317
|
+
base["flow-show"] = True
|
318
|
+
|
319
|
+
if proxy["proto"] == "vmess":
|
320
|
+
base["alterId"] = 0
|
321
|
+
base["cipher"] = proxy["cipher"]
|
322
|
+
base["udp"] = True
|
323
|
+
|
324
|
+
base["skip-cert-verify"] = proxy["mode"] == "Fake"
|
325
|
+
|
326
|
+
base["network"] = proxy["transport"]
|
327
|
+
|
328
|
+
if base["network"] == "ws":
|
329
|
+
base["ws-opts"] = {
|
330
|
+
"path": proxy["path"]
|
331
|
+
}
|
332
|
+
if "host" in proxy:
|
333
|
+
base["ws-opts"]["headers"] = {"Host": proxy["host"]}
|
334
|
+
|
335
|
+
if base["network"] == "tcp" and proxy['alpn'] != 'h2':
|
336
|
+
# if proxy['proto']=='vless':
|
337
|
+
base["network"] = "http"
|
338
|
+
|
339
|
+
if "path" in proxy:
|
340
|
+
base["http-opts"] = {
|
341
|
+
"path": [proxy["path"]]
|
342
|
+
}
|
343
|
+
if 'host' in proxy:
|
344
|
+
base["http-opts"]["host"] = [proxy["host"]]
|
345
|
+
if base["network"] == "tcp" and proxy['alpn'] == 'h2':
|
346
|
+
base["network"] = "h2"
|
347
|
+
|
348
|
+
if "path" in proxy:
|
349
|
+
base["h2-opts"] = {
|
350
|
+
"path": proxy["path"]
|
351
|
+
}
|
352
|
+
if 'host' in proxy:
|
353
|
+
base["h2-opts"]["host"] = [proxy["host"]]
|
354
|
+
if base["network"] == "grpc":
|
355
|
+
base["grpc-opts"] = {
|
356
|
+
"grpc-service-name": proxy["grpc_service_name"]
|
357
|
+
}
|
358
|
+
|
359
|
+
return base
|
360
|
+
|
361
|
+
|
362
|
+
|
363
|
+
def get_clash_config_names(meta_or_normal, domains):
|
364
|
+
allphttp=[p for p in request.args.get("phttp","").split(',') if p]
|
365
|
+
allptls=[p for p in request.args.get("ptls","").split(',') if p]
|
366
|
+
|
367
|
+
allp = []
|
368
|
+
for d in domains:
|
369
|
+
hconfigs = get_hconfigs(d.child_id)
|
370
|
+
for t in (['http', 'tls'] if hconfigs[ConfigEnum.http_proxy_enable] else ['tls']):
|
371
|
+
|
372
|
+
for port in hconfigs[ConfigEnum.http_ports if t == 'http' else ConfigEnum.tls_ports].split(','):
|
373
|
+
|
374
|
+
phttp = port if t == 'http' else None
|
375
|
+
ptls = port if t == 'tls' else None
|
376
|
+
if phttp and len(allphttp) and phttp not in allphttp:
|
377
|
+
continue
|
378
|
+
if ptls and len(allptls) and ptls not in allptls:
|
379
|
+
continue
|
380
|
+
|
381
|
+
for type in all_proxies(d.child_id):
|
382
|
+
pinfo = make_proxy(type, d, phttp=phttp, ptls=ptls)
|
383
|
+
if 'msg' not in pinfo:
|
384
|
+
clash = to_clash(pinfo, meta_or_normal)
|
385
|
+
if 'msg' not in clash:
|
386
|
+
allp.append(clash['name'])
|
387
|
+
|
388
|
+
return yaml.dump(allp, sort_keys=False)
|
389
|
+
|
390
|
+
|
391
|
+
def get_all_clash_configs(meta_or_normal, domains):
|
392
|
+
allphttp=[p for p in request.args.get("phttp","").split(',') if p]
|
393
|
+
allptls=[p for p in request.args.get("ptls","").split(',') if p]
|
394
|
+
|
395
|
+
allp = []
|
396
|
+
for d in domains:
|
397
|
+
hconfigs = get_hconfigs(d.child_id)
|
398
|
+
for t in (['http', 'tls'] if hconfigs[ConfigEnum.http_proxy_enable] else ['tls']):
|
399
|
+
|
400
|
+
for port in hconfigs[ConfigEnum.http_ports if t == 'http' else ConfigEnum.tls_ports].split(','):
|
401
|
+
|
402
|
+
phttp = port if t == 'http' else None
|
403
|
+
ptls = port if t == 'tls' else None
|
404
|
+
if phttp and len(allphttp) and phttp not in allphttp:
|
405
|
+
continue
|
406
|
+
if ptls and len(allptls) and ptls not in allptls:
|
407
|
+
continue
|
408
|
+
|
409
|
+
for type in all_proxies(d.child_id):
|
410
|
+
pinfo = make_proxy(type, d, phttp=phttp, ptls=ptls)
|
411
|
+
if 'msg' not in pinfo:
|
412
|
+
clash = to_clash(pinfo, meta_or_normal)
|
413
|
+
if 'msg' not in clash:
|
414
|
+
allp.append(clash)
|
415
|
+
|
416
|
+
return yaml.dump({"proxies": allp}, sort_keys=False)
|
4
417
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
418
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -393,7 +393,7 @@ responsive: {
|
|
393
393
|
%endif
|
394
394
|
</script>
|
395
395
|
|
396
|
-
%if country.lower()!=hconfig(ConfigEnum.country)
|
396
|
+
%if has_auto_cdn and hconfig(ConfigEnum.country)!="other" and country.lower()!=hconfig(ConfigEnum.country)
|
397
397
|
{% macro reload() -%}
|
398
398
|
<button onclick='document.location.reload()' class='btn btn-primary'>
|
399
399
|
{{_("Check again")}}
|