From 469a9a11d2be2e31bb116ae2d22c26a4f064d4f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Dr=2E=20med=2E=20K=C3=BCbler?= Date: Mon, 9 Nov 2026 22:23:39 +0100 Subject: [PATCH] Alpha 7 --- .gitignore | 3 + .../UserInterfaceState.xcuserstate | Bin 154449 -> 0 bytes MikeMail/AccountOrderDrop.swift | 30 +++- MikeMail/AccountsView.swift | 149 +++++++++--------- MikeMail/ContentView.swift | 64 ++++++-- MikeMail/IMAPClient.swift | 8 +- MikeMail/Localizable.xcstrings | 42 +++++ MikeMail/MailModels.swift | 18 ++- MikeMail/MailPrinter.swift | 6 +- MikeMail/MailStore.swift | 27 ++++ MikeMail/MailTransport.swift | 7 +- MikeMail/MessageActions.swift | 2 +- 12 files changed, 263 insertions(+), 93 deletions(-) create mode 100644 .gitignore delete mode 100644 MikeMail.xcodeproj/project.xcworkspace/xcuserdata/michael.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..17daccd --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Xcode user-specific interface state +*.xcuserstate + diff --git a/MikeMail.xcodeproj/project.xcworkspace/xcuserdata/michael.xcuserdatad/UserInterfaceState.xcuserstate b/MikeMail.xcodeproj/project.xcworkspace/xcuserdata/michael.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 2a0987aac4074bf7891104b88718a0caf04d2253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154449 zcmcFs2V5J+(!bp+suZh(B*5K{gN*^(xLZg9WP^ke7~>QLgKU#vAQamqPI8;xd#`SB zdhfmW?)2V!?>+hE_H>6NBrH4cd+&#nn4SO5&d$!v&d%n|yJi9rlzScYSG zMqo6Ie)+g{(cZp}?yi<`t-Wn)I^e$=$MtvjEFagsa{p*sf1im#M{kPc<^;n_qJz

IqZe(s{Ze#9Z?q=?19$=neo@Ab4USM`GA21&>A2A;@pD>>?pE2Jt-!nfj ze=vVCf1zxYgL2U*WI|?SK~`i#`Dip6gT|uCXb)75W}um97MhC|pi1OLRVau;s2+t; zBWgm+(7q^w4nzZJBRT{ffsRBcqtnsZ=wfsU+Jv^D?dS@04Z0THfNnu|p$E_l=uPw% zdKkOui|&{d-ww+A8c;%Prw*xjL?yTh6s`E4Y2R2)7^C z&h>Kx+&XSOw}Bhv4&n~x4&#pCj^U0M?iU^s9u=Mto)(@Hb_g#EuL*Ao?+EV;9|@ld zUkG0d-w8hozX-nze+mC;u!h%YH3m(#W|YRFv1{@*ZcUM9tY(5{vSv@sG)<{yhNeO@ zSF=Fl(fBmgn#GzrO}!?pS*B^x?5&AtR%)V}HJSr7U77=3LDMnu|4?HQO|oX|B{w0wqx(&L6b%*MR?nvD+y5n^x=}y(1p*vf5p6){3CAuxTOLdp) zuF_qryFque?l#?>x_fl@>mJfQs(V8BwC*|G4&BST*K}{{-qF3U`$+ex?hD=5y6<#9 z>VDDvuKP>(uO91py;g6~XX{7lEqc2?U+>lz>Bs6P=qKy<)KAlw>SyRH^mFwK^d7xW zU#(xPuhZA-!}?|V7X9A(h<>F$s$Zi&K;NZ5P~Wd#uRlnCh+fnmp+8!Goc=`pDf-j( zXX($?U!cEOzgfRcf0_PD{WbdQ^*8Bn)!(7NTYsPaLH#58$MsL?pVhyhe@XwU{tf-x z`uFr7>OawcuK!B^t^No7&-&l=f9n4+AOmO681#lLL$1MWuo?0UE<>SVjA6WCl3|Kr zs$sgJ+%U^9$1vZp$lx_p83Kk{L&(rzXfiA}>}A;3&}wKmtTya#SZnAp^cmI}1`Qhx zhZznx9A!AxaDw4v!)b;y4d)onH(X@cWY}uhZn(m5wc$F$jfPtcw;S#<+-rEi@UY=A z!;^+*49^>0G`wPX-SC#-UBd^4j}4z0zBGJe_}=i7;a9^ShQE!Bku?fNozZB_F`A54 zqr>Pl78pkx#~CLY_b?V4ON?d4na0`1dB%mtN~7OcV_aek8kZUyjm^dt#(j+Y8QYAj zj2*^KW4E!_IAGjhJlJ@skrw>Hcvo6ZIIO~$EO<9*` zU6FNV){R*=W!;>0OV(pqk7qrR^<>slSx;v@ll5%YD_O5*y^-~1*85o>WPO$Ob=Ego z-)8-o^=sCj**IIDZOC?KkItTyJvn;>7C*^9H6WY=ad&0dz>oV`4I@9h1u zS7q;?-IINM_Q~0&WS^0JX7;(+=Vf1%eR1}d?5)|CWnZ3sZT6$tk7Yle{Y3VY*-vFZ zo&8Mqv)RvOKcD?l_M6#nWxt*MarP(KpJsoX{ayC=*?(sLmHl`2KRGx@$kF6zb8>S= z<=AtaIfXg1bLQmC&6$_8D5pB7CMS@yG^ZgaoU>0(Yfdz0ZBAECcTP`Ef6hS8AvuTU z9G`PS&M7%(=A4ytNzSI6Z8?|bT#<7}&OJHzkNRcQ@1y=2^{)w=c$3y-FlC!YnJgx| zDc|Ha6`97GCYUCh_B2g1m6~RlDok@t3rrr9&s1$%Y^pQWo5H4LrWVuQrif{!DQa3{ zI>6LrI?&W_T5meYbcjhb9br1!be!o#(rFSA zZZ+Luy4!T0=|R&YrpHZBnVvPhV0y{)s_6~W+otzSADTWfeQx^7^sVU!)6b^gOn;jG zF(Wf))|mC?EOV~eY_^&6%r0}Gd5n3yd6IdGd8&E3x!gRp_)_j8bWbpv=mrITgF)?TK2FMTS_ctmYJ5> zmU)(imP(7?Qe#anO z-g1)VRLdEbvn}UYF0@=?*R@}}h-%lnp(ET3AwuzYR#&hn$>7t8OKzbyY+v6Z)Ktp;nhb(Ga&wOjM8ZflWs ztaXBQvUN}EG;67KhPA>v*Sf&!vHGml*2UI3YrQpWU1n{u?rn`&S6ZXiHP!>HUDgAw z{nqu?gRF;GMe7mPqpinTPqdz5J>7bi^<3)(){Cv1t=p`ZS+BHSW4+#bll4~X9oD<8 z_gNpbK4N{``jquq>kHPGtgl+%u)b}5&-$VD6YJ;JudLr%f3W^+{muHP^&cCuaW;)j zZ_Bdf+RQeaEzjn%723ww#@i;@rr4(1rrXMGvuty0^KFZ4UR#wdV5_x-Yz?+1+j84p zwta1_wszZU+y1t-wjNubZJlkcW;@e%j_rKgMYc`0t+ws9 zD{NQWuCv`}yTx|9?JnEBwg+qv+a9w$X?w=@yzNEXE4J5dZ`t0pePH|8_L=QV+c&oF zZ9mz5wf$lH+s@coyI|MZjrJV7$!@hf>`r@ueYAa?eWHC2d$GO5US^+ZpKYIKUudti z`|UOMCHA0wslCzOY+qsD$G)Gv&A!UsVehne+k5Q;_6_!f?T6Zl{Yd*U_T%j**-y2f zVL#h`p8Z1mCH5`$OYN82ud-ijzrlX9{WklZ_IvF2+aIz&YJbB1wEa2z4*SdY*X(cF z-?6`M|H%HS{R{io_V4UJ+JCYCZvV^vuLC=Hht^?mWIIMVEDpOP-{E!?ImS9BI3_#x zbWC%UI%YU39CIBD93F?yQSDglsB_di!j5H*7RTO>h-0NA>R97Az|rM6(9!Q$?>NYD zh(mN7;W*lHoa02tDUQn=mpiU-THg<88-a8Dn`g{3=UMWsdG5S|yu!T6dBu6t^JeGG$(x%u zFK>RHKd&mUHm^RfJ#S53N8Z}JuDql3j?X(S@4US8^DfBSnzt?Q+PoX{Zq2(l@4mc8 z@*d55I`5ghxAWe~dpGaBy!Z1y$onww^Sm$ee#rYV@29*!^8U>GEAQ`ol#la;{DS;3 z`IGaf=a=S}<2MZ0CpsrNCp)J*OP%wai<~}Z zt+UR#)Y;_R$GNXF;@r>K>Wn%MaCSQnc5ZYY;yl!OnDZ#-(asZ{r#jDYp65K@d69Fg zbG!3y=RMAQo%cEKcRt{J(D{(_Vdo>xN1cy3A9p_CeA4-p^Ht|-&exr9INx-><$T-u zj`JhuH_mUJ-#Nc`{^0!4`M2{Q7j_9Qo6GKUxbj^2E~l%&Rp=Vyn(3P5s&LJA&2i0j z&2!CnEpRP#HMy3#nqA9XEv^-=yTwUH(G`dtIAb*}ZUBV0$ij&dFC zI>vQ^>qOV-t}|TcxXyK5b+hY!*8{ExT@Se)c0K8O z%JsDCdDknh*IjS8K5%{L`pETz>qpm5uAg1MxPEp0?fS>{ubXje-C6Ejx5aIB=eftb zr?{uOr@71Ac7N{vvj7(e1^NO*K~6z#!Ki|~g8Tw!L1Dr8f(ZpP3uYBm z6wEG|Q!uw+UV*Q`Ur<#LEC?0U7pyF3D`+o>7OW~*U9hI0qhM`8f5AZo2NxVwaCE^j z1;-YgSa52=xdrDHoL{h|U~9oG1$PwOU+`$bV+Ai1yj<{l!TSXt6nt9nRl(N<-xvH{ z@K3?Ng-jtT%qq+-%qh$*993v9bQHP^Cl*dBoLpE|SY9}zFi^O-a7kfpVO?RcFjQDy zxU{gLa9QDs!o3Px3s)BIUwA;%xUPZD&KH?1CY#A&av3vYYYv8|9uOVuTLJ%!)XPNVoV|y*)5EPv5FiKeiB-`w4MKwnR5Th!OxHn29@)gQ?nH+#km zZ)y1~e{sdkGEZ^2zpSFTV#f5!;_0(Wt9%tDzKR*MW-2}BGZUHes~IQbV%$stQ^*uC zqnRq9AHSt*8_AqCqr@Sz@-BBj#SsOkyT8doWX&J(*%=Dl?5KVWu;s zOqn=JoJ52h#3mx#N`%|Q1|r-+gvW{S8WDaJSBo1XxsHZt8}R9G@96LDRk&_ysO^j7 z=KG?nS_e8~zoWU2zN+qC>6d$Z+WH}P5^h@)T^oflHVkz6qJ8}xU9J6)TcJsle#oW_ z^hTF;^mVN4=W<`^{avjq zJEM(jdZVrF)vcYK(Ov)<1$}wDyZWOW`eoJu#v-$m$VDW#q_(xM-`l;mr!(3gZLgOS zKYjhshs<_mYairyq;UXq4bh(NUYM<%aI_N`kG88US}LLY1A4kUy88QQYe)gL@1S~8 z$<$rRco`q#XR4TLriKYHik_JV)*Mms@l>!KnfT10as*SD&pGdgG5v}sL!!1A=U9c^n`qn*o_1< z*V@rJ^e>*aw(bF7a9Kxm{nWno9jp3xFw2-`W;xTcLRQ+Y*0s^)^1nv=nu1}N#Vzpb z70ZL+5Y2qWv$rp0#r9uV@pgB1_sXoqBezjxMr zl40zT$a+{x9bK#2x_bt9Dv0K~e( zc#eB1a6u$@p&}Cy3=F*(Yz-)EYga!AWL8;OdBybEWyPhXm9vV=D`%D!&#v%$if4Mt zy(RwA>CF`;NUmr1#1IB^5FI{$8!7CVNN&xp!^V^})Y~5I_4Ri53`Zvv zeOx5>R7Db!cB}y*boX|&{nsV2us6C6tWkGYpdE}r$EuEK@BEc3SFLQHJ!@vPy`-YF zV&$r~RWoKypD{aHGIM6z?2=W{8LP@?&X_rScD!hhrd&>l7yLLXG4Wt7IueR3Ba4+BeXr@X#Jr zrezCr8B@NE*~)BVE@ifhC1R;qF3#M>T+Up~rnk{KE?x(|Cfb|HqWmxF96#VYDLXU%KiDam-d5IDS~8<_*7VXStoZgB zUPp_Eng=nzCS3KKWSyJpPEA>{DRLqzO@t~p=4>FH14MdCm zeSt2iV>u+t?~8?Gv0n~RL*zF$DpL&oWphXWnyQZ8K8Ozcdb+#7*FuWV>gXrtXR$^MY+-(7eiIjqYov~HAPVS@`Z^$3 z?e2n^g!zZ?H`0S@U4lE}enYONmpg(_j8#+Ujjg& zOLD*v)5FXS@1nDHuzR52uM7;@xKg5c2Kv`@_on={&g+>-=Oe`4 z&Dk4vBm)B-?JEcSqkW-V82mG5U3Z%2*E3#goN-9?Q;&-K(g*|1L-UuxHliuu+k)mX zD|VoTK)+}>J-_|!&klO8hPl4ugw~$+?RSg&j$PEgiIM&%1No32`W#a3Ey$itHjo(RWQwc`znUEHrlls1|e7J5%;8P%wCfN0{&L?#mtVK!%HNm1+Ar>_uzn6YU!L*vV8#ce z8NU!_e4W^uG}oha%VpVY2H7xQfN`Gq0`zsMI4G;tW$1Fy&mg3AwxG*EKdEY5Dar9F z@nCV{*!w+VoDyD#t_PzU4A%|xOF4%jZQP2ki`T~+(M?SGrcF{HMy)ow72Pg*(1*m? zo6#NOVMD*T8{Mn8R&<{z4*lXm^u$PR6g`QalH4eI7ThQiuY|#G5U+wi)h>6SSELDg z5xs<777rJX5Rcr7UPZ5=*Ttj6)5Hs<$u8WfPjV)=h|3*-zm|5w>3tP?7kwa2(tEHH zj+R!!hv*~m81Yo8>ttW02Sy~D83eunGZ%MiT z5|7`E{t-{u73Ibl3(3ljHCPMEeWG|0Rc>r#a&Xpgjh*z`hoyTz?ECSqSv3O>{{Fh8 z+&CASjvC(dpq|1fe!jZq&)Xh1jv005%Al&;*n;g;xv>qD`;<6ymZaQ~+@-rXKlvw#Itv4>K0+&u&MLoDww)+#B=4TTMYBDWcYl{ z`R%$~?ULY)FkNk{S83?+RaNV-pz^d%ta%i|@z z9v>w2y#Wu3o5amq@WFVaxJA5Fk~rjbVW%#8!lY0o^JoSWe5BOD;rIw~tGI0ox)99O zI*>@Ro!+Yx0i#MR=1um6yO&UXk9#P@jRf zOFrXe@yM9(#gY%fSBY1H4_P#hx)4U0@aymmiZj4Bir1$l2mWW69{$TR zpoe#gcTqiLIVOkYhbvd!v~f$Gs;ewKlC5%Ig7#oR4_PfV)eUdD@~>ICQEf{$UGs(W z%4thxdRUvZG*X?;W;;MipNY(=gV?<^c(72T9)#l4kQk(hrO% zX||A^n3>~cr!Z65V%70J2$Fs*PSWgjwhScAmWmH;X3NEgcSX`{1v@WU((HV80Z950 z@ljdQl^{OvaPc*qHUHM_4+V}p;=cQYhfn_b6-m-n(6oAZ)7PUH{PH-V&|k|ezxB>nWrlHP}nW+-V0 z`Pl}k;S^x;j}2`%40@Oh=_*4a;I^*zPnp&2}jJy)K=b6^Hvm1gh|;CII`j;YON zFJ|htvX`)%*v;bW;v3?d;zUR|D7Fmj7o-V#Af-G_`UCRH@Hf)GMRMCmY$F{>(bL^& z8`=ioY_7evzg0P&0|@1>+Ua?flr`>M1xLX&=@t7m&Et%0k>vqg1_QuXu~)EHf}?p` zd`EINLD|`iU9^|Hb5UmII`;a6Jqddgdk<571$#4l3wtYj8+$u@2eX~Mi@jTXU;I$~ zSo~D{T>Mg;DSj<}dj)$hdmnp0`vChO`w;su`w07}_`Ud}_>=gv_^bGv_`CRr_?P5t z)Pp7VDVp{CAd`hTs7V6onBQrvkEf1 z@twR(JNabSI;rq_W|o%wW)@eJ%!J(S%+guKv!|E%i)YQK@_MVvW>xuT`QkfygLd*+ z=A!ae&GOFhdHuy@o|1~<^4V3;RmBVt)$~%2&o^WGtm%G#d`24=&@^YB@ ziW1NC;xd?YDW?v3?~3?NKBt|0vkRgsFY{DXRLm;&&YCHSs&aa9WvQpM*zfn2`$~M3 zzRL3W^HBC1+QE0bHj0uen1eD<*vd*DsBYQp(&E`OJhMP`t4d3!my~+SW>hMx@O$=0 z2=Uk-#2+?;VW+hfxqSnx;aD5;^s&%NY5N=dd*X`yi~T#{FF1z7fW{&5mz|<<8cv%? zY~YNEf04uGCjNz)vr6z5@z0&Z=X1_P;sS0o980jba7AEF{@KEf;l>ig5QGv81viOG z{NG6K++98@9_Go**4z!~bof#(EyFADH)BwLzJ& zAlJZ@Z{q8BVeqW@%*3(!O zYN!j-tSomVcNC-u)jVsM?jyItUms0Nk>vlDn;y#@x3AieRx)hmj+JT|WWG+|4!v#^ zF5^z*PU24HPT@}FPUBAJ&fw1E&f?DI&f(7G&g0JKF5oWYF5)icF5xzDo4GCAR&E=2 zDYu=wjJuq>g1eHtio2S-hP#%#j=P?_fxD5riMyG*g}arzjk}$@gS(Tvi@TeBas%KgUu&i%pt$^FIs&Hcmu%QHOUG0*ZG&+`JW;kCSu*YgJ6$Y=4{d=8(> zkK#?dnYZv(-p1Q`2cO61^G@EyyZHjXkT2p#^JDn2{5XC*KY^dfPvR%@d+<~EJ^5mO zDnE@c;ivPZd>LQP&){eBv-k>rHa~}-%g^KI^9%Te{371NSMpxo$NTvzzM8M$1N>rs z317?C@j*Vs*YivH20qL;@=g3QzL{Unx9}_Yz4*QPefWL(2)`fS%CF?x_;x_woJw0Kbl3&u`!d`Gfd_`HlP`{Gt3|yvP&&aQ+DX zNd74PX#N=fSpGQvc>Vd=%eEtIdLjEHD zV*V0-6Tg|?!f)lb@t5-3`OEmr`78J<`K$P=`D^%V`Rn-W`5X8f`J4Eg`CIr~`P=y0 z`8)VK`MdbL`Fr?#`TO|$`3Lw1`G@$2`A7Ii`N#Oj`6u`%`KS1&`DgfN`RDlO`4{*d z{EPfc{LB0+{Hy$H{OkN1{G0q+{M-CH{JZ>n{QLX|{D=HU{Kxz!{HOe9{O9}^{FnS! z{MY<9{I~pf{P+A1{Ez%k{LlO^{IC3P{O|l9{Ga?^{NMaP{J#PtAOQ=kzzMt{2pT~v z=mfoB5R5{WkS*j0xxy&HB$x$@U=?hFU2q6_LcZV>T!LFD5DJANVYDzt7%Pku#tRdK ziNYjdvap9RMc7j)7N!c*gc4!8P%4xO<-!bMrZ7vW5M~Q=gt@{zVZN|HSSTzKJVK@5 z6?}qUs1mA$8X+Jo7M2LLLY)v4LPEW;RA>;wLZi?mEEAfA75Ka_M5>6IQ5l$6O6HXV-5Y80N63!OR z5zZCP6V4Yd5H1uh5-t`l5jF{%g)PEXVViKNuwA%JxLmkGxKg-ExLUYIxK_AMxL&wH zxKX%CxLLSGxK+4KxLvqIxKp@GxLdeKxR;!mkRDz}vR6@{nf=UU3*rc4G83fHFXcj>bmCPn+4ncDXnn%!lf))_8kf22b zfe)`F$V-rqAU{D>1XUAMLr{RA#RM%O2;6lYK|z8-1l1D+Znc4+FhPw3fhSr2(scmY^DnYLi z^g2Or5cDQNZxQr1LGKXsEm`9f*l0s5u8u3 zlVBIYZh{L4E+n{!;L!w+A$Tmo;|Ly4@C1S<5myo%t}1g{~ugW&xMK7im(g4Yt;}a4*4q1osm> zK=3+(*Au*f;6Z{9BKTl}HxhgZ!G{uj7{MaJgy6#oJ^~I#2tJD7qX|BS;A06sj^N`7 zK7rs92|kJ7lLK7-&h2|kP9vk5+j;ByH+kKpqOzJTBh3BHKniwVAj z;7tT?CU^_MTM6Dq@TCNAC-^dgFDLj4g0Cd_DuS;j_!@$*CHOjmuP68hf^Q`FCW3D! z_!fe1CHOXiZzuQ;g6|~wE`skS_#T4qCHOvq?Hf*&OKA%Y(!_z{91CHOIdA1C+; zf}bS#DT1FS_!)wqCHOglpC|YQf_D)7BEc^a{4&9>5d12^uMzw@!EX@!Cc$qJ{5HYw z5d1E|?-Bey!5G75d15_zY+X9!G93^C&7Oa{5Qe>5d1G;8NwpMV#30ue~z#`VFkj%=1)sl z*xcv|YapzVuvvu7CTtF2a|t_&uqMKq32Py&m9RF#+6n6*Y#w3r3F{=Ri?D9O77(_O zutkI&P1rGn9ZT48gdI=V351!O+XTsvOqBr zL5(dG@NL}a35WfSk$R7JNuV9BOLt`c*lBwFipn zYG)~$LU%9=Fb9EPxY1Kv8)@`ZtMuR`fPTt|^wRMBjoz9_sKMuNPjv)p#1D-CTp;8>*`hM|=U52XJ3NQy!xU_0W6> z%u{V`s2PUYP%TYYY!?^_*ZaL7hQJDsq?5`p!0`dZjNuT?o|bS#p1W{!psFzf!VCI5 z4ZcWipt8Z!5Ez;S@R@)yH5sF_DNw7lZi&E76j%>8HUui0;u!!x3&aJfiI+h?o?xRo zUEqtMu`{`GwbvV2=5GkcjSHMLw49vW(&w*iss>Gv_Qg~V$#me`fzF*w=l4|m8(`$Y zC4peIB0F&Z(01IgwzAfGLq31R8v?$7Hb$aBlw?dA5}7++3rJWY;3&bAWCBSQ0=2+W zAn5Zihq(zg_#^UiQ7AR3DPwD@5f(2DB@*^aMgkUfqiTFKdP+G=CsecIUtV7u@CF(c z74!M){lG@hJERkuEQ+y5GT$nOypAJPFo;OdQ>QAECYKUUOeU=M2SJdHe#vqGk;J+r zU}do8)ZGQ@Vw|chwnTiPI!{2+e~m5mSOdYB3C(1zd1*RVFw&0IMF|%rk5ygjF)kuC zeh*llaHOgsR0k$APz%diHlXq5KvPKJhOI+Sy(9!#+x^QM{XuD+L_GBYFs!vLiUh|{ z;z`N8R5gYDv`b$k>}?3tL(esy@X&OPr(~tcWMQudx&UJvH+JA3Y(Q*G%97Shq5$)f z0U8_pp2kRBARMMz8rO9s)YMqt)EEYr67e@Qgc?++DHN(W87ijnFpvgi3}G;3m7(QB zYgsdu(iSDtE(3$aODuoP)cr_DVGF5UEWNOuUkyCA^_uUd7j-nda-oU*{Z9&e4Z zGQs|Ns)Hd|cwX>ib)E(_CeV~qyqUX*CxOR}VHO3kBVV+qvwKjw(h1%O3~qf@?U2jU z%%QDZ39US}jsAw9G|uXVP*c4!%K0NU4K>4(RGKcLO`T~_>*AKGm$sagre(dqflhiT z2ic+E7cKKiC+l4aqA`kq?B6;43DiYhDjp0ZSUjA?dq9 z)I^EKB@r$2*M{n8CrVHiXS6)HviyXelz1sYCH5Vm zVS+-m(uM^o5hZnqNJ^=6-%cA_5*qtJb%$bI&1%{tasCw!CGVv`?N8f{Pk>UQO&`Rm zQZNYS4@_cMUCnDLO>qK^8fwP89E4y#|FVD=828i#hU{if3ckWi0`*F`sqocD+qo0^ z@P_JJWP1u89M-AQb{%b-IPbK90!rgS8bK>0gOtRP056k-8(Y)}TeFciOVrv}Gdaj> zsjCdts!DzsZ9X;uRaTsI;y9dAOiZ8%)YpW9{t)=8q4klden+M1XW2*;$EKiI-Y^oy z36vsn1vYyit{;i$WJ)v!)xbS?xDhVdc9=57A2&1wBTcXo0=-h^;WSDxE)7AfG1Yxl z$Y)X#FOsg_Po=LX7SVGh=uHY#sisDj_*){)OW>M4T+o6Fnkf9y)!zx1t0WK9+6Df{ z)6=6caZaX)fyS`EtF3pC?i~CZq+4GS9^6@j3zyQJBL(q%inws+JOUyx0@vsJpfuXQ zA-cAwf2aoq?IMa+ymPeXCC#nPDDBLh)4~B(Ye$!KX=iX{cWZCE zRHvY6`?5h2i0cXdO)3DmWO9RKtJt z(ilSF?}|(XR2yyz_&e$I4GQhml(ux|9My&^TiXthuTRBG_&N$OW9IJkj6o}9-hKvgC~ka&lq z^L23h4X&uKh2`1Q2X$)jeo0$z2em;8SCI9GaLJzuC|v!F_VvLkZ|ntih5$SrCLACD zW(GP5xA$SuNB!%-#P+2_gHs4V%fM;}!F8Ml)}u2WpKvy^%c#w3V4?yrIni{eaL|$|s<*Whyj5#&Ulm*klP4=3DxBH?>ikS* zT}4fY1qVNXRl7@A&AlD{QOOjJ%;pCaIwN!B1)JF0nvTbhDbT!(c!XyYTH%r8bWm`Z z1;fo~!FXYm;L$qkVA-^;9$~@2xfo!2GGPyv@B#3avvdJC+MA9?I9>z1jFya2l#lP_EY}J;RX(R?F-HoA6i_c=^^&A5?Lt!(%C4 zM%KCto_y#F!#(|hbjw34P_#vv47z$r6%=W8wb#PiH|dzuWj@%N)~@!xowz2gk>WLG z!XE5II{Vjn;cAz(hUNc)*SNZS+xx<6T6@#ZPfq6YltD*CGi5GM8Lg=YO7_z-XQgl% z#AOiRb+3)W`!4Bb#zB!XGO6;56a9nfpq!bHkzUaXM*F2}3hCeqC|qSGbF7>ujTkRz zM^nJyt^<0y+MCxzyGC;G+Hn*-v@76^u-WVGg*P&iB`|cQI~Lw)CsOo`W=WAnGN=Nz z2ZhSW@hMO{9egpxT#(7&r9I||PF`D*IT#H)>jwHd+R}}-EOW5Bjy9-W#2*nGg_Dc$L!b?s~ll*#g~@=ANNv>}3a9!1JXr-RYf-j##&t`7u8QUav2vwMAL z1Q)fCf@h>E!@$!`NF~M0XjRAT!?Ny9c%L$@r}AekOKF!fk_WA!NEwA&^=rEOyK6gE zN~_n?-kxr-ODJMSUNjyt9bAyYWwhaGh^~c)DRhew#CAFAUENb@zg^gN^sP*0#a=ZpcIpLdAt*`&R4*R=T0?L$NYQXavLI zj^2)RF#A!MjMiAVCmL;ABgHPOr6;`7o0m3z8lnddbo55seel#8B&u6`TIoZ#aJNEP z8XG8B25DjyjG7iX-=}~aOhL+aKA%kidHYe>+FR4n4ykzs;ZTZ@L3S+;A>2QxW~#M> z0?gVu3$QFRXjur1p4<8rb<@GeDIBA7%I_QQQpT6BV~lNkCNg!fVOVUIppYOgV(< zkOkRS3-1fZ-Z}>Ttm*~T1#!yzAyuAdP}~g6X0=zr9eQC*TJmvmkizTP6tjHi(j3C9 zhIEy514)56k3wW%&=OBKVk3u>Dp;g#{ei9?cwCNVQx)I~DR2hax#lIxc;nJ6z6>8{R<5ET83i`dbCA_=Oa(^=F<*TUs9T?ZLt7{8RMx43yOu&` z;G>%9iH~w-DQD5-y}0x)u%aP1P`C`dLGu#TFT?9P@XTv}lpY?%9kXa}reIFAB-+~* z?JNQnALxv3+z53DO|kkjrQ6$ROIMnfPy^YZR1IkF91#>s@|5#@?LD+*K^oA+%0=z{ zwDD*JuO&*S8Su)bd_LH@aid%<3$-OuIhexnL$v*vRPCYs(pwvl%2A{eJB8p;N-!-I z0WCd*!n!)Bs0dU-nO$Q`Qh}uQ2}(VA1nQ=S2C2)WVLeUhCZ?o=@-|w{Cs#q#4^_Zu zpQBXMQ&CC9m{8FLHKkAh1huMAAY5GwWeM@sgxVdHerig3DCm$XEu}KGP%|wwmW35o z1od+Ip@L*(Vx?9<&{&hc09pGrB`-`xUI!&|kx-E* zlTdlyBx$K!@u}7-%XMfmu5~=cOSv=~{Hh{WHGt)64mB)ESl2o&CEha?GjYUnrFu&u zsbQB$;|rs8*_1Tp!UhpQHIURgRY|pO6s1fl^RU0(Lo1u*H5c*2r4dC&7D|>FIqDDBtunw8Sre-2@6yxibJ-!#9kJ z*oBoyO(?WP;b<}ij94o3D^ZnOA1ZArrG>>8ds|MXl_~+H z!g>$flL=K1&0(Sg(aoU5u=o;)rHWUjAJy|Hj}a)cs-UE0Bawn)S4qY0iOi^+&!q^k z22*t|c`kVjVD}qBi3@)LrG&U=WJ-G5r6~}JJ*1#;?xEDl(vA&!sNdMFk2-4p6j~pp z1uvb@vwW?_UkC0GU}B7`nn~< zx&Y7u<_W5)fea!oC}E7Rt=831nyK-9d8PV$e_St;{g4W00YF|<%HZlLaeh28t+R#B zU+(udHB#%KUT9EyX`#*CX_`yQrCwFj z?M>TGiElf^0~kN)%9*^L;NqKfT}GXq2&EhyPpJ;0eo3{2l3?{#4(Dpfvn58#x+rZs zHYN5Dd+{P#Ln#ubAa%n7Xv2hw9%?9uCLp0$Av#>vNN_G)!}*FMrk66L8y;}4N|}oT zN9r!2qoK-dRmA-xbtlhbtPoe}Zat+)5QD6N$v)^H+Au+-hDI{Pmx6l;Z9XA>LZme$ znM!C3*GiUwuGdsSeKQzNg-E1C6XS`Lz)C3}t_sz{K91hKQmBrgRAb_)hK8Wf$4~vy z!@Ehf++$rT-5f`$#>aP~)X2y7nD9A^U}K;vpzbquCsLZiR5Zi)(YjM;Ye%Zq@z&~e z+H71xGpRD4E}qy;pCqL^i;^VFMtxHy+;CFMvQxN~$h2dPXZB0>qYyTPu06ewyB4zBF9le8;5K?ZYRO6GV zhHOKM`+2%;lx9p4jXcFEqtDAI!Pq1MB|1*k#g&wzFo~kUzal06HMI4-q}J+PKe)Nt z1eY`6@=aV<;9o1@Dl3gjhwcsPu1^W2UdP)NsGBI%o=IGVTf&Y0I=D)w>?`7UQf<$z zlyq`x(h&rG2c>f*(Meb6WFjy`$`ZVrHceI+svskDa37_TX0mMn%J>F1Zj9Y-^9O4@ zL9Y~tNWzA^jndD9lw$613bFj$#{n^L-`D48^ENkdddM)Onj z@~aeD$9v^xDe1J~q~7}4CP))Ch2uE|*Ip$>nu?@epwvYu+yUp2@;yGdrW6iT2f;2h z1{!Pq2|?XUv^mW6@aD4d9FoMV%8*ht4bttrlmtrI%Nvw5FI6w`7khMX({}ko?clPK zdQYs;@2OKp`5tWu#zWzy*3%S(9Elfh+%-19%~G8p5)YjAeU0@5{D*@sIvieaXu3-a+E?*~fe9wKY-SA%bomPmcQd{a_Yo}X#keU!G4 zwT0@8qA(Qyt?b@VG@+;lZlJ(5kM<(C!Xv#0xN#$-3mOA;Qkuo_^VfwMRLk%W?W=MZ2H$Pp1t5D8= zOJexyp^qoP&Z{~ie4sg1$w(@IV<_Nmti^b4>%jKIhAolR@f3MCR67B=DGWhVBJd;%T>IYy zTp#c@HbJPC2t9>D`*$6hMw#HWL3u&O(g;*bI+bGXhCV=u9;%a8U(nx3^Ysu=1m)GC zf=}OFAt#&Zq}%oS^4;Yc_I=e5_KwK)ED9dlbulM%4cDL>L$L&~;tTb2{#P=A>;ME5 z>f-_W`4o6Jv?H1Arm*rzf_@RjECx~ZcEH|NGAA`~!U)MYc#A`R_NJ=Vzg&v!;5-)Y zR>$$yq2Dzfke7`4PReHTa?DNNO%N9ijm=f36?Ir{6UGUJb_wR7OH*) zD8MWL*w9~GDSc$T2%b6FxKT~b(G5-=oUll_%|_V5)6-WeY22iqkLhbE%AUhe8l@*w zVxt7pPvdrZtEMs#qNIBaBUKql*Jnc-!az_Ov3ew@?poCznKzJbtU8-=DUhG^~B>G(l2aRqH^X6q&50WCg>>Xb1H1GpKD)8u!q~6H_;?g))dH zDLPT!>r$xtM(RSLQW~$LjfW4L@&ozmKvj#B-B(!}r0vI{Wl*9G$58V2IaUawtd+zx zw|--cpLmj36MF0rpFh_hMjMY$z)xr_A63E&6J9m+J3K`Pb@as;$>1k(a};e{l)eKw zGLvBGmXwaXKf|VEp5-)O2O2IyvHXfax6?!Bw6lI-8+b^M)M~a~IiPj83 z6+c|q>yvh%P+JWZTkv#+G|3Toln^YYl&g_mLRkTuS#Z>iu(%#;Ztqd&VP^9SgWph$@wH1u3Q7pzboR$arM(BuU9JfC^PZW)%*O-~~c> zSx%j_t0~&fR7sk&n1_YhuAskGdUHofV=05YjzUe`iI8e*m(@jT8$$}!jg+cnCsYyx z4Sp$M8#^9Q$Zw(KWf_pej6ft@2S=rq5T>e6eCcne2n%+CATOp6B!uc>FEvUsrJD@t z4~3n(DA=Am0h2~k<$)**Vlm}`B>laVbVdfGjWrN|`J|+-tIp;F6k~P<7)s?x zY8`u+;!Mi`rzzMFg6HIFL!o+=i^nMS&epLkQE5t3NmUW(lN2j?@t$r#AJUQPL!%FhnZrZj9JV%b4IPU8q-uBNOnBi6tufFDY1( zFB$@iGp=BsVLd}MK#yXSEolVui0a#4`fqlQ277+65U{c!IEq#I`C=zsurc&V#YBo? zd{5EJN0Rgqh=d2xQ{wTy{wE4CqIRUD`*r7C$0RHTRv?y06`Y79gdBfRh$QQfQnK}) zFi0`kd;Cr5lU!CJJ>5uy^J|j6*FvA>F))-W?P3}-Y!J{%2P%*s8gdZ^mQv3dN#e4f zi#_WbJ7bNV(GE?WL7+fM#$I6_4m!M3rYOOsclq+PtJ|QXIG)rDCE_R=FC`eL=Ycpt z4g`mu`!pCSUYf zvB#W|A{Hk_O=F8dtVz7bCOlS1qDI>aS^-6ynJJG6XzD;mQ;>>GL6m_?M^BOyPFc*!;UJ?bQsQK+P~4^Pze^ma?HfzkX! zj5f9jq|DTXtHW?orZ6;w_)jAi^ zyX~~{TN1crOh6Jfa0f}+zSq*f0GFh$Wk1DAvf3kHft`hS5=1@_JzFkK8jpG zAnnfMiU$lUC~j)K>>F_c{dM(lL9R07Q%-XX`|KKz>gcQBvlet)2B+e3N)9G%sKCLn zAH_|wcj?Ej;zAS-hqKDuv{97GOtmRaf|YQjE+q;Rv!;es6fnsbre`Y-kd_<42vdM| z>^7HD^qc~)lL971I2m!Nem|fJj1Z(lLQU059>vg2QN6n%OuG9@!DlZ;ObU=Q<1?io z2Pod|SSBfmgv*~$`cWH^EO`oMH&F15*LmF3t3suPTEms^Q(L?K`!B|f#P)4WgbHzm+ms8%%cJf^>I+17AF=J|9Fa@v3X9Cfr1Zl zR%1xo7pb@>QQVAeOd8yvzgap-RVM6I3YwI6$!Mv;oBMJ_Xp>S>X*h#|?asPYHc#?i zLt*ah|0GGJx>io@!Ew1N$@3`g@=P@#ZpjX99+fPC!a4mUiCllLuzw-#rfE02p_fP{ z?V=xFfq%x8Y0GEVN*|ZdK0>?EM;I<#c|)~QdfpGWRiIA6-&hlZKsnBfZ=vWJM+B;6unex3MC3vL=($e)_=>T(hN4L?A7VpZaXcR8-FNgRvWeXLLut$Y` zol=EuxRU~BY>eaPwn-`EbzAu0;1E~$?wTIytp zv_Vc5TLaXYz(sdBs*QNy3ks8dktfPZj$i{p zT1g!VRaL=l-cS`Bio+FgMPgr5#Pn7unK3wjlgckt_ZRjrjd;~kM#Fa$F6qo<1l53p zlal42AF;2qsq*@f;-n9LQzUY!_RBZxA~fjCM37D4(}yAn?5dKD1=Vu#JEX=Z8j&MFSB z2yUJg!C8}X1Vya^g@sB<`RkqZb8X=o_*9t`PAYxm(>@x~hNKzwp_)ZVZ9r+EBo`$# zHM;*79l(K%^ge}8I(-3)4j=MU&xVXew1bT7P)aG$Bf83lfDfFQSE`-@Ukj2{1T>by zC-`akFtZ3MSv#aB?7$_e-{MU;ij;~@<8K%mCs3>eg&P4&t~-jIkt$FLZ!{PuQ$YFq zHL)D|2!P2@v3e2^>#!0XRR{N^JtS;d{!+)WbjTnb!~A;;3?3n@sZw~wV~2^0Y?pfHOvgn_Vy4qOdil85V|aHTtk zlQo>qN_YHfFQ(}8{}Z}`RY$Qr!?EalkRXRZU*CZAR+h}DGEg~T z54Z57XO#T#CV+xhPw^J+GM+E63@)@sDqH9QwSpF=XqCH+Cf@`GzZ-;zR62)K0GClf zZ>E5a0Uspdo2nr)f(tTg=3m-%D2Oc-u_9B%Apye8HOTWTFnd#&noMC58IwNIDm}p{ zNzf0^4XB?GHbyAylHsuOv`Pn$(pSi&8%)FJI1~nB0ALZR$Q{1#Ngb8K@Jfp8+f8K2 zTm{2kP#*ZUvH}^UkV|(DQYu%JUIvRjC<^X0_BZMQig69aZ}^|!%crss=}T8_lmQ$- zJE+>d4yfUU=v%rl8Fv%G*hN8S?;dEiS2;d19!PQgyNwfp%?EvXDQ>m*Q_SG*VZu3T zrF0)8ren$HzQ*+weDUsqL;b8&+z*FzG&c0Y+ac;S9rRx$Q5TRt3J+)0Q0XyrU&MF_ z#jG2F*|^Pp;_8)h4w4gx=vjIe2v|R0Jc#je@oHsni5I7j+-ncm~=?&6g!mwk!86gZn5k*2@s*!N+Pf= zBgsh&0W|bGdgp+H*a^M&-r<0whjwuE-g~<{$~SLz->Tb6%=f<>i7mbPy*_W=yeTn9 zh0&)IWE$R`eSBRL-H!9eGpJ?WhX~cI6POKiMWtU#5D% z9W_vn?jDAEDr7k5mX9|0`YCx4)icyC8@?Vgj9@1?@r0Pnb_roqj)g?=PoKr%vC&Zh zb^CZ1jd@*;9w6KmBN`iYeqzQ3Zsr`!0_jjJCG|z0&+Im;2Jf@JA})YSw(vbl}#04j*}v+p{>9*U(5KezGNsNiumb9=1O zHxl|#r{IpEFUP}xze$e1g}{e81>1W1m=ij4nM`5W$Xcr?UJ?5Nqs7Pk*hk+^!1Y5+ zXBuESxlk9!9N4N*C&i4baHBG3&$tW9T?D;+C!lp%I|h$-Fk0v+j9DC4$-Pv`V$a6F z+DOcMsq>#~C?1{~KZWy&CkSp)nx^$&D728j zrvu}?sm;RB3oT8t$I3?JK7|Psh;$#yiv~*(%fv2 zG~FtSV9CvSfk0-af~byd34V2I2NSOUFA;e~3b~#bL8T!Ph!l5BR!cA#8U1R80ZD>L zqGnEV6f**!vG{BH5{EJ0XIgSgP4 zqrV{1VMma?C7=Na3-FdSxqJk_CZGkwwE<;+?f%DvS0{`0>Wz1CAN?KS>^~e11s3N{ zC2XOxY0(X=bl&nKp{4HNq=8LAOGWx6yManUO7?Rc{XYVlozg+>!oitSY|-KiFwVTL zf%=^QQb#%&fbSg^8XLI@s^H18fRByYNH}wbZHUH@G?i0AbV{>87*mJENVIr1=VTaz z#Hg<-KjL<5@d01WyJZ-IbO2hc(zG~c!f~dwzpb|;h}rMfl~nsNAu`5*;IpC)Y9;gd z_u#8iEy@WsZtg>CmI<#Rd%QN3(kb9mHNM2K;8cw7*Wt~!!CAwiV8vV!&0`3A`3SH% z6J`(Y7;p&Vc&=oQIPBokwz0W@Drp-*CHli7i|>eUWU9MB16~?<9X6_C)kx~l+~&~P zfhiR-oVsQQRn#()inIU`>5p~u9#lc=2rAIjB4}oZW@3zwx$2udanYE}6YUsJfBNzy4~8rUw}Fbp?y{iK-;0?h|dEI^t1N*ROgE z^ATjv$2xDDMpcY#ub`3&B^M^h;c(%$#EMYgj{a+W9hXrh?IV~PRJda$%$bht<;V3#o>Y z%rt7!ao|_6#mYQi+$(CGZTO+od2=Yp9J2Z2Gt0rk;#O@nA800B_K2d4AEbOFO_GFT1GhGm8p^Twzlng^y8UU~mb zrJGovO7Slg@k)K@=^T#udLj#F%$QeRUNL{xg7VVYvn%J7R#eU{FI_O-?JS+^tZ>bA z&z?1F-n_ZIm4};;G*k?lk1%fr(<(3>Flau?d^DI21k*Xu&Di7h!EnUi>Fx|ff}t8; zSC>E3@0F+G6Q=qRdPr};q>yO#;dl0J3Umc9Yqph&rIXzymE0E^G9~Do~vKRsKZ`)fj-vr`Fc?&7>CUVV8Fc1P%vm7G;amdS}?5}G+$=E98BxMbWGIemG{Jnz(?VR zz@dIj4%#(COBwA7b_GLaVWw)!SSHN+sFvZCU1PqURd%iUIxq#mbjYCj2J?+zIuuM@ ztgXogy*dqR_0ERaR_TZ#@op$z|&n;$ilfhhu}P0<$ovkpvA{0DpBh*hUHs*LTN>R=b!IXF@&Uw8TXgP5k4 z_Zz1?6(YPoxY5}cSsx7H*QpTfYt}zkaDzXD(Ux#YrBt&q-|0J zBI~yk&-$04VM}z1A{@;T-Y~yqC>Sum38wx5^V?uLoDE+ICa&#Y7s90Eow&UFx+3BF z#PQ+O@0&k16l^trVE)kj5txnu6Y`WJx0*jOe`=f!rlY`gbo5{bI3uM$y?PC;!Tzd1 znEf70YV4IK4?&@}$%Fg}2YFmd!7%RiHNH^U#y}@_+x!i(>Tit;4{Y?5_4Nfh*YrpH z;U-xw`{w&!4m_(mdV2mzmp<9C-=oph+s!{<(H~QbZvWzn4?i{5eK6QO`O=rJd;BFV zN`v`}p<%%MA2305iu%E?hK6m1Y3iS7oAzglHdq#uMWS725oy;Qi@VOU3+=k&*cc`6 zFHSbvlE*g2y|^Xr(>BK)v=eYYgyXhH_Z60WL%E^MQp7fg#SW(9qwAtAU^ z^-(J=N?qKoNbwBnIA?{>>7&t$Ws-wfDciDY}~Xz-6hXjbd@LjdB`p6iY2_ zl+#l-iZb_Gb(|Uu4RH*a4^|6)YVlZF!E_dw&W=u*@L=!32KK)Ri(xVS!0TLTS(P9T zSPrtRPW-@U>A*wM@JMvQfbp*A(YhpIS!Y?FSn^N{N)iKtG5XVhp&X}`%N&-&EO?q< zW4O!`Hr;CJGY2dig%V4@<#5wImd()$FkKjZ7fctU*a4(Mg(wUXcxuq4e7tAcJbj_MuTJ9=$&qjBy^75H;;)E&7`6}wAUfH$dt!3N^ zxoP}q8f)*xD)ImxiaU8iDod;9m(Q=9Sy5dvXLdDT^;cQ0;cI%-&C%;)EAM!yK*Y&-I2tPoUe^o87rS z-07SS1&_BR0b@ey!POB$36Z4NvLH#4>5#&4rMgg-7*VffURYkSyvqIq)2(2-P5m2>jJIXnaCAMgyk&V8S+3=6%R6Ag1MAK~%X^mh z!GyDYFFQVpF<*Pcr%Go@(na? z>^sX(cpzE6xBOuF5lkp$-Vde+wpxC+{KBM`2f_4^Dz#)SgY39?Gn~|7`NLqf8d6WV zDZV#uUiXW$>%?33{UBsKtQHSLs|kw=sYSP~EPCgs6^*xCS^a6wgt13n5nVlD@pw9* z4D#dJP*``hj;3?bx;r};9~)x)I7O~C5BIm}yXbd`Cy}+tYD+k?tPbng#1BfW)7e?| zhjqN+ccZ~*v`#iWYMp8vWi%OuXg!$z8C@D}h&F=hspvv5JsoX|Hb<9TV=Yy;zjc;% zwzb?^VJNfCWengM&H!Ej)9YaRH<;dFJm5{02c#}~CPC}l{Lk8av_q`>;tsLy2c~DW z9b$Fj4zX5RUF<(FJqM=e)xS~nHhwMd#m91qwE;)py3~rD#|`%4ptaH31SS;WU(HIw z8gdu$N?NTeaJ3t!8%vF4(N)m{q6coZuC%UVOZ{aqy~39IcI#?fL*CRi^y!t~{Ji$n z>c&&v`pR8dcdLgjw>4O_BeiJF%f0unoZ%X{zxt{B-aq^CN?rD{uC)eOFV~Ga7EJ$& zZX2{7V!-RhYf*pd9^LftgvCqLHOiZRm^GxXBE|Rx|7?S`UtP7E*s6UCSFQCBw(DO@ zLF5!iTaPnTY!hY*vxM0~IT%NQ(F8_(1{AkhkGGy6%oFB=2^kd%ODNg3u~WoGx7%_u zTj8g(%C6K&KZQ;DsbG39I^`vyN^lF+I51~e&lKu}C1CmhO!&0EE0{bJoKH0OE&9)6 zAM>`HXT8u+u~ldinyr5W<7hCN!Svx)>qXX!t$zm--lIMS(#@RWQwFdp z0$Qre(J8~X`*PN9l<+={PT?)O+IkaeUxc;7I$^yK5DpR0U>d#G^1+DjYUp=X1V-EC zLbvr6cD1qIZop@XVlaKC-W9&Ue>SV_xLY`Cz^otPIh5J3%# z_AJShLwlR?rGmXtpq>x4YSxE@qi#?}m0KUSK4N{;`k3_}*2k?+Sf8~1)B2S4Y3noA zXRXg!pSQkX-EMu+`jYi!>nqk*t^cyVW_{iIZ|fV@H?413-?qMEeb@S)^?mCH)(@>8 zSwFUZV*S+mne}t)7uGMWUs=Dleq;UC`knQA>krl+tv^|Rw*F%MkM+OS|5<;v{$~B% z`iE?gjq)hjBnz@AOLC69i@dA6o4mU`S~klT*(%GjBIn9u^4Bu|#7$W!IL}?Be%+J z@^ZOdULmiPSIGy+2g(P@t7Wfzu*V!vKt4o1RPK_yZ@=5YvyiLALzFfXS zzEZwQzFNLUzE-|YzFxjTzEQqOzFEFSzE!?WzFodUzEi$SzFWRWzE{3azF&Soeo%f$ zepr4)epG%;{)hay{Dl0Z{7?BQ`DytX`C0in`FZ&TdAt0g{F3~#{EGal{4e=6`E~i< z@*DD-@>?i_yd%FWzbC&he;|J-eelEO(|CFibENzj8pbdN|Zg7@yY~cqB2RDtV~g+Dtjq=E7O$eN~uz& z%ur@3vy|CNxl*CbQRXW1l=;d6WudZs#rlupI3tX0-2 z>y?0Vh;pdXrF1JjN>J%l4pTx(Scxco$_8blvPtPz4p)v)HY-OeM=3`uQ3aG^lw+0S zl;f2XloOScl)or{RZdn;QBGA(Q%+aTP|j4&QqES+QO;G)Q_fc|Q2wS|s9dC6to&WM zM7dPiq6{d5%2s8Ya+z|ua)olGa+Pwma*cAWa-DL$a)WZCa+7kia*J}Sa+`9ya))xK za+h+qa*uMaa-VX)@__Q7@{sbd@`&=N@|f}u<#FW+Pl(&_4ly{Z)l=qbnln<4Ul#i89luwnDxUv> z>3?AQ6->W@32)JVfM5W@2*M~3Odtp#h#*KH35Nse6gJ1{20m4`i#(}U02qhrw3Bq^~CV(&zgh?Pw24M;a zQ$g4ZguOwS2Eud@N34+yOw zw1Kc3gmw^CfUpvTRUjMycmxRtfv_3`F9-*N-~(X|2pu4Fg5U>XEePvCSPwz~ghK$& z7@-S^;YbjU0^w*7q96bW z$AEAw2*-hNJP0R%a3TmNf$$d){tCj$Ae;iisUVyN!s#HK0m7LeoCU(!Ae;ljxgeYe z!ucRv0K(ruxDbSkK)4u$zk_fI2$zDe1%v?*20_>g!Zr{t1L1NIt^nam5Uv8@Y7njg z;aU)`1L1lQZUEs%5N-nDW)N-x;Z_iC1L1ZM?f~IV5bgruZV>JP;a(8#1L1xU9suD% z5FP^IVGtex;ZYDC1K}SaJPyJWAUp}eKS6j3gr`Ax283rpcn*Z;L3ja#?I64e!b>2$ z48kiQyb8j2p@p(AqXFV@G%IVfbb~@ zpMmf>2w#BkB?w=E@HGhEfbcB{-+}Nw2tR=EBM3i%@G}U%fbbs>{tLqYK=>7e-$3{s zgg-zufM^796o@7e1rS9LB@lB!+y%s4LEH_*-9a1;q8UUBh*l6~5ET$}K^y~O9*FrM z7Jyg?ViAZo5Q{;ygXjQpEQsSk+ylfC5cdReJctuOoCxA15GR8;1;nW!?girBAWj2u zI*6qpmVr0}#F-$@0&zBoRUo=StOl_L#99#RKwJXiQV{DwYyhzl#3m4%L0kr63y2;NTS06CaXE#7lZhB5HA7oQV_R*H~``xh+9G22I6HPUJl|FAYKXLRUlps;x!;%3*vPkUJv38 zAl?Y#O(5P3;w>QF3gT@b-VWj&Al?b$T_D~K;yobV3*vns-VfpfAU+7FfD_$-Lef%rU#FMzlm#1}z)3B;E{d}2JsgV{{!NGLHr+xzk>K1h`)pQ2S^5xj3A8y z$pn%Bk_eInQVvMFfV3+}yMeSjNTWeAgJc283X%+x0#YtWV?fFSDIcT)kP1O60?7ta zF-Ufh93YJaX&gvspv47fMYZ7EBUymPR8C}e&+-ja>4|0()l4%#rF4r+&pV;0mY9Xf zWe|o%ozMjLT-DBUTyiP0U#AFRage!qlNyW9q{)S2F$LnJe9CW-n?n>+jLtB7G1crE zDC!$?53Z|b`2pKn>a}bTyiuwF<#e5jS=m%!Xf?EnAXgjtMYPO92W zViUCrH7f%&nxGVGm~PbV!9ct*L#bTVDsq-ik)|j)aiNhI{;Qf;w>tGW)w!zW1yD)g&=ZIkdu!FQ-}*PD+D^i8^oq zH9Kh**q?j-=Bh@56&j81xS>X;X?3=s3zB|!Q`2XYpKqKiNbY!=<2k7i?aq}LNt@4_=GSS-wP zu4;T|PcF=&$0XVT=c*QTdnK1l&4QLhr`p7gO{R0Bb$bi;rEw{mDDma0nzv0%DXS*h zB;O&PMvRlFR%_!kkf^Q01mkr)qi3#agf=aiK({KY!{9a;7lXMcX_>irRjOrK3Z=HE zSduelZRK%e=#*OAn5{bV$yIH}Qr3jdR&<{UZHb{>F4}In(Yjc-V9a&Vn%FzJ-8zQ4 zkI4#|tc|z{QLbw2H6@u)H-AFTfu_r3&lucElmx`GBF7b zvIAnE3G6_%)JoZh@y61+r5JOw#4s84+@3F2HQkz;+?HzQ3$5;CkE^Aw8EdXZOGACS z4xo9SolNF&Ink379Vg=Y&QdzZa-Q&Ix|#qMB?Gjg$0p`Qt3&5Fwo2ow_M&MvrhiY3 z)|u-gsM2I8ZN+0p&>&U?(vob)?d49QElH-OkaTFK%g39ydL0#a8r9TeS}YtNs?U1X zp(7#rv#8eTE_4FpI}`bzv!;>7bYVV#EY+nxjE4~3+#SSY;BkHECXhm7mA|(u*w5@r z@H9e(+Z^w#mD@|D90{eI_2}&0$ofg1eY}_9A&XLcDqeI06}4wTjdL=|?WdAcGn7Qf zWtwyrj+MD6=p(e5$ZQE@YPL|6TjC^wqp93p3FUbA>M&YB{27E{sdPqr4AJeGK!+1q z$!=E^|+!;*&EKZ^l)DTN?Wjmt7+F zWFnfFM5HHN)P<@z-hCR8B#v%X3wFF^DLU)KHBjYeeEQBLvf_lAxV)6GB+eP4V8Vhp zp9+pki^!G(#l_;)Ur2@X5(=ZwZM=N+cPf%N|Gb59p^e%ZH-4KMlo-mZ2yfB8tQv z*v@jG4@LAS5sf$2`h93W%HsU6DdXoci*$yOldExE@d19E2qtDA&5uYc-{fBQOB4R_(z$o0v5dGb~ zkys5J?L|T>9UiTHX}d4dvA(INtDn=pLbP*-r)~70(M}IDUg}>H^o2UB(fEmjyhb4V z3=dMzdeaq9P10RxT)Ph8TKju-q&EnuW_YAF3ihobc{=<(XeHbeSnCf*ysFD6n*!dx zx3e9fdQV%OyUWkcdQSTu(as*eMfILaU&o=U4Qc!ce@Fmxh6iv}SEBi87aAOsZD^yf zTOXEB2qTO2;;LV&t~hmwn?r$~jzF)k3-e@$!@NuQSc$5Og~PX~(No*k?dxg5-ReUl zTvxESKNMKEULTvU2q=qrM;Y7K*VD1y(-HFfd(zC%w}do*_$KK{`a+B!rymGr#_%xe zYHkdyiC@M)6Ll6d)!>idkotPr%dWeJ4NWH>+y4?q7R#m4lYVl3BY^5`y1?3w?j9S^ z`ZrV+?8fcc7DhAdDnA-b1&9Y}tr}w>PbjkM|g z?hUxB!kN${Ld$|{H+m|OnMZ=b$a-hjMqhtM#9aw73sw?`*o+}fd)NCzzOGE|MB@eA zJ3EHjz8)v44kyQ-3DufCs>|1fr#Zpzzxk!JeMlH*}kL>xUtI;3X z7z`bn39gmkDzlkm{+cwjywFa7jXMtL?CES@@9!D%fL}%6O*;bKikH1$2;B~oMsH_e?4mE7&I|y^XY&y^Gm_r}(YqJNVfWi%Z;Xp^G-UhM< zYY3nhLht%uPsUx>MPON+b$Iy*4t1mi2`HQGTkT?Zv&)^c(~W*#Xia||ditga?4evFyKG;qUTB2FaKtS%8cYNi(c zm9VO^VFZX3+`w+u!_4og**DLF9^Sza9(H)~-r(!#S7Yd-#RcbmXY2%4rmmh%SXn4E z8a)!}7D~Z+9kC73&ot?N^P<#u~!(67O zUQDoA?GF`J_dU;qcqt(+$!57MM;%De)3=6cKGyg{TCjjjz=H&w)y8AKox_Qnml0f6 zbGKbJ>-DX{Fc%Tb zPtUi;^#qoMnpg)T)}reBILJ)|Qa=2Awo&ZkzHp^4R2%3-)jUVIl@PMfuEimEBK^9i zddwXJFmL!K;I_nD{h|I4liP8W>-`)2UA!506G|4R6gH!;mpubu1PpevuEncq6T1$v z*vP>ieR%I9z${qzaDd)GvybZ{$2>@=b;EZy3sfff@a{iCxLL?2I&PRNASy$_jku#Y z(m%3oAx?)nkm35k2EP*plnt~#t3$YSaX8ickUpMI5^ff3v&O}7W1$$>mXDKzcw3() z%!=VhGlp4%>M9mChC@6@5Lqy^#Mce2=lD{Eo3tZR*VBuEJ4l<#fwvQI7TUS?rM$m! z99fsSJ#|019)&WCz^uAA^-4)-2kJor|JVLCeW z;rurtX2p~;zFm!ZD|--qVX$qSz*gQRkgNn7=1pIN&s6wypq4__f46I>RjLHknuTtJRn!yGqoASerMiQE%g;U5)vYN;)!>L<7`a=Xn{E9 zCn~(B5rfdM*9;6Pq=%GMtz|KDr!!`VI_5uAetf#}ml^D7a|NJl`X zhZqA4Gi0}F(eRQCE64mn)O!s+qhiLGXwilCJZJ!fwyJ27TvLyR5v;2oZ58G1LiA;6>CvErSz0nPwWfA8t1u0g zPP}{OuHwk5#M}fWZh-SFL^my6rKv;|xQ{niA<9g1>2Aas<4S@ zyokYAlZ-m@3Nv?0CBQ+{>_Fn9#O4(f-PjCuHDZeEIydjgSSnkRt}L^_@nZaVG(Xjg zmr(JU>58*y_O{ox*5cyGV1S%AfynnrM~+Ek(QrFHgJRxfDm^Y;X|nK6==5Gxcyijp zt+iwmT-n;xR3C3*mp7e=(r#fjgIax6Lirg~K5h5o>|Wh86lgZi@=C>p@6DS{AJMk?QTX>N6e*yrhv>=w53ren@?oUbY!^HmbEn@iMA)v^1O|$ zQq|&9w^df{(D)MBhw##F%@()55cP1`iTip#BA%YEF>%DIrTWT5Qs)kl#v4ZGRS{|0 zjg3Qq)_+beV#?Yi@*!DC^t0o-n3=xHi{_iomX!(H|3Ct$91ehN_)=P-IjneVo0@ot*$sa<^Zq~*%Mk*BN<9sXu=q8Tb*|-(Uis4x0$ z-O{|YhM^>Iy$e!X6+79IB;|{!?1Z$~vF61O(IrHYFa_xg4p6~_iH;RiMH3t$%@7@( zH4+Y&ZK>^wBPOQ|=HY=EyZKyPF;sO46~!#G^&!4`sOr>tOw1vZcO6kA41>A?lh2?V zsbIpAiuEMcF5Zn>sQBdg31NGPu}UnAZY9fct=CqgeKRsnPINmFO^GMsf)zI(u5PMl z=W(3%dfr_`H9npy)&))5?=dP}l&*9O-jK#WFYk4t8J|R>PH|f4^Gza{kVL?x<8)QLLlk=?QM9;MrNw`rN-s(( zt^4|6hMzXn1)%dyTvd3!R-!8_Nu_bp&_`*Zba%WRf%=r7rYE&Z%h@vY2!BDOd!;8G zVxYe!I!6*6bD>j-kP-2v^&J&WUM{pihN$32qGB_N8OH(<%r~Zax49c@Sq2G|f7oEh z5)9=1LKOR?QlMLL70RZV7e>vA=xuJIEG}LrlGkDiCEQUS+*Z0|@jpV^GZo3@t;8I$ zRVcDK(NUUv6z2U-<)@~W*DGqn8#Hnmls99ZQu#(AW7C$@Mcy;gPoW6ZLZWrtshlqm z>5NoTS95(Es)^b#FHNkac(h}}=N5k8z4QJswlVpg@NAQEUn)un|Gru%r^OT&cXcgNoz2&Ww*| zW;51SSE+mc=kGyOxVCgEaxz~@y3V+^@mj`HdE`&Lyehn?N<=ne@sdmaBr1(7k(b89 zj^+En1Qc|JGmm1N>1MYp{>00lN@QbWWGvMN=A5Bi4vA?C^QTeSgLqjrJ9vo)jsMmJ zHOY~bCAz91f7YMYfi|4lnnq+rabmif;)~B-1=Ur#107)b*if)!7Z4`i;Ha@I z()x(ZBfy3o0Mytf_wvIWM$GpT^WRm~HQ^lx9gKNn7ZUc;kz-fZx4BVO*jmex_x-bw z@q*71{lr+=VnVJRd7E8$vuxoqZN7_Om;4E^c<;lkQTqH<@9;>Z?j8!BfH$uiFVn~J zF|H$I?+!FM4YHOKEN(qFvuuaRMOxKcF|VzjYHR;fYUARW=7Jt~LN-w?`|dz3+G@wG zgJ*PORb>;u0_V37R^yIi5zEweO%>{y*rOEF_p&PuAC5Kx-;sT;HI&IFZpK2i$>4x1 z2yiF%Vti{cr#lLqNliU~kauEfCm^?ZSZ2M1F<4E&^&=bL<~kRp@JodD5wv^9q18|b zZk8?+$C&j%--(@sxfAOFMRYaYV57UW9g{G#L%UJk9Xj~BogL(4HqF#-@iOBfJKJi! z_tl`-TjL#~)!hW%wBy5^+-h`#Zf)WLarlz%{jPT*On}-KU z$lpMir8pF!0LFu2?4%Z77*QFAv4YgFH<*NV1(WRXJr;edpLlAqWVQk@0~Ex31IUCE{w#Y#5i(F#l)*n1=wHBBhl+mf9P`oNV5# ztLEr}(||85Ot;yJS9mRLny0l*e;>;~hES%bptQ1(DOxX)^^@GLUe)vkems%xokFTN zAXA+uWgx6;WIfiOMOB-%`a#OqDa z%kUL{4v|jF)MUJbWNPsF*-)l!?uA5|Ix*TXQJrZU`*$MTGo`WWeS^pot{PjY{M3~4 zT9`GqaP?J(>xqxaRw5ghLPix(@H4b+;Ds-z!c)>0u17P7HYT0$=W#A4AXAaK4fyz%bE=Ln>v=daX&zd0!-z$k~?);mz_QaEDMd)!OUVol{ z8x@|EfS*uUeX7I=6E0o!yE9D%YQz}E@RM3|4;3!ST!E@_=Hqk!aK$~SThJdG@*hgm z6s-ZQEvin6V?RoT_srZBdg6;oS&visrQ|$Pf~HSoGlW+B=&%=NH&C=YM2js9UBM>V zi$MvI!82VA+F{hK!pkfk)U9~$$Df+8P1R@&!&~xCLSB@J%)&xwCP~aBl;fsGR*O%* zo&U@ZK&_ZR7pF%}ch8g(7$^{>U!CPWPf)XmX%&kJ$5gy%D}m3S&bY8T`7aW{zF7e1 zd^>izNPG*;e}%C2-w`Z2x_Dr?MCt1_LYtKZT9uYQn9Ocme8S$yx@YRaf=4MT0QvF2 zRN5^(mva8wS@(?DK(&y;2SPQ~v^X13{nFHq*e-q2-XpZ(mJ*vZ?Sw_!u10q~i@C$q zSiF-T64aDo2C2S&d4spUwTV-GLR2${p<)eaaWjQ2TRX7_zx>aMygUnXoDr0S8&FeG ziDIfA;w%3vLfCH@1a*@(p+cykZk4L=z%ivu2K$Tm=34@rJ`5P^OS^`a{FyKoWP!mgN7Apc{}RrOEO6QyTbeMOTzykhv)+o|hVNL`9meuUA}c_o1*C&%o}4$ghzREmMM&mzWPiw6Zn6bWft^s2He+I^wGl&}g6y$b54Bk^j!2W3LX1>h zyBe{J%$P8gF50W&^%tM#HKCICW={f3I*Vdpam*FjGwx@U2IwhcrkP`2Flwuh0rR78tE7a!$avQ@p->sZ-N+db)=;$9lmO9 zgqdK4!{V*R7m;|8qhKaMByoqdBiros;3y`Y9tGt@pLAp;($hs655G2+Wra9(!Ca!s zxS3*%4Fx*(pn{?4Vn;;50-|0x)QGF+oMu(agN>?hv~g3nh=7uqJ#RcdbhxHX<3gZo z#fr?kdw;@lrf*Op4qx$1!9XVu$^oh%*rY4D3n~dO!{+69af{xCX!>J|KFDrD$uPAU zP+HI!h)+^2(bw-#ulQpmV?{&k=cNSQo)KDgV_-q)RLP#%v3oI-x@vdDSiBm6maM*X z)q!S}r4K+O)l!pfEvl^ti#zKf11x^9YljgZmSu#RffwPhCbeCgaLtfJm$o@tE1}KJ zwv7pBdPmy{WPY|Fyrb;ti5&vGEvpEoIwMTe8kWu+9b-yed}g%vpy{@Y3B_qv;Xwqt zI6Kg|HBFGIi~3-KOOlM@wrrX<(m6+Pi8}X!4#L_eyQU=^SiHY{hB8 zyW6QxLV%!>_CAKF=?w*0G%(UXXtdfTkQ&qAsqx@T8E;S*p)@9TEeVAUHXbV|gtG@i z7Q|c+BI?1-h7s^RxQFr3(2g&CxdjP4>BNf}H6)A_GC9{$FJ8vk+oS#_TM#0M<%#WU zLqGVnm{hW}q|(3Mw;>P=rC##U8iTbG8&>JAbuO=CvVwl!XG&0vX3htpk1AR9Cs)$g zR$uR|#6aD;6-2=%swinuYPQZLniN%Wo2P=acdU(i@2fFH zJYCE1Ra{lc;iSb3916}O+$4UNx$inIO5yl8%jf2Agi@L9YKj}dN_e`9H zq}x}Tc3w${Ndj_q?Myq6*AU*$a3&^1BI`!ek9sfT6EaOa|OWcRPDYMV7cA^?`B4w*feYR$r7<^1{lR1g{cFpT}nd)fTi8?&!aOG;MXX<%3daIzF zg1fc02?gc2Q~Y0qp0z}vFFB2&q4#`?zS90pSXuAnxIx!0E~z`>ErLwC$Y!;8ndrl< z`3l}8n5-E>e9O?7y3SSCg!a@rGf(B?9}xb|?6Kw+XH5fI0U(#<6aF!QtLl0LN8^!Z8jEJ10~PB0Wem_g?mZnOf18 zRMC(#993`~5$o}1|;MP$6{=v?V1f=p6<3_aL125pV1f2+D!bh!Tz+|Gz)_{8MKXaS_v zVus{=>HWIX4J6e7UkV)V4}#lq=A!ukE^OhB6 z(=r_k(;K0+t=>hxVEL9REGD${$`W=#P9C-vv@^k25cpKl(?D+S^oJjj1S`s?k8v)xymK3MUX^W-gT6FnoVQ zIU;uadECpqF5Q%|a5BLqy_pQLH1OeM<_cUNt!{jhjoG>s?nOA6h2J!aTw49AXPuXn zo~WotB_*1K@zpV%Kr<_qGJ(cLG0=o2vhn1wGYB^G9V-*8+DLwKY6FW>4|-X)#ykTH zXYXXI37%hOQ>2u_IU{Lx+^vPRb|t+_X?PL3>QiQ+my zeQA*TQkA0k5L6L-W>F-ex%$XzLN!_vs|IEXE4YRrGhgG=Lo#JM3Q#ObD~IK6Tta}E zxk>_HoDfF+X4%g$eivRiIa~w5WxiR(!IhxrSqZ*1@h2$a3IvOmlB$eK>DoNCb~>38v;wUJJQ}rIaGqDW1*J-)%-P@j(iBfWT;p!=oAwjeGRUm8WOH7BdS3M_7m_T z9y?LXsfpRhFc(e2kmCC!CUH&D=r^O~gD#k@C#VI(Lm`ZAaL8;I5)En!4^{h`EzSxw zBS&*nHLeQ_D8V8ZsAq7Z)o5YQP64ajkmIV=Bmo~r!1J?gF>}6PLNa+D$AzINj1bJ? zEMZV=p^od~ix$dCpW2NCH+y(Eb%oQc#M`tL9!>y@SdNcCM~Sn?*VP{m(Ay0EQH_mF zUbT#8Vy8625t2YreapA+kp$J01youXvU~7D|qlCWih|oFKv4rJJ z#iDqSI1Y8;Fl7l;8_GMXD(uk!cLL$28$maQ8*u6UJ(pmYroyVz${rpu^`M`5FzL_6dJ~&G$P5t7 z%Z%JtqGpR7RJ_3#5OUQ{A~PeEMvn^@55979$cqSa+0H>Sb47eY(Nsz7IMqJUA5aP} zA^es<1z&xYMM9<_>Nl1{6Vxemi+EpcpZT+**S2upJm4V_((^xp$j8&=+kuLNJgTe z4rAA`wxXp++#UKB!fY6#v2mCC#NEqu4(t#|>6wKE!X_v2)Y}O=4ZqhnaU8b3dzsMc ztY#1W@k))m2rCUo)v@AaZ!XvCn6yTnt!NmnORD!0U>c5^Jz$laT}5@o2M96E;h8<6 zda32FF7YpYg%1<@P<(6H0U(E+n4?1BV+5IocW2*VP4Aj;RepkChuW~iwv=6o=pB`F zsHaBW)O0)QS%O_T#OhDBNz<2<9&kqul%u2J+!Z4l8+3kR#s+TY9LxggxY05I zJ?z+vKA+jwsT$1BkSx9KK=b3Psd2Y9w`15uJ$^>vn^Z&dpH@S|QVes`pbJv(5d6sI zHogO>AlA>m_X&F_mNNX@#$%&`$JNa3u?jyT^r23{9YbG^hXH?+Ec}$fhdKq@dit0X zI&+y!Vc5u8t0-O(`vIfHqY*z}FkcXG{Secc2AEDR)WtCewkp&~G2<%SsLa_j?t=0) zK`-A4XkFHh!J{3F7CH)J7ROcc9aXZ}voWwX67!xaEvf7abam>g5%mJg6jOM#(&MQ9 za}8Qr>3&{?KN8%2I}E2j>LvziD*T1O_DumxacfnZ$IaZ;&}M3^G<}}_m!Y2-u-tfc zZ$Ygq1;(RzcxwC%mZHA%9N?#(Ptng`pQ(nqrTYjmUx6U5~H(A|pZV zlMNJF3On2C(actLxb-yElb%&;RFObPbF)FxbgL+WB{wIBKxU?bsE%z3esyXGv z0Y@1_C<})}p)OGiNMEn^iNYFlpaKFa9}WmvBp%lFsx~TdXl#T~mMubptx}PLh*M`a zX z3R1G4W6>-Enw`=??!v*DQ*6=V3oy<+*FY6j5J2ikCj;=k!$M;tH$fFVSr+JHGmmiQ z4BHTmA!#b7gy@t-3khTDuo#IJ&qe!Y7=y&9uPQ&{c5LwhUyBxJ7=v^GTCCEvI4;6* zrnJAUw2{mr+Lt9i$cn#U(wV{;Wz}9ay zzQmva%x20}hd0{>XAO&j6>~)_sw3>>Bf#cNm_4{-z#)v|xso~Ju!D;;!g{KtZ3LC* z504aMunyf2P^Q7|)Nx6^sEO)WHIh0sw>flnU`mBdr)~>X)H0Hav;Ywqj`cRGpmhWl zXlfBOvqLj6whmnNO`f=DOhqfGii1Z`MNNHECEDD?cLAULNN2z-8WP-#iVmRaMl%2U zt0kHqV9eJQEY>HglAO9vbkXV&kD9uE)nk~CAbUR6d7F=_7};JyB^638OpwFj!flBa zp}rmc*Z5xPq)OUHFg2)f$4Zzp9ofr~8L;Nbq}Q^JY8lBQ);qz4)Wmb(5UOA#JWE?) zX++j;!uE_{i1659N>pveS-jcA1=~wCjAW)!la2$wiY->=`Qlzt>ukdpz2z~dyP_~v zvTOw1U_o!0wKV$qqiJ^X^csJ17H#@V?u)Q%sMn0a%mt;e(hdNTbNOfrMxVW&A?9z%(BH%??0dpqq zLS~B1t;aXpP8Ko+Va%CXfPWr25Zq7 zMHd+=t}Z&W=&Yi%i_R%Jx9Gg0^NTJh`diV3Angg#c#tN5G!djpAWa5o3P@8y+6$z; zuP(aSP;MwQlof3$8YmjXf43RRL7Em_7j22QfK&?70+1H6ANRq}Hhbk_Pp~h9NoY~W zb%q^4vJSU z!Q`C%>q5c4p3WA3xUVY`PAbAHdA#VKtdb{29ShQ|=(fS4rwng`G&|~#`c`)aJ20Jl zPo&=8vo5k;nf($cdZFlLL&4Uf?L{vZy#!JPNOM4%yS3<*qF0TxL7E5B{OG}~iIY=i zrZ=fs9$Zv7@H2)e*c$Aw3WOP9EG?{89+yH9#!qj&bZerr#@9Pc;;{W&Hw%A7q5w~-d^+`7JWap=riw~{N_TV>-Tdn z&Yfkw=br1Lt0(OLje-6rui!)RNzvyxe#Y9O&!Qb5EgCeuS@cxY&qgqL{5Zw8MZe6Z}{D4FdD6sty7Joj3%QHtq0RTqf4U=(MB*m1*WH?P0{A)va5@JQ}?aSXd7iS z8Om%T+qe7ieOn3AQjqG|zHMOpme!VSS6pni-9Xx3TWmHnE;gIRW@Z0@v=}6(`ge4S ze3i@>ovpxT!~WO`ZABotK&l$F72E6}xk0LBGdk?L8ggA~LtrbhO~mzMoNg>NmPJ=Z z4~QPP)i%jCnJu1bkZRcC*>2n0V6{z4os~^rf4OW!!{TGFncjEv+eI6EIDxh@EIK2# z==o!Q`}@|n>K=jeN7vrH-SSFwHE+Od+Z@)*a<=O0aMj!9vQ@t%-Kw8@;)KOcZPvGO z`u%K9nswV^HtUTz>$bUU)|X_Obz62x7=a5({dM>t_0InV7eMi*MR9-FkJ_x>%nvbm~I5qO;_8F(00<%mIo~l;Z8c1 z?WA_TlU9Q1VK6uoBDTD-$iHH&SmTC zY}+{?tpe$QLECw@^FcZgq}6{K>$Y8NyA&%Kb*$}@=r)iJ!bNEL5*MNAo{Wp|GTT+S z?=0V2ez5!qru)EjKbRiaYP;HY4cmHNkPcS2-VL~)ZcN=zQ+#jSyzUog*NM06`$5Qf zSS{Onw_wp*Q;Tj}S@h0ND;jUPvij4U31g4EBDVGJu-&b0ox9l9S(8PpAGAG;TgUbg zNSy<=M?ms3(PYf}U>GyGtH)oBx?K74c-;0RBX|O&wF9<)f<&^6l2DXoe&)rWwY_Yp zxZL)f?Rnb^w(YhTZFr`w2Ppv3As`(JQWr?wm)l;ky=r*V@Rsd$#wmJ0+K9|z6G;8| z4>qUJPx29o9F_gCl+P&R;IV{hF_`gexM{6>)B3=gKm@aAvlg&y^vEz(p$a>rei@@? z!i_)q!}dUAeRUudj^M%G8^nkyA(Tw|n@G&bP(xk^3Oc@Ce6Nec=H36m_K~4r!1f_X z!2#RHAoa2pdI*jvnrZQUT}CVdBhVZ&gZ+gfAb!FaL%0{yZ_n7&(T9wo(--k^-hf~8 zk2-1FQxbPIS2vT&)UU%#LgVfD-1ZgQGhf)g1nDr4LW8!iZQp2VrE3U+%uGFGi-g@_pI}fV<;Eb2|zxj}@-b$Ul z6;~J65mPR%WlZ@vWN*fLWD#pqc=Ch?OH`>sTe8K?#U5ge#Vw36o|u`E6Ra%u8!E1e z7bFdjrWYln3w2@gn&P$EWFKOkZ7sJ};B*JsbpM4<_sL*-9ZdfQ(;IBc&yG!bm`!;E zq`&eh--uIgt+cw>e_(nJOwX%-$Cl(##lWWh=wh7cQ$RX(u=tqbV?jC%q%;4#X+Np> zlw@hL_|)Rl*qomZ(i!TUpM?{7cIrfadgV7iuYI+;@szi|a#z;f>S1$!9u_@6wP?-D zz4x!2;TpKV`l>z$EWzzZ7Z7sfBo$JfkT%VH# z#kIwE?A)cl_)cxU?^Q4T#SgOCK9A4#1+h#2me^E3%BK1;kk02*{lt*F`?=!nY?_}h zegUMvfppYLh^I~>JjXJjYOE%M&;=B!W+bjN|7!M-69~S?_W_lnCir?(J?BM;- zzN0XK2EW{0Hkf&6x(e$#p&;dTJP;8_6gV*`=0jk zAYBg96@&JP_DLXJ3DVVUn*S7qgne&2J1IsTYoE@B_$nN*VXjv8a{IjG{coRdU%*zy zH6UF}tHQpo!D`$H)_&(wtcOAJxb5)vjIEGz;|j21$&op6nzTDaeP7a z+WQOz+w6zgL-w#8Plmfex(B3tLAr07eS>|YeUrT(r29d75Tr*y`UhJiGq9-SjgE* zEjTA#L0)$vL0k)XXQTFG*bN^2+T;QIu^>GV-K-BVFLR>(FR?Oz1?eFiJo~A*o=&r$ z-j13mmL6|{^ND4XpFBjt5qWsKVY#8*ey07b<&B;yl!XWFXBt*zI1jE9XUgp>_U9m48E^!;cFmvNjm%_R0nEAJ>K3 z10mE}hw(Bct6zAkmM-^&0=^!+d?i4zB<8AeJ6A2~40WszMDV(U)&?teVy~PZUjzCG z`n#B7JEdk^7{7a(AyXBhZfSW>}K0W^S4T+ zn?0{=c6)=bW7fRs<$RoaMV`&JN9?&?}79#NO=AHJdVG7X#dnu zvDN;O{bTzlAYqaBLHb~;{WJUL_U$0yjrAk!BkLMt0f}8psJc0Xp+vFQUU}Nk1uHQl zy~p3{3;9ql?UnZ$y0luya$i@Uf5Ku_m^Umd;WPAu{g*V2FB-7_*Zw~ey0A;1MmKjD zN=n8XO19hoFjyT1hmo-fc9U*WMu}^By8_|J%$YA4N0|gs%GqtjM0`47&mJo$`qY@Jr@GAUQtAC&sd=S zk@!11!X_-9td5+riyW1rIk-&K`23!J)bDh+)iIDtd}7%?W$IpguTmS=gM=&8AN^si zqQSkUA-3w9fMrX|um>@1!C>h${BY(hJPG4E)~R-RaQ3vcpBr{DD28IgM8jT&*@k(B zIzv6`PCbUzhEBtwhKS(^!%2p}8cs2sX1Ks`so@I4&4ybIw;S#>+-)6f_3A@jr2!nYMa5)G?x0N8KZx^v_>EU3=1f8^NJv77x9$7qL{w$2wI zp&qQhq1&N2a)oZ88>DZ*SPas)Afa`0G5()zsqsUv{nq|o=+ zo-#BNE98mvGe$H_$yPi)spN#kyQsrM2b{y99dP%)Rh*9p-0Id~r?0=n7b%&wVBwsZ z#AqBP!ckjdoW(K0F&&lcj){&*j>(QGj;W5l9D6&af%GFts5AN*B-9!G2c-XkgnRYZ zD-C6iGF8TQOf!@_D%jEV8<($tWvA8eY|Qepr|p5B&fvzna5e5N4|0Eh&uabC>JTnm zuUv{B)cV2=fpy4d{GG%=!quT*ccTY&ddPX$1d}R}&8y0URoGVFno3`&F1%cQAXOP( z{8#Nh{vA^jdT>8?`H=|KkbDyS?Obh#pU1zb+4N?%27_Jrk``CZe(bySbn`1_&8u{l z&nun1pkiKW#RAu?()rFgvrFg9bkC_Mce&@!ak@}JIkRMD$*g&^@UNNkD)8s{-}uU1 z>{w!`xXR&lR61OaDu>%q?Wl3oI_g0B19A+IV}zVhkYj=z0dhphksv1rWd}#SqruVW zXmT_=mf<{ka5i#wft)3fvlMcgAg38}-oyFI`GC!kj2-ddGj$_ImtLnbdG?Y1t25-s z0ax&&wn(50ReydIAMia07ssX=-@` zba>QbHu$@Pq5c|tEMCtG@*(j$))^|Ua2)LLIo3Ej9GwooV=d(D3OTz$&hC&i8gk5# zV}Ts&6^`|efa4Iyp^h#`x1$GgWXN$q&REEq3^}tQ#|=4kYykGwm7V+nwI_nl;B9qf zdQZw+>MIbAgNL5`{hj)Ec(l~ut8%aUh4%igLpBD{hut4$YE<>dI6AvtioWLKUsjF# z1>Y4je5)@yuUxJdVY=il6avv}z>jUk%5*do!*IsY^jsiKkkTV8y^0qmSavbf5I*x*ze8?$)oI?D84OCurpbJGZ+J=?=OvaNzZeSe@lV_23Ammhu0Ir_c-d1Or=v>S zaT??l4LHt#9NUmoD9Ss|ah&To5AWru-ew%7nF$jp_@Ut}ien_`LXI7Biksx`k|hl* zu2d8QBKQu6lC!^)G3k{k33tHN>hP2BYSoaUIT*(M66`5w_nT*zjox?5z%JW& z-EDVEYcJkNSK>7LH`NAuB7>vN`n?Gke_IbqzukcdGQtvV;mL+UdCZ`aJAogC6CONB z{c$iaf5PIU=hH6}7N7A1{jiHNv24-O*0%NoeTVjJJoWUm&b{P{t8Y;WjQm(FP=D9| zzE?d{|K_+5nW%eHZ2d4Xd&)@0HhhTO&2D<+J8i zEpLt0f$M+v+}N*iRkA}hJWs36yWHa~pA{=dBk#eL-m@<~@&dhF_ROG+YRt%M)b{*; zWk+6lC@#on=QhXPj9K08xWjR$<1WaV0y$G5XD`Uvdz<4P$GwjG9QQ-cG{~6_Ic1PD z~<^jhOkW)G&1H$`DPcm2e6Yeip?LNBDzURa#)26G}mzUM+%b2|U z0)BG|_M&+i9@46anjZ-s>hGxz_|ZL&?noqV;n@}<-IL0piI1VG$=}2FduL@|Boag# z#?xbaEgaoNHsDoAh)Uaw%(mjVYtNRbX}e?WxINO{PwJ>V$#4qB&7f72T5C;#JRAcPJDLAxLQ%Hr|U|MlFX-1DQO# zClb@39&ej5b5_Z)rM$8&2Ghz$E{2f$9gQlXXSgaIWau#T82Svy7%ntiZ+On|0$z$< zHoR(h&G44tQ^RL?Ir`S{t5GzXjk3{Z9B16axTkTlagK3;aX;f?W2LdmxYl^6@f72k z#+!}Ls=QmjD9zS+IsIV#jPIXk9M7tUD*xaG$BVIr`x4~LMDrr;c>EWgfU}wu<8jH0 zb!10ibKjz|pI2se1fJfy-d}>6o+eL8rymcZex@xcQ8i2@Q!tcclV=5bgf!PTtz>@b z-d1M|I!I3`!6-p!*;o<@mM{g;^b)+PmqZXM#B6vIrAWAKIANboQ0R+ zt>H_@SB|e8->`eaK9I8?_n>Hi%uQi$;lwlzgf)6W-I9QKehu7ij;%ge9iJ zW_m!ihzBjE{0C4|nQDre%;wT>9=t=KJqTAd5~0BS;P)0umBRcPlC?ik+y4 ziiI775+Z4U?YU+H##`r{bJw3d+ zP0!(Nd{U#We`!vSJ+VmaqF9=cF_t#8%6BRj?U=e-+nz%Q+>pFs(jzq>uO?If_|Ff} z{`L5lh}N3uRaV_ZwBCDGxiofJEPX6Pq(Ix`o%#+6Iw1Lonuyj(L@)eB+p&zPcZxH1 z>ppZuubu<*d$sAaVZ&3OTg5WRvYdNKT&LUcn|)+uV2{+ik^!xWWlcVjO1@tH_aCP2 zcW#Lsv7G1L0Ql!o|ES=aSgzz+$+rpq$5H328Osw(`LDlRy%LBO{OgrKgVa|77fvi1 zEB@z$NX#$e>;8NYiIqux5NYT^Waqy;h~zK)|L}SA>*aEn+Z4S#Q??v=^2Ogxcj;vr z{^i;9>hym;na&j6ja-p2L)V_826s#SY;@{Fck0veUEA-Sq)+cpQ_lbC_WOFS zF5u4#=3bjVeIYN5{`1H9))Xnerf9LhJ-ff~@KU1WzdyTA{mt^%!%LUYJ@gJk!muzl zj1QB;ys$K^3TwloVY}OIFNa;>&G4xYY8?pQgj3H7J5EZK$^FY!x5pCvOzu48@ z^^Z1BK5P_Ae)`G3ZmU;MUvBU5=Y50J=a_$8di6ZxE%1*c>w2Bl+s%N#ACr0mD|YR< z8(4o9=t3NIW6j(&iPekMk2Q#07i$=66l)x75))FZMAXAsn?$s2BHAtyy*?3bpNMuy zL_2PdHIKE3wT!ijwT`ukwT-ol`PmJLs5=Ypo!pX$4o^g1Ohms(ME545`;+NpzHncn zjXToAldq0EjrOIDZXN_%ChthQS3B@uURw^k;oNZiD;KZ^ya_rGR6kRhI(f@HYheYHY5@4nuy+*h~Bg|HY`+%jYvdȭ@ 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 = [] - @AppStorage("offerTestMail") private var offerTestMail = true var body: some View { VStack(spacing: 0) { @@ -67,12 +62,8 @@ struct AccountsView: View { HStack { Spacer() if testing { ProgressView().controlSize(.small) } - Button("Verbindung testen") { testConnection() } - .disabled(selection == nil || testing) Button("Speichern") { save() } - .disabled(selection == nil || testing || store.isBusy || - (newAccount?.id == selection && (testedAccount != selection.flatMap { drafts[$0] } || - testedPassword != (selection.flatMap { passwords[$0] } ?? "")))) + .disabled(selection == nil || testing || store.isBusy) .keyboardShortcut(.defaultAction) } } @@ -100,22 +91,9 @@ struct AccountsView: View { .padding(.horizontal, 16) .padding(.vertical, 22) } - .frame(width: 850, height: 600) + .frame(width: 1_000, height: 820) .interactiveDismissDisabled(testing) .disabled(testing) - .alert("Testmail senden?", isPresented: $askingTestMail) { - Button("Nein", role: .cancel) {} - Button("Testmail senden") { - if let account = testMailAccount { - Task { - do { - try await store.send(accountID: account.id, recipients: account.email, - subject: "MikeMail – Testnachricht", body: "Versand und Empfang mit MikeMail sind eingerichtet.", attachments: []) - } catch { self.error = error.localizedDescription } - } - } - } - } message: { Text("Eine Testnachricht an \(testMailAccount?.email ?? "") senden?") } .onAppear { drafts = Dictionary(uniqueKeysWithValues: store.accounts.map { ($0.id, $0) }) selection = store.accounts.first?.id @@ -148,22 +126,32 @@ struct AccountsView: View { private func save() { guard let id = selection, let account = drafts[id] else { return } - do { - let isNew = !store.accounts.contains { $0.id == id } - try store.save(account: account, password: passwords[id] ?? "") - passwords[id] = nil - if newAccount?.id == id { newAccount = nil } - if isNew { - Task { - while store.isBusy { try? await Task.sleep(for: .milliseconds(150)) } - await store.refresh(folderID: nil, accountID: id) - if offerTestMail { testMailAccount = account; askingTestMail = true } + let password = passwords[id] ?? "" + testing = true + error = nil + resetResult = nil + Task { + do { + try await store.testConnection(account: account, password: password) + let isNew = !store.accounts.contains { $0.id == id } + try store.save(account: account, password: password) + passwords[id] = nil + if newAccount?.id == id { newAccount = nil } + if isNew { + Task { + while store.isBusy { try? await Task.sleep(for: .milliseconds(150)) } + await store.refresh(folderID: nil, accountID: id) + } + } else { + accountsNeedingRefresh.insert(id) } - } else { - accountsNeedingRefresh.insert(id) + testing = false + dismiss() + } catch { + self.error = error.localizedDescription + testing = false } - error = nil - } catch { self.error = error.localizedDescription } + } } private func refreshChangedAccounts() { @@ -178,23 +166,6 @@ struct AccountsView: View { } } - private func testConnection() { - guard let id = selection, let account = drafts[id] else { return } - let password = passwords[id] ?? "" - testing = true - error = nil - testedAccount = nil - Task { - defer { testing = false } - do { - try await store.testConnection(account: account, password: password) - testedAccount = account - testedPassword = password - resetResult = "IMAP- und SMTP-Verbindung erfolgreich geprüft." - } catch { self.error = error.localizedDescription } - } - } - private func delete() { guard let id = selection else { return } do { @@ -246,31 +217,20 @@ struct AccountSettingsForm: View { .frame(maxWidth: .infinity) .accessibilityIdentifier("accountEmail") } + Divider() + .gridCellColumns(2) + .padding(.vertical, 4) + GridRow { + Text("Login-Daten") + .font(.headline) + .gridCellColumns(2) + } GridRow(alignment: .center) { Text("Benutzername") TextField("Benutzername", text: $account.username) .labelsHidden() .frame(maxWidth: .infinity) } - GridRow(alignment: .center) { - Text("Server") - TextField("Server", text: $account.host) - .labelsHidden() - .frame(maxWidth: .infinity) - } - GridRow(alignment: .center) { - Text("IMAP-Port (TLS)") - TextField("IMAP-Port (TLS)", value: $account.imapPort, format: .number.grouping(.never)) - .labelsHidden() - .frame(maxWidth: .infinity) - } - GridRow(alignment: .center) { - Text("SMTP-Port (587 STARTTLS / 465 TLS)") - TextField("SMTP-Port (587 STARTTLS / 465 TLS)", value: $account.smtpPort, - format: .number.grouping(.never)) - .labelsHidden() - .frame(maxWidth: .infinity) - } GridRow(alignment: .center) { Text("Passwort") HStack(spacing: 8) { @@ -290,6 +250,47 @@ struct AccountSettingsForm: View { } .frame(maxWidth: .infinity) } + Divider() + .gridCellColumns(2) + .padding(.vertical, 4) + GridRow { + Text("Posteingang (IMAP)") + .font(.headline) + .gridCellColumns(2) + } + GridRow(alignment: .center) { + Text("IMAP-Server") + TextField("IMAP-Server", text: $account.host) + .labelsHidden() + .frame(maxWidth: .infinity) + } + GridRow(alignment: .center) { + Text("IMAP-Port (TLS)") + TextField("IMAP-Port (TLS)", value: $account.imapPort, format: .number.grouping(.never)) + .labelsHidden() + .frame(maxWidth: .infinity) + } + Divider() + .gridCellColumns(2) + .padding(.vertical, 4) + GridRow { + Text("Postausgang (SMTP)") + .font(.headline) + .gridCellColumns(2) + } + GridRow(alignment: .center) { + Text("SMTP-Server") + TextField("SMTP-Server", text: $account.smtpServer) + .labelsHidden() + .frame(maxWidth: .infinity) + } + GridRow(alignment: .center) { + Text("SMTP-Port (587 STARTTLS / 465 TLS)") + TextField("SMTP-Port (587 STARTTLS / 465 TLS)", value: $account.smtpPort, + format: .number.grouping(.never)) + .labelsHidden() + .frame(maxWidth: .infinity) + } } .frame(maxWidth: .infinity, alignment: .leading) } diff --git a/MikeMail/ContentView.swift b/MikeMail/ContentView.swift index c647f23..778b620 100644 --- a/MikeMail/ContentView.swift +++ b/MikeMail/ContentView.swift @@ -117,6 +117,7 @@ struct ContentView: View { selection: $selectedMessages, busy: store.isBusy, accountIndicators: accountIndicators, + canRestoreToInbox: { store.selectionCanRestoreToInbox(Array($0)) }, action: perform ) .onDeleteCommand { deleteSelection() } @@ -277,6 +278,8 @@ struct ContentView: View { } case .delete: requestDeletion(Array(ids)) + case .restoreToInbox: + Task { await store.restoreToInbox(ids: Array(ids)) } case .read, .unread: Task { await store.setRead(ids: Array(ids), read: command == .read) } } @@ -450,6 +453,7 @@ struct MessageTable: View { @Binding var selection: Set var busy = false var accountIndicators: [UUID: AccountIndicator] = [:] + var canRestoreToInbox: (Set) -> Bool = { _ in false } var action: (MessageCommand, Set) -> Void = { _, _ in } @AppStorage("mailSortColumn") private var savedColumn = "date" @AppStorage("mailSortAscending") private var savedAscending = false @@ -507,6 +511,13 @@ struct MessageTable: View { transaction.animation = nil } .contextMenu(forSelectionType: String.self) { ids in + if canRestoreToInbox(ids) { + Button("In Posteingang verschieben", systemImage: "tray.and.arrow.down") { + action(.restoreToInbox, ids) + } + .disabled(busy) + Divider() + } if ids.count == 1 { Button("In neuem Fenster öffnen") { action(.open, ids) } MessageActionButtons { action($0, ids) } @@ -568,15 +579,8 @@ struct MessageReader: View { ScrollView { if let message { VStack(alignment: .leading, spacing: 16) { - Text(message.subject).font(.title2).bold().textSelection(.enabled) - VStack(alignment: .leading, spacing: 5) { - Text("Von: \(message.sender)") - Text("An: \(message.recipient)").foregroundStyle(.secondary) - if !message.cc.isEmpty { Text("CC: \(message.cc)").foregroundStyle(.secondary) } - if message.date != .distantPast { - Text(message.date, format: .dateTime.day().month(.wide).year().hour().minute()).foregroundStyle(.secondary) - } - }.textSelection(.enabled) + MessageHeader(subject: message.subject, sender: message.sender, + recipient: message.recipient, cc: message.cc, date: message.date) Divider() if let html = message.htmlBody { HTMLMessageBody(html: html, attachments: message.attachments) @@ -602,6 +606,48 @@ struct MessageReader: View { } } +private struct MessageHeader: View { + let subject: String + let sender: String + let recipient: String + let cc: String + let date: Date + + var body: some View { + Grid(alignment: .leading, horizontalSpacing: 12, verticalSpacing: 7) { + GridRow(alignment: .firstTextBaseline) { + Text("Von:").bold().gridColumnAlignment(.leading) + Text(sender).gridColumnAlignment(.leading) + } + GridRow(alignment: .firstTextBaseline) { + Text("An:").bold() + Text(recipient) + } + if !cc.isEmpty { + GridRow(alignment: .firstTextBaseline) { + Text("CC:").bold() + Text(cc) + } + } + if date != .distantPast { + GridRow(alignment: .firstTextBaseline) { + Text("Datum:").bold() + Text(date, format: .dateTime.day().month(.wide).year().hour().minute()) + } + } + GridRow(alignment: .firstTextBaseline) { + Text("Betreff:").bold() + Text(subject).bold() + } + } + .foregroundStyle(.primary) + .textSelection(.enabled) + .padding(16) + .frame(maxWidth: .infinity, alignment: .leading) + .background(.secondary.opacity(0.08), in: RoundedRectangle(cornerRadius: 10)) + } +} + enum AttachmentMentionDetector { static let settingKey = "warnMissingAttachment" diff --git a/MikeMail/IMAPClient.swift b/MikeMail/IMAPClient.swift index c813ee2..58d1e50 100644 --- a/MikeMail/IMAPClient.swift +++ b/MikeMail/IMAPClient.swift @@ -17,7 +17,13 @@ final class IMAPClient { let greeting = try await connection.readLine() if greeting.uppercased().hasPrefix("* PREAUTH") { return } guard greeting.uppercased().hasPrefix("* OK") else { throw MailError.message("IMAP: \(greeting)") } - _ = try await command("LOGIN \(Self.quote(account.username)) \(Self.quote(password))") + let capabilities = greeting.uppercased() + if capabilities.contains("AUTH=PLAIN"), capabilities.contains("SASL-IR") { + let credentials = Data(("\0" + account.username + "\0" + password).utf8).base64EncodedString() + _ = try await command("AUTHENTICATE PLAIN \(credentials)") + } else { + _ = try await command("LOGIN \(Self.quote(account.username)) \(Self.quote(password))") + } } static func quote(_ value: String) throws -> String { diff --git a/MikeMail/Localizable.xcstrings b/MikeMail/Localizable.xcstrings index 10a3b69..221fe36 100644 --- a/MikeMail/Localizable.xcstrings +++ b/MikeMail/Localizable.xcstrings @@ -361,8 +361,12 @@ }, "An (mehrere mit Semikolon trennen)" : { + }, + "An:" : { + }, "An: %@" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -514,6 +518,9 @@ } } } + }, + "Betreff:" : { + }, "CC" : { "extractionState" : "stale", @@ -528,8 +535,12 @@ }, "CC (mehrere mit Semikolon trennen)" : { + }, + "CC:" : { + }, "CC: %@" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -580,6 +591,9 @@ } } } + }, + "Datum:" : { + }, "Der Inhalt und die Anhänge erscheinen hier." : { "localizations" : { @@ -714,6 +728,7 @@ } }, "Eine Testnachricht an %@ senden?" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -874,6 +889,9 @@ } } } + }, + "IMAP-Server" : { + }, "Immer" : { "localizations" : { @@ -894,6 +912,9 @@ } } } + }, + "In Posteingang verschieben" : { + }, "Inhalt" : { "extractionState" : "stale", @@ -1015,6 +1036,9 @@ }, "Lesestatus" : { + }, + "Login-Daten" : { + }, "Lokale Mails endgültig löschen" : { "localizations" : { @@ -1224,6 +1248,7 @@ } }, "Nein" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -1443,6 +1468,12 @@ }, "Passwörter in das Backup aufnehmen" : { + }, + "Postausgang (SMTP)" : { + + }, + "Posteingang (IMAP)" : { + }, "Prüfen und speichern" : { "localizations" : { @@ -1537,6 +1568,7 @@ } }, "Server" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -1558,6 +1590,9 @@ } } } + }, + "SMTP-Server" : { + }, "Sofort bei Auswahl" : { "localizations" : { @@ -1612,6 +1647,7 @@ } }, "Testmail senden" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -1622,6 +1658,7 @@ } }, "Testmail senden?" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -1661,6 +1698,7 @@ } }, "Verbindung testen" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -1685,8 +1723,12 @@ } } } + }, + "Von:" : { + }, "Von: %@" : { + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { diff --git a/MikeMail/MailModels.swift b/MikeMail/MailModels.swift index 17e7ee2..588d3fc 100644 --- a/MikeMail/MailModels.swift +++ b/MikeMail/MailModels.swift @@ -9,9 +9,20 @@ struct MailAccount: Identifiable, Codable, Hashable, Sendable { var email = "" var username = "" var host = "" + var smtpHost: String? var smtpPort: UInt16 = 587 var imapPort: UInt16 = 993 + /// Older account archives only contain `host`. Falling back keeps those + /// accounts usable until a separate SMTP server is entered. + var smtpServer: String { + get { + let value = smtpHost?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" + return value.isEmpty ? host : value + } + set { smtpHost = newValue } + } + var senderDisplay: String { let value = displayName?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" return value.isEmpty ? email : "\(value) <\(email)>" @@ -41,6 +52,11 @@ struct MailFolder: Identifiable, Hashable, Codable, Sendable { || ["drafts", "entwürfe", "entwuerfe"].contains(name.lowercased()) } + var isSpam: Bool { + specialUse?.contains("\\junk") == true + || ["junk", "spam", "junk-e-mail", "unerwünscht"].contains(name.lowercased()) + } + var icon: String { if isInbox { return "tray" } if isTrash { return "trash" } @@ -54,7 +70,7 @@ struct MailFolder: Identifiable, Hashable, Codable, Sendable { if uses.contains("\\drafts") || value.contains("draft") || value.contains("entwurf") { return "doc.text" } - if uses.contains("\\junk") || value.contains("junk") || value.contains("spam") { + if isSpam { return "exclamationmark.octagon" } if uses.contains("\\archive") || value.contains("archive") || value.contains("archiv") { diff --git a/MikeMail/MailPrinter.swift b/MikeMail/MailPrinter.swift index 9978351..86ab176 100644 --- a/MikeMail/MailPrinter.swift +++ b/MikeMail/MailPrinter.swift @@ -56,8 +56,8 @@ enum MailPrinter { let headerHTML = """ - - + +
@@ -69,7 +69,7 @@ enum MailPrinter { let bodyHTML = """ - \(body) + \(body) """ guard let header = try? NSAttributedString( diff --git a/MikeMail/MailStore.swift b/MikeMail/MailStore.swift index aee66a4..38f4d5d 100644 --- a/MikeMail/MailStore.swift +++ b/MikeMail/MailStore.swift @@ -65,6 +65,8 @@ final class MailStore { guard !isBusy else { throw MailError.message("Bitte den laufenden Abruf abwarten.") } guard MIME.validAddress(account.email), !account.username.isEmpty, !account.host.isEmpty, !account.host.contains(where: { $0.isWhitespace || $0 == "/" }), + !account.smtpServer.isEmpty, + !account.smtpServer.contains(where: { $0.isWhitespace || $0 == "/" }), account.imapPort > 0, account.smtpPort > 0 else { throw MailError.message("Bitte E-Mail-Adresse, Benutzername, Server und Ports prüfen.") } @@ -538,6 +540,29 @@ final class MailStore { } } + func selectionCanRestoreToInbox(_ ids: [String]) -> Bool { + !ids.isEmpty && ids.allSatisfy { id in + guard let record = try? storage().record(id: id), + let source = folder(id: record.folderID) else { return false } + return source.isTrash || source.isSpam + } + } + + func restoreToInbox(ids: [String]) async { + await mutate(refreshAfter: false) { + for id in Set(ids) { + let record = try self.storage().record(id: id) + guard let source = self.folder(id: record.folderID), source.isTrash || source.isSpam else { + throw MailError.message("Die Nachricht befindet sich weder im Papierkorb noch im Spam-Ordner.") + } + guard let inbox = self.allFolders(self.folders[source.accountID] ?? []).first(where: \.isInbox) else { + throw MailError.message("Für das ursprüngliche Konto wurde kein Posteingang gefunden.") + } + try await self.moveOne(id: id, to: inbox) + } + } + } + func createFolder(accountID: UUID, parent: MailFolder?, name: String) async { await mutate { let name = name.trimmingCharacters(in: .whitespacesAndNewlines) @@ -587,6 +612,8 @@ final class MailStore { func testConnection(account: MailAccount, password: String) async throws { guard MIME.validAddress(account.email), !account.host.isEmpty, !account.host.contains(where: { $0.isWhitespace || "/:@".contains($0) }), + !account.smtpServer.isEmpty, + !account.smtpServer.contains(where: { $0.isWhitespace || "/:@".contains($0) }), !account.username.isEmpty else { throw MailError.message("Bitte gültige Kontodaten eingeben.") } let secret = password.isEmpty ? try PasswordStore.password(for: account.id) : password let client = try IMAPClient(account: account) diff --git a/MikeMail/MailTransport.swift b/MikeMail/MailTransport.swift index bf67c69..652a0f7 100644 --- a/MikeMail/MailTransport.swift +++ b/MikeMail/MailTransport.swift @@ -109,9 +109,12 @@ final class TLSConnection { enum SMTPClient { static func check(account: MailAccount, password: String) async throws { + let host = account.smtpServer + let port = account.smtpPort + let username = account.username let result = await Task.detached(priority: .userInitiated) { var error = [CChar](repeating: 0, count: 1024) - let code = mail_smtp_check(account.host, account.smtpPort, account.username, password, &error, error.count) + let code = mail_smtp_check(host, port, username, password, &error, error.count) return (code, String(cString: error)) }.value guard result.0 == 0 else { throw MailError.message("SMTP-Verbindungstest: \(result.1)") } @@ -121,7 +124,7 @@ enum SMTPClient { guard MIME.validAddress(account.email), !recipients.isEmpty, recipients.allSatisfy(MIME.validAddress) else { throw MailError.message("Ungültige E-Mail-Adresse.") } - let host = account.host + let host = account.smtpServer let port = account.smtpPort let username = account.username let sender = account.email diff --git a/MikeMail/MessageActions.swift b/MikeMail/MessageActions.swift index abfe5f0..a0f1bb9 100644 --- a/MikeMail/MessageActions.swift +++ b/MikeMail/MessageActions.swift @@ -1,7 +1,7 @@ import SwiftUI enum MessageCommand { - case open, reply, forward, delete, read, unread + case open, reply, forward, delete, restoreToInbox, read, unread } struct ComposeDraft: Identifiable {
Betreff:\(escaped(message.subject))
Von:\(escaped(message.sender))
An:\(escaped(message.recipient))