hiddifypanel 3.0.0.dev63__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/templates/config.html +1 -1
- hiddifypanel/panel/admin/templates/proxy.html +2 -2
- hiddifypanel/panel/admin/websocket.py +9 -3
- hiddifypanel/panel/admin_2.py +33 -3
- hiddifypanel/panel/asset.py +17 -3
- hiddifypanel/panel/cf_api.py +35 -4
- hiddifypanel/panel/clean_ip.py +125 -3
- hiddifypanel/panel/cli.py +172 -3
- hiddifypanel/panel/commercial/CommercialDashboard.py +59 -4
- hiddifypanel/panel/commercial/CommercialSettings.py +224 -3
- hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +38 -4
- hiddifypanel/panel/commercial/__init__.py +50 -4
- hiddifypanel/panel/commercial/restapi/__init__.py +14 -3
- hiddifypanel/panel/commercial/restapi/tgbot.py +57 -3
- hiddifypanel/panel/commercial/telegrambot/DefaultResponse.py +11 -3
- hiddifypanel/panel/commercial/telegrambot/Usage.py +71 -3
- hiddifypanel/panel/commercial/telegrambot/__init__.py +6 -4
- hiddifypanel/panel/commercial/telegrambot/admin.py +120 -3
- hiddifypanel/panel/commercial/telegrambot/information.py +123 -3
- hiddifypanel/panel/common.py +98 -3
- hiddifypanel/panel/custom_widgets.py +71 -4
- hiddifypanel/panel/database.py +18 -3
- hiddifypanel/panel/hiddify.py +655 -4
- hiddifypanel/panel/hiddify_api.py +70 -3
- hiddifypanel/panel/init_db.py +393 -3
- hiddifypanel/panel/usage.py +85 -3
- hiddifypanel/panel/user/__init__.py +25 -4
- hiddifypanel/panel/user/link_maker.py +416 -3
- hiddifypanel/panel/user/templates/home/multi.html +1 -1
- hiddifypanel/panel/user/user.py +233 -3
- hiddifypanel/static/css/custom.css +11 -0
- hiddifypanel/templates/500.html +1 -1
- hiddifypanel/xray_api.py +109 -3
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/METADATA +1 -1
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/RECORD +69 -71
- hiddifypanel-3.0.0.dev65.dist-info/top_level.txt +1 -0
- hiddifypanel-3.0.0.dev63.dist-info/top_level.txt +0 -2
- pyarmor_runtime_000000/__init__.py +0 -4
- pyarmor_runtime_000000/pyarmor_runtime.so +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/LICENSE +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/WHEEL +0 -0
- {hiddifypanel-3.0.0.dev63.dist-info → hiddifypanel-3.0.0.dev65.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,226 @@
|
|
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^*\x00\x00\x12\t\x04\x00\xfa\xe5\x8a\xbc\x91\xf5&ctLn9\xc5\xd8_q\x00\x00\x00\x00\x00\x00\x00\x00BW7R\x920\x0es\x03y\xe8J\x0c\x01\xb11;\xf8\xb9\xaa\xc11\xad\x90|\t\xc1P\xbd\xee\xa6\x9emg\xf6\x9ap\xf0\xf1\xd6\x96\x18\x9f\xdb\xf8\'\xa0;\xf0\xa2\x17\xe5\x11\x040\xa2\x07T\xbc\xe7#\x81-\xb3\xf5\x12\x84Z\xacu\xe2\n\x80\xa0\xd9\x0b\x90\x06\xd0\x9f\xc4\xdd{u@\xf0\xe3[E\xc5\xe8)\xd6\xees\x8e>s\xb6\x98<@\x86\xe7\xf0\n\xbf!dZ\x975\xb7E\x0c\xcd\x90-\xd5\xdd\x9b\xf68\x80\n(\x18\n\xdd.J`b\x91\x92h<\xfe9\x9c\x93\xe6-\x00\xb1\x12Gg\x06H6\x92\x90\xdf\xc6\xc7\x9e\xe8+\x1c\xbd\x10T#\x92\xb0\x84\x87\x88\x92\xb8x\x9aO\x8f\xc8\xce\x8b\x97syN\x9c\xfa=\x87\xa4\xeb,I\x00#J)\xe1]\x0eo\x00\x1fK\xef>[*\xe1\xbaY\x8e\xd3\xf5\xe0\x17\x168C\x16&k\xbc\x8d\xa0\xe4^\xdb\xaa\xd7\x85\x8a`\xfaS\x08\xe9\xe8!\xd5\x1c\x11W\xb3\xd0m_\xa8^I\xde\xbe\xb5)\xa6w\xa1\x8c+\x8a\xbc\x95\x91\xf6)I\x14\xdd[\xc1P\xdb\xe1\xef\xa7\xb8\x17\xe8\xdb}*\xa6Z\x1c\x878a\xec\xdf8{\xcdv1\xb2\xc6\xa0h\r\xaan\xac\x8e\xb9_\x1e\xda\x0eF\xc9\x8e\xa9\x8d\x9b\xf0\xe6,:\xdd\xa9\xbb\x95\x86!@\xdeyK\xc3Cb@\x82k\xf2\x12\xb2\x947\xb7mw\xb8\xe2\x93\x8a6c]\x98\x94lh\xde\x90\xff\xe1O\xfd*\x11E\xc8\x9f4\xc3\x88\x82A\x1ei\x03C\x93\xaf\xeb\xd4\xe6+?\xc5\xc3\x9c\xf1"X\x1c\x00/DH\x87\x8f;\x8d\xf3\xb4\xdf\x07\xe2l2\\\x00\x02\xa3\x18\xe1\x97\xefv\x06\xbb\x80\xcaw\xf0J:\x1e\xe7\xea6\xf8\x8eRc\x0e:\xc0\xa6\xba\xc6\xb0\xbcQRF\x8d-\xe2\x0c\xc2\xa4\x0e\xc7\xad\xff\x00l\x19\xf0\xefYR+\x0b\x11B40\x05c\xc2\xf2\xd9cM\x02\xdeH\x9a3\xacL3\x1c\xd8\x13\x1ce\xfd\xd9\xc1Mb\xbb\x97z\xbdH\xd3D\xbb%2\xa2\xf7\x8e\xcd\xfc\x89\xfeCz\x1e\xfeV\xd8i:I\x10d\x8e\x13A\x16\x1aP7y\x9e\x88m"V\xa7>\xb0\xb8nN\xe3\xa9z\xc3v\xaf\\\x95\x9a\xfc>\xee\x89\xd6\x0e\xc8\xfe\x825\xa0\x85\xaf\x1b\x94\xd2\xe4\x19N\xab\x1a\x01\xeb\x8c\x1a\x01:D\x9a@#T[/\xdc\xf9L1\xedUpYp]Km\x19\x1f\x95J\xe8\x16\x04\x98\xc3\x88h\x81\xf9\xd4\xcb2\xbd\xc5\xcbpS^\xca\x9a\xd9\xdbp!c\x06@$\xed^+G\x08>\xf9m\xfeY\xfd\xb5\xf5\xdc\xdc\xd9\x05N\x90\x10\xc7m\r@\x1b\x9b\x10~\xc7&\xc1\r\xa6\xcc\xc8F\x89\x9d\x16\xa4\x8b\xa1zzW\x1798\xdc\x91\xc5\x0b\xf5r\x03\x14]\x91\xea\xc0\x85\x1d\x1d\x89Z\xcaH.\xab_\xc8+\xadAE\xd7\xdb\xb1XE\xd9\x91\x1f\xeaw\xff\xdb\xc1\x18,-k\x85DC\x87D\n\xf9\xf9\x01\x94\xf5\x18\xd7\xf0G2\x0b\xc5\xcf\xce\xf0G\xe0\xef\x846\xfeD8\x15H\x0ci\x97\xdc\x10\xbd0\x11\xaf}\xb5\xf4\xe7\xb8!R\x99W\xd8\xaa\xdf\xbbD\xcb\xb7S\x98\xe0\xcb\xc3\xf9a\xbd3*$;\x0f\xc6O\xb3\x90\xe5\xa8\xb4`\x03\x1f\xd1\x10>\xfa\xc3\x14\x1b\x80\x1f\x0e-\xb6\xbf\xa1\x17\xb7\xa7-\xc8f\xa7\xa8\xbd\xd2\xe4\x11\x88\xbf\x9d\x1f\xcc_@\x12\xf2\x90\xef{\xde\xa1"\x82\xe4W?\xfe\xb6_\xebU\xea\x94.\xe9tz\xb3\xab&\xbe\xe6\xb8\x06\xc2\xfe\x85\x11\n\xc2\xf9e\x7fB\x82\xb0{y\x81\xd7\xbc\xef6^\r\x1a\x1e\xc1!6\x93\x08!&\x9eBI\x93F\xe5\x0b\xfc9~\x1c\xacZ#h>\x86A\xe9\xf2\x882\x19V\xcf\xed\x88{u\xec\xb7&\x0c#:rR~\n\x06\xa2WU\xa1\x06rKs!D\xf7\xee\xc00\x1d\x16\x88a\x16\x81b\x11\x94\x84\xdc\x93\x97\xeb\xd1\xad\xc2\xc5\x0f\x0f\xc8^\x03t|\xf9\x970\xe8\x16\xa8^\xc0\xc0YD\xfb\x8bQB+\xfd\x964\x9b\x93b\x8c\x03T\xa14\x1b\x1e\xdcd\xe43I2Q\tHD\xe3\xd0\xd5\xc4)\\\xca]\xa0\xab\x14\xb7\x1a\xf1\r\xaf\xfdU`\xa8\xe2\xedvo;h\xc5c\xb7\xf0\x87\x0c#\xf5\x9fv\xa2U\xe3\xa6"\xd8\xd62\xa2\x9c\xbd\xdb\xd4\x10\xc9\xe4\xbd`N\xbc]\xf7\xfe\xdcD\x97\x7f*x\x17>Z8KLm\xe8\xa19/\x95/\xd2\x8cr\xa8\xdd\xc8\x12E\x08%\x9a\x9fG\xc2/\x97m\x00\xee\xc9\x07j\xda\xbe\x05\xa0\xbc\xb3\x904\xc4E\x12\xcdU\'mT\xad3\xeb\xcd"ukt>\x89\xb0p\x8eQW\xe5aY<\xa5\xe4"$7\xcaS$\xdd!\xc2p]\xf7\xa4:\xd2\x86\xe2;\xda \xbf\xbf\xd0\xac\x00Z\xaay\x87>X\xa1\xf0r\x81\xd1&\xefa%Y\xc6\xe2a\xbc\xcaHc\x8e\xac^\xac\x96\x9a?q\x95\x1f\xd5\x13\x96\xefp\xc1\x95bk1\x02\xda\x86\x03\xe7\x88\xdd\xc9\xf3nOu\x1fHB\xf3W2\xee\x107\x13\xfc\xa9X[\xd4\xfe\xa8\x9e\xa1\xe1)\xd2q\xfd\xb6\x82q\xe6\xb4\x1ctJ\x9c\x19|\x8a\x8d\x07\x85\xda\xb6\x9b\xb4\xab{H#e\xf1\x95\xabg\xfb\x00\xde}&\xfc\xf0H@9\xf9\xe6\x16\xfc\x1c\xae\x99\xbb\x7f\x9a1\xb4\x0e\x92\xd5!\xd9G\x0fX}\xeaW@zr\xaa7\xc5\xd2\xb2\xab6g\xb4\x06/\xc3\xf2\x86\x0b,\xa9\x96\xfe\x1d\xdf\x97\xa1\xfc7\x8c2\xaa$\'$\x80(\x9e\x8a\x0c<\x05\x18\x08j\xc6\xd4\xdal\xd9G:\xee%\x9a\x04\x1c\xa7\x8e4\xeb\x94\x9f\x97\xbf\xc4I\xd9{\xf3gW\x9e\xaf\xf5\xcaDqpL8\x9a\x9b;\r\xcf\x88O\x8e\xc8\x90{_\xaa\xc9k\x86\xd2\xd4\n\xc4\xf0\xfd\xaf[\x95\x08ld\x99\xf2\xdd\x7f\xece\xb8\xb3\xaf\xee\xa5t\x85S\xe9\x8bm`\xbcz\xc7\xf1\x02\xaa\x84Y\xda\xee\x8d\x97\x19\xb8\xd3\xa6)\xf2\xdc\xe9\x8a\x1c\x80\xfe\xc6\t/GL&nB\xa2\xbc\xbaz(\x0e\x04\xeb-\xbe\x92]B\xa3vJf\x7f\x8fA\x07\xfb\xaf\xa6\xad\xe0\x97\xde\xf3\x13L;\xd4{\x12\x81\x8e,\x83\xe7\xf5\xd2\xf0H\xe9Jv\xb2C\xd3h^\xb4c\xd0\xc0g\'\xf2\xac\x07\xb8\xa9ax\xae_i:\xca\xbf\xb6>\x9c\xa8Z\x87\xd0\x9d\x1dM\x1b\r\xa2U\xd4\xe3\xa2\x01\xcb\x12\xa7l\xdf\xe9\x8b\xf1\x0c\x86^\x12\xdabW\\\xf2u\x13\x8f\xf7\xd7\x96q\xc8\xa8\x1f0R\xe2\x16N\xa6cZj\xba\x86\xa2n\x83k\rU%\xb5o\xf4h\x94\xa3\x92+$\x9f\xec\xf0\xff\x92\x12\xfax\xbf\'q\r\xeaD\xb0\xfb\x95\x06\x195\xfe\x1fI\xab\xac\x11\xe8\xc3\x8af\x1b%vd\xda_\xec8|\x12\x9c\xc7\x83\xca\xb4\xe2\x05\x827T\xafXWt\xf46\x9b\xf3\xadO\xb6nc\x1c\xfa\x90fb\xc8\xf5\xc5\xff\xe7\x92\x1f\xbf*\x85^\xfdH\x17}Z\x9c \x00\x0cZ\xa4{\xe3\x03ma\xba\x9c\x1dV\x18\xd3\x9bP\xdche\xaa\xdc\x98\xfb\xads\x03\xd9\xfc\xb3t\x97_\xd7\x08\xef\xc4\xa1v\xa6n\t\x18B)\x9d\xec$b^\x1b\xaf\xa1\xe8)\xfc\xaam1\xa3\xb4A\x1f\xb5\xfanu\xcc\x1b\xfep\xfd\x81\xdd\x8aB\xf0\x9eY\xadM\xb7/\x19\xc4UL\xab\n&(I$\xa1\xb0`\xa0>\x88\xcb\xce\xacMzLT\x9c\xacD\xf5\xf0e\xa4\xdf\x80\x0c\xdf\x977\xbd_X\x06\xe5h\x01\xbf\xf7\xdf\r\x0cEm\xedp\x9a\xe2}<\xeb\x9b\x99\x8a}\x19\xfa\x15?\x8dt]%\xd0\x97\x15\xc7\xbfp[\x9e8\xe9~\t\xae\xdf\t\x96\x82q\xde\x13J\x95\xdb\x03iA\xfe\xc0~cCc\xbb\x8e\xd5S\x93s\xd31?N\x7f0\xb1\x1e\x98\xf9\xe5\xa1M4\xaf#\x9b\x10\x92\xae)\xf1\xe9e\xdf\r\xab\xfd\x12Z\x1d\xa8s\xd7*X\x97\xc3w\xa8\xb6\xd9h\xf2hi\xde\x16\xa3`\x7f\x03f\xa4d~g\x04x4\x94\xfb\xdbo8Z\x08Y\x1d\xe6{7\xc0\x85\xfa\x0c\xcbT\xa2\xfa\xa2\x8f\xc6\xda\x1a|\xe1\xb2Q|\xd3*\x08;\xe5U\xa9\xa8m\x91\xf4\xad\xdeB\xc8hDtS\x00\xba\xb5\xf5\x1588\xea\xdd/\x0f\x16\xbdW\x91\xe8\xe6\x1a\xa2,c\xd6z\x9fS.\x0e\xbe.\xec%\x8e\x89\xcd&\xa4\xae\xb1\xc3\xcc\xfb\xe0\x07/\\\xbb\xed2[J\x90\xe6\xacy\x9d\xff\x9aiUL\xc8R\'\x84\t\x85\xb8.\x1a\xdf\x1f\x97\xa8\x8a\x90\xd4\xfb\xe5V\x0eZ\xc2~\xc7\x7f\xc7\x1b\x1f\x9e\x1e\x811\xb1-\xc5\xd3\xa9t\xae\xc4\xb2\xfe\xc2\xc6\x1b5\x19\x1c\xa3$\xa7$Ov\xdd\xb1\x14p\x02\xebY\x0cT\x02T\x85\xfd\xd6\xe7\xc6\x9a\x88\xe2\n(\x13m\xc6\x8d\xe9\xad\x11\x12}\x87z\x99\xfd{\xff\xa5\xd6\xe8\x0b\xc2Q\t\xe4\xb2\x14\xb9\x85\x17\xea\x1dF\x12\x94\x03\xb1\xc4\xaf\xdb=\x0f\x7f\xc3g\x95k\xf6\t@U\xa2\xcf\xab\x82k\xf6(\xc2\x8cf"\xe6\x16a\x13\xfd\x00\\\xcb\xbb\xa9\xe6*\xfc\xddD\xa8\x10\xb7L.wr\xad\x9e\x92_>#\x1f}\n1C\xe9\x18\x16\'\xe7~`\x8fFv\x16\xe1\x0b<\xbd\xba\x87]\xeb\xca\x98\x1c\x02#\x078a\x8a\x87\n\xd7\xc6P(M\x8eHv1\xd7\\\xc3\xd5\xd0\xf2 \xbf\xf9J\xc0@1\xfa\'\xb1\x0c\x03G3\x9ag\xdc\xdcP\x81\x1e\x06\x83\xe96\xc3!\xfbi\x84D\x98\xd7\x96\xc6P:\xd1),\xf8\x07B\xbbC\x0c8\xa4\xc1\x11\xf2\x0fK\x8a\xc7\x87\x15\n\xed$\xadKC\xf1D\xecy\xef\xa0\xc0 \xb0\xf5y\xd3\xc5\xdb\x94\xa5fp~\xff\xa5\xeb\x1d\xa8\xa3Az\xc1\x04\xede\xab\x06\xdc\x9fx\xab-\xaf\x9a\xce\xce2\xe1\xf7\xb9\x01\xe6\xe1\x9aP\xcbev\x13\xbb\x95AC\x95\xb3TxM\x80B\xad\x8a\xed\x05\x08\xc1\x14\x80\xb3U\r5o8a\x88\xef\xd2\xf2?/y\x10Mci\x9a\x0b.b\xc6oG\n\xc8\xae\x960\x85\xd0`\x7f\xca]J\xbc\xdc"\x036\xb3\xd5\xb5+\xd0\x8aY\xc8\x0e\xb7\x1ct\x1dy\xe9\xe2\x03Rn\xef\xee\x92\x7fq(/\x899L\x9e\xb8\x16\x19C\xb7\xa6\x9bz\xda\xc5\xb5\xb3\xe2\xdb\xbb\xbc"1(\x0b\x1c\x0f\xe0L\x81&\xa4\xe2}\x84\xec\xa6\xb5\xec\xaa\xc2\xf4\xb5\x1d\xc6v\x9f\xdfv\xf4\x82\x80$mt\xcb\xfe\xfc\xb4T\x1c\xd8\xe9\xe0\xea4j)\x07\xe2\xed\xbbi)\xd6>f\x10\xe5r\x1d\x0e\x10L\xb0\xc0PB\xda\xe2\xa4hZC\xef`\xb6\xba(.\xc7\xdff\xff\x8a\t\xd1\xa8\xc3\xd9\x96\x9f!\x87\xcf\xa2\x86\xbc\xa9\xc5\x01i\xb1\x04\xe1\xf0\xff\xb7\xa6|w\x10\x1a\xe0_\x079B\xa9c\x01<\xf6\x91:y<\xf9`\xe1?Y\t\xa8X\xbck\x94f$\x19|\xb0\r\xad*\xfa!\x94\xda\xa2\xca@\xa1\x064\xe1\xa4+\xda]^K\x1a\\V\xb2Ib\x11\xde\xfczh\xc0d\xd7\xd0t\x8d\xd4\xdeK\xbck\x8e4\x13\xfe\xf5(W\x85l\x8e\x98-\x91)\x1d\x7f\xd1\xe9"\xa7-H\xc8xx34zf\xf9\xafs\x18\xfc\x946{@\xd4\xa0(\x17*\xabBX!\xafbP\xd6\xf9\x8cx\x14f\xddg\x8b\xa6\xd5\xe6\x03\xed\x03\xf1\xb2\x03\xdcW\xec#U\xcb\x0c*\xefXy\x9d\x98so8\xd4\xe4\n\xdc\xcd,\x15L~\xf3\x8ee\x9es\xb2m\x8a\xd7\xf8\th\xd79\x13K\xc2\xd5\xbanP\xafD\xcbW\xa8$\xaeFw\xaem\xc2\xa0![HQ\xac\x13\xbd\x89}w\xa3\xad\xb7h\x08\xd3\x14\x89\xe4Mg\xb1P\x9d&\xcc\xf0%\xa4\xfaZ\x12d\xd0l\xe2\x94\\\xb0_6T-\x0c\xfd\xad\x8d\xff\xf8\xc9\x86\x1c^\xd5#\xde\x1b\x82\xdb\xc3k\xe6\xcf\xe7\x12\xeda\x0f\x1c\xba\xcd4&\xe0\x94\x07\xa8\xa4w\xc1\xe4i\xae\xaa\x91\xe7,B1\x8e\x063\x062\x9d\xa6\xb8\xc6\xb6\x04v\x82#*\xa4%\xcc\xb5\xf8_b\xc2\x98k\x99\xe5l\x91\x12\xf0\x03\xf6u\xb9d\xdd\xa7}F\xc4\x82z\x97\x01\x0e\xb8\x10rt\x99\xa9\xe4l\xd9g\xeb\x97\x8a\x95\xcdV\x14\xdf\xe2\xc4]\x0b\xfdq\x84\x9d\xe1\x1c\xfc\xd7\x169\xf3\xbb\x96\xb9\xa7\xe1\xbf\x0e\x85xx\xdcq5\x01$\xe0\x02\x1c\x1e\xa8\xf2Rt\xf2\x97\xae\xab\xe0Pw\x90/A\xa4V\xe5z>\x99\x81e\x8d\x8e+\x9e\xbe\xb7l V\xbd5.\xc6=\x10<\xf2\x00\x0b\x9b\xa1g\x8d#\x80!\x1b\xb4,\x97wZ\xe3\xaf\x9b\x8d\x0e\x1c0\xfd\xf5\xdb\xa0\xec\x99\x98gaqm\xccw\xe6\xbf^)+h\x9bQ\xb4sXf\xe6z\xce\xd4\x86!ZwI\xe5\xbd\xd7\xe8\xcc\xae\x1c\xca\x9f\xe5D\x0c\xb2\'\x8e)\xee$\xafL\xeeC\xdcnF\xa2\xfa\xa0\xf2\x98\xba\xb4\xa4\x0e\xdb;\xce\xa5\x08_T\x98z\x86\xb3\x9fk\xfe\xd1\x0bc\xb3c\xd2\xe8J;B$]\x9eJ\xcf\xcb\x9a\x93A\x8cO\x95\xf7\x88\xa19\x12\xcbz$"\x9c\xbfP\xfe\xb6\xb3\xc5D\x1b\x1b\xcbJ\xae~!\xd9X&^\x1bS\xbe\x8b\xf9\xc6\xf5\xee\xc3/\xb8|\xdag\xa5x+\xac\xe7x\x99\xa5<E\xe1\xa23\x98\xe9|\x81\xfc\x15\xe9Y\xd8\xa6cg\r\xb0\x92\xebM\xea\x88\x83\xf9\xacy:\xac(\x81\x9e_A\x99\xc3\xcb9\xd6L\xce\xe8r\xd0\xdf\x01\xbc\tB\x9e\xe2\xaf]\x9d\xfcN\x9a\'\x8a\xd1y\xe4\x8dt5\xe9C3I\xadx\xe9\xa0a\xba2a\xdet\xbbk\\\xed\x12\x1bY\xe0\x8dwy\xe6\xe7I\xf8\x97@b\x81\x12\xee\xa1\xd7\xcc9,\x84\xa8\r|h\xaaD*p>\xd5\xea\x0e{\xb1\xd0\xc7\x07\xae\xe6\x0e\'\xaf\xdf\xf7\x18\x1f\xc3\xfd\xdf$n\x1d\xac\x13\xf0\x95\xd9\x86\xd7\x8d\xd9C}=(#jS\x96\x82\xb6)U\xe5\xe2]7d\xfc\xd4\xdc`\xca\x8e\xef\xbeJ%\xea5y\xfa\x9f4\xddr-\xb2x\xd9\xdf\xf9\xc2\xf0R\xe95\x16\xc0\xcc\xb1-\xaaR\xd2Qz\x10\x82\xf4\x97r\x81\xfa\xfd0\xa0b\x14\x14\x14\xb2\xea\x9d\xc8k\xaf\xbe4\x95\x0e#\x1a\x8f\x90\xc1\x9e\x94c&+i!\x96\xe5X\x0f\xf8\x02\xc1\xc8\xf1\xdc\x88\xd1c\xd9\xc0T\xe1\r\x88y\x00\x83\xb8\xfa\xdd\xbc\x9d\xf4^\xe6\x9fe\tx\x8c\x08\x98h\xa0\x05\x98\xd7,9B5\x93G\xe4\xe0\xebp\x1b\xf8\xc2\xc4\xc2\x1b:\xf5\xf0\xcd\x85\x87/\xb3\x8e\xe3j\xf0a3|}\xa8\x0f\xc6\xaeF\x04BK\x94>\xb9\xe1p>q\x03\x08\x9a7\xe3\xac\x14t\xa7\x8d\xbf\xecSh\x01\xbd!\x83\xaa\x84\xe7X\x14\x0c\xd7r\xa1y\xae\x98\x9a\xecU7\x1b\xd1\xcb\xbc\xa5\xecc\xc8\x86\xd9OG\xa6;\xee\xb2\xd6\xafft\x0fn\x9e~\x15\xd7\xaaS>\xe8\x9e\x1d\x97\x9b\xf8\xef!\xf1\x909\xe9Q\xe7\xb7\xf0\xb280<\xa7\x14(\x88\xd6Q\n\xdc\xef1\xaag\xb2S?t\xc7\x84%Q\x03_\x06^l\x98\xff\xb5\xd0(\x03\xa6D\xe3\xb1\x04=\xccJ\xc4\xe8\xf7j[[Et\xaeP\xdd\xa0z~Q\x10i_T\xe0h\x0f\xd1\xfe\xa8\xca^\xb6\xafd\x10\xcf\xdc3{\xdd\x1b\xa7\xba\x82\x12M\x17sW\xc0\xacU\xd8r\x825\x84W5z\xba\xa7K^\x93e\xbd*\'LXE\xf8CcD\x88\x03\xa0VZ\xc7\xa2\x10\xb0\x85\xb0\xb6\x19T#c\xbeu\n\xdcb\x8f\xaa\x88x,\x06\xa92\x12\xd1Ul\xb5@\xdb<6\xb2/I\xa1\xa1\xa3\xd5}\xa0\xf3?\x1f\xd2.\x14\xd3l\xba\x84\xbe\xac\x14\xf4m\xa4W\xf3\xd9\xf9\xd5(\xf5\xe1\xda\xfbG\x9d\x08\xe3y;\x0e\xd2G\xeaW\xa0:\xc1\xf79A\xd9\xfc\x16\xe0{\x91\xb2\x17\x04\xab\xda:\xee\xcc\xf2hDq\xe0\xc3\xc0\xb9\xbc\xcf 8\xf5\xba\xa9\xdb\'a\xe2\x92\xd7\xcf\xd5&\x89<\xeb\xa4\xe80W\x1b\xd0\xcf\xa7\x0b\xcd\xad\x10\xfac\xfc\x9f<\x16lA\x9f\xe9\xc9&\x12\xb8H\x89\x16\xc5M<\\\xb3q\xf6\x8e\'{p\x8b\xad\x94r\x17\x81\xfe\x91e\x8csN\r\x93\xd3\xb4\x1c\x82\x9a\xd2;,r7\xd9\xd9\xd2b\x03\x10\x14"\x84-F\xf0\x0f\x14%\xedD\x9a\x120\xe5\x897\xdb\x00^b\xa06\x8e\x0b\xcc=Y\x83,!\xce\xc3\x9aP/\'\xfeT\x97c\x11\xf1\xb3*E\xf6\xbf\xf42\x04\x05f \xc1\xc0\x98\xdbL\x83Y\x96w\xcf\x04J$S:e^/@\xcc\xe5A\xdd:\xed\x8fx\x9fx6\x8a\x80\xb7h\x01\xf5\xc2n\x90\x83\xb2\x8a\n\xa1\xc5\xdd\x80\x06G\xb8\x9d\x1f<\xe3\x93qK\'\xb8\x9d8E\xc2#\xd5_\xfd^\r\xd9\x1c:\xda\xcb\x08{E\xf0^;\xc1\x9fz\x1d\x18q|\xc8u\xfc_\xd7\xbf?\xa8\x85\xeeW.\x03\xf5\xb7v\x86\xff\x1c4r\xd0\xba\xc8\xa21\xdfh\xa5\xcefX~F|%\x83\x85\xe7\x928\x9fG\x10\x9byF\xd3\x05\x9el}\xd2\xb5\xac\xd3\xe1\xfb\x18\xb8\x9b/\xde\x9e\xbc\xa0<\x8d\xefz5L\xbe\xba\x1d\x0bOU\xe1\x85{\xbb\xa1\xbd\x1d&H\x8a\x994\xe0e3|\x95\x99\xc1]\xad\xfc\x0b\xc4\xdcZ\xbck\xc3\x8c\xa0\xbc\xeb\xac\x99\x01H\xa4\xe5M\xf1\xa3\xe1Y\xb4>0x\x8b\xd6\xd6e\xedh"\x0b|\\Q\xf4q\xb9m\x99\xd1a\xa4\xb9*\xe5\x9a\x7f\x14\xb2\x1c\xbbH\xac\xb0\xafnv\x8cO\xb7AL\xefz)\xeb\x1a\xfcf\xbe{\xfc\xad}S2v\xf8\x15\xf19\x7fX\xe8\xe7\xea\xe8y\xc3N\xf4\xc8\n\xe83yB\xfa\xb6S\x99V\x84\xe0]\x1dR\xde\xedR\x93\xa1\xd7\xf6d\xfe\x1f\xdfn\x1b\xd18\xe1w\xf2\x87\xcds@\xd7N\xab]hL\xdc\x93\x85\xab\xfb-\xdd\xf7\xc4\x05\x14\x1a5\xaa\x07\xa4\x90\xfa\\\x88[8\xad\xb3\xff\x93\x15[\xebc\xdd^\x98\xe8\x8b\xf1\x06\xc3\xf85\x8b\xac\xa4\\[\xce\x95\x19\x0e\xde\x19^\x14\x06\xf3\xfd\xc8t\xa3\xc9<\x96\xb2g\xf5(\xff\xf4\xa1\x82\x1f1o\xdc&oj\xbb\x0b\xca\x96i.f]Y\xe0\xe2u\xd2\x8a\x8ci\xac\x06\x0f\x9b\x8f\xd9;\x86\xd9Y\x0e\xbf,xC\xf4\xe9\x8ab\x10\x08K\xe3\x01\xc2\xe3\xb9\x1f\xb6\x95,\x84\xec\xa8\x17x\xea5|K\x07\x96\x84\xe5\xd2\xc2"u\xe8g\xdc\x82\xf9\x05\x10\xc19\x05\x05\x9e \xa5_\x1dqe;\xbb\xb4\xa0>ah\xb8\xa4\xeb\nR\x9a\x8aQ\xd7,\xf16c\xb6dq\xed`\xaa\xba_\x94\xfe\xf7@\x90\x197~<\x1c\xcez\xe2\xec\x98\xf0B\xbb\xf6}\xbd\xdd\x87uf\x95B\xac\xdd#\x08\xc6m\xdb\x96itp&\x81 \xcdvp\x01\xd7T\xb0\x03\x07\xb1\xcc\xc2\xd7\x17l\xc6\xf1\xe5s1\xe6\x96\x11r\xd2n\xa7}m\x9c\xab\xa4\'\xb6PH\x93\xee*\xc4bZ\x81\x9e\x18\x87$\xccB@\xadx\x80\xa4^\xa1\x1b\xf0\x1a\xac^5r0\x11)4\xe5\x0bq\xe5\xe7:\xfcp\xe7\x96\x04.\xdc5\xed\xd6\tXQ1\x1c\x0e\xf9!\x8f,9\xbc\xb8\x10\x98}\x14.\xcfXk\xa1V\xfd\xee\xff\xd7\xfb\x8aFt\xa7#g0`n"\xd9p\x819\xd7Lh)=\x86\xa6\xc5\xcb\xf4\x16\xe4\xb0k\xd6\x83t-\x1a\xc1\x94\x9d\xe8\x9b\xf7\x05\x15\xd0\xc7\x91\xbc\x92\xa8k\xb4\xd2 *\x9d\xe3F\xc8\xea*\x08\xed\x92\x91\x11M\x80E!\xba\x9a-$\xb6\xe6\'\x16\x0c\x88hT;\xb6\x99\xa6t\x0fj\xb3\'{\x86@\xa7\xb2\xb4\xcc\xece\xf1\xdb\xf3\x99\x1dzy\xcaY\xe8\x9a\xd2\x8b\\l\xb9oI\xe7\x99\xa4\xf0\x87\x93\x89FO<\x82\x1c].}\xd0F[\xcd\xfe\x8f\x11\xda\xf0;\xa5v\x12;\x87-7\xd2\xdf\xbcm\xb4\xc27P},t\xd4\x08\xa6\x1f2H\x93\xd1]j}\xc6\xfeRK\x8d\xbc\'\x01\xaa\x97\xe7\x0c\x17\xc7\xd2\xa8\xd7f\x9cp \xbf\x98@\x93"\xfa\xa2\xa5\x9f\x17X\xf9B\x0fh\x91\xc0\xf5\xaaH\xc2\xbb\xf6\xd5\xdb\x10G\xa3 \x95v\'\x03\r\x93\xb5&)&\x89\x8b\xa2\x1b\xd9_\x88Y\x1eFv)\xe7c\x05\x98\xb1\xb9V\xc3\\\xd2\x87\r\xae\x1a.l\xa2\xc2\xe3V\xa0\xeeQ^\xe1\xe5(b\xa2\xc0\x18\xfaf7bz\xde\xd7\x00\xa6\xda\xfb?\xe5\xb4\x8d\x12\x14\x92\r\xf9\xf0\xdf\xf4\xeaN\xdfb\xed\xd6\x8ez\xc0w*\xf8\x1fjC\xdcM\x027r\xfa\xee\xe1\xd2\x05\xd7?\xa1\xf1\x82)]=\xb1\xf6A\xa6~\xb2j\x9fy\t\x0f*M\xd7\xc2N>p\x06\x13\xc1a\xf4\xe59\x94\xb6\x05\x98\xcc\xa1\xe9?\xcfL\x05\xb5\x00~!g\x01^\xc9h\xf5\x95\xb9\x0e\xfd\xb80\xaf\'w\xbf\xf2\xa0\x17\xf5L\xd3\x96\xc4\xf4\xda\x9eVE\xb7zc\xc4v95\xd0y\x08\xbe\xf3\x9b\x10\x1b\x96[\xe6\x0fRJ\xdf\x11\xed\x05\x81p\xeb\x9d\xb4\x08_\xf1\x17 \xde\x02\x93\xe2\x9f\xb2\xa8Z1\xf4\xb0N\xbai\xa2\xb7\x896\xb9\xea${!I71\xc2Fh}\xb9\xf4\xef\xafO\xbc\x8fW\xa4;`vm\xfe\x89a\xdeT4=L#\x06\xf2c\xfd\x04>\x984\x98\xb2A\x10\xe5\xb8\x04O\x98o\xaf\xac\x8ey\x8fO7\xee\xc0q\xcdW#b\x9d\x80V\xce.v\xef\xce\x84\\\xf6\x88\xe9\xe3Z\x97\xda\xfe\xde5\x94\xbc\x15\xf4\x8cNHa\xbbb\xdae\x81VV\x83\xed\x81\xb8\xe3=nU\xb1iaT\xd1z\xf0V\x04\xe7e\x00\xfcKv\x1b2\xcb\xc7 n$x\nu\x1d\xb6\xb3@K\xe2\xc7\xb3Z\x98\xd8a\x18\x0cj=}J\xadJ\x89\xd1\x08\xe9%c_\xde2w4\xf4!E\xe6 \xd6\xde\x13\xa6i\xea;\xe8a\xb7\x9c 4\x99\xf9\xdd\xc2\xe1\xef\x98\xba\x94+q\xbd\xfcfB\xfc\x0f\x9c\x05\xfd\xe63\xa0\xa0y\xf5<N \x05fZ\xdc0\xe3ASs\xaf\xed\xac\xa7\xe1\x83M=\x1b`\xf7\xd6o \x89X\xdcV/\xb6w\xf2\xbeB\x11UG\x98\x16\xbe/d\xfe\x8f\x18\x06\x1c\x86\xe3\xe4\xbe5U\xf6\xa1\x11\x1e\xf1\xacdB5l\x0b\xc2\xb0z19\xe5\xfaB\x90I\xc0\x81\xd0\xea\xa0\xc2\xff_K\x93\x11\x1c;\x9e\xe2\xa73x\x80\x0eb\x94\xb6\x9c\xe4\xaf\x83N!\xca\x7f\xf5Bg\xdf\xaa\x185\xab\x93\xa7u\x9e\xd5\x18\x8b\x81\xcf\xc0Fqg\x83\xef\xde.\xe1l\x9c\xad\xc5*3\xb5iweb\x10\xb3\xea\xa2\xe0\x17=?\x8f\xe4\xd9I\xe4\xd4\x1d68\xaa\xba\x80\xfbc>m\xda\xf4Fy3\xd2\xbd\xd0o\x848\xefM\xa4`\xa9\xd2\xf7\x94\xe4\xf8|\x08|\xa1\x99l0\x85\xf5H\xfcF\x8c\xe8\xf6\xe8Aa"I18\x90\xfd\x80\x8by\x18n\x9bZM\xa7\xe3*\xe4\xc4\xcf\xc0`+\xa2\xab\x14#\xf1\xb5\xccL\xde\xd9\xc5;\xeb\xa1\x12q$y\xd0\x0b\xdfV\x0c\x18\xd0Mp\xff\x8c\xa6\xd7A\x97\xc7\x19\x97y\x07\x00\x91\x92\x9e\x8b\xd8=t\xcc\x8f\xca\xa3\x08\xdc5o\x94\x1coN\xd6\xe1\xb9_\xaa\x13\xda\xd2"\x10xr\x12*\x99\x01\xd8\xe9\xe5\xc1\xc1\xe9\xe2\xf9\xbf\x15\x1a0\x83\xa8[\xca\xbf2S\x87V\xed\x12;\ni\x11\x1aQ\x04iHm\xb4\xda8\xd2\xe4@7JKI\xfd\x0bA\xf9_\xcc\xa10BPx:\t\xfdvU= \xb4\x84|\x84\xc9V\xa4\x8e\x84\x1fS\xf0\xc3Aj\xc9T\x14~\xb3|B\x80\xb6C\xbd\xb1\xf0x\x9e5\xa5S;\xffV\xdc\x98\x7f\xc6\xcam>\xca\xb3\x9eV\x91-@\x8f\xda\x86)\xa3\xc4!QeM\xe8\x88R\x12&\\\x93H\x9eV-Z\x9f\x90p\x08\x17\t\x96(\\\x88\x9e\x1c\xf3U>\x8dnUh\xe7\x8e\xc0E\xc1BMl\xe7\xa7\xa7\xb7\xd6`w$\xbd\xd1x\x12\xb3\xb9r\x0cd\x1aPi=\xb9@\xe8\xdb\x1d\xc8\x0f\xb0\xa8\xb3\x84\xc2\xb7\xd6)\xd24\xb1\xaf\x1aiS7\x8a\xb8\xba4\xfcT\xfe\xc9\x05xG3\xf1!~\x8e\n\xa5\xce\x88\xa4,5\xe5\x93\x9f\x13\xf0\xa5e{i(T\xc8\xdb\xd84\xadz\xf6\xe63\xb6\x81\xa3\x19\xb1M\xc6\x86_\x01\xa9?\x85\xab\xdc\xcb\xc5bc\x13\xd3$\xf4\x88I\xeb\xde\xc1\xc9\xce=m\xb93\xeaH8\x85X\xd7~A\xae\xcb\xed#\x8dZ\xa9\x10\xa8q"K\xe6<\xe5}\xcb\xc2\xa6\xd7\xb9r\x82\xdc\x7f.\xd9\xb2Y\xff\r\x8a\xce\xb5\xb4j\xa4\xce`(n{Q\xa4U\xdc\xf1\xe7fyo\x10\xe5\xb7\xc2\xad\xd2_\x9d\xa9\xf5\x17\xbb\x9f\x91{H)\x99\xd3\x96\x17\x1b\xdde\xbcS\x03{\xbe:g6\x8f\xcdC\xe9\xb5.\xe2U\xb7\x1e\x10T\xde\xc2\xd9\xc6]\xb3\xbe\xb5\x003\x02e0\td8\x07\xfaV\xb2\xec\x81\xdal\xd2\xaf\xa7S\x0c\\\xb1\xaa>WSD5K\x119\x81\x98\x19=3\x00\x1cm>\xf8\xc0Ssp\x89\xbe\t\xb4$>\x04Q=\x14\x8c\xf2\x9b\xe8&L\xd6\x00\x0f\xcf\x98h\xd4\xfb\x05\'\x83\xe1\xf0\\\xd4\xba\x81Sq\x1bK\xf1\xbc\xed\xb4\x0f\xad<\xcd\xb9UW\xab\xcd\xe4\x9d\x99;]g8\xc3o(\xb4\xf7\xc7\xaa\x8d\xc5]\xd8\x82`\xebf\xfb\xb5t50R\x03\xd5h\x89\xfe\xbb\xf3O\xb0\xd4\x81\xa4?``\xa1v\xb2E\xff\x82\xb8\xa2y\x00\xfd\xdd\xa5\xd0\xa0\xea^?\xc0\xc6\x8b\x9f\x0c\xea\xa3$\xfe\xa2\xb1&\xa6V\x06s\x964#\x9f\x1d\xfb_v\xdd\x1dm\xf6\x0c\x91\xb4\x16\xf7v\xa5\x18!\x15Nv\x08\x06\xfbb\xe4\x113)\xd5\xd6\xffz\xe2:\xe8\xc2\xef\x13q\xb9\x7fQkP\xec\x9d\xe6\xd7\x95\xd4*W\x15\x04\x9eN\xa5\xa9E\xb3\x0c\xa3\xb1\xb4g}3\x1fU1\x1fHJ\x02\x01\xec\xecC)\x17\xe6\x97bDd\xae=]\xc3kS\xb3\xa2\xa0\x16\xed\x163wt\x0b~@\xa7u?\xd8\x19T\rM\xb3\tk%\\.l\xde|\xe0$p\xec/5\xf0\xc2\x01t\xae$\xfaa\x85\xc3\xddH*\x06d\x9e\xa4\x06\xd0^\x7f\xed\x8f\xae\xd6J\x07.%\xec\x07+\xaa\xe9\xcd\xec\xda\x8d_\x01\x15\'n\x00Z\x12\x83\xb8\xafB\xe7\x87HOo\xcc\xe4\xbe\x04\xb3\xd4G\xb7\xeb<\xa5\x92\xb1\xc0\xf8\x1b\xda\xb8\xfeI\xa5\xbc\xdeS\x16;]\xa4-fe \x81Vwo\x11\xb4|\x97S+|\xb0y\\^458\\\xcc\xbb\xa0\xcb\xab\xe9\xb8\xf7\xeby\x9f\x0e\xd8r\x97\x9e\xd8\xb1,\x01Q1\xbf\x8f\xcb\x1e\xfd;\x90T\xa4\x91w\xe4\xc4y\xb5/$8Y\\\x89\xf6\xea/sI(*{@p5U\x11^\x91\x14\xd7p8!\xbf\xc1\xe87d\xa5\xe1\xdfe9\xfb\xb4\x94\xf7\xb7\xd3\x1f\xa7\x138\xfd4\xeeE7\r\xc6\x8b:\xfd\x83\x15\xe7}\n5\xe2\xbb\xe2\x93\xdeqo\xea\x96^Y\x9b\xd7\x8a\x89\x9e\xe3\xa0>\xdb\x8c\xf5\xf3\x90\tK\x9a\xa7\xfd\x8f(\x8f<C\xf9h\x92#[\x13=\x06\xe0\x8e\xed\xce}B\xd7\xa2\xfd\xeb\x1c\xa5\xb5\xa5A\xfe\'!\xfbV\xdc\xa1\x13\x96\xa4S\x810B\xc1L\x97N\x19d\xc5X\xa5\xbbR\x97\xf1\xad\x8fT\xac\xdf\xa8$\x19a\x8a\x08SQ7\x8b_\xfeu\x9bI\xd8\xfc/{\xc0\xc7cq\x1a\x93r\xd1\xab0\xffDK\xf8\x81\x19\xb5\xe9\x96^x\x8fW\xe2\xe8s\xe9w\x9e#\xa3(n\xd7\xb0:\x8b\xb9\xb7\xe3\xde\xdf\xc6\x10\xff\x19\x97"\x9de~\xce\xe6\x01\x9b\x81W\xb8}\xc9\xebt\xecO\xd2\xc3\xaabJr\xc5\xa4\x83\xcf\x1c\x84\xa4\xc3Xc\xe3\x8e>\xf44is\x13X\xe5\xf4\xbe\x86\xad\xeaMio\x14\xfe\x14\xf9\xf6\xc0a\x87\xd3\x0b\x82\x8aZ\x15\xe9pG\xb6=d\x18\xeb\xbd\xcdN\xddY5\xee\xd3\x01No\xc8jfp\xe8\x7f\x7f\t\xf5\x05\xaaZ\xe0t,W-)\x0c\xb4\x86qM\xea@\xf2\x17FE\xf3-T\xb1\x98\x06*\xa2\xb3\x03\x11\x0c\x87[\x14\x1c\xf4=\x07\xbd\x9a\xc4\xaa\x86\x9aER\xbewA^\x866W\x85S<A\xb2U5OI\xa4,\x12\x9ba\xe5\xb9\xd7\xe8\x1f\x19\xcah@\x8e\xda\xa9P\n\x10\xb8\xb2\xb3\x98\x1d?r\xc2\x96\xff\xc8n$\x96@-\xd6!"\xaf\x17-\xbe\xa3\xe8\xfb\n$?,m0\x98\x8b\x1d\x97KqL[C\xbd\xd4\xba\x94\xab\xf8\n\xa1\xccB\xcc\x14a\xf23\\](\x00Y\xd7j\xd5\x93\x08\x1c U\x8fP*8\xac\x9d\x02\xaf7\xefL\xca\xc620p0}\x93\xbc,D\xadF\x19g\xc3O\xa8\x1ec\xe0\xd6\xaf\xa5\x85\xe0\xc8\xae\xdarO\xe2\x8e\x01\xbfw\x1aU\xde/\x11\x9b\x95\xa9\xee\xb5\x82!\x13\xb2ox\xfeL0\xc5;f\x03\x01p\xd2\xdd\t\xf7\x95\xfd\xc0}\x12\xa2\xd5\x08\xce\x0c\t\xf7\x0c\xa1\xdcS\x8a\xfe4+\x15a\x13\x83{\x86\x9a\x9f\xfd?\xcfy+\xef\x17\xc8#\x86\x12z\xc3\xcb\x9b\x1e\x96l\xb1\xef\x10#|\x01\x88$\r\xac\xa5\xbad\xa0\xe8v\x00\x8e\x16\xcc\xa3\xec>{H(\xa75\xbdfo\x81W\xe3\xb3\xd4\xe2\xc1\xc3\x7f\xf4\xac\xbf\xf1\x97\x055\xd4\xcb\xda\xbc\xea*\x83\xf7\xeet\xabK?\x1dn\x7fa]\xfe\xbd>\x9f\xc0\x05\xe9\xc8\x8al\xa9\x9b\x1a?\x1fw}\x17\xaf.\xf6g\x06\xd3\x92\r]\xf1\xaf\xdc\txS\xf1\xe8j|\x82w\x96\x19${\'\x06\x7f\xa9-\x872\xbd\x19L\xb1\xdejZ\xf6B\x15\x9f\xb4\x02\x14#\xce\xbe\x01\x01\xa8G\xc6S:X\xc1\x99v\xae\x17uV}\x89\xc4d(ts\x0cE\x14\x9e/\x99\xeb\xab\x9b\xc0CX\\\x8fM\xe7\xa6\xfd\xb7D\xa1\xec\x96:\x828\x81RN\xcfu9\xe0Z<\xbd\x8a\xaf3nL\xf4\xba|\x977\x02\x10\xfb\xa1\x00F\xc9\xdai\xda,\xe5\xdb\x1d\x19\xde\xd3\x1a\xd9m\xe3\xdd\xd8{\x91\xbf\x85\xcdo\xd1\xc2\x931\xbd\xe1\xd8\xb8\x8e/|S\xa5G\n\xb2\x9f;\xe5O\xd8\x87\xf5*\x84\xf1\x1a\x1f\xf8\xf8;\xefR2{\xc6\x10\xfa2\xf3)\x81\x13\x12\xfe\xfb\x1f\xd0\x15\xedv\x88z\xcd\x11\xa6\x13M0\xc6f\xbd\xd3%U\x93\xc8n\rc\x92y\xde\xa9zI\x92<@\x90\xa56\x95Y\xd8\xed\x1a\xf1\xe2\x94$\x1c\xb8\xb5\xff\xd4\xcb\xc6\xebb6\xd4\xd5\xa6\xfe\xe9\xa9=\\\x1e?\xdf\'\xc9\xabQ\xa3`\t]l\t=\xd2/\xd7\x1d6\x948W;\xe7\x1f\x17\x0cR\x84{\xc0\xaaDa\x8et/@\x01\xa6c\x81\xca\xf1\xdbN\xcf\xdf\x18\xfb\xa5P^,\x95\x99\x9d\xe0\xf8F\x1b\xa6J\x8d\xf3\xf7a\xd5o\x87qe\xda\x937G*\xc8\x88]!\xd4\xaa`\x0c\xe1\x97f\xbe\xf8$\xa2Y\xe2\xf3\xccqS\x9b\xd3z\x8c\x84\xb04G\xef\xb0m\xad\xf0\xc85\xafH\\`\xf1\x89\x16\xdf2\x17]\x01r\xed\xf7\xe0\'vvg\x01)<\xd0\xcer`gkm+\xcf\x0eI\xa7N\xcbsy+*\xecI\xc3\xcase\xa9\xf1\xcc6\x80=}\xb4\x19n\x1aC\xb8\x96\xf9{\xcektFK\x8fR\x9d\x84i\x03d\x9cw\x949\xb5\xf7l!i\xe0T<k\xfe\x83=R\xd6%\xcb\xc9\xe8\xb3\\\xe7\x04FTDc\xd8\xbcH\'\xcc"\xf7\xd6\xba\xee=7CO\nd\xde\x14\x1f\xd7\xadv\xa39\x99\xfdc{b\x9f\xa4\xba\x07\x02\xc0M\x85U\xf3\x954w\xf2|\x88\x8b\xf0\xdeX\xd6&\xd2t\xa2\x0b\x96&\xf3\xf4\x15\x167\xe6u\xca1"V*\x85W\xe4\x9af\xf0\x97\xeb\xf6\xdcPT\xbc\x97Zr\xce\xa6\xcf\\Z\x9dB\xd7\xaf\xa2\xaf\xddH\xa1\x15\x07\x18\xa6\x04"w\xdf\xfa\xe8Z0\xf2\xb90\xc1\x01^j\x04\'n\x82.N\xd3\x1b&g?\xd2\xe1\xce\xc8\xe3\x12\xeazy\x19\x82\x8d\xdd?7\xca\x11\xf8\xa3\x1d\x84M\x89Y\x02\xc2\'\xa54\x07\xf8\xbdi\xe4$^3\xfbp\xedh$\xfaE\x12\x12\xc9\xe9m\xb0\xfd7^\x0fZ\xc7\xa4\x08\x85%?B\x9a\xa4x\x18\t\xba\xc8\xc8\xcaT\xb4^\xde\xca\x8a\xe7\xa5\r\xee5G\xdd2\xa84\xac\x1b\x9b\xa9\x96\xba)6\x19\xf1h\xe2/\xe0J\x8c\x98\xb3+\xe3\n\xebv&\xa7\xc8[\xda\x16u\xdaX\xcdH\x8eV\xeb5\x19\xd2G\xab\xdf\xaeW\xa1\xc4\x1c\xeb2\xe5\x0el\xdb\xc6\xd7\x16\xff\x077\xba\xfcI\x12\x8fD\xa5UD%\xd48\xc7\x15W\x84\xa5\tL\xb6Ef\xce\x81(\x8a;\xe0\xd8\x9a\xca\xd9#i\x93\xfdu\xc7[k\'\xb0yS\xfe\xde\x9c\xca\xe9e\x94\xddm\x03.\xb1\x85\xf2\xea\x8d\x9e\xbe\x03)\xf4\xc0\x13\xb2P\xf1\xc9\xe9v\x04\n\x82T\x04$\x8dSO\xfe|\xc6\xf9\x11\xafP\xa7\x94\xac\x8e\xf5v\x00s#\xa2\x80(7i}m\xc4[N\x91n\x1e]\x8d\x93]c;\x02\xdc\x82\xfa\x1e&\x90L\xa7\x7f\xe7\x07\x90\xd8j\x19\x96\xc0\xf65K\x1a]Xd\xc2l\xefd\xec\x0b\xf2c1I\xca7\xc7\x18\xb2/E\xa8`\xe7\xf9\xa3W\xc7\xe63H\xc6\x08\xf1W1jT\xe8aB\xe4\x13\xa8#\x8d/x\xd8\x0f\xbc|\x82h\x18\xcf\x93\xe2\x12\x1cAi\xc9\x9d\x84a\xdb\xb5\xfe\xce{Lk\x8e\xd7OX\xe5\xbey\xd1\x19josj\xf7\x83\x85b\xceJ~xg\xcc\xa7W\x1aNm\xbf1\x88<\xc8M(-\tyI\xfd5\x08\xc6K\xe4C\xe0\x85\xa2\r\n\xb2\xe9\xc5\x028\xf4\xd4\xa6\x02\xf0S\xa4\x00\x84\xc2\xf92C\xb4h\x8e#e6\xde\x89<\x03\x12l}\x11\nB\xb6o\xf2\xd7\x8b\xb3V\xd0\x1a\xc9\xa9\t^\xe19oR\'J\xfb\x97\xaaf\xa8\xdd\xdf\xf1\xb13\x991\x15\xb4\xaa\xb4\x88-e\xafm\xb0\x8a19yE\xe7Y\xad\xc3\xce\xa0\x13\x95\xa8k.$,\xd4C\xf7\x1f\xb2\xe4t\x90|\xa5n=#\xf9\xa9\x1a\xc6\xb6\xac"\x7f\xb1\xed\x83\x0c{\xe8\xd2\xd5\xc4\xe8/\x83?\xc8J=z\xe0 KO^@)\x85\x05\xa8\x13\x8e\x1afj\xbb\xd1\xa1\x9e@\x06\xc1\xb4\x93/A\xf2m\xec3;\xc3^\x90a\xf4\x0b[1\xa2\xc5\x80\x12x\x17\xe5\x86\x80\xe0\\\xdeF\xe4\xa5x\x12\xd4?\x86\xfb\x7f\xea4\'\xac/\x1d\xbf\xf7\xb7M\xb0\x00\xb3\xce\xc9\x1b\x18lEL\xda?R2&}\x86\x87R\xbf\x1a\xbd\xed\xe6$P\x05\x8ak4\xe2\x13\xe3\xa8\xb2x#\xe8\xee\x03\x1c \xa95\x82m\x17\xe4\xaa\xe9\xeay\x93&dk}!\xd7\xe7\xf8\x8al\xd2\x19x&\x8f\xcd\xc56\xe7E\xde\xa7\xbe[\xee\x93zM\xd3\x87Z\xd5\xc3^\xc8Z\x00KyrO\xd9\xbe\x18\xd2\x18\x1d\xc3\x11k\xc7\xd4\'\t$\xe5\x92\x83<\x92R%\xb7XG\xffT\x12\xb2E?E\xaf\xcd\x8d\xf6\xec\x86\x84\xad (\x0f\x85\x90\xe8\x8a\xab\x0f\x8cU\xd0\x83\xf0\xd6W\xebO.l\xef\xc9p!P\xa3\xfd\x11\xbcP\x11\xa4\x89\xfb\x93\xfar\xb3\xc5\xe24\xa7\xcd\x95\x9c\xee\xcf\xa3\xd4\xa1\xc7>\xc7D\xef\xd6P}\xbdMtm\xb7i\xa9t#\x907\x1d\xa2h\xa1\x86\x1cj\xef\xb5r\xd0\x7fwH\x90ii\xca\xfb\x88\xab\xaf\xf6\x9c\x1d\x99Ym\xa6\xfa\xc5\'(\x8b+Gn\xa2\xe5\x84\xd27\xd06\xae\n\xf4]|>t\x87\x89r\x17 \x84%r\xbd\xc6[\xf5\x12\x94\xd2\x83\x8d\x01\xa6\x9b^\xbd\x08O\xa2,|x\x99q\xaf\xc1\xb4\x10\\\x9a\xd5n\x8aa\xf7\xb2\x95\xbe\xcaj]N\xa7\xb7s\x14 \xb6\xec\xfc\xfa2\xd4\x92\x07|\xc4\xef\x89\xd7i\\1\xfb\xc0\xea\x84.pi\xd3\x00\x94v\x84"\x10\x1e\x1f\xa8\xc5\xb5V\xb0\x95\xa8\x07\x0f$h@\xd6^\xae\xeb\xab\x0b\xa3\xa2S\x9a\x97\xf8\x14c \x99k\x90\x91L!\xe7\xa2\xde\xf8\xa61\x07\x19\xb8\x8a\x9f\xc2x\x8c\xfe{\xed\xd7/Kr\xd0\xfa\xd5\x16\x80Z\xf0\x03\xeaLujx4\xc0\xc6wqF\xdd\xbd\x87\xdd\x1e~\x7ftli\xae.\xa0\x1a\xd9%\x80r\xfb471\xcbH\xf5w\xb5\x9b\xbfs\x9b,\xe33]`\xb7/\xc7\xc8\xfd\xe7L\x81\xf4\x00\x1c\xda\xb0\\u\x16Y\x9a\xf1\x99\xe1)\x83\xcdT>\x12\xee\x81\x9c\xd6\xbc\x88\xa4\xe9m\xe47\x91\x9f[p\xe8\xa2*3\x92p\xc72\x98\xc1\x1b\xaf\xb6\t\xad\x15\xfb\xb7|\x85\x97\xa1\xb6\xc4<*\xfe\xbb\xafr\xbf\xfaJ\xca\xbcC\xc6\x968\x19\xc6$\xd3\xdf_\xba\xee`\x04s\xb6b\xf7\xf5r\xd4\xef&\x8b\xeek\xf9\xa86\x92\xe3\xad\x1e\xa6\x17\xa1\x86\xef\xdd\xb9\x80\x1a\xa2o/8\x00\xa8\xc8\x8fQ=T&\x97*\xba\x7f.\xccm9H\xb6\xc8\xc6\x90\xaaP\xe2\x87\xb2A^L;\xf3wSH\xd2\xb7HD/^R\xeac\xd4\xad}"\xf0NNR\xbf6b\x8b}gs\xb8\xc3\x00\xcc`8\xdb\x94n\xa8\xae\xf4\xbeR,\x80\x1e\xa0q\xb03)N\x18\x91-\xa4C|\x0b:]\xf6\x08\xe8&\xaf\xc4\x05\x85\x9e\x13\xd0\xc72Y\x1ebJ\xb8n\x0fc#\x14.\xaa\x02v\x9elv\xb2R\xa0o\xcfiT9\xfb\xe3D\xcd\x87k\x0eE\xe7\xc2\xe6\xac\x00\xf8\xdf\x12\x1a\x10x\xf5F\xdc\xcf\x1d\xcf\xacuZz\x8eQ\xb3\x08\xa5\xa4m#\'\xde\xbbA\xdc\xa2\x80\xe9\x81A\xfa\xceI\x90\xb9\xf4_\x04\xc3\xef}5\xa3\x1e\xc1b\x81\xa8>W\xbc\x90D1~}\xf3\rTd\xfb\xbf\xa29\xf4\xcb\xf8Z\x8a$G\x8b\x83\xc7yB\xfe\xf7\xcb\xa7g\xfc\x90k7\x05\x9aH\x8c8C\xee\xdc\xe0\x9b\xc7\xaeJJ\xde,\xd1\xdca\x81,\xb0\', \xdfux.\xca\xde\xaf\xe2\xf7\xba\xed\xccvH\x877?\x06\xb7\xcb\x06\x96\xc3C\xc3\xc9\xceg\x89\xd5\x0f\x12D6&N[\xa0`n\xcb\xae\x9e\xafL\xfa\x17\x0f\xb5\xcb\x01\'AI\x99?\xb2V~\xb5}\x90\x88\xc2B#\xa4\xfc]\x1f\xe9d6\xe0 \x9e\xbe\x98-K\x8cU\xbd\x10\xb1\x99\x02B.[\x1f|\xd6\xdcd\xb7$aE\x8f\x16\xbb\xd9#\xfe\xf3\x8b\xda\x07\xd1/a\x1b\xf1\xb6[\x8b\xb5\x08j\xd1\x94^^\xea\xe5V\x94T\x0f\x11\x9c\xe1y\x11WV\xe2!\x03\xd7x\xeds\x8b#\xa9K`\xf1\x8c\n\x85\xe3\x00\x92$i\xd0\x0ep\xc8]ma \xb3^<\xb2\x86\rv\xecC\xf1~2\xf7\x0cu\x95Bv\xa69((\xb5p\xd0\xe8\x11I\x14\xdd\x0cz\xde\xc3\xb6.\x8c\xfcPS\x95\xc8\t\xa7\x9d\xd9\xb9\x8d\xae\x1e[\xddz\xec\x13\x19\xfbZJ\xb9\x04\x92f\x98l\xc7J\xadNH\x86\xc5\xbd\xc0\x8a\x98\xbb\x8c\xd9\xcfl\x0c\xf0\x026\xb7%\xe5\x08\xb6\ng\xca\x99fA/\xd4\xe6\x9f\\`b\x06\x04\x93\xe8(6P\x9b\x83\xfeW>\xe7\xad\x15\xab\xeat\xd72\xad\xa5"\xe1\x0b\n\xed\xa7\x9f\x12\xd7~_\xd1\xf6\xachX\x94\x1df\xdc\xa8\x1e\xd6\x1a\xa9\x8e_\xda\x9e\xba\x15\xbdK\xcdh\x94\xbe\xbb\xcc\xb7\x8ex\xbd\x9d\xcd\x114\r#\r9\xe2|B\x12v\xbb\x06\x89u*\x84\xf2\x81\xb9`\x1d\x84!\x194\x85\xc91)t\xbd`\x07\xe6\x87K\x14\x08Db\xd7\xf9\xbb\xb8\x14\xa2\xd4\xdcA\x1f\xddX\x1f\xdc\x19%y(\xf6\xe9\x8e\xe8\xa7\'\x1f/\x99\x90n\xeb\xe9A\x87\x98\x12::\x93\xd3\xcf\x0cq\xb1\xcaT\xce\xd5/\xa1\xc0(Z=>\xd0\x0e\xf4\xa3SR1\xb9\xafz\n(:\\\xa1mU*\xf1\xaeH\xbaB\xf0\xc6\x02u\x85\xce\xfe\xa9-qTy\xffV5\x9d=]\xf7\xd1\xb1\x83e\xe0\xca\xcd\xd8~\x92&\x08\xca\x1dT\xe1\xca(!\x0b\xeb7\xcfk\xe6\x85\x1e\x9b0\xb69\x7fr\xf3\x9a\xa2lx\xb1\xda\xcan\x96\xa8\xbc\x14V\xa0\xd4\x01\xc0F\x98(\xe6\xe90)\xb2y\xa8g\x0e\x9cAR\xfdTS\xf6\xf2m\xd5\xbc\x9ef\xae\xfd\xc0\xdd6W\xd2\x8fd\xe3\xdeT\xafk\xc5\xdb5\x8e\x0coq\xed\x9f\xbdF^\x8b\xd1YLF\x1ci\xa9\x12"\x0f\x05\xd7\xa9\xaap\xb6\x17\x86q\xc9\xcc\xcd\x93\x17m\xb4\xa5`P_{\x17h\x1ev(\x96\n)\t\xd91\x92~\x8d:$XyS?G\x82\xf6\xa50\xa7v&O2\xae\x8d<\x0f\xd1.\xf8\xb0\x88;\xf5\x96\xb3y\x04\x04n\x9c\xf3=\xb9\xf5\xed\xd2S\r\xce\x7fX\xf1\x805\xb1\x0f\x03\xff\xee\x99~,\xf0\xcdtiC\xbf\xc3~O\xaf\xc8\x1d\x84\x99\xb0\x8e\x11\x8f\x81\xac\xf4a\x7f\xff`\xe4\xaf\xb8ar\xcaa\xc2\xc1\xf0Y\xca\xa1!\x8e\xf7{\x85\xa9f\x93\xffe\'[(\xb8\x16\x8e\x87\xca\xb5B=\xa4\xfc1/\x04\xda\xb7j\xf5\x8b\x1e\x9d\x84(\xa8\xf2]\xe95\x1d\xa9\x1b\xcbH\xe3J\x9e\x1f\xa1\xa9\xa9\x9c\x0f\xfe\xb6\x98D\xddc\x1b\xe3\x16\xaa\xda\xacW\xbd\xe4\x9a\xab\x9d\x92\xa4\x9e\xe1:\x85qt\x93B\xdcT%n;\xf4\xd7\xcaV\xd7\xfe\xc5\xe1\x8f\x05\x1c!\x19\x1d\xbe\xa1\xa8\xad\xe9s/\xc5ue\xa7\x8df\xd1K\xfd\xb2Bo\xae\xf1ST\xe2\x1f\xb6\xb2G\xd2;z2O\x84\xc4C\xb3V\xe6s\x1e\xdd\x84\xec \xd4\xd3\x9e#\xd1;O>\x86\x9cz\xd8F\xaa\x07\x99\xfa3s\x8d\xb9%TY\xad\xdc$_\x0b|\xf4$R\x11\x10L\x03\x03dDD(\xbb*;\xd4\x82<\xd6\xe3\x16@}\xc6!\xd3\x91\xda\x87]a7\x0c\xd0\x0c,\xcc\x95p\x84\xbd3\x07\xdd\xf3\xbf\xfesL\x8a\xc9\xea\xdc\xd8,\xca\x8a\x14\x06/\x1d?\x88Q\xd7c\xfe\xac\x91\x02\x08\xd2\x98\xfa\xfe\x0ff\x17\xe0rq\xd6\xc3\x9d\xc1\xdb@\xcd,\xfd\xe6\x8bZq}zo\xfd\xe5\xe5l\x91\x8b\x10.\x08\xeck\xa2\xd4\x13S\xfby\x0fREXe\xd2\x99M\x9cF\xf5\xd6\x84\xa85\n(\x85\xda\x8c\xd9\xac`\xcc\xdd\x84\xc4\xba\xff\xdb\xfe\xd5\xe2\x00\x8f\x9cV@\x98A\xf3\x92\xa7\x99\xd4\xe3\xd0\xce\x97\xd2\x87P\x17\xa7lD~Oh\xd2\x144\x1d\x05\x1e\t:\x885VV\x0c\x96\xb1\xa2@4\xfcI\xfe\xa9\xe0\x98\xe5\xc7\x98\xc6\xd8\xdd\xf7v*\xcb\xab\x96!T\xb39\xba\xd9o\x8dV\xc2X\xa9=%|BG\x15\xe7*X0[\\Kq\xb1\x02d9\xc6\x86\xdcl\xd3\xe3\xff\x1c\xa1\xa3\xa6f-[99\xd9V&\xa8^|O\xf3\xcdNj^n|V\xa4\xdbBh\xfb\xc9BJo}\x82\xa7A\xf6\x19B\xc0\xc2\xc5+\x10`\xb1\xec\xd4Y\xe6\x14\x90\xa4~^\xcd\xdd\x80\xf9\x9c\x8e\xd3\xf2\x80<J]Y\xabi\xab}\x9fk|\x90\xfe\x7f\x90\xe24\xae\x86\x8e\xbc\xe4\xfc(\xbac\xd3Z2H\x1b]S\x936;\xfb\x17l]\x8ea(\xf6\x85e\x13\xda\r\x806\xa6\x91\xb3(\\\xa9w\xf5);%\xd2N\xbf\x8a3\xfa\xf1C`\x8a\xfa\xcf\xbc\xf4\xd8\x8f\x14b\x17\x1e\xd3\xaa\xad\xe1\x9b5\x1dI\xae\x86BWA\x10\xb6\x00\xf5=\xca\xee\x97\x1e\xd0\x90O\x0eK\xe3\x96T\xa9\x12w\xe6\x89\x1d\\1\xe6\xe9X\x8b\xbc\x0e\x06\x06"8\xf2:h\xaf\t\xc8\x1d\x19\xdba\xa6\x04\xfcR\x15\xd1<\x98\xdc}\x92z7\xc4\xe3\x83X\xdb\xcb\xeb\xcd[\xfaM4\xd8\x92\x19\xc5)\x8e\xa8\xbc5\x84\xef_\xa1\x8d\xa6\xe9\x9a\xdc\x0e,R\x90A\xa2\x9f\xac\x88\x1cq\x9beB\xf0\xef\xa0*\xd3 q\xcdz \xc6n<\x1fR\x1d%&\xf4^\xfa\xff\xe1\'\xb3(\xf3\x99\x0c.\xec\xae\x96\x1d\x1a\xe5E\x94\xe9*\xf0iR\xa4-\xaf\x92\xfa\xe16,\x1b\xe5\x13\xf7/\xe5\xb7\xe4\xd0\x89\x7f\x8b\x93jP\x88\xc2\x1e_.\xe9\x8d\xe6\xb0\xb4l\x87edZ\x14Y\xfd8\xed\x17{S&Q\x17\xf5Ft\x1a\xce\xcd\xdd\xead\x06\xfc\x00\x19\r\x11;\xd3\xd4\x8c\xe9\x81\x95\x9f\xc9U\x83C\x1b\\i,\xe3\xf3\xe9\xe6Cm\xe0\xc4\x1fz\x81\x81\xa8g\x1a<\x00M\x97R\x84\x14\x8bP\xf2J\xb3\xc6\x19#\x935\xc4\x95\xafH\xe7\x8e\x84\xcc~=\x92M\xe0\x17\x87\x9eb\x90v\xc3\x94\xd4+h\xaeF\x9d2\x0c\x98\x8f\xebI\xd4\xea;Y-\x80\x94\xad\xaf\x19\xae7\xa1)pD\xbb(\xf3.v\xe9-\xf8S\x15\xf5\xd4\x12\xbd\xaaZ\xff\xd9\xa6\xd6\x1aL\x90\xfbRk4<y\x88sf\x9b\xbd\x12c_\x82\xe4\xac\x04ohkv\x9b\xf8\xe1\xd8\xf7\xee\xa5\x12s=;s\xd3\xaf\x0ctS\x8cr\xc2\x0c\xbd\xbe\x1b\x19F&\x84\xde/%\x8a\x8f\x1fg\x10\xee\xd6\xbf\x9d\xf8\xcc\x8c\xf9#\nut\xee\x9a\xba\xf5')
|
1
|
+
import flask_babel,flask_babelex
|
2
|
+
from hiddifypanel.models import BoolConfig,StrConfig,ConfigEnum,hconfig,ConfigCategory
|
3
|
+
from wtforms.validators import Regexp, ValidationError
|
4
|
+
from flask_babelex import lazy_gettext as _
|
5
|
+
# from flask_babelex import gettext as _
|
6
|
+
import wtforms as wtf
|
7
|
+
from flask_wtf import FlaskForm, CSRFProtect
|
8
|
+
from flask_bootstrap import SwitchField
|
9
|
+
|
10
|
+
from flask_admin.base import expose
|
11
|
+
# from gettext import gettext as _
|
12
|
+
|
13
|
+
|
14
|
+
import re
|
15
|
+
from flask import render_template,current_app, Markup,url_for
|
16
|
+
from hiddifypanel.panel.hiddify import flash
|
17
|
+
from hiddifypanel.models import *
|
18
|
+
from hiddifypanel.panel.database import db
|
19
|
+
from wtforms.fields import *
|
20
|
+
from flask_classful import FlaskView
|
21
|
+
from hiddifypanel.panel import hiddify,hiddify_api,custom_widgets
|
22
|
+
|
23
|
+
class CommercialSettings(FlaskView):
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
def index(self):
|
28
|
+
form=get_config_form()
|
29
|
+
return render_template('config.html',form=form)
|
30
|
+
|
31
|
+
|
32
|
+
def post(self):
|
33
|
+
form=get_config_form()
|
34
|
+
if form.validate_on_submit():
|
35
|
+
|
36
|
+
|
37
|
+
boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
|
38
|
+
bool_types={c.key:'bool' for c in boolconfigs}
|
39
|
+
old_configs=get_hconfigs()
|
40
|
+
for cat,vs in form.data.items():#[c for c in ConfigEnum]:
|
41
|
+
|
42
|
+
if type(vs) is dict:
|
43
|
+
for k,v in vs.items():
|
44
|
+
|
45
|
+
if k in [c for c in ConfigEnum]:
|
46
|
+
#if not k.commercial():continue
|
47
|
+
if k in bool_types:
|
48
|
+
BoolConfig.query.filter(BoolConfig.key==k,BoolConfig.child_id==0).first().value=v
|
49
|
+
else:
|
50
|
+
if "_domain" in k or k in [ConfigEnum.admin_secret]:
|
51
|
+
v=v.lower()
|
52
|
+
if "port" in k:
|
53
|
+
for p in v.split(","):
|
54
|
+
for k2,v2 in vs.items():
|
55
|
+
if "port" in k2 and k!=k2 and p in v2:
|
56
|
+
flash(_("Port is already used! in")+f" {k2} {k}",'error')
|
57
|
+
return render_template('config.html', form=form)
|
58
|
+
if k == ConfigEnum.parent_panel and v!='':
|
59
|
+
# v=(v+"/").replace("/admin",'')
|
60
|
+
v=re.sub("(/admin/.*)","/",v)
|
61
|
+
|
62
|
+
try:
|
63
|
+
if hiddify_api.sync_child_to_parent(v)['status']!=200:
|
64
|
+
flash(_("Can not connect to parent panel!"),'error')
|
65
|
+
return render_template('config.html', form=form)
|
66
|
+
except:
|
67
|
+
flash(_("Can not connect to parent panel!"),'error')
|
68
|
+
return render_template('config.html', form=form)
|
69
|
+
StrConfig.query.filter(StrConfig.key==k,StrConfig.child_id==0).first().value=v
|
70
|
+
|
71
|
+
# print(cat,vs)
|
72
|
+
|
73
|
+
db.session.commit()
|
74
|
+
flask_babel.refresh()
|
75
|
+
flask_babelex.refresh()
|
76
|
+
|
77
|
+
|
78
|
+
from hiddifypanel.panel.commercial.telegrambot import register_bot
|
79
|
+
register_bot()
|
80
|
+
if hconfig(ConfigEnum.parent_panel):
|
81
|
+
hiddify_api.sync_child_to_parent()
|
82
|
+
reset_action=hiddify.check_need_reset(old_configs)
|
83
|
+
if reset_action:
|
84
|
+
return reset_action
|
85
|
+
|
86
|
+
if old_configs[ConfigEnum.admin_lang]!=hconfig(ConfigEnum.admin_lang):
|
87
|
+
form=get_config_form()
|
88
|
+
return render_template('config.html', form=form)
|
89
|
+
flash(_('config.validation-error'), 'danger')
|
90
|
+
return render_template('config.html', form=form)
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
# form=HelloForm()
|
97
|
+
# # return render('config.html',form=form)
|
98
|
+
# return render_template('config.html',form=HelloForm())
|
99
|
+
form=get_config_form()
|
100
|
+
return render_template('config.html',form=form)
|
101
|
+
|
102
|
+
def get_babel_string(self):
|
103
|
+
res=""
|
104
|
+
strconfigs=StrConfig.query.all()
|
105
|
+
boolconfigs=BoolConfig.query.all()
|
106
|
+
bool_types={c.key:'bool' for c in boolconfigs}
|
107
|
+
|
108
|
+
configs=[*boolconfigs,*strconfigs]
|
109
|
+
for cat in ConfigCategory:
|
110
|
+
if cat=='hidden':continue
|
111
|
+
|
112
|
+
cat_configs=[c for c in configs if c.key.category()==cat]
|
113
|
+
|
114
|
+
for c in cat_configs:
|
115
|
+
res+=f'{{{{_("config.{c.key}.label")}}}} {{{{_("config.{c.key}.description")}}}}'
|
116
|
+
|
117
|
+
|
118
|
+
res+=f'{{{{_("config.{cat}.label")}}}}{{{{_("config.{cat}.description")}}}}'
|
119
|
+
for c in ConfigEnum:
|
120
|
+
res+=f'{{{{_("config.{c}.label")}}}} {{{{_("config.{c}.description")}}}}'
|
121
|
+
return res
|
122
|
+
|
123
|
+
|
124
|
+
def get_config_form():
|
125
|
+
|
126
|
+
|
127
|
+
strconfigs=StrConfig.query.filter(StrConfig.child_id==0).all()
|
128
|
+
boolconfigs=BoolConfig.query.filter(BoolConfig.child_id==0).all()
|
129
|
+
bool_types={c.key:'bool' for c in boolconfigs}
|
130
|
+
|
131
|
+
configs=[*boolconfigs,*strconfigs]
|
132
|
+
# categories=sorted([ c for c in {c.key.category():1 for c in configs}])
|
133
|
+
# dict_configs={cat:[c for c in configs if c.category==cat] for cat in categories}
|
134
|
+
class DynamicForm(FlaskForm):
|
135
|
+
pass
|
136
|
+
is_parent=hconfig(ConfigEnum.is_parent)
|
137
|
+
for cat in ConfigCategory:
|
138
|
+
if cat=='hidden':continue
|
139
|
+
|
140
|
+
cat_configs=[c for c in configs if c.key.category()==cat and c.key.commercial() and (not is_parent or c.key.show_in_parent()) ]
|
141
|
+
print(cat,cat_configs)
|
142
|
+
if len(cat_configs)==0:continue
|
143
|
+
|
144
|
+
class CategoryForm(FlaskForm):
|
145
|
+
description_for_fieldset=wtf.fields.TextAreaField("",description=_(f'config.{cat}.description'),render_kw={"class":"d-none"})
|
146
|
+
for c in cat_configs:
|
147
|
+
if c.key in bool_types:
|
148
|
+
field= SwitchField(_(f'config.{c.key}.label'), default=c.value,description=_(f'config.{c.key}.description'))
|
149
|
+
elif c.key==ConfigEnum.lang or c.key==ConfigEnum.admin_lang:
|
150
|
+
field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("en",_("lang.en")),("fa",_("lang.fa")),("zh",_("lang.zh"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
|
151
|
+
elif c.key==ConfigEnum.country :
|
152
|
+
field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("ir",_("Iran")),("zh",_("China"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
|
153
|
+
elif c.key==ConfigEnum.package_mode:
|
154
|
+
field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("release",_("Release")),("develop",_("Develop"))],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
|
155
|
+
elif c.key==ConfigEnum.utls:
|
156
|
+
field=wtf.fields.SelectField(_(f"config.{c.key}.label"),choices=[("none","None"),("chrome","Chrome"),("edge","Edge"),("ios","iOS"),("android","Android"),("safari","Safari"),("firefox","Firefox"),('random','random'),('randomized','randomized')],description=_(f"config.{c.key}.description"),default=hconfig(c.key))
|
157
|
+
elif c.key==ConfigEnum.telegram_lib:
|
158
|
+
# if hconfig(ConfigEnum.telegram_lib)=='python':
|
159
|
+
# continue6
|
160
|
+
libs=[("python",_("lib.telegram.python")),("tgo",_("lib.telegram.go")),("orig",_("lib.telegram.orignal")),("erlang",_("lib.telegram.erlang"))]
|
161
|
+
field=wtf.fields.SelectField(_("config.telegram_lib.label"),choices=libs,description=_("config.telegram_lib.description"),default=hconfig(ConfigEnum.telegram_lib))
|
162
|
+
elif c.key==ConfigEnum.branding_freetext:
|
163
|
+
validators=[wtf.validators.Length(max=2048)]
|
164
|
+
render_kw={'class':"ltr",'maxlength':2048}
|
165
|
+
field= custom_widgets.CKTextAreaField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
|
166
|
+
else:
|
167
|
+
render_kw={'class':"ltr"}
|
168
|
+
validators=[]
|
169
|
+
if c.key==ConfigEnum.domain_fronting_domain:
|
170
|
+
validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})|$",re.IGNORECASE,_("config.Invalid domain")))
|
171
|
+
validators.append(hiddify.validate_domain_exist)
|
172
|
+
elif '_domain' in c.key:
|
173
|
+
validators.append(wtf.validators.Regexp("^([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})$",re.IGNORECASE,_("config.Invalid domain")))
|
174
|
+
validators.append(hiddify.validate_domain_exist)
|
175
|
+
|
176
|
+
if c.key!=ConfigEnum.decoy_domain:
|
177
|
+
validators.append(wtf.validators.NoneOf([d.domain.lower() for d in Domain.query.all()],_("config.Domain already used")))
|
178
|
+
validators.append(wtf.validators.NoneOf([cc.value.lower() for cc in StrConfig.query.filter(StrConfig.child_id==0).all() if cc.key!=c.key and "fakedomain" in cc.key and cc.key!=ConfigEnum.decoy_domain],_("config.Domain already used")))
|
179
|
+
render_kw['required']=""
|
180
|
+
|
181
|
+
if c.key ==ConfigEnum.parent_panel:
|
182
|
+
validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/.*)",re.IGNORECASE,_("Invalid admin link")))
|
183
|
+
if c.key == ConfigEnum.telegram_bot_token:
|
184
|
+
validators.append(wtf.validators.Regexp("()|^([0-9]{8,12}:[a-zA-Z0-9_-]{30,40})|$",re.IGNORECASE,_("config.Invalid telegram bot token")))
|
185
|
+
if c.key==ConfigEnum.branding_site :
|
186
|
+
validators.append(wtf.validators.Regexp("()|(http(s|)://([A-Za-z0-9\-\.]+\.[a-zA-Z]{2,})/?.*)",re.IGNORECASE,_("config.Invalid brand link")))
|
187
|
+
# render_kw['required']=""
|
188
|
+
|
189
|
+
if 'secret' in c.key:
|
190
|
+
validators.append(wtf.validators.Regexp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",re.IGNORECASE,_('config.invalid uuid')))
|
191
|
+
render_kw['required']=""
|
192
|
+
|
193
|
+
if c.key==ConfigEnum.proxy_path:
|
194
|
+
validators.append(wtf.validators.Regexp("^[a-zA-Z0-9]*$",re.IGNORECASE,_("config.Invalid proxy path")))
|
195
|
+
render_kw['required']=""
|
196
|
+
|
197
|
+
if 'port' in c.key:
|
198
|
+
if c.key in [ConfigEnum.http_ports,ConfigEnum.tls_ports]:
|
199
|
+
validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.Invalid port")))
|
200
|
+
render_kw['required']=""
|
201
|
+
else:
|
202
|
+
validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$|^$",re.IGNORECASE,_("config.Invalid port")))
|
203
|
+
|
204
|
+
|
205
|
+
# validators.append(wtf.validators.Regexp("^(\d+)(,\d+)*$",re.IGNORECASE,_("config.port is required")))
|
206
|
+
|
207
|
+
for val in validators:
|
208
|
+
if hasattr(val,"regex"):
|
209
|
+
render_kw['pattern']=val.regex.pattern
|
210
|
+
render_kw['title']=val.message
|
211
|
+
field= wtf.fields.StringField(_(f'config.{c.key}.label'), validators, default=c.value, description=_(f'config.{c.key}.description'),render_kw=render_kw)
|
212
|
+
setattr(CategoryForm,c.key , field)
|
213
|
+
|
214
|
+
multifield=wtf.fields.FormField(CategoryForm,Markup('<i class="fa-solid fa-plus"></i> '+_(f'config.{cat}.label')))
|
215
|
+
|
216
|
+
setattr(DynamicForm, cat, multifield)
|
217
|
+
|
218
|
+
setattr(DynamicForm,"submit",wtf.fields.SubmitField(_('Submit')))
|
219
|
+
|
220
|
+
|
221
|
+
return DynamicForm()
|
222
|
+
|
223
|
+
|
224
|
+
|
4
225
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
226
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,39 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
|
4
|
-
|
1
|
+
from flask_admin.contrib import sqla
|
2
|
+
from hiddifypanel.panel.database import db
|
3
|
+
from wtforms.validators import Regexp
|
4
|
+
from hiddifypanel.models import User, Domain, DomainType, StrConfig, ConfigEnum, get_hconfigs,ShowDomain,hconfig
|
5
|
+
from wtforms.validators import Regexp, ValidationError
|
6
|
+
from hiddifypanel.panel.admin.adminlte import AdminLTEModelView
|
7
|
+
from flask_babelex import gettext as __
|
8
|
+
from flask_babelex import lazy_gettext as _
|
9
|
+
from hiddifypanel.panel import hiddify,hiddify_api
|
10
|
+
from flask import Markup
|
11
|
+
from flask import Flask
|
12
|
+
from flask_sqlalchemy import SQLAlchemy
|
13
|
+
from flask_admin import Admin
|
14
|
+
from flask_admin.contrib.sqla import ModelView
|
15
|
+
from wtforms import SelectMultipleField
|
16
|
+
|
17
|
+
|
18
|
+
from wtforms.widgets import ListWidget, CheckboxInput
|
19
|
+
from sqlalchemy.orm import backref
|
20
|
+
# Define a custom field type for the related domains
|
21
|
+
from flask_admin.form.fields import Select2TagsField,Select2Field
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
class ProxyDetailsAdmin(AdminLTEModelView):
|
26
|
+
column_hide_backrefs = True
|
27
|
+
form_excluded_columns=['child']
|
28
|
+
column_exclude_list =['child']
|
29
|
+
# list_template = 'model/domain_list.html'
|
30
|
+
# edit_modal = True
|
31
|
+
# form_overrides = {'work_with': Select2Field}
|
32
|
+
|
33
|
+
def after_model_change(self, form, model, is_created):
|
34
|
+
if hconfig(ConfigEnum.parent_panel):
|
35
|
+
hiddify_api.sync_child_to_parent()
|
36
|
+
def after_model_delete(self, model):
|
37
|
+
if hconfig(ConfigEnum.parent_panel):
|
38
|
+
hiddify_api.sync_child_to_parent()#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
39
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,51 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
|
4
|
-
|
1
|
+
from .ProxyDetailsAdmin import ProxyDetailsAdmin
|
2
|
+
from .CommercialSettings import CommercialSettings
|
3
|
+
from hiddifypanel.panel import hiddify
|
4
|
+
from hiddifypanel.models import *
|
5
|
+
from hiddifypanel.panel.database import db
|
6
|
+
from hiddifypanel import Events
|
7
|
+
|
8
|
+
commercial=False
|
9
|
+
def init_app(app):
|
10
|
+
from . import restapi
|
11
|
+
restapi.init_app(app)
|
12
|
+
return
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
def config_changed_event(conf,old_value):
|
18
|
+
|
19
|
+
|
20
|
+
if conf.key==ConfigEnum.is_parent:
|
21
|
+
if conf.value and not is_valid():
|
22
|
+
set_hconfig(ConfigEnum.is_parent,False)
|
23
|
+
if not old_value and conf.value:
|
24
|
+
Domain.query.delete()
|
25
|
+
db.session.commit()
|
26
|
+
db.session.add(ParentDomain(domain=hiddify.get_ip(4)+".sslip.io"))
|
27
|
+
db.session.commit()
|
28
|
+
|
29
|
+
Events.config_changed.subscribe(config_changed_event)
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
# def db_init_event(db_version):
|
34
|
+
# if not is_valid():
|
35
|
+
# db.add(BoolConfig(ConfigEnum.db_version,10,child_id=0))
|
36
|
+
# db.add(BoolConfig(ConfigEnum.db_version,11,child_id=0))
|
37
|
+
# return
|
38
|
+
# # if hconfig(ConfigEnum.is_parent) and ParentDomain.query.count()==0:
|
39
|
+
# # external_ip=hiddify.get_ip(4)
|
40
|
+
# # db.session.add(ParentDomain(domain=f"{external_ip}.sslip.io",show_domains=[]))
|
41
|
+
# Events.db_init_event.subscribe(db_init_event)
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
def admin_prehook(flaskadmin,admin_bp):
|
46
|
+
# flaskadmin.add_view(ParentDomainAdmin(ParentDomain, db.session))
|
47
|
+
flaskadmin.add_view(ProxyDetailsAdmin(Proxy, db.session))
|
48
|
+
CommercialSettings.register(admin_bp)
|
49
|
+
|
50
|
+
Events.admin_prehook.subscribe(admin_prehook)#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
51
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,16 @@
|
|
1
|
-
|
2
|
-
from
|
3
|
-
|
1
|
+
from flask import Blueprint
|
2
|
+
from flask_restful import Api
|
3
|
+
from .tgbot import bot,register_bot,TGBotResource
|
4
|
+
|
5
|
+
|
6
|
+
bp = Blueprint("api", __name__, url_prefix="/<proxy_path>/<user_secret>/api/v1")
|
7
|
+
api = Api(bp)
|
8
|
+
|
9
|
+
|
10
|
+
def init_app(app):
|
11
|
+
api.add_resource(TGBotResource, "/tgbot/")
|
12
|
+
with app.app_context():
|
13
|
+
register_bot()
|
14
|
+
app.register_blueprint(bp)
|
4
15
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
16
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,59 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
import time
|
2
|
+
import telebot
|
3
|
+
from flask import abort, request
|
4
|
+
from flask_restful import Resource
|
5
|
+
|
6
|
+
from hiddifypanel.models import *
|
7
|
+
|
8
|
+
logger = telebot.logger
|
9
|
+
|
10
|
+
|
11
|
+
class ExceptionHandler(telebot.ExceptionHandler):
|
12
|
+
def handle(self, exception):
|
13
|
+
logger.error(exception)
|
14
|
+
|
15
|
+
|
16
|
+
bot = telebot.TeleBot("", parse_mode="HTML", threaded=False, exception_handler=ExceptionHandler())
|
17
|
+
bot.username=''
|
18
|
+
|
19
|
+
def register_bot():
|
20
|
+
try:
|
21
|
+
global bot
|
22
|
+
token = hconfig(ConfigEnum.telegram_bot_token)
|
23
|
+
if token:
|
24
|
+
bot.token = hconfig(ConfigEnum.telegram_bot_token)
|
25
|
+
try:
|
26
|
+
bot.username=bot.get_me().username
|
27
|
+
except:
|
28
|
+
pass
|
29
|
+
bot.remove_webhook()
|
30
|
+
time.sleep(0.1)
|
31
|
+
domain = (ParentDomain if hconfig(ConfigEnum.is_parent) else Domain).query.first().domain
|
32
|
+
proxy_path = hconfig(ConfigEnum.proxy_path)
|
33
|
+
user_secret = hconfig(ConfigEnum.admin_secret)
|
34
|
+
bot.set_webhook(url=f"https://{domain}/{proxy_path}/{user_secret}/api/v1/tgbot/")
|
35
|
+
except Exception as e:
|
36
|
+
print(e)
|
37
|
+
import traceback
|
38
|
+
traceback.print_stack()
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
class TGBotResource(Resource):
|
44
|
+
def post(self):
|
45
|
+
try:
|
46
|
+
if request.headers.get('content-type') == 'application/json':
|
47
|
+
json_string = request.get_data().decode('utf-8')
|
48
|
+
update = telebot.types.Update.de_json(json_string)
|
49
|
+
bot.process_new_updates([update])
|
50
|
+
return ''
|
51
|
+
else:
|
52
|
+
abort(403)
|
53
|
+
except Exception as e:
|
54
|
+
print("Error", e)
|
55
|
+
import traceback
|
56
|
+
traceback.print_exc()
|
57
|
+
return "", 500
|
4
58
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
59
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
@@ -1,5 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
from . import bot
|
2
|
+
|
3
|
+
|
4
|
+
@bot.message_handler(func=lambda message: True)
|
5
|
+
def not_handled(message):
|
6
|
+
bot.reply_to(message, "We can not understand your request")
|
7
|
+
|
8
|
+
|
9
|
+
@bot.callback_query_handler(func=lambda call: True)
|
10
|
+
def update_usage_callback(call): # <- passes a CallbackQuery type object to your function
|
11
|
+
bot.answer_callback_query(call.id, "Incorrect callback", cache_time=1)
|
4
12
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
13
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|