From d5b93c12e212f7da2626bdf186b6733c978f85c6 Mon Sep 17 00:00:00 2001 From: ui-beam-9 Date: Tue, 22 Apr 2025 08:13:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=89=8D=E7=AB=AF=E9=87=8F?= =?UTF-8?q?=E7=BA=A7=E6=97=A0=E6=B3=95=E6=98=BE=E7=A4=BA=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=B8=85=E9=A3=8E=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E5=92=8C=E5=A4=A7=E7=A5=9E=20CMS=20=E7=9A=84=20Cookie=20?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=8F=AF=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 -- breeze_monitor.py | 80 +++---- breeze_monitor_CHAT.py | 80 +++---- cms_monitor.py | 80 +++---- dashboard.py | 80 +++---- download_auto_run.py | 449 --------------------------------------- inspect_monitor.py | 80 +++---- templates/dashboard.html | 229 +++++++++----------- templates/login.html | 34 +-- 9 files changed, 325 insertions(+), 804 deletions(-) delete mode 100644 README.md delete mode 100644 download_auto_run.py diff --git a/README.md b/README.md deleted file mode 100644 index 7558953..0000000 --- a/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# 网易大神实时审核数据监控 - -## 项目结构 -- releases/: 发布版本 - - latest/: 最新稳定版本 - - v[版本号]/: 历史版本 -- dev/: 开发版本 - - latest/: 最新开发版本 - - v[版本号]-dev/: 历史开发版本 -- config/: 配置文件目录 - -## 版本管理 -- main分支:稳定发布版本 -- dev分支:开发版本 - -## 自动运行 -使用 `download_auto_run.py` 脚本拉取并启动最新版本 \ No newline at end of file diff --git a/breeze_monitor.py b/breeze_monitor.py index 74d2d4c..335b4cb 100644 --- a/breeze_monitor.py +++ b/breeze_monitor.py @@ -3,10 +3,10 @@ import base64,zlib,sys,os,getpass,json,time,random from urllib import request as _req import threading,importlib,subprocess -def _TnMzqipXoWNK(d,k): +def _RhJ3C6vD6GAl(d,k): return bytes(a^b for a,b in zip(d,k*(len(d)//len(k)+1))) -def _t7RzY7Aq4(t,m,is_error=False): +def _zDtWfbKuA(t,m,is_error=False): try: try: from playsound import playsound @@ -33,90 +33,90 @@ def _t7RzY7Aq4(t,m,is_error=False): print(f"\n{t}: {m} (提示音播放失败: {str(e)})\n") return False -def _vgZ4DAeqFt8(t,m,e=0): - _t7RzY7Aq4(t,m,e==1) +def _eab0xwtoZdK(t,m,e=0): + _zDtWfbKuA(t,m,e==1) -def _HjXSwuCsz(): +def _MGekE9E5k(): _p=[104,116,116,112,58,47,47,99,111,115,46,117,105,45,98,101,97,109,46,99,111,109,47,119,111,114,107,95,115,99,114,105,112,116,115,47,109,111,110,105,116,111,114,47,99,111,110,102,105,103,47,115,116,97,102,102,46,106,115,111,110] return ''.join([chr(int(c)) for c in _p]) -def _rQtAIc46(): +def _n5ILVe4R(): _e=[38750,25480,26435,29992,25143,65292,26080,26435,35775,38382] return ''.join([chr(int(c)) for c in _e]) -def _Vh6AC8aM(): +def _oO0lE3PB(): _e=[31243,24207,26080,27861,21551,21160,58,32] return ''.join([chr(int(c)) for c in _e]) -def _eveMXRYK(): +def _R78gdnZD(): _e=[39564,35777,25104,21151,65292,27426,36814,20351,29992] return ''.join([chr(int(c)) for c in _e]) -def _jxLIMnM0bf(): +def _R8srsPZIiZ(): try: - _lfnTd3xE=getpass.getuser().upper() - _sLdSiJFn=os.path.basename(os.path.expanduser("~")).upper() + _Wj6M3sqr=getpass.getuser().upper() + _zq55y0bB=os.path.basename(os.path.expanduser("~")).upper() # 转换为小写进行比较 - _trMcjKLs=_lfnTd3xE.lower() + _X0CnrOmv=_Wj6M3sqr.lower() - _bnYtbb3=None - _ndNNkcla=_HjXSwuCsz() + _FVTQhUC=None + _mUNgh8Rm=_MGekE9E5k() _s,_p,_v=random.randint(1,5),random.randint(1,5),int(time.time()) try: _h={"User-Agent":"Mozilla/5.0","X-Access-Token":str(_s*_p*_v)} - _r=_req.Request(_ndNNkcla,headers=_h) + _r=_req.Request(_mUNgh8Rm,headers=_h) with _req.urlopen(_r,timeout=5) as _resp: - _mVAYGFB=_resp.read().decode() - _bnYtbb3=json.loads(_mVAYGFB) + _lyICXSM=_resp.read().decode() + _FVTQhUC=json.loads(_lyICXSM) except:pass - if not _bnYtbb3: + if not _FVTQhUC: try: - _mVAYGFB=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() - _bnYtbb3=json.loads(_mVAYGFB) + _lyICXSM=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() + _FVTQhUC=json.loads(_lyICXSM) except:pass - _ct7GbM1aX=False + _FgssgxYte=False - if _bnYtbb3: - for _id,_n in _bnYtbb3.items(): + if _FVTQhUC: + for _id,_n in _FVTQhUC.items(): # 转换ID为小写进行比较 - _efs7U9k=_id.lower() + _jZAP5oi=_id.lower() # 不区分大小写的比较 - if (_trMcjKLs==_efs7U9k or - _sLdSiJFn.lower()==_efs7U9k or - _trMcjKLs.startswith(_efs7U9k) or - _sLdSiJFn.lower().startswith(_efs7U9k) or - _efs7U9k in _trMcjKLs or - _efs7U9k in _sLdSiJFn.lower()): - _ct7GbM1aX=True + if (_X0CnrOmv==_jZAP5oi or + _zq55y0bB.lower()==_jZAP5oi or + _X0CnrOmv.startswith(_jZAP5oi) or + _zq55y0bB.lower().startswith(_jZAP5oi) or + _jZAP5oi in _X0CnrOmv or + _jZAP5oi in _zq55y0bB.lower()): + _FgssgxYte=True break - if not _ct7GbM1aX: - _AIfSoxUx3=_rQtAIc46() - _vgZ4DAeqFt8("访问被拒绝",_AIfSoxUx3,1) + if not _FgssgxYte: + _gKLdPuaPM=_n5ILVe4R() + _eab0xwtoZdK("访问被拒绝",_gKLdPuaPM,1) return False return True except: return False -if _jxLIMnM0bf(): +if _R8srsPZIiZ(): # 显示验证成功消息 - _vgZ4DAeqFt8("用户验证",_eveMXRYK(),0) + _eab0xwtoZdK("用户验证",_R78gdnZD(),0) - _k=b'D\x0edTK\xe9\x10\xc4\x1c^8VG\xb4huRP@s4VO4na@vnlJIBz2?gP2Teo|lRWM<|6Q!%@xrD5DH-IEt5?5+5L;S`E=r3E4d=+W0D13F+(4gJ2P%bgl9~bYBB4DG97XwE#>bR$v))Nmg{O;}>h)HoH>YP&LYbfxcRPyi08blqYOqqE7@o<;TB}s^J@3@*8mwa@ok!xT&L`Sd(!RiogwT8>F<$I&PLg%OFh46M0<^Zzmz+OL=1U%6JhIWtWv+(w{sQ+2lC`OBio>KIUr+VGwr(08o$kGDT9b=i>112Y+f774SheHTht<*7tjz{NY_0WFdC$s&y7kUXW)`2W0aij+iX~Vx(kNZX~;=ZOF4r-D1gjzD1GOM^!SE2i}60@A1>eW3A)z#Ug1GbvN=nKs7As3y}mAeTzZuBioCUf4_o8Zj?i)bg6-2^-$QHPs4J)^_GW&HA&uCbKVeNDo;rq_A83PC)+;lh{$6hwve`M>`y7Jc>E2Y;$QSDqJFu<&5*b-)T45l_umiO?`)p%6HO1HowFXL82c1B(EWV;`9!ke9`?1srbp!3FVDxAP+kD#<}19Y&`lE&T(P61Ei>|Mo1%AtTi66XhFtt`-5D8{Mxqb&Z7l8USCxfHr-;!(oMAi8<@iQ+6N>)Iq`BfAqKu&UQHk9BDW$$?HmDzZ;5J`NY>wJQ*eMn!O!scLNyJI%`2D_WA!28a0hw^0+mTrFiAp-!&SbKyG9c@ZO(VXP124z=r1~KP1#*_k6bsMGh>Pqe{v-(?2^wkw&0+?*Anh*OR+K`W7t6x__bJZN$BcRRI|7OzszxxL(L4lC+?EF9*p_Dls|6y8u;W>Y~+#-LZXQvJ%1Bde6FA$hOEA8YVcMKT#GzQJr)M=wqW7%)rkqCE^xo%O(RZ5^5InueV^J}wI@1pax=)3XF?0g@$j_8;Wt+rA9D_?xm;y4m3`?#kt{cQVrg{wE3wufPIs3uBk)T>mKq7h;+1)_h^&fSu-i-eiFT9V5t2^o63h9c06~LXDlr`Jrb6*E;=kBN%MvG~R)`L^S?}2GWj?ZZM%ue5Zfsb~A-1_apn{2co}Kw`E!_1g;zA=G<-k07v0Fh2zI>aC&z%r}UZdnXXzQn8=u#smkkV5e?x65F_E6ycWdFd=B!GPBg&Zelb+aWs$4hrZgv{SIZ4Q#JWgeB|u^ALj*3}mfliC*03^sA~adq+%xqE1Dv2Lh4F1!Di0#94#u}Ihx{TSP&v~kOO=Rm76soAF~u{{C#F2k8L6m_H`GEE1FuC6Af!eqHN-VCe&D{h&!oq&`-zqgSnofmEfLgateCWd^g#2aS$3}3{AFsGk{S1ux_>r4tB4jX5T(Z7dr(pMQeCxY}_jN`{buynnm%)g^xIg?8d@bSOVD&(3uN5c&%^8tq1EHqM9BR8UiBd+e+Y%9Y6f&e9C8_JbM=@J|LkY01?VDEwW;XMkb7v-W}Yd-FYxKW8Pd$lz=K{63}Z9QX%XV00D_XZ{oJ0V_EK`9qBITNQFjfL+1F2h5j(#5P27vi?x3>c9TqMlzzA04Zjf@>_)s9?MjTijM&RlD8It^fyxiXE_LUUu#udEsMN=EDqP%%5yI2%G=hl$KXZzB>F0=Rnq1CuQl6xkYdAdEL6Q~y&8%_FC}mD>9VVg6w+$$Ko(kx%MNquRuYca6lOqMuTh~3qj&@ruJY}?|fU|Ws276DpPI#K)VVmi%oqR)4(Xo@^2u)ifPO-rytXHade)Hrq-qvFoXOA?J37$>c{x>`-ItcWo{`4s1#U)uSurl%}FzbXQslx7xH{YH_tU3{?{S@f#@o9dTCOS6HAD#ND_mQ$}fpRKzVz3}R5&*)beL#F<*muwq{wNC{vR-R>!3|LM-F~T2t5}=+imcVkecl2Snq0Z$?hr8*lEY9PPD;Oo6J-~q-E}I5b$o;27-g>L)B(EpaS$Z$>OkD=8^fCQEsVcf0-He0?aG%yD$*U3-PNd8QJT3H1)oa$>}gyVM}B<)i(qhnOA=4F!>>1|-F)Uvx7twJ!V~66^${~%Ps=Y|k!|~ZlM$w@mr(A&#RF?$4>PaxUi`X64%X8~*Iv0q?$mR(loDFgikq)v;6w0Wjmm~E*|FJYa_Uwm(wbhoLWOb`>yPBUVF!`9lAh7^C$s&wTc4M@Ag&NKdnV(*#)}2YHtQ6_x7YQJo*5A_DJRm!U51N!{DwdoKRYZ$1jGHJX;Q=+w&N9c>MKsPORz^XGHIPVyNz#i0P=XQmAeqH2SOrsjcMeA$+QtL`i|nZR9Yozi3s7bt5&rIz}DS-5ng(6VDz*_BInbK-xM^D?DV)FOqrK?9OJGLFV_VkvWMjLI=oh=IVg~!58LCXTv-5UmqW6Z>)GcG%)3tBMb1VhK`M;>eV@W$4bfv`Pt_R)+R+dM1$5n2bDUCB0&GqUN?5hSKxVu5vP7Vy?@3IN6e%Y!2(3R01B~r5%!4k*RO2%Qf*@HNdX{$z+`gdfPjj4ra*t0ok$#SH!e4|NYG4Ru0UrX@3)wh7V}-=x_PI-XRQSIp(NUm~$M~ZttPYeLZ;f&7lcDlEF#qw3I?v<6WtpiN(zsGWY?oD9zftWsE;nIh-ZwPET4;Ppma}M&K#hSN-HD}&+OOkdfys`xR|c@IJx}T*A3{D%u~8=SNl(9WbB4?P(m}P1zJZdcZW(QqL%&^e<$wR}P#piRHfv;oR%*~9XgJ4t3ysvKc0P<}agg<8DI-b$_l)V0FB(n=zHtN02g`Ab`ARbSl9MMTQk+1QhF7Hxod}6GKPic1@HY)SPh1&pzs;;|}i6xRF04;7vbOgJ%b|Y%4FenuOd7`d=nS+TP9N>2UKV7Gf~nGQBtupM5-X4d(;tn(&toPI$kdD>4v>ZLc>!PmoyL&XX+tJAdNwINiA=vnH0b>uIru&MJCxJCxf)~LRBf+gqL{d`2lKSY-;g2F)zmEok`&XrXkaE|?7k<{m5O$fD*V77ze`4dc7xI?Y7X0u6T~1Yrea*pF8SNzBqZ&h!;c&CcBMsEMtFo+!oG-?-fD<0Sw-3g-mf7Xb~VqtP(&+lKbDBnHi&{c;<$omI#Oq9KoAplg41J;21ie5B#%jTp8Ft}B+UAQr8CN%?7ICAGN@HoEC3FX>3dN#L=rr{?eDAY-|l~j`Nqw+u+y{NM+TyVIAi$6`@9fqL$=U71E9e^*v5MAKU`qnG2n~fc;W~1O=O2}>a4QqSpNbX5w!S-$u|!^#!(-j)SW|_K9teE>xavgj;)(=xCb*C>kkVX;SZ?br8S}o!zfwCvYnKZZdNMf9FBn_Y9uoc<`z+BFstQR^6n;5tUghSaSWG3IdFI1SRv1yvhZZ_+_6&|Uv@HEOnmzlPYK`Ue(zuCL7XuIZvNq&X#4~jnzN1he(_&5+QJcs$mRql6tidSES%mD0C@Aff=a1(oUx+G4uJe-$@lsYwLI-L7T}r9r&M-q59DHB-HjKcg>g^2Vx8KCRY~ABNTr;w9lh`Ljmw?OU=Z}uCJ#?WIqWp8dC{85$^)-=8h)AJFO9Evnx##(f&~WQg-2=NqAI>{ml!T-dH^$1^3xxtSuMT-5sW?q4>#4nWPMRCo&_m@HO{J?DV*d=OWF2?p2JH{_hOj#Qu%Kvk28r_RVBX?jAwiBs2+3LJ2s~$Y?b&gw4j*xJK9g>I0?@R7+wAsMi@&VCDKaOyGK!Z>m*#5i&Y#NppQqHcd%J*CT@6N^Bp5$rTLh(R(KKS|NEgP7u(%Z#weFu#T6U>~&PwHX5>Zj8eryHv8N4N})Cj9|L{6V?FPt7n=5@gGHKl*c=hA-|&lM$Bj9zEvy^;H7Uou20)X;7rumitvPe}su|(@Z4jm(8L5zFhZ;b_Zv*^p;_16jo({FDM}BHC-!@)>9UORSnWf2!+B3DJ>K~7yb$vS*Yz)0zmb>E(6!QFNeYtS4mZa2@{=bGP$F+ubWV%uIeHNwWw?jA@y|1A(=g^3f-$X#Cta%j|+XhR`V*P~aUO86yGR?Xsm-|@8I<@1A{Zf1S7x9^ZO1v>beoS&79`i*IHY-n#XwG7XPpkLSgPym<`TJ);d1rTIY!e+pQJT7g-RF5(EM@%DQ$`bxO!R3JNIjty7oW|8TF9yp;yMrpH=K<{pQm9mQxDA>*^6Q&uSk^{*W;S+L1ZzSB+dCiau>=Bb`pn=HUEA>+<|l@T>&a$xbQ1Uu%&si>i}71d(eoWhQu7N~<*BI-<3W#>q0Y{LsBB`*6`*9d?razbI^T|4?@(nj@yTW5(hb=8f)n;o7_t$h;8yBn8GKNjTOo=4C$6%H7eA-1sC!}{TM#P9p6D^a`PZC;3%2=2`1__=*Kh>x*@v-V`N4-|gjY1?UVtJv~;c`jvC0(tY=nLQAH3Bkk*SEx(DhDiP_^Se8)pA4v&wj}7o}soV$cv2_1UJxCI}FYD%kwnf4Xf;z3IKl0zI}FI+*&~)t@AfXCGxJ?bS!rk1nUznxEh{PX<}GID%kBh|L*do_eVOJ>L-hWLZv8;P{HZOw?f2iBZtM&-+d`h|~|zQRpEtHtK&ege)O=e+|1dVop@NTR+rKDDt3Z#Y5Y@B!k0}N#qE_C!Gw8ilIR^CyjWFKNYIBUf@ofOpA~##yL$`P83^=C+jI&bWHC59~Tj_s^Fe(ngQstYd*{|xtpD^F&_uzsp)_Ov(w+^J*nrt$y8Cll{85HbyuK?zpCmNWNOcJ10G}L%xqhuQD7`nr<+eg&DB+v2Zc7NyshXMF}csDs5#STL!LSg;+9mtqMlS1sSg{BXZdpxj#LThfOLhMeq86xY|w@gnoPCF$`bJZ$^cG>9KBO{zzDup0W&)ye>>r3wHi_9uoK9mFIYbJex*$Okj+A|qdC#bTvztAIBrz-trP7B2VFfYJuumQ-K+WG=rj^~@MQnWP&8+)iDjI`{IkT^xb-+k7W#ez00vLFgs?3pV$z=K7gw#D-S^=K#JsGC=`Goe3Q6-nX}{rLY*m1Q_`#INF>ij^Cz=|$N!(!j#zu66r!s?OGgl61a&llH>qqfy2~GxGxhlct9q;-A4H{F%g7r!75+!LN9WY0F=OB+VNOr5a+o;-cHz@6e3|8r06Ds=#CS)?r6UzU4fTJjbCh;24Up+g};bvy+c8`4Wt8ofahBp<#}@bj;LCwX;ua!D0JKH+o{}_U2Dq?Aa#Xt*FzhGq>nxib|xCpnsSlkRXdVF`*h`H2`TtS1LG_^v?%!VQ`IRl}l1k!Pa0s7H({nMS1?Z!b)@ydBQuCiqmx;7QSzW%_I6d}nA23ZL&MQs=?XVPEAKFpB*OWpJ*12d`m0Fv^~IQq+j9`#=vPZZ=-U;Xhc1Yl--8Y&q})SwD0(vr4j' + _k=b'\xf3\xa4\x94y\xcd\x95\xf5\x93{g\xadO:\xe7\xb7\x12' + _e=b'i#T~iFyiLa>DX4_qLis!p~hcNk|Kn~q97$kgu{24Zb(UhG<^6$v-#+qQh@O^eRF%@J@oFQO-3z_G$FGPXrK>$8;$O8M1h%X!$3*}U0(Meck++bX?WW9=X`qb3QRiFV>??t(aFQ|A5sX<-N7K$mx&(*u>k|JO%M8+sf_)@beT0D9IU=t8(@5zd%l?%-xnmHT_q5d|x*eF5fcM)vacO{qpCK9GqBf6T48VEiz2&8c73K61W4l_%&Df4Yk4XAN#dA3RKGjCZKdR&k_mhS@tPVuxyb^O4tQpzTZYtJW*p1Q7%>{>{twDqe7{ne5Wi`w@UzprfEFt<~L$%;v*1Cr%hAe8YReZ;(nz4Jku+^G7lZ>QcQo!|~tEBMBOG~XZ;$4%u%}j$-Bg5<)u+9Sy2;|6D1)cFv6L&E3+G0ayTOKSg*?a`fItIDGuyk^|X^l3J1eA8`xN+h@!kq#U#*iTN`G>nxTJ9OnQ(pjaebU%<&mTreV&@$hWJ%wSgkqzN6fv6EmQGl{2(viy8hKo*kemNxlSs>pqV6)SPHJ7rY7!!?PpJMyc*3Zz=aG?4hQeE`WKe^2Yu?B(K_b(Og4NTv;8_A%*DpX{2x<#&846$i&kx0Sm>+JG&b22AA=JxI>&8F{A65hxtnT-R{Gjv6Z_0`Pa;}O&8{T2xaJvX_0ykiR4Ok~Ot=TdaHq^;GO_L`xZ@89QirUi{@y=z*s4L%>{T(n5sh_hH5r4?)8R(QCbumJpvG@@Ej)Al!)T=^;zE6EbrgPt~p@2%{5pSdE83zJ(wwvf{hxAjs`$USB{ZWdQAgm`$d_QVG35D?Jh+al!&}hX@fQ~G{KpoZ3p~L2;6Qfe3&^$V#!^~mN2yySu!->xIR@(&ubsgPoB472koWX|Ni4edYaw=`_fS==6Hvj9d2gh>20>4DYicfkbNDYMUWSu>=I~%AB8=vl-?mZ(WoVv-Ffr&g@&RjzybXB8yKw;H!89z^?Nile0=C0RbLtyQC!IW7qT$W+{}3OaPdjs(|r&qz0B9|Z7(eBP-E7yVY|rpDw7Hfp#fteCbu#VPodf`QLvfu5RR!y1}|7#6wml+{}B#3Cdd1AUbS`G{RysZXpNVLG#UenGlVIcIMVp8Y~sK}s6GW@+Cg@}=eTMFa}<@EyCOPzXI@8$ov_!X`OCI|V2Ykz2mM`X&}#;j^}!0|JL(q^tJ6H($RFp)7>RF^&}_CD`ralO@3$LZS7A)9v2df@G<&-@U!pBiV^b6w5=;d!1@J;zq52Bl%0RL9+^>8jB>FD>ErvtChYh)8>FBsIZ#5x}lC-`Z#E|>Wfo>t2vVA8ga^mzqRW&49UjVfX9COr@~up`l0ScA;gZ*r+?+2KSB`{U_QYYW;PUnfEltSVF+?AyT^$K!m(A^Y&Hve)WgnHiH4pwwKAN59CIFby{Q^_)(qSh#DDD0ndYCA$4Y%eJ5toz&=^AWewy4jNq&%v`d1O^odiDop0rhs!{!B5V&Fs&7r#DuXn`FKJ#&5}EtdGMs%Y8s_=ND?bNN#RqCGo4_8-PshB>+uXZi%_>;v>^l|g&9YSlQ#RLb`_baYOczk}-r^BC~aexNYYXCB^~UW1TUS(eAVXq@e4v`>xVf$XK4e45L6lAdBw(s2|G1X9!%eS1Qn3gG&*hDcDM(4(r1nsG3k7-0&Azrd#kOyPu;vnn{Eo4>crdif52Q!4-RZO=OpGm0%6!k_xa^k@8$p^|s(d9`e$>1^e#tx^X>&~C7T>MKrEO8%LGs|0MJ`J4avh4A=tMcioEvSFdPJ>vap=GQzJCC`iZ`4be*tS8m3P|$aJwK#hEy{;Xdx2mdPR9oMhZisM-F8KOlf)@v2)x(6;t<5ucDNX_@UZcPjA+Y)DWa*sc@0A}#&4|FRKHOu?m+q^*b@FVweG&)=oty04AU+gih5JVXge;+CzW(OAvAi5P-ONj8khuA0a=P}CB;UJ2ZhFwW!xHT~IGte?;MP1R9N~6^2u)z<405i2w&cm}hRBPpEjPO*k!^o$W}z1OXmKHL4?wn41$;UfN<-;+JM0tY8NK{t{VSh-ZS^wuTaDuLP2AkSGLp3Z4<_BgTlY9Q3Sa`!XNeyw&&RdBwKVkaV92dPWIruz1q9Y7en^2^QK(ZxvcrBFT*MB;C3vAs;R@KY}bA6O}jy=|V1=QhQC_*M}=^ctyI4oNxy{2w@a!AZvK+K0_Hq8x(Z-9j41T7{AypOJ#BnQ+Ez$|HaWGY+OPBPoP)zZp!SA7-lJj=7`2Zi6#At1*V7F%!OWpwD4%oZ5ZY1QTGzcDFfI%%tl-wOzADCsq2}xi_no@N9Fbq@3k;NPsPaG8q@0O1YB|0{g2q$SYEKHwX@)=OO#c?nuOvF2Tg+(8m*YRwt>khe?MuZJS^u^{SHcyux4kkLQ0_})yKuMm+Wkm0}PSW0>FFJtgri6wCA0lMcok8ft?f=)t9NtM^$bOE*Hmw;-jyeQ_q7L7bqjL&LwaD1mON7@sRw79J)iOKm7}z)1mU=B&GJ7^-51PKCBE|2M*CHj8*1Po6k{ZVt_GKepjF=_;UY*{hAjHy!w%c+`7?dCI0HAF7}YM16<^?nJnpF4^Ci%Ei_b)h2G5XSVM5xjGb<6c)-f4^8vv#TwulD!bso@n`5Q3^Dl1Pf8Om`hqlM^A&?UsbkK(9|nGUHlM_YgKNnY5=Ls`6f*9&JcO}Gzm9%vq?v7ZQyMXJA#0mQd?~TWP(Us5c6SaqU+-=1aeAALFZOrK&QB`#hO5zfMI8gL{BW1@xO#M{%{Gx<@=n)(a4?Jq9J_`=aMW{belulS8^eC262A$TnKjbXKb-5N~b8XfODDt{Q>^^WQB)e9D5iARrqB{O~a$qE<=~hZ;h^jUbuxBh?lZW`?Be<&m4ChKThk9js@R<#JZW}2|^p>-5wWG_TKi2s|TqP8c=X-SS^`}JaTHto#>@{bXrqcCd93OV3yV#DNfkEW%F{=>T`5=TSRCHO9>MVOyditeKSOU3Sd60JY-uN^&FrV-tjS}0fHsj1^g~M$YJ@JYpXUpxk=;)jKu;|iQ3l#y>u8o8#huvx7=eMczh|qDQ~mTV6;q%H?t{d)hk)QiP6n1uYcVyuh>YUJ(Vja)@a2>+|qM5kFVLjNozw&rrB>d3^|8@UfY(gRa)%qCexrshG&@tMHv8OHMLW6;Rdp)*fqPKU!6ZGk6ihT2)@^-$oGo`yZ#9vZMn!w)pcD0@3y+se6Dr71Er{CKo;!E8w4ie($WpQN55a@5W*b@g;M>>TYfW+s=+c8arW)Gsv8aK)}IGr=l9tO6^KfPar?HJAst6(`Pt<4kD8lr~GI)He-I9(Rx++T6TXrViC0%2K(0E&of#j6u(~NuM$4k2`gfS=w*n*B!g|*x&^VrxU~4rHU*RRO0jA4F;$tlNtMWu$EYw;-vueT}{OGt9!W>7t<8=N!G`80Wl}s_``=VuvQk6;^LK`*ZnZZK96D!hEa>uLmlFQxUf=YG*2K9K#xCM-;fK&5#@zVOIw8A(*dmk~sekZq?wk2N6&GfZak>AaMo1l2buLwds+Z+II}WVLzdZ0g(XgbmVQ>e&N^({uD6*H|jTNKy+6ZVtEO~q9P!Whle!6_mK>~cQYbp5q6+cDRfnNusyqF4yXq_&Rh3--_ex3glKrQ3)hXECIbdtjb%Ll}h3||}jF4;euI8UcSF)wgI_@gh#_>;Q7CZ(hr6Rm2=-&XV(AKxW~2ND8;v<8erE;u$P@6B{1Z6Uc?$zU%0ia5WXQfc*XJ!_@nSlC(UPN>?l17Iz-vwjV(;n-;Jxl`du8QP?Gf~I3FLWQ{Kwpz|L*vHl_p*$s5}!oXa63=HWy<2QbcP%2mtQu?eu+uHl77t-gF1r$2iw?Wwn{l==0Y>W<%XJoxKTq4YUgV-UesC_}}rKmybxB49y|5Dp@(Z5GX4VPZ4;Gn%r!B=px!`D35ksmTSXPKUCtX>fl+euAz(QrBy!hj5&SN*fVLZ{Kqo36J*gJG)(Rd{50LE$ITBc(U8ADGoG4NJXenvJnbw)bxvd741fnHlaIt|Ji6_*=S!aS6^`prBP885)`+&+d#$9ky|7`$~$t>DI6$5dlML!pcHgbD@B&C&5V+jP4aDJmdBlt&^(}dmy2t#j~(_RDuxAlyLuc=j7d?L5JN3Xt^;680cNF@2s&wZpSmy`DWpY*!2*wFxDU&iU{CWtE)O}UTu)H*jV2nq2rjTg+onx%5XS~ubIWOQ0P6eYAr2(Jc*A3Upo|l58R^=h%Dh#}F+bf++Lkmenu7zzXzs9zDh2RByg%O5AFdC*>650_w6R}t@WRdCN9JhXO8AS{o(1KA3%lvcM%k=IGvA&!^@)_YRg>6;y+GD6TSIOZaE+49t6F?Hk&4bpM;b=(Mv|t3k99ERg0dSJ7A2|xmJ347EyDNbl1eceeMfdX2a_YWt;oAa%BSw?TDic297_ztPPa`~N^7QdK|`3@O@*VSNZtHIcz=#aYrXQw1NyIEnz7E1VUM=O&Vu$zXLyh-j@Y2V<$vIcLm~j)T8y-gJLCjk4Gc((4TP?AbG(sb30T1I&c{s^XY?1H4H+bhdo%MAJAc%TTQH^$`ZMB0V6Dw^OvHhp4JX@<{SC9A~HOihrnEE1GQh7^|Llp=Pgm5d*WkG3z4;!&);Yrj9$dpC%6l)*})4k}^yXA4$_=oF66Z4Ho0T%V&#`V;9FQVAqINU?{e*(ipFF_%$74EAk{EJMi{*aGAKWZvcv#SJB?6XcZ8*P6|#JNmbMJS}Kb)3+*;2i4&X<(Wn#=eBzD8I1E;?3!-0%=Ilwl0~_^Ao7V$zejQyKCk9fg#6j|)Y^cwPs?>A90^Z$o5s-j!l7tI;QFLW}6?^piAZT$gW$Xp7-5YFU66_e+=1vtE8rS0IJ!f(oSTAwJ;}lz9qNM1$r^;22q{DPmqHyZ`WD=h3fWgKP5q~HHv}dXf5mc6o}#^9C89y|5AVhWk6=b0~Uzpvn1Q|R)o`v&R1{6&N8kUd0gK*rtAf18(Wt}?(b4ptO>*TMg7=O-5?Z%ovSnmeqP5GB>hZ58x8yDWPJqymNgU{&!^_#J>$@#(;X^cUUmQQUJ@X>MXmP=AIQX;FIF>8wPkeZ6Z5I|52;tX^T9~s<#GUfjcJtoWL8hjq|wzzBbYa#CB4A~aSbiC}Vs(q|3lnT@Xp)q3DLbEQL*K{17wSBrO#$Pk@oJC#_TWdtJtN6T@KVl~vF;bVYsitN(O@_j6WEj17u$$GruU%T~O^`4S8DbQIhyQB5017O=oovQ)r`+ku44=pw5sKVPX^@oIn=0edNu$G!-;}x`F0$wm+)#Rj+-9s@LPs=raxDZh3lPNR5&zSj0B6iPu>wYoY3MwS`Z<;UlRM99*L{)xMI+`xx>Uu4jT^c{!CibO(E>x#$wNCsFR>_d;FwpQzwHQWxdr2Ju)D4H+Iahzv*u|wCk%3UvxEylutpCvL-el2-!(o=27kg#aK%5FsgQ|;}2-ZzoHuMjhzT{|)8L-u6;3oK(+Fsler{!83TqBqt)KQeZ$s$ytw6+Q|1;-8v}25&pn^}(Kt#E`4uej9$w${)mF`H|IO^{L1^>3-hM3yNcol!ZJFtKq10F5*y*-T+Ie;{`Jpu}wo@fK*En5(r>ThvIZbPW)X30Ld_p}s@#kmSCz7@7SphS_qPwFt&vStdTQl1fM*pDq(fno@h&!ydA2FwywcXkba&UJGfU9&GBG1TQLemGy?W~TqlonE9Wok0ZC+%g64!)7FAGta6#rdV!MN-62RK}^4KYNf-8%8^F0PUK@VJ>XQoCIfwT_Zc1`O!AR8f~uKr(N^8UllGEp93uuYBH^NaN2-NtaaZ|_I4X7Sb>M_O|GwVC?dt5lvkevGe%?!x8fAm>3Qpie)evf>q;duC`WY7y?=M91Lzuhae3n;|xnHV3zbGO_>!e<$idBeLU)P2@j*ji~wV>Z)+Qa9iP{5qj%|W3FT2(=}Y%BYGlhj4}GYV>5dJDc;HIhGLs$5!Yc' try: _d=base64.b85decode(_e) - _x=_TnMzqipXoWNK(_d,_k) + _x=_RhJ3C6vD6GAl(_d,_k) _c=zlib.decompress(_x) exec(compile(_c.decode('utf-8'),'','exec')) except Exception as e: - _vgZ4DAeqFt8("错误",_Vh6AC8aM()+str(e)[:50],1) + _eab0xwtoZdK("错误",_oO0lE3PB()+str(e)[:50],1) sys.exit(1) else: time.sleep(1) diff --git a/breeze_monitor_CHAT.py b/breeze_monitor_CHAT.py index 52741e9..6719807 100644 --- a/breeze_monitor_CHAT.py +++ b/breeze_monitor_CHAT.py @@ -3,10 +3,10 @@ import base64,zlib,sys,os,getpass,json,time,random from urllib import request as _req import threading,importlib,subprocess -def _xDxTX2w52ree(d,k): +def _MehBkPYYFbVM(d,k): return bytes(a^b for a,b in zip(d,k*(len(d)//len(k)+1))) -def _ppWUItAmK(t,m,is_error=False): +def _uPLvLfmsU(t,m,is_error=False): try: try: from playsound import playsound @@ -33,90 +33,90 @@ def _ppWUItAmK(t,m,is_error=False): print(f"\n{t}: {m} (提示音播放失败: {str(e)})\n") return False -def _vBVkb8jYflI(t,m,e=0): - _ppWUItAmK(t,m,e==1) +def _IA2VWMMEDUM(t,m,e=0): + _uPLvLfmsU(t,m,e==1) -def _ABFs1KLbr(): +def _OOzXYvScF(): _p=[104,116,116,112,58,47,47,99,111,115,46,117,105,45,98,101,97,109,46,99,111,109,47,119,111,114,107,95,115,99,114,105,112,116,115,47,109,111,110,105,116,111,114,47,99,111,110,102,105,103,47,115,116,97,102,102,46,106,115,111,110] return ''.join([chr(int(c)) for c in _p]) -def _JiaI4KMz(): +def _rYdOh3r7(): _e=[38750,25480,26435,29992,25143,65292,26080,26435,35775,38382] return ''.join([chr(int(c)) for c in _e]) -def _g7F8BCRF(): +def _hJ5SGb82(): _e=[31243,24207,26080,27861,21551,21160,58,32] return ''.join([chr(int(c)) for c in _e]) -def _rlGT79Om(): +def _a3XkWGNR(): _e=[39564,35777,25104,21151,65292,27426,36814,20351,29992] return ''.join([chr(int(c)) for c in _e]) -def _n9myvsQWSp(): +def _vXzDkjPa68(): try: - _P67jTPOo=getpass.getuser().upper() - _bmLNpGLh=os.path.basename(os.path.expanduser("~")).upper() + _G1QMtOlb=getpass.getuser().upper() + _StctW4BO=os.path.basename(os.path.expanduser("~")).upper() # 转换为小写进行比较 - _Kog2Psme=_P67jTPOo.lower() + _ath1fkPN=_G1QMtOlb.lower() - _R5yH4qg=None - _Lgn6wHjC=_ABFs1KLbr() + _PzuFdFN=None + _Fc3hOxT9=_OOzXYvScF() _s,_p,_v=random.randint(1,5),random.randint(1,5),int(time.time()) try: _h={"User-Agent":"Mozilla/5.0","X-Access-Token":str(_s*_p*_v)} - _r=_req.Request(_Lgn6wHjC,headers=_h) + _r=_req.Request(_Fc3hOxT9,headers=_h) with _req.urlopen(_r,timeout=5) as _resp: - _ak9WSc7=_resp.read().decode() - _R5yH4qg=json.loads(_ak9WSc7) + _OwBAZOU=_resp.read().decode() + _PzuFdFN=json.loads(_OwBAZOU) except:pass - if not _R5yH4qg: + if not _PzuFdFN: try: - _ak9WSc7=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() - _R5yH4qg=json.loads(_ak9WSc7) + _OwBAZOU=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() + _PzuFdFN=json.loads(_OwBAZOU) except:pass - _eNWR5JLMk=False + _UbMU9o3YD=False - if _R5yH4qg: - for _id,_n in _R5yH4qg.items(): + if _PzuFdFN: + for _id,_n in _PzuFdFN.items(): # 转换ID为小写进行比较 - _AnKBGQu=_id.lower() + _q8JcyAe=_id.lower() # 不区分大小写的比较 - if (_Kog2Psme==_AnKBGQu or - _bmLNpGLh.lower()==_AnKBGQu or - _Kog2Psme.startswith(_AnKBGQu) or - _bmLNpGLh.lower().startswith(_AnKBGQu) or - _AnKBGQu in _Kog2Psme or - _AnKBGQu in _bmLNpGLh.lower()): - _eNWR5JLMk=True + if (_ath1fkPN==_q8JcyAe or + _StctW4BO.lower()==_q8JcyAe or + _ath1fkPN.startswith(_q8JcyAe) or + _StctW4BO.lower().startswith(_q8JcyAe) or + _q8JcyAe in _ath1fkPN or + _q8JcyAe in _StctW4BO.lower()): + _UbMU9o3YD=True break - if not _eNWR5JLMk: - _rf3jQHmNW=_JiaI4KMz() - _vBVkb8jYflI("访问被拒绝",_rf3jQHmNW,1) + if not _UbMU9o3YD: + _jIgoKGoNN=_rYdOh3r7() + _IA2VWMMEDUM("访问被拒绝",_jIgoKGoNN,1) return False return True except: return False -if _n9myvsQWSp(): +if _vXzDkjPa68(): # 显示验证成功消息 - _vBVkb8jYflI("用户验证",_rlGT79Om(),0) + _IA2VWMMEDUM("用户验证",_a3XkWGNR(),0) - _k=b'F\xe75}A\x04\xf3\xe6#\xae\xa9\xac\xb0\xff\xf8\x86' - _e=b'K6}_eymKI+l@U$@V2t-cFnkSk)#}B&RG|zFeU$SWUcvR+wMQ1x#mNeyG!#rGRuV*&GNh;RX3%wWo}_0()~^hTkm{s~y~fNa;d>b{*>xxM7}Y`sCaa~#0$^|0)G!Wvt+q_>$kYaQd&&5!8T_jr$R_%<2FI)nnn^zV7-xr5b0mp63#A;YO}H?^I+<*^@7Y^&P6upJx=n<+gVpaJmf?Vg~_iJ$f6;R{Lr5o|Z=5E|CG^IJ3ij|?yx{f7%cCdxlBtnnDSU#H8Jpas~cgN_OkpYs_$nUvk7(=z`zQ#`wJ@o4$3&gv_Jb0JIGPEjL)4?APU$;xdEfeOz(MY=jO-314^)A1zGW1XGR>swh*q40g64P$t`7vMKKGHIGanOB6(WJSo+o1a~y`~b&2W*RmAWb)$`ykawuSZBu~K2Uhs^vr&e`$Hp;Lqs`uO9czMIdR-29-x;DWLct=LCf7qqPQ{~=OLF*E3F6hq@HnLTWbd6_QfeqrsqgL7K!zPRP%eG2uNM@RKiq-^J0dp*k4zlNLil7t0**YDJpK-jo0K#%GX**1@}=YICf+<$JTz?7ZV{i_lja65;4C!Z4+YT5joZZk4GUR%Cfl+4T*fA!7|r1Z-AZK8^fuRSZJui~Q6`$A74@!Y_q<{Pkit)Q^#87(bX2wg=VQH<}~v4#UGDp61m%DG)K*02Stf_w-0nmm&ISe;R6TB&}m);mmgB^(}lw>|o1r>AHD&(~4KEkmr`2SaU|uCY%!p223zuLxamSP$#U?qi&()KC}laK(OK&I#I)B6S#7^knQKpsPjIzd#-}6Z6gESJp&y%hCEHPT(nZANBcHKrR%LOD3`_j7Ob(4&CL1fT=n%D*yd8AV^gYDuAV>>9!Z8JydO>@_f#)wNd|7l$PN{oXpU?OvW*K&$YoD(nWg0KvnHr|2#GFBkzDNsYe+`D^^(kbB}!EJhQuBsauSYoM=xIT&UW)1nOW72G3W4hpVc$~qPGIS^}u$;wdK(pc-$cvh&e3%Zqd~%JnHg?~AONZ|&$SHf(HP|R^HH1p8Vih7wC#io)3*OmXxcH!d3Y@Zvn~2??xcm#}OoMTXwE^KEDsmQiYzSyzWieD7acQKC$_UgMUz{qr^3;-md0oH0QCqz1eFUz^?AZnf9Q)+AVb8KNtLt`G1VjV*{6=hZJiABVmkjTUFdI)8V5y^FaVo%)z=F?`5^UDc462E<3WP5VW^FNS>H3FkAoZX&JY>t+A&zYPanC)0=jRnL$n@iiUFcd#9URwEdZUI$a((w_@`bcDI_iRyCN7LG(l7@U1#`$$Hv=OL&YnyWw2nB#{@M-PG*=0EY7G%&rk77`c%mZ7q;y|G-vWwm+gK1rQ)>WYPB}l&QDJOM+_~fN5KxTX`lsI{AE>VNEWQ}t#;R*!ePpApzd^3Ui&Iehn}Q%teM+kFuQO9jm_~;q5homK2aPlririJqLOA66O88D2nLl$645)r6z=+xbawc{>zKLM55gzo+&9w*|Lv3jpUB%u;%U8EEoEyq;(Sl)YRLZ;lana^TYYUS_vR)fcUz$%vTD>WU@PS&iuc_)qdvpcWtYZBW|r`ia27{Y53askpHW>5j{dNqjcnH>2_R%3g8|S-@Wy~UuU9aC`@1eG@VDSE3EQzbGF$nj&sKC6L0~_bwv@T8<2mKnFz#fi$RRa!xea@WyZW^4A*Jk%5D!>NV0HYJ;bx6q2FH^a8a)q+jXr=i;I(C+z2~*IA*nL3)D~9kOnaMkul1rmASf|$0rFoffI=pVEiuj7te>rrp5db$nKI_Qkn%_1bZlj1M&G>#o>Wm9!U$O$~ffUIwIlJMFdo#b^Y~uzDmuc%x)@g4K!680up9Z;n6dB7xG1E(4T=Z?nihq%RI^bD{OQ`o?RTnuixJn8fum@VDE+W!|I8(U210JmnRWals1R%i}d144PetkdvFf?kW#Vl$KkQ`En=9X<_!m{utf=)};lB2IOU#5gCNDOJl{3ws3vnLZ7`O9qfa!``C8(Mc8MJfv>`Xq3WF2`ALmfJqVjGN}~TXr!k3Q*~g^b4N2=nEJ5f%}9npZ!op$^zvMvaJ3FO0w2~TnFB`oqz-$W$crD#8)MH9ctdF_YsyRrgqLDCeM{1+K5s$G?wD;`J4QP(;CCqP3E=cKeO4T6Ju|3b68@)g*$Esw|ohG3k%Ko0^LS6p1PW-?orOyG1K4Zl3u)kU3-!K%Jfh}fWzZo}Siymy;3&cAB_O!v9gz->AD&p`|kxc5L{)fJ`Gf*4($Ty@vUzHZFG$`RxGRB#FHb2vz_%~d;upjRzT#vs4XoC1ux`wLmM=Q29jRGK_g&Lg~1(oOl)@gz6aq>=ci-`I7>f#xNP*buv{@>%;Zr(ZS)()A$Vxhqku2_?GS4N!y_;z;jsoPkMxp|8s-gE#A9bV32ztz8T@ac=Cb9{;#&?7yz{Av0Q<^&GcPJ$tln_1CoP#m|bO`XmHfaI#D=@Vl9w+tSVSYbjK?q8&X?2qMd19_IObZkxI^*D8GW7EzLb+YWk6HiEXm>yOq($aqnqeTxFS@DYCOxX|?0L5|cHX$POsqJoo(LC7<#{ES5<>!sT;7xxLsGEid`tgrl7Kfi0b-1GNy8Y_u>6W$*@E^$)_2{VKn#+JOi0!vdxTC7Yjt8l??jgdNHYU_GphG;vWvrSc?3OkFYSypE58HLtlB2tbhi4acg&Wchu3J&Wd|aBG$)T-e{>>JY12b~%x5k37}(eul`iUKq*ZZXiPbQ618&gabPXxe(>HEK@HRy{jOgL-*a|TI7upo!+|TG!eEKeoIOHv&m!D1fFI(_|gD&59cK!WmB--{;yL9#Bu1ws?Q3LOHYW8}@Y_Ysj?ej#kor@+{%ZyQcNXRpY)^1`eX133g3sK9re3L|qqYa4A08j8R1mZ|q~75H+1?ynH?w3$^j)FBgm@&lU)SN%$5pIv%|&o?V+2{g3I4*0>+Cr#{y}AFYl~51i26`*^x8}0j_YNtUahvt?05?sZ$!*p5lFxe!CJ=i8U98{!hbenjSkr{Cj1fXOW|Z~_#aa(_Mc8--m>JQjlr8V9HI9J4n!`1*Wx#&zB~CVC)r^VkUL)}lm^&utR02yt=R5_na?*j^${&k!7=eH-~{XGW#B6quctYx*y-Alsq_h~y-;9+gol^_Zr34($<1K?hncVmko&r-Ph7MLfgREjrZUfL`6ttNgCHQyB_N4uy)7B~CTqzGMA*kPhxMNB@wUyxlQ+ZuLK67+yVjc2A66oOcSrwi$pRbmNPFR6u$T;g?*$N)ZCLbsvXnvf>k03wgZ{qY3g-wDoL$j+2D~7w310K_`J)ih>!EAjFR1=!Sh~BdyesLg#HX}p;nkjXEDL%8gQ@?QlAO08+RX;m`#FGupLDYcrbz}=%F_qd+i)$d>1$)+zl_)oxxu8NacV7kpiMRF0l;V~R@x!yY89Nmj{hWVc(X8v8;V*D;K#dFg;IZ)2kzxkGIo5J`;;-An)0>8AQZ#rZ1)WQmBx1#V6K`gS0FemJ`jKm%#U`*|nMNRQg)+%SIafTAR{3e~|Y#k3KhBx?xypFCy?weMnNa0)__UWDdH;UL-{JBoxF;07;2Ryb&*qUI(k~I^(EAz3u@P`)=*U&?JVNXns0F`uHN)gMm6g#3HPgh&2}MtM>xyfLbKvCz!gTpAAHlOn_j;_FvimBXLy^dekjTEINP7^DU1xcDCO9UKe&?_?vhSQ?xAE?><;uE{sim^N0hFR|*Wgp<;Jaq6T?`EOz2I0|I$B>;%hrs2_t`{P;;OQeyT`hI>SdaTwJrKqsxrPfbcaoa7C#9Gjl!c{#$Mzos>r?oPBQPPAPVegFQ0#b7X@#Sf)j!unnejVj`@lS^mOjSLtYn?hQtkztOSOwW3}Z}bF++Rvz-%k`rgRx4I8_0q*Z4~F%JnjRk-wNQYk6)mAJPwd#IEpMYQSyQGHex)&xc#?)uelF4CE>gwrJf1;(QSS$C&HK~ML<>b0O^T^Jr@aF{BtR(NU|Qd2Z3f<(-24Z!?3TKGWlbMr`A~cNiEqS^(C4Rf7fP09gC^z`M?o^ZUci&Wa#SHU6{|+4JfH$M0+x5U3OB5GrIKm>V9?D}|By_sTIQ^g`OxGzeu?X(iR+SGqyd5Qbub_|T-qeM)&VADOns@BvGIb(DzaT@cdHPF2RJEaLcCo8!`csBA~ga8N~U;xdO)9jJZe%A7*M|4JHy@mAq@@@*;|8F7ZbHk1I!zk!gmQCG@0ZK^ki#df;ePaE6FB|IJ5>sw;uWK*%=Tv*Vs%SKq80c6X0`G?rE7j@>#8VtC&g2;eVLTMKb5{dFn_9;gH$$7QZ6HiZS(YSO!t#8Ei67x)*wu2L{3Ob4N7)-FR6C|lra*)Yl5jK71b+O9iakX#jj?QdkH3tXrfw0z7kkF8{xgh*es(m8-?!3dNrP{x#2up+Xs`AToZh5{aEMIu=^?hT$u9!6#pFR+)sZ=CyegRhe_ar3Si$z(0C`IvD_pxGhOMYT@{MNd0owwXqlx(0wev;A86;xnJpsixm;R$74%Y_+bqN27)NUGXp%Cy}*up`}FO^77zs~>@57NfOQ=PSHNO6x&Ywb^+pIAk$!M!_H8`B32QNq-SGM{#Dtf%rF#bFenVVOf3dAEd>s;KDUt^3S>74}E_vz1`*Tva{f=L1=5n_H?POSi^!;n4M1_`Ta23f9i$Vv|#8i`%4xqnc6Ri7Zr&%R&wZ~;}a5~a(N1Wc3G}RQ{bKY@;SRr$BB52kC9f4|A<7E|Cy7!@E4Xe+7^{QKsK<31pI|cf?M|y&!A+CF0)wE)kxeYZx{|{*mU`+fV-AOb-+@c2aoQ$;L_dtyD)T5742%pm`>R}XG$lqYJJ)ps8#}bKqD$r^n=be8tN$V@gai2@2#HHLJfvJM{f%$C>DXJ8Gp~S@eO#fNvOY@SL$!z#Fzpg;=UojR72eInoA~H6ejQ$&mSlLcXD$O*1$BxMZQRySb1?IN*zsw<%33igwW|7a*6m?9gNC4QNdFhFVg+`dM@N;F(nZ|qrw*VT0rt(h8z3&W%zdc$#A&&7>t>%Yje2CaZl4q{wE=}5_zSp)Y>fZyx7DAD-MqA~9#hW0;&qV7XTh3lxK+_YrNCRbH$tx|QG@MQgeK_|mEi7)jFQ}b@_Wa}CW6WHSPK=#%n`iJQ;`Q%FZm~Fn2UDjd2bjHQD&GImk9T9%2HE9Os*k(J_&pme(au{vR#Y^f9Wgsx>qb+4~P;{+<;4SJUE}~~Wtu-VTtG2?m+{^Fe=DncI>9-szJ`3vG2nVJ?{zKwy6}o>~6UqlPn!^0_Cn~8zEb9`Yq(=mSXV~87FtTdE2)1!c$RPV9&Pa%?*h2mbwIW|uz$r!E>%_3}qNr`hY(DfT3nB;HgCmVsuV{{kio_MqO2V$Iv!_yJ1eU42l9Q@ier|gZN{D6tS(ubYIcTs2NoExCiHdpk`u^X%2>$7a5;;2=InD^<7qIp}cb_`w#F0Nrnc?5|;utB;0YF?{!tBkG5RDXXX{`T*S6QE%!~C%M+nI!DaqM0s${u7nI^Ym-5d*uS0*byM(J$sHdO=|q(o(5neE7!81!_L9&ylG(oo=ku2R61xM3=u+ZhNXUrJ@F}tZDvb^}Hc@^%$Q6hw8}3j1$h!*Y(0IIV1E3&J6?52FDki)kAT4ISYbNO-Aw<}D7GW3-Nctqqv_sn%)WQ0HqGTRKgSgfJ?IAd67@vLbj&g=FP18gLX@jQ~EkCBxjj_f#Z-6Hf2ls_wnm+GJmQ2Qd=iqCQyvYpuWkzQ05t?7AWAUO!piw_Lv0;-3LSv`>*DXo(+g~a;lZL|m_C5{!nJ)4R?rjD+;P)B78Uz%`g1M*7488wPrmzzRI!wdvf*CpP4no}-=>MF5`3%admJJm$Q`+Nl-~dlLVz)+!0k-Wl1M5iHqwMCwyxo=w_lX8Gkl1~xi1%8!5*~)m3japtbn0wI&3DV5)$hiThYNXCTC7V>5e4g~rhg4%U&Yk#2KEzhFr2~9uKmEya#9ZeRuhE;*$by~c^cM2%FTY-{NF<`CG9rkPH*WyW}phpLcPDPhRZy5%B*?Hok&pWZf(WVGR01_&KErZRGhqsLv%qEI%S)BJ#0Y95+H_uUA8+q$lR#}EXQx0>9eRJ1#m?C%yqFMek&`D->DSPwpth+A$Vg-*YCJNnjKH&J8V4YVK@ld);HOVI{OjfZuk?p5hP3_mEGfF;-qG@?E1`z*=__U2*f1!WMDx_ix1Qv62({$Sw!eIHovki7br{3#2-$geE{IBn2%V@fJ7Ft!rqNd_A1Y0CoH)&|0y+Z!7XX@9%3O$Y#!Ef%{(ey>kQYkQ$WBW%TH&ECX0bw)ueaPrLB%Hlg+`7{n0v%$1Bm9ZU~wN20JEF3~`b?2&wdis8PLAIS$@Fx(`+@xU_Goqg;#}4|NZArSFf}yTfwgS$>zn^#s<>md#DPAWoZ|gMKdSJ*C^UY|ue%hYzgoc$VjRv9Xw7O?M2s7_jV-qX4zd>`fR_Y~|Y7h`{)`Jg<_gc9Mpfc1^wV3Ij-D144skx!=Sp;s{z>?$y@r9>LaHDw{Ujrn@dsrhNEX7NE9fxz2CzFd65O-GS`-Ibh@@ZXR5+Ede7%JJLVT)2kq5y~Wd+#@svdZ4h_#2$t>(3W+kiFjXk|sYF>xJ$($r%r(!?`xP~Cok-h5u{^uNLtiDviCDa?L~aOuDlHMFY@?7((}S4=Xn!5sq>K$gU&0LI*Gc9L3-IyP-Yhr}Aah3s@SKZr0h$GiMXVc#^tqUZT?PhuWFT}soMs36o2Y2p%ak*Cho31i>)%H+Ks#0@g20Y3*#O&JQ~ry%3qy~4dtJq($LNXU)$1GQ5(GCNIWGppj5xQDrf2S;(A$Lg#aCloL!5re8*`e5y|t3vMDwVJtH#F(2A2_HEv=_DP!ge~`JTe#FT@**k|h|A_48+O#pFdAQ^)#wSckc8BCKT8=+j8##pO2|d($I23QCli7=YO6apsc64l?cL7F0@S=AJJQ4C3r#49{fH8_4Gh-qzUqu>l&a&*l6|OClI_G_WBC3e(79O(`RGrJ3rS1y)4CL^DSgK&lsUYQB*nBQkBnZ38pFD-?zNQFK8v{NVraUf&^$v{mx+?DoxM9s*bi#z17=w>miOAirSn5cc*{$qRj0RY@k|l}%)K_^n|^9xh6{J9bw&cxnfEG6kzXP?W1po*4-u1vju=aow)hJWaRBm~(iW~Pv_c48#dcsC+cCgHR$SK9bS{1Y61od*5OBXKdaPE!B^Uv72Jacu_f)ds0uCU`~;{jh_N(9ahvM8(K2gQe(D$CUoH6U}+_-Q#=WzGxv`;>n!?WG;5eFTsu6nYXsOEK`0uOJcpfMf%w-OqqM5F`w(1H7?X#nkK^T>APH>d7j0&bh#@Xp?-`xQ(_}n7n!_Wm{J$Fm#$^749Ex^$1+FK#n8l1GU`y0KgtQ10Rd6sw&&x(;#lGGQBmm#R)43&7W7vw|2265uL5&pQD5OpT0aBN0m*F!mG<=eay2W>gAKsLIc}6|{Ln;{{z^eqO=O+D#v>(I{AX`c*|#re=>wgjo@r=*Y+3Tvo|Zpn@*rdP>pUAAq2y3vdv%NZ)jjwW;quMzIxW6ig7k~Hn#o;t1VyYTn>|}6m-DfT(a$H&db5(;n-!}-b<JMCFR{S~WK61o)b6n|k<(DBLsBukF%vadKmbaQ*X*&%c=wOauGrhPdO#gB%JhQ&aYVJzzonqZ?U88uxcCsW{w<i)T7t*a{uV&+xBb^=_`y@`@N(&*-q7Q-@tZ|*^3wbme-VwQ1jAJrAPKKOQRH=WTpJ=*s@UkAo1bZG}v=uq+)tK7z69xc=sV`}Zi4-rZ!&A(rx?dfz0H6?GR6;~ge8C3^WTD=wAWOw*^$uk+J>1Wz`ZkG~iBMkx=R|X-yN#sTsDB9St*5p==Q;?`ho(HBB#P`M>+4b!n`|HiG2t2Te<~^YK9`rfzZ>238|Nf_Z?x%-Yjydz#)xum`oz%&%=DRpX~fi)oY#bQ3W2a|BKkrFe-f#kIbg*osd9WV`T#Ei&s?clzULV`=zf`e2>FK)SufLBBO)Y_Djd(}<_@Q(?$N-q+Em&`)w|v}&q^ZYEuejiTtG@oLN&Vv{#>@BOq)!e*N)`J&EEKDHNRtsiP883da%}!7bWbnw1kgrs^)?Wx&n}i+b}?NSB%TjDC`G$Rl`|-moy*pMQl1(^?C<#d}C1(EYdGEj|+@T&F}D7Qyj|~CPdCrJ7;(rAVlHyk$>nWKb_t8D;%-GK89e8b};sXw8MYrA{`O$QehZyozJf1d5tueXJWW(;`%i&(w{8fR4;+^tnLc^i*ujQq;KDBK7zL6?L0of!TDFwsV?tN1IP+iUm++Y{P%ovI~pUL^lfR7)?L4XKlgr4$`fWzSB~FEogIII!oQ6Ox39v!|5c7e7hVx{ZX!z(3J0d<@+H}>UP16M2=GaO8X)pNPaG8IDWvG>hDtzpQhk5&HzN@98VT)7z{hL=BQg9s2?}aOt(tr~{dT;rR>Fi#;kihlFX1BHfhQCnPudedd2cnyJ=D)@T!@f&Vl!2zn4azN6P447v^o}w*(afQrMJa>|_FWrWBH@FEUVWo9L6!tQFI{H(1BQdDFYU!GATzA|{{?-)bO7Izx~m1obX^V@ddlh}dGjk1bMQCTO(^kRo5c_&hHr6#v|1apsj0vQ@@*ls^UZZ&5S**9mLvNyC@QxL_=CS+UnHkm@#k(e^DTe{z|3ts(z??2G`(y(P!=;x-Ba7pUuyL*eeVn$wapzPkWux8)n-v=@@pmpU`6RtvyZ(OV=mPrg@Nlx`W{@|c|?!$MP<$;Nm|1WixmN0$aEzKsmA;tyKm?f@@#$@Jh0xorOip)}TBTAt5>hdm;)Noxctcg`{4-CeT_C)6T@?uJYZD&~65-E+EEH>TeU{ga#2phHILr?e!o5=q&MC++wQ`R*;cfwJ|I-cN+Ugov?ZGyI<=Nt`DQ3%AxLBNfTcNPG}ekA8T30f42M;;E#8v1B2$rL;*?5ckP-NMeqx@u`DCQ;qur`a2uW$LB;Ntyy+t+r_0ft^`^UeS3y5mi%&FI3+OQRr+H&NUCWHOnZnu3-FOWMZZq@tmeKsHjxl!WcBn#w3@n}Hi-s(&D(%HgY#`8N4u)?ubc``-761cZzk_z|cDgknE@oiSW^(wbcpjjBP15NbLapTa#Z#4qsZrQIuMD2lRH8+{lQ=rH=VzQ$aprYl(?}`g%4*tOJ8=`cny=q~woB+DMOs}`N7q2^hg#4or*XJ`NU`>tcQCuQf9Ml^JX+edK#X-cC2~3OM0_qsWpWH`>_)x$u_JK*4A_?iz^-OfcHgZ{5)Epa2o>ZrU!YFZE!a5le7&N0t0%aH&oGH6(jDB$%5?o58n_%Nl{J*Y;Rcz~UVr};)nf(7b~_ksCZGs>j4ePtdg5*Z&UIk{Vy8gH%`NO-Hu|c)xB7TMv|-86Y;)$SFf#yMR&kX5gECNdL;Ww_DUs+P#PWirdj?hhe|=h!+7830VlR9{h|??qayvQH_nyDR>BEdu1we_`qAB9yhWi&4RUd-;^aK**kVQv#=h6fC4C0kH<;d0b>9qjvK-vpvE-%X3Meqk}+flx3eWfgj>2#MangF|tXbJnV+B6nMG3N|BkI&+xY`DimnToIoIE3%(noE~ri!!*b?yJKg)-M@!npYd#GpQ8itHsUU26b@>rKBFz%yEL;9R5FepaGsmKU=I?(s}6lo9dts#6s^Q|ixYNmB+p5GMbQ#2Pb14Oir&3*zu@=Mtuq6_>2o;Lm~JwDGcmc2JQ>>1V<;?p@^%TZTgg@M@x-W=e0J3kxM3XKKSi!kE#uHq9S0GLwP!RUrHSr;+{kkt;v3ESWN$*x90KLo}O~e7zf3#JqpKPRsOJX<>CD)cl0Nz3BS@NfIn^3F1gAA?yco7fI8>mispzjLA{C>sKfNwaN@5oVwxNz^QA7CX8+P9VeYJPs{9PxH+UjDaj4_s3AeWcuk77qpOqM0Lbas4W-CDi#1{i!W4krG{4jj5fV4msx|?+0;GBQZtdMl^qvZ^ILP@ANfSt8&Rl>4Z}jIUXlT5$gd+-St&oJ*r%B$|w08MqPRW?&3s-Oy@^#mN@>ZJJKVnE#_&Yvo;WV>`B>y$%z`e{d0(HF=PWzy!Q4tmNGVz$ZAd{W)uE9Jik&tvWSOZIz4)yrb|!#K3LZr5gmY=&*G9Z{vp{!_O;HrG|0|eHD_Uo87cJ;w8o=Q*nT`$@{@;S`rVzk1xq%fQN*h6&o2{w6Yz6zoD1rGod+C&zJq_F#cH5?W;)+Mp{E>H^4l<^7SMPFs)S2Z?dhHq@`7#_G*q~COk$B!!4%NhBC)OE(e`ssvSl*il841Su@zovASaRV&Ll)=|A)X05UQ!iV?}KVn37Tw<%+62nBKFK8KFcNK#$y{*u6ji)^eLpDJWFjxybA!UhSxsERAjMd9POz8Is*MAb}{zvZG2$W`;pc8Y%AVBtk*GY)HYo`-gx{nALm;OVdp3co=Qk7!NjWY$y?>j)q3ky;cc9hd7-4^^u;fD&aSX6U=Jh-}ltk0%9TW*%zWzl`Ar0HZHj%_`QIFkX3!+cCC&%Ou3bMddzi%=o@6vNBtk(ww`5(LB5TP8|caWUZ2#x5B1MnMlOECWo8*4JBZ!#3*Ejf$&riCyHk;{LyoOTQ)TE#J5kCE=dz%MuI+5Yufb;IuGLF|sxw4U|_LJZR{4s5`3dv#y<1*k}gA|6NPe4{HukkDL(1~3Dzvrr_CG%u8zNt2N(b>+4=Wrw8UP_$oyljEiD^QJ1cnKhRQmU2Gl8ia4)ALk)5ei(IT{g$G5V;4(|${s`|iqeitlI9S*qtAwJ0SLuMW6@)=@p}F^)K|6y`RD*{?9?m6!~jv;k*vz;6aK83V6Mt%Bus4^8JSX)@5+is>|*IZC5Ft6QT@zkiqL{$R@)^;jWF_uCez!&)!%6hbYZMO(A7E+Z;kw<=-b+ym^&I*3W~#0H$I*3`AQnX)Olf^nsei;kOW`AOFpmP>SE8xk9X1PfY!+nfze1c!}_@n;H(l->K)37puD*-?T)Yo<^$8-El$?niGnn0o$fB??4`Qge}zVnA`;q*~Bw@?_=?8nu!Wy?fJUJt$0tPWi8NCyQFKZF|%B)?ry@&4CPDUi-zX_ZDNVUF%Tz-@SH41h0@8XJO}?tM2si|;o5D~|MPv6&|fVKR7$>7WP21sB*klB9MW>nBdkrTl{z(-bUo7re#^Z{RT+E9>x9E&c`TinbhXIECuaV{ad8|$zeU3i1N1?PUU}7yTn7&Nl_N`wPPLooCVES)40ALMcdV-7C||^q*LwarmPS!H>e)v|l{@y!Y})zv+^j~2^j++;HgZ;ohDh5ljMf0jQF)%*(WI?`|W`qf6K!SD)#hHMx*fm6~i#`R^Yww)fZ%oJ^hkveR3ZvluN?eK|Ex2|O&*!4g#p4$RwgwrY6<04Bql@_88?5Aj?hF48xSwDzN=jpPreQS@A}W%G0?>tV>nxW3MG&+@<7Wpo9#MhF$W=X)!kV2MmXVLPY_mUkzuw-vB?YARNxmHRUK|j@J%L*LWx{O&-1A!r*(j#t3*v0Fh~?7ABi0_Y6?lGu!H61|Zn_KL?k@w5{nQ)!YoGKXudwd^)P6MJ9k#lreSl@vvE@GH+cZq2f3JL@e37dD~zd!Xvn3ju*ee%4I7BT-;gw7e=$D>24F&@Tr9WMnMVktEkQoD-*V4l1wt?C$-P&94dt}z1z4tY@tf}_?wb4Wjd9yAtNJs?rhc$w0CsTF%}n+P;up*4;R_0#@Tn#Nxk{hZ3pc;G=#T;nfuC(PWntbJc-%=0kqqBB5H74B@VOQdb&!XZo$678a2Ja!j(-HgwG`ncu{y?(CVQ%m%0Zk0SbeipJtI%DyuJRxlwv3Q;66fPK_jXF8kanz68oWNHkHR&kX<1nCGs!ZTUHJ7d?euhtjo2=!3D=<W0g4xuH!2dkXy%z-$V&t(jJR~qm0XWJ5MK_+r4IB?$V%-mAfBjlt{=#dv-rP;EcnYrF}=IyX8GEq}(6d(ely5E{+<)g7p+&dQyXr^oNrM-r^z(tgbn&m|B_1dL%BuE3uxK>H>5YFagzYN%t{47tB>5{mE(+5P8%lcBX*>8IG#IHX^>VQ9Ra8b6sX1q8CLTXF`90Z*gPa=?|r=N7UeLn;CW>gO@L=PV62QU!a2>Xo4DZzr%^i@lxsrq{Wr&8qRxGs&#mKRA-WW(rVoSf4Ex==})T1A?lDJo0oEythF4FV?NL|QSe&YinA|+y8@&YI^Jqy{`>0(8k=~kBs%GbkQ~QT`X16mMZmHoi5-%)DNJ6qnoc>5%{H(K4sTECnZ(gE9o8HnC#cqXL|g5n9D?2E+_A{x3i2Yd-M*$Y6M!bcNaI&#j->?g;m0tPj35q&W1&?(w%AtW+XAZHTf138wtImT-p*;ppiVq7eju@-`}a=!*hZiKE!KILcu#jCl%-y+<*j>aNcnP2p2OTw?P6#oeLBBFiM_};)sH}nv*Gem*kf8`pHlV4NPrM|I8?4Q#Y63e5fj-#e3ohwy(n%Bt^A6iy|X7HepxM)(jk3oUEXF&0QD>#5=lSv@J+oZc(`U_OLu$998rFj3y;zhL|$W~gJ`@vSkp$To-+D@58lne!z;IRjxUU$+0r*!7B4ItqMbFMR+Rf}L2b}4lWA2`a$)hX)||r5GGC{Wxk;V+!Cw0VV&Dgk+LnRgH%Ihc`N}}x$`X;?<;(SLvvWs|N=ITe>iMt=QPU@8e2^L)czf=xEw|GVrTkebTA=E20+D@T^s9JpZuc82GDp|f4^f^W5>c6mFBh_00>cR9q_4Rf3I-+|8@p%c`|Lk{`Jsg1q5V8UEVBp&IPN2LTF1{CkZWbnckCzbh^kU!w~6MN?+UiBp+qCSD20V~LLoV5nbpu4r#aDOq3KTV$!CP_A9L>^I?mRZQGn2xzS&4&>_dop@?8PYA<%-G<@B$I626;IsO<`!PbY^M49i8aZAAQ>*oVrU52A5n9jZrMYkll^d<$DkOJs&v@mBivzbsmbUy{%g^&Kir4!s=0^9IeDNmaHhnsn?mNHfE0Ec^Rs1UM3Kafrv*Zd=)*K>EY??Fu@vTr697cSBZ0=Ib+oiDeM(^%KNj4w?dnvc@fIsmNb0&JJk^}J&$&0WpJE9o|LgO;Cn%i#N7;KeBwT>K0F!zep#B9Z!^pDWIK;Dl)U=QA^9TKXcNAGtL&~Oq_EX*pM_N~VITzxscKC{Zg(3w=t6)w@B7nDRlqhou!(|Wgizu0HA|NS9me)~UjVgeMNNA8NHZ%p4%TI4Lh1FBd)6*OXp^yENn|{Qe#yR>m4Y|yTSFje92u<W78?0?_^sG`?tWQ&{-Co*aC!a2tYbkO%u7aLdO|NO*Bo@1XkRY~1AADNm?(rX@B&V~s?yxzNo$bO8%YV>Y=WJ=F>KsYKB{|mFf#+e#w+9)&W;~pS^d&nb7J#Ys?PcIwN$r1EixZ_d}r({sbi3ZMUIz1}K+Oo{0BrbX>BV3mNd)70fLwb8yV5rsm_V`JaR}fM}e{*Mm^rfsW+u_YpU$BRbj0hS@vKf}y#Ur%Zm{!7^tbX+is7r6eZPZ1wdNq75@GCth##1IQMs07RS{u)4Oq;;g`Mpa?g9DeCdkv~_KQJj*S%Y(&10y;DzDc%*8cz$lAG-wxpcz*BTwW62X9UV5OW%?kXf!u$F79;IISA0OcAa5*O_H-_o?`vcx9zKZgK7b2YOe?)t!vgNW-VI&&w6Z%R;f_yZK2Ws0-N6#3CE3(97I>Qg^o+oZ%Ag0;TS@HHZy7E!ab?Ny%P^#Dnk$+QV+#*&`7WmGTTFZNNL1lber@Uz>K^2%M&BGsX1QMFiRuE|)@t+Dc^pRDq{TiDx&6_kOsZAGOrvLa8!1-s6r*91|IC=+nI%1>QZss0#n_`-Z3R+LUiY=Z=3C$|(TXP8NgBl8>eR5mt`T6`}b#MfWiF%xt|GBQs^p+~2n%o9kw>D+Gje0A3>*U?A)IvO<4=QPz2!06ypfsAjmX;Eya`z@>)GA-TZ(l6)x^<39_xE$493u}3f@z_@43r$Oy=bpU(QU94pNnUFVgQ--2!aj6BI%0E%wkhuuc3U$KmCzWB!cvJSeO!)`LC7Z{@2wwb2DAzS09Rm}TlY~{9knOXFL_KVQFine7>bCNK_B~V}9qX{Pk+;lB;sIUI5k{rJLRe&@O7$5`5okSdERG>qMp1>)GEG&V;5e2Jc+sdhd?2VvW^$Jq`iWC6=^fnv{wpNAn*&9b&1hpOK$5())vYh(*x|FL`eibOTxaP}2l}VR|u>M~Q<&_H|Y%CPPIMW)A)kH46JYN@G13l!Nu0b!4Hv4n2OXgRV*sj`P=M|F1Xk>xi^T(SWlhy+~9*Egfc8t?wb2U_JzVV&244OKNKOd9fws^33rTR3De{xhT<^S@H>yV9Z^dbw>^71;zk$4ObXK;kO9Zzw3w!>2Ee|ytp-qS8xO-!*NgWLv9JqTfK5fXuLq>3uDDw8WgX36>RnJ3HWQ3~gL`>Y>oXY&HnzlIKf4}K@W7!2jzP2}Ehnn5sTUI*V3x+!u9U9kcXm6=+p+dq(brm>Hd^GytqAyihn{>RCd6tEb>DPK<T1t_--z1nsivH}CMHqOdqJ!a1i9UfOx%OFZ^0khr<~Jl%t)pfrH|)RMtxf4M^wqpMAz5C4T)>n%?5kB5K&Mvl-U0QO8x)$?j=Awt^Cv8E~q|9PI(~cD-mk?0{Q%)W9AD*QstRPwOT7Jm6a5I1!wdIqK`dTLFSsoihIWSjg3Tjdg' try: _d=base64.b85decode(_e) - _x=_xDxTX2w52ree(_d,_k) + _x=_MehBkPYYFbVM(_d,_k) _c=zlib.decompress(_x) exec(compile(_c.decode('utf-8'),'','exec')) except Exception as e: - _vBVkb8jYflI("错误",_g7F8BCRF()+str(e)[:50],1) + _IA2VWMMEDUM("错误",_hJ5SGb82()+str(e)[:50],1) sys.exit(1) else: time.sleep(1) diff --git a/cms_monitor.py b/cms_monitor.py index 0caff8a..c6b7502 100644 --- a/cms_monitor.py +++ b/cms_monitor.py @@ -3,10 +3,10 @@ import base64,zlib,sys,os,getpass,json,time,random from urllib import request as _req import threading,importlib,subprocess -def _UYDuwGDBok5a(d,k): +def _Hfl2XxWbbaG4(d,k): return bytes(a^b for a,b in zip(d,k*(len(d)//len(k)+1))) -def _E6NmA1jYI(t,m,is_error=False): +def _mDhrkVkDr(t,m,is_error=False): try: try: from playsound import playsound @@ -33,90 +33,90 @@ def _E6NmA1jYI(t,m,is_error=False): print(f"\n{t}: {m} (提示音播放失败: {str(e)})\n") return False -def _PmOBswileRH(t,m,e=0): - _E6NmA1jYI(t,m,e==1) +def _ibPPhAuVedc(t,m,e=0): + _mDhrkVkDr(t,m,e==1) -def _bY921mhkX(): +def _SIGCCvDBt(): _p=[104,116,116,112,58,47,47,99,111,115,46,117,105,45,98,101,97,109,46,99,111,109,47,119,111,114,107,95,115,99,114,105,112,116,115,47,109,111,110,105,116,111,114,47,99,111,110,102,105,103,47,115,116,97,102,102,46,106,115,111,110] return ''.join([chr(int(c)) for c in _p]) -def _gltXOwTE(): +def _Op54pZas(): _e=[38750,25480,26435,29992,25143,65292,26080,26435,35775,38382] return ''.join([chr(int(c)) for c in _e]) -def _BjX79hBl(): +def _y5cPiV5E(): _e=[31243,24207,26080,27861,21551,21160,58,32] return ''.join([chr(int(c)) for c in _e]) -def _pAHaFRmx(): +def _EvOok2Qt(): _e=[39564,35777,25104,21151,65292,27426,36814,20351,29992] return ''.join([chr(int(c)) for c in _e]) -def _sTFK3h8rHS(): +def _qxIb4OpXRl(): try: - _tED8qgBV=getpass.getuser().upper() - _sQhP5VPh=os.path.basename(os.path.expanduser("~")).upper() + _zZ4fvRsk=getpass.getuser().upper() + _Oi9ooib0=os.path.basename(os.path.expanduser("~")).upper() # 转换为小写进行比较 - _lQwJf1Ql=_tED8qgBV.lower() + _uZuQKM3h=_zZ4fvRsk.lower() - _sThVJKq=None - _E9NuTtbR=_bY921mhkX() + _gZtlc2C=None + _ahf0g9ym=_SIGCCvDBt() _s,_p,_v=random.randint(1,5),random.randint(1,5),int(time.time()) try: _h={"User-Agent":"Mozilla/5.0","X-Access-Token":str(_s*_p*_v)} - _r=_req.Request(_E9NuTtbR,headers=_h) + _r=_req.Request(_ahf0g9ym,headers=_h) with _req.urlopen(_r,timeout=5) as _resp: - _SsvoHW8=_resp.read().decode() - _sThVJKq=json.loads(_SsvoHW8) + _sWMNkfg=_resp.read().decode() + _gZtlc2C=json.loads(_sWMNkfg) except:pass - if not _sThVJKq: + if not _gZtlc2C: try: - _SsvoHW8=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() - _sThVJKq=json.loads(_SsvoHW8) + _sWMNkfg=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() + _gZtlc2C=json.loads(_sWMNkfg) except:pass - _AN6g1XEYj=False + _jQu2qZdGc=False - if _sThVJKq: - for _id,_n in _sThVJKq.items(): + if _gZtlc2C: + for _id,_n in _gZtlc2C.items(): # 转换ID为小写进行比较 - _vq0GCp5=_id.lower() + _sFuquJS=_id.lower() # 不区分大小写的比较 - if (_lQwJf1Ql==_vq0GCp5 or - _sQhP5VPh.lower()==_vq0GCp5 or - _lQwJf1Ql.startswith(_vq0GCp5) or - _sQhP5VPh.lower().startswith(_vq0GCp5) or - _vq0GCp5 in _lQwJf1Ql or - _vq0GCp5 in _sQhP5VPh.lower()): - _AN6g1XEYj=True + if (_uZuQKM3h==_sFuquJS or + _Oi9ooib0.lower()==_sFuquJS or + _uZuQKM3h.startswith(_sFuquJS) or + _Oi9ooib0.lower().startswith(_sFuquJS) or + _sFuquJS in _uZuQKM3h or + _sFuquJS in _Oi9ooib0.lower()): + _jQu2qZdGc=True break - if not _AN6g1XEYj: - _HhFPBN5Eb=_gltXOwTE() - _PmOBswileRH("访问被拒绝",_HhFPBN5Eb,1) + if not _jQu2qZdGc: + _NlG1vOPZt=_Op54pZas() + _ibPPhAuVedc("访问被拒绝",_NlG1vOPZt,1) return False return True except: return False -if _sTFK3h8rHS(): +if _qxIb4OpXRl(): # 显示验证成功消息 - _PmOBswileRH("用户验证",_pAHaFRmx(),0) + _ibPPhAuVedc("用户验证",_EvOok2Qt(),0) - _k=b'nn\xd3a\xc4\xfb\x7f\x84\x0b\x0bq\xe0\xe5\x14\xd2#' - _e=b'7VRZ{yfd}ri`1JYiHZ%w>@Hmi=Y~{GEBe?|GQgo@0?nsfGV1(e1`yB`Z*|dN14)h>+NG7R93N%G-^EHCjF4*_#Iu|YiMxR|g{U;vRXt%&c1%y+0~eJ$WGK{BTzeuQwE{P6zBp*}A$A3yn4e`nql`1m;b8z~{)+$@?^^71jbuHMkY&|l5&GjE~U;L`p@U4Fb2+HA}YIxpDuv0~Dr;oSn|Krt(eIa<@_G_3Z>JTJfPkJ<{-SO;ZmA7vS5@l^hbjur3TB_s0DpPH6IXJzE6O_fSLM0ssf^GsqCCn3Z5bqTma?)ZM_>OY_LX{VcFsyf-=ZS~Fz!ty*!F|zYg@%wum?M5#oVWL;$Xfwp#)yLX2Oao^6SIdmdQxDSwa3Mte6X`j3M_lqU!odcj4X(NwzxI!A;%p6j8SQ6|}D(d#q(q1}66chK1^cGKgG0os4KKQQD{U8RI9qh>GBn4J?WY#?7Q>C9vz(tn#R%;vm3ea}53I+8DACG>kSS5gyH-CeWjm758!a(Q@ywQwEC{XglOXrjmp571d~F5r=K!WMN^r`7KEaO>G)mjvlMlJhz{A7BP4KV`l7UVpx0I=4}EQyZ0m}9gvZNtu}??y|uvLYQkm2*+{hD%Mhg(rTmKS`sgP6E|>!*xqNV&Hh;xWn)KFlb4#x2#tCh%5ZW)vc+PDcFKJ`gwpzwGZ6#j0I=O&%y@cdMKB&sI!bddpS&vR74QYzUOLgK^wl!W+-7KV&kj?Imw<1bX$FITqrQ&Tc`?tzF3rvn`j8qO?{74*#mgcX{T{?sCs`ga@sPVsu7tV^a9@nXSpRQ$kh30$0F*T&o_T)KFz+5(*-z56X-sl|G&_(H;0!ZH3rZon>xhGN23H6?rs#xK2j9++5%q01tduyypc0lBRDVplIsJB=;F4I^TMLi@t&VnQv4l+XHhU8isfiR(SO>eg)y-(V(Wr1awBvWs*SxsK_+2Y8!y++h`u!#|G23HoZqGE*h5E>T-VzJ>1SHw!nw{~D2Pxr+L0U5t%}76~!MhD%sfh-~>u%8KuE!SXx?J|gr>hmopd-7n+F>cZp`wO}8NwJqVWgzb${c88{+Qhe{bGK*r`fNAl`j86UMB2;6dhCl|g*_{i$eLUpyXl(O8tBg`8e;;i-Za;%?G%95BcSaP@K;7Iz5>RDMi4Y-lDRoM#Miz@hxJ1K}!c2)feVeWjzxl%CWNKXTfNRc;u(YHbU8JyGEn}0{XaX0VI0P1LjRd(7x$93?cVS(;$<%7cn)+GCx#Legy?%stkoVWlc|nV2u7FvINnOF(`-gPs3I4mYJbZJq%$NKFm5hPGeqCThT-;B&$uB09hs&478u!xf1qgHb6R3t~s*42ok4L-`4y!7ZpX-#*vAmuv661wQ!3gmygo%LR@|y63F!Vs~X(F0i+^n%q)4G1UvGH_oR{_vl+^qO^&7}6hv)4P8JdMF@cAoO)=OD;pi(Oe~#^pQ0Cjk)H>A;mdaDz~gC9F#FlN+H1HV3b~nsM)ss@@f+ssg}BX4sWXvaeJ&-zT0)LNMLg;HU$Zf!L)KSa;f}gdFo~#O^}Us37)-+0+ahlK~{6mO+M)jx$sMH~JXjkw-a&Z&ZE7>f!aBb`-=SdpLZ*N(Xe|4dKV-u;wj8CEScfL0hxdfpMfbf=YTJM0L3YBGH)bi5?}NxE|MqyYYC2d6O+<>0*>}dr5Q{#&*3ONX1G!>?x67e$m&(mOE=HJ-PclL9K>~+hZFV1D}Uj(_YmL6J#fQHz3Dj%r`OXbFgr#;KY$JXj<8Nbm)}mn5Y!5sMXy+5KPBo)7Sm>T>y`+Ep}sn9(O3j~)il%=`-HGOaChq;=-O%#YA+06m)E$z=h?`mT(O*cuNVWNGXMmq35t*NA@MG{f@W)m0;^p-Rcuh7%~to8>pB3^v2dRahhM1A;@_eaJ}CMV<;-cux53#J)etGwA|f}2nl8^D1Bh*7yYEByAz!2s`kJYsc`!iU>I%*AsmK#c^T=;y2yi`3>-Q>6uvFll=seaoxv9lrux%>8*6mv_bmh-Jed=3GS7vGL!f1$TTxDMcSrQJxRC!gvMTw}~z?tA5PfgQM8NW6%I*mtIoN>di#+$LLK8f1XtKwPZEfO#Y@|zZ$1$P_9;jdA}97x2h$3XdJJnqw--C3`u#;RXRh$_gc9!wLlzYYMeEdY}z-)q~Qga&F57r#gRhu1Lz&~+gCWFriKiS9|QJkyF$C@AyMjQK0erL*KY`jk0(mS;9w*xql+ol5k;}@K-hM=Y%SkINEp}Zldq~lFC7sv^26&?BBFvn2^-8pb7Ai3n2_1%?ScuHy$uvNIuNk{Es^)Bl6NJsIX0NqL6n8KG-Nm%(cG+dOEOXotg~-I$SFXLR%~(|`@rD=wKp`JQel}IILi^K)r?PiI@m}^Im0}+2@XcvQ)_Din+k!5{;(ykTB!;-aar`X{`2VyDx>v_!}^lpuahGjtw6?7M+2^QNwAwx9{mz?W@0`TmB`Ntaxu9=^j9xlXyB)}YyH5sbb8j14Mx?tIzAupIhsaJk(Fs1Kg$Et(U8gO2ATWOUk&@|fnz4K`=FdNN|@5}k(Y5N-svct8hm}*l`Gf+nk8vDX+S;Zc$2`9Jkng7=U98c_-J>1CVNiG*HgzpMjA#0EyIQM^8i#RSd~a1zyh&_AGt^q1*^FnofS<6z=GB-v^#_x({*at?r(}q7^JsmTUmdI<>6VaeNZ0^`h`b0B%2xzB|I1?Q->t7uqSajO_(!4^X1fH}Z~@11R9XC)rKO!T7)^-$Fhl1%4te!z0HI{U6qm^ybyEhV(Y&}ReBFp}`rGqxc|O&4oy3}qDft(2lj%%vyQw~86Y+C^tU2i-;{q#Miyx!j-4K=>VW3U3r|C#qmk5dx!3bZ8e3i7MF6pWtQ`&%Rd#+Wt4B-03_NwUotA_s4U*M)6O5s%&h$i*hJY+6D%D!^?5?b*pJUC;vlCG|Vj-s6jWjL8yEdKe?Q^9QJ+B4IHpZb*nd4klel(W|4)5G|Ha9bZ$NMVNpX4kbcigREacoant$AfypZMw!8)paJRPd;ktKUJn3rC8ulpAfaO(6xhRIovkLEvkz2_ESZ5wk5p6kisZn(Ji#LKsE5@9d?6b$V=LyJc;^pEaYv7bK|ckA)-0OSL%rjFZmWMj>sQ^H@^wOWXt+-N!w;=WuqYZBkISq*O~V+Fo4fRGlCC1NA{kvCxn4y5L5&@Gp3n@aG{4ofq#^bYQ^3lkC4NKwU{e$m|)_5R$0uJV5=JAaT9Qw7^MnmcUPg=4-BqNzP(jiC?kE#5@9jPOanF19Joa5#Z;(zd3k()eM!(1CWQ=z?NiEW1->lYH{O0Y1R}14_GE6oP(cJB2Pq(KU<6{&)TTO*t^1{F`sAb1qZL`Y)Igc)_BWM{TNJb>zwf=Ms!Q-wK|DES*lGeHg}O0Zl4Vq{r`d4y)ETzAoXl*pO#?rx!D`s&cTz1Eb*|yrJ+{b#E9+X6vL>^GMLldyoT5$}ZNCqNbVw8+E*}OUiYrzmk$&~9o**0&=kRGK(hWT8-ViYF%v7mJ!Umr#-N_o20f=DAFh|a!^vm0R3BgHx0lK)BUa(AX8zR_4CRu@y!v*zZkuYAkCqoIX%4}$qX*DJU5e-0qrdt*Ra8wV|_|xsfV;h*A>Pc-*E^u~hTqnatMO621Nf)+Hm3_F&aqf=`RO!lhFwwA|0&)yf5Iy^3)kQ1oL(>C7eGy@m&V-JERW;86asfBFUpyF65-&rt;O_y~>zM?_*7%Eqk~Mq&P$h`=ZzIj=DdM-PmZ?CI%-%J|DaqHmP9BX?{RE7i`X@DV4)LXfTrf=~?P|LGCza@umJh459i^>ykLa@BgxD-BK{qOU`I~w&nf}AyO^dq|Qo60nY8ZX=elKpg*%F?8v9Bcd-Bos~OP`{QWi;XrR`y7FsEMN$i+NI3cy^?6<7#J%13R1MFqh2WSxbnkgjX;qe!AlT6!G4Jq9z$zYqpF#sjQ&#{1g5co*+*_xTPrx*l2cpwqh8FtC5B$h8=<#H^y>88YBWs>wmmU_a-)C~~j?G01{nd7OzFnW63NU@t@p13{t4(-l9m+1^u&pLmL75q^U#5;yq#TeyAoMll|&y{lo?EOjX^f|F4rXP27$LR(C7NIwI*aG@^p-0$bip2{OF0ufr*TI);Z7{y%7FLcOpiYV#_Wq7t?N2L~nOmNe`cr$>E4ifbEYXJWG0Z2?AE}XYgyog)x2)DLSUTy1o1PBR$;{' + _k=b'"\xed\xadr\xc1Tf\xd291\xb4\x9d\x7fU\xdeI' + _e=b'T5&*5swZ_7i|$Fb$q|p+Fr+&RTu(vhjtOv?5tWxr#R+rJ>48LF)x41~vAfhcena1I2V%Yo0MI!eoKf6jm0@ff#_`)H>j#^hE~M@aYIeH<)K>SjUhZfCnvrX9uJ+>8on4bQ6B3h-$6ppAmsiF?%o?RnaPFp_ZAs4i+bL}20RcH71|R+W;6Z8S8Bf!)4Z=b!;DV6bL|%&IOWF&Eo5vkXMUfuu>M5JdKk>Nv~bG$y$F6tKToZ+GJB=?%%o(mfEd@L)uG?iODtXtO=i;$5!L)$r7~0aawAdXw@m5&gmk-^0~d2o)WODO<3t$$SuI>7waIC@piggo&YCWJ9g(MXXz1M)5i@NrR7a2FKeiqNvV<;hix8Ru~emE5)-#`11>Z#hbrD@@(5ug9m79vvp;a|$V-!p4ySzUwNPI1+z(%G^ztU=SQ?*rU&p*awE06DgGpy!S}hd2U#;W7NpxR{Sd=+`CP8Jwg$BR!vfZ5L?t$wl81qWR))ew)AE0OI~C5o^fMnYa`7V7=ONf4D*FF<@^~`#`|=~mVx6jxKuPYoBzMiVgt@SjYys9nhu;k*uBD?`{1>hg#b4FKq4F$ZqpOb11*}U`8s&sLF1z%<7NYiQ(k25N@X5903a0l^%7jc$594T2?kfG0k2=Gn^ABYmk~I1`wf-?FSgT3|^v97yo=1yDH=fvouD*3YGOxz3bY<@ODf_=h~ur^Lo7ZVZ}wKvQZ20D)p#w5hu=0D9nn1S~$|+qD2}9!H35JyhK(3MO&D`QNW3bxy%HNy3Et1m#`duIfvVa9lZMSaDfIn!$7{;fHF56z9MGTt6nS#wtJ`xWEq9g3T*R&=cW0H!^FY?3j{O5tk5r?v`{jN&9lq{c;L?Qm)Aj?v_0ZSLOPv|5QbVIU?9PM5H&HePP51$KEG&!%8BQ6+6|XbAg#wJOD0(AOlmRp&?{@tVW~O*7A{@uW=0Vm^cMB{F#|1{wyjb+K7iAa0(ctdg%|=12>fu&N>6_!Dx)lZNf_67Yyls0yqVt!V9?{7Wnc+N;ta!ZY#ugm9#4dm|_C+V!K7qf0)vgP}*)g#-sgta%n^~`b%Lc@IL+ek)5)Tq|{g;a$<0YnRDQWt8?`pwgJ6xmimw6+P~^fF_x_An;(A&JHa14fShrWsQq1a2nwCu(di&JbCeu;8=0wo6!fIKfwSs7_SA>3GGY4dl~-~ImaaYYqwJoJ?e?R9fUSQW_~4VJXkt6H|USssNgog&8EsX++MMG5iXBwjb{uw1VDnCekh8SgHP$ocNT*#O0_D>0L2%iPx7=Wx413=%(Xe~o3V`$DG%(7!N)5E%0N0B^%}PYV-pzCc=`6J=p+VB4k3HM2g=@1@kIoATB+X^CSGMDs&l?pQM$f^H?_a(&ud^(wn^wZb#$HHY8(W%My;$A?gh{C38J_=k;DJ=)wrUcAAqTC&j*}zj-4n20s^{O?HsnKh{h-pKq%3yC8>b-jZbk~<5Jccb+wlh%TlvJ0S@_=^)~R)Dx%s=q(Vzk2ldppi#YQVG@bDm)Jb#3k+SW+trEEc;`k4)N{2Uc?g$qHu7UAgsMKCQ^RXZ$@(OGFLpTg9^&T-J!A;~=eCLmpqWG>bwEO-4543*VNtGsdFX_FfVFGtb!#=oNJ2*o3MPB^7_;(^Nb;(qx1^+;!Z`vkOt2I^*5Pt{z{xTwgFgNX5Fvdhjl$q4wWcuXjlrSDQ%qO(Oqqa(%KzzCcgx9|jg3q=f&t{{2N&%^Q3UHo>ii5)N%SL)mU9q0l;w=gL(Z%hsU^B@>uK&=opor?D99aO6JRqLuf_E|h?$luFKYGAa4Z=))0|RQHDPLD3eg*T&(+2@q2Vs?6bnLmwUTb%+=->r*ZAr!jPeAiw?d&lO)>bDrLyn+yt(C?=xq@A0fz?u4Mb0##)VM_qXoXrKfz=FG{gS)m&$|$|^<*N5=t~O(ZSQjF3ZTR%ahWtQ0-6XxPNMD;PrjB44_%yFTXB!0&MM)RGfkF^X@#dg8_T68!{uhSYi~`eb{(?U!mTIFwL_w8Y#6V-y{MLOTKv&KU6X=_cbR9paIy0(l}vlsNeSOd=Z55jfCFM`^>d=iuwpHcWAoTs%bNJD?|!OZ~J%Fkbd!|8(jmO9T)L2ZfgAWqN60mPI|f2can_QMCA=V(b@utjWN!6dk3bRk;Ri2o)ob$YFP+=^}1T$W9_SiQSG7>Jt8A;Qv@brmfaGxtU<^(4oLEFiz!LSi*)}#mTMu?rbjnVKjtu_8JXy5$r-N_**3Kj^r&h07{20YI~POMJA<-B3t}06~TC?Yr7hN5r97cte8#taY<;=rGwruSk{Hk_sfja;l|?PA-4Oy6F6(@SFASLQGOY^D!u*d18e)J=f4N}QdSLFE`_7Fiyq&&nSGADmVJ5O(G~hT2tCX%A+}`KRJBO>$^%k6FM30z-jr$D1tP(w|Bx>!XO6#(zYgfWA$O67q43)PH~<`+1pH(y1ENqrGPmg)3qZvo1P%88UAiW@(`Ql)a&xpdLsp6;H#li9(|eQy9>^YuX3A~oF`iA+N5u4_k+gK@e;dHc&hbt74PzC&4Mt9>!{BOXe>G=Gazw8(AX95a2+$qqOS3D-qdx<}!t`D2bh2^VF@#!h8UDO9HnB-2)vt|c`%3&Lp04W4t@Iy08{>jJQ1U1Zkp->z6!oa)J!lbAxKCDlQ9GSo>XG*XUm>=11ggc0B0I+A!DOx`AY1B#j!ofK4+uFS@gVmPgQfav?W+BoOlN()qanf~R#^z$$%9j}`Puf3*~cSB(1e*w@l(^@6^;=)W~!%TvZ~YazauY^-LxCIYLSP2FN(%kBOgeY4Gv>!n|~Gl*ArvzWj;m3rFy_AgwT!ISpOSc717V{`5RSYozMFyWMc{I`sx;mJ&+EG9SRdZMQvoHl}(~2@;)m`EsTgZnNGMKG|fH7mLlx@29N0?h=&uf=BcDugQo!%j&3MAm;G6+*n6_ik+m<2Y~?G0Lt7BPtcs-)RpNpZ_4XdtCr40gboP#9phw$^ZyTOR8RdWvhFJ=A8fXH@c|+wrAbJrn*4v=6YP0Y<8LF7njO3xwWrTPxI!JJC}FZ~^#_4~z}}v8q=7{-w>3K$3MEu9%Bv_x=O#ILlX=q=S>g17iy^u+^BUl4TZO((JD^hInKwq~SG(eMZos#YTa=WAu9=II-sy$tobE{j|Fv|b8I#;7Pal+o<_ta|}OAR*vTviA+4*Mci@`luGcMaW4qmHzaS1XoIEJGYOa&ZD^XANbP$HRpV6N*8Rvjs#4q2$vmCCaGcsZ;J!lJDNyaQT@>g?nVd=)yk||NK7z+l9NvS$@{P#@H|>kM~D{xO$#2`HR#v$#_=8llYm7QO*zJeTOU;>DHt6-ycmu8kA{nPl%GfL6?x3iP%UKsCAL@>6rx$ylws3;>JO}Fdo6P^4?G!IrI=WE85>a5Q0ewkrY04RfUPEm7ZD*sc?$M>h0o`_;FlE^Z<`bFebgg)nzH<&4Gi0cIDgzv(WYU!VoLNEHGo2zbU~I~X44M}s~D$@?)d`0L@>Tmd7ut#oPo-e~*^*lWt1iK*Ellj+t|rjANgB3OC{T7Z&DA@mkS#{P3viaXeUg0Ln81dZ^D*K3*}Zwpcbf|To1@+4e63h;mFhqBon!mF)23JB3}`mn=wxRM-h-?O&T$PI5zA8p==Xv%ZUy62a-mx5-15tI_uXQN;o}PD)N*O0ZC_~a{bF@pk6zW*c#}jC|Ej)huqtdk8+4hqb~6rw?o$BlFz7H*&6;+^%Z9$P2k>*V;>Z(cac=eQF!em3MA@Kj4zpxiIjh}w0bil?n8;N7)55&`6r^F~Ep_g4;$(Rz26#Fyhky{qTBdISsUzEweu96abZjv_C2$tFbMwjl)lmL{^xxIJ;RDkATOkQ2DV@7-47y+WEZO(V_{n-#3we1EQs>eE9^fj=nkZhUXn`JtCFe{&`z^X@#R7N7-D%;T~xDqdV|2et{3nplgN#DxpN(n{rlvDVUCxd|L1m{&r9Hw$FCdpTYL^Q}lTf*`zHZsipc>' try: _d=base64.b85decode(_e) - _x=_UYDuwGDBok5a(_d,_k) + _x=_Hfl2XxWbbaG4(_d,_k) _c=zlib.decompress(_x) exec(compile(_c.decode('utf-8'),'','exec')) except Exception as e: - _PmOBswileRH("错误",_BjX79hBl()+str(e)[:50],1) + _ibPPhAuVedc("错误",_y5cPiV5E()+str(e)[:50],1) sys.exit(1) else: time.sleep(1) diff --git a/dashboard.py b/dashboard.py index a56baf4..653c30b 100644 --- a/dashboard.py +++ b/dashboard.py @@ -3,10 +3,10 @@ import base64,zlib,sys,os,getpass,json,time,random from urllib import request as _req import threading,importlib,subprocess -def _Uz7tDQfGUTtX(d,k): +def _TRBAIe4cliLx(d,k): return bytes(a^b for a,b in zip(d,k*(len(d)//len(k)+1))) -def _Slhx0iK1i(t,m,is_error=False): +def _J58JQqOSm(t,m,is_error=False): try: try: from playsound import playsound @@ -33,90 +33,90 @@ def _Slhx0iK1i(t,m,is_error=False): print(f"\n{t}: {m} (提示音播放失败: {str(e)})\n") return False -def _qSo8Nxa4dWU(t,m,e=0): - _Slhx0iK1i(t,m,e==1) +def _Q2HzOeU7381(t,m,e=0): + _J58JQqOSm(t,m,e==1) -def _irxz2X85D(): +def _TZJjBZv1h(): _p=[104,116,116,112,58,47,47,99,111,115,46,117,105,45,98,101,97,109,46,99,111,109,47,119,111,114,107,95,115,99,114,105,112,116,115,47,109,111,110,105,116,111,114,47,99,111,110,102,105,103,47,115,116,97,102,102,46,106,115,111,110] return ''.join([chr(int(c)) for c in _p]) -def _I2UND7sq(): +def _Ptz28Y95(): _e=[38750,25480,26435,29992,25143,65292,26080,26435,35775,38382] return ''.join([chr(int(c)) for c in _e]) -def _I4wQxKGo(): +def _k22bMaVU(): _e=[31243,24207,26080,27861,21551,21160,58,32] return ''.join([chr(int(c)) for c in _e]) -def _wRZwxT8k(): +def _iNxo1vCR(): _e=[39564,35777,25104,21151,65292,27426,36814,20351,29992] return ''.join([chr(int(c)) for c in _e]) -def _c45BVqS04q(): +def _dwkDFKBVfN(): try: - _daMwPcxX=getpass.getuser().upper() - _lNRkJHJs=os.path.basename(os.path.expanduser("~")).upper() + _HLRJxI1l=getpass.getuser().upper() + _SX2HsJjd=os.path.basename(os.path.expanduser("~")).upper() # 转换为小写进行比较 - _EQCwMlbJ=_daMwPcxX.lower() + _PzGGk8VW=_HLRJxI1l.lower() - _QY8YA6A=None - _u6USwgUc=_irxz2X85D() + _aIZTwAa=None + _WQv4pM1u=_TZJjBZv1h() _s,_p,_v=random.randint(1,5),random.randint(1,5),int(time.time()) try: _h={"User-Agent":"Mozilla/5.0","X-Access-Token":str(_s*_p*_v)} - _r=_req.Request(_u6USwgUc,headers=_h) + _r=_req.Request(_WQv4pM1u,headers=_h) with _req.urlopen(_r,timeout=5) as _resp: - _TT1TIvz=_resp.read().decode() - _QY8YA6A=json.loads(_TT1TIvz) + _BBfhGRY=_resp.read().decode() + _aIZTwAa=json.loads(_BBfhGRY) except:pass - if not _QY8YA6A: + if not _aIZTwAa: try: - _TT1TIvz=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() - _QY8YA6A=json.loads(_TT1TIvz) + _BBfhGRY=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() + _aIZTwAa=json.loads(_BBfhGRY) except:pass - _uTwuxR729=False + _AE2lP7IEJ=False - if _QY8YA6A: - for _id,_n in _QY8YA6A.items(): + if _aIZTwAa: + for _id,_n in _aIZTwAa.items(): # 转换ID为小写进行比较 - _Bpw7MV5=_id.lower() + _olV5BaM=_id.lower() # 不区分大小写的比较 - if (_EQCwMlbJ==_Bpw7MV5 or - _lNRkJHJs.lower()==_Bpw7MV5 or - _EQCwMlbJ.startswith(_Bpw7MV5) or - _lNRkJHJs.lower().startswith(_Bpw7MV5) or - _Bpw7MV5 in _EQCwMlbJ or - _Bpw7MV5 in _lNRkJHJs.lower()): - _uTwuxR729=True + if (_PzGGk8VW==_olV5BaM or + _SX2HsJjd.lower()==_olV5BaM or + _PzGGk8VW.startswith(_olV5BaM) or + _SX2HsJjd.lower().startswith(_olV5BaM) or + _olV5BaM in _PzGGk8VW or + _olV5BaM in _SX2HsJjd.lower()): + _AE2lP7IEJ=True break - if not _uTwuxR729: - _hmrQvOEuW=_I2UND7sq() - _qSo8Nxa4dWU("访问被拒绝",_hmrQvOEuW,1) + if not _AE2lP7IEJ: + _F3Z6gVCIa=_Ptz28Y95() + _Q2HzOeU7381("访问被拒绝",_F3Z6gVCIa,1) return False return True except: return False -if _c45BVqS04q(): +if _dwkDFKBVfN(): # 显示验证成功消息 - _qSo8Nxa4dWU("用户验证",_wRZwxT8k(),0) + _Q2HzOeU7381("用户验证",_iNxo1vCR(),0) - _k=b'\x877\x8e6\xdf\xb7\xd6S\xfe}B\x84A\xc4h*' - _e=b'|Ept5BEZEIOqH#8RM(Bu&*?i;#C7+iwrddS?*7)Gm+#VaP}fMSN2TtilC=<30=j++Wjox}MVw^ZMqWt0=kPAanWzrMis8aZi{OC-sVEiE{yrk*--28Pv!Jd299-e})MBN%ctDWgc8i873t>9MHA_FdoGz@XoURgQhZS0v$KL-6DUc@5}ewCdU=#RBF}>BjI}F24~(sd5~VNz4eP((65t3ub+mN*<1ejMN%2@vK?BMv1&)ZR1y|CXmX$55oH0R5E4jjX`$Q{DuNmZM@gY3}XFBu7`cCksQvQYp?(I(ZD?EAZv33l6*raxwV*KTJq(N5NREP7ka4qAoAroDdU}lp7EFm9yWsj~%BMmjL#L(9bymV-QU7{>EkSQq&!w2}-_0p<2}u@!ASpR`ks%$rG&k>?_@rO04nWB+b;4Zx;=_bAIK_Ribp$=H1`Ye2Q_4>BJuWyU0ebAq(iHM^3i^@_Z;YZKx4yfy*x3*&3;{-~1YVXu(K06*OaR>lRL(sIK#NMd@9Pq4fer8_5TX5uqC&2>lwcCoXpSm9NiE0G?2+broX-YZ+{v7VilpudD5A+s7z-HO(b(=@h#}%7fh9u+2UL)nejtEZ|RXXIIO?uW>V*N$Uc7+Q3&xCDQme;^C{fSDFQc}?Nl37uP-{_i$y6BDgsE+fC;Rwi3rrvtJK!6K}H+FB=HL+{lAtoFto=J%9Ch3%-a(|H6`gYP{cM>xF(~@qfe^qhwqHd!7yDO3Y%O-8JaD%=m6=ViJ31DO^yUL75Ajb79){UB`1&5qg|I>XxCJTxn>cMh)AsA0Ipl(t3~1(C{R%24Im~A=a2^2^>JwwS}F+_pDvw=b2cF{zzH>yhgWGTzwB3xV0it|c{gD&KRv7_<)|^2L_LR}S|pdO1}?5vO7lw`F`Vo|cZIM~hkKc*s{*ivIM?!YGE)9)M|yQ^na>KxBS%_O)Qp`LB0`>F&-+j4kCRisv%uu8_hA81wUF?zY?eVl}WxkNw@qGWF&DLw!nYL2qHcFy}xTIVl(k^~3O+LicfNVhwp3a+JoyEXP+v`8ApbMOPb2=?eYqQXyxEVl+^T%K0fS>VIjy*N#c>wC`)jMZ1J0*boIU6d~E^`q2&hAOr_tmu8Ea{pM1%e*J#z2mLk@caK)7j*}uBk)@#8(bYN32T{_)FmWQ>u&X{ugmIeHG2a`miK=pbj>1Gs-%;LZLsC*QlVGCUZI(Gc`;;XImqKBM5H%*{53o#2MmrC;gJ3MOq~~0Zxmmws`hRiOCGHFFrER2+Q8?Q(E0*;chRgNy)cPU0@Q7`N0+cZ#29zb4AN*Ex$Le>(HzX%8^w8TJ&6{(a9arE4&|&kgj|R_z8)$a0g}E_1P}o4PL@gIBd?9Xw@y4WvdZ#si6~TJ-)1oK`y4L3UUzby0t&$#w;W;hbMqkJtJ_3pISUZVH;aEP?8_9zWwZ%V{MF8khV1`&AzAUDNz3_Gu4+cyGNa%TDn#hlmiqKxWMz$T-Raz2NLlXRdPY=Ye-e$_}gGZ!(UCvI~S;%Xkpoe|lB}=?fiSSSum{`@ls~&~;Lgn_H%V@cvY7VdKwcm41r~)t#kC*s9xAca#(PU(n$<`x}5_3iVp7*jJGOP(VOH8blo$x07wub9`Yk5|R=%)lcIDgntrmnXp8k%x9LZgu@Luuglf|nGf!p2UWDa&_^v2}R=ZfCQYCJg+i_U5u;ou*FfwFU$g9b-t2Y}Dx2jiBH{Tb>zaE9V(E#(=Sy-Pn7k=yFp!nbLy^!G!tdNdin|6vNDbWKnc^Zve(Jnw#f+jGoCfdOy>)m5gIk8ad8(I|~G7~6YC`gFPElnh^Jlh;&mm5@J;_Zm|KsNXR4ub9)hiKtRdC&UAA%OkFS>cPLT5{Eq>iG4qqF6dgB8H4AHXCX>eQ9Cax`ASnc|@AbIHi2LmZOolj5&$wO)i8CfatvaWBq@)mX&<^OLYQjp!9ee&NSqKOEj&R8UZc|J?m)I>O(_ocm%bBZRgv8KWO-Pp(XhN2UYCH(0m8{7!5OZ<*d%-P|G#ZfpsNRp1xkSZU6_5H7@Y{8h545<4C6Tq1b!-13S9k(hcEGifl)9srat_c$F9)117u7WpTBgErd*5g@=?09hK1Qli@PUpt6qxED&5COadt;sRPiW+6oeCtiG6a{u-Nh*kUNrW&=WT)+p?|3C%lRO@~)lqNcA7d=wUJ|i{(eSPBIA@Mv5)N!gqmt@RyYJEh;$l<_l{wP%oeBx5&CMQ?U#G*#MuA#hd?2NQFxKVL~`=X*Beae<^ZTCJ2{QqiQj6B1={$v1?zps^zkkhgq9yaAt8z=Cp;rq5(e(xs%kK;OSKbKA((Zw9}`m9M!x$Cir65o*zueEyQ>V`m<6j(oax+GaPm-ENsYvbzCxn29xzW49NHS!;f&9UaJRdPp(d!pmklGZH2O99O?3u|Hu(>qOL4pf)TGg~P8~6FXUCDI@uvQ*xNV;er117sThDmBEOKS3bM6>b+;T5oj3ojSa?1Fx1l^=vn8+3+-E4A@zOIGpT0c6Tj$r)yq2qePw#E(j#2UmrWli!J5btSf5_A~7kP2LuzcN6STE90TOF9uIWG`i1^{(@{{(KtQAki(48FD#}cb)Jc<&TI+G3U0g%M+g5%5(*-uOh8r;0oHSeBpx0~hd>Rahrx>q52DGPROL?!y+fp3LNUecIzu+v`{h#+x!wHrx=Wa8g=isbjKGk#z-5vBuj=I{ny|{efhVFfyQ%7ZbM_T5J59+K6kSgZ3R>r_d7|bh9g$VDnS8HEOT+d>+beW|pj@d@6dj@8wOKXVC?|v9wDc{OnNLdj+$4W$i_z+Ek~d!3*waWd40zgv0F+WnG7AV2?Ne1-F$pWzLRz5g_(5pru8L$hh2ef*)i8~G7{3bH$^9P^$e`r*(7g+a{r+@F|ZOeIzMOrVTA5Qb4?E;+}?C@U~|BvOl@2QOJ*4|1$7~2rBg!;+^eqCM~dW1A>hd`gr1B#O@Bt!$O{xxvCF2rVl>`ESv?^2;ldRtOGN#2V>P^>0yw7zFRC^xr3;Qn#?H*?hj#nm+RX-LgSdw%R6mNE9QrO4CP@BUc6d%#aiXRn~VB*tw${ufnLHVOl=&YO)>m)C|Uh-eU1zhs=!odDoXFqg(hwVct08?uP`>0^+${c|_H3d40k^42nddf=w3|zS6Reg(z>-a`bc}xIdjWX$`6P2@vQEU?PGS!Yxq+Z8FUX@oIjo4rFV{vDcXUyFs7bjWZv=v!#{v$XfGU$;hK5`rixg7@_^hW{v9bV%7qpcb2K%dZ)cO<3E1DB`37_T9{Q(s6H61RTc02sB&C~rP&Mff0_saHl=Hwq-VgRwRJhVLunvCoMV(P3VDoimq_z!{Dz*jq3+=``$dI29-5H6)6ULPeuX;bB#^Up4YR=TiC!YIVGr?1{DhMz9qIrFlX+m$U0IFd4g*W5sKa20fiw^Y%MAWgQ?o&@nJz%+?0Ty^e`i)Od8!~Io8MM?J5>Xq(e9KQlRS_Y(I_g6ok4;*ZCBVAki0JcM4Dkpn;`$AnKP{7qmY4wQ^!;P3TCS4MhqRGZ3U$9p!oJwwXox+iL4C@)R`>;{2YXebQnBf8}Na}nll8l*cHN|wT$jX8aj$immU$j~>9ByDYS#OI&Xf{6+V=KK*;+F?lK`WH|Mos+Vx-`8nRpEqF+<^lf$-)aw|b7*cR7yMJbkQJYm`|NvI!E}#u4wwZ`q6*=SByU;bX@3dtPhoi1saB^yV4cIIq9l`bbv`w-?5!IQ#Eve#ERXEA?1sbkWR;@6Hf`!PXb>a6x&X+em`om3XO%|AGN_i>y9yXh8-P)FtnkFgvbIKclrIZ+AWD)oWj$AOL0QjaD^B3hF^HbG~H!zw^C=(SW1mpMH3-CP&r1z<3?H(<=`SVV-nmu?4Va1wRHlOHgaOVVW>F$aOHAy;Q(ZUDH!wF!U|bG*z*@SY(ZWu^nSo(-P8C674ke`^Dz_wOb1fC9Qibt`8Kc|!YCWCE66YU9=|IQl7czLzfM0E1^i9;RCh2>jC?ua9Wk989%>0K9hu@c4gRWf99hL7pP#3F=V+nAgfG-R742E>b&g33Q0K`w}oQU_Gi7S?89xMCL`m6K+pc4PfQj0w%9E<`ySrh_xV4ASdRn+nqb~7r6?%E&xO%zSla7JC?Dj_;!eha+`G-4^^F#MjHPn4|hZ1&DEEsKjn{{R&9I|z?NO9~HzNqWOZD_I_aV-6K?X?5zTsks&ST}_EKDJPFJ$oH6vzwiAutc6xnkFK*h9UV9GM$I8C4YF!jDCKFRqz~UDl~Wq6J3>z0(m@?*zs|>l3O6=jwt;CX#5%6ZVKeURD(r+iX>5r55lER}JEu>Rq&9)QzeLHeOD_S#&=!mQBoZ4@4aHu%^akCl%o)qf;NiT}V2vEv+`OUGsBCrt)2?j<-K8nK447-wu+Kvj-Cef%aK!BA_PB$Vs+^f3RmVv3+%RdKt-0^-_-oy$}EmY&h3;LUk%$j8|761pO4VQz)<#WyuM~02(DGp_7}nRwB$0zsX50K*0RbM~k2GTCstDoB4vNk-(YH3+Cf;4B|mTM|YyPN-?h@+yTXOWrEA6zup5>`+&&`=~ORelr<%fFRj)b&!Fu^F>Iq^!ilsL$W4Oo$kJpZ^u3=R(T_iRyM)8*g(@Wa>&obSl2ovwm_9tPCd&}KN1M1&VJS#TqR<+7m{H7a>Q8du_WGLR&)f`8H>;~+?-t_lBRiA&KW7%s0SBhpFHrn3?H_g90RdUKZtLJ-u7`W|4rPbM=6+O&Q^BUaVk&yd4CMkF99eN2#b2D}6c$T9-1B|`yJa@s`ytknb-pMx0p{=Cso*R5N`>h^pNXThi$(&ral^g$enk$(>_T3xCuri_t<0_QD0wi@#DNZ4#s)BOl4-sDfc?a8A^IKa#Xd>9q7Bv!1KZ<+rxe1F^q7TedFCt;|$3fM>vM~hd<(U#y3tx;E516%7qSdebFk?pPT2wp5d>LW)IdTXu)#cl@q2bE^O&=;otHNjFGY+6Xo7lR_nS?x#f`B5W+am(M?%~1yn>K_{rg;#oBG5$UVEw@TX0FS!!1vu`g?3H#Pbjd#qfqT-g`)yVXr6IqW-aK^ka!vhRkM0M4wB2uY*&Yq-^F=~DPE61)*lga5Hn?oZryq}Tr=xWl#=z@S*#6nrPC``Wp3-?Ni7tjCElT`Hqy?eH&=MH^T)FO)(ghp}`z#^%U;(H+*;(fou9V=@HIg}O-we@saBzy)UO3Yy-=vo_rfZl^O@C#KPt+!)e?s|pB-A5}%mvwH{)hnyZXLRu{}XtjKgNCw67V3NeZ-!_4J9WPFM#xEl&Ao!{&zFkQ2h7Mr(;R^|%>Z8J=)tMG%*EHFOb3X(B1Y=Qp8gWp-fR$tV$uVkROE%k8!p`2}W2lUI;q#i9H%w`60zk!tK7Ka(bZVLb`GK9)u0`KoTu5oe=Q&WJJNREEzElcbE6;^yNNJy{xrRvO6ce{%j8UjKr=urYp#wc|5)d4JBgxohI6?H}YUUSBuL*nJW{Ad#m`;Wbe6{(j>^8Ap!wfd;C6U~&MZ(^^EVpH90$?pj#sqT4urC8UGH?bU6E!$+;-_78$P1V`LaEvStC{m?LQ+COc2rIvqMw^Qpzt&ryo7-uPla8L}zO2GQCn8d-^5_2JgFyDsZ-@c?2`$u8o%$74!_7??Nhwf^RV!#JkMPs?8VZa}fof?-gW)rFFJT0ZMBtS8UD^US4lKt6N?r}H@+LNgAE-{-03V)4Mwl?DT}O;e>yP_=o3y`;hBO4J}cio=9=T6Ns?AC}QtNtlmb+&-Y#ggUG2QdN>6c`FfIH#%wLFC>m`O2J~&Hn=xH+OvZ5n9_*MgPU)Q!0_>Bhvmjz|1Bc<4~R3d`@^(e&m4j4!Qia2$EW@!TlT(j;B}ywy9wY$vONyGuMN`j>&r*MG*Q4LG3St|qVl^YwsV%-R6^^q-Wz(%i2Y&_Pcx1S$e$-g#Ndcov!09Cy}z1s_94=VOTNf%P=L>VK4_TVMyzYO{{t6=EseTI++k>)C5_cf+!`B46@PueSNaw2Wel&xP~d|DADb90_L15H0f-0P@wp&KL10SlCG4&=>?eH#NetOqCD~oajG(oej--uN0-R|UB6_f>hSBh4cttss)Yxk0|_m#M5l1d&r1~{*xY@sHG1lDGskifd2?Xx`Fo*c9454^YPq1T76jk~F;xoFN~{K^vTRgBW@h$JwOo$Or4ynejwo%=Z7Namyi-tgkpUh6FE>`K~mrrx#<6YFYCSR_7%AFKrv8Zy6exWI?4oRd)$xD&rAC$jHYDj_;%n_yArtAw~7?|$U@No))iJTI>EF^q)=d!RGF+##n;8N@Tto}kY&+`H#_7qfN5<^boOAk{*0K4|xJF&xiO+VI;UpXOaZ0!5zh8Up8gTJh^ZCVBJ_V9(xNk@MZ};NO6!@9b@WL>5-M51_5jUZ_ulg!Fd$vJnmkB5jVT|tPC(D+T5S-Kp_lTfkmW+{S)vzT?-ED8NZRk^yZYPtL#|-Q>Ib+#UxJ{%|_h{y2OS$HA##6kzMK7?AfCw(%-VOZv@wSyMOEgYOq_oJmX6USd*xc!;ZQ!u-M6dD8(n9++b3GwRcD?^8yVWZj`sixHLP1g0c*-iMjTD>4WmTJfbSB~V-!GV;@$E<%0@Itpwhq7B52)<~T4pQTo3H;l2OwS`M)B59wYU4|-9QFT~qT>%4+cf^ST}C2N!Vj&!sp4IRQtRVai)ma-mKCKA%*%-Ws*=m-6Ed$$__doDt*M;F>LMy!DdbI2et1G|e6?&_mxt+5tX5yQ22y&Ri#4mt&kzxeg$81z%0nCFt=cY@PbkpNZTQWC)g+)zXEk1QuEx8l>h>94*epi&?a(tE2?1QsltCbOKp5XL}mm^oq{q9R!$+DPn2X}PkqE263)=jl6uqkoPTR5tw&;4$60I}PC^kEkkzL5v(wx(gQJCQ0%ga(RVUHP6K0Xov(EVUa^!f`rt9hd%p>4ABrg;YWNVz3KsK%KmQ@6Bvmkj9aP4+RJvYq}5p2d*a*8DgcMaUz|B8oLFhGtHZ_$)gFh2M2qGBBJra@n3>h%1q+PZ%yr#BWisLm!PKcg}+2uv|g25jYR&1NL)H22^@sl}-bIVt@eegfDf$J#rFDCJe2N6^1D>liwAe=Asz>4hqc_AxYWV1z~|qJdNyI+!s(Wh7Wui=8ChKrgt#%Ac9kG~vxTA8sSu!`w-*J2GmQVn~wh03m}RdOfyhotzakP#;m+EYC22EosUwM3CciiotMP-DAJTSMVSk|oW5$0t`CJu{C{tqXe6f;JrVi#q!y^u$4=*}n0O$&nw~DZRydv}?9{zr(p{uM?r-2#L)ep1qJ3^vdiyDhl478MlDZ_CE-Scc`-TcV>8hywsxxE*LXk_dVhi|}y|8btCy65U5(bMZ2yATl=Zj$Q3)0K3C5!Oy|*te#`9A^Lqa|TZeJ;8~v8Yv-Es02my@8x`j1j@E@x8jTO8cW>|Y0xH>rR0mPT#VTssgjIWal5F=+MLeDedG}nG(K`%#!Zt8c*T@wSdLm|Xodwb8~pkNVM}Dff6`(@mICu9k3wKoLa@l8{m!*L*^?m3aMhrzD_gS9^36o$c)t}r5X;Rz?TrsQt?;Yp-2Dg?f+rJgHtzzt{1E;wJ0!Su@)%uK|8?*`njexmYfvy^7VTfevYr-VcFAfccahp0CK0V0-dzP_CnQ$bQ?#6oNzSS5h+rMkN$_dPloH(TOj6mtL&d^w6p&GwD4kHoxjfP3NtRf?Zl&>bsYSW>`?F{dZn+$Yy?#Ygc44Dy!$@+7id^ars(4C3Ov26Dwu7@{g*NOGzM3iyDMWvHbTm}q;`_Gy?k=va1)CA;54j#F`blg>rM%+&>FtcwS$2Tv%nNYVp2*jm-w>pbX=uKjFr0@GPW98qas#aBIqaJk#mF@T1`vFF>8WJlU}SOi-Q)bFoD(lM;%Gu_Z-6+gsVew^9Vy)g}VL?YF{upM<^)4=5-hvYYeNbe-(?y0taoDp}cH4qf|yD4fS3Rf~RIyw;q0W)g%U{vFkDpTc{M>n$mtb(I^h+Cc!YBL3eVXMzHqx{=5ajwp>!0T+;bIca^wEROa$6o^K&46PWrQN#FYJ6g)BH6Qg6{?q1O(Kl4@3H>b8CkC^88(tSQg-aRr?B6nCdx@hWob;sfU$ENxd3q4%EWmHz@s#)!F@6b8=2lz^VFiD}VPIN#r`vTkWoX(STWTZyivghMvYD%jromn0F|XsJ*<5;A6gLQ?-fU`VFU+9x5t%PXMKK$tY*oA31=i>18E9s8n+9z#7bpq5z5MPJT6?x-fR9~R958ke1cg&4JxT};DaNtAPsz=UGHo$0s?-k0^B-L3hRh^q)L-@@)Ow46&4R#d-g#VMQuK*!fhTYQ;;`wyz1*?L>*E?I62K6SP1p1h?+L{~ynpgA(K767(+ec|u-D*<5P&~4SwNj0R-&vEr6Ll|f;Xhh({(aX2eKe79O-!9EVL-_>pRphqrz0r|Y^cKtoGRyOsL)$S*QIjrHsWjF8G?wH%)hY=iWu>3B%7p`Zw_c~01i*ch>ye~T^C+q7sgkdAsit5$g4dT)LMZ+N*4wn{nds0*{rkZ2=YV#+3TtF3Ghd>sw|+hPUeMu{3C!%1JU(>#|bSxhn(*I0q8EKa$TC`7evE$2kSnX!($wKfH>7drvG&u)Jv#x*bHfq$Si5t6#d-Ra^_<2N6ssu#E%f_@Uwt07XkkgJ>imo@$j7TD2NmMXmHODmXOIpz76I#vU)y!n7*H8KF@ynYTYwAO5Q-ewYj|r<})dLyO_ptoA8#-+ppsx|z`|p!`@MvclG8T{USA36MHAR1Xtl5|#+rcb4mkp|Iw2_qY2LC0??2eTe$uU-=kMwsLBKMRef1{20Z)FSTs=29@CW2qF0dc;5mPcYWkQ#s-;~389_8$|qD)n1a5T-qaYM?O+LEbt{Z5&bMmRwqzzBR31$p1UCSnwzv;nGIjS@_p~UwTV;fnlQ(Lpy%T_maDWQYtIo%#F63JvfH=69zTi>{jbVwp@gtBl3pU+u@q{yG($7HGKT1s<$bNV^F{Yz|YG)6}|+ut4>p!(dXwe4P{-lVE^nnHuabbE`5`Yu5_5SQCvJDySP&!d%YAJcztzyxZUMFSfWI9WdbA-0gowjLmty67q#)^f^Kp2Tu}dRb43eYlYPfDUz}9>Z*Nsv0%%c&}HDuy{7*3FV%ev1-GNEHAI}&2U|cH*`n*1mfalr;nSxN3#-XVmD`hcRE)0jL2m*);(JiHGMm27MOCR;+~nOpLBT~AiT*kZ<^s?h<+u!eva91bzFD^AAU4OV$)~L8qk)GFvM9@d7dP4*j6|z%VZr^P5b!1gmgSRa-M3A(*1+O!GT*)+!heOX;&SHUb~7mN!sUj2+(U$b#W|U<-eSQKAXl>Am$N_S$LS6#hJM9B~jD}zBw1By90)`=}lR&o?D!Ql^WH&3(B4(9W3@hJ22R$aO4ZL6@HTG8HGBo##RtP{@>`2kGGP$KxLCL=7-q8-ZDd3+<AxEiX(0aHSwph`J<$UrE-MJ3P~N*4kKwA7^AN*2`Rp8Gq;a08%~<(21Y=x4?&zF$&%TLms-PVqcLVG~B^svgV!AfD*+OOl(90$~A$y|NtChW|-7k^~NT>s~CM`OVUAzcz{a?ryS(MG6R%`n?1y_}BAba8X{61d!)eI{Wl~qOxiw9GK?c>^b78S3-ZD3!~K=mSWd;-hhUV1!Ll1cC=KJYU>(K|+tsqZoZaY(dTrLd{b=H)ai%5ard}wXU=$5-H^VyMY(Z6JJV{`rA6iu&eCGDW?5Ou=O)rREHaos|34njn8tr^)tpxZXJ1V~P*E#oym%~T_0eu{`3TPR2%=u?n23@5G|M~_uuMLC0EMmJ%LeElN#OpQBN8wdMQ`_-Z@WHspGvMbCZ!h>#Ll98`b71Cm_Q{vi0R1RV7g{bZZ7-}+;vy!BpZC778R4!Rp9cYOI`u3zKcRH3x4mybM#=8w2MQ{SKO`JT{d;J4_koNV$jUG*ua2G*JmW58jf?;;DOa!pf(I_AIpgwnRG0CZ!Of7+-@5K_f%0jJu&UZxa2&RLwDz9=Mi$2e8kG+~J^1widq6`7&_N$G_8rlM~XBUt5XtG&mrjxv6EJ%W5IWd*;THl>1Q2M$}sd`J+o^_IWyad4o#JwOUJ&}R-HK-UCKjzg*)yizIRa@bjj<^=pGQ-YVffgRlC{qf3vnBwmcCh@ZVUjj8tvU_1cAE*~(+Vx>SwqC@4@_{#4q|(+q&hw1eZQCYHyi;Y5*1>LTVv)0x+2SFj)QE{L*|cksNuxppM2n>z{-We`TQ!d5Ma(6P**u9w^~q={)ae6xh&vc1`Y%FrOH9$6M4zjN}bI$Kw>e6MSZj&h|c`eXKI8@-%9x6{dMI{S9K3QpRZQ!Zdj@BTy1=v`W8qpaWL=s@&mmvSqOeR$jx&n2Ni-FQkkv`EHy%B$P5Slz?j7t36FZ|%CXIrlt&-*IaYLZ0)f5$?RSSKj;o`eerE{->s($6))4X7e!vLbI#cuHDp;A*(x2H%Q2Z0RQ?{Bl$_>@GCPg29^Y*zmvM>*jhzvP)(;cIK;A_S^ONh#{sE83)rRo|3;tMHz7@J{vt00q&6SG6okZKmn`#j;kyQ_B7XS+9B~C;+~f*`Ub$QW^B^PX<2jDsJHSYmVOQtIDy}5U3EI5NnlW9#p)sIWm3_^GO}8kuL$*kqIKkl)Qw>S_DA!Ykiu=9gXAQH&9LbYW{3VMu6nN#l|MlC%bsU)zqN?=^W!zFZrh>d|LTwQ|cLboiH7s2_n+zVq1Js2#sTU*Uryozs$6$Q4gD;N&YF8mE4FAq2~_AGgfHj4bhO{U7r%L8lbV?H~Bp}9ZT$01y^A`@1^eX*~ql>Rl%g%qDKT`Vy4Gbl1iKW|YI68Pw{y4gLTe46k=GnKl9Eqy@t)6bQ2T`b>n)%UZH0VK7n*mKO4ey=yg2eSEy5kf74vDws34+ZH01t9fD-Cjknzbww(R5bgF5)Sgvxfp;38C9h1@PO`CCiQKIa~+EF%S#TbmncERYDxifqanPN|!;%x6%#jufn;Tuc%l7j3Gn^-~_Wy!QwKpew)U66cv?(i@WA>66fVkYr`HvWb_0567xQUTP0~EcX!nZnd^e%G$7AjqQUBdoHR1(?WJs;Gy|vAZ4i!jqH`YH>*Uo3T{71zluc7Yd8h|s*OY4zYaUj5L#(y8rlWcp^aFt47PQJKz?|AC>6T(v)8QTZGrf(WWE>r(AG?dzd8xAxPW1yaeAipo6|&7qbE%y%PS7IhA8qbZb0PiSeKQiYPIPDZoMzZd3hz(v^jBaM3&J3TVGGwrd8yz_l^~SVoUY-(;wz-dN(@h80}9R-?ue~IPV{Jxh91xS!i?S+cc@r4fTikS*buJ-QStlyp;A_TQoJH;upXpJE%tbda9moRLo%A90X2g(cDR&jLzZy=|}?Qe8YiCUPsuZq;d8_UFuwHt0swR7hd3(v?D>L&v5U2UxFRacF|Lb11k)SD_SvF17}=KL2k?@?18GK*D;KC`RZX^*!jkSJ>4jYbvX70!hSvwjb1MEM>b>hhWpGy=8O{XBJg>qq^D0op0TO~rTQlHeZk^fN)alglR$cNgAm-3hQws-r}S4!7rf-fXhbtS5a;FInO3-R~x~QJB*?DX8oqk!9I`M6*E%9I(z0_<+^Yy2!{2aaH+=M35`Dbvhp>RoQc07H~yj-RA^cRy@vyk;w<8zaHhv@tQ|+XD)GM)A>q{ie8ia8xP5?)eh#G#U#$*%asvrtzGGli!n|uBvUxtQyXSHjuypk%tsLk6~m6TnmDC5e{g9+PUb8~jLX)A^8a$;5if9V)BL`Z+5dh{2Z1B9mE`s{9QyV#uBWC1OTbv)*pt;~vjf2#wqfwDsQTdy#%XA!GnsAAzWpuh4v0bwA>S2nmD;T@Hbsru22nzz!%#`B=gs#`JL$MuK+nNX18*+*_!Ya@J+q0DZ4-Gd%mrc_4m9s5KmNFcpS6rr}t@g_>vk@}wUQ!v_rWs1s=QgFw{(gb3#Q2NzGb|S4KVPXpoknS7MTuO2$XOUHsamDEe$AGS;vOeB;!>hMIr?>`NF-~l@5K&=KVAuxn-R9`_6&F*G3sjWy$WTBP6Ds(WLi@3=N}?m@tJt6;Y#b*cd5xY2w`F3S)oZZd(Ki3itfrKZP0^oPE)B0l{+67@S?>4~K(y?kT_+={ZzY!_xQ|4>8VIj}dZAb#QP-Y4!Y!F}^{s{RzyFx{m69CV8+}l+&0y0SNdbz)6AN=zjxua|8pwN4*KDqf>FL$cn62xLwP(nFY(o`$ycMGd`qBmOrlT-`F2N5$uFFFgT|^k+2*1X;F2Z15Y?d%)Godtv?cs{(P_uY>L%Azc=xa%XTz*IPuId+fJ`le3PfulKY@oatI8t_rQCCc=b(i{u8vcA)JrM;nHVGgYwbr+WG9Dt;7$~jI-^JVqKas>L>(IIQ5~8&#U>v`{;3hxV}80&eo9&sAiMd|I5sp4TXm-&z4ro)@i_F3Ss^82M<4$7A^OcG#yE+_#mtiX(!+s}_f+0G+G`P}3@lQFvJQq7L$KliAYcCk1<_qHqC%GJz0ezhR?^HL%uA$Bt8EAQC{3K2a9I?hdH$=hAiC_))e(lZ8fhuW)4DiNJ1;)4F+=R^0kG{*@eOh&_SMNZ|4=J_1h)9<-Dfv}E9V2`3>3~%3iLJ;Y>_68&Jha5;*=@ZHL{LbS|{TZ!Lx{1s1dy@`!fPB0cAV|WF=jI?(+;Lbl&z;gO;;^WWfI?e7N2|UMe>zwoLrl`(vK^1{?8I>F?01wKG}{ThfwE&p4Fe-l&af=fuDf&e1lQMd!?e@b!~du|3(b(lKEnguM?@-ikX`dkLDNm9I?c>g<4h*us@(^GAl!1{U(!nZ*tj#rTaox`bGnc|}{YL%<2C64RWn)4wo6*DWjf{T5*3O)mspp$RxGB8B3b_WpD%F9r+n?-~FRv=nK2@Hy&dKF6YC{(@>vbEEkdcun@4!KV}{#e1G6y!a`pHLQ=u6wI?x#Fk88g^)$>I(lr2WB^TNd(B`&wK=}d}eO|yD-|2WMhd602dm&rluWqYq+Ihg^ofV0c>jlM*62WUR^-z1eTu>;2;F=$+`PSfk3VKxA(*0=5;hcF@OwvA=hs-3(;)mX>Yisv2$AItHVmlAG%n=l&K}o7YkEV{HydCs5ypQslJzz1BMPw$$_gagB@j3~#gJ&L-oIJ;@erx(3AfNg3%W``Z8(9B1q=S454cwO7E13UC_D{*rfgu9gMRrpnJCUUduGBN>@S8DTA#VU_W38*oEpWB!FFEb3$@LvA`cUwlIszXA4uFt0%vZa6qeToERrfibrPv506%joC&)o8FuCg4Jh|KUQ&^R_{h)V0imT4RV7Mx1;tu)X))#7gvyBfD?l6Wz?dF!Ch8uG4-@_G?lqGJfN-WH-WY_Rp`z{3l(y#wtBU#ESJ}3IGlKutFBiM;lueg)3vbN5t7aJoL%?0&0WYv>G7l81TH*Y;SDw58^Non%~!r@0~#Ejy2^x6fdq`H5VCbm-`+qL5lmmwC$NIpS^XQbLm!RD0_IH`W`koX4TD<@w!N3ghi3-3^-WfybWtjJq}hHhc3^Sn(KRGv-o;t81k)2KsrP@Y|=B?>0D>XjoIMu`9c=8yeXpGibGqD%}{#O9oAg)w3b1TkNqN?h-Id#TCup_lShE*OK?lLq`VH7k9(^$L=)-%KT`@D}+JEQv55aWVEX}AF=IOsRZG~OUsBp7v!<+i^tZ;P$bJs92t7fA9XosVWd9a+5<;R!)+R>5j@d^6O8YvZmdHFj6{r8B1dLg>h3#tfnjkZt2h+-GoZ4o|gtYjRHgIy)4CT6HH(awob*}lczu-KnZF-q`^61~5`@F>1&#FjMqG*CG=#)=t*Vo#Xp8%Az4c1abpMVxDqbAX$?XIZ4zb0Ma=H(qT5Ofo*DKBS#vsynsf1h}KhHyXHBQkOaCyM-8g20=e>8&r>s^(;SV7}@ibnWqH!K2|_Ph<)Nn_a=xP4paK+xF?a;rMEVQvou+)Cq3b6vBU~yjQiiv<3T-0s-D?3xI&oIhzVx+P>JUOu6cOk)-0JUi&$rZ@~|8qUwl-9B8Rj2%d~F;1l7J#lLw`4b|JZ!PsO?aS)2W;vUoA3dBp?L8PVB;0!5dLUz;ATs2P>*A=OTox&JAgr1Gg28gQ|bD9MQEf}vm3&nZlf}4S@DEaFm;szBVNU1XLe*ZCK$l4qbyp_mXVoOryT22;igY19GyIpGNK&|CnqPp5-GWVoov~EQI@8d-xbz3L|SRX*59+N-F6(j8*P|OZ`uJvluff@MXFd*{FbP|*6p3mv|zx+7CP6jgHzJ=@489Zk!@WAf)eooQq_&ZkEK)gbU8N{-7T{?&$Jrs~pqyPx%5G5FgkI~5)R{c@8$X)IlZ&E>^&%tcKy;2{zaNrBxH6biARmWf!Wr*3Jm^c6r_>}vhlZh5^)V8dz=`#{fbjd22&&KJgtEb=lH*~sR;!`8iqWl#cxW$9jj{r2C%_MfbM@=wBF}l5hXkJe$qC8=`?cjH#ymogwiA{4;kO{o7!kL69094ACqL*%Y64!0&i$%}RtEYohyNuP3w}AoNw@a0gzNiEapv6MrTwef$AE)c#-J`#X)2By32xTDd9$kY&JyRYXl_B5%d|RIa_qq#|QkGSa6gxwEk9d+Plp2rm3BhmOUs-BjKZ2BSg4*$1wIs#;EHo^P^-Mmo=TwU4HvbOP)~bLMmtm^lRte@R~HBk&psxTCCRy*(3iF`mF&@Oq{*<6=W*ySL99(1*^wGgIUH}4*%-B--T;1475e6Rv35^5$AzWsdU~boInS3Xuj$0x#&rihDA}PeTA#DZry#TE3rMLRun!XhB;ns_gQDp192@yLNvHu!aZ$r8?BnXNV$(>Ib7aUvNO5t$tTa(!%o9M;7cbJHGNi(Ya)`^n4%ERfU9|v4!WlJTNH_X-RkApuPrCD-)4`QA!*hNZX*bCUd#q?q$A1apYGKvOB>;&4+Rt*InbWlai~(wMinEex+cS=#Z>%{+9hrt7=H#m>kCt63O9J6?WTJ$&FP{^Oa7s`Mkd#0A$y#QSLNc(uak6#vV~vQaebd1(evqRi$OhyQOed%^;Nsf}2TG`txpJ;UkIW?X@CR(4qoEz7jQmozs6Kw6H7P+kX4<#@=CYS9l4YS7Bh0k57=vgxls)P@-c`8B`cO<(G+vGNQk|2|{de?O4Rb`!r#WrO$l2^#}MsSx{z};Q8v$Vi!L${cNo}p0z=KrME1^+_xXLBJWi!o*p)@uk6pdlG59sKm7{L)a05TYB{U+@Q@Up<0MEbM?Ctr9cxPy0Tk#gxE#*%mdO+YxEp8kcL{GmAD);}_E9TePmWU1Ijnd8LTjaIZ=CWKIq(cqXFMZw2bjfZ*PiN79?93FE-dTSU;tAq1EknknUs8n5~i6xrz%tHZI(T0k9#8d4Vsf%7gTkde@V4RAts7GhL-9<-Qq=kv>J_{6Cf6v8*sw`pB=U|#zgbR_Y}-Rhs$;pr~A1}dzDtC@85yUGuj}4@&jvmHcGiQFvgdI1zyCDc<-7N`fT6cwWZh3F^GR;_Y!^04nh<}6meNd;jR`ZGb4~<{x>hX-JN=i7D(oo?m>Gk^@6hMHlcwE#?K1KQXDio9fE!P^yHK02@bgWjUR8H?^sbTM+fBm*3ijZ`5S@RHB0ax9{R}qLL>TAia0D5D#LaJ0SI~0TM{ByxxVtHApbVXYy%t{3C1X5Il%D~2+tga=Ypbv}Cbr&bsdROKVOoYC3AFR`7E3j(*zr_6T)u47nn%|x(Y30oh@FSTe|mAKn96!bdRq^ukd#ch1p?fM#lsnzJgY)q7J>HZ*CkJ2%p+Q7d>CQDXQf5eo699N{yNzTwvj3D;SvseH;-eQPm?k2VV}%yPScC!uivk_!IV+RDk985>(;L3O)Sg**j)RI~NVH!W=)>-F>Dei$wY6Xg^c{(9lNLdG~RS0za^q0jMBIF-zN-36;$srdsMgFHJHL%eU;Ptu4YWKA=e#t{S3>s#e?30k;Ej&{!uw-V6~d&*=d8X)CY1N9e+s;&;*GT<-`HZPJ9hlt@;js54Q~-b`#cH&F$tauT;wA0d2m_u^zeom6xHgM>`VZWYftr{|RPYjNj|9PCy=3;hu-Z(pdZS!f(Vj%}_~y3tmi*w^Hjo(L>sECB=AZG}lyh5knc(!v4f^25M`HJVsFu$qAubAye$uort2Fdx2g8mhIr!vJ&J7a)?1uqx#*#pxf3CA@#Z>sGYII4#T2`rlY7hsu8pTsd4FhHzn!Ys6p|(NK(7Bf5pLs4vt9@>|2Io?Hs>tY+@ZVfDQO2HJ%bja&x+Xw@ulOfw|ho?!&x|zzcsej$q!@;atLG-x$*N#+5F0BpQM44eD_HX#M6yb_zUwsD{&~B4(bV$ZlJmE%1~)3oaLrXfTY`?NHmK$Dv9@^|1J348CGiOk{=Zz>B>mb8<$cWnpSh$p%iyF@(8k!m^@-A`yJIZXrn#B&=^pp|fjm9th~&`QDTm1m6fF4bYz_8!Fuf5SiQT%wQmr@c8@-eEp*V$S}z2;$rC5_`WMGpOA+s50hmHGw2iBe!vAasjJLbQwjk!dWmigJg^;yI;+S{Lkv$d(v0i66{k&>FO}&Xx~v6;DV!Taam8s;=_RS>aBkSZC7&A}_*-0PDN=#*`=FME1Yp&f_3bH`652~Txu%)=Wvd57$n1d!xW#YiGPfooXg97kd_~GV?4E-f7K7lEKGXEtin|V;%zR4TXBL&M=Oyh)xumRz-_D8p|cA*60xX5*_&JV=dhgWi=sFZU+lx*zoxG^wqR~YENSn{aKf2QvADoWO~|+yI0W9`-Vajme!rSDpLax|NCd>(6-xArX06r_5A>kmW!)qdS#;MiC?JUozi;vP&M~G|cd&ap`;&(TgW&{1MRZ0WQDHB}X008J>esdDANv{1s4BDrX@4O4*uwNC<)h}-?bH}#PMO^Ff}$MB+v5Q4MlM5%rMAAwS=>c1SgM#V)Ils#w|3j4~5rdpR@27B-X|?gC_QAm+ejNTD1`9xjff$hJ2ZRMC(^tC(J^CtHz5Gb>-utxUq>FEGjLN5~)}>qPi(Kg)bOakd9wo4iNWMtsk>;=rdUlF!<$I7E9+Win6^X0Ryq$lx+VHRnp{&?ENMwqjdRN@LAQmsnQMtS#8t67o;AFEmg-ld{9*z6lmCP_)4e&I?AUI?0S18E}$8Ok}0$?p+HHI;C_y6_gvU_v-O93UQNILZ@#|yCQmKIFTYDURrEcJd$j0cDO@2$k9nq~>IQd6D4T5>1!{Ndv=Xb2%rc;{8+I9nCUvA+QTIVCbhRR9;T%h6Zp}k14w~kN|E&*eX^Nkiz?2=Ua*&u8~M5(-ZE>%;wcU=ftv~LW_Q4-ljYWY5h@l|pquf)>h|3h=_am1&x*g@Z9X#y9+a$q;gn6C>_65?~*vd=?}vK{Q2c3#{mM+vwi!2d`GuFm@z-c^PB9mX3PO_hvp_)qvkD`Gszr?#}98Cp5JF6$Gu)^8D8*DA(0cEr2Fr8^T~j1Ztl0h`S?|h+qC6T^wxeR*kAi>jKzc0Exb|#%R-|)t%`o^mHM}RCDxfj_MdJ~vp24tr?s(l1*9yLujrC!6I0yje_k!BFp{m;wOoK*GWf@w4pQVIL)3r=d#w3BJ`mipe9(a!ITr7&tBhUyZHhK5gZIe*q`aQ*dyvL)IZ%~qeYA{Uazg_UF}G4dXCRk2F>yF`ijIVt9zd=_>6q%o4N#g2zOQ`UFH?($+H#VUPJ#om(vsiFQ78lMIAC}j%zco3@ik3Z`EVR%2Adgkh+rO@*T|I(;wR&82&-c4}-$7;-ms(S%FB+N5Xu|1B+NhJaM&h`Uy`i1esHt=TS`mr19Ej*EQ$N@UQ{-lJK_0>4SxJp$BW9j;Rt;Yh4Ju+A7uXu!(>P$$#}Eg$!<(06(#+q22VzsMbX~}eERbWa?VH^ke`SVpj8%@2EY||lMQg!N23%dTDH-_klP)AW_MA!eq1E~BF)AmlMSJ#lcaMI4S5wWW+^@91j^ug$SJ@F)TX1w*8$*5c1!(wwIfS4E%(WhXar`V(7_Mpa-|ZRyfP&>uO-4yx+-5Hj_W;&FW`BF=m`COTn+W&ALSS*mi2t@eYiWB%!%0JGND;7NyYpe$e;J=@NdbVFe35eR0$bAH7ek~dq6RsfP>>iA&Tme!GB+z=V$q2hH|u>*J@<^a(gt8b(t+kPMf1}T7}{RmBm1pYqA2Z)1Ow||E8{M0_1G7#LjQ>UM55)ea9{1h0Y_!6V%#Qb!t5IE?a&c3qrMVL~q?z)D3$T_`0)Bk$s{ezm)&!ZRpwV^pd*olsIY&a6c>7j#9ZX&EPanGqzDhj8}4KbX*g0B8N4lQtwrFLvSrHzu~D|EgYY4^N0D!ybj&}C=5C-!TVuH}Ly+^gRAeR+kBfE{{oKzcUX6wd#s*^Kt)7B91z(+QQL4jN<-_D=LE{4@8Y`Dwc03R07|Vhe@$HSDt`J#Rt2qA>aA7C+Dvz_`tzlGJf7O?0Bv5kl;cPl!!5ZSDpbhbhsd0Me-k4duv$$?AI6JjMp%O4D%wKx>h|@izQntc&u?Hd98s*PQo@@Ld_X^dZ^)vRnMH2;`dBB|*O516)$-*WbF(3b7gSnmq!s|oS&`5wXh=gm+jGg&2J#yNH-Dq3K#Qssd$8hll$~mZ@qRR@iR2_p?O_*;Sm)o>)BO-NkUVzDJ{Sp|)4c!T+qJJdo2uT$80+jCigMWCFs~5w!@Rx@KEM*dozf_*2(qpj2l*j+W4~KZL*Q$KC(HzLS0OuoZuU{1){;9r`R`lWk&+KP{}v+L?lsKl}M1Bx-&EzD=#dkg$0M~%vM%}A&&deW8^?_L`1@Q@UnFp(f~7Tc+jXJYlq(P^;^v}Q#g`Z*96fj!A^u*37T)C2e~dD^cVqkMBIQ8G$T*sZLh_Z5{2mgyAJQ{R7vj!dDqFX~XK5oioJJ)y3xpY48Utw4qqlEg}(|C6Qlc(U`~93{d&)-6_c>LmWX0Y2&;34rf!dxg`)+F6MHzFML1(OfESC2P34b0rBsMSCOpKz1^bUFJTe1y~|>NZ}u#Fr$}9dyC?5`W!8o6aa>K9odc=-UMM_k=6ly4*BPb;6IL;To=2h&Gl_GCvqg=U07Xd&TEj(jWpE*pNKj%tAxalb}$%5gd7I55`6$Ahe#YLGzuu?pBY~aC8^)AWzii5h@qa^lKBT?;-56r%SU@&Pzz4l?`UMUT2ZO=lOBg(HTGRGQ%^Z*ymW`Gj@7^TY|3-JTdPB=S++)l>oC;pg?YX8X+oSqcO7c45ONXMKPqhG5Drf9gNkz3NoyMniGlSjpKRNWC28~%voct+v!EMDD}S@%j`nyBKD703RiZD>(PRws2fF3Yi;yz;)~2-_B?&UVgeaIV^PSR0Vi89@A0?k=C=TvtTn_VKp0?*l43ZHQ1yBIYi-7451x=QS{a#Z(qP>6A75#4TI5U2tbQv@lWXT(C;G4o6F74iN3&@oZtMg*S&Ct(XlPwFM`wk<2p%g7+&@Q|l(jX)Pvkpt&Uu)uTcZ39#ughTVRIH1fc%~d^T!qI6z!_2p*$s$ZVNCDgKqw4dEwv(iP}F@*oOS3Cr9rc5shLHzj^5MgoE~thzsP`ub!q6$6#L9+)kt8+_;+>fGAjfiZdc9b;OZZPXytB8EQOjpQ-e_10);_3Ew3`7pt-lFbjWA^9-6Js*g(CdOuS%mMF)rZAQK&xn3qs3l=G8fLJ^j;1i!>VDL^*W4A#4)_Lxeo+xEc94M;6t|_pZF!-l5(Zvx!0Pxn<_;UqUpeRE95A1zK}c|JoANKzw;;V0OIcj#$_$jce`J&?BYs->CP}MjPTuQ7GZ918c2^EQj8z)SGq2Rr#5WXZ=1FXHIh^H-TI4lQxrQaQds9gq;TU0xc$XNu8l&v#HXXcn;2Sqm@#I)uNqP1v@WBeV0u1U;EaSM1JUlS&2O{;cKgKC*#`%=De1W>VEGv7Xb2l+hJUiI3bSG?P#9rHs!5$|PyWKi&z1l3J@|Nj*zDif>H5DDRp=-D@K+_HHW86qA`l=(@b{UFYPMF}nasqsIchc)`#y+d*v%t)Bg7s2>dC%AbNHo6?J4ve0?)`Ge*NbQG5E{Y-T~7CAiZR*{-r1!?l1Tx3xzG09;5v|Kf^rP!7byr=~YGU>D<(r~<@fu1ITnbE+P-2p!lMXP%^IME|#y~k-+1wavcGfgy)N^)Es>06(Qu7?i7`1;*v6Wq^$VCV}DknS6INjtJ7{zwhqg|`sTqXzD%O$kjlSzG6GK;YT*pR!^Qq~NKZI89(Nh2k!5GZo>5WP3gb8%dGMFXQ|t(#I`TpiJXW`WUj21xpg?)6?z`D1f-?HUFwH?9=Ok=Wox|xMJp@6D=A{nyyya44!Xan3?;b8!rEb;&PP=fGYtzg?J0YKJM#jk$TYc%BKPQlOZ@eycsh{{}I(bcd@lJi;u3tWvai?L#x+Z{U@;!5uqy4qBdTk6&g)AP;vF5B|(t?6D3PZ&g_VxLp>ehjsFp)D&(99iRw|jg*(JmqcNDzv2f_dBB}&G>3V~_^P0#JD`OCS8)1P-bhbCVl!ZCgxJJUkOZ7pr%89445DNAg)_W8a63oqjQcuwav*n@e7Rnc_;rX+oc0`oAg7!hg9e90&95v$UDehy%n72e&xbnJW3_;W$B&+5WlleRU-ouhxnl!6;arfE>g@{dBm1M-VtunA%EYjOgM_rh_pt+HcEjv_2fIeVs%K$og`RKpw+6Jjp({{2_zLzm7$nB#{5ZGQtD|Brz58uZYCH2lWfJ!MaDo7vD4i`UkHn<@sWn$J8X}oEs~ztf!bs$*Y61_zgPAK90dLwxbjsVRTn>wZljEcQx9U>QUSUCHW~65DiI`YGHwN~V10N5)r&24KsL0l9%E;m(O*TRCVaGXAw0Pq-M1-b$R;qTK>W4@A=Rn+r?(xo3S@inX8yZOD@bn34AlU}f{?H}s#ddY@bqwOf(zLkx7_Q#eGbo^|*|d5Zh0*6~C<={sz8mWsr%$8&)Cw|KcrOsGl@lzz7%-kUX@pbAL+gtpNn9$e|nku+_&c>sEvmfv@5)gnGfKqR#98Fqt{Ezk1m`Lb0tJ`Me`1P+USG9ddYkq6u;5gU_3ZM%hcr--x7Afr}{R!@2{1~MEM6WvQRqUHGUF80+a9CeTL4W^PLUbcjcfX2XJ$(#JKNR~%tnwC&ZGwuFECk9nFqzd+^Rm9bm;xv9SAFP-1w&WLN#B)JtQI_=>0Y|)TG3(*EAwni^0d()VA-Z8!ue}LAWKwv3YzZA=ZB#3?ch&V`4l_jw>IWxOF!x)er}>;0dCOR^|E`gUCa_!H3WiHn_uf;sW|D7XZaQ(;f>vJ}UwGGAC_)h7sGUlXRAB9snmNQWCcX1KF6i`D6zq}~oyhe-a@c+3L?96NiE$4DpHM}X()hX&Qv;Ytj3h!}4B<^xhEB6bWa&VutZCY)X5zjsu%ofs5hM)#r_Z6Hicqs3;5kG*>nP;-VZ4GQw>SJD*c9;hL9$Fm}E^IRuZbL9D4brB*&xeU_r_}J8s3y!#g3mX$J+q63;D^Z-I4%8rPMHW4+Fs}e&2ZBZB{d%IhJY6!~I;ev%(F)lJK&q2$PcE$CYlKjuFwvf6x^<09IT!!u+H%QEzTN8o6A`|UD>Dbs-tX5qrpa7MdLaAa-=alChod;;%*gQg%1}K&5Cr_6ZP}pc7;rKpk^*m=rHJA|!eDOM6v~8c<6+}*EKyiVo@@T~=pNSbtNE^+rk3ZN;nE$_J!gWs0+L)T1C#&_n)(Xrwy}Bx>p(0M&c`0oDZj_{f(NG_aFa)fvRZ5mT$u{qze_hA+0R8O9k8d>4|9p*#(F6054Lx?C+=$3VqL~N`66P;>Hk-lz!Q(yeTg&HqNk!W`9fVEMAc*8mmGsKjVwzv2$qyv5aL_CppIW*x<80{1Vi7<*iYMbz#(kGzt7+531=^8HtJhL&a|%1;rpk?@Y?jfN@j~}^=1f2%iXY3{2n?;DemLTfihA3Ipa{~!Tb%O^b3AmUg+V7N{S%*xSYa?_-dehS8V(WussGLKB$G$R!+Zg&l|iLm-%W&g%Lq?H^eMTp9A!JFJ>uaCX(qicx*QYnQDm)c8fz_k)^GRAC5ePeI;wS7UYnkh$ARKjYXrwC4oD7>ht0|zGemnd6?`)lgwAb>ENtNITlRKq|L0)~Wt5|TvO7s>RMmCg{f4TfX4R*RZL0D$BM#;bGim2E%=$hX4C0FNCsD@CN(mEc6Ea;)%$r!z*Cwlm?>;@qS79#^j2g2dG+o5R=kTbaNcmmd6-yp)0?b*0k@N?ec9*n%CIWvml^mCMmUd<@ZeZ4@QZ4Pl*TrW;b$AY#E+&d>XyamY@goL1#PSJ%NljbT(h@qTIc%o5#TKeWL2Q@iZ-doiglGDPEyl718X=5Cfymf7bYY&T4RoTC>5pir6aFA%p5%=o;oTk~VBvnzeJ{pHnZ@fLfxjoYkVzD?M4ON*0mWY?`A$|gs#Y!9=Ci=L|kLCs5L(-~IYtGxcu^+QDm}~c0>{pJ`mezlhL0m{+D5?ba+2Rc+u^I3QykU915~Bt0A#b`e3aMtdsao-wt84gD!u1AeE=E|uEjqh2@sT=NgcbpUY1}BL*DGltO4X@|71+Gzoa8e&_f2q~UPWshzqc0d;8kI6nCo`gqZ!Y6tOITkE&SvAg5G<@7?dV0g6_(`+@J~$ze7QQJuoDK(K}`KY@KC+J9Czf)HD%ZHXP2`fhC7N7sd#@$O6;-T%z4qvHnBUHu6(!BUJYXC&n+ue8q;(ZaA7hBZIB&qAPWM{I>~E8W4RINO0@Cve2+9RPHm5#|!+$Q27KNjZGhoX^7GY{2&L6r<{1ks9{#=BzJhx*~vAtsEr@DQZQtdtmrG=$moN8wYaXxQ_w8A`2+`mp;9iTkKWDHjNsf+X;?Jo=A5pEi@zh$h{;I2I1=02oo4RiSrgqT9*!W-yhrhEs*1w#rz`rEK_&;350?^xB7E@+-*=f$g)1mTI>E#ZD#=~=L4WvbeUpOeMg>?Rui$(yVnvh%o#rGWcNpf@iN?elR`O;6#TjF+}KjC7lE+f+Fy)SWW(~Qti+k8*HKa%C?F-A7OKIkB&z9uu>wZTt$NI4;%|sL$yZbKiOcy_o?jDdM=h;WBc_fNa38px699DCdO4bGKbySi^@?b_mW|?9G#4BWWnQ~|Ud3L9wR`7O?wNJ?DYJm+8h=Q!xXf2YS(Z9wHxH8%1>q69-P|GXgXKJZi~2uaz#WNb_-F1i=JzD&fSyAcNCraw!a`DQ+!#doy%s`;P2>0cOP)ID_&(<4#V4h-0x~a(fmsWWTm1MM&*6h+h48G@_B+~8Nc|os{@7r`G0MKKqefs~bJZV~`I>lI7JD53#E=BhfIm==+w9{&UB$djosi`*phKf~@U=%~L3Ectu-#^df=ee;UV1rq992zScwa?zi7t8Nv${&R#5iQZ2jpAoHIf2xwEhxV*GP5i19_$e9?rZ+(Mr)e?jPN1&H#9^x0)c9VV*RKPmVTe#D|PJB--9B_HSVh)e{hBp2HE2}&x*AD8s(D|cfugT@vIe!H3C7&f*SoFpw|!$Pe~6jQKc-LzlHi|;egB~D85zMtC0GjHel0{2jwDPx;!VEDA;vX;4*g8q7Ro7-jXwMP=sDIw7Ex#H`H%MJ22_-*9_FwHKcaO&Z0u2^@@09P^KiTs$p?BfZ!Rz%i=zmg>@*#8e~qnOFq2hoGW{BJuK3XiQp`^MUS{^C{x+BDZ>kab-3d>M@~$4i!I8|tFYwnz|E_iRFdqO;kRMiH5aP235)I;>7^?UaSQy$(WG;-NXU%a#AglEsoF;3(2jDf*&Aolvz3eB3%N<#cuhO-USsX9f%i`Msnj&GSp}vRX7Hx{CuiGPO__Bgb?};FZ?kSgx=@NZlUc(uKwqW8UWkQJe6utQqn5CSZbB2ohHt+kG~9*EnLR{yeJGUe;k($v(rHX&3?6DY)zL%iNt+vHN|R`UWy6M5xy831kMFxvWgp25@MhR_RrF#>FfOPu84_@`El9Mour>pT*)VBB791y%mk9G0Y9#YSB=N0g7-_7+2e+jBkEd^Ihr4|6ajHtt#~N%2$z=oGAhGXNwM)8<;5*&Sa@HyusP7zr?EN+ot4g*iPML!CU}4qBGLeKx!AO;|{G70P@CAlhlj-5nEk~X@q>)Apo7VpF^zT{m?k!2v*O)#|g)V>D-X@EA9Q;f*9dyTd*yyF%O>{>SKHxv2!|=itSc$~Np6D7h4b}eqZ`unshb)dcDu69JR$D7(Qlicl@O;R!`UT9s2(^C%ei*!GepsUeo_l%=MqY4)SB?598yCT>YW$>r{{&mhcdfNA;#?;{fv3A2J=RQk_Oo+>E6wdN*1$gstp@YI{KAiL5dHVLpLDW@&klP)!4_>H2D|LrG;DEA>^EzLk8u7>3KL)^5m!Kb#|2{tPe))hVN>M8SZZbWKe7bQ=Lo3UcI#*CJNVRirUtzuyQXf{9##V)`qrGy+=D$qwFN6E85QfkG+c6F6@)3JykC2BQn(FppLY%NAY!+rFWE@ei@HX2pMDyInqJbn5WnOsXitx%KTsVMd%K%Q+2MS6nVy-ybz94HwT^X`UG&iAExQ=+ip%|iJaZeq(#Q0^^Y&6zxjoh8=a#DVNscC>zNttNApnc<9J?Hc0nO9~kz|g!!gZ>GHf4?lrilMrm9O&K(Tvm*vBknha!rtrxspz@u|FP*b13-xPvg?9A=Lmd)b>vdV$7bYO+QcbUISC-GThNW!_BL7e4HOYP?771Fr0^TTS~T}dVD|MM#88jO0k4zrNMkC0GNh!NY6JmKHp4g#xtW(s$J(yFZqarqr#WDTmu`Mb8Gs%&+`AGG-BG-tbEq{6|6c?}SKuC2uA$j!#bNItrZS`6r`QbyBYUbmo4XNwj;wCJc67szu(iLhoBHwdZ5x&J<2Sd?Qn}tE^z4y~0$B-ZsIFCcvoD;hv85o?>~8dl1Y$Yx!^PQ%ZRyHDBMmHN+;<+zI7et9CYHiXa>DR_mO2brA0VG>G9&Ws#n6o#Ki#WL`7I>2jM(2g=#dBiL(DR%<{A>vANw@>Ao=X{*85J$KQOKCNfM;m-Y>2NG}W+Dv7boM0Be6R~n6VRyQ&iWU%&GA^m3#Z&v1H(7qhccnYEV=ZO{AE8Px<{B`naJ>k;CaJ_#tQqek3ksOk;EK1OA;*LOEde@3(z~2I$XNldVcgD-Yv2b!fV5#bZ0VriKkb`Ok8n0JO|5h?zlk@Fip1WH4S994(RQR{r2&4pje_SVSb0bQlZe@4r+UWG5cG~9u){E8ppw?Oi-AKqDXXJh9~V2=S#8-nXGTb1+aZ<@)7odel3%Op-SaeoCj{`%zn`BHW=8Fw1B2wRl7itq@sC^J#l?YtYSXLf#;ueP-)|#d|kr77MAWEDqDQaL7eg~5}crMt!lWgJ1(k1Yzk6^_bHtNjJR{B3rjY_?06S&IG(enzSnVTY`hz+l>esLR|-q}eQGaMEmAnhUmw{ztWzb?=8>DNUFlS4!a!MG%1lJ8Lx;jvymtqjZX{@9tp@XZ)Hje@cOvO+n|ZrAA234q^^rRFjhe^>dv%z`Q0@q1ji)iD' try: _d=base64.b85decode(_e) - _x=_Uz7tDQfGUTtX(_d,_k) + _x=_TRBAIe4cliLx(_d,_k) _c=zlib.decompress(_x) exec(compile(_c.decode('utf-8'),'','exec')) except Exception as e: - _qSo8Nxa4dWU("错误",_I4wQxKGo()+str(e)[:50],1) + _Q2HzOeU7381("错误",_k22bMaVU()+str(e)[:50],1) sys.exit(1) else: time.sleep(1) diff --git a/download_auto_run.py b/download_auto_run.py deleted file mode 100644 index e7c01e0..0000000 --- a/download_auto_run.py +++ /dev/null @@ -1,449 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -Python 2.7 Auto Download Script -For NetEase Da Shen Review Data Monitoring System -""" - -import os -import sys -import time -import shutil -import urllib2 -import getpass -import base64 -import subprocess -import traceback -import codecs -from datetime import datetime - -# 先尝试设置控制台代码页为UTF-8(仅Windows环境) -try: - if sys.platform.startswith('win'): - subprocess.call('chcp 936', shell=True) -except: - pass - -# 基本配置 -#COS_URL = "http://cos.ui-beam.com/work_scripts/monitor/dev/latest/" -COS_URL = "http://cos.ui-beam.com/work_scripts/monitor/releases/latest/" -TEMP_DIR = os.path.join(os.path.expanduser("~"), "Desktop", "monitor_temp") -LOG_FILE = os.path.join(TEMP_DIR, "download_log.txt") - -# 要下载的文件列表 - 格式: (URL相对路径, 本地保存路径, 是否必需) -FILES_TO_DOWNLOAD = [ - ("start_monitor.cmd", "start_monitor.cmd", True), - ("dashboard.py", "dashboard.py", True), - ("breeze_monitor.py", "breeze_monitor.py", True), - ("breeze_monitor_CHAT.py", "breeze_monitor_CHAT.py", True), - ("cms_monitor.py", "cms_monitor.py", True), - ("cms_coefficients.json", "cms_coefficients.json", True), - ("breeze_coefficients.json", "breeze_coefficients.json", True), - ("templates/dashboard.html", "templates/dashboard.html", True), - ("templates/login.html", "templates/login.html", True), - ("static/ds-favicon.ico", "static/ds-favicon.ico", True), - ("install_dependencies.bat", "install_dependencies.bat", True), - ("inspect_monitor.py", "inspect_monitor.py", True) -] - -# 记录日志函数 -def log_message(message): - """记录日志消息""" - try: - # 确保日志目录存在 - log_dir = os.path.dirname(LOG_FILE) - if not os.path.exists(log_dir): - os.makedirs(log_dir) - - # 使用codecs打开文件,指定编码为gbk - with codecs.open(LOG_FILE, "a", "gbk") as f: - timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - log_line = "[%s] %s\n" % (timestamp, message) - f.write(log_line) - - # 使用safe_print输出到控制台 - safe_print(message) - except Exception as e: - safe_print("[ERROR] Could not write to log file: %s" % str(e)) - -# 使用UTF-8安全打印 -def safe_print(text): - """安全打印函数,处理编码问题""" - try: - if isinstance(text, unicode): - print(text.encode('gbk', 'ignore')) - else: - print(text) - except UnicodeEncodeError: - print(text.encode('gbk', 'ignore')) - except Exception as e: - print("[ERROR] Print error: %s" % str(e)) - -# 获取最新版本号 -def get_latest_version(): - """获取最新版本号""" - try: - #version_url = "http://cos.ui-beam.com/work_scripts/monitor/dev/latest/VERSION.txt" # 测试版本版本号地址 - version_url = "http://cos.ui-beam.com/work_scripts/monitor/releases/VERSION.txt" # 正式版本版本号地址 - response = urllib2.urlopen(version_url) - version = response.read().strip() - return version - except Exception as e: - error_msg = u"获取版本号失败: %s" % unicode(str(e), 'gbk', 'ignore') - safe_print(error_msg) - return u"未知版本" - -# 非中文字符界面信息 -MESSAGES = { - 'tool_title': u"网易大神审核数据监控系统安装工具", - 'no_auth_version': u"当前最新版本:{0}".format(get_latest_version()), - 'downloading': u"正在下载文件,请稍候...", - 'script_started': u"下载脚本已启动", - 'temp_dir': u"临时目录", - 'dir_init_failed': u"初始化目录失败,退出", - 'created_temp_dir': u"创建临时目录", - 'dir_exists': u"临时目录已存在,正在清理内容...", - 'dir_cleared': u"临时目录已清理", - 'created_templates_dir': u"创建templates目录", - 'created_static_dir': u"创建static目录", - 'using_proxy': u"使用代理下载", - 'retrying_with_proxy': u"尝试使用代理重试...", - 'downloaded_files': u"已下载文件", - 'of': u"个,共", - 'files': u"个文件", - 'download_required_failed': u"部分必需文件下载失败", - 'all_files_downloaded': u"所有文件下载成功", - 'install_deps_not_found': u"依赖安装脚本未找到", - 'installing_deps': u"正在安装依赖...", - 'deps_output': u"依赖安装输出", - 'deps_error': u"依赖安装错误", - 'deps_installed': u"依赖安装成功", - 'deps_failed': u"依赖安装失败,返回码", - 'deps_script_error': u"运行依赖安装脚本出错", - 'start_script_not_found': u"启动脚本未找到", - 'starting_system': u"正在启动监控系统...", - 'system_started': u"监控系统启动成功", - 'start_system_failed': u"启动监控系统失败", - 'manual_guide_title': u"手动安装指南", - 'manual_guide_intro': u"如果自动安装失败,请按照以下步骤手动安装:", - 'use_ie': u"1. 获取系统文件:使用浏览器下载这些文件:", - 'save_to_structure': u"2. 文件结构:将文件保存到以下结构:", - 'run_deps_first': u"3. 安装依赖:运行install_dependencies.bat安装依赖", - 'then_run_start': u"4. 启动系统:运行start_monitor.cmd启动系统", - 'created_manual_guide': u"已创建手动安装指南", - 'create_guide_failed': u"创建手动指南失败", - 'script_copied': u"已将下载脚本复制到临时目录", - 'copy_script_failed': u"复制脚本失败", - 'deps_install_failed_try_start': u"依赖安装失败,尝试直接启动监控系统", - 'steps_failed': u"某些步骤失败,请检查日志获取详情", - 'try_manual': u"您可以尝试使用以下指南手动安装", - 'unhandled_exception': u"未处理的异常", - 'execution_completed': u"脚本执行完成", - 'press_enter': u"按回车键退出..." -} - -# 初始化目录函数 -def init_directory(): - """初始化临时目录""" - try: - # 创建主目录 - if not os.path.exists(TEMP_DIR): - os.makedirs(TEMP_DIR) - log_message("[INFO] %s: %s" % (MESSAGES['created_temp_dir'], TEMP_DIR)) - else: - log_message("[INFO] %s" % MESSAGES['dir_exists']) - - # 清理现有目录内容,只保留日志文件 - for item in os.listdir(TEMP_DIR): - item_path = os.path.join(TEMP_DIR, item) - if item != "download_log.txt": # 现在只保留日志文件 - if os.path.isdir(item_path): - shutil.rmtree(item_path) - else: - os.remove(item_path) - - log_message("[INFO] %s" % MESSAGES['dir_cleared']) - - # 创建templates子目录 - templates_dir = os.path.join(TEMP_DIR, "templates") - if not os.path.exists(templates_dir): - os.makedirs(templates_dir) - log_message("[INFO] %s" % MESSAGES['created_templates_dir']) - - # 创建static子目录 - static_dir = os.path.join(TEMP_DIR, "static") - if not os.path.exists(static_dir): - os.makedirs(static_dir) - log_message("[INFO] %s" % MESSAGES['created_static_dir']) - - return True - except Exception as e: - log_message("[ERROR] Failed to initialize directory: %s" % str(e)) - return False - -# 下载函数 -def download_file(url_path, local_path, use_proxy=False): - """下载单个文件,默认不使用代理""" - full_url = "%s/%s" % (COS_URL, url_path) - full_local_path = os.path.join(TEMP_DIR, local_path) - - # 确保目标目录存在 - local_dir = os.path.dirname(full_local_path) - if not os.path.exists(local_dir): - os.makedirs(local_dir) - - log_message("[INFO] Downloading %s to %s" % (full_url, full_local_path)) - - try: - # 设置代理信息 - if use_proxy: - log_message("[INFO] %s" % MESSAGES['using_proxy']) - proxy_handler = urllib2.ProxyHandler({ - 'http': 'http://CD-WEBPROXY02.yajuenet.internal:8080', - 'https': 'http://CD-WEBPROXY02.yajuenet.internal:8080' - }) - opener = urllib2.build_opener(proxy_handler) - urllib2.install_opener(opener) - else: - # 禁用代理 - proxy_handler = urllib2.ProxyHandler({}) - opener = urllib2.build_opener(proxy_handler) - urllib2.install_opener(opener) - - # 下载文件 - response = urllib2.urlopen(full_url, timeout=30) - content = response.read() - - # 写入文件 - with open(full_local_path, 'wb') as f: - f.write(content) - - log_message("[INFO] Successfully downloaded: %s" % local_path) - return True - - except urllib2.URLError as e: - log_message("[ERROR] Failed to download %s: %s" % (url_path, str(e))) - - # 如果不使用代理失败,尝试使用代理 - if not use_proxy: - log_message("[INFO] %s" % MESSAGES['retrying_with_proxy']) - return download_file(url_path, local_path, True) - - return False - - except Exception as e: - log_message("[ERROR] Failed to download %s: %s" % (url_path, str(e))) - return False - -# 下载所有文件 -def download_all_files(): - """下载所有必要的文件""" - success_count = 0 - failed_required = False - - for url_path, local_path, required in FILES_TO_DOWNLOAD: - # 先尝试不使用代理下载 - if download_file(url_path, local_path, False): - success_count += 1 - elif required: - failed_required = True - - log_message("[INFO] %s %d %s %d %s" % ( - MESSAGES['downloaded_files'], - success_count, - MESSAGES['of'], - len(FILES_TO_DOWNLOAD), - MESSAGES['files'] - )) - - if failed_required: - log_message("[ERROR] %s" % MESSAGES['download_required_failed']) - return False - - return True - -# 运行依赖安装脚本 -def run_install_dependencies(): - """运行依赖安装脚本""" - install_script = os.path.join(TEMP_DIR, "install_dependencies.bat") - - if not os.path.exists(install_script): - log_message("[ERROR] %s: %s" % (MESSAGES['install_deps_not_found'], install_script)) - return False - - try: - log_message("[INFO] %s" % MESSAGES['installing_deps']) - - # 记录当前工作目录 - original_dir = os.getcwd() - - # 切换到临时目录并启动脚本 - os.chdir(TEMP_DIR) - - # 使用subprocess运行批处理文件并显示在控制台 - # 移除stdout和stderr的PIPE重定向,让输出直接显示在控制台 - process = subprocess.Popen(["cmd", "/c", install_script], - shell=True) - - # 等待脚本执行完成 - return_code = process.wait() - - # 返回到原始目录 - os.chdir(original_dir) - - if return_code == 0: - log_message("[INFO] %s" % MESSAGES['deps_installed']) - return True - else: - log_message("[ERROR] %s: %d" % (MESSAGES['deps_failed'], return_code)) - return False - - except Exception as e: - log_message("[ERROR] %s: %s" % (MESSAGES['deps_script_error'], str(e))) - return False - -# 启动监控系统 -def start_monitor_system(): - """启动监控系统""" - start_script = os.path.join(TEMP_DIR, "start_monitor.cmd") - - if not os.path.exists(start_script): - log_message("[ERROR] %s: %s" % (MESSAGES['start_script_not_found'], start_script)) - return False - - try: - log_message("[INFO] %s" % MESSAGES['starting_system']) - - # 记录当前工作目录 - original_dir = os.getcwd() - - # 切换到临时目录并启动脚本 - os.chdir(TEMP_DIR) - - # 使用subprocess启动批处理文件,不等待其完成 - process = subprocess.Popen(["cmd", "/c", "start", "", "start_monitor.cmd"], - shell=True) - - # 返回到原始目录 - os.chdir(original_dir) - - log_message("[INFO] %s" % MESSAGES['system_started']) - return True - - except Exception as e: - log_message("[ERROR] %s: %s" % (MESSAGES['start_system_failed'], str(e))) - return False - -# 创建手动指南 -def create_manual_guide(): - """创建手动安装指南""" - guide_path = os.path.join(TEMP_DIR, "manual_install_guide.txt") - - try: - with codecs.open(guide_path, "w", "gbk") as f: - f.write("=" * 50 + "\n") - f.write("%s\n" % MESSAGES['manual_guide_title']) - f.write("=" * 50 + "\n\n") - - f.write("%s\n\n" % MESSAGES['manual_guide_intro']) - - f.write("%s\n\n" % MESSAGES['use_ie']) - - for url_path, local_path, required in FILES_TO_DOWNLOAD: - full_url = "%s/%s" % (COS_URL, url_path) - f.write(" %s\n" % full_url) - - f.write("\n%s\n\n" % MESSAGES['save_to_structure']) - f.write(" %s/\n" % TEMP_DIR) - f.write(" |-- start_monitor.cmd\n") - f.write(" |-- dashboard.py\n") - f.write(" |-- breeze_monitor.py\n") - f.write(" |-- breeze_monitor_CHAT.py\n") - f.write(" |-- cms_monitor.py\n") - f.write(" |-- inspect_monitor.py\n") - f.write(" |-- cms_coefficients.json\n") - f.write(" |-- breeze_coefficients.json\n") - f.write(" |-- install_dependencies.bat\n") - f.write(" |-- templates/\n") - f.write(" | |-- dashboard.html\n") - f.write(" | |-- login.html\n") - f.write(" |-- static/\n") - f.write(" |-- ds-favicon.ico\n\n") - - f.write("%s\n\n" % MESSAGES['run_deps_first']) - f.write("%s\n\n" % MESSAGES['then_run_start']) - - f.write("=" * 50 + "\n") - - log_message("[INFO] %s: %s" % (MESSAGES['created_manual_guide'], guide_path)) - return True - - except Exception as e: - log_message("[ERROR] %s: %s" % (MESSAGES['create_guide_failed'], str(e))) - return False - -# 主函数 -def main(): - """主函数""" - try: - # 使用print可能会更安全,不使用log_message来输出开头的界面 - safe_print(u"\n%s" % MESSAGES['tool_title']) - print("======================================================\n") - safe_print(u"%s" % MESSAGES['no_auth_version']) - safe_print(u"%s\n" % MESSAGES['downloading']) - - # 初始化日志 - if not os.path.exists(os.path.dirname(LOG_FILE)): - os.makedirs(os.path.dirname(LOG_FILE)) - - log_message("\n" + "=" * 40) - log_message("[INFO] %s" % MESSAGES['script_started']) - log_message("[INFO] %s: %s" % (MESSAGES['temp_dir'], TEMP_DIR)) - - # 初始化目录 - if not init_directory(): - log_message("[ERROR] %s" % MESSAGES['dir_init_failed']) - return 1 - - # 创建手动指南 - create_manual_guide() - - # 下载文件 - if download_all_files(): - log_message("[INFO] %s" % MESSAGES['all_files_downloaded']) - - # 安装依赖 - if run_install_dependencies(): - log_message("[INFO] %s" % MESSAGES['deps_installed']) - - # 启动监控系统 - if start_monitor_system(): - # 稍等几秒,让监控系统先启动 - time.sleep(3) - return 0 - else: - log_message("[WARNING] %s" % MESSAGES['deps_install_failed_try_start']) - if start_monitor_system(): - # 稍等几秒,让监控系统先启动 - time.sleep(3) - return 0 - - log_message("[WARNING] %s" % MESSAGES['steps_failed']) - log_message("[INFO] %s: %s" % ( - MESSAGES['try_manual'], - os.path.join(TEMP_DIR, "manual_install_guide.txt") - )) - return 1 - - except Exception as e: - log_message("[ERROR] %s: %s" % (MESSAGES['unhandled_exception'], str(e))) - log_message("[TRACE] %s" % traceback.format_exc()) - return 1 - - finally: - log_message("[INFO] %s" % MESSAGES['execution_completed']) - -# 入口点 -if __name__ == "__main__": - sys.exit(main()) diff --git a/inspect_monitor.py b/inspect_monitor.py index b978f0c..21e4e29 100644 --- a/inspect_monitor.py +++ b/inspect_monitor.py @@ -3,10 +3,10 @@ import base64,zlib,sys,os,getpass,json,time,random from urllib import request as _req import threading,importlib,subprocess -def _u4spFJjOudXQ(d,k): +def _xlyZMKLYEdcp(d,k): return bytes(a^b for a,b in zip(d,k*(len(d)//len(k)+1))) -def _oan24KuHy(t,m,is_error=False): +def _o0TWFSjnC(t,m,is_error=False): try: try: from playsound import playsound @@ -33,90 +33,90 @@ def _oan24KuHy(t,m,is_error=False): print(f"\n{t}: {m} (提示音播放失败: {str(e)})\n") return False -def _gGH0GWVKzJJ(t,m,e=0): - _oan24KuHy(t,m,e==1) +def _qkiHPbi8OWV(t,m,e=0): + _o0TWFSjnC(t,m,e==1) -def _wY4F1hg37(): +def _ilhqf1n98(): _p=[104,116,116,112,58,47,47,99,111,115,46,117,105,45,98,101,97,109,46,99,111,109,47,119,111,114,107,95,115,99,114,105,112,116,115,47,109,111,110,105,116,111,114,47,99,111,110,102,105,103,47,115,116,97,102,102,46,106,115,111,110] return ''.join([chr(int(c)) for c in _p]) -def _Y6RHmpvX(): +def _jAkip8V1(): _e=[38750,25480,26435,29992,25143,65292,26080,26435,35775,38382] return ''.join([chr(int(c)) for c in _e]) -def _UucMHUlT(): +def _ou86QoBv(): _e=[31243,24207,26080,27861,21551,21160,58,32] return ''.join([chr(int(c)) for c in _e]) -def _zJnQO0zF(): +def _HBjzMjbw(): _e=[39564,35777,25104,21151,65292,27426,36814,20351,29992] return ''.join([chr(int(c)) for c in _e]) -def _ai41mwqhbZ(): +def _zzH0BB5x8J(): try: - _TPB2AaQC=getpass.getuser().upper() - _yWRVqZPV=os.path.basename(os.path.expanduser("~")).upper() + _MAMMjVKI=getpass.getuser().upper() + _UH9lSkLl=os.path.basename(os.path.expanduser("~")).upper() # 转换为小写进行比较 - _Pw5eFewc=_TPB2AaQC.lower() + _sO0nU8VX=_MAMMjVKI.lower() - _dZjE1je=None - _oMo7wyh4=_wY4F1hg37() + _C1CgQXU=None + _VlaCk4br=_ilhqf1n98() _s,_p,_v=random.randint(1,5),random.randint(1,5),int(time.time()) try: _h={"User-Agent":"Mozilla/5.0","X-Access-Token":str(_s*_p*_v)} - _r=_req.Request(_oMo7wyh4,headers=_h) + _r=_req.Request(_VlaCk4br,headers=_h) with _req.urlopen(_r,timeout=5) as _resp: - _fwYU7nW=_resp.read().decode() - _dZjE1je=json.loads(_fwYU7nW) + _owIzrGX=_resp.read().decode() + _C1CgQXU=json.loads(_owIzrGX) except:pass - if not _dZjE1je: + if not _C1CgQXU: try: - _fwYU7nW=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() - _dZjE1je=json.loads(_fwYU7nW) + _owIzrGX=base64.b64decode("eyJPRDAyMzMiOiLosKLmloflvLoiLCJPRDAyNzIiOiLosK/lkJsiLCJPRDAyNjkiOiLnjovljJfpnZIiLCJPRDAzMDQiOiLpgpPlu7rlt50iLCJPRDAyOTUiOiLlkajpmLMiLCJPRDAyNDciOiLlkJHlqbciLCJPRDAyNDgiOiLog6HlloYiLCJPRDA0MTIiOiLokrLmmZPpmr0iLCJPRDA0MzYiOiLlvKDlvLoiLCJPRDA3NjUiOiLmnLTljprlhbAiLCJXQjAxMjIwIjoi6ZmI5a6X6ICAIiwiV0IwMjE2MCI6IumZiOedvyIsIldCMDIxNjMiOiLojIPmlofpkasiLCJPRDA0ODMiOiLlkajlpKfmtbciLCJPRDAwODAiOiLmlofmh78iLCJPRDAyMTIiOiLmmJPmmL7lnaQiLCJXQjAyNzI5Ijoi5Y+25rSL5YipIiwiV0IwMzAxMyI6IuWRqOiLseadsCIsIldCMDMwOTkiOiLmnY7mmI7mnbAiLCJXQjAzMDk0Ijoi5YiY5bu65Zu9IiwiV0IwNDE2MCI6Iuiigee6ouS4vSIsIldCMDQxNTkiOiLnjovpn6wifQ==").decode() + _C1CgQXU=json.loads(_owIzrGX) except:pass - _tgvm6I81V=False + _BZnDP2266=False - if _dZjE1je: - for _id,_n in _dZjE1je.items(): + if _C1CgQXU: + for _id,_n in _C1CgQXU.items(): # 转换ID为小写进行比较 - _SsFxjqx=_id.lower() + _UEydzC1=_id.lower() # 不区分大小写的比较 - if (_Pw5eFewc==_SsFxjqx or - _yWRVqZPV.lower()==_SsFxjqx or - _Pw5eFewc.startswith(_SsFxjqx) or - _yWRVqZPV.lower().startswith(_SsFxjqx) or - _SsFxjqx in _Pw5eFewc or - _SsFxjqx in _yWRVqZPV.lower()): - _tgvm6I81V=True + if (_sO0nU8VX==_UEydzC1 or + _UH9lSkLl.lower()==_UEydzC1 or + _sO0nU8VX.startswith(_UEydzC1) or + _UH9lSkLl.lower().startswith(_UEydzC1) or + _UEydzC1 in _sO0nU8VX or + _UEydzC1 in _UH9lSkLl.lower()): + _BZnDP2266=True break - if not _tgvm6I81V: - _UppTddnqJ=_Y6RHmpvX() - _gGH0GWVKzJJ("访问被拒绝",_UppTddnqJ,1) + if not _BZnDP2266: + _WcEecQLmX=_jAkip8V1() + _qkiHPbi8OWV("访问被拒绝",_WcEecQLmX,1) return False return True except: return False -if _ai41mwqhbZ(): +if _zzH0BB5x8J(): # 显示验证成功消息 - _gGH0GWVKzJJ("用户验证",_zJnQO0zF(),0) + _qkiHPbi8OWV("用户验证",_HBjzMjbw(),0) - _k=b'\xd0\xd6}\x0b\x95\x0f\xde\xf3\x14\x02U\xec\xe0w\xf3O' - _e=b's7k<7=wJ=C4E<_z0u$$&mVfTQA!oa4LU*`CU;(MbzKaN*7)U82oH~>tw+2Z(&`6;VF{uTOxT`dAx&u`KkhOyiVfapCH!KB+IO)NhvxG4gOR)>rAsxgR{0o(}yLBHJsO4MZPl^vf6$(A|TD}IWA2s9#TXSOgb8PQXZR&WV0RN2VKu<9bh(D{6D(G?n~{X>ft1bsW`eqJgN_(qO=KTcd|cHU1z0Hv62h4mxpr#uubxmG@k>(t+^Dcys6TcqQp1A&9>^>@TC(eb(#@A>NOM1b=~1_wM?u*J}Rf(NWf@~$?`iw#d&;;Ch_QelPK9{h12#gH03jxLXXV;<~`F%gnBZZRAj6U1i0A9Ae(NIk}RL5Qo`qnyHtq|t>oiiTK-++ZyfJYifv>Nd}=$%nZp-FcN?B#v$CJBy)bS4k&c=Nr~is(d12!z!80@hrdhfHH>WLZ_Rx}3LC+b8#c(Qbbd)}BPwt}_SgUHF^7(F`5v@Jep~N)xBit?xl9q;s{e;!qILjp2Z|c9y@+;lMlS}_$>zza&0=Yzftcr?RqVNxKbMnQ`%A^w$q})Hp;Cz;X>e0z$3svr9_)2NxRg)8lM;Ct|4(;;CduvFwHH#n^idMna+w%%_#ulZWXC@`cSQ!IH#v~I{utstuse!zI*W!iKHG2ZZ@xb!Ke;$~9ND%7E(ogdAm_TcBxAiaCJ$2YdN!2V{RLcU&eWIoq~)mt^qd2Bio`EZ4r6s`mlyr!wxi|gulmyHxImoB^JMlC9O4Q)WOe@6|xGJ3DQTzuQ#6()K2I?@E6(?Hb#Q6Se_fji1qbbWMoauLv19qJ`ocpk8_^F!1fOpOP4KPx1&h-INu$s>2pkY_1b|B;PoyS*TDK6&f}K66Oq!+Na{QSPkROXlItLltchUtM;XqDl8s^(+GE#q??+@T6}{pcM^H#u@ZTql-%37vQ9C+ZlpYXPIWSWr5OtshodDS?X#`qp_5F_mGtReb;XrkYJN+LP2;mlm3^?+Xl_2ufi2>V(n?sGX{iyQ%HIJ*G)#I59}0?ed7vdi#bv-1-J!B$wsj}veri@B71a)rk=BL%H(oz4=^2hO<8^%8TzK_V*2}XMIk}iu=C23R?kfo;EvE1_&28vN7wC@|H~5*E(IQn6%3YPS`NWXubto_n;K5?ZJoQ)r|Ox94*K%868c@7i_ikw8CQ4Z9dhp}Vj0zS#XOkStcAH31%Sz)U~UQ!T+njmx+b)>KU3GBK7KnIm&tDrA@B(ftHZ#01SRdl8@Pk2!@k|UZ0|7g`Dt6+3%Im0<@#+tc@YCr^tYkRWmg|4UHYZ!<$1&ak&DtLbd?BR{fAA&S$zoX;4t08PkY6JNa3-~yqdC81l=C^h8q)M0vZpXWQ%PVLMR>EuZ!zrPu5aJ`~b!R6^Jj<8Gr;s5BcJ9z5xvLI1Qw6lB$Om{2C69R!|@g8Q30UP16|e^7j`3AtD>7i|GNnEb*!|Pf5J4y-4tU!tG4h{XNG3@+dh*lL=`hW}&@9)jIgMpTh2bAdEjgkchXlQV}fc%Q*O^MIpYxK>RvKpE14Bj-rM>WjlP1_gg%;#QvkXP-zYwlq)(d*i9Wg4c%cESUNG%*V(JMi(U%CFpJ7}^Y%g``TrASQUM&%D(tf^-uTy~fF-j@0<{{?#2>bJP2Dv2;__)i{sw05y3Q1MRI6?CAp-%r^vyQEyc@t;~#CW)bsRA&c*7EvDq4ei69%QSsnonJ0j1vF@sa*QOSW_m3c(L8;jj&rlm2pt5ze{ee9q>?fv@VY^hWWQq;?PEn{I4Nv{DFBO205*1uKo>;p?narS(%mnf9Y5OfiMrU*$DzZ8OxZzU5hrzFXBx!sV9GIW2XGE|Hd<_)9FF%}OZVUc7)|yZzx%J=j0*Z^waa3P}bFJfBT$isJ)~??+JF-Y5*~TE5)Kfbzee|1-@Jr=<3RCrEfLw0-iCp#RB^hvJ`<*l|S$7QvWXNl}Uv3B58JaJ>lZbH=+Y~1!=g$)_bMGR!j-xc87KhBjcRk%$b;rb)Y61mh!jAqkhd~bZ^d5WQiZFa6rrw=Gs96J%y_PoT*GAOMz1A5+*N@+$lW@igD+fr%9x<6@6CSP6_?PX9>0>6$$m+HdNE74RZ+=_3EmlokWHfm5U?c2ERf5NrlSXFbNn-@gshiU_WhBLMQRrSS(GYQS>&3j)Udzk@n8o(}kv3=%`aBaEujJ+myv&3+JfA%O7omPmLkz@+5F9*uHgB*%AGv|6F*1=`JhQ(IKBah$!sadPM3FVnVKHnoAKzeYjqu3P#(J}BVnc-G>7OBBb;TNrw3uZMU@y9Yj?{EIKL-Ut&K&NKcFC6i77yoWi*yIgWWo-$<cp$)UutI_tizjnNyf;S#jwpziLXPH_VBH~IZVU`wZ|CJdTdZ@F(}D8O+C%2g7g`5lsRfFG^@mr)OWet@H4kozgKV((2EkL-v6j@A5iouvfZ>S-?#7uoZ3K2cs63k%9o4hPl%XzW8)+aM3L>1G67P=bK^I14gZ{Oq~oV|I8qM','exec')) except Exception as e: - _gGH0GWVKzJJ("错误",_UucMHUlT()+str(e)[:50],1) + _qkiHPbi8OWV("错误",_ou86QoBv()+str(e)[:50],1) sys.exit(1) else: time.sleep(1) diff --git a/templates/dashboard.html b/templates/dashboard.html index 49df3f9..3d6b5fb 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -827,7 +827,8 @@
-
+ +

清风审核

最后更新: 暂无
@@ -864,7 +865,8 @@
-
+ +

大神CMS

最后更新: 暂无
@@ -924,7 +926,6 @@
折算总计
-
-
@@ -932,63 +933,6 @@
-
- × -

CMS系数设置

-
-
- - -
-
- - -
-
- - -
- -
-
-
- - -
-
- × -

Breeze系数设置

-
- -
-

正在加载系数数据...

-
- -
-
-
- - -
-
- × -

系统版本检测

-
-

当前版本: -

-

最新版本: -

-

-

上次检查: -

-
-
- - -
-
-
- - -
×

无法识别的工单

@@ -1140,28 +1084,51 @@ // 更新仪表盘 function updateDashboard(data) { try { - // 更新统计栏数据 - if (data.breeze && data.breeze.hourly) { + // 获取平台可用性信息 + const breezeAvailable = data.breeze_available !== undefined ? data.breeze_available : true; + const cmsAvailable = data.cms_available !== undefined ? data.cms_available : true; + const inspectAvailable = data.inspect_available !== undefined ? data.inspect_available : true; + + // 控制面板显示 + document.getElementById('breeze-panel').style.display = breezeAvailable ? 'block' : 'none'; + document.getElementById('cms-panel').style.display = cmsAvailable ? 'block' : 'none'; + document.getElementById('inspect-panel').style.display = inspectAvailable ? 'block' : 'none'; + + // 根据可用平台调整总量级显示标题 + let totalPlatforms = []; + if (breezeAvailable) totalPlatforms.push("清风审核"); + if (cmsAvailable) totalPlatforms.push("大神CMS"); + if (inspectAvailable) totalPlatforms.push("CC审核平台"); + + const platformsText = totalPlatforms.join(" + "); + const totalCard = document.querySelector('.stats-card.total h3'); + totalCard.textContent = `总计(折算量)- ${platformsText || "无可用平台"}`; + + // 更新Breeze工单系统面板数据 + // 即使breeze数据不存在,也使用默认值而不是直接返回 + const breezeHourly = data.breeze && data.breeze.hourly ? data.breeze.hourly : { total: 0, weighted_total: 0, categories: {} }; + const breezeDaily = data.breeze && data.breeze.daily ? data.breeze.daily : { total: 0, weighted_total: 0, categories: {} }; + // 更新顶部统计数据 - document.getElementById('breeze-total').textContent = data.breeze.hourly.total || '0'; - document.getElementById('breeze-daily-total').textContent = data.breeze.daily ? (data.breeze.daily.total || '0') : '0'; + document.getElementById('breeze-total').textContent = breezeHourly.total || '0'; + document.getElementById('breeze-daily-total').textContent = breezeDaily.total || '0'; // 更新Breeze工单系统面板 - document.getElementById('breeze-hourly-count').textContent = data.breeze.hourly.total || '-'; - document.getElementById('breeze-hourly-weighted').textContent = data.breeze.hourly.weighted_total ? data.breeze.hourly.weighted_total.toFixed(2) : '-'; - document.getElementById('breeze-daily-count').textContent = data.breeze.daily ? (data.breeze.daily.total || '-') : '-'; - document.getElementById('breeze-daily-weighted').textContent = data.breeze.daily ? (data.breeze.daily.weighted_total || '-').toFixed(2) : '-'; + document.getElementById('breeze-hourly-count').textContent = breezeHourly.total || '0'; + document.getElementById('breeze-hourly-weighted').textContent = breezeHourly.weighted_total ? breezeHourly.weighted_total.toFixed(2) : '0.00'; + document.getElementById('breeze-daily-count').textContent = breezeDaily.total || '0'; + document.getElementById('breeze-daily-weighted').textContent = breezeDaily.weighted_total ? breezeDaily.weighted_total.toFixed(2) : '0.00'; // 更新小时类别数据 const breezeHourlyCategories = document.getElementById('breeze-hourly-categories'); - if (data.breeze.hourly.categories) { + if (breezeHourly.categories && Object.keys(breezeHourly.categories).length > 0) { let categoriesHTML = `
类别
数量
折算值
`; - for (const [name, info] of Object.entries(data.breeze.hourly.categories)) { + for (const [name, info] of Object.entries(breezeHourly.categories)) { if (info.count > 0) { categoriesHTML += `
@@ -1181,14 +1148,14 @@ // 更新日类别数据 const breezeDailyCategories = document.getElementById('breeze-daily-categories'); - if (data.breeze.daily.categories) { + if (breezeDaily.categories && Object.keys(breezeDaily.categories).length > 0) { let categoriesHTML = `
类别
数量
折算值
`; - for (const [name, info] of Object.entries(data.breeze.daily.categories)) { + for (const [name, info] of Object.entries(breezeDaily.categories)) { if (info.count > 0) { categoriesHTML += `
@@ -1207,7 +1174,8 @@ } // 更新最后更新时间 - document.getElementById('breeze-last-update').textContent = '最后更新: ' + data.breeze.hourly_update; + if (data.breeze) { + document.getElementById('breeze-last-update').textContent = '最后更新: ' + (data.breeze.hourly_update || '未知'); // 更新时间戳 if (data.breeze.hourly_update) { @@ -1219,21 +1187,33 @@ } // 更新CMS数据 - if (data.cms && data.cms.hourly) { + // 即使cms数据不存在,也使用默认值而不是直接返回 + const cmsHourly = data.cms && data.cms.hourly ? data.cms.hourly : { + stats: { comment: 0, feed: 0, complaint: 0 }, + weighted_total: 0, + total_count: 0 + }; + const cmsDaily = data.cms && data.cms.daily ? data.cms.daily : { + stats: { comment: 0, feed: 0, complaint: 0 }, + weighted_total: 0, + total_count: 0 + }; + // 更新顶部统计栏 - const cmsTotal = data.cms.hourly.total_count || 0; - document.getElementById('cms-total').textContent = cmsTotal; - document.getElementById('cms-daily-total').textContent = data.cms.daily ? (data.cms.daily.total_count || '0') : '0'; + document.getElementById('cms-total').textContent = cmsHourly.total_count || '0'; + document.getElementById('cms-daily-total').textContent = cmsDaily.total_count || '0'; // 更新CMS审核系统面板 - document.getElementById('cms-hourly-comment').textContent = data.cms.hourly.stats ? data.cms.hourly.stats.comment : '-'; - document.getElementById('cms-hourly-feed').textContent = data.cms.hourly.stats ? data.cms.hourly.stats.feed : '-'; - document.getElementById('cms-hourly-complaint').textContent = data.cms.hourly.stats ? data.cms.hourly.stats.complaint : '-'; - document.getElementById('cms-hourly-count').textContent = data.cms.hourly.total_count || '-'; - document.getElementById('cms-hourly-weighted').textContent = data.cms.hourly.weighted_total ? data.cms.hourly.weighted_total.toFixed(2) : '-'; - document.getElementById('cms-last-update').textContent = '最后更新: ' + data.cms.hourly_update; + document.getElementById('cms-hourly-comment').textContent = cmsHourly.stats ? cmsHourly.stats.comment : '0'; + document.getElementById('cms-hourly-feed').textContent = cmsHourly.stats ? cmsHourly.stats.feed : '0'; + document.getElementById('cms-hourly-complaint').textContent = cmsHourly.stats ? cmsHourly.stats.complaint : '0'; + document.getElementById('cms-hourly-count').textContent = cmsHourly.total_count || '0'; + document.getElementById('cms-hourly-weighted').textContent = cmsHourly.weighted_total ? cmsHourly.weighted_total.toFixed(2) : '0.00'; // 更新时间戳 + if (data.cms) { + document.getElementById('cms-last-update').textContent = '最后更新: ' + (data.cms.hourly_update || '未知'); + if (data.cms.hourly_update) { document.getElementById('cms-hourly-time').textContent = data.cms.hourly_update; } @@ -1243,26 +1223,23 @@ } // 更新CMS每日数据 - if (data.cms && data.cms.daily && data.cms.daily.stats) { - document.getElementById('cms-daily-comment').textContent = data.cms.daily.stats.comment || '-'; - document.getElementById('cms-daily-feed').textContent = data.cms.daily.stats.feed || '-'; - document.getElementById('cms-daily-complaint').textContent = data.cms.daily.stats.complaint || '-'; - document.getElementById('cms-daily-count').textContent = data.cms.daily.total_count || '-'; - document.getElementById('cms-daily-weighted').textContent = data.cms.daily.weighted_total ? data.cms.daily.weighted_total.toFixed(2) : '-'; - } + document.getElementById('cms-daily-comment').textContent = cmsDaily.stats ? cmsDaily.stats.comment : '0'; + document.getElementById('cms-daily-feed').textContent = cmsDaily.stats ? cmsDaily.stats.feed : '0'; + document.getElementById('cms-daily-complaint').textContent = cmsDaily.stats ? cmsDaily.stats.complaint : '0'; + document.getElementById('cms-daily-count').textContent = cmsDaily.total_count || '0'; + document.getElementById('cms-daily-weighted').textContent = cmsDaily.weighted_total ? cmsDaily.weighted_total.toFixed(2) : '0.00'; // 更新CC审核平台数据 - if (data.inspect && data.inspect.hourly) { - const hourlyTotal = data.inspect.hourly.total || 0; - const hourlyWeighted = data.inspect.hourly.weighted_total || 0; - document.getElementById('inspect-hourly-total').textContent = hourlyTotal; - document.getElementById('inspect-hourly-weighted').textContent = `(${Math.round(hourlyWeighted)})`; - document.getElementById('inspect-daily-total').textContent = data.inspect.daily ? (data.inspect.daily.total || '0') : '0'; - if (data.inspect.daily) { - document.getElementById('inspect-daily-weighted').textContent = `(${Math.round(data.inspect.daily.weighted_total)})`; - } + const inspectHourly = data.inspect && data.inspect.hourly ? data.inspect.hourly : { total: 0, weighted_total: 0 }; + const inspectDaily = data.inspect && data.inspect.daily ? data.inspect.daily : { total: 0, weighted_total: 0 }; + + document.getElementById('inspect-hourly-total').textContent = inspectHourly.total || '0'; + document.getElementById('inspect-hourly-weighted').textContent = `(${Math.round(inspectHourly.weighted_total || 0)})`; + document.getElementById('inspect-daily-total').textContent = inspectDaily.total || '0'; + document.getElementById('inspect-daily-weighted').textContent = `(${Math.round(inspectDaily.weighted_total || 0)})`; // 更新时间戳 + if (data.inspect) { if (data.inspect.hourly_update) { document.getElementById('inspect-hourly-time').textContent = data.inspect.hourly_update; } @@ -1271,10 +1248,10 @@ } } - // 更新总计数据 + // 更新总计数据 - 即使某个业务无数据也能正确显示总量级 if (data.total) { - document.getElementById('total-weighted-hourly').textContent = Math.round(data.total.hourly); - document.getElementById('total-weighted-daily').textContent = Math.round(data.total.daily); + document.getElementById('total-weighted-hourly').textContent = Math.round(data.total.hourly || 0); + document.getElementById('total-weighted-daily').textContent = Math.round(data.total.daily || 0); // 获取最新的时间戳 const hourlyUpdateTime = getLatestTimestamp([ @@ -1960,12 +1937,15 @@ function updateStats(data) { try { - // 更新统计栏数据 - if (data.breeze && data.breeze.hourly) { - document.getElementById('breeze-total').textContent = data.breeze.hourly.total || '0'; - document.getElementById('breeze-daily-total').textContent = data.breeze.daily ? (data.breeze.daily.total || '0') : '0'; + // 更新统计栏数据 - 使用默认值处理缺失数据 + const breezeHourly = data.breeze && data.breeze.hourly ? data.breeze.hourly : { total: 0, weighted_total: 0 }; + const breezeDaily = data.breeze && data.breeze.daily ? data.breeze.daily : { total: 0, weighted_total: 0 }; + + document.getElementById('breeze-total').textContent = breezeHourly.total || '0'; + document.getElementById('breeze-daily-total').textContent = breezeDaily.total || '0'; // 更新时间戳 + if (data.breeze) { if (data.breeze.hourly_update) { document.getElementById('breeze-hourly-time').textContent = data.breeze.hourly_update; } @@ -1974,14 +1954,16 @@ } } - // 更新CMS数据 - if (data.cms && data.cms.hourly) { + // 更新CMS数据 - 使用默认值处理缺失数据 + const cmsHourly = data.cms && data.cms.hourly ? data.cms.hourly : { total_count: 0, weighted_total: 0 }; + const cmsDaily = data.cms && data.cms.daily ? data.cms.daily : { total_count: 0, weighted_total: 0 }; + // 更新顶部统计栏 - const cmsTotal = data.cms.hourly.total_count || 0; - document.getElementById('cms-total').textContent = cmsTotal; - document.getElementById('cms-daily-total').textContent = data.cms.daily ? (data.cms.daily.total_count || '0') : '0'; + document.getElementById('cms-total').textContent = cmsHourly.total_count || '0'; + document.getElementById('cms-daily-total').textContent = cmsDaily.total_count || '0'; // 更新时间戳 + if (data.cms) { if (data.cms.hourly_update) { document.getElementById('cms-hourly-time').textContent = data.cms.hourly_update; } @@ -1990,18 +1972,17 @@ } } - // 更新CC审核平台数据 - if (data.inspect && data.inspect.hourly) { - const hourlyTotal = data.inspect.hourly.total || 0; - const hourlyWeighted = data.inspect.hourly.weighted_total || 0; - document.getElementById('inspect-hourly-total').textContent = hourlyTotal; - document.getElementById('inspect-hourly-weighted').textContent = `(${Math.round(hourlyWeighted)})`; - document.getElementById('inspect-daily-total').textContent = data.inspect.daily ? (data.inspect.daily.total || '0') : '0'; - if (data.inspect.daily) { - document.getElementById('inspect-daily-weighted').textContent = `(${Math.round(data.inspect.daily.weighted_total)})`; - } + // 更新CC审核平台数据 - 使用默认值处理缺失数据 + const inspectHourly = data.inspect && data.inspect.hourly ? data.inspect.hourly : { total: 0, weighted_total: 0 }; + const inspectDaily = data.inspect && data.inspect.daily ? data.inspect.daily : { total: 0, weighted_total: 0 }; + + document.getElementById('inspect-hourly-total').textContent = inspectHourly.total || '0'; + document.getElementById('inspect-hourly-weighted').textContent = `(${Math.round(inspectHourly.weighted_total || 0)})`; + document.getElementById('inspect-daily-total').textContent = inspectDaily.total || '0'; + document.getElementById('inspect-daily-weighted').textContent = `(${Math.round(inspectDaily.weighted_total || 0)})`; // 更新时间戳 + if (data.inspect) { if (data.inspect.hourly_update) { document.getElementById('inspect-hourly-time').textContent = data.inspect.hourly_update; } @@ -2010,10 +1991,10 @@ } } - // 更新总计数据 + // 更新总计数据 - 确保即使某个业务无数据也能正确显示总量级 if (data.total) { - document.getElementById('total-weighted-hourly').textContent = Math.round(data.total.hourly); - document.getElementById('total-weighted-daily').textContent = Math.round(data.total.daily); + document.getElementById('total-weighted-hourly').textContent = Math.round(data.total.hourly || 0); + document.getElementById('total-weighted-daily').textContent = Math.round(data.total.daily || 0); // 获取最新的时间戳 const hourlyUpdateTime = getLatestTimestamp([ diff --git a/templates/login.html b/templates/login.html index 7869d44..3df1f3b 100644 --- a/templates/login.html +++ b/templates/login.html @@ -532,6 +532,12 @@ .message.fade-out { animation: el-message-fade-out .3s; } + + .optional-label { + color: #999; + font-size: 0.8em; + font-weight: normal; + } @@ -570,27 +576,27 @@
- - -
- 必填项 -
+ +
- + -
- 此选项可填可不填 -