From a207b7895d6a7d2afa610bc32dcd518c985ca756 Mon Sep 17 00:00:00 2001 From: jinyaqiu Date: Tue, 19 Aug 2025 18:28:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A1=AE=E8=AE=A4=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 119683 -> 122469 bytes wake/Utils/APIConfig.swift | 19 ++ wake/View/Components/Upload/Avatar.swift | 281 ++++++------------ wake/View/Components/Upload/Compression.swift | 0 .../Upload/ImageUploaderGetID.swift | 232 +++++++++++++++ 5 files changed, 343 insertions(+), 189 deletions(-) create mode 100644 wake/Utils/APIConfig.swift create mode 100644 wake/View/Components/Upload/Compression.swift create mode 100644 wake/View/Components/Upload/ImageUploaderGetID.swift diff --git a/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate b/wake.xcodeproj/project.xcworkspace/xcuserdata/elliwood.xcuserdatad/UserInterfaceState.xcuserstate index 3ac497c8595ec5c413042f9fef20165b2b820b3f..8deb0a0f963332ff0d3ba10a31b2ca2de070da25 100644 GIT binary patch literal 122469 zcmeEvcVHAn`~S}D?(OZ}?e$)R5ISk}P9OmyEs)Sl2+0K^X{JzAU`J_U2bHdn03uQp z1rY(vq>wa?A6k6~a&1%_>XF#xyIPaz!|=vck%sh3j(6 zrlDDb!n4EqsS%>r7%d}?%&N?-49jSTMa*RMjDc}6ZpOp3V-lD|CW%RAQkeEk2c{#_ ziRsLAVTLlpm`r9kGlI!tvYC<0C}uP>ohf39nG&XyDPyi=%9#p=FxN8IG4q)P%tB@n za}#qjvy@rMtY+3T8<|baZsuX;5#~{55Aztam)XZW&OE{FXP#tUVGc5fm{*zCnAe#% znB&a5%m>Ve%%{xH%rDHZ%x}!^%o*k^(jxxsVTqP#e@1wMSi1H`E>V zM*UD48i+E`5Hu7GMDq!?*xng|Eif;5m3Mo`+>j@U{3lJRdK>*W;CV6<&?k;I;TJ zd^cW)x8VEmR=f>AfS<(A;}`H@{04p#AH&D-`}hO=G5!R9ioe9);2-f%_&0nG|G{#s zj@7e9*2J1wJL_isY&_eR?Z|dzd$Or)I-9``VTZGY>=o>EwumieOW0DjjJ=XAXDis5 z>|AypE3*sPMeJ?tQg#`8JG+8i&ECzfW7o6Q>=yPub}PG$-Olc0A7me5A7h_kpJ!iY zUuBQ7Z?VVO_t{U_PuZ{7pV*(-UpUOM9LMpT$Vr@qYtMDyI&z)3&RiF+E7y(d&h_AW za=p0TTpuo#>&p$}vbbz+3^$gW$W7v=aCzKRZW>p_6?0c|<=hNzCU-S=4R+8d=5XE&*i7^dHhs@mKOQ_?i4HehxpEpT{raujiNZEBKZC zD*i6Mn%~6V!*Aoa^E>$a`Q7}({3HCM{FD44{#E`p{xJUr{|^5ie}eyr|Cs-T|C0ZT z|60Rp1dUc>&`27K#;S2@TpFLouZhz%(Zp+-Yg%jCXc9F^nl75Inr@n2n*N&0H6t`x znrzJ&&16l!rbtt!nWec#Ghee0v1?75{!aLFbfvJA-IL0 zaGB6lXd!eIx(eNdUP5o7pO7XD6f%S%!cd_=m?}&Y3WY0#=|YiEER+bPLYYu0TrFH9 z%oi323x!*S+k~aUGGV!}TBs2=2pfe>!ac$c;eO$H;RWGE;U(c^;T7Saa7cJncuhDg zydk_Rd@Ot-d@6h+d@KAW{4Sgk&T5gC*GgKWwz;;2wxza}wzam6wyn0EHbI-HP11JI zcGvdPrfJi)!?c;&;o1?}QQC3ZDcU^kbZwD#zIK6jp>~mWvG#iH673Dz8?`rSZ`Ll= zuGFsAR%>gt+qB!YJGA#}AJRUe-LHL8`-1jG?T6Zv+K;p!Yd_I`s{Ks+x%La~m)fti z-)eu>{vk3V67`}%ltiOw6`f*G42dnomSTdKBDNPhi#6gs;%0HHxJ`UO+$ruB9~K`I z_lo<)C&g#Q1LBL~OX4B%Rq?3!y7;#Ej`*HJcYi$9CMh-bvJ zI;6uojZV<%bq1YTXVE!yPMufh(}i?#x@Nj~T`OH{U4kxA*Iw5_*G1P=*HhO^*H_n1 zH$XQ~H&{1BH(WPDH%d2JH(obEH(8gf3+oDWSLmkeN_AzrN?nz1w(ct3T-`j~a@`8u zO5G~mYTX*$THRf`yLIby>vbD-TXj2i59;>m9@jmg+pl{@_q^^^-D|qfbzkVd)P1G< zT6aqKjqY3Bce>NM?{z=x&gnIJL9f-D^%lKV@7D+PL48QyRNq3Ms87-l)Mw}~*ALPU z)(_DS)eqBW>WAw`=tt=%>cjd1{Z##x`f`1RzEVF+e~o^=et~|W{$~9x`g`=7_4n$x z=cl5{f$Mx^)Khl4t|JuMCGzP(- zHHZeCL2ob^B!kglGT01WgU{eMG&95-ni~=fiH0OYH$!(r4?|Bwsv+Ib-!RlL%rMn3 z%}{8#!Z6)XWGFV27)lLghARzKhHDJ-4GRnl4L2KZG2CicWms)kV_0igZ`f$qX4q~x zV0g~(yx|4Ii-wmBFB@Jl95fsoHSmVAWfF?r6Q?V zS|BZy7D!l^q4bqL$P14QMEz&Y+m9$z~BW;j2N}HtZ(hli62%88eN;jU$Z{j1!HMj0MK2#%abf9bR+-ZE!_>ggzakp`g@k!%T#;1)h8DBQO zVtmv1mho-lJI42n9~!?ferf#5__gtr@h9WYCX>l*vY4zUo5^l+n4Bh;$!+qO0;XoB zcvEvz3sXB&f~kwCtEro*yQ#OSpDE2W*fhj6)Kp-aYMN#$G+kkuZYnYrn@UWjrZQ8d z>1xw8run7?riG@PO}ChCHLWtOHmxzOHLW*oG;K3&HytoNXL{cBg6T!mOQx4iub2*+ z4w+sx9W@;@9XEYs`q=b|>6Gak)3>JIOuw7Xn9iD!nKw&jqq(`cg}J4Mp&{eqb-vxIhM(mX_i9E6_#>Kg{9Im*D}u{TZm8=b@`dF~%lDQaEI(TQurgL;#a4|~XSG^wR=d@24Olx{yI8wgyIH$idsur~ zds%y1`&d)0eXaeiL##usqpYK?W2}>{xz;JxB5Sd=#9C^tu+FqDvM#n>Z(U-&!Fr?h zChHy6JFRQ1Ypolto2-vppRn$?K52c*`n2^K>$BDa*5|CxTVJ*wu^zJ?x4vur*!qd} zQ|ouu)7I~;KUjaUp0RN@-WIS0Z6RBnt%>b2TT@#zTfD8gt%a?PEydQ}*1^`p*3;I@ z*55Y3HqbW0mSxMfjkJxmO|*q=1-7}ic{bTbY}eYZv(2|Hur0JLvMsjVXj^7mZChho zYrDs`*>{-pgW`^)xM><8_K>__Zx+E3WuxBp`Q)&86Pcl#OpS^GKr9}dQW9N3|8NDha? z>2NthjyOkaM;k|5M>|KdqobpzqnBfpW3*$8W2|GGW4vR6W1?e{BgZk>k?)x9xYAMX zxW+NZG1oEAah+q4;}*xQj?IpH9a|jtIkq~sIkr1?IPP~m;MnQd?bzpd+;PD1oa1@N zVaE~2QOE0!w;k^~K6ZTKIOX`pDLA!G(W!Ilod&1mG&)UAv(w^qIQ`CmGv3+U*}|FV zOmZeWyE}V0dpdhL`#SqOhdPHjr#h!O3!PUur#p+B#m*9Esk6*^rL)R;jdQ+pfpekr zR_ATbrOsu}<<8a48s`S*M&~x?cIN@-bI#|TFF0RxzT|w_`HJ(P^N{mZ=TYY|=W*wU z&Xdlsou{1NIKOrN;QYn;s|&fXi*@;2epkR1bcI}Tt|qR_TuoigT=A|}t|V6%S65dz zS6^2@*AUlG*DzP6E88{3HQANxn(eyEb+zjn*BsYe*F2Z(BCcy)*SQwCZg$=2TJBom zTIX8ts&;L4ZF6mR?QlKldf4@ZYrpF)*W0dlT*q9;UGKWybDeO#@A|;?q3aXZ*RE5p zpIkq?esMEy7;TXGxSCb!M)a);b;?k?`G?r!ex?jG)*?q2TR?mq5RcVBmZ_Yn6; z_bB&hcaD3qJJ&tkUF0rym$=K_Gu(6C^W4kbE8HvHtK6&IYuszyce(F&uXC?=Z**^U zKjhx!-tFG+e$xGv`)T)c?w8z0+(+HV-S4`8bpPc3+5L+|}( z0dEs;OK&T0vNy%s-rLjL%iG)A$D8II=*{#F_m1#pdB=Mvcq_eC-WlGR-dWz+-mAP< zd#~}%@y_*L>%HE)#JkkH%zL|cjd!j0F7IaVz1}U}`@B264|*T-?)4t^zV3a)`=<9T z@7vyYyvMx9z3+P8^M2_4-20vPwD)`OS?@XTA3ny%`LsT>&*HQCY(AgQ@9W^}=g(p~?(5;}>Fed|>&x&B_l@vn`NsPu_zHYeeban}zGB~%zS+L3d`o@He7F1V z@ZITK?pxto>09Mn?OWqp=ex(Z*>}J10pCvFUf(|76GyF6Cv;4B3_^^z!b0rd;xzT5Qq;n5A+K34)h762Kom21=0fP zf&PI3fq{X+fviAwU}RuoU{W9_Ff}kOP#CBPR0gU7GXhry<^~o976tAOtP89UR0nDT z8v+{xn*#R)HV5tvYzsUT*c;dvcsy_*@Lb@vz~R7=z|p{4f#ZRX0v`v?2F?Zk2r@ww z#6dR51^J*RCa4IT}?6MQdtBKUFeli(M@)4`vEzXs2QaEJ|YA#KPQvWEPjKqwdr zg<6DKhT4V_Ln)zdp`M{Wp~0acp`oE+q0CTLXjEuyXhNtmR27;Lni-lEnjN|-bam*O z(45fR(7ccwBB5(T*M;VX7K9duZV%lNx-+yqv?8=Jv?{bZv_5oSXlrO&XnSZ!=+V%g z(Bq+}LWe^~LPtZdhu#RiJ+fIzRZ-CqMq-SNi7_)a#yNUuR>Jh~?22*le2sG zFqg@^tdRv-D~qyD*2{*?Ofx2)X%1g4fdoFwl5CVs@MQ)P`ng?>xgE4KFt=hz;nZ>n z!{v|4EvgDv^e-ySIp$uJFgi{s=~r4( zSzcOH6fVz6>7SOKn%uu{yY^|R9oltBO@fK)pVpyW-+p~NCZ%*vO>du`mSYY9gVelA z2s-`=8?&dbFQuhLQ*z5QqJ7CRyX&4Q{j7Z?YIDr~cAYxMCB-Etb?Oq=r9&6^2tRb_ zkQCRYbH}*oT6AUlF>UWR!=y5OWs7W;ZL(c<$WGZMyJgS4um!hjkeYtKgMym+z48lJAz+!-{O6Yhs2@WlbxcIW%`h;nZAM1GT93$JFvL ztb_%qMphOU6;>98D@GUQS58yOGD<4SAn00JUPo42Qz4r$sxUk=Ej*=a>QtCzvu#MY zxU_usfb!h3X?3O1KGe1_5t>WSFO2Ywj(!Z2OC@nEGmaV0OkgH5lb9T4vh0)nazGBs zAvsQNB44(dnZo2T`AnE8V5TzDm_oU!oGhovz2wW~Qu!+RIy&lvF?pr=;RI-AP+?_4 zZI=`J!f2-N;li zGnkpoEM~UcOpceE%Pr)V8=0#?TH=|x%sjajNQqHyEhozDDC#1p8UYiLV{QQjb<L$iiWp~ny^zvaxTYDyDrZVhu+ZO`tOljMZxgKDNm?MLHeC|d0vW;@e% z6SJAQm)XMH$82S`$?fG1a!0w7+*$6j32<;f^8mAxd60PsFwj-*CU=*6$UP|nF1xS@ zDI%SaQBeV!`AbVFB$b z(vL-8#Kek-s?MMq zV^T#P-QqJ#D`4*`Eoqs%()u^K6WCa#^?IPOOSG_W&20X) zb=59!wcFE_iTr80znS`}+UIZDr=*YaL(@Ks7AqgLmSzb(24#<(lvi9f=-y`!zV?n<41 zlV7wF%*w3LJ$U7)QfOie`_fDk*{f_AM&Sn+}x%w57FJW`I7#n~Zc)+fD4%|rBbE9f*HimV zD=f+{537=#V-7~!jBdc{gn-0E8gB{&{i@2LM&;n#s*=2ES?cVL2p7QEOY*4pIZRy@ zWI^_7WJNZ4j67Bzr(kI;1yo#od|a|3s>qEzux&YKdB*)}RHV&dT7@JVj$nsuQP7KsC%|t<^N5w6qe` zU05xLn#H+=C3WOEV7gNkFsvZTv+kM9$dlk}x;#<70;acimufIa3F))Kc~w-$q?gPn zEH5pgPL$e;I-+(cWdlk;i6{vr%Q7oP(?wK3Vc_9%GpDXa57ZO94_MtgB>~$uMJAn&%-q8AYSfFWii^@jhtY=)L(ZqY z9+N$difLSO^qG}84bR2^UZMF!lsInDTP+A^GMW>hA)nOD4wyqcM|eC0FT5 z4H`}RGNE(9lyH7-`;?T9?UP{3y{L(bCLnNSHlT@U63Ri7Q;fTo~4l#iy! zm2#Cl1HS)%+UHRbDsJpPkFG=&u+O7%dFFalDbM<=eICtXPN1v)YM-Ay%)*{MZ=au5 z^ncptTdi%b^S`&l+!A(rhuiCqyR2D!t2XTtliPRf+^t9N)U^JW4<0&f_=u6C$Bv(v zGbMlOg{*-ZeZ(9XNuARQGx`%lpw(LEhI1PfLtukmZ?k99ZFi(%LO>0t3(NwAWHp!) zTG1m_>#4cmiFyD zJ2h-z1P`>E2@iTwHoeBB&w{OzZm|_W(I-N&;oKWQ(bq-C(r+Byhf7O96H=1&TJF1m zWIzTm88|kJ8dx;m0}2V521Q8jnOX`YLukKRKyhn2E(`Gl70EKaH|y%tI*)0T3_LKsS&P^gwyOK=bf!XY3i z7zcZ8T>sLd{BSu?baJgPghyAd09F#)AOURV#5iY`aPARlZLD42Z61S^INu&dELG#_%mmO|Fo3bYn&f}F1% zXb)t2Jr8+ahta#}L-Zy37X5(EVFvTq2$@|j$mME+;~|$T5x0jNu2jh08V31WWAPL` z6<>i%@hr&MBKQV;E97b2g{vViYbSmPKZ+m6FXC75tN3mFA>?G8QiqD8Mr=hx8y5c@ zF__RCbR8H>XfE_sMg(0eUoBrF&ynZK^ET4B1X_p|p~XsELY9eqEme`!HUX%qY9E3| z5TF2wtLGmno)Hbr)u&Rt*uJxsXExY3Ra2|h90eQivh!-xi+?DlmQvN87Y$I1dH{@?onWdxgm#TpDrJYui^tKpN`6*eX<2xjQmC{f-w4*#t@3S0pvuGO z5%eg?JX z>4p^>Ok*{AiL$3w_eH3(3t(C^oAxQ|qktv4u&<&cR7PGyhvhrv<<;mYdR<;2ucQmw z0^ES|%yMdzgTYrDomE7=R$FJJ!P+)yK-mvG=&2Bxtxuzh=Q}86om{AXeisEdp!d)T z^gjAPUL~)V*T`$BeAk6NX+X2K)hN>hYIf(CyVu&y>ZTQu-;o&?sL_A|Knr$SZS4!U zF}$iUZ~DM+QCY2lKC-B?99+!OqVR?Kq{a>kr_h-8>{^{1o#M~YmrUFB=nHw>dZrn8 zW-zrr>TXp~PcWhe=nk(2`zoT-L zM$|ruIFIy1q}FYTvi=Qgn6~$!-_aR#7M(+XfPzLCV-|Cmmp96rO%xNrQ9oAz5mOz`Euo+wA`@zPb*9g8I;5+CU`J z!UefiMU|?rsl@+V_YH$B9;UlFI35+HG`t(m841D`nG7{ruX@dPu{ewys#L8OVP(lrgwfr3m$@9syiDlSL)IQftY2a zH5fo)85}23u9+&c!MU?bs~~h87j<%@+{3vFS;XU^eq&r@4l-%7c?FFKG;BM%7J50v-GPs`DRPCN(?W1Ka3Fdl-3%8$!W z$op$>CesX$ke`I%JtZeh1a@^h?F9N$-4UA^ex%(Vk~VSy{`6dh{)PEzL!}`aD9;BSPys57o~I2ioKj99 zpq`IJf;;pK^@7ydg~bqp$}KKyNZ@P?$w%viaS6T+B9UO*-iU9)H{)CIt@7*g8}gg-Tk_lTJDc!QybRxt@4$D0 zo+B0N+SAy`pqv%y{~%!`(&)3hC>tj9a#59GqPz|wyZ zZ2et~3Gc=a<43^i--F`uUc3)JJ%RUw(V8DgCuk6pp{oZb2$-#k??x3!#Gq@aWuXfo z(v|fN-C!RsQBJBOk;(JvEe)R1cE(40Fml9Ts2%;O&eEy1_~lRJU%?RlQ2rf0{Ura^ zAn=Hv!cXI8P)mFOX7XG4Bl&xX2cDD*a?FXfmPvy#s-eGx+Ks#xDC#V}h*CD;m+;Hr zA|1qs@T>C2@~86W@|W@{`J39PAbu3odl%>pM8_ti&HwfV;)Rbw_9RjBDE4K62nDBg)>V_^Alk=nGW~05@}pd z{YDjbVqKshQ5{HP{qZW6HU1g@0tO1G_-KeW8uqQmzfyDhLXW^{z`x@&`0O}(%ma%6 zkxltW`3KOuf7!EySu{(ati1FJrG1uR(RgT`nzJ;DT*G3PWmeQL0)fp0Acynm^K{5A znSF%i8565P@vN2=X#&rb+=}pc_`f_{1R>iQVUW0AHQ!BsJvQ{-vbb=Ey!&7rBsw$%Pcz#%&2@7jgPv;vbF{(+bSsQJN zrWD0IQzV~tfSP5U@>#j)FzbQ2@v=UM{N|}=3o&)%a|E@#prTXHG7@AW$V`xhAnO)(l4^*sQ`kH?*3e|(CotS9t#q5n>>ay3fOV}F- z@)G1D$X~~NULU7GAj;Z2#*tAdnI>nxE zx_{Fzs$tJY=cXCyXqBb*`8cH6aFvOQu#%vjpMb z%2ZmCQ4I2|Ze8JgwTnC0`_)iU1Ffc*de!U$R83M(F!rGt1IMWGm!m#!V2rT4*xhyd z4AfQIhWczT)o1(I$Jr;?{p^$MQv|gmD1o3vf|3YICMe~9OrL$go&>j%{g9xJ>)DS8 z>U0suk^KxDNA`2}3xYZm)UDQ9XTN5@JKv*YAy0t)fq+E=ny@SQbhY!{w9mBzm8Fj^ z{IBfUnA+!y_PEdb>1`srmpbUa8Cuk5s zg9#c!&`^Sg5tK=}HRYOd@mzE8B;vVN@YRNE%e8}&L@tSmCulf9`9u_mD1ympB%*{Vl$<@6A?SB4zF8{&#Q7BwKTv=0X^=Ggk98UiuSI63;%xZ45 z+T6$-^Po#>PB~~*ya2jBwI5WI>$Wr(prf1YR(_f$nv7t_Hxzs#^#v2Ho84< zqDvvKzHHj;Sbha6zwtTd0gdKIy|Ri#<*^Jkj>ty(F|)7Xy_qzeG$J(WtNv?PH8N&I&U(nspoKu z!HVbRa`QO2vcX-;UB}Jm7H|u>MFfQjDj;YoLDL8-BW!m2mIEgf1~(jT1hEG2+gXJ7(sE>^jYuw4NhwW$7Y z`^dI(ss3<|x#Pv!s+~ou3Dl#L==5|}>nY!(t!Gu0Q3ZXz7v6y8FO~p66`jPWoZZc> z2kVMkM^M>%u9`sVPP_WDe2*&2SLT@Ez_F1rn`qiaB1H&DHVqCJgC|s!A5#+T#TITC zmG=9%t=u+lJGXAY$vwzDL{J4ml>~ubG=rd-1kEC7HbLMIT}{w6Te#iKY3>p3 zQEm_S7`K<(2R}VQ&>R`?F&7d92)d4-I|*7&&-@&UJZNups2&uif@De6CHf=DE$rtSz#LmE6iRkkRm19(pUglnDXz{+vL6&+o z_ZoMYpm_wz)!b3;C_x1NDMov4e!j|2T_`Zbpak$<7A~)xt(Ms$nS_5t8#%@ukKPP{ zq*m?(1g*ID37Rh#9pz3!1Qg<++(+EU+$Y?p^lD7n5OwiDo(KZ<1l{o;f>cw; z#k%9N$G22Lbd&p%`-=M-{EvpcpaDpNZYOB5YSw*&QmVOcx$g+No}gR7UQ-XUxF5J* z!0q9FN~gN$X+zGhf8k(r zbmTtX-#|k75FgjDpeYZ>#`NM*v`P!U73gTbB|)p!^Q{S5O?T`LwHQ%nq9Gn~YM=Hk zhtz~{c>|d634D7vGUgNcBtDr>A!rRjYYDoGpu0El9r%vSX&&5X*b{bBrTIK7s0gBXwf85@J^rfh2qoSPYI0g(S#0$-7p|^)L3Qm!ba0;wQ`dD=QEcD~ zsThYli|6$>I_tf7IIgbdd-Ht=T2D}QHQ$#9r?`fojdVilbXpy!y3W)hzE235R=@I!%E zX%)QSY97*$>-`)Z+i-p~B+~IC_$)q~AIXE)wuzv72--~0y##I9$dBR2^5gjNJh*Z9 z5ww+{?F8LV(1Ud3R>*3rDlVa^LKR?;faeLDkh@`FT46aj)S&U;k*nb&b!s4DI<~fa zg8E6h6{-e9`FyHWe*%>QM*;Ne06z^1c(8W2$wgUX)3emVVp<4Vbq7r~YLYW6KMy=w zNHU_Sr}O}2C|p-AFU(U7tZ+BAQaQwk_zE73iU$bVDHlyh&5o;;-qG*_-O*Lj*_8Au z9!!mg2-+nVjZ02RN=Q=v)cY8nRhftM#0C;Gp9f91se!@;!@^%GYZ!5_wrkKkfJ9EdWs;(=YWvOi0rufpq~Uk*Ne!EgC8Nx57COq zIy^wx?BpNhVHut!=m0^_DT~pib}^DW)qU(7`52w%J^a3ybpb08*5!pdCHoZrJY9>Y z`DgfN)wOt$pqB`GIl2}v@GtT&@h|hQ5Cs1Y5_E{5*9bcL&#%Ri^Vj0d^Vi}SEjUil ztCzAC?^9v^fd7ynu!WA$n%4fAaShes>Ji3bDXErQ-52zvb2|=IT z%m2#%#{bTr;m`8t_&+p^1`+fHL8l1%mY^R90zCjRqu&TRLon08LD6Vb2j%S?bDu^# zD7Bf~iHZwW0olC?m6Zkc{2q;7WqT~gyzy_ajZg0wpPClmwR3!WSNfq#N_=|f_^w^! z`=-&7zFm|LK+_>UwQGEOm-y7=_%8k8(>u`euI*dW`dvH5cj=^51EMapTGxK@U6SI{ zJH>ZNkM9B{o#ML!>-MeA@4H#;`@1>jo{jFiYP(k?ro!=Dcwp7k^LaW{o+mD4nj7$p zPf5A}Td&IYgG&j|)vaDuZprj;VLxzbGD{&v8+zU@<@}C^)D})&N&u=s$D!A;T$`y} zKh7~{GMLlHHIRf@ ztx3_qiPM(^eFbM@nojg=>}#qY|J;3@7a%#818A5 z`#1D@K9~oZ0Woz3X@=4|gEd140@vm=?NKJJ^ZljwXk-lcv6=}n+$T})KSq0$8&fB& znHDpOD`=gcqjid7>RhR*jA>^Et@CTN&g_^vb3iGczZTchI=@HjEQqOdz2-(*XNl$p zg3c0jj?UK2w2l%UytMUO7Q=nHhF)E0C>?8nJ4VqS-5pb>Mza}w6wLB5{IQ#rvwU#~`UiUuJ7#5AT7+r9lNQ{AOR!D$~8!qho0Qcj?vxyqWSHSl(U z8qG7BXEg^1HV`ZkY^>2duX#c9BEcqtEd<*raOk~+oXo))S=l-1X&KqWM&x9r4^How zoiS`^&Y*NSmWU-tACs91K1q}yE{4OXjI4~lgVRR<8_GjP^s68dn%4+6%Y_r_Z%gXa z*TDkPyg{%v;vZ<D0Az+qh0i?Q7ovqIp;I0UhXjniHD$33d?d zB-m90(tc9&5tT?c!JbBq^Dl?dh^c7U*{+?SvmH8ij$HrId`ZXn6~W%<7{951A4qdr z^V0>E3`X*c=2torKf%E$yv|ToX9*5OSP4wyrc2-iEi@wVf<^%7#Sz?u;LBjT1f8I# zjWi{=+5g6L304@RU?Vs_I!0&x=@LAG527f7m*5ub1(=&w4K#+(L`73efat7tvuNf{ zJBR@mv@20hBH9&}Lc(IXaz@&_=)7C*Jv$c^bm~;lsdLx-E=duuLue+%HwfbhErkT| zFoae@YoU$MR%l0X8-n3`BEiW7x8Eov3Q0n;kRr4vxFf+?1Q!#$h~V`NJK9Ce#h&*OcUXBygJ_#z|{;?%XwRN>V*dDfCqP1X&P&uTS|MrzD4SJ9g~! zxB3LNyL3%XNzQN3r@m^R;KKFa>(i7jDY@;Fx_0gOxB3LN^9tH`$qzT^(*U(kDSx+5 zFw&&<;k@?k|5l%%_LSWAQwowA^l7l#rw;#@K6NRW(kcJ%_9;0psbipg@Xw_$3Rl8@EtC_S8cAOisvvz)n8BQ; zUj%Oa6e!;yc~KKpk#htY4rhe9!aRc02u`mSh;S{z{Rtl2s3b-uDX0jpo+!h)aE7C> zNVoxx8id8d^}-T@2M|1v;EWpKM&TyNaKx7rJm|ll;V9hBn1nlG6BNI#yrp&G?Uz?9 zusrn9E$5P_(+o#p1<e-E^MU3U?7agy5lI z+zadJ?mbLS7*BIsBT?$}(ihFYHhtn-C50_|gGAUY+^3{K3R`FjBpy+p(|NU{jXxml zrFh;cJSaRQ>=Jeh4-1b7j|zJPNJ7XacqGB22p&!F7=i)e;|Ly4@C1Sx|BL7U0G^LfJRc=ECyM7c0neaUmA{}!)xXihLg78(11e)D1hA@e z37%3dd?=hGIFH~k#WG~?{TWajpRFu>CVZ(1@)wFA=Ql$9z7u|=@INhlFZ@6-=%A?t zPpc7r5`L!eFC_Si{{i@)14#c73+WHju3dNTc;EfE=*nJ^=WF47E_hgr8IzWcr5&+< z(9&aj2OV4`=H;=!-q5KI{#uPzR6wiMDxfX;>siy9v|a$M)~vN?ty-Jbu61agT9?+X z^$=V_a4ErM1Yb!o==%zSD+#V5cm}~Uw`hGTXtf~~wA!W=w6mh1y{ZxWD|~PXKfE{Z;%abPc4{GR}*|qwYHBomEbu9U-yq~!P@@X%K?Mh z0osAu41(tp4Ew!YqaCCjOfg6ZhD4qJ_9X*t7T_v77FR#y9zzS-r57*D8PcJ5le-}0 z88A2+Xvf6TcC}US`Pi49CeNDRq2-w(I982r!P@a!xKdoLogl0wcs?kvYGFMBd|mP++^T5wI=R&Z4j_(UxkziNKan*e;F2_V!xX-u*9Z{{yhSg~ApVVp$Zn5JLU) zy;i$QyOs*mYV8_=?;!ZjYVBRxy9r)S@Y;V4v>UXWDQGupH)-!77>vc01h1;m-mBe0 zLA#pZHU9&kg*VA)cg6zopy}6JZ)`hg&C>1H9)Eqx!*Kr(KnquqwYy_!SMD*su+-6a z?mhlQ*Ns2zpI8sHk81bAJPT{JV5)-Md{-k7_>}fp6|~PNpk3F9Dlci@prCzO`-=9U z_K@~f?Q7b@+9TSd+SduLCb)*+4Fqo_coV^}5St0Um*6b~-?v5kW(2gyBA`7%LAx~y z+U>QVee_?@{s%z&H3jV{g11FM``txB`-}E>3ff<_zY)BH;QOn!XS5KJeSqMH|1r>t zSkwS$MONfQI4s#o@PhmUibT--pY79&&2^ysBL%Mqdv}8qu9rbctRCv?7?Q0NO|X8i8V**i-?n zc$os)J&mZ+N^AqsWU)2Dd)JF?34XjmkXB4qgKGQ!FLwaM4r0d!5oEE8SWK^Pbr8FX z-Nf!<53#4%OYAN75mUv!+~r~#H$dz!4iE>58RF&QAaSrbM6*F0#$|}Z#Svnbn2nzh zM~S1wG2&QpoH$;bAWjq~i8QqJrk!2^8y&j|j4 zU^vS-1$Tw;w**5(2;4FF{0qSVh%*GABP>H$OjwSv8p3J`t0Sy|utvhd4doGpwG!4& zuNSdSxN1aap+qbd%fu_iaM?JH_SV3UQ^lN?a|j5!Z@$iFb?Z z#Px)A6E=~smlHNj*m;CqOV~#Udz7%>5Y9ljR)iZ!xT%D@j&OGq?lHo>PPiWkZz6n8 z!jC09A^aM`KT7zcg#U(UM51X*G(CwXn`lZ29Jp#W5zT(0d536zB!YzqZHdsI2vdkK zhX^Z(u!{(<5#ej16^OPO0qa~looE*lZ4J@xYbbS_RH=iPoHgpyGhr$u$xSVRTf6mQ z`Qm*llc#gc0~>u-Ni!Ggzovn{_AH~Mtg15R?v8lB%Kq6LbLOS7S8rrN7IAJ-B-fR; zsx}bY%r3Q==Po7hqxRxLgG&qb=Vp(}^@U5hELF=j`e8_J3FJCN-_}ugSxtOG<^Iy8 zB-to4uTBjdSHau2VyEI6mF+7z=F~>dxRR`0q29kzKgaTYLFIesQVz9i-{|=#SG&Z6 zD%00;%zYc(+5Uy)=ifPq?d=hj@sS*Jk47`jf{U182wcI7E-K+IH0NFP65mo;zWz_# z8WZ1DnZ5Zp7oT43ywKu*sIrCpxJ$eMsoWb;-p-nsRRq`ZGw6HWa$_$fil3@2K&srO zT_8+s)Uti0a))HL#%EfcuZ^;%g~Rl%?HB6(cPf8KZ0p=;u~08QCa1(o#7`o`)Q5o zpprcGCrV7$QswpICCgGhC8plxid~X+DsOnpQvXKxvmU}Ca;m&fF_w9X%KX<$>G;SD zc-NBpx-fcyVl>>_hMhf@cW0IN@0X%?BbuDPMO1kg1^smww2@fuJyh;zFJ-$_^&(u| zr7t#%Wtpn7{NqxTW7KAX%>tB6<*fP_t#$nshAg@i5mWmZ+qpq1FZNRGMR-|6Rc=vw zK>=KKxuE*iWvX2HOHx#g(j+5Q&cdZkCj7dGKQ(4_<5Y&?r7*nc&XS`t)L+WZ3O&rG z@92nKpL~^@bSd3a*IId#KrF*Tm7(cU@}O0Q=Yc4eb&1N_l4BlsX)2{(6}<4VxDNY? z=NG{3u)GT(t3qwib`h{fUbR?J@7;PAUA8k22rzR+cRF7j?u=&m5Jt>rz

H&2%>t8C5oMh=_-3<^%)e+sby6bfFbqjP0b&GV1b=T{b5Y|IjFJXOz^%FKg*dSp; zgpDI?6T)7$MR%hbM%CS_hEa95Ll~898VRGa@zF3U+wR{m>OUVw)m1|nRaZmUW|1(e zZqvoWsJd;s9q_s{-FCt@U$48Luq_%DJdFy;L%K&GKC0WL+pT+;uq_GOimKl)E(BnOObU%cU1Sf z?hW0Wy0>(1>)z2F(;X*l5@C}Gn?l(3gzZ4sj)d(**v^FQLfEcbbnh|B>y33EMv(Oh zMOHU}5xi57usv##HSk|#{Rfcs14Y)4gzX+h)-M-D)*pHdf}v;hh_F2g+pAj7>LC`} zo3MQ;#{Q8E9=)hHDA9R6+}s#K*ghbAdLyKwvG7ZY&pQXVa1TactGDT009(CX@6bC5 z+mEnmgiWu}yY(Il+x~>yXm_Vb`W6)6BbrrC}D>YHj}W!2@65?EW&1Q(f3q$M187?TYWmk z?a1hk2+4YCCM}!yFK+*N-0HIcxB6_tj*8$`Kl)<0)lbsrQrza~ClhuIVaHbMr|9zt zJC3lE8?`rH6xvZ)nx-$J2rSfJp`T9J@dVx`%TBD(7wbzX0w)nR=YIf!Re-7)v8a0G zw&f%8)@EdGYno~ZZmj`b0SKH8v{%K_mc8`+*H4D~$dBLld-}-U1M=%3a1LAwhIyU~ zDLgD>I1Z`S!|iXvPPsq|k9k~l-WKWM7Y@TaL-p`#6~GY9Skx1$@214)yJ(eL^{Xjt zZ__W;FVo+yze9hgez|^yex-gDVG9U5m9WzYTS(X|2n$P5MA%}&mJqgdi+)W6w(BCW z-9TYm7KJV3>P28X=U>?V2VlFC!uCPJUKxe$Zh$Rr0l#PkzQDXHP`;uGv-*Ad{ZyPD z*FQnn3c|uKmwi(I6oD52vors>?e;nSi?osFsm#uxG7E2&J_`N#)2uW7tNNo9=&$Jy z>yHq27GY--_Np5F>-sk+(61)!HU9%Ze;2^}UMzS~ir!h!ZQv8PeR1ZdR=bC}6`+3r zv>(ROjxApN`s4fh4PV)Egta_>4!qr_><+@-N!aBzhE9ggw5PD|to-l8*U*bG8G6S;^5)-~Ect9k zYPb2f{Kn2n-_26^8u|ilzgXJ0m(DyfxnMwlnYCQac73K5&^GPkZ*W<~Fu(w5$FTPr zG87!I0UR6J(7hMlEOwr+5uLtF!*~F)VYp$0AMp|GP1tpW zg^ZAD!a~Sm17SB3b`xRm*&@QC42!ot5jgnf*#dkMRbu#XcK46glz zeUh+GZ81C+f$bB9{q)YL;b{unr=zfamawlWcShO6|HAe^0Nd9nY!4ImnJ8>uSN30g z(%`@+Vds^~_Ps4qoQ|d+F*LtugtEE0tDuLha!G8LWfmrG8d%!dl~B~C}*AvfQ7V*ERue}+4C0ODMrof1o{`TEJx(zyYiCu%Aew0STOUb7eV zexHfv;e*n9;QtX1)`g;_+ zw*z*iJES}57h%s3_N@9H++U|T5MA!I(mIOYyCiUj{vaGvEv=WT35N*B{d4%eN7|y| z7j8QZAsnV+xE1irv9b8&Z;y8E0cjV-?@sAK=^?`LgwqgCsF8L{4+DNVE#buf0sKA= zn0z7@lM^b>^gfx_f8q9hc!q1`y(bm?J_WQ-$I?D}_Nie-Rl}HtB=NRA{8Sp!j!wY= z=>-+P&r|$z`io3lw8|mr9g5#qrPrjx(h=#X^t$wh^rrNd^fuun!Wju?BAl6U7Q$Hx zXCs`Qa1O#bw@Ak#_&p)L&jOaElYn2&6~Qm(C0uj(tz{6u;#&L*;Qs)C;l|l|=``Wo zQ2_s_Y`)UZY`z3H&yGtx+`U2p1$=h;VT=MuSnJKx{%dxN7y^zVdCfGbW=W7FE_`V$1)|Xnw4PYnM_&7_;Ni#mA6nRd(up6#*SuHkzsc-9Yt~xt%tpwm5r56 zNM4KNwMkxw1lrc=l$~dOuFrSViN#3eN$E_dh zxa@VTOn{D+i6jp%(Xp}zbgb;D?8P8?1j!qDe?rGGYPB!k1C%L95#>N-GRYg0yh))l zRhdTerX-Ipvw>KduEdkyLgi50hnC}wolb?yOl20yqe$M|KaXp?=vkgonI~(o;{JqR zIZ`>6bq1r9qm^Sw-h$*YB#$jpJ`p%a`4q`pq9-7E9J9F0_m2GA`&J%TPK3ZG`3rpc zCd($1A})6QXYba2Jz#PLPiHU%WvBX=4R-GO;pVgsrXBpKZ?6qJa1&*NTS$MD^-Sd) zudHW#WZkAvnWfBxFX2%?clzSIP`QHXdXaLm@>%6`$|cI@l}nY&l*^U)+^`+V+mpNl z$vcu9^Q6us??Uo;l6NI}La}mXiLO^G*C^LQ*Xx+B6MeewN%B;Zr?K(b{aDxkfUdVQ zUGE@yH=nL|GF`u++{GYycarz;{)Db0)Mj72-%;*olG~?zm*kLt??UAPdgg%F1t)-@?!0GUYkX2%XG^ z*b8ig_J27;!`}#QQP(SFbsb-zeo$WbiWv(`Ls)|zaRT2Vw^V^l%fBdpRsN>Dt-PbW ztGtH~;$UWt}fPH0)>Qua~>sW8#b_l(gaNInu;?yBysHk3qM zRYQe|+)5Qb6Cb@&g*n)mzctJD9bHe=5HeMTs_LsSRU1q4CrJKeQQ#a^xGKUkaAE`< z$Ikc{yD0yk46c83&*$T+W}HeD%Nj0%c?T%PKPm zU7K{i?eWDk79Je(^s`vB-5I>ct2f_mWmPLxTaVmSxZXwX6UI&z20x6Q6a2j1%o_4pf`;# z)KB39PGg~JoC>{%&aN!YVeUPSU$BwtPPH6&k4@)t?I zu2@y_U{|%BsQsxzvuNxq5Xua=#3&#Nx6N-nUAS**O&sZezp zFICB3DfOkQ>ps)2sctguURT{v{Yco8RKAtu+lo{_seWeK-A?iy7>SvYe{;b6KN*Yv zVt7BUx(hwt^B-3WW*>ZFS;LmEym2KZ+Vt~8yb9$!t`6W->OlXpp?Al3Z@#+a?w6Ma zYhGWwTlu?o)q>jlL|5&3qAO=hB&palak%aw?^3B%YW74|tyXK)TD4BCR~zsU!K5~; zEhK+~E_tG>4rbbY*QZ^qL*#vzO8(*F zVYlpuT{U~6t8PH@{UzE}vnRR_eUDk)OwFF=s-x7HhT$UhP@%eo8uxeJBl+Pn)2+I- z+WRzD?RlCje;?`h=#SRaUDS!ttU4ZZ@dT0|A^8U+KU$>jrtZ!(iz{BNU-fTmR^1Oe zO!C*^p^4LMO%}CzcY9J)%16ugVFzSrb|A_o`4t8SqoJzVa zb(-3{fT$YRyb#bwf93)~U92uyKUDpcdYpPZS5-|+vS0ZmdzR!^Nq&u8oL+yd*?&N@YynaA zT#}#hX_hS@s$QU8$RIh!(QmvzFQ~gSlKe8sza#mTBK21F zHm2Y2N&drsK)<`7$u~>UWJI>=M8!@Aro6VQh-}_I0Pe z(#sOOZ~D_H8{DFP$&IEeK5y(-AA%19SE&zrqaZ0Ib%P4YV=zgw*S(tFjb{>nRbR-a{BzE`4U zUgjHq`HGLF{0~U^I+OAZ;yIs`e_~P|A5fjaI#Jvd#*h0?SJZbj?0K&GuKFJF0mKIu zYGfMxD<{4j6LFb5&((+;_B>Z3X%w1r#Ph@p#EV6m3L5r2mzRkD54>2R!Sh^ADbI7G zPad}1xZB~?f{UGgJw0OTN+w4Qp66;xd7f)&JVSfoPOFhyt?k<%9ey0|Q22&Zja}n? zo~!XZ&*j;R6&m(Dm#^U8kMYlz$WT*FQ`4hdO%0}8UipZle23K2;4$t?nov!BO#@9s zO_(NJ6QOCOiPSXKG$CG1yoPu!@jBx5#2bh=5^o~jOuU77>r0wu-jD7zEyRJESoTu0 zrWFLt+n`qV**))qfQhf|d9Rso`ae&@HL$;&_nH5KCtKih!?2HW0pX;)nQLqQRf0;7eHb>J9a@TYx-d-YiO)tn@(_7Pr zLA--_r}rmDZl$`sFGrF!X-F$giYAr#O2h{hYTTMZ#8)OBZx=lB4UNCiBls#ArpZDj z;xbJp8@c&lmb*DDgRY_`u`TTX z?U}b`0^~o@f8;)ua%+~Reups=c5PmtI%DGyPggM+WvBR;?SE=e%B8!VWb@|Us&MN2 zg2V^9is_npT%9$V8Jd}zS(@3JIhwh|*C9TH_`1Z`BR-V)`fD`LK$;6=OJymV#l$yY z(rj2TzaXFZNVcP%winxkt|W!?>h{Ub&O|c)@t29nM7Hu&EH;Br!&d9o`^8Jrxn*+J z$mBdGfB|aTACHYs&&qPAl^lRATK{}#7wo^Ci-jL?TGyZd_P}14kk*>Z& z-qak#BuTSdvq!U6^Oojq%{!WXns+t(H3x`qPJA@+Er^dHK9=~F#K#feiul&Vw<*>f z@=lU8N4%3H&2iSpw)IVtI^3Tm_57dL!Ttw&&97Lmd4~9QzFzYz>ov~>RA&(19+M>Y z1AS(eFVx>@eqcFyMe{xJ9f|K$sJW`SMto=DyOrHE=_k#vtnd3-b4&9J@m+|=NZYkY z^PA>2>-!RjM=$Yj_kG$xPNkLm_h+Rolb{t*R`M_V@MRLT<+V!BprNhk88o^>g<3Tm zGTW{-BYCXaS|J>n?eAx>>AOp~-OZ6$4xwz4)@TSZ${TTNSCTSJRM z24iPm;`1B3Oq)9 zzIU25{(qi||G%0hXeN z+OEW>6F;<2o2czZ{4nCP%4~|H?XB(S&35cshba=kSoplqr#N(FVzurycK>EY|rJucQjzZTriy^g0VW>|K4d_oXFGUz_>+6iGW;J04Rc?HKJ??GxH3wNGis5kG?X zk;IQ89`nXA#EP`yA#$TBOvtQs+Uwa?7wJ&QoX*Ux;f%u8UPa^(l;wKY7h4`t&Pa}Rh@iU6GuX<-c z+U?%ik9H^PI%oQ3KiF8x`-FyH@;|TN{P$-++Jme!JVg8~UuSq2ogtPFxz50PA%i^l zR+`a%r2T|-gdb~95RdLLc#1|5eOR!bM zuO@y?u}+cKc)5mi?VwT@A=qhpFj{C9>7kfoydly1ESF z*AZXr{fSwOq^?yW5?#115*eb4&^01{J@Fd~b&Ykn54e%|&1E)^(M9WGQHi)r7vq`7 zyo@x|#j!NRf*5~VD@CK6;WMqBt`qdDYp?5|!zI-##J@`XmLgqeT^FX`t;BEp_vbOX z9-Kt3esu#q`eoZqJ!BG5^`;)9)-c>{bu>hJkC3D;|8qu5N*DG1Kir9R{`i#2+ZsJ*#_;_=CiMP-ZtA zbjx*xOo1=xR_M^(V@~iM@$VPu@Pe=oUH)OnkN6|3y1)Hu(qFu2^uPb^(sA8OP}O>W zRkhu;<@V<*;@p#0u65pOz4>#G0$)biP5xz_zaCk-KB4`{UAu2AII=dO#{&v{Rkw}# zc?+9)U|+IMg}UwdK#9jI9;JMs6j;@#!d<#OUg7Tc2=_z0OsvDJT+MN$Uzg`Q=3U(} zrriCy1Gtz^Rdc#(>KLb(^1axW6^Tckqw9UFPC$Qm(-KU07kL->Jlx12B3 zKk9yFS#?wQ6Y<{=f3{F}OZN-$=ZG)6MJjZ6^)gfC4_~1|Z`ZR2 zv4N}fPLFc`#tIess`^j}S6@wEU0*|AQ(sG8TVF>XqOYs3NBmXduMvNpcsz9fk@%a$ zBji65e~b8EiuLuq!qta+g{yDOgzHeHdBq5i|@kzHTBF>6)Fsf9gHU9I?y4DTd3kLxp0Hp{>4v*uj& zh?bqF@8rjI-d*#2@b5#eez-oL`8gLut{|`>_pg?f)sNLb<<%^fkF7$2gr4rvFL3H7 z>Sr^_PSQWEpRAvvpQ@jxpRS*wpQ)ckLOBx3lTd+#iXOoBrE7kX32u_zGQ}n=i>}YBznI-GjJyNop^slm1+N^(t1QQA7Lj4x~ zRuU{E*vjncR{y$w7b?Lx`vx0l1?yjD-`je8f?K42N54=1E(vxL93(i4^au0@naEuv zRQeBy{3wKb%wM>_)(v{MW{VErZ%RrJDJpuiwMXP1q3p;0Wz*8n9`E}`%%IsuDy^@=x_&cqNO8IRsSsubp;A{~eR;*ZObtXZ7dw-|ElnFX%7oFX=CnfHPDjp&AL* zNvJ_WO%iI6P@9B0B!m>}uarpkT8U(DGRfBUNjCJpWd8@guJrHUPc{TXvIaQ`^-3gb z5Se5jc0bvmG-!|*29*JwZhaCO6dJS!9SIFd2ro0q8q5ZpN3sU1N3vnazQ4FHY6vn^ zg=P(v4Z#LvPXq~#NQf*lR5Mg(nr%!%lYd{chPs@}P|sh7rQJ<7G(g#g{$(G2H`x$j zXzbCfA=0B+_6p2jc`e$|9-=k0FvJ*Q4J{3EhE|5whBk(_hIS-0Cn1`I79_-w5KBT! z65>c`MM7&5+7uf)ctvaI5||p8##J>WGST{8ff3r1EC`Da;k70q;qgFQ_5-aUnW;8~ z1m8O_1~*h2I3{o`gJcG**yH_q|5af_h5;}1tu$nk&|#$^n}m*kYgSxx>1oI_jAHuA zH;gchBmv`SXA-&;8Acn%Fnz_7(6vNg|NG0hl-1p-zr73#EA5?lrj14 zye?|>XGyBdqNBrgvgjAC4|_d~jfsXyDEqX3*)NS7b3S^z?aDd5CLS?d8O9b;^toWF zVTM;<(>?l1#7(0>d~e#EWYr#a)5tK-u#^ex8N+eVXBEw?CvxeskOAODG(4B-H zB=jVq7YV&d=tDwZ68e#lL_+^!!?F^At@MtHhSf}91AL=m%KcF>^Rd4E0e!v7^tFYA zfxb}@tGTQ)>^F#Kq^Y52+Tv*DKE7sIb4XlQ6l+*vJ^k)INoT zssFy(jnSOS*ur1ITRJbe9k{xEkHr^LrblkcyTjCOY>BdQ{$=waleH z0qL@RJdEg47yG39$bCGFPZJ4@YjPa03-a@2T=gsm%$Uy-ow zZ;95IUT2Nirme_$&iJkIJPF%L*g?W;MaGN9OH7xqld$tYpv!B}+I4@ejY`|o$vLmh z#-axMzP|DLA-2)$aU)(dG?wzBVY*Q@{A59lk%o{q(We%3f@yY7m>LItlNW zh|N?BVteQcEvEXWFeHbmfvF)0M@aaf&=hXM-O-~Y951uUt*NQ0IVusCnW8+C+hfSU zM?c^*#hI|0Uy-SmskNyM2_KSx5#{3|Q#(_8rr#4JeDd$>*VL6$nG*cmX(^^mCfQU|n#pY%WEyN5VoEm+H4QUmknjZwUy^W=1azpUNkE5shJ>$4_=beD z#ipzh$>x?wb|jPRIiF_q#VX{lGV&wE6B8Tn^g&W4Te{D%!b%{Ocm znbtDlt}?AQts&ui5`G}zYLV$h(>f;HYb0F%4+wV?#JJgCjGxFh_1&&%adg6qncb%> zz3X`a!n6ftxB8bo*5bqGy7lcm=9%WvP1;=6A9_HzJ4`#h!hPK%+#es|IG@+{n%-y1 zearN==^fKP)4QhqrURyfrbDLpNcf3_pGmky!Y?G?=F)E@+$P};33o}jS8O_5qTFNN zOH$LvP_D?8C|3;hU6P8b$IAT&l=}@+?pYFLKINWg%1tv}WZ(f8i2>f9nAzHV!T!O- z7KS!mHC-c7P9k4ux?%c}M1e#_*{Syz(`~PMe`D$uMV5qjp8}4cAAvEI%hH) zcFlO%&|J#PhTQi*avR0gD_<+_8DV>J<^#8n&1N%uwj8+1Y-Q>d)sJwT&uc;EI#92< zvN_mX#az`~&0O7F!(7u`3zyWQmP8$idJ+vJ8c8&fXeQA@qLoBju{p%6UUPl#xN8n) z>b3jSi?w9DFA$2g9;>(P)oW(o4V&Xgbd;#q%)T4O*WRB0$30;0|NGwAH+MF7MP``0 znBz%wkyxqFoM28QF^EJgdGg4oGk~3hUyp9heLT8lFV>iom~OHE&Y!-uQLB6j zm|`BpWSeSEGrLKwN@6tA}ywQgtUIWN0!Uis|Z-V1*pbj_p8*hYlOc8o{1wIAU(pVtb^ zGnj12Ji$ECJjwjDd9rzmd8&Duc{+(9B-SOd9*LnO)+ez6i492%BQc!Bh+^~164}lz zk?jH|+eSXwHoh<0xW}^n2V`5wWLrdHq))bMAX{Ascb$Qc9J(7)`aV@obr`gQ(c!c_%I51#wq1R)?RI~z zJn*q>%U-q?4zjh#NK7b^twj#mRxnru2D=3;Vpmo66LaNiCHY~gU{N7IEEO$E61$Vw zqtK$ZXh`fyVxKY_b1g=T#gn%dvnOxa`Z5+98*_X6jky}Wug|nfmMRduCCF0Q5=>%W z68n*uRAi}Ysm27~pTq(GzThn(oXS$yU&J3vrXRYW>!RHFV&$1jI;z$%!CUI1YyN@@udkWkf9TM+dYt=R@Ro23`}#O=l?5NjLP~6poQFBi=e6dRc2KV++S0-j zV~Mr2w8U9jSz24#SfJZf64OY;3}z6CgGn4hVmgUKNgPIEMzN*6SG|_b-a*%rz|@=R zQ*ZYDLHCKr>iq}QJCLb2nZzugdehjI?ilVm1FsTd&}BdF54x6N7Pda1CBu?QVh)MJ z3oY3e{F_VS=rS90Eh8*!IYG-v%P7le67xvRCvilPWvqoQCx|Vk#ZmtO4PrS#ODW3< zzV>44W6Rxf{TD7;5y06RjPz&_%L!UaSxzvs*u8UlM28F0=Lbw|-a}pVfCi^qW-&j{ zz~fhO4EnD^%WOP;6~~tL_*Hh&C&L96_Wd!GyU3&5Cz*0*vo3F}Uzg`QWSQkfrrhP0 z7c46*D=meVBFievYRekSS`x>RIG)4;5{bkKBu*r85{XZfIGMyL#g=s?%H2?++|5k6 zQ+>*veqXulO$w~sWA$HD)1Bc?%}>wHdf1AaozklU9=Nld9yV(J$Yew1mKH8MRfJtc#!Y3TpjeMa(_>=F5`M(4Y;@?Zzb1pA-mf#pH72Mx+|=a+US ztZVrHbP-X@Zl>HlBu?`w_iZRw(??aALA(>YQh9&=uH8cxyhT`OdC&4bi8Dx?S!g+8 z`GCY(B+f0nQTHRuC#XbRW;x**b!W2_{EVgG9KRIQ@Y%jBJZ1TsDgLzOE6W)Y=aKjf ziSvsr-&oEv#V;Tc7lr@!9V*LZsQ5eokyQKA9^L-5miL~ybL7he z`NX$UjlJ3j&3iFwclMov@((EfhUF)(c5wm-Y4IZ*=kwZatH`u_$8y(l&&pY4)&Ogu zRc__2xXbq(iAzX)p2VfZ`jF)$zChv%5?7K~SZtNN+O<}&R#Y$Ks#?`dyG1_jt|9Ri zl7E9&C&X7Di?{5DT`TsHTWQ73rd1{4wN{3Bt-;0<3=&tf_a;0)F==j65^ZZOYX}m= zTH9KOM0CzC7Fz3C>yfyQ#Fxu#=(UDfG50I7hFc@7jYupe@g)-17g-xyn=m16AaUcr zFGOn$r?STSi!0vsn%=Om?cRB_k|Lc|ZmefQw6;Ro*8XMZhs4$$yuU@G=iAMS`NVXl z`|m=uwzGEh^k7!3=!)yiO%S5BGwZ>y_RgQ~)oH3$3U2Yo9qX*!tUWzCwqn5wh-%9t z4);Yi$vOl&w)VFUunx2)TT`s5)-?IY@-`B;lemM#*GR-2h@B+9LE<2{b zTlCaA!#bOZc%~Jj?mHyzE40qB&Lt5A50=>&Y+Y!5)|^SngZ? z!uo=>h)I8ib)~hC#6u*$N8YQkO!|jOJn|oq{(8uHgTI^?eYWwH;Mkap6N6j4 zJNyNm=#f622U|;d9z0!X>hbQ?F2Zx~2u+rDU5aZ7-^&@+E!OQ`?QZjE_vj-W=hN;k z>j9?SH?6y^d#rn{Z&}~AzGK~Ieb>65#N#A>NFt`~ACrh~{Sy*DCGj&7KPT~vV(UTg zYsc2Z)+6R5jKRm4cE5yB*=xt*DH1QS#{>AEmmiDw9}w?pCf=_|Jn0iJp88^en2L)S zSQ~}{v77|^d4B?Jy=1+@#CzHL9f_w&{HoCUz4ZqYF=O>C5K|_1oUK1vZ!sC(wEkrM znZ&P2{D#D{Mb=-ezcLw~Bk|jRUxqdrr?Lh3%W#_Y-1@_v+l#BFw7OnS+pGhVp^Zmb z!N2S?7Dd+|+H_bm@!dU}lIovN{#}MPg{^|8|FV_$^j~cIAe)l)U!`mxRPI)Ai#mUJ zGt#EFnLH}C89gfg?h%KVsMzMP)qsj^PMgbC$rfa*Yzwwku~oHIv!NURoqU^O%i`1@#kV&P45V73-OM?w)#xPw|pb;uf7pj;vb8+>_u#ghKOw~Nc^Ql z#5O$q#dklNJ`8;F!!Ch6Kktj!*51|$*qz2nB;GExb+&aO@eYai%4`I-b+fTa zpt#J|!;`^xk%E8m%*2*tONQ=k{cQtm14-gYl93cpWJ|H7LibW2N&kU0W^6;D zF6~K^EemC{{mVZ5Ns}$tHo`01d?s8;_#0k(!Zw)+_etARwsE%cwgMa3CfFw0CfS}Q zNg_!>QaO^!lT?AEiX~fQOf)6 zmronDKAvATB+fGc2W;m=y-D${X2pN<=l z)SO*}LHW^-b^H(L_%74&J(5C8bZifRj_rY_iwu(RmQ8^7Cv+TM5^Z}qdqpIOy}TXW zazm2B3hhceI_7YaBFk(Hw(IR|8YnKaWBD&6aRe4_uwx(M<|JW9qCaPGaE#A3r@b=d zZ+F=%*@H-GOi~k)nikoE?Nylkn~@Y%BL9DJ$qRdJPGzs-FaNxl(ANup?o9Jn2R-@Z zi2|$(={#<)hq9smWp6i(dnNUHy8(r%mLx@!b6Cg&-xyW?gOKfE_C_8d+ao+eZt*A= z`urDV$D`nv?9J`b_7?USd#t^sJb`+N$pAM zKvKt-?Crf*#rDq1HTHOWSFWm^tuZ5Yf_T|=vDB61sU#(lG=%+E`u{vl|9`bfi#-MM zw<92(eexd!`5Sh~8rjqBL)l^($s~0lDIV$%R`b3b$+qV*{pZ++laxSGVxc|Ho=;LY zl6sb%{>Rv#^y>c!kN(-NMD}rP5G!R@B4MA;w2Ag9O#YMXPunMx)QhCvB=sq>Pqj~D z^6yJhzkh%9x6g&7=lM%o=CrRg+mhXFB)^TJ( zK?U=i?7)m?VFJ=nnL>~woi-X{>yz@?Az_H z;bT_&4w43!x=)L`uJ7Et?QE5pz*Y9Wo{n_rBXZGq$N~F@m=W0z+7H>^v%haYY(HZE zz<$(z%zm7t43aWQ$|5P7q#TllNP>n&6x%;4=|VqMuED#LRqbE04s@ii10Bse zP`pWr-gDCbyx!CQ8UO$5C-e48tV_I1(kNe-_&vJBii?!J80@a1ypi|k{d*Gjn|9pu zE42S)|CyvQB#kY!|6>1@q$fzCGP|y^-*W__XLE24nFCX@CrNsWq;W+Kxr1jt+jx=+ z{{5cKQGruAD*E?q*VfNY(S)`Mow9Lm?`H4!e}naG4tz1jJIl}iKV?&Q|{LiB|4lAwo**sDn})cc%O!N z9cDI=V4;{l%_Dt>RChFhcpWtyH667awHeUhe-G?k=jBuyu221zqX znnluVk`RQs#g2yF%Na)_>k*5l4(GKEuU^4nl ziFh5IAYMmjM;Axu3WyX2xCQKI;LDiMG*Gwm#k+^2H%qLZ4onypk+itb(Z_+g0&?W} zGMmsi20Bt%CCMy%pYvpI8g@O9mf)JkFA+866MVJ}b>Nk~BF8XCh697fQj&1^@*+pJ zBZuk!1(N;)iWA` z^_-nEe_Hv&1Do?Y#yci>6-*ul7veg`k>dWodQ&;85x&Yb%3o4ZYZ#V=QKF+9N>MD4i`GjP76s#NWxw| zW%Svm)9GY0Kc|b0xF4_)*IAj3xJOGJaScm+w$*Uffq0!Yowb~`Ny7Eoha`Q3{h6F~ zo%JAFl0GKs1heulH(vVNi{$?A-i$o%4ChqN2!BEDY*VGhZK2cBNqxS%xS!kLS?0vq z7-gIImu)q1QPw8|<3b9q4or@|t6clLc%4zs79R0BqdnsN6eF&)vS-9S`mhn#+1iO^ zsf+mQ{8jAEB0EL0&q?-Wk+XxdqZ9XUKPTx+l1>$b_`DqNOyuem3LUX5u?*#}qknLA zXVda83PL{OOn>&S4L& z$7f59GY@4HwVb&W@CHd=6*}{sBS`w1q#H0e5U)T43bLw!l5=bUS8$7@GXvCNgVHnH zP3qOF*FDdjn^(`Bk&!+sJ3FmjTz2Y+Om|j(UcFJt!`z-9bw{V-Rrj3S?4iE;o^np$ z>a22(bB=cwIEkchNIFZ>Ig-9z<(%l8xKo_i=V7?ULXZukd6soz%}RP zfUC~$oL6L3xd`XU0QCU1+C4faIV-JOZgLjxwx#Ff_fF4BbB~Ts&L2Vwp@5S}AtPDy z;~dNJ8_pjGsEzI7T6N4G{O9~Ea^7_Q#FG0Ve=j|&k3r$LNFjO8|Eu%29-R|AkI2X< zbpFac>udTQ=RMr3b>1aKxs@)C6y*!*Cc%i#$(ioN{M_`c!QEJQ>uIrzXJde-AmIKD zI+wy#9*$$bTj{Dm3T4S?;Zn(*-jW$5^|*8{%u9+~dY8dvB!!w38d7MBTxOTWWhI4< z6lPL*wz+Yl_Jk2xEwi)o-J|mp+^MY3PfQ)+&UEK>aE}?F4lk`h$KaxRGR~cs zpPuFEP-Dk<5A+;Yt+eC*Se{kjGq{o~7-{VaLM|)x1-%MgRa{j`VIYO6Af$IpMsjBM zp!8h#aaT=F<*MbX-4mt>QW!mscZIm>!trs*`R+nj2=}b_h)`E; zl&qx??cEQeq_5J3u82QY+Q=123JWQ$%(E)l8?s%lW(BhcsGBy9Y2B)Eqn1eTh{laV z!onIf42g_w*)XJa!$u85W5OG^svjCNAU$VDc9uIYJ#$1xa(;I1fYFf=10uqFCyM^R zJ(17q7*}hIx~^DPOIMt$6)EhbaFD`D3fC%E8&_LbJ6C&BR3b$XDJqj9n2D=qDE=?9 zeuK~u{M$0LVMI*Bn8uL}LhH9GF*-YMKyq$oL>RtcYnC=LKMezNsyhUIcX~W)Q+!5p zs(VOwMw&Y}#M{d3ye2un|MK^<{9n0hfV#%tHPjo|uAaEo94j?hdzEE?Cq24(fBC%Z z)SDab|FWky1Jrjqe7f-dFZ+0ZsZ77pK>0vgB)Nug#$s20*8tZ*SF$U`mFh}!xm|-? zgGqs;tVW9Jq^LoPnxv>jirS>8Ly8bm)Gg+!xQ4Q)9B(96RPYby_Dz5=GI&eI@j zHP#KT5`7i?%M zIVE$>P`{&EW@qMPxY?f*M`UIu=Z^6X1&Qv#o*8)e*b(U&Y2E5aw2n|;^0sNI%vt1G z=34H0ffOxBfli>^?@cUpt-&nHRfO(fH7R095lf1eMb?V07hQOD`xR2ep@pnrtc(6* z!~Rfld~SMnF4{amUHj1mV=*gEbmt`JdU`!|%}1B^*3lz5V}!eFC10Pm$+e{vn>Ek4 zwz;b_%=r$kTGN$t#e!of9z-xzjucj(wDv1hM-1G-nq!r=a4MWsru(e~<`SkkO2 zsqDH1o4~~6V?0k8flXjAf}0Bhdnb-aO?A7|+-V;gj7pQm#%v$v9+TGx|CSiE(p(_N zr#yUt4ntUL49O>)u1Z0bmBCf2R;ykEze`LX>qcFJT4y8=W|d&@^~`j#b8(io$$34~ z)AEO~c?aeb!7ZwJU!&1XRTp4oHle_TT&^3FgIr4-lb7$#?B0&m5sPm9LuKtcA$98w zP@BB<{(j#3X>0xSUmj?nQClFJBrlLy%j$>QiW)QwD^L`aD=1$S(I~Q@0(w6~fexzm zo`N;v{=rxwr*mShCA#x5p%|R^KoPUANcVQ#^Kkuj|4+w_%H}OrM&k~d zp4A=O%2wDiu0U0wE^OVVKvSS)wc2oY-CMDoM2PUJNejwY@ zym?rdg2PMsJtuJ*&WbUrCf9&##I@r(a$UJZE}I*{J;^=I&E%frp68ZvFL3L)P23Ld zZEhd8pF7CC#~tQA;?8gvxNF>9nL?(PS!8yZQ|6Kd$%19gWG!V$vazx!F}8~CY`JWOY@6&e*^jbcWWUMo$nFIQ0g8a~0Tlz(0onk4fH5E}pmRWc zKte#zfRun?0iy$+2$&QwE#TRJr2(q~wgv1AI1+Fy;B3IffU5yF0&WFX3{-pbIzZmam zxG+gXzlmv72XvjJ=tzoAYm_ko)m?{ON3iF5b&|KjS9OZcr09YV>)vIZY2`=vdMvyC zvJh-Sq3Vx56DyRMKZXrJe^Igv!y9minLxhz4Cj56}44QQ*O8E6h#0G!Lv9rOgfL0^yr27qLMyfe7L zU@#WU0xQ85Z~%M^E`z%qXRH9=TO({V!na1)V1x}u*kFVW*lUF|!UiL3Fm?c)Kon>1i+p zOan6jY&Rh;rg;FdF&zTeInFEx@R=DlnqvUsXl@PK0oZAVoo4vMoB=XH7C@cmF<=tF zdCf%tu{Cc8djR5SJ_5b~r@&X>8*mPs2S0+F;3sekDd_~Y0sLb@+boEYr8z*1EXXYj zY_h;l7Wl~mKUv@>3;bk(pDgf`1@>8Bi)Af9-dJvMoYetvytO|dumT{TtjH7VZH~j| zVw_C`3Q!(Y1V&&6RscWSV3(~DXawL3TN)S-W&*U^hWOa#f|tM!uoLV8d%#=Z9dH_4 z;5a+#v!gyc>T`quV(=U|3{C*pTM6f`1bZtXhbo;17XfSyk^$5aggSyyM^HtO0@6Sx zK&*mr?x0Nou?d1tg7yNmA?SSozXZWALGViu>Ip(UL1;q|d=dno1i>ejRRA%lj9jQ( z71RZ2M`hGgc`$eeJP)9O%9{avRQVHd7F+>8fNKDGSsA{me3#>bIS>HgqhJ9@zy%P? z;En+24bBH6z(_C}z(2t&KoM9C(5D8Y&fxW6KR60dUoh$mMt#*`fAxDDSEC%L0F*!t z5Z4;Wts1DWMi788HPEga)j>^w{HoCvz<)I+0@PDuH#h(eg7*O0Rs(g_fUj!6S2gZ% zTurp6CfZXI?Wu`a)T{{LyP6sh0-A!hpbNnHYbJv3pdUa!)Eo%l)0$}j_11hAtO9R< z!vH?5`87bjHPObJXk$(Iv?hF73w75L0oqp!?W=|M)p7u|sTSH)D-1*d)Lp9w7yyQV z0`N3g2DSpkuGVRQ_SNPAd{-N7sg3j1hOcT@12sS`P!H4xh*|A$fOFP{-L+?eSzr!8 z8)~lvMF26Yy%wwkFM(qihE)I>tCIyrfk|Krm!FSH(8hXbV?DI7UQdt@ z7K2Ry_0@y#>cMyQ_JREX{;PKq!0vjN!4>cWxCT&fDB>R~0{Ao(IS`7x3Pm1-!oQ(r zUG1%915F55%17aLI6s}JASN1Gai zf&pMCKujCJ&IY5vSnwnm2W9}+)L;o%3YLQvpb)GAo58DKE7%TTZv*(Z0pi(UFF-6C zdr4bhH<@KZzh zq2bpY7bXD2AuIymTwy%`+8Z_!j0R{^7}^wuHiZ>{31AXf23`O-XBf^IhI59k1?vF( z8g>>S2f~nlVK>3g;1}>4xC8ESTzCbb1ZZ10@*>;?>VUccZ4F0T!;y#KXlppy8V>uy z(bjOZF+2?n0z&}e5Ds014+pR_9Cn7o&T!ZnJ`c!Gd=fbYOb5_Tgh-D;V8Tks>0=9u2U?12I(B8=R zz^CAI@Fjr#k(U9qANd2g2JUhkLdP`@0CJ!KI$!`MPz9hs<7NPDXdDY#0r;zN2LPWn z?h3jA#Jh0@$OdRj<2*0|j0R5tw5>5>-gqK-8lZiRSAn;|d0d{smrX(dV$ft1SOm6$ z;{dtZ1ok(9|C_-7O%T5(H^D7{Ty27OG?jrszylHJ0ou^i3LKyks0?6#Q{+t3-k={C z01%6&h~d`(`DcTfIMmX3&%Bs4x3qk9aIH%Kz+~zv;lnp;@b={ZHDtS zgCClq-ObSEW|P4*FdHDA&E|uJ;CWCCHh|sW0Qd@=19!kZj*HTOS^)lu3Iz>77(kvy zMS>WBSVVONh(#1)5d~YKU`y0Mfc8bfo+#K8g}6i^E>RNz@+=B=MNI{;C2BEv4#1|U z7Xj>wS`RjYonRM$jZu5S5pWbBK2aY5#3l-{iGtlxh-cJ~;AikFKs%aqAOIMF3m~_e zR|jZUbNI1&W6%P`f;i9`bOP}J@oL^3pk2+A!B8*?z_-l{0NTZ~}Y^ zJ_k2Bu7wsf0MTF&z`0wj0NVh{w>S^(a$JlVz^5@uARjyho&gI0;v2IBECV<;rUj2^$16yM@gEzq*0Q+L#x7bPmxfcun#KJeRVE}E7odf29`Ct*a4(@SWOBo0R0*D1& zKv$3mdH~ejasxnpEm2>~E#N1Pi^DN-h)J9X%7HeZ8^AGfy+B`pcEqg&usv=yK%T~( z1eXBnZWRDRAAv zwB|q*K3a|~l4bY~J`vBV2@gwjtKs_Bl1?K?j=y)EW zo{p@JU%+jE79jK6ix2cy7~U_6)rCV?&BYj6YH<+v{8fgYGZB~Tk69$jEd7ueDz5%d6vN0)v8 zb#zGq$mK3M05)_P3B~}_)dg|sG9PRN2f%S~8e9PIZx`6w(>9HUqRj zejC^g-U1(h&%sH6e27Or#3NSmh*SKJ;AikFxZ}NT+%*vY!q%=<5DvP4UZ5}N50D>S z5vQ(*L)UD8Sacl=o&p5`ap(%0x*~2}VMo{3z#9PebcHs$eh3hsuILlG{sd5O0tZlU zf&e6-15QvAL;%Dpp*cW)CbS0aKt}+7CBUwPK>#)-z@`M)l#mNX0N9f-5ljZtz)Ua) zz<&vA0PIQl0-OcN-30Wn3EzR6;1>7|z`jHQC_n|E1PuUeN^AjIg4O^rOiThp0b-Uo z8ax5U0oai^11thXU>ks665*Fb_$3i>O56tyfcL-=a16k%MA(%GyAt8AMC4WC4e%2{ zekCHm5|LlskYC+kS2s1#0s}zIx*>Q{H~6MI@~(Rj2nJO_4KM`2SKUVeiSj+8 zK@5Pudct2lXMrW)1yBf9gJQ5AAa{Ch28RLS(-Y_G2|x6_2-x`$o1TaZn#lDE1QI9* zDgqTS0~>Gv7pMd3gD}ttGy}+|Ua+SZ?CCWCWP*_ZKInzG^?C|S2gsLR&wzyh_V!u| zU~{jP0QUCU0AOz~*xTz(@HTiC90c%RFZiz){MYMaa0;9O-+*)AI`|p<3ecY30YDB! zfPCw%1qNUO7Ele;28cs%w5N9jhy+bR6o6lQw*wtOC(s9=ZM{=2!LOYW505MKNT}cj51t8W*@J|x_lZ1FDH3CgQ6o>|GK|6q0Cn2^;xd6GFgmxy4 z2NS?FFayj6^T2!npC)|*5Uc*kul_dR1VJDepuYYgpdM%jP*?w0&z*a$bkr^fCXR? zcosa*aRXuVz#5%f=68vyYgh`b$$yiG>Dk`brm1keq@?qt-Td=~ryZi9Oq zmxB6Icp!oDKnXNJ4@>}cq@a$J`k)~Q2a%vDKs-|5qZIfkB@RG?DXCxrSOegLlHaoFdl3M$H5l>@ksj(+~qhoeDBr+oX-tEyBh)I zgBxvi$AUHh`RDEka9(#GkPe1{d_Z6_Kn}WR0<_nS{Bt9YZp6{O7Hk0r!TSJh!>hEM z`(yAafIaS009th;UheY%@p9kexIr=y2oSSDh}j^-Y!GxbNCn{ML9ly}5g=BB62M4+ zItRg@gW#{h0;me$m%+(kD98jkAQwCVCIQ$#cq*6<(1yXY!Sev|8e9a{0K{zYMgTt! zeia-AH#lwx2Vmb2*f#|B4N(KwHpBpsQ$wl&*f#{49)cVi(gGk~hqMQs0P=Q7B0#9fFGFdraJ>Cb_s0BuW0tkSoE9pH7a3m`Ak-vaM|{Q$8{e-B*XxS=Ab4N&LM z;b1Y?31I(FXm6MixIkrqSPZKULP2BD48ZXT3`ZJ-~fnUb}SeG zGC&>}31D0HlVBp445k6-CmZ_7-VQEuTuwOvpX9(NISoMshz1=2&XSpHwW#_ z84Jb(#3yGGzKvG!Gl9_Ez%U10>%BkI{WU-wL7yz&i91h{W-~JBAd?Q)xXFVc=omu1j_ELSNAq?x zZ^xpP!hSlIN8OI@v|}qiz^*!e%2#}YcRKz^cLp((5tz5*SjJ=Kj%My?=8g;bi+{L- z{d9DP9qlCYTYjJ&@{Nq53qR8nnMU?y0J4pgZKP}?$6yzc6PV0YW-uFXMtU<+#*uC% zausXYfNv*q3)|Vr9`+;mNV!MKEbSFCCV&OW{EOOlv$$85@nVsvqYIC$}CZ4i84!+S)$AmWtJ$j zM42VZEKz2OGE07k9o$+Am|hj zp9CZ(87as_7P66(=6uYje2)9*q{mL1(N`xKcam}E4CEz01t`q_kW1$t^r8=X?|cUR zc9wl-*>`cLUEF(@l9Z+#ey+2eWsb}?sHZ*?t8c`8zc?hIlG^6x7D zu5#;o5?OV%_pa)6%Rv!}Q37vw(_=SpbsL49bsL8syUDTJUH;`^5d2)7Ml_)rEg8-v zqM6DJ^!oE{?qCl;+e3Fh+uhH0_p{yoYMb-50PJx7Q;+?yW~clHg~0 zwB;i{!A^R(n;sk4#1^*mGzfayZO=sbxt__9YtP!$q;w-en5zwwIsjwUiY+5B&cx#+$#msbAit4PWv#-|_=~?w56JAO?N^ z@-hf|`?=nJu6GJjq0ipl>fM_6Fne$B_V)9=z1!Qny}jGpynW2u$J>3>=wseK^=XCo z`@GMGOk^(eQKOIS`dmlWeV$;}KKl5z0&@D*`@c4z5x+5=naoCJeZATDEy77hM!eV8 zynW5v_gl={cO_e~o4&E^4uXEN>6e+}l%g!&?N^y<)T9o2=of+f``LHDulR=VP`h6{ zIuJ=Gy5jrk*8}tRThI9*=pT?9x%B^$p~#^B9*%IFQ=H*%Zt)Lyargb*Zhtuqh>y7k zBqkZ=7+_Ze%rL-h52%OC2FPrHdl_JN1LQwI{sY|XfX^7hCN6M|he0qf5lKly4%8bc zlYzC6!N3S)Ft7z~VxYPM-$NDyqZrIEMlyzROkgronZa!4;q8I;F>pKfF>n`qIlvzr z<`^fC$w2)LN<%rkIj9FSvByDIgJ7^c2Iry>MJYik>~gRj4wlJaxeqqOV7Ux#LR^ul5DbY&7>Tf(A*l%` zJsGKq`a{OzTN<*E&3I?XKFm8ry&-l#7^ALz<2{EFU& z55j#7AA|cEK7mQZ@;C@a$asWIM#yADb!yR&_fT&{JIp-7yd%szVgN%i=ZI0LJ7Na2 zSk4;O6NCMX*nwLZu?Kq^ahYel3<7NhBkgIV8Am228TLO?W+TlzQg0&*Q;ZV0&ylhm zS)NK%p&E8MvNm=3oIcFKn zE=T#kM!DfpC;5{L#BnJIMu*5var8G@f1~v`TArizHd=3^^)}l3qd((YWII~6qkTK0 zyCUP!z0mvUzAWZq5R6fKOcK&j0C|k@#u#XM%^(#Gnnx#Vks+F zjXB3`#EfI?YD_G<*~fox|IKBtave81<_`C`&m*2-pTFtvw=%qkH-DSTPHqIjSi2qT zR>#U=Y$KY|f_M3duhIWl{g2iE*p5VDhOuTC+n*u$Fvi;5*l|o?GE*?aSo;{Ozp;87 z`+B^p;li|4dxT|sQYFtjZH>39@xvI&80N8% z#n|2W<+#)FYgv!k$8TmU+p)LtuY=(CTzK>MZ;;#XcK-VjpKB5-`8H+q7%44E8CaOD8y@{u|j9Z&{o4Y*34NQE7x|5QU9yKQw z!<>`sX_6TyRiY|2kl7^jPHKSJCVj>ie1$A0eb4{+i4NH1q|S6@9IH8lHz#MO4&S2x z$#aS2Acr}|2`+Gro9KVC{wK?1vOA7;yU~6>Mkgj2sYrwUMQ6Ya(QWWMAo@FgL~qgh ziq=vV)s*IF~vJm%s=I4)SEJj ziI{E5B9@}wl(nqK4NTdLnWvn^Y*X&@h^M^Zbr4Lo^QmDZ!mg&e(W$w}OMd+Bn_7sX zl%N!5pIV-ZROUUpFd1)7{W}Pz$!(gQPm4f4(*`h-G1%9%-ZmuP6`%7B-(xp3IueB}W~e)35N4gB=8PpQ$M-YCj%I9N z6I=0(&e+9XE)d5hu5gW;{DU3NaGx`LV>2G}Gzeya@*%#hS-z23KhTa2MA8W}%<9KrhB1<{{LUnzF~clb&C=g2z0Go8vmWuBmq9Q) zz9FHPW?7VzJjioVE%ducj*IlR z=x2KJEB%q{q9IHqnmNp6KK8Xp-;3;Pkz5z;;vk1P#!2+MI4Om21B*Z8J9^-D7puQ` z9O^CB^y1ZQXE*y$Z?SzXHv8iLYMtc70eZFA;vslbBR-*T%o6-AHy)V`KQdumO z#Zvt*J;fQWa*I3si&>UF<0Y?yV43|a)9^;&A+@cEog-~mw&`3e2%)yBk7FYEbqezeq%gtVEI(0WA^24VY!)? z+t+flEw`KH=lP3Em~*+FmfyymF8{B$M?tV6DJe*a-K|JNIx><4J+F|#3j13j^A$Du zlzz-*KXO}XzLljh&&r?ZN_TqEo574hJ}W0M8U3%+|H_%nM!l7*Sjz@Bu@y6|yn>!r zKErPOvtU(xl8_wzuafhsaLVvCBk|TM*{oVm3_CfBdaJIZ_f@ZhVD%d$M7`DSc(p86 ztF>AdtMl?U>aKRDs~gc2v#xH%d$i?aKI2Q=#A@HwYP(zAhraY@5JMS`{#MIm^;qn5 zwV_rY<4F*#$w(DGX8>kcqxUs`a|`#nM(=ALAdj^PNQ`~1wa>NkSZjv0X~=;Y)|z3h z`&(O_Qk11U@6v^S*wfl!=xwdO*6M4mTU$Gsg)GKy)@~z~-R$EC$2o=DTYD}D*6C?o zIeahc+|0WF;TG1(Vx2eEsk=_Sb<42pb=%p=9u9H{yIQC2x=Y*(g7s>yH|P3f*wcD5 zt`8?YnaGNH*XPD;>nkD0_0_0BZR$~<2pZFr=CortEAZy}r$Mm6{cos={x{g=hG^_! z!+iXX+^~eTY(@VY^uIwS8)UNK0Ds_j)`q_@!-lKe;tuw=!TvU;!ag=urw;F+w~hMR z*aG|6*qX2SmQM6QKO29gKl0o-k}-_qcebH^jC^9`5>pUa#CRvh{4s7fM!lFH=t@uQ zC&qqa1~CMA#HbtNTa7VqjG8g_9%IHBGsf6c%wdjkk~7$S%tapZglD|qRS;|n@doy| zDG^CY&YKjX0sq6Bn^xhLHu*j`>wj})-s3aAYuwz#n^dfTG6EqdGH{VfG4L21fSks7$EEpBRy-nTR) zin*x0#dopg0(QMc9$UPzRo$)XZOuUuN>YaMRKcxoRd;JG+~wAfiKH{#=z%%6{)!p5 z+SS&fj9@h0-nxKAEMXZdS;KlZvYD;8*{yc9^>q+z%Y|9C$#vUsd}-cTcc{N(AfuSVa=f!+6Z=qa$6wsQ4eW3OJ6;7r zYzQ|H>jq-gi#2;}O3WNv2(!i7O>AB2W9PBvjJ2y+-)d|dKHwwVW^5%A5zFHs*qxpn6rnmY*)5CR z`rWPG?sk}WcW=zPdjLamTf6OKx4OG$FdMhFdo3HVpWWN>&hFjFW4D=iU*TmC_^g6G z@iE^XJKB>B-{_vyn01f7_GBU}r71@RDp3W!?$PTW``hyl4QPZM_B7*v*u@_Avga62 zf?%&&d;QzJ=Gtpld+lkj-u52Gzu9{dJ?^!ay*IJHy}p~h50KT~r?}O<`rnrX{qEE6 zKK<^?h~4b7n|(Q{%BSdKUq?F8m7dtoKKt3%kKY*2EEci^J?~qEJK49HZOC!oF75`w ze)ad)B!V`4k9YQW#*X%@w|^pYQD^^J>}0>4?BB``)Y@<6{bt^8=KX(io{Rj=Wu67W zfeiQ#546B792kY#2h={Wh^5&30dE}e#sO~}*n;{8)IV^B3*6!k|MHM0sDCgasj!=a zxyZ}gxW|LVC`oDT`e0MO;f(F6G&l<&dcaq9=8naXtJd{FNP=d%!b zA6$kR4jw{}f4qe^|B&q;_VvdM?BI{TcohVP^nA$v4<+YK(vySS=>L%Z4;7>^MRBu- zs$+&jb%~%c&5-LMw{d6;)6mv#a8{~PkCuGRcXZ?z)H^(m znasnihnKLD)vQC^!+SY^Jsq~E!*SUC;T!z-&K>Rr!I1#-9x>yQd=$WZN9^c`9UXBa zN6KT?Bl|nsCyQk<7^JSa$S$tOTVgM`fx}6K@>*l)j8Ye#a&- znd!*#*c{|}%wCSk@7QksKtIQha|$^gljE_=Ttk+}-PCdQkGtRF|Kn$dN~LtY9OXac_U_-~cB$&7auOpK)B`3TF88AEC-?`+N;he0_>F=E0&V9-ke9QOzkDus8A4VX{bFw@)8GAc7hxsf*w&(2ZoIKB~ zf4&H1sf8TQd*}RTv_rk~{TR)7CKAmIW-%9a&#z-A|JAgk^M7H+^LBs!2DiD(eID^N z2rkI*f?K}u7U85LBU#9XJzmI7Uh-3$&l!L>FC4@-doexwzxXa4_?e#g#xDNKQ0(WT z{x8bp;v~#)Q7#wdaZwf*SFx5Dwy>R8t_8tgVWcJlnbF%{Ir07c<@dl}MJa)M_^T~F zknvwK`Aa5$oyP9}y3D^p5T{;TBFr3T-Z=BdWhW2jj4McCDp3{RVw_uzYk~d5eZWV! zgE)D_nK`Z(zhTBWJBl-3+%#rl_i^%yGi#i_;#RPmeH`Eq4s(o?=r_(D8y?qZ!Wx)V&_fBG$8+ZNy?f*Y|Uf|K7U5 ztsuA&;tdj#1asa7H)7>zj6a^JnbnrW|g{;pSZCvx1FmVhd)txr3b?zdGYD=a!ai=5 zLw~pQcT0b_>Y=w=db_2!Ti(C*EkDtbPISd>-Ev#E`lI(-Ls-StAh@meZTr8SmEy?b zwl{98dt1HRAM*q4iNwBccc&-n-tL1NxIKlHtihgc$6(Ie+cD#9_jr3he{h8V-oC*t z{^2h7@r~Vn!ZTj-Itc!;&wupyPh~#AoBzz=0QZ96j@{lViX85=q&05!PFud@f5_xc z2h4CsE_b@nkHHLMBxA9=J8teyG#jvwJ9cnKe|PkEM}K#oqc{Jp;I8|=n+pBi%|m|d z>TVHAV`q0OQU!av`wbIu3wPb{U0K|{%r(q%_f-(wQ}13Ha*&s|DMWEfQU-PJ)ujb$ z-uoVN-fNE;?{%gdJ+P;H_J6NGX1ixs_ogueH+pX_3s}rjR_a6c(2(EI(j$V?vOabF(y<#AvC_w|2Y4)<$Phj*~I`;GVs{oe1( z00uLR-x!bF?ng5fx!r#r1P{FPz&j60P@8%*WXR!RO62e`9N9fAMRPjg&4)4k z9R!aOk{7){`jqeZ5xqa^z|ZtW9*=yxkA^ZFGdvoNEFR6m438FIe~(tMnzfweNf0~^ zLvN4YBsKbaEW5|q$VndZ(S+W(jmHaF$A13c6qot0p6s6_A~|M#@)qgIL>AP2QiO`w z_Y?bmV&6|1&=BuDX~rj*_eme@=!qRY8G;#~jN&)OGZDLg;%=Xq?TNmgY(S1rHnWXb zcCiONKRL)DZU@2BWE8`jPotQ`7B28A2%hQtS#D(TtN?{5O%ef-{g=C+=@t>^Jcf{dT1M8?nU z?YW+wx5EuQpTHc}Ba7$Wc&_eq^`2kn5sE#36$CFrB*5NYBt_j9Zs5h+sQJR2FKSU2 zGrq8=7foo+yO{UI2bk@J@9KpdUv#D`-RXtfdGRa#8OUJV=8Ik241$;5d|8}UbVL6y z?egUb?BZn{ZtUe%?(!7^S%=vmK z>b{O<8jD%MYRve06W)2f9k=@W7=Q5ybH0AT>mU@wBaB2OB?YNS!`l?12*oHtY06QN z%2cBUwfKZy%w#7wf>0M~F7P4< zh1p@49fsLqSaQ;m4gH7ZA`dbNGe=k%>@Tbe)v3cfM9_%u7=|5%=`T!wVfqV`U6|g& z^cJSKFz<&QK#pN@3_F9pgk9n)H_&_7ogkDTJ@rvLK}UXJ4Dv|ejRfi@P%puD4q?{` z>^gy6C%8x)>L$3t!yuF}9_g_2gm#`VJLXK77c(Yww+V~lW)qgi+X)-en5MYLgzwUZ z_i4+=e2RT0)L+7>?7*9el3?$NT41+{Mj?kpYuSK%O|*qQxYb1ZPb8B>GD-9&=efyU z?(>M}ybAoO0ODhY#5HL`OWbT?y(QLHVtpn40(X`;3U`&bA43_zXvQ)beJ7s5Y}{1h z!$ByC`blzAm{tW@MZdf?5Zc97I9B};++leyDm z-_V{&I@6Ut3}HC-lk7LfGl5CWV=>EE$vVuEY%^OqAB2+IMRM;X*IV+mWI#{Jvy%(o zQSwrhr4|inL{nN|U&%k@6Fx__$@P<5{p4;qxf@9SBnYLDLkjPtFnfyJsF$JwbunLx z#x$c9ZTJ9nQ~ZEgQ>dB3j48~R!i*{GC`B~Wn8_UGvxsfPvWq?J;~;jJ;wZ;C#TowO zX%KodJ(ck0o4s*IZ|+C`DSZnm^HGeFl%X8esgM3s$|R-xN@<3aa!DzVl(I-^Zz;d$ zCpyxJF1X#4>)46@QtB_I{!*SmZz<2>#!}wmAD#!HRPhMI@4Zy=OqH5&^qwjcS*Sy2 zerGyMkVh(cr1C~8byKOA>K?CxP-@>v>I5Vv1@1JpTS%>LYI{mu95qwFgE>>%Q))A& zZb@t2M`o$bo7(3O3}Og&nR+CnS;`;W4?=Hw^R4oHgxh{g|8H&O zJXg8FZSL?S2&D<}2KrB<|1>g5lbnqBp9N`hl7|8m#{SZjK<{bV)02J-L|Tf@U!bdTNai|;auEJNb zo*1@ZH{otI+&kg>v7_*7ybMBV1MDcR8Pl3EZ8F{@HS$Vp_i63k-;D^R)mPfm__or@ zF|B(}Tb1h6M9*pKQJ=5q$9%k*_HGbLmzD~&!40MRjc8<$&Nr5BHcME`1~##k9qeQ` z$MIdIJI6&XW0rKjqjYwcJ_&Y_-aF~_mc9nH(Np>e8q<`I`HXh>X3}@1JH3!^`a#Gy z{Rm{7UO(y8&)|kLq$4+S@V6mC8O)xc3F>9|k`97GLAdjEgzO zlOU8y|C!3roDXncnLg!nejti2=s%PGGsz^AyUXN$Gr6@)*YR=a7)<( z;^U68C!#p&XO~TOnPj*3>~hHNo$O}Mz7zGb|H*a!;T~=v`%|7HiyZ3acoVbcP%}p< z%HsRUVMjTtQIk6Oy_dtcn!~r6<8!{^8@}TQ+R=e1>@Y_+y3>+?w_DAv zZtn3+WG2g4%{n%+mF?J5?%kZkthvpW`vtFqkiTvh$`git=Shn1DNicWkd8tW#oqFi z#J82F92KcdRrH*v7WS9Nz2wnjp4oUak2&+oEwB0VwxlC6$UA|_Ol3L?SjignpI85R zH?f6n{J}BIkoOFBoHvfkTn$3`-XI^PkYm0|=q;bV^64v|yUOPl^1Vk}zU3$Mldlu< z&FA+(zF(1TKEDU@*;zi{Q$F?c%O}5F@@GXB`Ms0h{Q2vnUjC19pZV=8e#1>{g*Bx4xI zB&J|*1!kh}0+-NRfhYKG3i$2|>ZzdI3c9O;?y6ua-okDQ{>X5~GYfeXlt)216g-T2 z1?67QtOea`L30*-9fS(KK>`w^ZlR21AulBJ=}3hBAfPIluS3+u6Pe!N-OoQ369*nEXg@+b%u zkwKBnWFsfJDU5HVh}$h9pCVPMK`ol{F8VL>0iW$fl@FicV%JawxiyJ*Zdo0>1I0 z_pqy?k9mRp7Ym_oF?UzYti{wUR+b7>rW$rstPbxGL1UU>wqoD%Ju)oTjt)f81v@Ne zhsAo~`zkgCa~F#XLdE4@T>ixy;d?AT61^9fLGcruM(@SXbCtWuqqsbZ%cHpdi|fCH zTuLNI|0Tjnk6SB|om}Lh9$(;{68b9fGd{48E;W6{$jX?5>pEm6Aazw_fTi`Z1sV$hCA@ z?7MUuI`bQPEox0D~EZdnq%TSpEq@W#1${c_@br%GRPO>XkKj z*>>1dS$i+r7xl^xWdv%KHFw#WEW=D??WF8M4s#5@8_JrotQpIivFzVm;d&4%7Z9H? z5|Wr?=&M|6!m+b*8Ocmm^jPja%vWwIJGc>q{LPS1dG}VnHJup4Wc-`*GnmC<*03J; zRNg(6--a6H?WDZ^%iBqL{g&5ndHt5Z%r)$!yq#3AlL~fHp#pYN!A>gF#!f0k&=~nu z_?XX-Uj_YC=!zUG^rAn5kYfcoRv3jFsi1zv6qvbUZpz}FiZyA1dKJIK?~97+RO~}P ze2*1dhy$6hMVVIB)Hf5oN5aw+iVM#)BX+VU;`qdk%6xsskMd8?BBS5m*y zB-F2@ekGY!n#+9TTFG}>Nsg7=KqWU&$qiKUd#TbX&LY!Fw|E+aDx1^a6$w@LT~;=4 z<&0z@JGscq+Y~~7m1|LlddRwRLu699IW4jG%J1<3T^NrYS3Vzvs>CBd5qyX2tH`B_ zEUK(vHEY?*UJh`Gqv*ei{;RlyDmSpBDtCFv6Q1)j2vya0)yn9ts{L1OK`ZoB^%Fkl zE57A>eq$GItLi;o1)*y4s3wnUa;R1S^{Q3Ftks%f&T6e`%g20*y4Bo6wJ6*}wE+xf z7^Cq{wed{A9aJ-GHT$V%Kh+L%jFX(<92fbUD_lok)kDN5jD#d1IVnj^ICfY)17*-> zbvvj&kL zn#V%iWvw0TWH);`z#)!chqdgm)@fu=>q!u*Z6CEO;?3H>Fb8|DeIp3f(R-b|6h#(w z^j@bd)p&;n=)aCk>NKS}AM*uY^BwK5yE;*H<~P<7i~j29ua5re97k_;^j1f2b^d$* zG4@o~UDbU9H&r(Usc`>w^eRv=)~k;>>oviQ_1>io_FvEb>v_9gC%Vv$?)0J${qU{T8_ZDrZmefl z_4aWm2)$#LcjWrc`}9Qr@5JCcd*^SiaGjex;AIf(9g;)L+R4Wa)3BgzCGk`ueVaki#6~ z1oqUxn+<#y4b0KN?id+-QU6K`6q! z5$26Zgjpk!lM(xh$VnawV0RHkDNY3{Qx*G+XoUSm*k6SGMSRG|e8w02$WOS}h)84< zq5p_M$S7hIW{DWb@62Wai&@5M)?vN~nMKGd!dwyNiZ~L48roCCwCK5^o*U}9p&d0W zNGZyq=Z1Q2SdALAXBvli8iX39#LqPHBoT98Jy9)ErIC(bU^bW!H2) zG03dx7Phk!J8pUn?>6&>zkL#FmW#X;r3@9RM+4kqGy7_0U(LMT>~p@MJ#Md=9-4K* z`^^S2m|=`$G?S1;Gg&m7f!>;}L4VEk*GzBCd|Slw|T^qAk?A^ zRjE!-hG4%f#xs#<%+z8&i!fJ<6|810mx7SLeG+P^_m+OPrJrr-XIlE1mVTzCf7{Z( zZMm7nyc>@&5|NY?q#_OJ$Ve8lQ<}0=pb}Nk`@6O9&AnTnhBToWZRyBR zX0s02zblV--9{^S*eWx=-&WQ5g#nnM)hx{0%Fnd2$5tDWZ7X|gb(~YkxYc>Cas%_U zy32hY2BFqwY5g|(Ywddngxci6-L`4Y$9%=N{6IUr*`_PrZPN>Hw;9MNyxDdh-fO!GZ?xUZVa(Llt+f4z zdpy8$z>jGB* literal 119683 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 mk!9OXjKK_TcVqW${r_S9`%khY|L?!^`u}) -> Void) { - print("🔄 开始准备上传图片...") - // 1. 将图片转换为Data - guard let imageData = image.jpegData(compressionQuality: 0.7) else { - let error = NSError(domain: "ImageError", code: -1, userInfo: [NSLocalizedDescriptionKey: "图片数据转换失败"]) - print("❌ 错误:\(error.localizedDescription)") - completion(.failure(error)) - return - } - - // 2. 检查URL是否有效 - guard let url = URL(string: baseURL) else { - let error = NSError(domain: "URLError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的URL"]) - print("❌ 错误:\(error.localizedDescription)") - completion(.failure(error)) - return - } - - var request = URLRequest(url: url) - request.httpMethod = "POST" - request.setValue("application/json", forHTTPHeaderField: "Content-Type") - request.setValue("application/json", forHTTPHeaderField: "Accept") - request.setValue("Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSJ9.eyJqdGkiOjczNjM0ODY2MTE1MDc2NDY0NjQsImlkZW50aXR5IjoiNzM1MDQzOTY2MzExNjYxOTg4OCIsImV4cCI6MTc1NjE5NjgxNX0.hRC_So6LHuR6Gx-bDyO8aliVOd-Xumul8M7cydi2pTxHPweBx4421AfZ5BjGoEEwRZPIXJ5z7a1aDB7qvjpLCA", forHTTPHeaderField: "Authorization") - - // 3. 准备请求参数 - let fileName = "avatar_\(UUID().uuidString).jpg" - let parameters: [String: Any] = [ - "filename": fileName, - "content_type": "image/jpeg", - "file_size": imageData.count - ] - - do { - request.httpBody = try JSONSerialization.data(withJSONObject: parameters) - print("📤 准备上传请求,文件名: \(fileName), 大小: \(Double(imageData.count) / 1024.0) KB") - print("📡 请求参数: \(parameters)") - } catch { - print("❌ 序列化请求参数失败: \(error.localizedDescription)") - completion(.failure(error)) - return - } - - // 4. 打印调试信息 - print("🌐 请求URL: \(url.absoluteString)") - print("📋 请求头: \(request.allHTTPHeaderFields ?? [:])") - - // 5. 发起获取上传URL的请求 - print("🌐 正在获取上传链接...") - let task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in - // 切换到主线程处理响应 - DispatchQueue.main.async { - if let error = error { - print("❌ 请求失败: \(error.localizedDescription)") - completion(.failure(error)) - return - } - - guard let httpResponse = response as? HTTPURLResponse else { - let error = NSError(domain: "NetworkError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的服务器响应"]) - print("❌ 错误:\(error.localizedDescription)") - completion(.failure(error)) - return - } - - print("📊 响应状态码: \(httpResponse.statusCode)") - print("📦 响应头: \(httpResponse.allHeaderFields)") - - guard let data = data else { - let error = NSError(domain: "NetworkError", code: -1, userInfo: [NSLocalizedDescriptionKey: "没有接收到数据"]) - print("❌ 错误:\(error.localizedDescription)") - completion(.failure(error)) - return - } - - // 打印原始响应数据 - if let responseString = String(data: data, encoding: .utf8) { - print("📡 原始响应数据: \(responseString)") - } - - // 5. 解析获取上传URL的响应 - do { - guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { - throw NSError(domain: "ParseError", code: -1, userInfo: [NSLocalizedDescriptionKey: "响应数据格式错误"]) - } - - print("📋 解析后的JSON: \(json)") - - // 根据实际API响应结构调整这里的键名 - if let uploadUrlString = json["url"] as? String, - let uploadUrl = URL(string: uploadUrlString) { - print("✅ 成功获取上传链接: \(uploadUrlString)") - self?.uploadImageData(imageData, to: uploadUrl, fileName: fileName, completion: completion) - } else { - throw NSError(domain: "APIError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无法获取上传链接: \(json)"]) - } - } catch { - print("❌ 解析响应数据失败: \(error.localizedDescription)") - completion(.failure(error)) - } - } - } - - task.resume() - } - - private func uploadImageData(_ data: Data, to url: URL, fileName: String, completion: @escaping (Result) -> Void) { - var request = URLRequest(url: url) - request.httpMethod = "PUT" - request.setValue("image/jpeg", forHTTPHeaderField: "Content-Type") - request.httpBody = data - - print("🚀 开始上传图片数据...") - - let task = URLSession.shared.dataTask(with: request) { _, response, error in - DispatchQueue.main.async { - if let error = error { - print("❌ 上传失败: \(error.localizedDescription)") - completion(.failure(error)) - return - } - - // 处理上传响应 - if let httpResponse = response as? HTTPURLResponse { - print("📊 上传响应状态码: \(httpResponse.statusCode)") - - if (200...299).contains(httpResponse.statusCode) { - let fileUrl = "https://your-cdn-domain.com/\(fileName)" // 替换为实际的CDN域名 - print("✅ 上传成功!文件URL: \(fileUrl)") - completion(.success(fileUrl)) - } else { - let errorMessage = "上传失败,状态码: \(httpResponse.statusCode)" - print("❌ \(errorMessage)") - let error = NSError(domain: "UploadError", - code: httpResponse.statusCode, - userInfo: [NSLocalizedDescriptionKey: errorMessage]) - completion(.failure(error)) - } - } else { - let errorMessage = "无效的服务器响应" - print("❌ \(errorMessage)") - let error = NSError(domain: "UploadError", - code: -1, - userInfo: [NSLocalizedDescriptionKey: errorMessage]) - completion(.failure(error)) - } - } - } - - task.resume() - } -} - /// 照片选择器,封装了系统相册选择功能 +/// 使用UIViewControllerRepresentable包装PHPickerViewController,提供SwiftUI兼容的图片选择界面 struct PhotoPicker: UIViewControllerRepresentable { - // MARK: - 属性 + // MARK: - Properties - /// 绑定的已选图片数组 + /// 绑定的已选图片数组,用于存储用户选择的图片 @Binding var selectedImages: [UIImage] - /// 最多可选图片数量 + /// 最多可选图片数量,默认为1 let selectionLimit: Int - /// 图片过滤器,默认为图片类型 + /// 图片过滤器,默认为图片类型,可过滤特定类型的媒体 let filter: PHPickerFilter - /// 图片上传管理器 - private let uploader = ImageUploader() + /// 图片上传完成回调,返回上传结果或错误 + var onImageUploaded: ((Result) -> Void)? - // MARK: - 初始化方法 + // MARK: - Initialization /// 初始化照片选择器 - init(selectedImages: Binding<[UIImage]>, selectionLimit: Int = 1, filter: PHPickerFilter = .images) { + /// - Parameters: + /// - selectedImages: 绑定的图片数组,用于接收用户选择的图片 + /// - selectionLimit: 最多可选图片数量,默认为1 + /// - filter: 媒体类型过滤器,默认为图片 + /// - onImageUploaded: 图片上传完成后的回调闭包 + init( + selectedImages: Binding<[UIImage]>, + selectionLimit: Int = 1, + filter: PHPickerFilter = .images, + onImageUploaded: ((Result) -> Void)? = nil + ) { self._selectedImages = selectedImages self.selectionLimit = selectionLimit self.filter = filter + self.onImageUploaded = onImageUploaded } - // MARK: - UIViewControllerRepresentable 协议方法 + // MARK: - UIViewControllerRepresentable + /// 创建并返回配置好的PHPickerViewController func makeUIViewController(context: Context) -> PHPickerViewController { var configuration = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) configuration.filter = filter @@ -196,89 +52,131 @@ struct PhotoPicker: UIViewControllerRepresentable { return picker } + /// 更新视图控制器(空实现,因为不需要更新) func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) {} + /// 创建协调器,用于处理PHPickerViewController的代理方法 func makeCoordinator() -> Coordinator { Coordinator(self) } - // MARK: - 协调器类 + // MARK: - Coordinator + /// 协调器类,处理PHPickerViewController的代理方法 class Coordinator: NSObject, PHPickerViewControllerDelegate { + /// 对父视图的弱引用 let parent: PhotoPicker + /// 图片上传器实例 + private let uploader = ImageUploaderGetID() + init(_ parent: PhotoPicker) { self.parent = parent } + /// 当用户完成图片选择时调用 + /// - Parameters: + /// - picker: 图片选择器实例 + /// - results: 用户选择的图片结果数组 func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { + // 清空已选图片 parent.selectedImages.removeAll() + // 使用DispatchGroup管理多个异步图片加载任务 let group = DispatchGroup() - var loadedImages: [Int: UIImage] = [:] + var loadedImages: [Int: UIImage] = [:] // 用于保持图片顺序的字典 + // 遍历所有选中的图片 for (index, result) in results.enumerated() { - group.enter() + group.enter() // 进入组 + // 检查是否可以加载图片 if result.itemProvider.canLoadObject(ofClass: UIImage.self) { - result.itemProvider.loadObject(ofClass: UIImage.self) { (image, error) in + // 异步加载图片 + result.itemProvider.loadObject(ofClass: UIImage.self) { [weak self] (image, error) in if let image = image as? UIImage { - // 保存加载的图片,保持原始顺序 + // 将加载的图片存入字典,保持原始顺序 loadedImages[index] = image // 上传图片 - self.parent.uploader.uploadImage(image) { result in - // 这里可以添加上传完成后的处理 - // 目前按需求暂时不处理 + self?.uploader.uploadImage(image) { result in + // 在主线程中调用上传完成回调 + DispatchQueue.main.async { + switch result { + case .success(let uploadResult): + print("✅ 上传成功!fileId: \(uploadResult.fileId)") + print("📂 文件信息:") + print(" - 文件名: \(uploadResult.fileName)") + print(" - 文件大小: \(uploadResult.fileSize) 字节") + print(" - 文件URL: \(uploadResult.fileUrl)") + + // 调用上传完成回调 + self?.parent.onImageUploaded?(.success(uploadResult)) + + case .failure(let error): + print("❌ 上传失败: \(error.localizedDescription)") + // 调用上传完成回调,传递错误 + self?.parent.onImageUploaded?(.failure(error)) + } + } } } - group.leave() + group.leave() // 离开组 } } else { - group.leave() + group.leave() // 如果无法加载图片,也离开组 } } + // 所有图片加载完成后的处理 group.notify(queue: .main) { + // 按原始顺序排序并更新图片数组 let sortedImages = loadedImages.sorted { $0.key < $1.key }.map { $0.value } self.parent.selectedImages.append(contentsOf: sortedImages) + + // 关闭图片选择器 picker.dismiss(animated: true) } } } } -// MARK: - 头像上传组件 +// MARK: - AvatarUploader /// 头像上传视图,提供头像选择功能 +/// 封装了头像显示和选择逻辑,支持点击选择新头像 struct AvatarUploader: View { - // MARK: - 属性 + // MARK: - Properties - /// 当前选中的头像图片 + /// 绑定的当前选中头像图片 @Binding var selectedImage: UIImage? - /// 头像尺寸 + /// 头像显示尺寸 let size: CGFloat - // MARK: - 状态 + /// 上传完成回调,返回上传结果或错误 + var onUploadComplete: ((Result) -> Void)? - /// 是否显示图片选择器 + // MARK: - State + + /// 控制图片选择器的显示状态 @State private var isImagePickerPresented = false - // MARK: - 视图 + // MARK: - Body var body: some View { - Button(action: { - isImagePickerPresented = true - }) { + // 头像按钮,点击后显示图片选择器 + Button(action: { isImagePickerPresented = true }) { ZStack { if let selectedImage = selectedImage { + // 显示已选中的头像 Image(uiImage: selectedImage) .resizable() .scaledToFill() .frame(width: size, height: size) .clipShape(RoundedRectangle(cornerRadius: size * 0.1)) } else { + // 默认头像占位视图 Color.gray.opacity(0.1) .frame(width: size, height: size) .overlay( @@ -293,10 +191,11 @@ struct AvatarUploader: View { } } .frame(width: size, height: size) - .contentShape(Rectangle()) + .contentShape(Rectangle()) // 确保整个区域都可点击 } - .buttonStyle(PlainButtonStyle()) + .buttonStyle(PlainButtonStyle()) // 使用无样式按钮 .sheet(isPresented: $isImagePickerPresented) { + // 显示图片选择器 PhotoPicker( selectedImages: Binding( get: { [selectedImage].compactMap { $0 } }, @@ -304,7 +203,11 @@ struct AvatarUploader: View { selectedImage = images.first } ), - selectionLimit: 1 + selectionLimit: 1, // 限制只能选择一张图片 + onImageUploaded: { result in + // 图片上传完成后的处理 + onUploadComplete?(result) + } ) } } diff --git a/wake/View/Components/Upload/Compression.swift b/wake/View/Components/Upload/Compression.swift new file mode 100644 index 0000000..e69de29 diff --git a/wake/View/Components/Upload/ImageUploaderGetID.swift b/wake/View/Components/Upload/ImageUploaderGetID.swift new file mode 100644 index 0000000..4ea82f4 --- /dev/null +++ b/wake/View/Components/Upload/ImageUploaderGetID.swift @@ -0,0 +1,232 @@ +import SwiftUI +import PhotosUI + +/// 处理图片上传到远程服务器的类 +/// 支持上传图片并获取服务器返回的file_id +public class ImageUploaderGetID: ObservableObject { + // MARK: - 类型定义 + + /// 上传结果 + public struct UploadResult { + public let fileUrl: String + public let fileName: String + public let fileSize: Int + public let fileId: String + + public init(fileUrl: String, fileName: String, fileSize: Int, fileId: String) { + self.fileUrl = fileUrl + self.fileName = fileName + self.fileSize = fileSize + self.fileId = fileId + } + } + + /// 上传过程中可能发生的错误 + public enum UploadError: LocalizedError { + case invalidImageData + case invalidURL + case serverError(String) + case invalidResponse + case uploadFailed(Error?) + case invalidFileId + + public var errorDescription: String? { + switch self { + case .invalidImageData: + return "无效的图片数据" + case .invalidURL: + return "无效的URL" + case .serverError(let message): + return "服务器错误: \(message)" + case .invalidResponse: + return "无效的服务器响应" + case .uploadFailed(let error): + return "上传失败: \(error?.localizedDescription ?? "未知错误")" + case .invalidFileId: + return "无效的文件ID" + } + } + } + + // MARK: - 属性 + + private let session: URLSession + private let apiConfig: APIConfig.Type + + // MARK: - 初始化方法 + + /// 初始化方法 + /// - Parameters: + /// - session: 可选的URLSession,用于测试依赖注入 + /// - apiConfig: 可选的API配置,用于测试依赖注入 + public init(session: URLSession = .shared, apiConfig: APIConfig.Type = APIConfig.self) { + self.session = session + self.apiConfig = apiConfig + } + + // MARK: - 公开方法 + + /// 上传图片到服务器 + /// - Parameters: + /// - image: 要上传的图片 + /// - completion: 完成回调,返回Result类型的结果 + public func uploadImage(_ image: UIImage, completion: @escaping (Result) -> Void) { + print("🔄 开始准备上传图片...") + + // 1. 转换图片为Data + guard let imageData = image.jpegData(compressionQuality: 0.7) else { + let error = UploadError.invalidImageData + print("❌ 错误:\(error.localizedDescription)") + completion(.failure(error)) + return + } + + // 2. 获取上传URL + getUploadURL(for: imageData) { [weak self] result in + switch result { + case .success((let fileId, let uploadURL)): + // 3. 确认上传 + self?.confirmUpload(fileId: fileId, fileName: "avatar_\(UUID().uuidString).jpg", fileSize: imageData.count) { confirmResult in + completion(confirmResult) + } + case .failure(let error): + completion(.failure(error)) + } + } + } + + // MARK: - 私有方法 + + /// 获取上传URL + private func getUploadURL(for imageData: Data, completion: @escaping (Result<(fileId: String, uploadURL: URL), Error>) -> Void) { + let fileName = "avatar_\(UUID().uuidString).jpg" + let parameters: [String: Any] = [ + "filename": fileName, + "content_type": "image/jpeg", + "file_size": imageData.count + ] + + let urlString = "\(apiConfig.baseURL)/file/generate-upload-url" + guard let url = URL(string: urlString) else { + completion(.failure(UploadError.invalidURL)) + return + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.allHTTPHeaderFields = apiConfig.authHeaders + + do { + request.httpBody = try JSONSerialization.data(withJSONObject: parameters) + print("📤 准备上传请求,文件名: \(fileName), 大小: \(Double(imageData.count) / 1024.0) KB") + } catch { + print("❌ 序列化请求参数失败: \(error.localizedDescription)") + completion(.failure(error)) + return + } + + let task = session.dataTask(with: request) { data, response, error in + if let error = error { + completion(.failure(UploadError.uploadFailed(error))) + return + } + + guard let httpResponse = response as? HTTPURLResponse else { + completion(.failure(UploadError.invalidResponse)) + return + } + + guard let data = data else { + completion(.failure(UploadError.invalidResponse)) + return + } + + // 打印调试信息 + if let responseString = String(data: data, encoding: .utf8) { + print("📥 获取上传URL响应: \(responseString)") + } + + do { + guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any], + let dataDict = json["data"] as? [String: Any], + let fileId = dataDict["file_id"] as? String, + let uploadURLString = dataDict["upload_url"] as? String, + let uploadURL = URL(string: uploadURLString) else { + throw UploadError.invalidResponse + } + + completion(.success((fileId: fileId, uploadURL: uploadURL))) + } catch { + completion(.failure(UploadError.invalidResponse)) + } + } + + task.resume() + } + + /// 确认上传 + private func confirmUpload(fileId: String, fileName: String, fileSize: Int, completion: @escaping (Result) -> Void) { + let urlString = "\(apiConfig.baseURL)/file/confirm-upload" + guard let url = URL(string: urlString) else { + completion(.failure(UploadError.invalidURL)) + return + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.allHTTPHeaderFields = apiConfig.authHeaders + + let requestBody: [String: Any] = ["file_id": fileId] + + do { + request.httpBody = try JSONSerialization.data(withJSONObject: requestBody) + } catch { + completion(.failure(error)) + return + } + + let task = session.dataTask(with: request) { data, response, error in + if let error = error { + completion(.failure(UploadError.uploadFailed(error))) + return + } + + guard let httpResponse = response as? HTTPURLResponse, + (200...299).contains(httpResponse.statusCode) else { + completion(.failure(UploadError.serverError("确认上传失败,状态码: \((response as? HTTPURLResponse)?.statusCode ?? -1)"))) + return + } + + // 创建上传结果 + let uploadResult = UploadResult( + fileUrl: "\(self.apiConfig.baseURL)/files/\(fileId)", + fileName: fileName, + fileSize: fileSize, + fileId: fileId + ) + + print("✅ 图片上传并确认成功,fileId: \(fileId)") + completion(.success(uploadResult)) + } + + task.resume() + } +} + +// MARK: - 响应模型 + +struct UploadURLResponse: Codable { + let code: Int + let message: String + let data: UploadData + + struct UploadData: Codable { + let fileId: String + let uploadUrl: String + + enum CodingKeys: String, CodingKey { + case fileId = "file_id" + case uploadUrl = "upload_url" + } + } +}