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,72 @@
|
|
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"\x0e\x00\x00\x12\t\x04\x00\xf4C\xb4=X\x89B\xf1BG\xc8\xb6\x90\xc4w\xe5\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x02\x92\x9f\xac\x87\xec\x95\xb0\xc4\x9eC\xbd\xc5\xc2K<\xef\xae\x1cg\xcf\xee\xfb_\xd1r\xce\xb4P>TSQ\x12\xfa\xee\\u\xbfq\xf1\x19P\x13\t\xe1\x1d\xd5\x1d\x9c\xbbF\xa5\xefe\xaeXd[\xb1\x98b\x8fP\xb8,\xa9\x84x\n\xa9\x92l{\xf8\xdfu\x87FN(B\xd2<\xda\x91\xe5X\xcf\xea\xcb4w\xe9\xb2\xcf\xcd\xa4\xfbX\xe2\x1dM\xa790\x8c\xaf\x12\xeeE\x1b\x11\x03\xb0\x81\x16\x00=\xc1!5\x7f\x7f\xf1\xe92\xfd/\x18\xbe6\xfd\xcb\x97\xe4\x19-\x9b\xd5l\x94\xab\x8a\x17&\xe2\x08`\xe9\x07\x12\xa1C\xf7\xf4\n3\\\x94]\x00\xdb`\xb7\\\xf4yx\xcb:\xc7\\b\xdc&\xf2\xdd\xd2\xf7\xca\x01\x1b\xde\xe9\xea$R\x9b\xb1\xdc_\xe0#2\xa2\xe849w\xf2\xc9\xb5+\xd5\x87L\xc2B\xb6\x13,\x8f\r\x9f\x10r\xaa\x19QE\xf68\x0b#\xfa.84\x8f\x03_z\xfb\n\xfd\\H1\xbf\xf6\x87\x1e\xa8\x18\xb4\x8a1\x9e\x99\xb9Z\x93\xa9\x0c\xa4\xf9T\xee\xbeg\x83\x89\t\xa8\xf7\\\xc8\x8dC\x93*\x1b\xf0\n\x93\xf2%:\x8f\xb7\xdf\xae\xd2\\\x0f\xbb\xc6U\x89T@\xbd\x10\xd3O\xf7h_\xc7\xd5~\xa9\x8b\xf1\x9b\xc2K\x9c<\xa0\xae\x84\xf6\x90\xf9O\xf9\x02U\xd8]\xbd!\x02h\x06J\x90|e\x1f\\\xdfxh\xd8i\xaf\xbd\xa7\xe5h\xe4l\\)\xee9\xe4\xa4R\x0bJ$\xd3\x1fB"0\xe6\x1f\x92pM\x7f\xfd%\xab\x8f*dc\x0f!\x84\x0e\xd0\xfa\x8da\xc40\x08\x0e\xbc)\x14\x05P\x13U\x95\x80\xebGS#\x06\x88 \xcf\x11\x1f`Jv\x19\xf0`@\x19q\xd4\xb7bc\xce?\xcb@\x15\xb6W`\xbbAY\xa2`\xdc\xa0%\x99w\x1c\xd7/p\x8bHug\x17\n\x1e\xc9\x88+\xb3\xb8v3@\x7fF$\xd2vs&\xc4~\x8d\xec\xbf\xa4\xf88\x0b~\x04p)%!\xbd\xa1\xb7{t\xddZ\xc8\xc7M\xbfE\xebh\xe4\xda\xf8,>\xd4\xa4\x92!{\xfe\x01BAC\xd4\xc6\xe8\xc2\xfa\xd3w\x8a<\x99Q\x0f|O\x9eC\xfe\x10\x1d\x10\xc3\xfaok\xef\xc3N\x0c(\xdd\x1e\x0eN\x16O\xdf\xc4\x1c\x10\x1a^D\xf6\x9eV\x15\xc9\x83\xf4\x18\xd6\xed?\xdc\xae\xefP\xdb\xe3d\x9e\xb8\x0f\xbe-\xca\xdb\x04?[8gw|\xbc\xb0/\xcd\xeb3v\x0fn\xc6\x0c\xf5J\x18\xf2\x1b\xa7\xb7\x0c{c\x9f\xbaPv(\xae(\xab\x130\xbb\'\xe0:2\xb39\x8fasQ\xc4\xf5"\x12U\x15\xe6\x13\xf7H\xd2\xbcUM\x9f\xe1\x15\xb0\xea\x9dG{\xce\xb8u\xbehB\xbf\xb2\xec\x84\x8d&?e7=\xecN\xbd\xb5j8\x9d\x96\x90\x92c\x06\xb3\xc5n\n\xff$\xa6\x84\xf0*\xda\x96\x9eu\xec&\x08k\xba\xf1\x92}\xf6\xb9\x97\x02\x1a\xbc\r\x86&\x06\xc4?\xb6l\xed\x1e\xbd\x0e%5*@f\xb1\xa9Z\xdd\x0c\xdeN\xc0\xb3\\~\x9a\xc2\x9c_\xbfW\x96\xe9\xfa\xd5\xa5[\xd0\x1f6\x9c\xf0$\xc9\xef\xed\x8db\x14\xe0\xa4b\xb7\xd4??\t\xfc3A\x97+_\xd9\x19\xee\xb5\xe7[\xa4\xc9\xadX\xa3")\xac\x11^%\xa1g\x1d\xba\xdc\x84i\xa5\xd1\x00a\x12\xf3w\xe1\xa7\x1dp\xe6\x94n\xa4\xdf]\x1c\x8b\x82\xb4\xa7\x0b\xd0\x05lnw\x80\xec\xe9\xe7<(@\xc4\x91\x9db\x8bCWtm,\xa28\xbbi\xcc\xd7\x16\x80\xdf\x8b\xc9\xb08v#@\xb7\xed\xae\xe4\xfab%\x8b\xd2$\x15\xe6G!\x92\x01\xa5\xe4\xceo\x89i\xb3\xf8\xcf\xce6E\xdd[b+\x8c:\x84\xa3\xa3\xa3\xbfu\x9a\x1b\x9b\x9e\x17\xc3\x9b\x87\x9e\x8bL0\xaa\xa2\x98\xb6:^\xe1\xe5\x87\xa6F(@\xd8a.j\x83\xd3\xa6A\xee\x02?\xf5\xe1n\xe1\xa5\xad0R\xd5\xa5\xc9\xa3\xe4\xd3,\x1e\x8e\xb0\x82dYCa\xe7\xf4\xa0^\xd3\xb4\n\xd0mXm\xa7\xb8\xb8\xb3\xf8\x8fS\xb4\xdb\xd9 \x98\x19\x1b\xf1S\xe83Xf\x7f\xeeK\x01\x07\xe3\xdb\xf7\x03\xed\'\xdb\xeb#\xf5\xf7\x80=\xbe\xb5\x03M\xb1+\x9a\x0c`7\xf9\xec\xc0Pa7^\r5\xebC\xa0}\xdezg5\xf4\xc2\x95\t\xf4\xb6\xb4\xab\t\x93\t\x8e\xa2\xd6(\x8f\x0c\xfeq*\xa5\xd3\xe2\x19\xeb\xb4\xe7P,\x0e\xbe\xa6\xe5\x9d0l?\xf5d8\xd1w\xd2W\x85\xa8\xed-h\xcd<\xfc\x1d\x99w\xf6|4\xf1"a\xb3\x98nd\x19\xf0\x1cD\xb4\xbb\xe8\x83\xe6S3\xa6\xaf-\x1e\x87\xec/\x14^F\xfb\xc3|}\\\x9c\xf0\x88$I\x0b\xf93\xa1-%S\xe0\xc1\x8c=\x8f\r\xb6\x1bC}1{\xe2j \x9b\xa6\xc1\\U\xe6\xa8n\x91\xc6\xa5\xdd\xb4(+\xbc#Om/\x80\xd4\x1ag\x90\nP\xef\xbe\xb4\xba&\xac\xe3\x18C\xc3\xa3\xd9\xf3\xb6\xceFg!\x845\xcc\xd6E\xf0\x85\x13\xf3~\xf1?\x86o\xa9sV\xe0\x80N4\xbc\xaa\xc2\xe6\x03\x19F\xd4\xa7D\xf2\x8f\xd4~\xec\x03r\x0c\x03\rF\xdc@\x8e\x97\xcb\xe8\x9e"e\xa65t\x81\xfd\x9a\xd1\x9c6\'Xs^\xbdb\x01\x87\xbe\xb3\xe3\x0c\xd6C\xc7\xb8\t.\x0f\xcb&\xb6R[\xc1\x8f\x94\x18\xc1w\xde\x19Gq)\x83r\xa7z\xe01\xffa\xb4\xc3\x1c\xcd\xbc.\xc6\xb0\x85\x96\x85\x194\x1d\xf1me\x85v\xb1%\x80\x89\xb7my\x0bs\xc8+\xbff\x80\x81\x1d\x08\x9c\x82\x8b\xec\xe77\xa7P\xba\x02Q\x91s\xf5[Z>w\xa8Ys8\xe34BR\x82\xc9\x8d\xd3&e_+\ni\xb6=\x90Ec\xfd\x02\x8a\xb8\xd8\xd3\x83b\xa5\xbc\x8f\x85\xf5,\x83\x90g\xbe\x1d\x12\xb2W\x8d\x834N\xed\x81\x81\x1do\xd1\xf6P\x0b\xd3\xda:\x9b0[\xb3F\xa4{\xa1\xf4\xa0b$=\x84\x0b\x19\xeb@\xbb\xd74\xc3\x19\\V\xb2\xfd\xafJ\xc1o\xba:?\r\xd6e\n\x13\xb3\xe6\xe98\x01[\x91\x16[\xe4l\xb7\xc0;.\xfb\xfe\xb3\xf2y[\xef)w6\x96\xc5`\x88\xe4d+\x12\xdaP\xcf\xce\xcd)\x80\xb9\xb2\x96\xf6KC\x05k\xe8\x84\xa7xb\xded\x97W\xd4`\xe9\xf2\xdf\xf8\xe8\x1dY~\xe8\x86c\x1aF\xa9O;\xcf4\xa8:\xbd\xad\x1b+\x8fe\x1c\xa4s+\x87\x10o\xd2ODN\xb2\x10\xfc\xb7\x89\x0c\xd8ZE\xe7\xfcZw\x1fL\x18f\x89\xe3E\x96?\xc6\xed\x96{w\x10S\x80\xf4r\x10_p\xc4\xcd<\x02\xc8\xe7$\xcaw\x157\xcd\xd8]Q[Y\x85\x1c\x11T{W\xbe\x9ea+\xf0\xf6\xe7\x8c\x8f*p%\xe6\xd9\x9b\x07$\x0c{->;\x03\x8fIQ6{\xe2b\xdbs\xef\xba/\xd2\xc2\xc3\xfbV6\x16\xc7\xb5\xdebtw~\xbf\x0b \xa33\x89\x03\x99 ,\xfe\xba\xb5M\xcd\xe6y[\xe9UFJ\xe5\x84F\xdf\x85o\x1c\x1d\x8e\xf94)\xabRK$"\x81\xb7\xa9\xcc\x7f\xae\xfd\xb0E\x86RC\x12\xcf\xfc\x8b\xdf\xb7\x0e?\xf1m\xdc\x08\xb6\x18\x95\xfb\xad.\x17\x08\xa8\xad\x8f\x9d\xd1#\xddGo#\xe5\x7f\x1d\xfa\xce\xc1\x93\\\x1a\x98\xa6\x88D67\xc0\x02\xf6\x80\xb2\x89sf\xe7\x9f\x02\xd3Ut+a}\xf9\x01\xd1\x8b&\xcf\x1e\x9d\x908^\x9f\x83\ta\xc8\xd4\x80\x95\xb1\x91N\x9d/\xb2N\xd8Jf\xbc\xc2\'\xa1g\xba\xa0T\xca\r\xf7\x8a\x1c\x97\xd0\xd0d\nJ\x1c\'\x1d\xdc\x91\xd5\xb5\xa4\xb7\x97\x04\xb4>\xe6\x82\x83\x80\xeb\xe8\x93\x17G\x99y\x80\x87w\x86\xb62<\xd0?\xa8\x8e\xd9R\xebRv\xc4\xcd+\xef\xddp1\xb4\xd7^\x8b\xeaS4\xc9\xeef\x8b\x0b\xf3\xd9\xf3F\x12\xd5\x0c\xf3\x04\x064@4\xb0\x81\xa0\x80\xa4\x0e\xe4\x9b\xc4\x94\xe4z\x1c\xe8\xdc\xf9\x92\x81z\x0e}?P\xed\xb3\xb7}dS\xc5\xc1%\xa0|\xe8hl\xf1\xbd\r\xd1*\xba\xe8\xacM\xbe\xa3\xd6\x08\xf4b\x86\x10\x9c\xaf\xb1\x8e*:3\xa3\xe1D_\xbc\xa9\x89\x9dv\xf87I\tX\xc2\x93\xb6\x96\xa7\xb8\xc6\xf3~\xabH\x8a\x1fg\xe6\xbe>/Sxo\x9ew\x82\xb1\xd8\x12mC:%\xc6\xdc\x97E\xd4wH[RE\x83\xd5T6\x1cWY\x1b\'\x0f\xf8\xa3\x8bi\xa3\x0cq\x1d@\x12\xfe\x10\r\x0e\xf5\x9dl:\x9b\xf4R2\x18\x8d\x1b\xf7\xf2\xf7_\xd0\xbb\xddjy\xdc\xf4\x18&\xde\xe1\x17\xa2\x06\x12W\x83\xa5\x1d,S\x0c\\\xb7\x8b\xab\x90\xc8\x90\xa8\xa3pWR\x8e~y\xcc\x07\xa6{\x1e\x03rv&\xe6\xe5\xd3\xa0\x92\x00\x83\x9d\xde\xa6\x00\xf1\xfd0\xc4s\x14\xef1\x1f\xda0Q\xf7\xc0\x07]1\xb7\xc2\x97\xd9oY\x81\xd9\x19\xaaK-\x8eL:I,K\x10\xbd;\xb43}\x8d\x0c\xa9\xb0\xe0p\xab"\xa5Z\xe9\x02\xe2\xc6\xc4=\x16{\x9b\xa2+-\xb0\x14\xb0\xae\x82\x80tg\xba\xc5m=]B\t(\xe36F\x90\xee\xfd\xafH\xdd\x9b\x07\xc7Lf\xc9\xd5I\xe1\x1f\x9f\xb3\xd2\xfc\xaa\x11\xe1\xd6"J\x0b\xf9\x1b\xf2\x92E\xd3\x1b-\xd9\xd0\xca\xcb\x86\xa2\xa5q\nAa\xc9\xba\x9e\x19\x03\xf3\xf3\x8a\xf6\xff\xf5@$S\xf3\xe9\t\x99,,\xd6F\x97\xdc\x92]F\xcd\xda\xa2~i\xee\xae\xdd)\xc5\xcd\x1c\x15\xd0Xt\xbd\x82\x90\xad\x1b\xdd\xe92\xa3\xa9[!e\xb7\xa5\x7fq\xfb\x06l\xb8\x08j{\xcc\x83_\xec\xae\xb9\xa5j\xc2\xb0!y\xf4\x94\xf4\xb8S%\xe6:\x85\xfd\xb9<JW\x94I\x03f^\xbf\x1d\x04\xb10\x12\xde\xfe\x8a:\xd7\x9b@oUr\xday\\\xa6\xcb?\xc1"\xa6\xcf\x86h\x87\xae\x90Gk\xe3\xc7R\x86\xa8.\x03\x05\x00\xc75\x1fj\xb0S\x855\x92!\xcc\xa2\x9d?\xb3\tPy\xb6\xdd@\x04I7\xbd\x0e\x18u\xe4\x90\xb4o\xe6\xf0Y\xf2\x18Hx\x07\x07\x0f\xfb\xe0I8zX>\xb9\x9f\x1a\xce<\xfeU\xe0\xe4\xde6\x80\x87\xffz(r\xc8\xf7\xa5\xcb,\x07\xee\xbe\x89\xd0\xb0\xa1\xda\xe2\xa8\xc8\x83\x8f\xdf>\x19\x11\x7f\x01\xea<\xdbMHl4\x82!zYE\x00\\\tFb\x9b.G\xe8^\xb8]\xf9\x0f\xc2\xb0\xe5\xc9l0;\xff6@\xdd\xd9%\xf0\x14\xed\xa9\xa4\x19\xd9\xc3\xdeOk\x81\xd1\xe6\x1eipy\xb8\x1e\x87{\x98-\xa2\x02\x0b\xeaP\xb3\xcc\xe4s\x92\xcfk<V\xa7.\xeb\xd2M,\x10}q\xe9\x05b\xc4\xb5S1\x15\xd4G\xd7\xaf\\\xed\'4\x081\xd4M\xbe\xfe\xc8 \xc4,H\xcb\xe2\xcf\xa9C\xf3\xa0\xbb\xec\x00b\xb8\x13\xd617i\xde\x17\xd0{\xf1\x1e\x19\xb2\x02\x05\xaf\x08\xfb\xfa\xba\xf7\xfd\x11\xdc\xd0=\xbd\xad0\x08\xfa\xa3.@\xc19[\x97\xcbg\x92C\xbd\xce?$\xbd\n\x14\xc3*\xe4t\x07\xa6\x04\x8b\xcd\xca\x00\x89\xad\xba[\xa9Q\xa8\xfd\xa0\xe5a\xba\x8b\x0e\xbf\x81\x8f6\xeb\x19%\x80u\xa7C\x05\xab\xdc\xaa\x0f\xac.|\x81el76\xacK\xed\xf0\xe0\xae&\x8c%\x92\x05\x16m}\xe1\xa4\x8e\x03\x11J\xc9-\xd5u\xab\x91g\x945H\xb3\xa3\xd5oxq\x9b\xa0\xea\xe9\xc1{\xe2\x07O\xc6~re\xcfh\xdfj\xad\x08\xb7\x02\x0c\x8d`\x9f+KFGYb\xc4\x8dJ\xcf\xe10\xafM\x89.+\xb8\x9dF\xb9\'\xb3\xb5\xafa\x0c\x95\xbeL\xfaJ\x1e\xb0\x14+\xf8S\x83=I\x80v\x93\xaepv\xca/\x8dK\xc2\r\xf4\x7fH.a\xee\xc5\x0c|\x1e\x06\xff\xe1\xca\xbbn\xc8\x8a{\x9b\xa3\xb60\x13\xd4\xbeX\x15)M\t\x93\xd4\x0c\x9b\x92U\xd3_Y){J\xe1G\xbcS\xcf\xb7\xa6\x179\xd2\xd0r!\xa4\xf8\x98-\xe3=\xcb\x02f\x9fM\xd5\xf4\xde\xc0\x9d\x86`\xd9\xb4\xed\r/o;\xde\xfaw\xcc\x01q\xd1\xf0\xcbZH\xeb\xcfi:\x88\x9f\x893\xa0a#G\x02\xca\x1b\xc1\xbb\x8d\x11\xab\xc0\xdc\x1cIVO5\xb8!Q\xb9\xd3\xbd\x96\x95\x1b\x14\xefj\xf0l\xdd\x88\xdc\x9d\xc2\x1c\x9e9*\xdc\xc7]8uu\xe04\x18\'\xdf\xc8PfzP\x84s`#\xf3\xc9\xfe\x18\xe8\xdc\xb7\x84M\x14\xcef5\xb9]\x05\xbbQ\xf0j\x91e\xe0n\x0f\xee1\t\xb3\xbc\xec\xdf>\xb0\x04\xd2$\xe2\xe6/q\x92\x950E\x89\xd6i<\xe8\x8e\x03\xb0V\x8a\xc5\xbf*\xd6(\xc1W\xa8\xa9\xaa\x14]\xd8\xc9\xd22\x96gK\xd1"%D\xae.\xd7}f\xcc\x1b\xa9\x1c\xe3\xa1\xca\\\xfd\xab\x95Q\x99\xde\xfc\x8a\xcdG\x03\x96v\xbeEX1w\x8aK\xad\xc3n\xe1\x1c\x01\xa8V\xd9R\xe2?C\xc1\xaf\xcbv R\n\xee\xd5\xc1\xa3D\xb4\xe7a\x8f\xb4\xa9\x04\xc8\x1d\xf8\xde5mX\x8bv\x06\x92\xe8\x95V:\xca\xc2i;\x86\x8d\xf7\x9a\x03Z=\x9a%\xe0DH\'\x92\\\x01h<\xe3\xea\x96\x9c\x13\x15\x82g\xc9\x04\xb0\xdd\xcc\xc59\xac\xa0\xe9\x84\x0b\x17R\xf8W\x7f=\xd7\x1a\'w\x8e<P\xe0\xd8\xd0\xa5\xb7R\xd6\xe1\x06>\xc7\xf4\xfdzAk\x7fl\xfdCE\xcc)r\x12\xb8T\x1b\xa9\xc5q\xdd\xe7y\x93\xc8\'\x96\tW\xb2(\x12`z\x06F\x7f\xb5\xa9\x15\xf6\x81\xf1Tz\xa4EkRrmK\x98\xd7\x01\xa2\x11aN"\xfaY\xda\xd8^#J?\tTK\x1f5"\xd5y\xda\xfbg\x93\xb3\xc9\xae\xedq\xe6\x98Eb3j\xb7\xe0$Ri*G\xd7\xe2nx\x00\x06\xa6\x11\xd8U:=\x94\xa7\xe2\xb5\x86q\x82\xca\x05,\xca\x86\x00=\xe0\x12\x95\x05\xa3\x88g\x90\xde\xa7\xe8\xbdH\xc8\xee^\x12\x87\r\xb0B\xb2r\xa2\xf5(\x0fD\xde\xe9Z\x98i\x1e/\xcaa<\xeb\xab\xa6\xe8S\xf0\xb9$L9\xdel8A\xa5\'H\x0f\xf6\x15\x01l4\x0ea\x97v\x02M>\xdb\x13\x93\xa3\xe5`W\x96\xdd\n*q\n\xcf\xba\x14\xf6\x9aH<\x86\x0c\x1aQN(\xebe4\x07k\xee\x1c\xb8\xd3\xb0\x00\xe8\x14$\r\xe9\xb0\xc4\xc8\xa6\xef\xef\x88\xc0+\xea\xd4\xf5\xd1\x9c{\x0b\xa3\x0b\x89\x12\x11_ G\xc2\xa9\xb4\xcaI\xa7+\x00\xc4M\xb3\x83\rMLL\x8a\xfe\x08K\x83\xe5\x06\xcd2\xea\xb0\xed\xfd}x\rj!!G\xad_<6!\x83`g\xe5\xc0\xfe@\x85\x94\xc9\x1e\xb3\xdfj`\x82[\x08\x98\xd4kj\xee\xf17\x086\x92.+\xb9\xe95\xf4\x08\xc0\xc1\xf7\xdc\x19/\xf3\xda"w\xb4\t&&\xc0I\x13\x97 \x0e\xce\xd1\xca\xa7\xbe\xe4\x85\xc2#\x10\xda<\xa3+\xe5\xa8\x10e\xc8U\x08M\x11\xaf\xb5\xb8\x16\x0f\x80>L\xd3\x08\xd5 \xfc\x91\xa4\xca\x07\x92h\xe0\xedVq\xacE>\xfe\x17\xde\x16|o\x87\xe7\xd4\x82<[\x8b\xd2\xa6\x9c\xa0\x01\xc4;w\x9f\x0c\xf6\xc2\xb5\xe0\xde}]O\x8a\xcf\x17\x9f]K\x99W\xd6')
|
1
|
+
from hiddifypanel.models import *
|
2
|
+
from hiddifypanel.panel import hiddify
|
3
|
+
import json
|
4
|
+
def sync_child_to_parent(parent_link=None):
|
5
|
+
parent_link= parent_link or hconfig(ConfigEnum.parent_panel)
|
6
|
+
if not parent_link:
|
7
|
+
raise ConnectionError("no parent link")
|
8
|
+
|
9
|
+
return send_to_panel(f"{parent_link}/api/v1/sync_child/",'PUT',hiddify.dump_db_to_dict())
|
10
|
+
|
11
|
+
def add_user_usage_to_parent(dbusers_bytes,parent_link=None):
|
12
|
+
uuid_bytes={u.uuid:b for u,b in dbusers_bytes.items()}
|
13
|
+
new_user_data=send_to_panel(parent_link+"api/v1/add_usage/",'PUT',uuid_bytes)
|
14
|
+
|
15
|
+
|
16
|
+
uuid_status={u.uuid:is_user_active(u) for u in dbusers_bytes}
|
17
|
+
hiddify.set_db_from_json(new_user_data,override_child=True,override_child_id=None,remove_users=True)
|
18
|
+
have_change=False
|
19
|
+
for u in User.query.all():
|
20
|
+
if u not in uuid_status:
|
21
|
+
have_change=True
|
22
|
+
break
|
23
|
+
if is_user_active(u)!=uuid_status[u]:
|
24
|
+
have_change=True
|
25
|
+
break
|
26
|
+
if have_change:
|
27
|
+
hiddify.quick_apply_users()
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
def send_to_parent_panel(parent_link=None):
|
36
|
+
send_to_panel(parent_link)
|
37
|
+
|
38
|
+
def send_to_panel(url,method="GET",data=None):
|
39
|
+
try:
|
40
|
+
import requests
|
41
|
+
from requests.adapters import HTTPAdapter
|
42
|
+
from requests.packages.urllib3.util.retry import Retry
|
43
|
+
|
44
|
+
retry_strategy = Retry(
|
45
|
+
total=3,
|
46
|
+
backoff_factor=0.5,
|
47
|
+
status_forcelist=[429, 500, 502, 503, 504],
|
48
|
+
method_whitelist=["HEAD", "GET", "OPTIONS"]
|
49
|
+
)
|
50
|
+
adapter = HTTPAdapter(max_retries=retry_strategy)
|
51
|
+
http = requests.Session()
|
52
|
+
http.mount("https://", adapter)
|
53
|
+
http.mount("http://", adapter)
|
54
|
+
|
55
|
+
headers = {'Content-Type': 'application/json',
|
56
|
+
'Unique-Id': hconfig(ConfigEnum.unique_id)}
|
57
|
+
print(headers)
|
58
|
+
if method=="GET":
|
59
|
+
response = http.get(url,params=data,headers=headers)
|
60
|
+
if method == "PUT":
|
61
|
+
response = http.put(url,json=data,headers=headers)
|
62
|
+
|
63
|
+
res= response.json()
|
64
|
+
print(res)
|
65
|
+
return res
|
66
|
+
except Exception as e:
|
67
|
+
print(e)
|
68
|
+
print(url)
|
69
|
+
print(headers)
|
70
|
+
print(json.dumps(data,indent=4,default=str))
|
4
71
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
72
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|
hiddifypanel/panel/init_db.py
CHANGED
@@ -1,5 +1,395 @@
|
|
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\x00bA\x00\x00\x12\t\x04\x00}\xec\x01\xf4O\xde\xf3\x0bG[\xce\xd0i\xe0\x84\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x13m\xaa\xa15\xb5<\xca\xd0h\xcc\x04\x9c\xa1X\x9de\xe9J5<\xb3w\x0e:\xb0.C\xda\xef\xb2\xeeZl\xdb*9\xc4\x8a\xfc\xca\xbc\xe1@\xba\xd8Q\xdf\xee\xd6a\xce\xfc\xf8"\xad\xfan\xfa\xe6a\x15c\xd9\x0e\xf1\xbf\x97\x9105Tt\x0e\xa4Hz\xa7\xac\xab\x9fD$\t\xaa\x19x\xdb\xebCoO\xb2%|\xb0\xbb\xfb\xf9\xca\xdf\xd8W\x1d\x04\x85\x03\xcb\xc8\'\xaai\xa2\x1a\xdc\xbf\x10X\xe4\x99\x8b)D\xae\x9a\xc4\x15PCb\x1a\x0b\x11\xac\xfdMBu\xf1\xe6\xaf\xea\x84\xc9\xa5\xb9D\xdfOY\xbe\xe3B\x99E\xc6%\xf7[\x0f\x8fC"!\x01\xeb\xb3\xcf\xefrgk\xe1\xae\x98\xc0k%\xa3\xc6\xb4\xe7\xfa[r\x97wd\xbe\x9aw\xdf\xed\x1e\x89`\x8e\x9f=7\xfc\xf0i\xccj\xdeY\xd2\xc7\xfb\x90\xe07gm\xfcXf5\t\xfe\xea\xa7\xfc\xca`\x86y\xab\xf2V\x1eB\x9f\x05R\xcb>\xa4\xa61\xbf\xcbXo\x11\xc5\x8d\x85\x02\x88\x05\xa4T\x1d\xa3x,\xcb\xdd\xf3\x8d;\x08\xd4=\xfe\x9e\x7f\xd9\x1b\x00\xb6\xb6~\xfc\x02\xe5\x81\xc9h\xca\xdb\xc8\xfb\xb3m\xdb\xe2Vv4\x15:\x16\x8e\xc0\x16~p\x0bm\x08\xe08\xa7_\xb2\r<\x0b}CJGzW/!\x1d-\xd4\x0c\xa74\xea\x8e.:\x0eh\xac\x0e\xb1E\xa9)SE\xea\xbb8sO\x8a\xd8{d\xb6;\r\x87J\x1cV\xbf\xfd\xca\xb4\xef\xbda\x0b\xcc~\x02\xab\xdd\xea\x04WQv\xa3\x84\xcf\xb9\xca\xe4C\x91\xdc\n0\xb5G\x08\x07\xfa\xf6\xd5%!1\xa0\x87QW\x0f3\x89\xa7-N\x99\xdc\x0f5\xa6\xc87\x1dN\xf9\xe6\x04\xdd\xff\xa2\xa9\x0ci\xc2\x83P\xeb\xbc\n\xcf]1\xc9\\^\x864q\xb5\\E\x03\x17\x7f\xc8\xdb\x12\xae\xcb\x0cC\x9b\n\x94\xc9\x99\x9f\xa8\xa08%6\x12\x97\xb5x\x0c\x85^\xea\x19\x19\x8e\xff\xa3\x10:\nO*@\xc8\xde\xac\xda\xcbrG\xc12<R\xeb\xba\xde\xb6\x17\xc85SZ:^\xaa\x90\x0e\xff\xbf\xbbM\xa8K\xb3\xdd G\t\r\x19h\xb1\x13\t\x1cN-\xfa\x81\xe0\xa9\xdf\x070j\'!8\xc2)\xbdy\x853\xf3\nK<g{Fq{\xfc7\xd4J\x91\xfb\xef\x16\xc1\xa9\xc6\xdc|m69l\x99\x9c`\xb3!\xc1\x91\x99N\xb1\x03\xa7Q\x8e\x87\xd9\xb3\xa8\xa5\xff\x87\xc3.Y\xfb\x8a\\\x9e\x1b\x7f-nN\x8d\xd7Lv\xb4\x08\x1b\x90s\xef-\xec\xcb\x99;\xb1\x1cH\xc0\xf9\x9a\x1a$\x812\xdf\xde=ZYbV\xe4\xff\x86\xc58L\xf8Dd\xa9GV*9VKC\x1a/\xdf3\xbb\xe7o\x1fS,#x\xc7\x0f\xdc_$x8\x97\xb3(\x02`\xebF\xbbz\x89\xc0\x98,\xec\'%\xeb]\xb5\xb2\xc5\x87\xc6\xb4jv0\x9f\xba\xbd\x05\xf3\xca\x88\xf4C\x18vL\xd9i\xebg(\xfd\x9c7\x87\xbc\xa7\x1eK\xdal\xc1\x13\xec\xa0\xcc\xf3\x9f\x9e\xb4\x93qt\x87\xa2oH\xc8Gc\x93\xa2+\xb4\x8d\x8f\xcd\xee\xe0^\xaa\x9f\xe5\xb7S\x19\xf7\xaf`\x87\xdf\xa3\xf6Q\xb4gbm\xb9[\xd4\x90!\x19D\xb3\xc3nr\x9d\xfc\x91\xa2\x99\xdf\xdaaV\xa4s\x1c\xe6\xa2bJ\x1a\xad\x1aw\xb1\xab\x03\x92fg$\x8e\xc3\x95\xe7\x02\x8c\x9fkKN\x81\xa8\x94s\xa5~"\xbe\xbbo\x1e\xfb\x86\xbf\xd6\x1fJi\xc8\x1c\xc0\x99O\x83\x8a\xd4z\xd1:\x05\x06\x83\xe8\rzf)V\xe3ZY\xd6D\xd0\xf9\x07\xfb\xa2\xc2/\xd4\x11\x0b\xebe\x02W\xba\xa9\xa8\xaa/\x8cJt)\x8c\xae\xbd\x0e_\x9d\xabq\xe5\x12\x8d\x8aoAR\x96F\xf03\x03\x98Wb\xa8\xc1\x07\xadl2\x11\x11|\xf0\xddJF\xbc\xd4i\x9dm\xd0\xd4\x0f\xf1\xf0q\xad\x896\xd5\xe1\xa9\xd7)\xa4]\x17Q\xf1\x11\x0e\xad"v\xfd\n6\xfc\xaft?=\xebG>,se\xbb\x96\xd11Z\xcb\xc6\x8c3,\xb5\xb8zC\x80M5\x02e\x9e\x84\x136\xb3e\x07Npj\xecp\x85Wqt\xa4lt\x06\xd4\\\x1f\xe8\xd3\x00\x15\xc0)c~\xfbx\xcfB\x19G\xddD\xce\xfb\xff\xe7\x11\x97x?rA`\xcc\x802Y\xd2\xe2\xfa\xb4\xde\xdb\x14\xc8\xbeO\x17=M\xe3\'6e\xcd\xd2\x9c\x95\xe3\x97f\xc3\xb8\xe4m\x13[Vg\x00ya\xb0\x7f\xffe\x91}\xe9@+\x1b(y6\x96\xd2C\x00\xae\x80\xc9\x8aZ\xeb\xdbL8\xc5\xb3\xd9UL\xbd\xff\xa1\xb1\x08n\xdb\xce\x16\x07\xf7{\x00\x86\xdb\xbb?>\t\x0f\xa5g\xe7(\x8f3\xcd\x8b\xb1\xc4\x9cY_[\xdd.\x8dF{\x01\x052?\x1e\x85:zg\x92\xea\xa5\xaf/\xa6\xed\x11\xca\xa56h\xaa\r_\xdeU\xcd\xfa\xe2\xa1\xd5N\xfbk\x94&\x05\x9b\xef#\xb9\x16N\x102G\xa2\x93/\xe2j\xff\x0b\x8aQ\xcd\xe3&Xu\x0bj\xcd\xaa\xa3\x08\x8f\xb0\xdb\x8b\x06\x94\xff;zL\x9e]\xe3j\xd0XS\x0f\xfc\x01\xd4\x1dn\x01Y\x8b\nb\x91\xa9\xa3\xb7\x04\xff\xb8\xb8\xd4\xd2v6\xaf\x97\x04>\x9aP\x9f\xc7e\xad>\x0e\x8c\x9aw\x00\xe1\xe5\x14\xf7\x9c\x87[\x12\xad\x037\xa2\xcb\x90\xc9,\xdd\xf4\r,\x00(\\\xd7x\x97\x18\x96\x99\xbd\xaa\xe5\x97\x1ePP\x1f\x9f\xbfW\x9e\x04m\xba\xe7\xedf\xe6\xdbV\xa9\xd5\xb6\xfeY[\xb9\xeb\xb346\x16\xe1\xb0\xfc4\xb0\xc2\xe4\x15t\xda\xf2\xbd\x8e\x19i%\xaaP\x14t\x1a\xb6\xd3F\xbd\xbc83\x05\xecl\xe7\xb8\xdeB\xf5\x94E\x11\x95!\xde\x0fk\xee\x0e\x0c\xf5\x92\xe6M$\xd85\x0e$7\x91[r\x18VJ\xb1\xac\xdd\x17\xc3\x9c\x08ah\xf25\xf7\xe3\xf4\xc8G \xb3W\x03\x8bx\xf5\xe2{q/\x95\xd8\xe9$x\xa2\xe6\xb8\x12\x0fH\xf5w\xd6A\x97\x94\xe4\x90\xf2\xcf1\x91K\xa6\x81\xbe\xf9Q\x02~Q;A\r!\xedZ\xaf~n\x0f\x90\x86\xf4\tOE>\x1e4\xe7\xa75\x95\xa1\xedw\xb5x\x8d\x9b$JZ\xe8\x98Yv\xe7\xdf\x89\xff\xebj\xf9(H\\Sc\xb4\xb1\xbbz\xf4[\xd8m\xcf$\x1c\x9cV\xe5\x8b%\x19\xbe\xc7\x00\xd4\xc1C\x85\xf6\xe4\xe0i\x9a\xf1h\xe9x5\x0f,f\x88@\xdc\xf4D\x14u\xc6\x10\xee(\xc8\x8ch\x1c\x9b\xfcl\x9c1\xf7K\xc2$S\x1e(\x1eT\xabO\x9f\x9c{\x8b\x03\x1bK\xef\xe1\x18\xa7\xa4no\xbb\xa8\xf89N\xf6p\xcf\x1f\x9b\x1b\x19t\x91b(\xdf\x9b\xdf\xcd^\xc4}\x08Js\xe9\x10\x0fu\xcbv\xf7^\xb2\x9b\xfd\x10\xd0\xe1\xcc:\x95*\xc6dh\xed\xfd`\x11\xf8gU\x98\xf5\xa1\x07/\xab^|\xa0\xab\x8a/\xcd0\x0e\x7f\x00\x15\xc5A\x0e@\xeaC\xe1\x85\xed\xd5\xc15j\xca\xa8#\xb9\x14z5\x17\xb8}`\x1c\xf2\xf8\xa5/\xd7f\x8a\x8f\x1eIZ\xb0\xa5\xb1\xb5\x1a\xd2\xdc\xe4\x0c\xd4\xa5Y\x16\x93T\xc1\x87\xbb\xf1w\x11\xfdd\xb6c\xeb\xdf8\xf0\xa8\xe8\x07\xb4\xa25\xe5y\xe8r9\x05\xa7\xbcx\xc4*\xe9\x1ePe\xcf\xaf\x92\x99\xb82\xe8\x0c\xcc+=\xa2\x16]G\x06\xb5\xf5\xce\xc5\xa44wg=\xc5\xe6\xc4\xba\xd7\xab\xa7\xf0\xac\x9c\xc3\xb90\x1f&\xd6\x0c+\xdd\xc3\xb8\xea\xc9m75Z\xd9=\x8d\x7f\x8fm\xd9\xbbpM\xfe\xccLx-\xfax\xdcb-\x8dZa\x81\x16\x89\xd9\x06\xd1\x8f8\xe8\xa6\x10\xd7\x12\xfc\xe0\t\xa9*\x8c\x0eX\x1d\xee\x1b\xdc\xb3\x0f\x14q1k1\xb8O!C\x1e\xfc\xeb\x87\xbb\x06\xa4=3\xa8\x11\x18\x16\xacEr\xf24\x1f\xfb9 \xdd\x82}$\xee\'\x05\xc7\'\xe4}\xf0\xf74\xc8@\xb7\x84\x89\xa8ZJ\xfa\x01\xf5\xeb\\EU\xcc\xe0\x07\xd8Y\xec\xa8\xae\xf8rQaDN\x8bL\xe20@\xf0{\xfa\xe8}/\x0c\x83+F\xb4\x87\xdd\x8bV`\xa1\xaf\xd4\xf4B\xa0&\x95\xb7\x93\x86i\xcf,\xf6\x86$\xbbF7\xde\x95\xa4\xb9\x97\xce\x98\x93o\xe1p\xff\xb62\xa2I\x0c\xd126\xd6\xc5\xd7 \xfc\xf7\x1cH&\xfc\x04\xd2J\xb0\xbd\x1b\x0c\xaa\x0c\x8aE\xc3\xce\x94D\x07p{\x9fol\x1b\x7f\xce\xb7,Y\x10/X\x88\xdc\x92\xc76\x88\xf1D\xc7)\xc1\xe6\xad\xa2\x0ezo.}\xb8\xf3q\xda\xbb\x9c\xe6\xfbfX\xe3\xcc^\xb0\x14\t\xebO\xd6j`\x89\x10\xd8\xb3\xde\xa7\xb7\xb7*\x82?\xb7\xa3\xe8\xc8;\xf0bm\xec\x85\x9eAj\xc0\x80\xf1v\xb4F\xa3\x11\xb6S\xa6\x04\x13\xbd\xc4#\x01Xl\x869\xe6\xda!\xfc\xf2w\x96\xc9\xf0K\x12\xf8\xdd*\xbf\xa6_fP_\xc9sv^\xbcu;\xbf\xac 0\x9b\'h\x14\x0f\xbe8\x8e\xd8\xad\xeef\x0f\xe4\x0c\xfe\xe6\x0e\xefn wdh\x046\x10\x1bz{\xe4\xf0\xf1\x92\xcf\xd3\xf1\xb4G\xf0R<\xe3\x82G/\xad\xd6\xae\x1e\n\xac\x11\xa1\xe7\xe9@\x07\xccM|O\x0f2~\xf8\x04\xd0\xd8\xcbe\x0c\xa1\xa8s\xec\x9c\xe8\xa73\xb8\'q\x83@\xa9\xc0\xcf\xa2T\xb8\xb5\xff?\xe26\xe7\xb1\x06\xc7\xca\x8c\xf8\x04\xe9\x1b\x9d\x1b\xde\xd8w}W>\xb0\x8b\x11\xd20t\xceq\x05\n"\'\xec:\x13 \xc0\xc8\xa5\xd9\x90,\x1c%\xeb\xa7\x97,\x98\x13B\xf4M#\x80y\xae\x8d\x97\x9c\xb7\xf20\x8a\t\x0b\xb6\xbd\xbchrU%\x15\xd0\xe0\xa0,t0\x1e\xe223u\x15\x0b\xc3\xf4imJ\x03zg<\x96\xff\xaf\xed\x9c\xe9\xecL\xc9%`\x9c\xa7<\xd2\xa8\xd0\xed\xa67\x9e2a\x97\x03\xa5\xf5m\\\xd0\xb8a\x9b\xa910M \xf5~\xf2smY\x13?\xd9Z\x19\x99\xeaP\x8e\x16\xba\xc4\x1fG\xa4\xf3\xd2\xb5y:\xa6\xaf>`\x8c\xed)?\xef\x1b\x80\x8c!\\D\x07\xb1\xd1\xca<G?\xadl\xd3\xd1\xc1qy\x80W\xa0\x8c\xd0\x8b\xd0\xf6C\xfa\xa7\x15a\xef\xaa6X[\xc1\xceD\xe0"m\x95\x17\xfep\xa2\xac\x06\xac\x85)\x9c\xe0\xb9\xe4P\xe9\xc3\x00\x1d\\\xee|j\xc88u7\xbf\xa1]\xa8#4\xce\xf5\x9d\xed"\xd8l\x18Q\xe9Z\xe6\xa5\x97\x1b\xcaA$)\xd1\xc1\xa6K"\xc9<z\xb1\x8c\xbf;5\xf6\nqo\x9aF0) \x15L\xff\xc2v\x0eNx\xbe\xb4\xad\x19y\xa3j\xab\x1b_p\xf8\xa3\x198\xcc9\xe8-\x81\xbeJ=\xb9\x00\x8e\xe7~R\x0f\xda$\xc3%\x9a\r\xc5AI\xf2\xaf \x8c\xb7\x18q\'\xa4\\\r\x8a\xd0\xb32\xf5K\x1a\xe2l\x81?\xb9k\xfcz\x9a\xab=(#)!\xab\x1f\xee5\x821\x1f\x02\x1a\xe4.Qs\xa9|\xbe`\xc0y\xcf\xa6\xac\xb6\xf4\xc1/\x8as\xbe\x8f\xdd/\xc47h\xbe]$w\xbe$\xfc\xff/\xd0c$\xf1\xa1\xebx\xdc\x11\xa7\x86\xed$\x8d]\xeb\xb2\x04\xd2\xf3\x00)\xd0\x176\xd0\x8cb\xc4\xb4\xf5\xdfn\xacL\xbfsj\xd9\xc0@q\xc9\xad\xca<\x0f\xb8\xfb\xf52t\t\x93I4\x9f]}lS\x94\xe7\xcd\t\x95\x04\xcf\xc0n|\x15\x10\xdd\xaf\xa7\x84\x89\xa8=\xa9\x89\xb1\xe3vx\xeb\xa4\xca\xb7\x1aA\x92kZw\x8f\xfd\xceU\x8e]\'<&\x95\x86\xef\xb5\xf3tk\xaf;Q\xaaVj9<\r\x9a\x1f\xfft\xde\xb4g]g\xe7\xce\x1aR\xd7\xb8G\x81\xc3Uu"\x01\x0b\x08\xdc\xb2\xfe\x08\x1c\x1bYjg\xa0\xe2;\xbc\xbfZ\xb1\xe1(\xc6\xc2\x85\xc2\xbfK\x82,k\x10r~\xbf/O\x96}V,\xd2\x99\xd7\xa9\xf2\x18b\xe9\xd0;\xfeUi\xedp\x8b\xa2\x8c\xb5\xe8g\x0e\xda\x1eu:R/\x18\x94\xeeO\xf4\x8c\x8df\xd1\xcd\xdc\x94\x16n\xda\xbc\x81\xd7\xe8\x7f\x18\xea\x15Z\xad(Wf\x8c*\xab\xe8\x16>E\xe6\rk\xc7Q@\x9cXwS\n\x8a\x9az|\x9e\x01B\x7f\xfa\x06d\xff\x9b\x95\x0bQ\xcd\x89ru<\xb3\xe0\xb7\xdaL\x1f\xd0\xab]{\xd0[\x0b>\xa1)\xd5zk\xd5\xe1\x17\xb4\xe9\xf4\xdcm\xe9\xfe\xfb\\!7\x98>\xba\x81\xef\xbem#nBZ\xa7Sh1>\xbd=\xbe\x16\xe6\x13\x0c\xf3\xb2\xd8\x9bF\x84\x9f\xc8X,n\xcdnR\x9f4/\t\xd5@\x87\xa9m\xc0W\x8d\xe9\x06D\n\x8d\xaf\xe8\rb6\x8f\x08\'\x92\x03\x80q\xa3\xc6wng\x95j\x9e\x1fV\x0b8\x87\x8f\xde\xe9e\xb5\x8b.N\xf3]\xf0\xf8t\x8a\xb4=\x0c\x9a:K\x9dJE\x8dI\xdeO\xd7N<\x1a\x005\xd1%\xd2B\xb6\xbd\x13?\x88\x1f\x8fQ[\xfa\xe2\xe8]\xa6\xb0\xffw\xcf\xae\xf4\xbb\x97\xf0\x95s<\x82\xe7\x0c]\xd2\xdc\xa4d\xfa\x806\x85b\xeb:\xbct\x0b[d\x06\xb8\x14\x87=S&1\x85\xd5`\xe9\x1f\x13\x03\xba\xff\x00\xb2\xfe\xcb;2!\xba\x14\xe9\xc3\xb9Sl\xebW\xf0\xfdPv]\xa4W\xad=\xc1X\xf3\xe5\xf0\x19\xa1\xfd\x17\x10\xe4\x10\x0b\xaf3\x98\xc0UQ\xb0\x06\xb2\x0e\xf6\xfa\xa2\xc3\xf6S\x98\x92N\xab\xbb\x9b\x80\xe1;?\x8d\\6\xd1\x87\xbf\x82\x08s\x9e\xd3\xe7*N\x16Le\xc5\xc5\xad\xfeKM\xd54\xc7\x1f\xbc\x91\x9c\x98\xbeb\xc7\xac\x0c\xe6\xf5l\xffT\xf4\xe6N~\xe5Eg\xefY+\x8ej\x08\xd9\xe5\xce\xbf\xca\xaa\xe1\xb9\xcdu2\xf1\xc0\xe5\xadk\xe6\xf92\x13\x17\xb8\xeb"Y\xcf\xf7\xdd\xb3\xda\x9d\xde\xb2B\x90\x8d\xfd\xdd\x18\x0f\xcf\x11\xe9?>y\x95\xb7o\t\x8b\xbc\x89\xdf(\xe7\xacw\x9c\x05M\xd7\xa0W\xf5\xb8\x0c\xa4\xa2\x82\x1f\xf4>\x01\xea(\xaf\x175clxq\r\xaeV\x9e\xff\xe2\xec\xb6\xe3\xb5$\xd5\xb5\xb73\xebiZ\x17sz\xb1f\n\x9e\xbb\x88+\xc9\x9b\xd5_\xce\xaaY*\xda\xfb\xfea\xe6"\xe6\xce\xe8,\xade\x90|\x86\xdcF\xae\x9cH\xb7%\xe5q\xbdD\x19\x81T0I\x9b\xc9\xcc\xbc\xaf\x8d\xfe\x1aR\x7f\x9d\x8c\x18\xb3v\xedY\xc4WW}\xce\xd9\xfd\xf0\xe3\xbd\xc9J0\xd2\\m\x1cCD8\x88\xc31\x13\x97\xa1\x13\x14\x0c\n_\x94X\x89\x9f2\xc7+\x83W\xb6\xb1p\xc8\x009\xf8Y\x969\xcc\xdc\x81\x87\xf8\xc4\xbb]\xb7.\x1e\x11\x8b\xc3QP\xfd}\xca\x8b\xf84\xba\xb7s<\xc9Y?\x83\xd3\x16fz\x84\xbbf$\xcc18{2\xea\x87\xde\x93W6\x9cT\x87+\xe6\x83\x16\xa4\x0c\x82\xec\xfa\xbb\xd7\xf9\x03\xb3\x07\xb4\xfe\xf4\xb0\x9d\x00\x87u\x07\x90\xc7\x8b\xca\xc5\x90zy`\x1cD\x84\xd8\xf0\xa6\x9c\xd0\xf0\xb1\x9dvI\xf8\xd6GV\xc1\xc9\x0e\x0c\xb3\xfc\xa6\xdagU\xb3\x02\n{\x86\xa9i\x08,K\x9e\xdd\x02\x92\xe2\xa5\xf2\xdd\x00\xae7g\x1e\x00\xbenV^f\xf9\x10T|o\xceQ\xa4\xdb\xd9\x15\x13N\x03N"\xe7\xe6\xa8\xed2S\\\xae\x8f \xa0K\x1aa\xc3\xc7\x142\x10\x87\x12\x91\x9ft\xac\xb3WT\xb8*\xcf\x9f\xdf\n\xd4C\n\xc1\xd9x\tS\xbc\xc9M\xdc\xf7l\xb2\x9d\x08\xff\x12&\xf3\x95o\xef@&\xf1\xce\xf0r\xff\xcc\x93\xbc\x86\xb5\x80\x0c\xf9 \x0em\x07 !\\1\xa2x*,\x12\x86\x1b\xec\xa1@l\xe3\xb8P\x97\xd5O~\x00\x86\x16\xe7\xca8\x84\x14\xb4Q\xa8\xae\xe3H\x85\x8eV\xb6\x93\xc5\xebdo:\xcby?\xcb!\x85\x07\x9a\xc1J\xe7h`\x92\xfe\x88\xe5\'\x8c\xcd\x89g~\xba\xaf\xd7ckZ\x96\xbd\x1d\x98x\x93\xd6\x92\xe0]|@\xb9\x076\x11\xc1\x1b\xec+\xda\x0b\x00b\xe1\xa2\xd2\x80\xda\xc2\xba\xe4\x9c \xccQ\x85\x80\xc1\x85U\x86\x87\xe7\xd7\xc2oD\xe3\x1f\x93LVr,4\xe2\xf0\x1a$i\x0f\xab\nv8NW:-<\x12\x9e\x15\xab\x1c\xd0\xd3\xb2Y~\xa7y9?\xd5\xefB1\xfb\x8d\xcf\x85\xc9E\'\xbf,\x97\xa6\xa4\xd5\xb4\x9cX*\xe5|\xb8\x0c\x7fM\r\xe0\xedx\x1f\\\x85\x7f\x8cW*\xe8\xe8\xa63\xaf\x92\xdb\xbe\xcf\xee\x92\xccG\x98\x89\xa0\xdb\xae\xfc\x8f\xe8\x17\xd4\xb9>o\xe8 \xc3\xd9\xearix\'f\xf4\xce\xc7\xe4\xc1.\xb78bm\xe1\xaf*`\xb4\x19\xb7\xb7.\x94\x91Y\x96\x0f\xba\xa3e\xe4\x17\xac{g\xad\xdd\x9f\xcc/\xd6\r\xccS\x05T\xd46\xdcN\xf8\x84\n\xa1\xb2\x8d1\xcf\xbe-\x95\xd0\xa9\xb7\x05\x17\xe0#\xca\xec\x10\x8a\xa5\xff\xa8<X\x8dw\xbfU\t\xd9\x04g\xc2\x9b\n`\xc8IvS\xb2em\x9e\x9c\xe83D\xe0\xd6\xfcXF|\x01Z\'\xae\x96\xf1\xcc\xd8\xd7\xc3tS\xdc`\xa8\xff=\x97\xdd\x12\x9ec\x95\xfad\x14\x0f:\xf0\x113\x06\xad\x02@\x14\xd9\xf6sj\xf8\xde\x8c\xe6\x9c\x1a\x7f\x98\xdf%\xce\xf5\xa4t\x1d\xf0\xcf\x03\xdeH\xee\xcd\x8f[\x82I\xc0\x87{W\xeaC0\x88U\x1e\xc4\x8a\x12\xed\xfd\x97\xec\xe5\xb9X\xd2Y{\x1a\xf1\xb2\xb5\x8f\x90q#3\x17\xac\x02\xba \x8b\xaa\xe6\xee\xe8\x99\xca\xaa\xda\x8f\x98\x16\x14\x84ep\xdc\xe9w\x1e\xc62\xec\xfa\xd7t"\xc6\xca\xb2N\xb4\r\xc2`\xa4d\x90\xfc*+ql3G\xd8\xe5\x84^#|\xc7z\x0c&My\xb7\x8fGh\x80F0s\x9a\xd0h\xee\xa1\xc2\x89 \xb8\xbb\'\xe3\xaa\xc5%_o\xfc\x1a\x86"\xd6\x14\x9fp\x11\x1ew\x856\xccp\xd7\xd2l\x7f4Ri\x80w\xb0y_<\x00\x8032\x91Q_\x03\x95\xfc\xb2#\xc1\xd6\xdd\xbf1em\x07\x9b\xfbw\x93\x1a\x8d8q\x01\x9b6/\xd0\xa50\xd9\xdc\xe8I{\xc9\xb5\\k\xdc\x98W.\xbb \x06\x8c\x06`\xc3Bc\xbdv\xc7,7.\xf461\x06\xd5\xb0\x8b\xd2u\x971J\x83h\x10\xa3I\xf5\x9ce\xd8"=\x97,E\xa7\x03\x9d\x80\xe1g\xab/\xde\x92)\x11\xee\xf3\xb8k\xaa\xddms\xa3z!\xc7\xdd\xe0m\xc8\xdf\xc8\xf3\x08\xee_(#\x18\x00\xb9\x94\xed\x7f\xce\xef8r0\xf7#\x03W\xc2\xfe\xb2\xd9\x82\x18\x16IJ\xf6B\x8e\xde\rdn\xc8\xf2\xa9\xdc\xa5\xa2\x04\xa7\x19\xf2\xddF\x8f\xd803\xbeQ\xc8\xbb+B.)(l<Ee?\xf2\xb7\x99V\xc0e)\x17\xc7\xc7c\x8b\xa8S\xe5\xc4\x0f\x9b\x1fCt\xbcS\xc0NM"hz\xf2Yn\xc6u8L\xafm\xf2\xd0>\xb8W\x0f%\xee\xed\xe7|\x85\xabt\xe3\xa4\xca\xcb\xd1bMM\xa1\xce\x11\xbe_\xce\xe8\x8a\xad\xb4\xf9j\xd6\xac\x00l\x1d\xca\'\'C\xda\xc0!\x9b\x03H\xd8\x89U\xf8\'\xbbf0\xf7n\xdd\xc8\x00\xab}\xb0\x99&\t\xdc\xc5\x19\x19\xc3\xa4\xfe\x12rF\x1d{\xc4\x9d\xe1u\xff\xc8A\xea\x04\xf9g\xeb\xed\xe9\xc6\x05t\xe8\xd4r\x89:\xcd\x92k\'\xd0[\xbe\x80\xeb~lh\xa0\xe1\xf9\x01^:\xa8\x96\xba\x9f\x93\xc8\x9a\x8f+T\xc0[R\x16\xe7\x99\n\xb3\x96\xe1\x1e\x05&sQU\x80\xe7\xe8\x98\twT\xae\x9b\xe3A\x91Q\x8a\xee\n\x94A@3ve\xabTP\x9dQ\x85]I\xabE\x08\xd1\x17\xb9\xc3\xbf\x8b\x9c\x8c,\xef\xb6\xe0\xa5\xf475t\xc8j\x96\xa5\x8a\xdf\x07\x86\x04\xfa\x91\xed\x0ed\xdd/\xcf\xd4A\xfc\x81\xf5\x18\xab\xc8b\x88\x839O/<\x9c\xbfXD\xa9\xb4\xe9^%\xb1\x0e6\x9d*f#\xad\xd2Nrw\xb8\x88S\xb0\xf4\xfeE-2\xc0g>\xcf\x97q\xd5\x8b\xf8R\x82\xd8(,\x127\xf1\x89\xc4C\r\xb2\xc6\xe6\xe4\x15\xbco\x19\x9e\x9a\xf2\x17\xc8\x88\xdb\xb0\xb4N\xd8\xd4z\xf3p\xc9\xec&\xe2\x8e\xc3\x86\xdd\xd5\xaf:t\xc2y\xf2\xff\x07\x85\x1f\x8d,\x9d\x0e\xae\xa5\xb7\xc8\xd6~\xfaLn\xceF\xb9\xd9\x90Ve\x03&\x7f\xf9\xa8\xa8/\xa5\xf0S\xc7R\x8dI\xee\xbc\x07\xd1^>\x8a8\xeb]\xbe<.\x8c\xbdT\x12y:G)\x19\x01l%\xe0\xc0\x9b\xe7\x15/&\x15\x07p\xe8f(\xfff\xd8\xd7KA\t\xc8\xc3\x80\x8f\x9a\xe5+\x80\xe1L\xd3t9<C\xe2\xf3\xb0\xef\x92\x83\xc1\x884\xf9]5,\xd05E\x1c=\x92h\xdc\xe6(\x98k\xd4\xebh\xde\xe4I\x18\x08\x8eH\x14]\x83\xb3|D\xc2(|j^O\xf5\x8a\xe6\x10\x10}b\x1a9g\xa1\x8b\xdbA6b\xcbOa\t2#A\xc6\x99\xe4m\xec\x19y\xfa!#(H5\x9a\xf0\x1ao\x8f\xbdDz\xcb\x94\x88\xfc\x87?<Lw{P2d\xa4\x87\xd3>\xad\xee`&\xb7!%\xa6\x1e\xd9\xee\xeb\xb3\x0b\xfd\x85\x13\rN\xee\x07\xd6\xa7\xe5x\xcaO2\xed+\xc5f\xe9g\xd5y\xcag\x86\xdb\x97\xd3\x7f\xaa\xddB\x1a\xa7.0$\x9c\xe5\xe1\x11\xf35sK\xae\x92\xefB,\xbe\xd1\xf3\xaaau\xd4\xb2\x80\x9bKm\xd9T\xbdS\x1ft;\xe3\x8f\xd5fj%\xe7\xda\x0b\x11P\x9a4\xf8\x05T\xff\xed\x90,;2mX\xfd\x19\xa8~h$\xc8[\xc1G$\xc1j\x088\xbd\x08\xf7\xfa\xec\xdc\x1d\xbe\xff\xb1\x98\xee\x1c\x9fP\x17\xa5W\xcbN\xa4\x0b\xa2\x08\x87\xac\x07\x9f\x93\xd3[,c\xf9z\x99x\x8f\xb2\x1cG\x0b\ny\xda\xa8[\'e\xd1"#\xf8\xfd\xc2\x90"~\xa1\xaaY\xeb\xf8\xf5\xcc\xf6\x8c\xf0\xd9\xac\x83*-I\xee\xa0\xa4\xcb\xbenA\x99\x7fB!\xd5\\\x92\xe4\x0c\xc5\r\xce\xd1H\x93\x1d\xde\xa9\xbb\xe5a0\x02\xbd"\x08\x8c\xa3\xf8\xc0\x1a<`\x8d\xa5Z\xbf1-\xa3\x14L\xd7\xca)\xfc;L{OA\x8c\xe7\xc9\xd3\\*~@\x11}\x07\xd4\xaf\xf7\x02\xd5\x13\xe9\xa0Q\x01"\xddRV\x05\\\tX>6\x9eC\xaeo\x8a\xeb\x9b\x03\xca\xebu\xea"\xb5\xe7c\xe0\x03H\xc9w\xedf\xd0q\xed\xb8\x1a\x86w]\r\xae\xb2\x87p_\xba-\x16\x0c\xca\xe2\xe2C\x02\x04\xa4Z\xfd\x13\x8d\x11\xbe\x1aD\x05\x8b\xa6\x17\x03#%EB\xdc:\xe1Y\xc7\x9e\xef9\x93\xe3\xda\xf5<\xba)\x9e\x9d\xcc\x91\x02`\x81\xb9\xd5C\xf14Y\x12-Fa\xb1\x1cAB\xf8\x19Qi6\x80>n\xc0J\x9a1\\\xdd\xee\xac\x1d\x99?t\x89\x97@\xcd\x80B\xf9Huv\xcas \xe5\xe2\x93\xfe.\x00^\x95+ \x12K\xeav\x81\xe7BKE\x93\xff\n\xfb#I\xa4\xbe\xd0\xf9\x1f{\x80Po\x13\x9c\xe2\x1f\x12U!m\xcf\x08Q\x16s\x04P\xdb^m\xc4L\xbd~\x9f\xb06ct\xf8c{\xb0\xda\x90\xbb\xa1\xa9pLZ\\1u\xdd\x9c\xce}\xa9,\x01\x95@\x0b\xeb\x9aU\xc9<\x92%\x1d\x157\xb8R\x81\xe1\xbeh\xd3\x9f\xe3\xe4\x9bwi\x91\xe9P\x1c\xa5v\x07\xf374\x17\xf6z\xf83h\xad\xbe\xe0\xa4V\'x[\xf6\x8b\x83\x03\xd3\xfdd\x05\xaa\r\r\x91\xb0b\xa91d(\x11-b\x0c\xe6\xb0\xed\x93\x84#\xb5\xf7~7\xab\x7f\xbe\xa0!\xac\x17r\xfe \xf7N \xc6\xc1\xbf\xba\xcbBT;\xfb&\xee(\xb6\xf1\xf2\xc1\xe4\xa2\x0fpc}\xe1\xabt\xdd\x956\xf0\xc0\xba\xd6\x03\x1aC#t\xb2\x89\x82Q\xadnN\xdec\x07*\xed\xcf\x05\xc7v\xde\\\x89\x9e\x9a\x04\x909\xfe\x85\xbe\xe7\xc3,Y\x98\xaa$x\x04\xc0\x1e\x8b\xa7\x8ay\xc9\xc84\x91\x9f\x89tW\x88\\\xa7f\xe9\x14!.\xe0\xc0X\xb0\x8d\xd2\xb47p\xbb\xd1s\x8eK\xfcm\x00hq\xb3\xf1R\x1f\xc0\xf3\x93=\xd3\xddO"\xc7\x81025q\xa8\x9d\xde\xe1\xa6\\*\xfc\xa8\x19C\xbe\x0b\x84T]\x9d#\x92\xc1d\xaa\xe1\x085\x0c\x13m\xc1\xc1\x92\x8ezG\xbaF\xb5J\x08\x85P\xde\xc4\xeet\xa4q\xb4\xd3\xa9\x14]k\xe5H){\xc1\xae\x9c\t\x88\x9e\xe9\xb5\xd7\xa8\xa3\xe0\xa8n\x99f\xf7\x9c\x13T7\xaf\x94d\xec\x97\xd2\x86E\xbf\x1c\xbf\xe7\nE\xdag\x814\xd47\xbb\xbb\xe3\x84\xaa\x9b\xd2\xb8*\x9d\x00\x88\xc1\xd3\t\ryu\xe8\xd0uX\xde]@)\x04`\x00\xc3\x14\xf8\x00\x1e,C\xc9hrT\x17K1\x13\x12\xc6u\xba7\x07\xee\xdd\x0c6z\xec\xdb\xa4#Hq?\xf3\xf8O\xc3\xef5\xe72\xd5y\x1b5\xea~\xfa[\xfd\xd0\xf9L+J\x84\xf0\xc6@\xbc\x92\xaa.*/\xb089\xacs\xf7\xb4\xb6\xe2\x8cZ\xad\xb9\xdd\xe8P\xc8\xeb^\x1a\xf1KP\xe0D\x11uO&\x88R3\x80.\xa6W\x1b$%u 1\xb9E\xa0]\x7f\x101\x83\xe9\x84\x1a\xee\xa5R>\xb4\tr.\x08\x9b*\x16\xc1\x89\xc9\xb3\xadh\xfd(L\xdd(\xfe\xf7\x06\xfea\xa6\x95\x8aD*iN\xa8\x9a\xc0\xd9\xffs\xdc\xc1;\xe0\xcb\x13C\xe7\x80\xb6\xa5\x13{\x08\xef\xdd\x9a\x1d\x84\x9e\x7f\x13\xb0,\x08\xb8H\x07j\xa6*C,\xbcT\x87\xb6\x01\x7f\xec\xa13E\x99\x15\x82M\xef\xcb%\x94\xe6\xb0O\x04Qf\xf6\xb9\xed\xf9)\xd5m*#S\xec\xa2\x97e\x91\xad\xcc\xa0\x89\x14\x0clr\x92\xaa\xf4b\x196\x1f\xab\xb5v\xd2\x9b8\xb5\xf0\xbfX4^\x010fI\xf6\x88`j\x98\xf7\xb3\x16\x9c3\x049\xed~\xaa\xe6\xdeQ\xc4\r"\xc0\x00c\xcd\x91OF\x8b\x978\xd5\xcd\xc9\x95B\x192\x9f\x94[\xa1Y\xb2sn\xe9\xa3\x1d\xa9\x17\x88\xa6\xaf\xf0\xfe\x8b\x10\xf5\xfe\x1f\xad\x84Q\xc86\x87\xccWJ\x9e\xd5\xf7\xee\'B\xbb\x1c\'\xacJ\x93\x02Jq\xcd\xfe\xc1\xfc\xaf\xff\x9e\x95B\x03F]\xda\xfbl\xff\x80\xa0\xc6\xfe>\x88\xb7U\xe7\xb0y\x1b1\xabl%\xc5U+}\xa6@\x0b\x87}\xa0xF38`#@"\xf3\xc4\xe0\xeb\xbdD}\x8b\xe7;\x0b\x124t0\x03J\xf7\xdd\xa2\xfd\x80\xd4D\xfd X\x07\xd3\xc2\x82O\x83\xd7\x03[\x1cQ\xde\xaba\x0f\x05\x19.\xd7\xfa\x13\xfc#[\xe6\xdb\x8fT\xa4\x17s\xa2\xa0\xf9|\x96\x10p\xc8\xbf\xbc\xb6\xf4\x8bV\xe6!\xc8u\t.#\x00D\xe0\xc8G\x88\x12\xd7\x01\xd8t\xdc\x80J\x0c\xac6yk=r\xd9#\x0cJ\x06\xdfsB\x13V\xc4 \x08\x14\x0bW\xde\x8b\x84l\xb5R\xe1\r\x1a\xc3\x9bE8\xb1\xdca\xd5\xba\x12\xdag\xd9Y\xa9\x8e\xeeA\x0f\xf8:KF"\x047~\x0c \xea\x1cs\xb7\x88,E\x80\xb15\xa0z\xe2\rp\x88\xb4\x8f\x13&\xdfU]=\x1b Ih\x9ej\xea\xfc\xe0.\xbf\xd5\xbdz\xc4\xaf\xbb\x0c\xdf\x08\x86[\xbc\x07\nN\xd8@\x1e\x99\xce\x16\xf6\xfa\xf4:\t_\xf7OZ\x02\x1a\xd4]m\x88\xa0r^\x01\xdaG\xe3e\xd1D\xa2^\x8a\x85X\xaa\x9e\x87\xd7\x054\xce\xc2+n\xec\x98_l\x05\xb0\x7f\xe2\x90t1?E\xd6\xb0\xcb\x9d\xaeC\xcb\xcdg\x02\xf9\xa2\x95\xa3\xe4Y\xa6\xea[1\xc6\xc4Gnf\xf1"\xd4\xb8\xd6\xc1\xf9\xd2^%\x04\xeeH\x1b\x05\x81\xc8f\xce\xf8\x9a\x80\xcd\x07\x16\t\xfc\x05\xcd+c\x07t\x8e\xba$900\xa0\x13\xd6\xae\xab\xa7\xd9\x95w\xb30g\x1c\xc1/\xb9\x02\xf5\xae\x122m\xad\xa0a\xc4\xf5c\'\xc9\xb4\x06@\x83\x97\x8a\x8b5\xcb\xbc\xc0\x92/O\xa1\x9aC}\xb6\x9eT\xf3\x9d\xc5\xff\xa9\x19\x18\xd4\t\x87\x05\xe0\'\xa7\x7fE\xaf^\x81-d\xa1\xe6\x03\x1d\xf5mk\xdf\xf1\xea\xaf\x05}m\xfb\xf5<.\xbd\x94\xaf\x14O\xeam\xbe_\xed\x9b3\xc0R\xc3z=\x06CV\xdd\xa7j \x8aC\x12~+\x94xQ\xfdP\xd5\n4\xda\x11w\xc6\xc2Oi\x1b\xd1u\x19\x8fj\xdf^\xd9\x0e\x13\xd4\xea\x1b\x8d\x98\xbcd\t\xbc\xaf|<\xf9\xcdn!z\xb3b=\xdb(x83\xa3u\xe3A=Cf\x94\xc2\xd20Z\xee\xd4\x01\x12\x19\xda\xa2 \xe7\xccb~\xc0\x19>}\x97\xa5\xbcT^\xb9\x81\xa3\xf8\x87\x19A\xfc \xb0+\xefg\x15Z\x13\xcaF2$\xa3\x8e\xb0\xc6C=\xa5;"q\xfd\x89\xc6&\x80\xae2\xe6\xcf\x84G\xbc\x07c\xde\x9d\xebU\xab\x9e\xa6(\x9fGy 0\x18\xa0\xb80j\xbc\xd8\xc2;\x9dQ\x9cW:\x9d-\x98\x08\x19\x08\x8b*\r7\x14\xad8\xe0\xef\xe7zVA\xc2\xd7mrQp\xe4!x\xfb\xce\xfdc\x98g\x1a\xf8~Yf\x9dU0\xd7m\x0f\xe0*A\xbe\xf2\x9d\xcc\x9a\x9d\xcbf\xb2\x87z\xf8\xe65\x8cL\xb2\xd5s\xb3\xf0/g\xee\xb7c\xb1v\x10\xaaw\xb1\x0cjJ\xfd\x1a\x80\xcfP~\xba*3\x8a\xd2i\xf59a\xa6\x16\t\xa4J*\xab\r\xcd\x8e\xaa^rG\xe6kTXJ\x9d \xa2\xc5n5\xf1c4kp\x8d\x92p\xa7\x97\x91\xc3\xf8\x7f\xeaN\x046-\'%=\xba\x9f_\x9b\x80\xb9-P\xd0n\xff\xdcdoT\xa0Ga\xe9G\xb7\xec\x12\x1c>\xff\x0bjb\xc1*\x1e\t\x90H\x8a\xf0c\xf9\x81>\x15}\xdfD\x9a\xac\x0c\xd3\xc4\x1e\r\x9b\xecR`G=\xb2\x05Mx\x9d\xa0\x87\xd6\xfbj\xcc\xc5\xef\xb02\x16\xc3e\xb4\x88\xc2\x01\xdc\xdb?\xa8\xa9\x87tC\xf5\x15\xef\x1dk\xc6j\xeb\x1f\xec\xcdl\xa4\xa3Aw\xaf\x1fj\x019j#\x10\xe1\x81$\xd6\xdf\xb3WXA\x95\xcf\xf1\xef\x03\xc3)\x11_\x98\xe1\xf4\x89\xc9iIt"\x12\xa5\x80\xa9v/\xafo\x86Z\x88\xf4\xaa&\xb7\xf8;\x15\xbdf\xa9\xdd\xdf\x892\xc9\xc3\xbfLed|\xb6R\xaa\xf9\xadb\xf5\x9f.\x85\ri\xea\xd9.\xe7\xb7J\xd1\xf9\x9f-\x11\x1d3@ \'r\x02\n1q\xd5\xfb\xce\xb8XN\x0cg=\xa6?z%\x8f\xef0\xad\r\xbe\x9b,z\xffUy\xd5\x033\xca8\x1c9\t\x18\xc3Q\xf4(\xadV6\r\x10\\\xcc2?,$.\\\xd4\x19\xb8*c\xd2Z\x1c\xc59\t\xad\x7f1\xa5\xbc\xb0\xed!\xca+\xc5\x04\xae\xde\x9b\x8a\xd4\x17\xa6)o\xcc5\x99f\xff<\x16\xe3\xe77\xaem\xf1!X\x13\x88+d\x98\xe0\x01\x90~\x9c\xee\xddA\xa4A\xe9\'\xd0(\xe4\xb7\xf6\xb4x\x81N\x14\x15\xf2\x83\xcfax\xeb\x0b\xfd\x8dJ\xdaZ\x1f(\x89\xd4\xce\xba\xcf[*lN&\x87\x16\xc3\xe2\xcfd%G\xe2\x08SG\x88H`U\xf0\x98A\xd4\xdb\x0bW\x94\xd0\xc81\x13\x06"\xfdq\xecXW}P\xdd\xc3\xd3uv\xd2#\xe1\xf3\x9d\x9b\x85l\xd2\xc9\'\x10Y7\xa7\x1f\xde-WiK\x18\xcf\xb5*\xe0\xa1"\x82\xc6\xee&rmW\xb7K\x8eq\x17\xa0k\x93\xd5\xff)Z\xeb\x07\x17r\xd9m\xff\xabt\x0e7\x1ej\x8d\xc3\xeb7\xfa\xb3\xdd\xc8u^v\xe4\xe38\xb9\xaf\xd0\xbc\xf3R\xd2\xc0\xc8\xde\x9f\\5\x13\xb3\xdb\x9fEV\xee\xc9\xe8\xe7\x15\x92\x8c\x074\x1b\x12\tc}im\xf9\x18\xb0i\x81pS\xa0\x98\xbb\x81\xd9\xa7[!\xd9t\xea\xd0\x95\x9c\x0f\x8d\xf0\x9b\t\xce:\xcf\x7f\\\xd3=\xd4\x9d\xdd\x00\xa9Ve\x9es}0^F\xb3\x8c\xb0\x9c\xf2\xfc\xc1\xee_I\xf7\x8a\xaa\x8a+\x95:\xea^\x1e\xb8\xbe|\\\xa8"\xfeg\x18\'\x1a[\xb8\xd4\xd4\x0e\xa4v7\x0cc\x05\xa9\xce\xe0\x1dp4\x05\xc7\xc6\x80*\x0e\x904\x9fn\xf3\x179\x17\x9ch\xbd\xcd(-}$\x98^4Q\xadh\x8f\xf6\x1e8g\xe7\x13@q\x16\xd7\x84\xf5#\x96V@\xf5o\xc3z\xc0\xc9\xa7\x8e\xa3\xd6w\xb0J{?\xcc\xce\x82\x1dc\xdev\xfc\xa6\xcf\xc8\xf3\x00%\x96\xe2\xd8\xcd\x17!l\xe7\xc9\x1d\xdfW\x82\x8c]`\xd0\xb5\x0b\xba\xc3\xe3\x99\x83\xb5[\xf9\'\xf2\xd0\xef\xfbF\xca)\xe7\xf0/l\t\xbb\xd5rR\xbb\xa0N\xef\xd1LW=2g\xde\xd91\x95_}\x8c\xf2\xd8[p\x14\xd6\xdb9f\x11\x04U\x8e\xe4\x94 \xba/\x94Qv\xe0\x13\x11r\x04[\xa1\xdeC\xbc\xdb\xbf\xd8\xb1\xb7\xbe\xa5\xe7b\x13\xafp\x88\x07S\xab\xd5\xb5\xe984m\xad\x8d\xaf\xc5\xd8\xd9\xab{\x90T\xeb_Dax\xd9\xdc\xcd\xc4z\xfa\xf0\xe1\xb6\x9c\xe1\xa66D>\xa4\xbd20\xe8:|#\xe5\xa6\xdbn\xe1\xe4\xdaA\xc8.\xbc@y\xd8\xadz\xa1Ii<W\x9a\xd88k\xd6\xb5\xca\xfd\xcf\x02S\x96.Cx\xa3\xbc\xde\x13zM\xcd\xe2\xc5\xe5\r\xd7\xc0jn9\xa9y\xbb\xa8o\xcb\x99\xae\xecv\xb99*4p\x8c\xad\x9c\xca*\x86\xac\xe4~s\\\x04\xaf\x00\xe3d+\x14\x92\xcbRTLSyJ#\x01pg[\xf4\x1b\x11ea\xe6\xaev\r\x8f\x11x\xf0\xac\xfe\x86\xb6\x88)\xaa\xcbA\xad\t}\x9aS\x8d\xfe\xb5[6#]m\x88\x1d$\xde\x85\xf7EJ\xc1\x9e\xe1\xd1\xaa\xd9\x9e\xf2\xb9\xe1\x8e[!\x9e\x1c\x0e5+g\x84M\x92\xfa\t\xa8\x89:\xa0\xb6.\xf3\xcb \x13/qE\x8bZG\x16k\xc0\x8ed\x91\xe8"\xb7\x80E\xe2Bf,E\xe3(\x97\xb4\xbb\xbe\x1f\xe5\xf4i\r\xb3\x8cckyh)\x00g\'\xe8\x93UO\x8b\xe5\xd1r\xfd\xf3\xb83]\xaa0\xa9zf\xac6\xc0\x96\xcas\xcb\xbc"\xf6\x1db\xc0\n\xba\r\xceM}\x84\xd7\x8c\xd2Nbz\xde\x12\x96\xdb\xa0V\xa0\xd3\xbe<\xd5\xde+!\x139\xf6\x80\xec\xa2\xe8Hx\xd5\xa0\xa31\xf6\xde\t\xa0=\x03RijC\xb8O\xd4@\xd0\x9f\xa4\xddO\x1c\x16>\x81\xc9\x05c\x1d\xb5n\xe0 /\xe18\xf8\xcar>v\x1c\xdfw\xed\xeeB\xea\xba2_\xa7\x97\xc2)\xb4\xcbA\\\xeeL\xaa\x89\xd9\xd6\xa4\x0f;{0\xac\xa1=\xfd\t\x07\xe4\x19\xe5&\x05\xd9\x1c\x04o\xa8\xcd\t8\x160\xf46gD\xba\xa9\x81\xbde\x99Lo\xda;E\x04\xd1\xb3\x1a\xf9_\xcb\x8f\xff\xf2\xa6\xf2\n\x93wl\xc34\xeaD9^\xe8+\xff\xce\xef*\x11XY\x8d\xc5\xd5Lx\xa1^qQ\xe9\xca\x1c,\x939\xd3\xa0\x14ZN3\xabN\x96\x8f\xaf\xe0\xb5\xeb\xccV{\xf1c\xbf\xc4$\x91{\xe5\xbc\xe2\x8d\x15\xab\x8e{\x0f\x86\xba.\x91-?3,8jKE`x\xf7\xa3yf\xedC+\xd3\x13\x81\xb5\\2\xc9\x0b-\x95\x86\xa2\xf2\xd8\xa6\xc3~L\xb8\xfa\x87\x0eG\xea\xb2r\xd1\xad\xc3\xd9\xd9\xfa\xd4\xa6[\x8f\x10\t!4a\t\xe7\xdc\xf0j\xa6\xac\xf4@I\xdbQ\xa6P=\xa4\x87Fl\xb0D"\x16E\x93~\xaf\x81\x12x\x05\x0cY\x13BM\xf6\x8c\x18\x15\x06:7d\xcd\x08\xc4\x93\x1e\xabhv\xbd\x19|\xab\xc6e\\\xb3yH\xba\xd4\x98U\x8c\xb2\x0f&ig!m\x87H|\xe6\x00P\x03q\x03\x87\xf5@\xcc\xe7\xf7\x1a\xb9\xfb\x8a\x1e(\xa3W\xf9\xc6\r\xe8\x9az\xcd\xe6\x1f\xaa\xcc\x7f\xe4\xf3@\x14\x1f\xa2\xd8\x0eD\xb7\x07\x9b\xf7\xc6?\x19\')Y\x89\xdf\xd7r\xdf\xac\x02\x8e\x8b\x96*\xab/\xe5c\xae\xb0\xcbHs\x83\xf0\xe0\xa6\xcd,\xd0\xf4\x85c\x1a+O\xdb\xbf\xc2S<\xd8B\x9c}\x92\xb3]\x84\xd8S\xe8x\\\xb4\x9f\xd4w\x1aN\xaa\xc3-\xe0\xc7B\x0f\x11\xf6\x8f\x8bs\xe1\xb7L\xbeS\xfb\xf2X\xd1\xab\xa1d\xda@\xe2 \xebGb\xc1\xc8\xe9*\xb7Vc&\xd3\x05\xea\xfeR\xc9i\xa9\x92S\xdc\x8a\xe5f\xcb"D(nV\x9f\x89\xae$\x86\x9b\xffg\xba\x86\xb7\x8c\xad\x02\x90z\x83\xb1\x97\xa0\x19?s\xf0\xab1\x04h\xec\xad\xfc\xb2Yq\x0b\\\xff\x18\x95\xa5\x11\xe2a\xba\xc15\xd5}{{\x8f\xa1\x13\xcd\xb8:\xa1t\xa1P%\x96\xd4\xb4\xca\xf0\x95&1\xe5]\x94B\x93n\x1aH/\x93\xa93\x89\xff\xe6{\xc5\x05y\xac\xb8\xa1\x9c\xdc\xd5i\xf0\xd8z\xf1\x81\xb9&\x03\xd0\x94\xff\xfd\xe61\x03 R\x10kE\x03\xae=F\xb2x\x8a\xde\xe9\x87&2\x08W\xc2\xa2\xd4\x16z_iY6*\xf6\xb2\x9f\x9d?\xde\xb4v\xaf\xdaQG\xc9\xa8Q`5W\x10JQ\xac\x15\xa5\x82\x08m\xab\x9b]c\x07\xd5T\xc4\xe6\x1d\xefO\xc3\xfd\xfc\xa6\xba;|\xe6\xb7xAT7\x14\xc3\x15\xf32\xa5\xac\xe4\x94\xff\xe8\xde\x9a\xc3\'\xaa\xa8\xc5\x1d\n\xb4\x11 \x9f\xfa\xa2c\x8cc\xe7\r P\x89\x102\xd1\xd4\xee\x01\x80ATGV\x14\x8a{\x8ak\x82\x1d\x97+T\xe5\x10c\xac\x0b;@\x17E\xc3\xdcY<\xb5\x81-\xa6\r\xaaoe\x12\x90\xd6`[\xee\xe5q\xcc\x03\x9a\xef\xefw\xd4\xef\xc5\xaer\x07\x1cK\x82\x1d\xbeIN\x9a,\xec\xce\x1eSk\x01cn\x0b^\xa4\xcc[\xba\xc1\x0bb\xa5*\x9aXh\x7f}\xa7\x04\x08\x15i\xeaI\x15\rb$\xec\x1cd\xcc\x9b\x11\xd1\x8f\x18\xce}\xfa\x98;\xa0\x83]b\xef\x83\xfe\xe2#p>\xf5\x8e\xb5\x8a\xb7\xb7m\xe5\xab\x95=\x8cL`\xd0X\xbd(\xdfS\xceO\xac>\xae\x0b\xb4\xfb\xf3E\x90s\xf0\xc6\x9e\x15F\'\xc1\xcf\x05\xb7i\xc7p\n4D\x84\x88\xe5\xc5\x12\x9d\x16\xfc\xab\xc1A\x86=\x1f\x0b\xb1\x16\xb1;-\xef\xb1\xb9B \xbf \r\xb2.\xa1\xe1Y\xdeK\xd10I\x8c\xa7\x90\xe2z\xf9%<\x9f\xd3\xa7\x92\xdb\xdf\xd6!\x13\xa4\'\x15\xbe\xf2u\xef\xa8D\xb3\x82\xe7v3\xc4\x94\x00\xd7p$\xd1q\xcc\xff\x87i\xe6A\xccR\xe4\xc0/\x0f<;\xa0|\xd6U\x14\x82\t\xe6\x8a\xe2i\xdb`U\x11\xd2\x82\x9f\xc9\xeco\x8f\x01\x98\x08H\xcd\x97\xc0pL6y\xc1\xa2aM2\x1e\xd2\x04\x12O\xe6\xf7\xa7\xd0\xba?"u\xb434\r)>#\x94\xcct\xce\xcaw\xc3\xd1\xfa\x1f\xee\xf2\xa5\xb5\xfa\x8c\xd4\xcfz\x03\xdb2\xd6\xd2\xa57\xc8\x1c\xa6\x9f\xdbkb/\xb9dZ\x80\xd8\xfb\xcb\xec\xb6!\xdb\x9c\xb7<\xdc\x8a\xcfo\x1f\x9cz\xc6\xa83\xee\\\x89\xe5\x1f4h\xcf\\\xd2gq\x0c\x9f\xebtq\x00\xe9\x9c\xce\xbc\xb7\x85\xfe8\x11`\x12\x87\xea4T\xdf\xcc\x92|\x8b\xc2S\xb6t\xfc,\xa7f\xe3n\xd0e\x8a\x06\xacVzT-\x96\x88BP(\xb1\xd5>\xbd\x801\xe6\x82\x0b\x903\x1b\xcd\xc5J\x82\x9e\xd1]\xeb\x99\x82\xda\xb7Sh!\xfd\xde\x18O\xbb\xde\x1e\xaefbEY\x8d\xbf\x95In\x03]J\x0b\x8c\xc2c\x10\x16\xa9\xa7.\xbf\xf0r_\xd9\xf6Mx\x1cl\xa6\xecsdh\x88\x16\xea\x04\x0f"Qu\xce\xb6\xbfe\x97a\xde4\x97#\x9d\xd1Z\x8c\x85\x86\x97LU\xf1\xadFq\xb0\xf6\x07\xe4Y"\xd1Wsr\x9e\r9\xb8\xd2*\xe6_*A\x88\x1c\xa5{\xfa-\n\xc4\xd3\xa2\x8c\xc6\xd5R\xfa\xbeS\x06\x03\xea\x06nvv\x88k\x91\xb3k\xfb\x9f\xb6\xdeS\xbd9J@\xfaM\x01\xe5&\x82Sm\x92\xd36g20\n\xff\xc2(/\xdep\x8b<T\x97(\xd9\xabn\xc4\xd7\x98\xeb\x01\xb2x~[L\xc8\x12\x08\xb2\x12IF\n\xcb\x93\x82\xb3"\x81\xa3\xa5\xbb;\xeb&\x17<\xd3|Z\x1d\x1d\xd8\x8d\x87\xfeY\xf86n\xc3\x9b/\xc0\x81\xdb\xe8\x05\xa1|\x9b|\xaf\xac\x9f_\x04\xd2<\x91\xbb\xd5\xc0\xba\xf2\x81\xb5\x00\x17\xd0N\x01\x13\xe8\xf0P\xee%\x03\xe3p_\xd8\x1b#>A?\xa2\x16\n\xca\x0bA\x16\xb2\xb0x\xc7?T\x01\\6\xfa\x1a\x96\x1e\xd2\xe2pi d\x13T\xacA^\xbe6\xe0r\xa3\x7fc\xc8\x89|8\xbf%\x8ex\xb4\xf4\xe4\xa4c?$\xe9\xe2\x1e\xb36\xc5\xd77X\x8b\'\x91\x10\x80.;\xdc\x82\xddc\xb1\xf1\x9d\xf0\xee\xf5\x97\xf2\xe8*\x97\xebC\xfbV\xd8Zha\xe3\xd8\x83V&\x95\x14KMp:\x921\x85\x9f\xf4`d\xac\xa8a~"\xf6g\x00\xd6\xa4q\xea\xad\xfb\xf3\x90\xc7\xab\xab\x8ep\x87VF\xd3\x14\x00}\xe6\x15?\xa0\xb4\xf4\xa5\xa6\xd2\xff\x0b\x00lVMQ\xa6?ag\x15\xf8\x1e\x9e\x8a\xef\x14\x14\xea\xaa\x102\x9a\xea\xba\xc1\xdaD\xaeb\x1c\xa2a\x1e\xe5\x96\xe3!\xa9\xb5\x13\xd7\x11\xdc\x08\xe4OJa\xc4\xdcc|\x02\x18\xd6\xde}\xf9J\xc1\x93\xe3\xdb\xe9XC\x98(e;\x8e\xd1z\xa8\xb3$G\x08\xb4\x88\xb1D\xa4\xd2r\xa1\xe2"sO\xf6\x07Z+\x82t\xdf\xec\x13\xce\x8ds8K\x89\x86\xc3\x7f\x9f\xa1\xd1\xcbK\x7f\xa8\x06oy\x9d\n\x1d\xa1#r\x01\x90\xad67B\xc0\xcd\xcfA\r\xd7UD\x16\xce#\xbd\xd7y\xed\x01?\x9d\xe4w\xaf\x96o\x9ai@\xe1dm\xe0\xd3\x8e\x8e\xc6\xfe\xe5!\x93^\x88\xe0\xca\x15\xb0JL\xac$\xfc\x1f\x84\xee:g\xb1\x9be3\x9d\xa5\xc4A\x03\xe3\t\x85FN\xb2$\x02\x98\xd1\xfcT\xfe)3\xea_.\xac.O0\xd4\xdc\xf4\'\xb3 \x0e%J\xc5n\xf3*\xe7\xdfD\xeb\x87\xa1\xa5\xbb;\x13$\'\xa9\x96`\xa1\xe5e\xc6\x96f\x1c/\xfb =\xe1F\xa0\xaeoAP\xb4\xe2\x16\xf7xE\xae\x85c\x9c(\x9b\\\xffGI\xd2\xcdVM\xa2\x85\xe2\xc3\xfc\x7f\xc6;\xb4\x16w\xd3A\x85\x044\x18<\x7f\xfc\x86\x1c\x94\x02B0\xa1m\x85\x8a$m0\x89\x8b\x8a\x01\x88\x89\xc3\x7fc\x83\x04\r\xd8`qH\x8b\xca\x93\x9e\x02\x7f\xad\xa5\xfedM\xf40\xac\xecY<\x95\xc0\x82&\x85\xd9U\x89O \xc4\xcf\x1d\xc9\x1b\xe5b\r\xfa\xf8\xa9n\xe5\xda\x073BW\xdb\xb71\xeb+$\xe6\x99\xe4\x9eA\xc7\n\xa5\x86\xc7\xe6%\xe6\x0b\xec\xf3\xe6\x19\xe4\x03S\xcb\x8a1\x94\xb1\x9a\xe9\xe0\xf5)3\x8b\xf3\xcd\x16\xacL5I\xf9\x06\xf5\xeaB\xd2\xeb}P\x08]{\xe7:\x01\xff\xcei\x10\xff\xd3\xe7T\xf6\xd0\x1aU\x17\xfb\x80\x85\x8f\xd0\xfb@\x82\xbc[\x0ea\x17\xdc\x98\xf3T\t\x9f\x1d\r\x85m\x8c6\'\xc7.T\x00\x8e\x7f\xf4\xd7\xd3OA\xdeR\x99\xf9\xa9\xd3\xc0\xfe\xa9\xaa\x92\xc6\x8c\x11\x85\xb2A\xfd\xe288\xf1\x91\x95\x18\xfd}\xde5\xe5\xcaV\xa0\t\xe3:d\xa8\x86r\\\xbd\xadoX&\xf6\xe8\x82\xbd\x97\xe7:5\xc0s\xf44\x9f5@c\xd0\x17\xa6\x19!4\x87X\xc3\xccw?\x9d\xe012Ef\x0f\x87\x85jWh\xca\xff\xd3\xd5\xf2Hpt\xc2\xa10"/\xe5\xf3y\xdco(\xbdrr\x10\xc8\xc0\x87\x86\xe3\x9dd\xfa\xde[o\xee\xd3\x92\x89\xbc\xb7\xaem \xa2q\xe0:\x82\xe3\xff\xe1|\xc3\xaap\x92\x1f\xbbEm\xf4q\xc43"\'\x93\xb5W\xb3\x9d9F\xda{\x91\x88\xfd\xfc\xe1\x8f\x16X\x8b\x8dl\x8e\xad\xef\xbbDVj~\x180\x9b\xcci`\xc2\xcc\xe9g\xbfS\xcaHl\x111T\n\xe9\xcd\x00\xee\xe3-\x9f(\xbbD\xf8\x9e3\xc9\x85\x8d#c\x96\xae\x10EtP\x07;&[\x13\xf0\xdcF?\x97\xa0[\x8d\xf7\xf8\xa1(\x99\x1c00\x99\x1e\x88\xc1O!\x90\x88\x16B\xecr$\xd1\rUD\xefEy(v\xc1t\x16\x87a\x0e\xa9\xb7~\xb8\x8fPTbK\r@\x82\x14H\xc2D\xc7\xd4~>\x96"\xf7C1EF\x8epF\x83\x95\xb96\xed\xf7h\xaa\x8c)b\xa4+\xbd\xd4\xe7\x8fE\xf7\xcaa\xac{\xe9\x9f\xbc\xffMN_N&\xcc\xba."#\xe0\xc8\xb0M\x91\xb2\x8e\xce\x91eA\xb0\td\x81\x13X\x9aOU\x8dA\x1f\x98keE\x81\xce\xcb\x8b??\xbd\xc6\xddA)s\x88\xc2m\xe0\xd4O\xaa\x89\xca\x11\xca\x12\x9a\xf4\xd0\xa5\x85\xb3\x14\xca\xe1"<\xda\xee\xceL4\xc9\x16E2\xaa\xcb\xf4"[\xfb\xd1\xccL\x04\xae\'\x1d\x10\xc2\xf9\xbb\xe7\xf3\xa8\xc0\xaf\x19\\~\x86\x9e\x93(\xd4\x11\x16k6\xb59$\xb6\xa0\xd7\xb8\x92\xbeA\x9d\xb7\xc7\x1c\x91\x0e\xab\x9a.\xa8v\x06Tw\x96\x9a\x06\x06$\xb1\x83\xfbe\xda8\x14\x00\xd4x\x94\'\x8c\x97\xab1\xee\x01\xc2B\xe8\x12%\x14X\xaf\xa2%>\xac\xd0 Cq/\xa9F\x1cv\x96\xa7O\xb5Y\xb9J\x01v\x0fbv\xd0\x8a\n\xec\xd2)]\xf3[Z\xda\x88\xb8!\xfe\r\x8f\x15\xd7\xe9\x86\x19\xb3\xa1\xab\x82\xe7 ;G\xd9C\xed\xa0\x80\xda\x16\x86`\xbaB\x11\xed[\x86\xc6\xc2\xaa\x10\x19\xcda\xd6\xa9;\xfeA]7\xc6+\x8ej\x01\x18kN\x06,n\x1a\x9d\'8z\x1c\'\x96\x95\x1dy26B\x80\xe2;\x13\xe2\xaa\xa4]\x9fkgO\xad,\xc1\xfd\x9dX\xbd\xdb03\xb9\xcc\x13\xb6\x1a1\xe3\xeb\x97\xe9\xa7\xad\xf4\x86u\xc5=\xdbX\x04\xa5\xa9\xb6\x08\xb8\x95K\x9e\xab\x1f\x99j\xf4\xc1\x8e\x90+!A2{\tP\x80\xd0;/\x15O\xb6?8Q\x11\xc8$\x06\x83\xa8\x98\xb7\x8fg\xa9\xf2\x1d\xca\xaeY\x9c\xa1aa)?\x9a\xbf!\x02"\xd8Y:9\xc4@\\\xb7\xa7f}8\xd5h`\x9c\x08@0\x0c\x80\xb8.\x14\xae\xf9!\x1d\x04\x83\xb9%%\xab!\x13\xaf\xd2\x04s\x9a\xa5\xb1\xaf\xa9+\x8b\xd7\xca\xdaF\x04\xf5\xcc\x1cJ\xb1\xad\xc4\xff@\xbc\xc2\xbd>\x0e\\\xebDK\xaaj\x86\xf5i+\xd7\xa4|(\x8e\xff[\x17\x03P\x1b\x08"\xfe(\x9aC\x04\xb8m\xb3\xf1\xde\xe2\xa9\xe8}\xa1\xdc\x01\xa1\xfe\xdf\x03\xa8\x98r\xb7\xd0\xf1\xadE0\xdb\xb0\xc0\x10w\xf0\n~\x8e\xaa(qWo2\xb2\xe7\x15\x1e\x81\xe8\xf8\xab\xeb\x85\x88\xc7]\xb3\x0e{\x1f\xf9pV\x0c+\x98\xaa\x99\xe8\x83\xf2\x83`\xe4\xb0\xf9I\x0f,\x03\xa33\xe2\x1e\xc6\xbb\x86\x16\x0e\x1a\xde\x04\xa70\xd0\xf1t\xe6\x94/\x7f\xee\xd9e\x90q\xa0I\x89\xcc\xf3)\xeaQT>\xdc6\xb1\xbe\xf62\xf2&.\n\x08\xd8\xe8\x81\xdaE\xff\xc6K\'\x83\x97\xe7\x8b\t\xfd\xc2?\xfaI\xf4\xb5\x8b2\x95R\x19\xa5\x9a[9\xcb\xb7.\xf6JD\x07\xb0i}h\xe8W\xd0.\x17\teN\x8f\x13f_\x893\x14F\x0f\x13\t\x9fNOL\x89\xfa\xc8\xae\xec\xe7jl2\xccF\xeb 1\x81\x82\x01\xee\xd4\rIo\x1a\x01\xbd\xccA\xf3\xd2L\xf8\xa8A\xee\x961\x0c\x9b\x06\xb6\xbd\x8b)\x15\xeay\x7f\x9cr\xf1~a\x9d8\xe6eQ\x1b\xaf\x15z~\x14B_\x83\x12\x18r\xac2\x17\xc5\xefk\x80!\x97\xfe\x89\x99\xe1\xee=\x00\xfdB\x11\xc9\x11\x1a7d\xb9\t|\xef\xd9BVg\xfaxM\x13\xca\xf2\x0e\xf6\x82\xaf"\xc2et\xa8l\xeb\x05\xe2:h\xe9\xbf\xa5\x8c8\x901\xe4\x9d\xc6\x1b\x07\xf6\xf8\xc3\nWQ5\x85,\x93\x92\x98\xf4F\xe7\xeb\x1cc\xf6W\xb9,\x05\xf8Uw\x98\xcfj\x8d\x8e\xdc\xe4*\x9b8\xe1\xcc\xe9/\xfaF\xcb\xa9\x8c\x97\xc7\x82:\x8d+\xa4\xe5#\xdd\xecH\xf1p\xa1\x03\xa5\x92\x00(\x7f\xd4\\\xa3\x84\xc4\xaf\xa31\xf8\xed\xb3\xa3\xe9b.>D\xe4t\x9a\xed\t\x84\x90/Z\xfa\xb6/\x13L\xcb\x9a\x9bn\x87\xa8\n\xae0-oj\x8b\x98\xf7\xa8~\xed{\x87f\x15\x9aE:\x97\x1a\xa0\xfe= \xc5F\x92O6\x99!\xa7\xef\xda}\xf4\xc5\xfa\x0cR`\xa5\xe0\x91\x98c\x12\x8c\x06\x01\xb8\xb6%\x9d\x99^f\xa6\x98ym\x05\x1dd!U}@\x87\xcbK\xca\x11,g\x81\xe4|\xaa\x0eS\xdbLR\x02Q[X\x9fF\xb5\xadR/:a\xafn\xc7\x16(3\xae;\xed\x9f\xc4\x13:\x9b\xa9p\xbe\xd8\x1d\'\xc9v\xf9c\x1f\xc7\xdc`(\r1\xf0e\xa9!\x81~\xc5\xfbl\x16!\x99\xd7\xd6]<\xb8\x82v\xd0\x8cL\x86\xe0\x19pP\x0e\')\xcc\xeaK\xfd\xd6=dG}(X\xf1+vf\xc0\xb4K\x9d-J\x81E\xa9\x8d\x1eJ\x7f\xb3\xfc\nks\xf4\x0f{\xf4\xc0H\xdb\x10\xe06\xd1\xe9\x80\x97\x0be\xa1\x94\xf3\xa5\\\xa1z\xb1u\x1b\x06R\xfay\xe79,\xd2\xe5M\x893\xe3\x8f\xde\xdcM\xb4\x0f\x89\xb6\xfa\x0b\xec\x94o\x06\xd0p\x1f\xb2\x9b\xf3\xb1\xc0\xc8\xe4\x15\x85z\x92\x9a\xa96\xc9\nj\xf2\x88\xea\x843\x8b\xe0\xec\x19\xe7\x9a#\x1c\xa6\xa2-\xf8\x84\x81\x16c\xeb\x94\xb5\xcei\x9bA\xeaND<\x85\x83\xe7\xf9\x13x\x9fC\x0b\x00\xa8\xcf&\xb3\x97\xef\xa6\xeb\xa0\x93u\xde\x98\xba\xaa\x1eG\x0c\xe3\xb3F;\xe85\xc3l\xa2\xbd\xa6\xdf\x9eG\xaa\xd4\x19t_\x87\x10\x9am\xbb7@\x8a\xfaR7B\x8c\xdd\x14\xdd(\xbc\xaa{,"\x14\xaf\xb1\x17s\xe7\x18\x9ab\\\xcd\xa2u\x82*\x14\xa6\xa2\x1a\x81s\xd6\x1c\x99\xffv\x82\x82&o\x86\x0b\xf0\x9d\x8c\xfa\x8bU\xfe\x9d# \xb9fdQ\xd6?\x85\xd7\xba\xd0\x14\xa9i H\xc54>\xf0k\x12\xdaaT3\xc5\x13@0\xf4\xd3\x97f)\xc7\x9e\x1f\xd0Va@;\xb3M52\x0f\x01\xc8$\x95rUl&\t\xeb\xfdl\x15!5\x02\x94>\x93\x05\xb3l\\\xb4\xe6\xd2j\xc0\xf2\xf5S\x7fB\xf7\xd3V\xe6\xa9o\xc1\xcfd`k.\xa1\xd0\x91\xf3\xe4@o\x99aPU`\x13\xfe?.\xd2M\xf4~ 9\xb8\x97\x90\x8f\x13Es\xa1\xd1C\xf4\x18Qj\x1b\xd2i|RF\xb5\xa2\xc9\x8aY\x9fd\xca\x00\xe4PD*\xc94\xc6\xff\x95\xaa4\xd7C*\x86.P\x85\xe9\xc8>\x87\\\xa6\xd3!UXW\xb7\x1f\n2/\xee.m5\xd3\xffP\xa6\x12\xd9\x93\x07\xb0n!\x7fw\xbf\x1dq\xc1\x056\x82\xaeY&[\xe4\t!\x85/\xbc\xe3\x993\xcfg\xf5(/8\x01#\xc6\xbebI\xe9\xcd\x0b\x9e\x00hK4\x97\xb9s=\x8c\xd9\x07\xd5\xbb>|\xaaQ\x98D\xd4\xd5\x88v\x81\xd5M\xc1\xfc\xd4\xf2u\x05\xa5N\xdbe\xe3l\x08\xd8\xd9\xecD\x9c\x87\xc0\x9d\xe2\x05\xdc\x80\xfei4\xf7\xf5\x8da\x81\x02\xf3\xe6\xdf\xb3\x17\xc3\x9e\xa7!\xd1 \xee{\x194\xe7"0\xf9\xf6\xef\xdd\x021\xd4\x0fh\xf4E\xc5\\\xe4\xd5\xc5:\xd0f\xab\x1c\xc1|\xc0\x06u\x931K\xa6\xc1\x1c7l\xae\xe04\x15X\xd0f\x95{.\xadI\xab~\xb4\x16c\xe7\xa7\xb8\x1b\xd5(\xa4\x8a\x7f\x95JCy\xc7\x87\x8a\xfc\x86*\xeeh\xdf~B\xe2\r`\xb0\xbcK\x8f\xbd\xd3\xe34|\xd4\xcb\xac;L\xc9\x06^;\xde\x1d}\x1b\x1c\x9e\x84\x13|\x186k\xa6t\x96\xd6F1\x87*4\xf3\xfa/\x8f\xaangVC\x10\xdc\x05\xb0\x1f\xb7\xd93%\xf7*(\x85\x94y\xdb\xa4\x16:{\xb1ow\x02"\xf8\':\xf0c\x02\x1f\xad\xffH\xc6\x1d.\x1e<\x8d\x18\r>o\xe7i\x00i\xeb\xaa\xe3)\n\x07\xfe\x08\x14Ak\x05\xc7\xef\xbd\xc1G\xab\xd8\xedI\xe1\xdd\xae,\x83\xc52\xbc\x8d\x9e\x96\x05\x90\xda0\xcc\n\xa2\xa0\xcc\x0c\x8bp\xabe\xc3B\x03\xba\x8a_a\x84K\x15\x81j<\xda\xe6^\xf8o\xa6\xe3\x0bb\xcc\xf9\xad\x95\x88L\xdeU\xb5-P\xdd\xc7\x1f\x06\x8ea\xa3&bg\xc6\xfe\x12\\\xf89,\xdb\x87\xc5Z\xbf\xca\x12f\x8eB[\x9a\xb2\x7f\x80\xaa\x19\x13\'\x9b\x87\x1e\xa4\xbd\x93\x97\x92NL\xe7\x83\xa3\xfb3\x93\x0c\xc3k\xb4\xa3\xab\xf7\xbdU\xa6\xbc5\xaby \x9e\x0c\xd8g\xed\xd3e|\xbbx\x9e \xa4\x80\xd9\xc6\xa2a,\xb9\x85\x13\xeb(\xfe\x9f\xeb_\xf7\x00\x18\xda\xba\x04B\xe6\x86\x062\xce\xcd6\x16\xc3\x85\x14\xdcU\xf2\xb1\xa4\x90\x08\x00\x9e@>\xfa{\xe7 \x94 \x8fq\x8b\xa9\xe6ae\x17\xb9C\xd3W\x89u\x90tT\x15\xf1F`\x90\x16l\xcd-\xf1\xc6\x1b4.@\xd8\x0b\xa9\xd6V \x9b\x07\x9fo\x83\xbe\x12\xb6\x96\xca\x90\xda\xca\xf2\xb1\xacW\xb3w8\xce\x9e\x12q\\\xc6,\xa2\x18\xc1#\xa4)\xfaz^\xe5\xa0vJ,\x98\x0c\xfd\xe7B\xf8\\X\xae3\x9a\xfc\x0e7\xc9W\xe6\xe0 W\xfc\xe2\xdd\xd0\x86\xdc\x0fCV\xa2\xb8\xf2\xdbkS\x90\xb0\x96\xd6\xbfx\xf0\xca0:\x0c\xf7\x1d\x90\x15\x02\x04\x86>i/\xd4Q\xa5\x92Zy\xc0Y\x8f\xa7^W\xc2\xe4\x00\xa7l3\x86"^J-7\xba\xa0\x1c\xb8\x8a\xf1\x11L\xa0\xda\x1b\xcc\x8c\xc1~\xadh\xef<\xf6\xec\xdd\t\xc9\x1a\xeb\xf1U\xd8\x13\xd6-\xbf\r\x16_fx\xb8\x9a\xd7\x01\xea\xc2\xceZ\x83\xfc\x9c\n\xd1\xd1\x9a\x14\xdd\x99v\x89\xbb+\xf5J\x14\xee\xf6yx\xca\xb5\xd4\xa5U\xd1\x92{\xdc7\xc8\xac\x98\xfe\xb1\xc8\xf2K\\\x82\xcc\xff\x89@t\x00o\xda\xc2\xa8\xa9\xa0\x89\xa7q\x86g/\xcd\xf5\x03\xff\x13\xd0!p\xa0)\x87\x7f\xc80,\xf5\xd9\xfc\xd6\x13e4\xa2\xe3\x04\xdf)\xd0oD2\xf9\xe8\xe1\x0f9\xc4l\n_\xdb\xb7\x9bM&\'\xbd\xa5F\x86\xf5\x85\xfe%\xe3\xd0\xc0\x87\xa4\xb4\xcb\xd1\xfd\xa83A!\x03\xeb\xdcN\x93Y#.\xae\xdb<\x7f@\xe0\x16\xcbU\xa8\xd5=\xa6\x1a\xbcN\x88;e\x15\xa59\xa6\xbe\\@)\xc5\xce\xc4\x15yq\x1c\xab\xe6\xfd\x8a\xe7\x1e\xafc/\x13!\xebtP\xef\x96/\x14\x92\xd6\x85\xff\xdef!\xaa\x05\xfc\x10\xb2\xb7\n\x07\x98iW\x0f9\xf8/D\x01\xad0\xfa\xf7\t8VS\xb4z\xa1V\x1a\xdcT\x86\xb1\xb4\n\xd8\x16lo\xc7\xd1\xd0\xb9H\x81\x0f\xa8\x95nJ\x089p\x8f\xb2\xd8)0\xb4\x07\xc1Q\x94\x1d\xba\x1e~GO\x03\xf4\x98\xd0\xc6\xdf\x14\xd6\x1da\xa1\xd1\xdbq$\xff\x87h\xb1zW\x1b_\xb2FuSrkt\x81\'`a\x8b\x0c\x86\xfe\xd17Q6I?\r-\xdc6C..#S$\x05\x91<\xf9O\xf6\xc3\xef\x03\xfa&\x8c\xc0\xfa\xdf\x10\x93r\xde3E\x078\x08\xc95\xcb\x9e\x02(\x84&\xb3\xe4wH+S\x99\xf6\xd4q\x81\x7f\xfe\xcb\xdf\xe9\xb13t\xc21\x99\xd5\xd1\xa2\xe4\xf8\xc3W\xe2\xf4\xe3\\\xb7%G\xe0\t\xa7\xaa\xe5^\xfe\xb7\x04i\xf7g\xc8\xd4\x1eH\x10\x1b\xad1\xd2\xb5yO\t\x84\xd2]\xe0\xaf\xe7o\xca^\x9f\xc3\xee\xbe\x97\xe42\xe0\xefL\x94\xe9\x0e\x803\xe3\xdc\x91\xd2\x03\x04\xaf\x80\x80\xcb\x8d\x07\xba\xacs\xf3\xb7+\xb1\xa2\x875\x04\xf3\x02X\xa8gb}\xa9\x02G\xbd\x9c\x8fX\x8a\x8b\x16N\xafH\x94\xe09\xfb\x01cys&\x8f!}G\x087\x98\x97.Z\x81\x1c\x14)\xeb+\xf2\xe36^\x99}\xd7\x02o\xb3(4`\xde\x1a\xed\x84B#ga\x1a \x07\xdef\xc9$\xdd\xeb\xe5Y\x83\xbf\x01\x9c\xf6\x1c\xc56\x10.\xc6\x8b\x0f\xa7$0\xab/\x0b6 V\xf0U\xcb=\x0c\xd1e9v[\xf12q\xab2_2\xf9s\xcc<\xc3\xd1\xf5\xec0\xc9\xef\x12p\x0c\x0f\x99\x0fD\xc1j\n\xb0rE\x9a\xef|g\x9b>-\xbc\x90AS3X\x06\xd1S\x06\xaa\x9c\xfdU\xd7\xbf\xf1\xfc\xe9\xaa\x12a7\x07\x05\xef,\xe9\xc3\xae\xee6\xd8\x19\xc4\xd6d\x0fm\xd6i\x9eU\x00/\x86\xc0\x1f0\xe6F\xee\x05B\xe0+\x97"\x0c\xf1\xddTq\xb5I\x93\xc2@\x1f8H\x19Q\xa5N\x84\x90~k\xcd\x07\x9bY45m\xd0\x87\x1a0f\xb9\xc9\xbe\x99\xab\x8d\xd3\x9e\xf1zR5\xc2\x9b\x1f"\x16@\x9a=\xa5\xe3\x19T\x81\xe9\xf4\xea\x16E\xf9\x96\x07\x13\x96*\x89\xc7\x01N\x8f\xa5\xb0\x15\xc5\x00/\xaba~\x1aZM\xe7y\x06\xd8\x1f\xb1d\xe5\xc7\xef\x86?\n>\x93\xeb_\r\xb3Qp\xca\x9b\x02E\x97\xe1b\xd0\'\x8a\xe8\xff\xcd6\xe6(X\xb6J\xa2\x95o\xb7#`0\x15\x0c\xc1\xf6\x17El\xad"\x04JG\x1bj/\x9c\x85Ii\x1c&*\x81\x1eT\x02\xab\x9d^\x0e\x1e\x87\xb3\x8c\x13\xf8X\xd6*s\x15\x86R\xd3\xb5S\x80\xb3\xf1<\xdf\xc8\x90{\xa2l\xf1\xbe@7/Msm\x16\x94D\x87\xd4\xb5\xee\xb0\xa8!\x1b\xdc*)\xafc\x163\xdaB\x84h\xf5\xa8\x89\x7f\xbd\x02\xb0\x1e\xe1\x922\xea\x91\n\x91\xf1|dI\xc1\x94\xdf\xef\x99\xf8\x96\xd2\xe3\x0c-Q%Z\x1e\xb7\xa0\xac\xe5\xd0\xcf\xe5\x1ec\x0c`\xb6\xc22\xe7\xbc\xc3\x078Q6\x80i*A\xbb\xd8\xcd\x94\xc4E\xaa\xa5WDy\xa3\x87\x8e\xac\x9b\x81`\xf52N\xf6}\xec\xa3\xc2\x87y\x14\xd1\x01g\x9ec\xb5\n`\xa8l\x9a\x80\x8d\xbf\t5\n\xc9\xba\xb9\xafx~\xb7Tr\xbd\x01\xf5\xbcv\x0b\xb0\xbc\x0e\xec\xfd?K/hv!\x13\x1e\xa2\x0b[O\x93\x96\xecEm\xabI\xc5\xb6\xe7\x15\x9d\xc8%\xd3z\xa1aMVL\xb6\xad\x97\xc2\x95\x8bn\xdf\xcc\x95\x03N\xcc\x18\xbd5\xd5@\xc4\xb4W\xe6h\xca\xad\xecnx\xbcb\xfep\xe2\xab\x04\xcfd5ur\xee\xd0\xbf\xf9L\xc0 \xa9*\x83I\x8c\x01]\xe1y3\x14\x81\x96\xbcu\r\xda\xce\xd73\x0c\x10\xd2\xd0\xbd%*\xcf\xa7n\xe3S\xff\xdb\xcdy\xb1\xbe?\x9f\x1a\x8a\xd2\x13\xfbW\x1e\td\xb2\x99\xb5\x8c\x99\xa9/9j\xd4!\x8b\\\xc7\xc4\xb3t\x1f;6\xa6*\xb4\xff\xa2\xac\xd5\xf2&\xd3\xf5\xc5\x8bs\xb5\xc7c\x9br\xb0\xdd/\x18\xa8k\xc9pl\xdb\xdcH?*tr\x14\xa9\xb4\xe8\xd2\x88_\x16\xd8Y\xfe\xc8\x94\xe8\xf5?\xcd\xcb#\xedtr\t\xd5|op6\xff\xfb\xb8\x83K\x16\xb4Z]\xd7c\x8e\xd7Z8\x10\xd0\x05\x0c\xf5\xc7{yx\xdd9\x01\xbe\x88\x8f:\xe1\xe0\x7fV\xf4\xb5\xb2\x8b\xa0\xd5_=\xc3\xb7\xbf{7\r`K\xec\xf9\x8de\xecu\xc8\xcd\xf8Y\x90\xa1l\x89H\xbc:"\xdfV\xb0\xde\xeeRw\x02\x1d\xb9\x18(\x80\xba\xb3\xcc\xce\x8dg.\xf2\xfa\x90\xad\xf5v\xad\xfe\xcb\x9e\xd4za\xe1\x97a\x07\x80_\xf0"O)\x15\xa9\xc3\xdaI\xe1\xdf5A\xd1\x924`uPV\xd5\xd4\xe7\xcd\x8d\x98o\xe7\x034\xde\xcf\xc8\x99\x14E\xcc\xe9\xac\xf0,\xe4\xfb\x99\xcb\xee5\xf9\x85\xf9j&6\x9f\xb6\xf4T%\xdb\xfbQ\xd6\x0eEl/\x84/\xbbr\xbec \xc0\xc4\xd3L\xebJ\xa7\x94\x98\xba\x0c\xaf\xdf\xbb\xb6\xddj\x8c\xcf\xa6\x0cOgl\xfd\x03\xd0\xb0\x8f\xe9m\xc9\xa6\r\x04\xd2\xf3{\xa6\xa2\xdf\xdfR\x07\xfc\xc6`D\xe8Te\x8c;\xbc\xb3YK}vy\xa1\xab\x81\x1e&\xe2\x9d\xc6.i\xc6W\xe0\x9f\xe7\xb5\x19\xb8+\xc1\xa4Ab03\x9e\x18\xb5I\x17\x90\xb3D"\xe5\xaf\xec^nM\x9b\x0f:\xc0\x1f\x7f\xacG>p\xa6\x08T\x91\xdd\x92\x8c\xcf\xfa\xd6\x9f\x99\xd6F\xe7\x86tb\x9e\xdf*8 \xf3\x8fB\x0c\xacKZa\xf37\xc1YC?_\xa6\xc5J\xcb\x0b\x1e@3\xdd\\<]F"\xbcp\x8c14\xa0\x07Y\xa9M\x18\x11\x9a\x8f\x8c\xed\x8c\x91\n\n{\x98\xc4[E\x00#2\x15[Kb\xb4D\x18\x86\x92;B\xf7n\x89\x92m%h{\xf3\x02\x04\xeeZ\xc1rq\x96\xc3\xf7\x0c\xa96\xbeki\x80\x88\x1a?\xb2\x94n0\'C\x81<\x86\x03o2\xd2I\xc8rd.\xd1Gv\xd5\xcbM\xe9\xa8\xa9\xd1\xa0\x8b\xf2\xbb\'U\xc3\x9c\x9f\xf0\x05\x89\xf2\xe2[\xe4\xe0:\xa1N\x05F&\x00\\A{\x80k:\xdb\xc8\xe5\xf2\x85\xab5\xaf\x1bk\xcb"\x0f"\x00\x11\xb6\x16<\xbf\xdc\x81\x1c-I\x18\xbc{Pr\xb520\x103\x7f\xc7\xfav^\xc6\xd5\xdfsD\xc0\xa4\xe0rF\xbc\x85\x19\xe2j\x1b\x96x\xc7z\x90\xb8\x02\x07\x1c4\xe9\x8ff\xcb\xc9^\x83\xba\x18\xf5\x0c+\xa3"\xf6U\xca\xb7M}6\x8b\xdb\xb1\xa7\xd2Z\xfcZ\xc1(MO\xfe\x91q\xfa\x8f\x8e%\xd0L\xcd#U\x7f\xce\xca\x05z\xd7\x0e\xf9\x04;T\x86c\xf9\x15\xab\xb9\xec\n\xb6W\xe3\xf0\xa1\x7fbJ-\x16\xe5<\x11s\xffG\xdc]{\xf3\x9dU\xd8\xa8\xa8\x12"\xde\xd1s\xd8\xa9\xc4\x9bI\xceF9\x96]b\xb5\xb6\x8e\xdc\x94Rp\x19]\xc4\xfd\xd2=\xb1=Hd&\x93\xf8\x9a\x01\x7fWI\xaa\xfd\xd5\xf3\xb6\x00\xf5\xfb\x13ZzJ~\x10*\xcc\xd9\xbcU\xa3\xe0\xbb\xb62\xc0of\xb6\x8c\xb0\xfc\x83\xcdN\x19B\xf27\xe3_\xc5\xc8\x838"\xd15|o\x0eGbO\x08\x82\x8e9\x15j\x9cY\x8d\xbe\x0e\x19\x1fN\xb1\x82K\x11\x1d\x0e\xe9t\xed\xb9\xf2\x07\x9bq\x9a6\x9d\x80\x87\xcaP\x90,\xee\xffX\xd7\xc4\xcf\xbcd\xd0\xe2\xda\xc70rCv\x1ayj\xe4\xb9gC\x16\xa4\xca\xa1\x0en\xbf\xd6m\xb6\x88\xdf\xf4)\xfc!\xcf\xfbJ\x98\xa7\xa5\xd1\x1e%\xbfX\x8a\x1a\x88\x11\xe2\x85\xc8h7\xb5\xf1\xec\xf8\xcd\xf4mX\xe8\x12\t#\x99\x05M\x00\x82\xce\xe1E\xdeV\x84\t4\x08T\xbe\xc1\xab.\x80\xfb\xc7\xd0\xc7\xed\xda\x86M\xa8s\xff\xb1!!\xdc\x93K\x03# ]i\xdd\x0cK)\xef\x14\x81\xc7\xcd\xfd\xcc\x13c\x03x\x91)\xf9\x7f\xdd[\x121\xb5\xcb\xf7\xf5w&Dg1}\x1a\n\x17\x0c\xb2\xd4\xa8B]\xabAy\xfd\xee&2-L;Q]\x8cS=\x1f%/\xa2\xb5\xe9l\xfb.\xd1G\x05\x8b\xf1U\x95\xeb\xdd\x91{\x944\xc1\xbe\xb7\xba\xc4L\xe4\xe0C\xc3\xa2fW\x97%\xe3I|\xea\xf1d\x93\xd8\x18:\xf2(\xa1\xbd\x87\xfd(\x1b\xd6\xf1\x12\xeaF\xa30\xd4\xf59\xb8G\x84\xdd\x96u9}\xa1DL\x1bS\xdf\xe8\x86*\xaf\x00G\xdc\xd5\xb8\x82\xe6\xbe\xa8!\xdcI\x0f+Mg\xc6o(\xfawK\xf5\x19\x9e\x84;\xc7f\xeb\xd6\xbd&dD\\\xe2\x05\x0bv\xc3V1\x1ci\xa8)\xee\xd87run\x00m\x98H\xe6\xc1\xb2#\x99\x9f\xf7Q\x174M\x01*\x0f\x17\x1a\xde\xaa\x8e\x97\x1dp\xe4\xfar\xd9F\xd6\x0e\xffo\xde\x89\x07\xccW\xcd5\x0f\x88\x83U-\'\xc6\'\x93e\xf2(\x17W\xedU\x91\t/\xc7\xae\xcdY\x1eqll\xb2\xbf\x1c/\xb9\x1c\xc3X\xd3\x8b\xb1\xdd\x81\x16u\xc9\x98\xb6\x97\x83\xd7\xf8\x9f\xc12\x8d\xea\x97:x\xa1\xefj\xea@\xccB\x1e\x89\xc2;\x80\x9b\n\xf0q\x18\xd7\xb2a`\x18:\xf8\x1e7\xe2\xd7\xf6N_=\xff\x8da\xb3\x9c\xcc\xed\x14\xd11\x12\r\xfb(\xa1\x15ptv\x8f,\x12jK\xa1\xe9A\xfb\x9fL\x19.\xd6\xdf!\x8a\xa9\xbb\xec\x0f$v\'O\x00qd\xcb\x17&\xca\x0f\x93\x18tIS\xbcK\xa3\x8b\x92sQ:$\xf2\xfd\xa4\x02_\'<+`\x1b\x7f4\xf8\xdd%\xeah\x13\xa48![\x06ebn\x1b(Z\x99f \xca@\xcd\xcf\xe1\xbe\xe8V\x90\x96\xbf\x05\x9f\x89\x0e\xcd\x14\x91\xa1\xf9\xcf\xcb\x88\xef\x0bB7%\x10\x8fH\xa2}\x14\x97\xe2\x9c\xde1\x82\x07\xdd\x1cT\x0e\xd1U\x0e`\x85\xbf-\n\x07\xa0\'G\x1e\x9d#^\x95u\xf9\x82\xa8H\x1e\xa3H\x9d\xf0%VJXo\x9dF\xa5"L\xa7\x83\x1d\xef\xfa\xff\xb1\xf1(a\xc0T`\x92\tP\x03\x17\x87\x9b\xa7\xbb\xf3h\x1b=\xa0\xdd]\xc3\xe4>\xaf"ff]\r\xd6\xe2\xb6[0\'Ly\xc0uc\x80t\xd2\x14\xc7\x0cC\x95!x\x0c\xfbT\xb7@n\x01\x08D\xb6\xe0\xa6\xa2i_>\x8b9\xd0\x11+\xa3l\xf9L\xb0\xf8c7\x08\xcee\xc2\x9a`\x00B(\xd1\xf9\xa7\x0f\xdb\xde\xb8\x83#\x92\xca\xda\xe7\x8a!\xc2\xe0A!\xb5\xf4?\xa5\xce\x08\xf3(\xccbYtA[\xb1\x98&=\xc6$"y\xdc+Y>C\x97\xa4M0\x1a\xc46\xb3\xad9\x82\xc5j;\xf0\x1c\tH\x9e\xee\x08\x03\xaa\xad\x13\xf5\xa6\x1b\'\xcdY\xc0C#\x9d\x11\xb6\xb6\x8e\xa0\xf4\xb7O\xfd\xd10\xd7z/]M(\x85\xd6\x1e1q}3zQ\r\x8d\x10sE\xb2\x05u\rV\x1d\xe3\xe17YY\x03\n\xd1;Hs`\xa00\x8d\xf4Uv\xb7H\xb6=\x8b\xafp7 av\nA\xa4+B\x9f\xf7\xf1\xbf\xe8\xfb\xddp\x14\xb4/e8\xcb\xb7R"\xcc\x1aR\xe0\x1c\xd0kr\x1e\x15\xa2\x0f\x97h[\x9a%\x8f\xab\xfe,\xea\xbb\x0c\x93\xe5\xb4\xbf\x9c\xab\x8c\x00M\xbc\x7fL\xc3\x82\xc9\xa0$4\xd4\xad3h\xc0\x9b\x1am\xda\x03rK=\xa6\xd2vH\xdcz\xa4\xab\x14\x91\xea\t\xe5\xd7\tq\x12\xb4\x97\xfc\xcb\xd1\xea\x1f\xa8\x80\xc0~\x9cmI\x9b\xdfj\x1b\xc6\xa6%1\xf8\x85\x16wT\x8f\x83\x80\x9e\xfdY\x92vCLTQ\xb0(V \x01M\x1d\xdf-\xa36\xf6{\x91\x8aVl\xabMK\x9ej\xbf/\xfc\xceM|\x0ce\xd3\x96\x0c-C\xd3l\rz\x1fK\xae\xe9Nu\x85p\xa0hm\xa9\xee7O#\xabm\rJ\xdc<\xe0\xc1\x16w\xae@\x17Y]\x0f\x91gH\x19\x1a\xc5OpEZ\xf7agU/6n\x98\x85W\x10\xdf\xdfV8\xf1\x11,\x1b\x99\x15o\xfc\xdc\x81&\xcfoH8\xc4\xb4\x1e\x92I\xee\x9f\xe4\x14*f\xeb\xd8\xdd\xfc\xdb\xdeA\xaa\xcd\x1d\xd7\xe3]\xea\x82\\\xd7\xc0w\xa4\xa5v\xbc\x92mTs\x99\xbf6\xcb\xbb[\n\xb5\xb3(\xf6\xca\x1b\x13\x14\xa1\x82\xebO\x87lfp\xedh\x87\x04\xc4\xb5\x8eRc\x88\x85\xb5\xc4\xe3\x1f\xb4\x8d\'\xf6\xd2\xbd\xc6\x8e\xe8Cd\xe60v\xd9\xaeB\xef8\xae|\xf00\x03\x0c\xf8\xdf}A\x04\xdf9Gs\x15\x99\x1a\x12[\xb6r\xa2&\xa3\xea\x18\x83\x0c`\x12\x02\x87\xf0&\xc0\xb7x\xa4\xd5\xa1\x93Q\'\xa7\x8e\t0\xef\xc3\x91CL\x17\xf2b\xaer\xaa@\xfe\xc9\xd5\x13%\xc9\xbe\xf4X\xcf\x92\x03O\x08\xa6\xd8\xe0\x92\xa6\x0c7\xa3>?\x0e\xbd\xc2\x0bY\x1e\xaf\xc5N,\xda\xef\xf9p\x13*\x91\xc4\x8f\xbaR\xc1\xf2%1j \xa3\x97\x1e8\xde\x93\x9b\xfadg\x0c\x18\xa3|\xde\x8f\x1c>\xa2\x1a\xb2\x9ec\x89>\xb8Z\x0f\x01\xea\xf7\xba\xf7E\xe8tL<\xf2\x9a\xcc_O\xf2f\x1d\xc55\xa2\xf8~2\x12$\x12\xdb@^H\xa0\xbf\x0c\xc7\x9d\x0c}S\xbeN\xfb\x1e\x07\xcfC\xdd\x16\t\xe0\xbd.\x1b\xa3K\xe7\x0f\xedk\x93\xdf\xebTE\xfd\x11b\xecw\x9ez\x9b\xb8 \x9c\xa2\x15?lD\x18\xd2\xa9\x0c\xe1\x80\xde\xc2U\xden\nr\x940\x80\xfb\x90=\xa3\xf3kB\xc1\x90B\xd7F\xf9r51\n\xc9\xbb\xadp\\_\x05\xba\xbeP\xd5#l\xc3\xbc\x93^3O\x83\x8cb0\xf0\xb5_\x1e\xc71\xe6\xa7\x0b\x0fD\xd5\xc5\xd1&\x0f\xe3~}\xfe\x07\x9e\xc0Y5~8dW\x00\x97|\x9a\xf4\xc1\xd3\xa6\xc2\x8b\x150P\xc4}\xf7\xe8\x171\xd64\xbb\x88\x0fvo\xfd\x0e\x9c\xd7\xbd\xe2rs\xe4}S&=v*y\x06\x05\xbb\x05\xe4\x87q\xdaTR\x14o\xd9\x84\xf9#\xc7\x88\xd5\x81(\xf6\xf1sd\x7f\x17Yi\x8c\xaaw*\xb0\xa5\xd5^\x99_+\xe6\xf9\x8el\x11\x1a(\n\xc7\xdb\xc1\xc0\xca\xa0\xb7{\xb5w=u>j\x06\x8f\xab\x1b|(\xd3o\xbf\xe1:R\xf4s\xa5\xe7\xad\x85\xec\x18\xcdml!G\x91s\xe1B\x84\xd1gFz\xe5\x96*\x90\xfb\x83\x95\xcb\x97\x02S\xf1\x80e\x94\xdf\xbf\xdb\x85}\x88\x14\xbe\xa0\x91\x8eH\xe0\x8c\x83\x10OM?\xe4\xb2.\x01\x84\xd4i\xa3G\xdem\xd5h\x9en{m\x0e\'\x08|\x16\x12ZF\x17\xd0\x07`\x95\xe4M\x9fy4\x7f\xa3p\xfd(\x8c\x8e\xdb\xc3s\xc3\xaeQ\x9b\x06x\x05\x18\x85\xea\x1d\x94\xc9\x07\x04\x9aK\xaf[\xa3<6\xca1b\xc4\x91;\xcf\xae\xb4L|5g\xec\x01r\xd1;izh\xa5\xa0jU1M\x93\xd5{v\x81\x88\x87\xf0\x92?\xcd\xb2\x19\x8b\xceG\x9cO\xe3\xd0#\xdd\xd5\x04\xcf\xfe\x9fSC,\x00\x1f\x8c\r\xfcU\xd0\xc2\nu2\xcb3\x81\x90(y\x17\xf5\xdd\x94\x15i\x0c\x1d\xb1+CB\x95\xaf\xe0n\xda\xa3\xae\xf1p\x81\xaf\xe5!2\xe2\xcf\xd3c\x1aG\x94\x94\x98P\x03\x83\xdd\xca$\xb9\x96{\x00\xae\xaf\xda\xd9\xdf\xffU\x0e\xba,\x83\xc2\xef\x04y\'\xe0\x9a\xbe\x85\xd7\xab\x8b,\x19-\xa2\xd5"\xa2S\xf3wu\xc1\xa2MD\xebz\x86\xb6\xfe\xd9\x8e\x1b\x1a\x1f\xbe\xe6\x0e\xd3\xcd\xf68\x17\xdb\xab\xc2\xc35Y\x04\x1f\xc1\x1c\xc5\x9f\xb0L$\xc1~>\x1f\xa3I\xcf\x0c>q")/\x0e\x12GuB\xbb+I\x85\xb9\xac\xd3m,*df\xde\x8f\x9cm\xe1j$\x1e\\\x99\x1fIr\xd6B\x82\xa5U\xbb\xf39\x03\x97\xe1u\xd9\xb5h\xf3\xd05+<\x1d\xdb\x9c\r~\xca\xbc\xf73(q\x1e\n\xa5\x9f\x19\xect\x1e4\x92 \xbaF\xd4\xe2\xbf\xf7\x98S\x8d\xe8:\xa4\xb4\xb1\x03\x0fC\xea:sy\xac\x04\xb3_J\xc7v\x00,\x0e\xde')
|
1
|
+
from hiddifypanel.models import *
|
2
|
+
from hiddifypanel.panel.database import db
|
3
|
+
import sys
|
4
|
+
from hiddifypanel import Events
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
from dateutil import relativedelta
|
9
|
+
import datetime
|
10
|
+
|
11
|
+
from hiddifypanel.panel import hiddify
|
12
|
+
import random
|
13
|
+
import uuid
|
14
|
+
import urllib
|
15
|
+
import string
|
16
|
+
|
17
|
+
def init_db():
|
18
|
+
db.create_all()
|
19
|
+
|
20
|
+
try:
|
21
|
+
db.engine.execute(f'update proxy set transport="WS" where transport = "ws"')
|
22
|
+
db.engine.execute(f'DELETE from proxy where transport = "h1"')
|
23
|
+
except:
|
24
|
+
pass
|
25
|
+
if hconfig(ConfigEnum.license):
|
26
|
+
add_column(ParentDomain.alias)
|
27
|
+
add_column(User.start_date)
|
28
|
+
add_column(User.package_days)
|
29
|
+
add_column(Child.unique_id)
|
30
|
+
add_column(Domain.alias)
|
31
|
+
add_column(Domain.child_id)
|
32
|
+
add_column(Proxy.child_id)
|
33
|
+
add_column(BoolConfig.child_id)
|
34
|
+
add_column(StrConfig.child_id)
|
35
|
+
|
36
|
+
if len(Domain.query.all())!=0 and BoolConfig.query.count()==0:
|
37
|
+
db.engine.execute(f'DROP TABLE bool_config')
|
38
|
+
db.engine.execute(f'ALTER TABLE bool_config_old RENAME TO bool_config')
|
39
|
+
if len(Domain.query.all())!=0 and StrConfig.query.count()==0:
|
40
|
+
db.engine.execute(f'DROP TABLE str_config')
|
41
|
+
db.engine.execute(f'ALTER TABLE str_config_old RENAME TO str_config')
|
42
|
+
|
43
|
+
try:
|
44
|
+
add_column(User.monthly)
|
45
|
+
db.engine.execute('ALTER TABLE user RENAME COLUMN monthly_usage_limit_GB TO usage_limit_GB')
|
46
|
+
except:
|
47
|
+
pass
|
48
|
+
try:
|
49
|
+
db.engine.execute(f'update str_config set child_id=0 where child_id is NULL')
|
50
|
+
db.engine.execute(f'update bool_config set child_id=0 where child_id is NULL')
|
51
|
+
db.engine.execute(f'update domain set child_id=0 where child_id is NULL')
|
52
|
+
db.engine.execute(f'update proxy set child_id=0 where child_id is NULL')
|
53
|
+
except:
|
54
|
+
pass
|
55
|
+
|
56
|
+
add_column(Domain.cdn_ip)
|
57
|
+
db_version=int(hconfig(ConfigEnum.db_version) or 0)
|
58
|
+
start_version=db_version
|
59
|
+
# print(f"Current DB version is {db_version}")
|
60
|
+
if not Child.query.filter(Child.id==0).first():
|
61
|
+
print(Child.query.filter(Child.id==0).first())
|
62
|
+
db.session.add(Child(unique_id="self",id=0))
|
63
|
+
db.session.commit()
|
64
|
+
|
65
|
+
|
66
|
+
for ver in range(1,40):
|
67
|
+
if ver<=db_version:continue
|
68
|
+
|
69
|
+
db_action=sys.modules[__name__].__dict__.get(f'_v{ver}',None)
|
70
|
+
if not db_action:continue
|
71
|
+
if start_version==0 and ver==10:continue
|
72
|
+
|
73
|
+
print(f"Updating db from version {db_version}")
|
74
|
+
db_action()
|
75
|
+
Events.db_init_event.notify(db_version=db_version)
|
76
|
+
print(f"Updated successfuly db from version {db_version} to {ver}")
|
77
|
+
|
78
|
+
db_version=ver
|
79
|
+
db.session.commit()
|
80
|
+
set_hconfig(ConfigEnum.db_version,db_version,commit=False)
|
81
|
+
|
82
|
+
|
83
|
+
db.session.commit()
|
84
|
+
return BoolConfig.query.all()
|
85
|
+
|
86
|
+
def _v27():
|
87
|
+
# add_config_if_not_exist(ConfigEnum.cloudflare, "")
|
88
|
+
set_hconfig(ConfigEnum.netdata, False)
|
89
|
+
def _v26():
|
90
|
+
add_config_if_not_exist(ConfigEnum.cloudflare, "")
|
91
|
+
|
92
|
+
def _v25():
|
93
|
+
add_config_if_not_exist(ConfigEnum.country, "ir")
|
94
|
+
add_config_if_not_exist(ConfigEnum.parent_panel, "")
|
95
|
+
add_config_if_not_exist(ConfigEnum.is_parent, False)
|
96
|
+
add_config_if_not_exist(ConfigEnum.license, "")
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
def _v21():
|
101
|
+
db.session.bulk_save_objects(get_proxy_rows_v1())
|
102
|
+
|
103
|
+
|
104
|
+
def _v20():
|
105
|
+
if hconfig(ConfigEnum.domain_fronting_domain):
|
106
|
+
fake_domains=[hconfig(ConfigEnum.domain_fronting_domain)]
|
107
|
+
|
108
|
+
direct_domain=Domain.query.filter(Domain.mode in [DomainType.direct,DomainType.relay]).first()
|
109
|
+
if direct_domain:
|
110
|
+
direct_host=direct_domain.domain
|
111
|
+
else:
|
112
|
+
direct_host=hiddify.get_ip(4)
|
113
|
+
|
114
|
+
for fd in fake_domains:
|
115
|
+
if not Domain.query.filter(Domain.domain==fd).first():
|
116
|
+
db.session.add(Domain(domain=fd,mode='fake',alias='moved from domain fronting',cdn_ip=direct_host))
|
117
|
+
|
118
|
+
def _v19():
|
119
|
+
set_hconfig(ConfigEnum.path_trojan,get_random_string(7,15))
|
120
|
+
set_hconfig(ConfigEnum.path_vless,get_random_string(7,15))
|
121
|
+
set_hconfig(ConfigEnum.path_vmess,get_random_string(7,15))
|
122
|
+
set_hconfig(ConfigEnum.path_ss,get_random_string(7,15))
|
123
|
+
set_hconfig(ConfigEnum.path_grpc,get_random_string(7,15))
|
124
|
+
set_hconfig(ConfigEnum.path_tcp,get_random_string(7,15))
|
125
|
+
set_hconfig(ConfigEnum.path_ws,get_random_string(7,15))
|
126
|
+
|
127
|
+
|
128
|
+
def _v17():
|
129
|
+
for u in User.query.all():
|
130
|
+
if u.expiry_time:
|
131
|
+
if not u.package_days:
|
132
|
+
if not u.last_reset_time:
|
133
|
+
u.package_days=(u.expiry_time-datetime.date.today()).days
|
134
|
+
u.start_date=datetime.date.today()
|
135
|
+
else:
|
136
|
+
u.package_days=(u.expiry_time-u.last_reset_time).days
|
137
|
+
u.start_date=u.last_reset_time
|
138
|
+
u.expiry_time=None
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
def _v16():
|
143
|
+
|
144
|
+
add_config_if_not_exist(ConfigEnum.tuic_enable,False)
|
145
|
+
add_config_if_not_exist(ConfigEnum.shadowtls_enable,False)
|
146
|
+
add_config_if_not_exist(ConfigEnum.shadowtls_fakedomain,"en.wikipedia.org")
|
147
|
+
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
def _v14():
|
152
|
+
add_config_if_not_exist(ConfigEnum.utls,"chrome")
|
153
|
+
|
154
|
+
def _v13():
|
155
|
+
add_config_if_not_exist(ConfigEnum.telegram_bot_token,"")
|
156
|
+
add_config_if_not_exist(ConfigEnum.package_mode,"release")
|
157
|
+
|
158
|
+
def _v12():
|
159
|
+
db.engine.execute(f'drop TABLE child')
|
160
|
+
db.create_all()
|
161
|
+
db.session.add(Child(id=0,unique_id="default"))
|
162
|
+
|
163
|
+
def _v11():
|
164
|
+
add_column(User.last_online)
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
def _v1():
|
170
|
+
|
171
|
+
next10year = datetime.date.today() + relativedelta.relativedelta(years=6)
|
172
|
+
external_ip=hiddify.get_ip(4)
|
173
|
+
rnd_domains=get_random_domains(5)
|
174
|
+
data = [
|
175
|
+
StrConfig(key=ConfigEnum.db_version,value=1),
|
176
|
+
User(name="default",usage_limit_GB=3000,package_days=3650,mode=UserMode.weekly),
|
177
|
+
Domain(domain=external_ip+".sslip.io",mode=DomainType.direct),
|
178
|
+
StrConfig(key=ConfigEnum.admin_secret,value=str(uuid.uuid4())),
|
179
|
+
StrConfig(key=ConfigEnum.http_ports,value="80"),
|
180
|
+
StrConfig(key=ConfigEnum.tls_ports,value="443"),
|
181
|
+
|
182
|
+
StrConfig(key=ConfigEnum.decoy_domain,value=rnd_domains[0]),
|
183
|
+
StrConfig(key=ConfigEnum.proxy_path,value=get_random_string()),
|
184
|
+
BoolConfig(key=ConfigEnum.firewall,value=True),
|
185
|
+
BoolConfig(key=ConfigEnum.netdata,value=True),
|
186
|
+
StrConfig(key=ConfigEnum.lang,value='fa'),
|
187
|
+
|
188
|
+
BoolConfig(key=ConfigEnum.block_iran_sites,value=True),
|
189
|
+
BoolConfig(key=ConfigEnum.allow_invalid_sni,value=True),
|
190
|
+
BoolConfig(key=ConfigEnum.kcp_enable,value=False),
|
191
|
+
StrConfig(key=ConfigEnum.kcp_ports,value="88"),
|
192
|
+
BoolConfig(key=ConfigEnum.auto_update,value=True),
|
193
|
+
BoolConfig(key=ConfigEnum.speed_test,value=True),
|
194
|
+
BoolConfig(key=ConfigEnum.only_ipv4,value=False),
|
195
|
+
|
196
|
+
BoolConfig(key=ConfigEnum.vmess_enable,value=True),
|
197
|
+
BoolConfig(key=ConfigEnum.http_proxy_enable,value=True),
|
198
|
+
StrConfig(key=ConfigEnum.shared_secret,value=str(uuid.uuid4())),
|
199
|
+
|
200
|
+
BoolConfig(key=ConfigEnum.telegram_enable,value=True),
|
201
|
+
# StrConfig(key=ConfigEnum.telegram_secret,value=uuid.uuid4().hex),
|
202
|
+
StrConfig(key=ConfigEnum.telegram_adtag,value=""),
|
203
|
+
StrConfig(key=ConfigEnum.telegram_fakedomain, value=rnd_domains[1]),
|
204
|
+
|
205
|
+
BoolConfig(key=ConfigEnum.ssfaketls_enable,value=False),
|
206
|
+
# StrConfig(key=ConfigEnum.ssfaketls_secret,value=str(uuid.uuid4())),
|
207
|
+
StrConfig(key=ConfigEnum.ssfaketls_fakedomain, value=rnd_domains[2]),
|
208
|
+
|
209
|
+
BoolConfig(key=ConfigEnum.shadowtls_enable,value=False),
|
210
|
+
# StrConfig(key=ConfigEnum.shadowtls_secret,value=str(uuid.uuid4())),
|
211
|
+
StrConfig(key=ConfigEnum.shadowtls_fakedomain, value=rnd_domains[3]),
|
212
|
+
|
213
|
+
BoolConfig(key=ConfigEnum.ssr_enable,value=False),
|
214
|
+
# StrConfig(key=ConfigEnum.ssr_secret,value=str(uuid.uuid4())),
|
215
|
+
StrConfig(key=ConfigEnum.ssr_fakedomain, value=rnd_domains[4]),
|
216
|
+
|
217
|
+
BoolConfig(key=ConfigEnum.tuic_enable,value=False),
|
218
|
+
StrConfig(key=ConfigEnum.tuic_port,value=3048),
|
219
|
+
|
220
|
+
BoolConfig(key=ConfigEnum.domain_fronting_tls_enable,value=False),
|
221
|
+
BoolConfig(key=ConfigEnum.domain_fronting_http_enable,value=False),
|
222
|
+
StrConfig(key=ConfigEnum.domain_fronting_domain,value=""),
|
223
|
+
|
224
|
+
# BoolConfig(key=ConfigEnum.torrent_block,value=False),
|
225
|
+
|
226
|
+
*get_proxy_rows_v1()
|
227
|
+
]
|
228
|
+
fake_domains=['speedtest.net']
|
229
|
+
for fd in fake_domains:
|
230
|
+
if not Domain.query.filter(Domain.domain==fd).first():
|
231
|
+
db.session.add(Domain(domain=fd,mode='fake',alias='fake domain',cdn_ip=external_ip))
|
232
|
+
# for c in ConfigEnum:
|
233
|
+
# if c in [d.key for d in data if type(d) in [BoolConfig,StrConfig]]:
|
234
|
+
# continue
|
235
|
+
# if c.type()==bool:
|
236
|
+
# data.append(BoolConfig(key=c,value=False))
|
237
|
+
# else:
|
238
|
+
# data.append(StrConfig(key=c,value=""))
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
db.session.bulk_save_objects(data)
|
243
|
+
|
244
|
+
def _v2():
|
245
|
+
add_config_if_not_exist(ConfigEnum.telegram_lib, "python")
|
246
|
+
add_config_if_not_exist(ConfigEnum.admin_lang, hconfig(ConfigEnum.lang))
|
247
|
+
|
248
|
+
def _v3():
|
249
|
+
add_config_if_not_exist(ConfigEnum.branding_title, "")
|
250
|
+
add_config_if_not_exist(ConfigEnum.branding_site, "")
|
251
|
+
add_config_if_not_exist(ConfigEnum.branding_freetext, "")
|
252
|
+
add_config_if_not_exist(ConfigEnum.v2ray_enable, False)
|
253
|
+
|
254
|
+
|
255
|
+
def _v6():
|
256
|
+
try:
|
257
|
+
Proxy.query.filter(Proxy.name=='tls XTLS direct trojan').delete()
|
258
|
+
Proxy.query.filter(Proxy.name=='tls XTLSVision direct trojan').delete()
|
259
|
+
except:
|
260
|
+
pass
|
261
|
+
# db.session.bulk_save_objects([
|
262
|
+
# *make_proxy_rows(["XTLS direct vless"])
|
263
|
+
# ])
|
264
|
+
|
265
|
+
|
266
|
+
def _v9():
|
267
|
+
try:
|
268
|
+
add_column(User.mode)
|
269
|
+
add_column(User.comment)
|
270
|
+
for u in User.query.all():
|
271
|
+
u.mode= UserMode.monthly if u.monthly else UserMode.no_reset
|
272
|
+
except:
|
273
|
+
pass
|
274
|
+
|
275
|
+
add_config_if_not_exist(ConfigEnum.is_parent, False)
|
276
|
+
add_config_if_not_exist(ConfigEnum.parent_panel, '')
|
277
|
+
add_config_if_not_exist(ConfigEnum.unique_id,str(uuid.uuid4()))
|
278
|
+
|
279
|
+
def _v10():
|
280
|
+
all_configs=get_hconfigs()
|
281
|
+
try:
|
282
|
+
db.engine.execute("ALTER TABLE `str_config` RENAME TO `str_config_old`")
|
283
|
+
db.engine.execute("ALTER TABLE `bool_config` RENAME TO `bool_config_old`")
|
284
|
+
except:
|
285
|
+
pass
|
286
|
+
db.create_all()
|
287
|
+
|
288
|
+
rows=[]
|
289
|
+
|
290
|
+
for c,v in all_configs.items():
|
291
|
+
if c.type()==bool:
|
292
|
+
rows.append(BoolConfig(key=c,value=v,child_id=0))
|
293
|
+
else:
|
294
|
+
rows.append(StrConfig(key=c,value=v,child_id=0))
|
295
|
+
|
296
|
+
db.session.bulk_save_objects(rows)
|
297
|
+
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
|
302
|
+
def get_proxy_rows_v1():
|
303
|
+
return make_proxy_rows([
|
304
|
+
# 'WS Fake vless',
|
305
|
+
# 'WS Fake trojan',
|
306
|
+
# 'WS Fake vmess',
|
307
|
+
# 'grpc Fake vless',
|
308
|
+
# 'grpc Fake trojan',
|
309
|
+
# 'grpc Fake vmess',
|
310
|
+
# "XTLS direct vless",
|
311
|
+
# "XTLS direct trojan",
|
312
|
+
"XTLS direct vless",
|
313
|
+
"WS direct vless",
|
314
|
+
"WS direct trojan",
|
315
|
+
"WS direct vmess",
|
316
|
+
"WS CDN vless",
|
317
|
+
"WS CDN trojan",
|
318
|
+
"WS CDN vmess",
|
319
|
+
"grpc CDN vless",
|
320
|
+
"grpc CDN trojan",
|
321
|
+
"grpc CDN vmess",
|
322
|
+
"tcp direct vless",
|
323
|
+
"tcp direct trojan",
|
324
|
+
"tcp direct vmess",
|
325
|
+
"grpc direct vless",
|
326
|
+
"grpc direct trojan",
|
327
|
+
"grpc direct vmess",
|
328
|
+
# "h1 direct vless",
|
329
|
+
# "h1 direct vmess",
|
330
|
+
"faketls direct ss",
|
331
|
+
"WS direct v2ray",
|
332
|
+
"shadowtls direct ss",
|
333
|
+
"tcp direct ssr",
|
334
|
+
"WS CDN v2ray"]
|
335
|
+
)
|
336
|
+
|
337
|
+
def make_proxy_rows(cfgs):
|
338
|
+
|
339
|
+
for l3 in ["tls_h2","tls", "http", "kcp"]:
|
340
|
+
for c in cfgs:
|
341
|
+
transport,cdn,proto=c.split(" ")
|
342
|
+
if l3=="kcp" and cdn!="direct":
|
343
|
+
continue
|
344
|
+
if proto=="trojan" and l3 not in ["tls",'xtls','tls_h2']:
|
345
|
+
continue
|
346
|
+
if transport in ["grpc","XTLS","faketls"] and l3=="http":
|
347
|
+
continue
|
348
|
+
# if l3 == "tls_h2" and transport =="grpc":
|
349
|
+
# continue
|
350
|
+
enable=l3!="http" or proto=="vmess"
|
351
|
+
if not Proxy.query.filter(Proxy.l3==l3,Proxy.transport==transport,Proxy.cdn==cdn,Proxy.proto==proto).first():
|
352
|
+
yield Proxy(l3=l3,transport=transport,cdn=cdn,proto=proto,enable=enable,name=f'{l3} {c}')
|
353
|
+
|
354
|
+
|
355
|
+
def add_config_if_not_exist(key:ConfigEnum,val):
|
356
|
+
table=BoolConfig if key.type()==bool else StrConfig
|
357
|
+
if table.query.filter(table.key==key).count()==0:
|
358
|
+
db.session.add(table(key=key,value=val,child_id=0))
|
359
|
+
def add_column(column):
|
360
|
+
try:
|
361
|
+
column_type = column.type.compile(db.engine.dialect)
|
362
|
+
db.engine.execute(f'ALTER TABLE {column.table.name} ADD COLUMN {column.name} {column_type}')
|
363
|
+
except:
|
364
|
+
pass
|
365
|
+
|
366
|
+
|
367
|
+
def get_random_string(min_=10,max_=30):
|
368
|
+
# With combination of lower and upper case
|
369
|
+
length=random.randint(min_, max_)
|
370
|
+
characters = string.ascii_letters + string.digits
|
371
|
+
result_str = ''.join(random.choice(characters) for i in range(length))
|
372
|
+
return result_str
|
373
|
+
|
374
|
+
def get_random_domains(count=1,retry=3):
|
375
|
+
try:
|
376
|
+
irurl="https://api.ooni.io/api/v1/measurements?probe_cc=IR&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
|
377
|
+
# cnurl="https://api.ooni.io/api/v1/measurements?probe_cc=CN&test_name=web_connectivity&anomaly=false&confirmed=false&failure=false&order_by=test_start_time&limit=1000"
|
378
|
+
import requests
|
379
|
+
data_ir=requests.get(irurl).json()
|
380
|
+
# data_cn=requests.get(url).json()
|
381
|
+
from urllib.parse import urlparse
|
382
|
+
domains=[urlparse(d['input']).netloc.lower() for d in data_ir['results'] if d['scores']['blocking_country']==0.0]
|
383
|
+
domains=[d for d in domains if not d.endswith(".ir")]
|
384
|
+
|
385
|
+
return random.sample(domains, count)
|
386
|
+
except Exception as e:
|
387
|
+
print('Error, getting random domains... ',e,'retrying...',retry)
|
388
|
+
if retry<=0:
|
389
|
+
defdomains=["fa.wikipedia.org",'en.wikipedia.org','wikipedia.org','yahoo.com','en.yahoo.com']
|
390
|
+
print('Error, using default domains')
|
391
|
+
return random.sample(defdomains, count)
|
392
|
+
return get_random_domains(count,retry-1)
|
393
|
+
|
4
394
|
#واقعا برای 5 دلار میخوای کرک میکنی؟ حاجی ارزش وقت خودت بیشتره
|
5
395
|
#Email hiddify@gmail.com for free permium version. Do not crack this cheap product
|