From e195b5e0b06f3e503b34b4133136806e16fdd457 Mon Sep 17 00:00:00 2001 From: JScheffer <56606926+JoostScheffer@users.noreply.github.com> Date: Wed, 22 Nov 2023 07:57:57 +0100 Subject: [PATCH] feat: Add anti-aliasing to corners #232 (#234) * Implement blur/anti-aliasing on edges of window frame #232 * fix missing -1 for top right corner, add example directory and update picture to readme I also added example.sh, I think it could also be excluded. * Delete example.sh * Create example.sh --- README.md | 2 +- example/example.png | Bin 0 -> 55181 bytes example/example.rs | 10 ++++++++++ example/example.sh | 1 + src/utils.rs | 31 ++++++++++++++++++++++++------- 5 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 example/example.png create mode 100644 example/example.rs create mode 100644 example/example.sh diff --git a/README.md b/README.md index bb73ab0..1bc941d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Silicon is an alternative to [Carbon](https://github.com/dawnlabs/carbon) implem It can render your source code into a beautiful image. - + ## Why Silicon diff --git a/example/example.png b/example/example.png new file mode 100644 index 0000000000000000000000000000000000000000..d7df88126ea02f5d003414575c1d1f533ff5e4fa GIT binary patch literal 55181 zcmZ@gWmuI>({v-<4bt6RQYuo?T?*12k_V8G6s0?q?(R@Z8tLwk?vC$1DC+ZG*Z1${ z%~3cARr)6pFNd)2>}7^1pxu&i~tAx0)eX72LUmz@=Q`(#T9aU z7T$np^ag%^&&+)co?8Zu820W`Ti-&_Bs7r^+2VQ{Ra*i7!lzcav-eL&d2S|4JmH3ZtdUjE|ZH)*Zp zEiJ70MVMDleZ+7L<{tHGoA+5&P(;Dc;nsvw}7Tbe|+Nq&n;17if@T2E zg?8M@!y><|rx2MfP#+A5j*b2=1bf57#{ltKKtEXcUrqq+pnnFC_#S_C>a%tj`45|7 z+A#R%l~Q4^0S)$J8T9-E)I(<5KS~JwCI7T?*a?wepCG6?z&MWjLu%=NQG|_v0(t6t zFTMtJgN1ci-12`60Olja)e}f0SB93B0cHBN%zrEmFaQOR@ZnRCPpZs|Udg|L1g}f( z3j0KOA9;@PTgv~ixgQAuElMU{mheB;L^oIo*38bsp<7J}{PKg^^d1H5c~#Y>gQ z2G9?V!tm++-X!Wc1`Fe=#X_BOzp!s4KoN5TeEP7^x3mN!73_+uB2uOY*ep>!1h zn;oxTBW8aP$1gp$1A=raMebkxhj&1y;NhuP7X2#!u^|u?1r@Lx=e=hfZA;0*-G zDsiwBbHI?3Rpa#s2(YSvJcwBdkS_q)t27??2Ldo2j*IZ)6oCBnH?IB<_8ke57i9Q(z{@YPB2lw20#IN*N4zWarVEL@Do{3 z=5MD06AWyAv0BV+_y;uUbS>=QO@)8}-u!k16NnG102B}6EOgNgUV!(}9bpOlAFYGY zh~*$V9-af5IfOMh`VRyUE;C?~^Iua&2Xy`yLIXf-DhlGD=8)J#ABX@Cx(3uXAX-!q z4PJX1MkDx-b)1U>iY8Okr2aKLO&E$v_7|`Fm4LnKhm?u@p?S~?atv(aE!hCk9^K!& z|8+|XjF4jzkn`X@mP~B{IGO(dwIRtyJ6Z;0J`@D}L47Y!u{7|>Fv7U3*&G-0KcIX7 zjTW^L91=_&#MM6zOUx$*FoMeMZ{=X#d?i4QpZ}m^28_)DGVsA;wmxoY`fb?>fU?Jv zP=^0lhuA)1Nhf%P8Grq!trTi*LT-Xa3f2AX)jsf1wMO>ZFz@klt7=FOB zfe9>D*YU*>P$P7H_0TQO0CAN-K z;`CQ+J_g_oWvL!|1C9&O5umoA9~Kn{Z>Ss=Ji*`Ag+L5>`tDxezB0gu+Sg$`jrya0 zm;{I`VB^8O2iPR9Rotd|SOrWwlrpFh2@cp$t+vqcvC6ezf-`B zor?j6j)tx&l@HbXFQ1S|ju`+N`8LyG> z0xuJ-{^u;;fbjvLUJJDP%Kg_hVSWlp!;lrac3Ha?X-A;&2LPB`DqitZL-X2-<%&UE$LV-g@LgJnBx;)T*-BabXNj68A@!P@v7C$q>W16g`5oPZP z_RM}sD=T8lsx_zN@bO!-jS0gqr z;%B#8%R9NWEKSeNt+n6D3q^rOFf;c(UWCk`3<>G{1qkOs&FH;Ql;>A#(|4`r!jJ4+blD=P(J%X3 zij&pFuPLz6>@iY*T9~Rb$=};`6Rv^hJv#IesJCx5&yR;`SB4M$+{hsZ-@W-OR*X!p+s zx#Iv(613+XCp^%Su8JRWs?&1_e~bjEIfBQsFrD%|Ta?2)fx> z@9uR^lesDCZ-O6WQ}Nh#W4|dz{wN6^F!Rk1Q+4$8%;pwKG5^lEpv4`G^G zKo~I&6;7M&yfd}(jAsq;5#;H|fALZP5f1BPRz`R!AmY>oQ9tmSCbj_>GIFCuH^#3x z)*V(O<<~@XBe3t=_O<7Gpz2&2R0%dW1ZrTzq&sr+8=xDI{UI3aA_svv zP?v`#fL9RPM<~gDAW)Iq798j7RvHf6BOsrEnb7}5qZkNj1FAxQI|dIbI6<9h6OPA; z8rKO+>~1v6DkNj#1ODswiMdMqXYb3qO&Bb= zG^+KpS=@;Ghcm_~r70DhHoCJ;2XL+YYEubfywoO^q@LzEr)&8*7emdGl5p`8(j||G z?*H;Az~Ny4j}Wdwr{ZWPra+zXWKY&d$W}_VrhQOF>5KUs>)pz zqqcODVa`-s_BAy8vNYW^12$H!ux+Ikw@vD&!JtL@(8e~2;uWv)XPoF!oC*7`0JNBd z5~FHJ6N^q55Ra4dK!T;z2@3aP(mWrQj+|2kc&U7!^U_?345hpL{NJB2zE#YNG3<`0QuEFJ{l_966=_W0qd;W=1AQ^X&hDts- zxMhC>$sA6Zbj)u}2GFpn$*_dmp zqikMQpscUWHx`4Mr2qQLmO!XYMt!oejyxgUeV)u3MVF4B?AoXrOGX)^1Y8&y6*?jE z`BF)QZU_nPMjZ@PZYCN(a9`YCTZi? z=?Y<7Jkb5OjjUv)rabzyPK!5Z7z{EVW!1c)BRy7t0d>?o9ZAvg58i!^;LVAWKndr) zfcDREFo?LXYWYEjgMD~iZg5?oplhEE@07I()OH27{Z8Jh*>6CTr|<0du0k@{B% z&ET+;sBn(~H}xl0wTqj;@Osf}jO*kCY`>$-wwd&LVk-r#dr(KGE7>u>7EbH@u@X{$ zvSKdH1St&*}*a}`^6L}71jeE>by2vx5Dip8g=PsGMwj? z>87MX3?V^4uAx?{S#Yr>y22jUh-b2-I|J^GY{>Z1N-OtHZkD(vFabZ$$K!*nALkrd zP>WKm!MnF{lUH9Kj<`2cplq-cI#&iFB2gz##p?4E5nxhq#(5eKdGDLH$4(}Fyp`f! zGO6d?aAZzsi!>xOXnFo|&yL$ceK);_j6@?yo=PMYhH!C#S`;Rjo-ZjF{}xtGpk^{b z^FUg85mt4B6S80#`i!wTyZEMZ(qhn@8~-yLD@O25ji*H-kVCLfuWtmZR?m!I5&RY&D! zMafFou%&LyFEZ@Mv8*QWW}m+=e=?IX8L(s>k~1q|31jeMdM4$JL5U=jc@9o0{~%8z zBp#>o$5SWv39a6aPk$UQ_*8fdN!CR9=(C}}wLTxmKV}C01X8R0BeeqPqY(ZtNcpHd zrOV%(^9$89JQPzm)Lw^O$~@gZPZN>B88vA!QZ*eVM%f> z`ZoYnhuX|{ERbyY#jzd3NFOKb8yVWTZ~3T{c)A_AQCSIg4#&o{n@NY|f% zNHq6F;fievuJ)tJk=yqd&$!c*@9?7H4u)|vwL)x6Mu4+n;&lA0`Ds{cZ4Kcis=#@c z%O=~!@60tV8R|ZkXu$$b&lEZ*qZF;mowJZUB`vk|-O9bY=T2+3&+Mol#d~6Xem^&& zh3!!?^6ulyA?3&)r(epteW|Cp_>zjP+^NH!GXNeq#4$(JZ(TaOL4-?vtfi_QN{;1j z$~CO>Piz5f2Pfq;Rmdh^tLU5~PT&ZdN;)G8j;Kp0p7D&7|Sffv?RJep*qgT*^_U2N|N!T|4} z7 zE^752JR51> zM-MnXzxvA}AllMB_$fyzNL_VeN4n73E+h|4>sIwm%ygA+DtOfzBdyUn>uqYYJD=}x zuvO{K-I5XK3wSBNzVUlzgC@$X21_0NeD>^k)Tz$TonA||o13kGL#%lUE>UR*)H)}c z8?gkaSf*JZzNs6t<=6TvU2r}v4@zWt3{)$TbuAx(>r#K6 zB2dljgZI)M_RIX&Q-VWRdmwClvitGUS*#%JKT{CA04LGvjmi&&bgm8hxAqJJxW8ud zX3#dc4(t<-VZiu+3Z@)@7&N(U|1L)Y74iw(`}hT>5P+mLI&Sm*31>E3A;CF4Of~>n zXt3S}S6lx?AOf(1&;nFjZXv310nuJa*YK~i_$~# z{cBAhaFx}z2-f`xaM!Wm`VS^3NuXE)(m`J+i$pA|t7U;*Gqjo#-=;0v5T zmD47m__Qu7HwGkm_n{YP4@Lv)o)#d5_DLO})BLA|1}cWtAOor&L;wj*cCVNpMDlB< zH;hI;8aNz*h*Z7*<*%V3yz*Hs&QBI7OOSW)3{d~Gp4brpN~m5W z0IJkAFcaE;dG#>?uy8|vdv*U4_yQ;X!A4zxIWxIz4>s$wfMf8hex3FnRP+o9>mOly zFrbr=_}7~Df8Ae{_>dHZkoo-`o}Mczqgv5{nP5SI9>^Wgyad21s<7*bI26Wr`VH?( zrpL!*2ofsT*iw3ut@~y&Y1p3NE%Vxr1@mfxvvjE(o6M{ zBRrlP#9PcXR&pqT(u~;MmnABSrkVXgX80{b_tT2k91*-?X_?rrdwtzyo~Y4w9ER&v za>OW}`&I*U|8*WnI$J`gScI*;ylC~T8!8;iMu@teCp;0a)sc%s zK{J6*f8A}LW9RZpO^t>J&z<*EIXN>$>Ce1R7a#$(SwN1hQ>Hmgu3O__J(ZU)6TU5m zkD7?XS5Z}+WT{(Wa6eu(4J4&~@iiAs2r2pdNE&tGXz(HNT{FmHFb5AlU=CyBVvO&N zG3uM^Onm68BD3~1@#AfkcVWR&V}8>_E~0ed-=y2fJ#>UB-gi9uS!^fv*|ONqxNabV zTmEpvb${Wu<}~3>!r7T+tY~^$iNGWeFX;JR0DJ5mL1Wenzy67R7n$3+S&iea8#)mW zgp}JCwOe|}32u44P3wU+rArsyJvVD=L_F5*Ut&`t-o4|~v0daY$!ji7=;?8sM|M0t zvDpji7j!8?xn#mc-t}H!zpi>k@LaY>Nm+S#E>9C&r2ut82}C#qXmzlNq;z#Xyxm_8LjE%Wz)>)YDao#v4d92T;b58i(PIW&Y ziHfFV5+Nlle1v!d*Ya}bBJ?UK zZh>dg4HF#F(&-uGWTLYUv`pM7%^F8Crj5CrMn=B9DR-A%QMVtc&-_eO$(mv0Vu@Ui z&n2eQLwH+WPO*!Bs+`Gi7H8VbO1_IAW{1I|36<8=#{IsZNM6OHjqYLSl=YEz|KV*#zr8B48| z)kzg$#obn^JGu4b&E^(ti3ahWbcNc-^=St5r{m3q#^|d{M#k-Mo#C&$nbpBAL_h-Y z-KIG%Mv1{03%m8!tqZNtfC+^7!K3vI6gsNJ)+z8Q@i@6oV!|j7(uxdZBMx^rjT7fa zX%`8owG{MM1h=CVUN&|g4Wu$oYn&fps;D20vAkbwWuWAjO8!|7A53_>bG;_ZbamED z7*(dp+%;Jx#eyo&<$yk3&zd!Rg`OuXYr8)#h0k?HtigTh=llH@(VsYX@DF&ljYUxJ8b1J^5C*r)v#$Cq10ZSQI2 zKcp&LoDH*1N{8d;1;OK<=gTbl$Mmn3dpz5$KguZF{AhHN>~>Yix}?Dbdv(TBt1D~4 zM%iQ|deRX9frQt*thb(Zh*L0EJD%oB7tMuQ%;ohjcHPSkqnl~1YI~?sR$Qh+=?_O-=I@xQ zQ;I^}VEul4Gpw2@*~z&PK-i*pBlf-ack_*AjtRpyHm61U?%Ije+z;qt^ z^trUF5oYhGD&0);KqX`U&EpF}@klf?jApzf+L2^C?&=*>lJ{*K;Tw?Q@`)Bo_dT79g48sYhd1c-i@r8S+gj|CsqH7 zdwnvNT+f!<`qc_`tTJ-`okh$)#*+p=7ew zW9rX4qUIqX6Me2eOS|HvN>@O$cqz9z56}B-+GXwK2u}jy$QgpfWph9eEr=ob$LCN4 z(xZ8SpljY!XyzIAELl#99UqDyK8o~bB$VkMa**M3HIP-Cm(MBXgJh~ZWrBuLagFy7 zj@?|I_;J~loE^{4h(xQfn|*M*LvQPq$C@N$im~UkPo4G4PzdLF>LNVog7#@=(voMJ z@Qjl(n}%X1onlb>r*3(=y#@QD8#^ap6?AVYo3`Y6-ED!`O}|w>+f(~>I|o5GvI}1I z=Io!@NgRmMnUK-Zsv6bSpR(IuHDO(KE<}r>wUqjrCtV$@30($?#IXxKDiR$}okNXn zC?UDnBtk0s8FprK+oM{ubST>8b$yfKZ8WqrhDtQPxN}gGUnJ2y+}|=Z%2>Kkq@9S3 zrtbH(mbICFxVdrF?UmIO`B^&y2Q`job}EZ=>18F}swrqyoJcKLErcNA8d)jVOylx+ zxofHcL;2P@wSeB{OuqKS@np+}@znya-4g!0z`*nj%Kcr48ke@WK|d1rMCc|MGWJjPxeOncE8wm3+UNcTXlzd~prU#z32{u|25E>E`z+3%OS5~&EU8rbDy zN^{Fij7$p5P3a}wDNEi9a1&rGFQ+38=ZQObF3|c8K8Xb}SxTb3*hI;yO@sR)x<10I zSPlGMHw%}zI}ql(Tn>;{pwm7D_2#QnkO&oyku>{BN-Ib}S)Hr-VnIPAhYs+*)EU#C zs7CPid7_HD1LI0Zq<^CG2t0D*uJKPy?GE!-bUaPdJl6LJ3rMuI{^YT^S7pSC)fq-Y zA-g?M+PO9G4t2*mwX#sv^m?wwg#4p1imSI7Pw+^ZyG||p#r+- zB)?4FiSSxie{pN8W!B#D$xuV3kqILVSnU}PS^;Tw_o;5+l17N0##6?I!NMPWPscgG zoq$u(^6++%bnruK-LqRz9RhG^Qo@@^Kx1rzr%6QhbmufpRGW88a>|+F z@o2U~PVBH`v2SGXbfp1r%SLXvV{;MV8fjkmU2vs;p&FBK!!nwU%=hX}qTUXEBpRJj zqG!Cv64&hnbgozEOy-Jfe6-bs<4av9Tglb3-A9`Y>$$T}8`4=v#``vv zZthg4WeJ5^Ie!-4?D*)b;gsDiPP#0#_sTiIc}^E5|JgW}*^S67573n;TM z-1r!uhOm}si+6dfO84scZoOhnNd3<}7u|{mayeHPZ>5lj?n3$b7PGVs5vtw0ur~8H z_QkJV&q&Z$MOf0VG5$hU6&y@#>oV0jWf^@vE& z#8nK=Yn{alY4~N}QW7Z^8}(}h>GrdaJ+t5XTX|*1#bJD=L$tlhJ7y;upCONK?S=VJ z70YK!NlWv-)leL~Y$oBL0wN$WQ{;EAt~OCdu+g--YQcJ~Ly5dRD3@(-%TcNIuWr>UPA@}>DqYy)LpNfq(aa-A`;O}bWENtT zb^HY9rpL)Qu%Zj6^%-~$kG$-&S{nU;dE2i@v(mX+Qai9Hz#Y_{LhT z@8GQ7ZXYK;fyVSyaxspSAkKcgF-OrG-tzX`)ADvh7>K_Z9gaN3E_U zU(}pRN0AP+v7+6QRMkzkzJoj!M6}!#q=DV+O|LIw{z4*ba(6UUtxz0O<}}4$Emy$PU_4vy54FQ%D33=W96kI#g(bl?zW8ly)>F@37eVLdhP-e$Fb z{baTqpM?3WyKJZY$szeuH6HE_&ULkKgUl#(b%Dh-&cfz(p4)2;=25qCJ8s>3SHaJq zhX?T|<$o&dP8Ut8hi^8%W;+d$JfGmh_OjJjv$0k^er=Lp?%NlABI9Op+w_K0gk?-q zPDyE4J3g6qcDqe_;{&0^2h+LpRleth!irCmf)K0kkOr6vFanub21L#T=C1bwNlt+$ zT({7#yz@qzt10(C!iT9L-pt;~qgTHZEIUp165z>)oS(XDD1fs*o$RkHZuV6syM}j5 z7D7e5xukl1{`8g2B+Phf9I3F~=1oL5eD(G5nV_QX%e_>MGa8leLsU6d-&_J?u&2H8 z+B?Vf^~bBA&6?A)P;Bn;-<>>ieKAzuXm}?|aWjO8@=Zin)28f%wm3WEMQ1TPEEMG|*}4{AkGJn|CG9a!Jg7s$bK7 zvtuZ+DFR)?IDFft5Lx}@OU1}hc6yac1noLza_Zjn4o^Kj&DceU{PH}aUE`HN53yb; zwuPSO&|4;FOEt!-{wqZ|uO$r_`y!uI3XbO@t;)syWlRlwEZC$oXyd7Ebp*{qtYq6u zIhi>Vq>>%&7p(h&6s4jpo5GVruR^A$$C{wod&Z4uPFAXxGAF85bCMv1xUKkDHn|b8 zK3y(1q|l}*qN1nH-G(Lf@ZJR;p4iCIF>}LyqD>tnpSEdc?gS$63G%S}2X_KmKuRVP z;xcrKxdp|Qk2fE`im>^dBO+a>^G0w8v9O_L`-QdcM~qp0eAMAII#XUI>Pj|Kb^eHx zTpF=rJ~D$Pq4eFLz)v|u8i(d>SrT|*J>%*c&lB#t;SMGxhS=p)wwj;!ZuWlZnpTo^ zzY*Rr&DS)y*b+U<8LqTm(OMj=OWS?wg%gffd&kLEqy3JlY&p)1 z+{Uwqm7t#SwV|p&{npmpC)W2w+PBTl@jpf`5V+w9&ys5C~QS@MO-AOE7 z+ApIvH@~?H2zn~{#pM%X--%p`rQvI~jnzrQ*eymZkD5)=6wvUnjGIcP^pIHcqZ7K~ zE-uO#ULF< z>Qmm|gfAu4UZ~o71kP`-DHmoLF`6BHqMczOJ3|_bSerOy8$wtu37hG#&5Yjfj*-Bf zka(8P>yX+NmB)-+!S|#oz_|0@&7mGZU|YQXMvH!WW6d$+`TE^PdEd*kCodSo1zdA2 zw5sw{S2}i{E4%b_H&2IdZoMqO;b}CHzY?l#ylvW0G&H8*pej2K;*(JE&<*rR z-Rhlj1_&s70;PH#(Zm_grS}^=&O$)K74%%Lb7guj#))68BMzS~m=djCE-ol8G=)yU zL$RN{TM|u;-D$k6M6qH^+=u6trg{k(nsvgu(lduyQ#|eNBvRbKa!#6s0@CG3j7Yk2 zEi1L_m_}W%)o)ANRvdkJjMQz#-WI@PhtZt8GEreok1Ch-BH{Dbi?L7TpGQG1G`vl% zR)ZY?muUAxK>e(hWiOGqFrVhQpEcLw`Gl4Ad;@$zz}v!Jd?4(`CY_+|f$4ruWFxln z{TaHb=H1NuA7nG$a7sj`=$bPuYjp#6-!;Xn`LAQ&D4EibRBnxw@|_adkgV$*@%9fB zbT;juNj0|%Ug0{$Xy=bo(u_^FurCs{lHD zsy^CcT^SpWrV1JuU_Gt~8oziHwJOG>hv!I-p2gjzDRJO9fcX92_gSk&j=neE(&a4fX<500?Rl5d@n*b_9)Yk{*LUT6D`ZSNvNK zrAg|YX%Y~7Oe$DOZZ%hVEV2?gXiny-O8UVOqD{GAb0#uRR9cV)pb&t3ptm^6_2qCGRfBH>t1#q*?v1w7xU=f+ikwXvKYVEqrhSp zcI%d(C{T+cwjykZH(LI{;Q`YYQ9qBkRtI17<^(RXedotj6ahygrD$<$fkBgiM9psB z_zJ&Eep7azq@^^g3NDV(RrV=CW$%f_>}#jQEIOpiVGr=~*n9jbl1zdGgDOyJMB^^6X_;X>DEx4W_$U-}wSoG-X_6;`@yR&Vb-BoYc2 zmSnrkJoskk?s}y@{(w=$O%fGFCJ$0eVdDi&Tz(#5lme*$F;G+fWG2{jjk3v=HG{`^ z5HC_1n{KTZK1dP!R3$b)IuruO+Fb}R$6{QNvx3h3>rkborCnVc zyE>GcdM$LpOE0k2hlhs=o4Rde6fj4~<+1Ttq1x*YjG8N{(|23ZR%`ilUe3q6#EPcx zo+`Pp63?#gb#Wb3$Xd)UpM5IYLvG(VRF}Jn)rWCpcNjLzPs|;vtz9iQcVK_+-5)tC z-}FV)sQ)?qNSW=$(3gb4oyo|-jt$+HiMwi6)uR52M1?ZftBnaJwx3?^FB--(__jy6 z!$H?wb~u^Qd=_DoOyONu&-@JCWSyadDp|;_Mn?!s?}BRihQa-1^P#`Dr`2iW;p?~d zv~KbV(|fv6w6g_jg>&S}QZ4AJXJ>LW6(xi(&n}v_GYGMxYQ1avKLGK>8kEHNCaN^F zKWMoc$=bJL-0U+o!uh2S9<(JtFiOwL6s9j<>&P^=DGJ9)ny(&^Ma*M4m@#-;+ zj>{*vzO8wD4DtC;nOj&XCB*``AZ?LbF_q<^3~oY0Si+&Cg!%!p<^+XciEny zI)k=SHRfKvGA6QJJ&d)x{3>&hDvT`1w1I^S9IEZ-HQODrsI!C z?Cz&#a&E>d`uI(!-NXIIzP?XZKgt%{kye}1ma+t4rHZ5-n9WT8bPzy%Ft2Q)o7GI>zaa+KE7+3mzVZG7l2Nbn-idKVoA4`WzVa^ zrP|Fv!FQWBMJIIO-5S~%bV2@v_Wqgs8#>IQUBAuQFC{VBuiPf~-_Qx5mX$Qx4Z(Hd zuNn}=A)A>-@Nr` z&)U1!sJxY8jp<#_(2e?E1hRY&3gzu+)zMfccIh9kSE^&{jI3;RUd?klr1vV_ESNt2 zNxK}v>ix!cZnjlXM$x7BhPlG56s}Eb%I{{)8rG?hS5Od7-}{KF|9bXki3Zd8o;F!+ z%ISsIZn#wr3w;2)037YS9WUH~FuZEJ6uQkA;6s7j%rms%{G|%^O6E&lLYIa8!!LYw zCOCBwsW~w>jdjA}bN%$Y#7_w=(HbNt$?i_oFN8hAdU#!u25lg)oyL@t23$CY>3(Qy zo1|E$n&|+Q`q3X#TBq{--gCuw(*Ct|%2T*u0f#4e%N9LGl~b?SrEA92{JeYHyfPmZ@tD@Ql{=KO`^=?Un_4`^h3_hFx;$T#6{zBFV1@;W z2*Xku4CVSrEOyG+o^LwQUG<5CJQk734l8f|5ZDue(D6vOiI8%mBx>Yq8k~<(_G79w zm(7CV4GoR_LOK=GHKx8^B>wy|NXini)r<1fDQakuAyZE`{I(2Pc5XAx6|3TA zi!X;-I<;`GW$h`T^w?z?r*K20Q3G_3>UKj0F8F;L`5jDZQp}y_*_W#e<7wRlMCNJr zUbtP7c%9AO!SwT=J?~BMWN*4Q7caNET9TC0q{qEGqPXA}P|{y&5#JD5gux~edB<8@ zkBM_}O3-?3a_besfxOp5%Jju6U{{sty{{ErGtCC;xLT*Yl8^ z%!7}LXZ24%^Pbg9C0STMlb3I+u{$l+h!dT6nSVR3<8CFl*PEtr%&$`1jIXU78(haL zoSBh1r3KpqzOjB&4dSp#5r7@qHLtUVJrm_C-FlQlb@o&YD_3G72tR0=z3+k>ozt_5 zr}qOr4Qi+-Rl2etu~czOlB$0m$(NGca_#+78E87V(wF33mW9VM6{du^(7I(9Ra!*m zkD@cPph-6oy+RZyC(O&mUg`4z@! zW!j#XKsSWY^+H||pJi%TypO&h@YcN&>q9&JpcKq*!?N3n|NP#;r1f>|9c&^`wTHXY7PLut(PK7~-lq+ByWT4w92|~Hy>6tVVxkw9 z-=-RGjgfF9GXlH93ApbrB&v*(@a$>+GA#6~8K?=}bw_kBy`~1nVIb-K@v(}&%69<) z#f1#yfk^RrG*Kp_!EvA6^dBR@DY{=>PxiG{A}}&43KY+oz1-k1@I*RdH=RQ=9C%8B z00pUwejKR_Zs$QihN9f4KdFLeOY{)+RefHZiJg52xVQeOUueH#JG@tW{LHxEaSqIcCX!1*-?k@53gY!?!wm8?P6g`g@>m-m0^a7E2C|i7{C!q%{{kYJ7I=?w zv@L8AU;EEn0q|!9@QPDk5E6KtPeRf1pH~@!q=3+NhKx1AYmv~l#Qd2lmIyq&sEiMX z{rwi5gt_JPH_!^)CB?%V^S65`nW{w%Jgx%h6w@af)cDo4^LuzQeM=SnLLo$R=YTf* z+I^d%w9m!{U9YeMZU7pY@5*OMd^wti{jU}prS@_}7O(!iOROsasY{qHtmCL}yxJXO z?u&_v%6Y?0h>eZAG?-3RqGgrNDHi^D7?x$@E#;acS;)85w>37)GRbqP{kvj1I!q#o zccP!OvbZ*apW1wAf&L?}1$cmKFEP|0hFM3Wt_7bsZVNb?P%>j>Q&Q}4rd6EiDt)gD zxwluzXi7>-i*CVJ6yyej8@5@5@50{i`ML9WO;Av6l174n>;t_JZR^7+RAb~(e=?(= zNJzWy6`3mvaOoBBPL-p^FjZ?x{+mgwUFt90Y~iE2+0cQy(ax?UoRiM>SjUv2k#CzxTiZThaF$U3&9Nn<9*VBC2UZPww8k&0U34vI-^ze1_NgW-d@R9hMNZt+#p<1+%uaN0lG*v1mJ_=6#G+*LP>k0{ zis?~Nj~~<0Qi?XC$H!|9Zk@yltil}c&BHGZoQIRtm!6N~lxP*2d!K_}s`{{yw@?62 zyL7>&q}ZlwRCs+AmB)HMJ=3B@DT|TSP~#|ksOu*}kYpqp0rO5|Ax|5hsU2i{WiRF7 z6fX@8;pO`1cp99h&LSW5hTFU%?PQ>$#JD59^2R5eh7SI5T&9vEKA-6B-I`zTWr-=2 z93_N)N9q!v$*^9fpn@clV4r_9QOar63f)y?FZwO92+l1cv<^K(UdC&D$DI4T-mTpm zxX^Wyvo4uew>pb{ubv(#Kr@a-xzJ!a8A8XYUQ2WJ>JAMr$)B;f1|1of>8rP%H`;*c z8C{)|tcBuPl~uj%&WTHUMMZ(Q0NQU;NoQ!WbJB&>9VZcxnbSyf*+YqcRX%CEzhGE9 zpn3(vvMr35N~%TQ{A1xc_eKc&yXC%5MW4jSu(X@oYTk+P0oA(OiS<_vHCyf@T3e>G zm|;rzxUoL=P60O2ggQG+-zCkgsFzS8`RL6+LN3E;nn5G+`)yUMM2^RbZ%IW&YI@^& zIEwJ#+8rgto#F-RYre=vfoa^CZPLsHxB!|HB^f@@TuTQ5m zx-Hb2lKHe6w7`>j1$1{agc1p2Qpr4OA54d~+hSHj-c0JaBAktR1}4X0Tuqla z7>sNloSl#v=(c)Y+uRjvaBrmsDVoAu$$T-aCsg6@(9qHLx#IN-EehvCGFEiO)X(FiBd>Rt9a{qghz%gXFElQZaCk0a~ZOixjIQ@BYKgf1}i@@D3F z7?CR+z6_g1Mh?l1y;M}BtJe9`808a=J?Qw#*pkr}mZf={Qv1mhAtqeLx%0jH=L@G? zHEvbq=W*rVuAY}CUrh%`ba{pdggDnwD(q$lw09R8Qy+TUzmfWsHejbWv!-dxE|EQC zIXAH6f;4wr<`Y?+4LJygifveH_lifO)pde{f)F%s@A=c%9*(q+spDUguBSa@MzfQP_va>s=H+e}0_L8LaBMI$B-gVt8~*Xj(|P!oTUftxYH_RhG5u;0Y%;+#D_-c{thOg=?6-B zs~sIP^6|zHDw^;)Z{qh?Dm<1mMpwYoqwku{F|r2*yii4p;mgLhJlrVe8iB&G2u-@f zpI!{P?!3!q=gX?+to>XCrKu{_zg$tm7gYRgkU`5dq1YMog;E&<`!cP|R85{8qE}-6 zlY`~dhQr|QwFIZEtGXMTCZNSoR{crwc)CsMT+Km1zU}4DY@?A448E=H5T&-gF2^Yc z+CkWfUvU5e4iJ2#+fz3Z%h=n0+#!pY%WrFwq_210`}QqDC|!f;L?P<9Ou*#KuZ1d; zB}!c1P7aoI{uI`$cjj?w(9fxnufw}C)%&jFk5hL9O=v1N3o-{7b|`V)PqyXd5%W)F z%5auCjFVoM?aKlIe>a5fT*JUB|GmqB@rMuuI>_I>gCN_*#Ec!P7Y8serHaQdv_FkV2mGUWuZjM36;GS5fN>udp1Zb-$6v#-oYws?exBYmstq7 z8Z@sLb9R38h>V|saU*(2;@4dv5DCJ3g192Q243s=-VwTS`|j`Ca&Oe5&DMP}yz`N$ z+1d?M)U)<(YgET!FV}~4dq*pwvpI)) ztNjHZI(qub#_LUQ3?e+g(9m7$*siCnHWV=49`q&ID|`%n+-2Q~aDBc?%6B93QmADt zdxEIzuU>$RX;_P*wM9tgTk(t$I#aJw8MdsfDogjty}DkfB^$9@;Qe=jDzv#Wb+hgkkVo~b~k5N(*k}pEH6VS|6M;(cKOTzmqRZ0U8;LOj*rLhKWMiv)fvPt)8kTSzl$fQp`yc9vJIJn*LYtK6 znVn5u?~-oQi7=4i9;tH&T{+zS?8;*b7&VDry{)*$!5-mCzVWmj7IKUTie0^BzogU= z-FMt(>W@n0-6kcCz_1fu#p^O&mMJ4GO28}8niXxVyucI!TKIqaN)I4?8E}b#)cusv z6~~%()z#09?P@j-6;JNVbujwK)RBlfBAKFPccoELDPO5Ts|^EJUf zKKtPLjEU!)4Ag~qJ`W!s!H6Tt|5b7N7{ILAe zVz-UhkR>-?;N#3Avzw>I=f%h5Aqb;L=D=5CH1n6 z-ecT(!foGi-vPnR2ix7Ns*zAWoSj_#HQ+g`UnhesbDJq_`_gc~V`O*J&8`f=`TM=Y ztHt^YAd{qe-qXE*&@fQyv=z>h(P9XWK%ayBfKEB6=VDljjfSS+IOJVU%m1JIQV1A5 z`u#6AAO^{8VfdEu_{M#Oflj_BItx9;O@10iMj4SwNid(j2T=t^1f1va3q2?lN<0k< zXg9zYxdN~#rY*w;hscu0gxkb3KXf?^s=~VFo2oY+`fymEg1Z&|BpTTJ^*~2jGgdix zCO722-BA0*0Oann%=sSA{tM8bY(QkYIW_-x+|>W0>#gIWe7-+W=`QI;P(+ayq(cdVl$Mm1?yeQ-77?UFLb|(C8l=0s zyV*Nyef<9Jy?^Ip-a?`J$p9Qgcc$FL5YDrKEDTCJtVuEB_x9` zkTw-%Hy5}>67_CPt}46jP;a9|Ov35=M}WdJAJH*8Bmb^fQUV^G&zLwSbr$#gI*`e# ziM+j&qr_;-ODWB31+VFNV}(gJCWI>9%#7?MJUcXhwmHtyk<_Qdwy1q#uSZPjBc0ve z0x`^lbO*AoNj9>6lHS&hW=UQV*`Qu4jlMc9%k&)I0GWnx#SGw0LHe{f_d*E=~%V*w}m|yn-3)L){-8Li@ zAF+gtGLL&3j&x}`Qg7ir-$Jaeico`e)B~BB?^x6J)mmUBetz4PeqW#-vpJ$InLwVv zBHP#2Q+u1wFTf(x@HF}P;DIy>hkGuXcmFv{{RI`&Z4*Hs)Rk!0Y(jF%MuIHrR6TJ7 zV^{`%{P@Ub`(3-Tj}U3%A?w=)$riEn?+d#u?o*^k{vS$Rh;+_-En1oBvAzUa+KIoS zvK$r`hP>}GnDTXBr;{_uYlCc=Vf7yVN)FW#D}ZQ735-P}mXK#>eO)Eh3zw0R!FyWy z3{r*~w85cB)b)V({dD_Cm)q#@4>PUKXI{O2cLeA=uZ2|s5Enj`cW`9Yx0=~m3mf3-xmc5B*Wntm=s-OcyKM@?;t9zZ> zy;C$?)|IXo*CaD0AE$&qmXk+vE?d`oln+>wGi19+#QDzlf+GkfRNz7)&F)S4;{c_y z>+u8PLMv##b>cs{E)krD8ak38=}8qQq|wY1*6v=)Q!i^8grvDy7h{8S!W9AeDm7}yID&lvZv z3$ZdwhHO=yv>H-}E^Rjj#LwEP#G3m34jPbtm=aCQXz8%rG06V_!j?V)ZT;Oh?!};W z5`LpwfK;J*-8aeb0BwM@UP(W?kr;kI{G{*1zbc^XuoYS0Hp*D}i<4Y#hP;AA{Mp_6 zA#SBL_D#djxmq0+r!#z&=WDO)JJ|olw~1j%O0=H7SJ|Pm$FAe4l12vjw$RR+8+BDP zB4oE4M1$#HaRc&)z&4sZ-$2CYqtYD>2*{92}{ z7A>XQ5HbCv+X0}fLtkwGubZy|ewISb7u}|`_>se(rIsX21B)yz*+1ai9x}2>ymO+OX757`Gp6OAvUzQ zpT4-3INKg(ppFioHbxkqem1D=QIeJSDL-ZU+|?hwV|a zpmJ?ApP0&Z4Q)-^)`j7(f-7H|m)gnn<{a;@t`J?W zo8XiYQn!{dN$j7Euvi*TSgH@1+@_~LZg&!p5l$wf5v;u?=V1mJF+>|rTL`vJY$@TS zMoAw^OvDM>OXnSoOj0w*@bA|I9f7J~;Glt|2{Yf|gZ?Z}x&nMstP9pc5zQCrQzJu4 z$yqz^5<*mk!|7#^JB&ruWk3)^Z5~n;l8DN6O>Gfrgee6<=5A|Sz^dNdi=$%9CHI@v z%XA{Gk5uTZ9A34z`0MU3$^`O1XyYd^qLo$nyeJunCKGlkVcp8qLZnAX`LSJRnOk{n zQSI(7sXOyRFkT8;Xp~lnMQgcvokhQ#h_ebsZ*R0`v2&1wxM+%G*+kA6lS}ngPGY?Q zss6LSr|CImNS-VYLVccPWG#uVy?ve(*43v^OL{CX*%*i%?0r)^pnhKT-X>+ zK+1P!s{BVS8NN#2x?buj62fK?Y%_&LJ7F4(HTX&!$Uu4CaNt=5_j%`tX`yW{#HK`$ zcr2*e{JvFna<8M2P~~GWKG(636YX;)&>D~CJr*S(BGNrS;1u~` zVjuA*!O(&!K}70#j;0PU;8KeiuS1x;kg_Jl&cS;SuU0~q$9l2o4XHR zGxMO?lE%fvi&vWLh|lQ}6=Lyr|I5nV>|t^j4|8Qj(0Cu>(RKXFk8?PD<7V$jc#!pK zQqjVYaAdv2ao2-|7wQgOJ$BeXVBEC@(0JxQCzg1c2H$F1cxS`MU&6w)T@H_lEpMC* z?{IR83AVHj;N&U=ju%Ted!5ee%M&0eWfRVN)c0G(sG*m<&|dDfkb5mh)1}G2Ee-bc z4!1(GDP8zDib4kto>Onw9#KM zZ$N1H-o1MhH>W3E0jVb+KfYFbD_5w)P8J?bf`fO((_4Fdf)ah&K^*eT{6W6~1ngJ~ zRXj4nsYbGj@(}P$J16-rzhXz(tq@SR;veR}Kf6klL=97{=q16`>U3{hQe(4o+!T2u zr^>wJRDSNt8;_mXoS#R{$|@*4GQ3PlP5qQWIvxJ;;}Yh@$u^%K3YBx5h*ow?_uRLJ6T0lZ zA5Y4=@~v4(o7i$zU*L))RxCSqHR?OA9FoH`ui@)vvnmHleSc(7Od6%`jBw-Lr^{`9 zS3abxsc-)!3J8^4a6fw?xUQhsW3tML@tIU;^esI-{aBTQjPk;Qj_Dh*>`$K}=Nll; z%BH6HSA&vF+(FnUh9`aD6-E;8^X3&+$nv(g<3R??hCXEihS6iPM;A_l-3A!xiS~7? zNMC+U-57M%v}Po#l_0I^?sLm1`+X$C`I;J6F%8jG4FrKvH>(f~B-e+Q+z$6!76xCc zeo=-8^(O!5Xrr3bn+(lJU4uV4?i2>1d=`B)Z`Uu~JD~PQFB9Wgy;Fk+sBeyoJ*SgO zXs`aBZ%bgn-^n!HR@jCH|7^~}Vfq6G)RHKKk}o7XuM$B_>>gx*?YB%O2zS`9_R!lQ z)67@smi+{%w;(w=ru@*R*t5CjJ~>52!dn75#D4P&n4w3t39{;-&HvSLI zT38v7q#yLZfPDllq36#DA7#jZ{89CUG0eQtJWGsQR_5Ug5*6iVkb(+F%&TeD=M=1{KHs0OcC>Ju& zWXidRNux$@3*Wr;?%}L_cB0Gfyx`DRk1Q`K8F5mAtQ%1x{IY)oYt3as@+&4e6^bkqMypdk!{NjuZHwl%+=`8g@tTqgM=O>UnIrFjs&_1##oX>sVl*T5>L0cxsEg6?A5i`)Vs@9gRq!i zCxYyz&oi!aIPr=>(3ylQQ1K*{|Nbj;1Ut@^&TQ6&CLvmj(O%(goz3f_VWi6tv(0-G zk&98jI}q^-K{ps=oXjI~odqEC?82%#-v$Dij30L=7=_N^mK|S5|d>BVCyPQ$s>)@KzHfiV`raFge-^(&G+h26k%Aa)8p<1iK zoq+1sNED1n6Ay5&pk$@^NsPpatnQf739j&;nbrISTuvSI(Si6YfsvRn1U^+M)KX*8 zP@}(%+D#Pk=;21 z_(hMWK*dY*vX8H9Gr#&Z+QNLnCc)mfhLTTrRKlxKhDUm)MA53Qra|9c;cD1a>- zISZsq^T1tSo)n*-UmHICQrWq_fqK?tCuMj=J5*wQ?48U}jAMWM z0?SjJvN*GI?tmr=;88Pka|k+m?|JN+tHf5iu{;uldq*ch_l7A02S>upi3c5LOJe1M zbI(BOMM*5X>s{K9ACoyrENBluJ~5s6x8kO7G=EdVtod`UZ)j z>#=ijU37j_v6*iyth6mjgwa&x!SOicpYJ8>-=OqK?-YQCdP`LonET#6W^}42@Mna^3GI9e%@uo zm{~zk&Dv|s7#C@;l9XoOy>)$JuIDxmxXW}N4t6dP_MHzRv=wI8Kn1#~$}X0ldE$!) zlz-=IB8M?SuIYU7GKZQGf5^Q#c^cW&^APhviFba?GId_OEq{q7z(>sO(v z;yB^9MwCEPoZmYc=y1aH`La%ZTdm?&y3r**f9b~9Wg?q|l858@ZH1-f4!8EKvYK~u z`(ap}K3j!~TG^rF|< ze{S!4*7En+Vzpi}al1_)&4`RUW5KP2yD04<3MWW5*9eC{M`c>uifLcfJn zZg;Q&>teTv)tehk&XdwYK(y~eJk-z zkHWU%K}8{*-VG(+Ny$2gz5w6+ZsL~Zt(+AW7b=MZ`?syVyRIX#fDDPl{UggGPy81f z@+`+(2}psLFoSB0U20fo@&H4{GRvq)_V8Tf=!_EdPRWO%Gj0-eRLH1w1z88ZOFvDB zfU2NC4f^gjRLVfWVP8HP6zW%xqCFoxc*gp$E=v91>cci9?9p6%q$B#w&h(|#eCudO zU%OvAfmmZ|=#)24v7z=!&bs45N7RzpDYCk3i#EfX@ox1x$}a$D|JZmsHlHW^aTc65w5q|Ps|F{$^qtqCx((lO+C7zv zA>Fad!S~3;R_xHteC?q$WsuP*>#jKwYah1nCTA7MCRpbX1S7-f#h4dauLAa)61d z5O8=oG^h4R$76_^MIwb5qUCZe7F(y%7DRd{d%Q-!ddj(aBdFeE=43$YJeMm_1~6v( zYHHvqgc7j!dFl&weK_{;8Ppm2A@DKSrh!sOo(+}tiGhM{&N|CkoGR62$HX#l{rdJ0 zcukC>;FqmQ(dL>=up$kgK`bFgs6``I_H4@#63*Oyu9kK=*_`NxR7Jt*U02?1`|d<% za)4dBJ>|C2qZ%G+uj#m6-w@LRQK?cQ!MHxEs@03_!HAWY|55Ai+W?SqhZCW<CC0>gKka! z&$BM!_x1bu$M3G;^DuD^TbC77eHEp+uq9P+2-FACC0OqT2mFj2&IeC!y{0A#anI-> z=m?HNZYPVU61u()K^95;t}SnP>y&wKIw&Ml{?Ya^v0aG+p2w4_w2V&U5UQR}lVv%) zo4Zb~dBz`)=NjpHOFpzXuGR_J?@+okryRZA2wJ=C zhcX+NP3CH+hc&XadnjQ;`8p%544Dw={J`eJyd92~m088;r*{XkOFRWNRMw|RCsOb!64`AdVP#mqgfzWN{2Fv2AO!c;hJTWZDJ!2>{<9TR!OGb)3B+yx^spabpcm66Gg91WJM!CnJ z`T$pkq2X#%dhZ@*o-lv-Xt;p_0#bWjetE`M>xs#gmm_rudVt%9FFplxKxjY`w+-ueKU} zI2xPddoL~>p6Yn054jXc)Yh17^Wi!?aQwt`i=B{g(rb@9s)7Gj72$-&+!}){47`X< zJM<(Y!Mez-J39QOk`lIH!l_dxPSj$mrxucU%W(_Xj94Y(k8K|7+2P0W^p+Z`?KH~o z5~K+*J=WrSN$i6n5f}P?gZ)a;&FY;umRexQT!)#~e8PNvdk?_B_?u~QX^GrVK$Cgi zvJSm?a(l?LZyibiA6NqbxCRoMAE|l9 z1X$X|&Yzy(vXf#uj|ayX)V&u=SOVw5y-Lr_Fi4{88hlsDyAucOuFkIgDDwPw>^kkW zCxCieu{}b*bnYz#4Umd0?{v#!z?FnQ#S|jmZ$r(my6W1`Jv$k@FzEW~+d97$gvOoS z?x-hvx6@VWxOK#0d~#V?@XX}19M{l`Y&D;5k&h3^lye;kD;1C7{2Wnx&py;uI6cwWn>RdAl5r^Y>#Os(70a&6B;up2 ztf=u%$}Ile!$yG+%Mt>q=MiY8cvdy5TqOvt6W-57Y=os%0S5us) zEkrdnbg*3=vJ;z2)NU?os=JXV_V%ru>`_$wS78R&fhjF}yh(+iRq$SazJ-NfnxILu z06;^La-?^*OuL-0?M2*HM~ZED@a@?E)0Cj@;=9>UMS{m@S4}0z=XuqRRjVIb++_(a zXHyp=z0Z#NAKIz<=VbM}?H{ZpBo<1=&#Qf|&PH1lAQx<@y1G6{ej+7pZ~guOGq!*< z_lpyq^J1B|P!^$%>$dEIv5K}Ay^8@?{Gw@TbnHCf%p=D~t72C&{F=IzTTF2DYN4W- zcp(4e;!+0_@EQ*~hTm{HhWKOUHS7wjVz(?{_zGt?<9%3NB}RTTI!2BDp$5Qv!|Gd3 z;BF4OEC9PJ^tz$PxwGSbvP7u)LYIOWP(2E!E!vtYRWq%yMS|dxFG`?%zB7TlGMuTj zx^1^YjX$gAZoYeTB}EB>l?ZJ}Da#n%4Cl5CyQ)GS9}v%Ofjik9X5@EF8X%peeq(H`m*(S#T50xf83PIk zCMTuH2>kD6V()YUz2+5gTGNWgp_1!mu`&kzwjOS(a|W(1CCMw<4QW zTyeD{^h8)P#nTr);hJ&jt$sIA1w1$^MmDP32y6{zL}6Y55zU3Iq7dP$qX>~9FPlQ-MR|Y_6uqWEABHph(zyg(vfgu3nVfx&tWcwR{B4eMt;+QaV#-q;0#U+ zw$ws+Zt003b{4fEZ4kqWwL(A1!ai|>JdNDX2fI+fsg>CC{gyy)CtkXLN>x?1gW)lH z(Nbq51QOAf(`^=P0nL%z$-4+JnwUsYJJOc{7JwDU7m3Ssy}szt8Qe%2e78RX)f5Hg zX1y6`%?-1r`!Xf0qsTB9FFcKcSi{&d1*^0@RZVI$ZaZz~n(JIL%T@Z31dM^TO z5ca_~^foW+BPEqht73nZV5vM-jgN*U-bErCic;WpvD{m>LiYU4hlZC*6zWAP^uhHj z$e7W`e8Nl^QHg#_1l^8DXe6m`>VjDE|FW!Q!l%lWN#;q3(XRKD`Nv`aSZf^5x5f;<5_abqLhos$=XHoQIYPd2V_{%HT(JfWLq5bJM6?44fR&F z63Y2uFRrEe5Wdk#bh*hWWh+^Pjf*zmrS+0^Ams7i_CpVR_R`eH28~0!)B0!eIT2QT z7Elc)<54hRWMXO#iSL>9zRNM3`{T#!In)c$AFagKnx-%^lo>8aA%20&QOzKS?$=Kq zb`K{De8;7V2OD{;kTZ@hGn9i}I_?98;1$8bCZ?%UY>gdzm70T}8jp>Gd3%^muY_rz zrsZkz*82UW)hkdFXy|a5@sfi&+(SRv5i!$8N_jmP_E?YM@f*s|6^vUSKUcnGIyl|= zj1x=haePc-wV!sdo&risD;M)2v2uz-dxz2zO3dwfyLD|1ohHC{DqhNOk?_4qbT(w z!2@DDp3k|5f}+qb#drx}ems43L0Jp5$Gl_hwHJ}ZG*mMPPlOnibG^=Tv`kGg(`AH6 zwOr4=V$~&$AKvOFbKyzHwjcw%8~Q1afy-W6G5yMl)#>!}I8t?cg9Je-DyAzZv`2Ox zH~LR8vKQL{H+GLrPjAd(o`}O|A)5wZ#NRNq0*b6BA1KT2C`5~c*4R5ZWVc3-^CvZj z=@cz~fj548XNc!+?zD~S8s6Jlt^u6+wI4ps)9KAcv1;Q=f|(bM>qHTV+E!P&P8L+T zV2l}k%}2WB@7ZTnm!3l5LhKsy#%}YuO?Bz`-nE&B+-BuVI`lZJ}-Fh91+vz}5-CKYzT=rsGbjsXHNh{L&W@y$vgZzfL$e!h zcpPS~bZAkW>C)~D5?eJAiw8Ilz3~!ZO3TD}vmGj)FYzPkj^A_1_pR!IAL%4y9WCo0 zO{y}^f8!+4KcwBuRxn!@NsY|E(#R&HN?#)pF1%EX`rPn(`U=y{`Zavr`Gv-sVmpta zW!^=%jT7JxQnkr?JZ7Djb2Rjx7R`d)m z!c&G7R()+rRdQY4orvDc{N86HWo#vM{|WV>&^7Wx@mtz6$FuMZweG%%I$~4|j`@#) zeUXIqXA2(7Ba_3bHil1KQRZBBJvPkbV6>18P=p#5v0Ti(bts?Y1TjI5^C>A9Tj8kS zDWv%O!z(?W90d z{p~{l-j#*`sKk`>Bmzl)Jx)q0-7s+8AS|j-hF>_D@DR9xcfabm+`YM))Oa%ABoybZ z+a9u*WwIkI7j9VGqiGlR1=jREBL%(}M(%C-@t!cLYQ)-GD6pnOgBE<0mOb2KGA6;Z zJsX8#H>tq-37uL9OGDpT=`NX7TfUq7qu>C6tBva_eH zDyAVZuZ95V779B#A%#%z1OSMv&S;*1MlfVC%~K7I{!a_0-wM`~>5XBs6M+n*`s!YM zlaHsX-_C!sP`Rqrnw?*}EV+mcYojwiYDoUs>JdhPEyHnB$|0raTsAO3o`E_?x=bt9 zD713;X6E|Tw=kmkbuO>d$2)9nRN>*_&t+bGp@1UD=&O#qGR{9Nlt;LdDoZmIoaMr9On z%i`D+U(J#jNHyTMg^JA9)xKpVG4=Kq>s(=)q@fbNJw=CcHKX>3X#7QL;j!=5_aGRa zKngMXSKAEi6ENN0nkN_+x1DRTVW8`FZi4pSvTeTot>XNN5UMWQbe>+TO>zk65x2Cp zX|MG+)_n_uDZ~@}v7-atYY!UK1Zoj6ytmHJk;aPjtIaxoM2=Nh1?HxtympUT?7!o+ z*F6Xo4&9kvvSJA0>~AYDzos8g(nd-@t2pC*69|bJ8l)rBh} zzYrOf;BywIpFoD_ezb2mR;c>~9UVO^HglKU zEUs$uK<`aK4fn_%3I(%6I7k;x+ z6<6g4zwP5>kfK9j_>w4?+o2e9?b$=$_8Y52v(8U1$_fe!kW;0BTJZIDZ!DYpmC=_v z)ANUV22|w|4D8J$bNPUDIcX29S2-qRxi+S{~r&43fS zhIxQZ$@|_g(FN;jKh)EiRIhd8Yu1$YAN^?<-2)9?qu>P)xn4>kCXSjo+2Kp_^9}U# ztpHRDP7)_4v9xVpYWJq<-5&Xt(+f`S4unKhRELO;yPH`#IY7hp@4&&Xg$LGF%tK$j zm*(aP)`MC*PemQMosT<(pFXYWF?#$Eh{2S_#i{G}&A0_bqhWS5qI^$k3n4{|@4Zpp zSsUoSwN6<5k6~3mA>vm4)9R+@JmL>zHRT{?lMVrH?c4Doxz86D2=;n=EeZR zuZnbfth@X7>%kxbHTT=73-;iZ{Z`%4|9J((30ly>$G_Ki!216(eT1P2!=k+7(SM_{ zVVC+DZy}&g#j=-&<^l@&h}E|)|KJn=G6IN>Yk6wm+W)dKdiu;0W^)Pq81Mdx8r5s%^so2A*Z_iQXz@;W0O@bnMdpllkhwcqFiDCVibPkIq2?hGn zUo+AcWIU<}?#FY(adMVMvzu`N0QbZjrk}+2-#^Wk4dP3!PFO>S?U``M;SOhs$6JI! zAAu($c*DwEdFD!bG(J>OUr{lnBrA)WJ^XMG8Eb2`n0a}baBi-#8OBT9sXWC~&2LO< zFG%+Km&FPTv7S(X56^%GtC=J}>zlPcv?F<(DJ0r(+EXs1Gjm^S?BL*lZ~zUDKsuh6 z6uDND;=;9~vr_~>OeE|2X-O_&`CO<>62Yk)&php>;^5J@h zRD@e+XKy25{yqG;4*}~>jsJXZ++i8i{W0Mj`>ip#BDMOPswsm)m8IWgU0fCTEv#P? ztAQGJP3kN-6+;yjl8+Ji`h8{QlXon3K{bR}Jea}<@TJw<-II&nHX9^*#Cw_c>o22n z2aBh^dg$a3-21KfzwEXIuGjVVN+YpI?xr{WeJABSdDC znm}ekBaO?DX1@Gr>p$qFa=g1C@quL^ZL{Rg4)nsYezEXFeNN zIHHUMKc$tBdmA3z5m9cJ1^3yeet+)Z5JUg9t)xP+lb#P(US7r3ZPFus!_~Ps8x~ki zmE1%J(B~T-G*JGX`TYT~JP(OML7KXYKabn|^zoM<_FJ}3xPo<{bZ<*lrsK^W-pmTt z>QRDH0+W~EgT|kvs#(;6-;Q^}ui$}x3DfdiWf(5l6oII362+^R)c1VAWlq_RFm?h_nDpk!ZLW2?Vy!E@3A8x#dAY9PhyVsFEzyQ(^W&53pMc0E2 zAzlId?&oW^CqmW|p#~SJXd~-|w>bWsrNC8e?*VPdy}ZXdA;S*}OirmX1GNlJDT2Eb z?8q*TH@$|22;#VOvm}XT=gZA5rGM5P`~Bff|9C+|n8Ci2-=)6MOS-l-p7HkL+li;l zk@oK`zF|N9J#8??&zNPKaO;;#6(sKt_=t)6sx_wYzQd2n4;&7`d<(F3dErtsOHCk)&)QGlDeEzF}vS{SE=-Y~&E zU~43%bW`rl8~Xnac|Q{aVAx_J0khFH+P`IL(c+iBBvfcS-!CvJLyPQ8`-_rV}-#^Dn6WK!$(a#~qlR^H=5!L$CG0>ifX( zg^>dadSKS%PZ_cQx7K6?^LWC0uFM@LFnJ?OoIM;s?V)~GXmymZt%uG29$d&j-cJpR z!mG{=*LipL7G7BhKe9`WOgzkf-(Z6y&7P*`y}#E39!(&2^lWy@{Tx7H zH6)dgUwaJhd+0R7=>nM7|OuMAYA-lvSkYTj%`F!0(I zq*mc6Z2zx;(AuXut$#4g#sww4*@9E{o17%9Ni3R9$CRd1B|X_ib>AP|R=n+G!k8sMqa2V3i@^@32jbku?ZE<1xRH*R!WRiW<_EMEP&n1o(EkkgR z!FIzm(4>?rn{b(jC+|gL!R%W%OmaN0J*)kGdNRHosZk$foSjgU{Bt1y#n9QV0xC58 z6SD^aMNp{SAP=OA$}_{Q?xgppB{i+Kkz$If3#ZCbkB+`RVO7*Gakj!)V%b90ZY_O*zZ znnBfy%}84)j?;l&5W3)!ziA``0p!lkg};tEZsj^se`g3y0qppEa=ia;7kKfgA-Way zTGU_S<=35j*5OiHvU>TlXge8Y=e6_67UUJw5zhVEtWwMTdds7Yf`l$rRxT_waiQ5G<3IyP4wL)Ue2)$72Gx zuEfZ&J_A?)p6JD0MqCD-yZ^V z@cqtgi$=U7|CX&SisjPLS-k50bzAQF4_4Mnvh-(`!vObGRMy<}nRPAVc0zu)sv@vA zdOtxInLvCX*9)`AF?sXTBB%U%=&;K3p$ssfNMN*3Oxyj+%tj8%}R&Vp*N8Bt)`3+-}~QB5b!oZAb!t=Au<4*YCp z9szOdr>h65b-*h~Zyy-l+{G%Jb-s^3q}X^2`RttJaj zBbq&J?mHUKV#=J+Sm_>|3Sn-|Jn2Jx<<4o$k)5tB-!B21`V&wv{SA{hKZ z(OHH((z*9@sTV#2dJ0pe+U%t99ZpW(=7-!Ijujlh8b&*)3?(j4OkC5Nv}GaYWM}FN zAebGoEm~ga$|OJD;#Y5R3-04 z(D@}qBAb1^&VPBOUu(H^as1rH(hqZq!fXk8ddoU7A16+%s!oFB2b7Z{{my_af!JM6 zm7GYTrFuKubBiqtuCsvplqU~ln$tv~7dv*`=N^&!EtWH9elwNRbE(r#|+Az{~}fr)6JopA#RQH@F7^%k^) zen9))p1|5p*dO%u?HcD+{Z&;ms^_SH?IHQ@lSx=?j`Nw3>L;Vp@IuPYn zg6=1ZiR#=g^AM!gX=BxIVfY$K6$k+9tS154g0r%H6Cx9A#)FA@YCIJs1xw}8NRFgDBR zHA54dsR+I5p!_G*A->&jmt2V4Ez6fpm)H%xt=ks#3CGcCDY<^}7)ZMdxSRy45>KMx zw?6>=ws5~UpFp+8w|h}lDkHOI%h5~>>9fG$hvK2L?0ktBvNJ-8u~C}oFO5ARX9+^# z6oa)WAvtd#yXKW}D_Iw$DgQW%(8l&fbuzVncebp~8CB91>)b|2W;3?Bx-rX~l0~fX zAi4I4MK=3@?Nb+?IivdUFd!23AVjE!^4=_!Z*JB4^(QptWAPtY*SH>5$mlbIh_6Hj zClz1S^}Oyf^xvR42poUrG}qesm;qg}`jypQlOk^Um(G-pVJR0|5}lQ=9g`}>iDO7= zii3gyHQ*=XlAF%xIE0~WtH4TYXZxmpedocH95v72h2o_HgM!S9MuTVf!u)^bl7ABz z;sxR{JI94XMThHck*oRlHmoKinEWT9mlPSpthdH0Z9-F!eak@3*rnV4Ldy&v8S|6k z@~E4V3{^?d%N$1egs8yQP{DrSc_CKJW$_7!_0zrvRk&|6iqzkSw^$rTv`SOW?SJS* z;HV8`HAV^!gVG27dF#TXAxjjbU5eLUm4dh&RyxReN9|kUJgyGWmrXMl005iqbB44_ z^%0WT_SL&k>uy%rNHE&5(89^A`T95Z`LzMb%H!6JwZcXAz0JvtD3&af(hwj`MgVYg z?6dz@fhiJp_DIXl4dLYEL=xa|ruiY2^a&_DLI8-SXW}?B*X)Kv%V<&NX+1zT_c4bW z<0fJOC#}y;<*r9m#+@5ptY0$of(8aQ$QZhMKdNcv1AYJAhm@CPZ%n+#*7(NR1P25IPeO&Kd6@4wmAP$LoblUqeA_C<93i#Z{UYB?n`AFzw4BgbV%}Z zi>}wNP3u4J?;jtRrzNa(!YV{j(Aid?23qTKD*EyzJHS9K4VsSTTR>L{VogRbZ9o5) z&r!mT>AGyfBXfH2_apw#;nSzkK!__wtk)P+^+Pz|2s{tJu<+L|RSE#iSNQ z)G_FfYSa?7Mwete@vT{M0y*-TYhnXmMa%UdHU7n@yj9;sFaV=6Fnssf9BfO8?M?-79&QZ6h&i>1GHQo@VeYmiP{>JGSMQvLvE6O zJ~44YDzkqb!k&+#1kQXTuNPm}OYRM9#99z*gPvvorrp6?aUhaPC@plY5JV;bZy4{! z77!5NHgr21Rul&Aqa)ymE88#&HpMF@3Yz27^=bU+>Wr=#*URZp0R5&P%C+B_3O1Xx zpBN$)(w`{l5X8E=y&;&b?0Sa#h;!JEsjSAzwT`9!i`ui)YCGTL9UHZt<#&}x&;+Sk zj{?jK(SoSM-Dw7m=-@UHmDyeTXNgoRvmqs^CrwQkw;ph{xvQD+W!Vq~f6LA;DER(m zr7J!w%UD5i`TN6GLwtvw2`?=ocYmPBNqVa{_Oz0}{kOgnjVIz5A^MqOgU4yqdFf=% zlp5s7e7$!)OZQ8U2Nm=ECo;X)U(@gM9lA_@uD(LM-sZ4z>Or*H=^C?GG~F4Im0*3x z87t?goml;lmr3eh=Ya(l4$v-Lh^si3H$||+mP;v(;^d|Lp#ft0OM##F3YLbZ9v-ZFWuTUA!Ks@gq&r6-->jN+p*#x=(`>TW-EwG%D=;_BLDTBbe9>>?{*DXf(^lm`>WUw^PUQDzo3W#7`d zFZ`uo@4{pdZ@UQVPsxh`7ZsKP%|CP;^F7g%H{{b3zP}O8?H)AtSQS|J4b*EN1#Jg`QH(y@eBkk2o zW4>ieUorlzr^Le}nXA!rWy4lJXZpqF$avy=9@nuX`_X$3aYeNBzFub&j^xii`pBzS zIP69=c$1O!EJly+zuaFNEHv^@(6QJVX8IT|Ij3HFY?<2EgMHbByxvV8h3^$qQ9 zVkS*mEtaBFu7u3K-uHJ(w3I)Q-M7CF%)ovw~4gL4yEp+bALuw3+Ni->3&(J;C|Tn`)R&yD_8}ZIi7Z{>F}LZ!dAQ!%Zt+Deukw z#P<)(@e%~D^<4LtakhAbIZZ&|&f zXq<`T;g}efw6>;g3nqWC87%}QuiVa56q}C4mK%_x9KJi5?CF7|^4meX0Rv8dhTjgo zDGc`ZzH6u)te&WK7vJss!(9d}2a=PO+ZdxzE_S^@LV0uV&1DA^y zd4fcs`<&A{y-&%3oMB==Rc>>TWP5koPfeW3czQcCuQjFP1=`ulrbF`RCfjQFtMKur zh_`B4YyVfgIxR;~$YHkDVQwL?_nEXgl|hdnb%=2PDpujoh9Mub+CbPCR4Wk7uS@@0X2?sc)6v9Hr^Y`|PTG*{o?6HDKz)A7QH%xq6r*;H-ZlxsKi zh@8{%LO^uyWRFg!T)m-Z99ZyyeyF+ec%gj_cOlm&)SIIgqVH5m zhg8i?r>j!ws+-Dw*M@+_wFbf7^9DhUIXNW*0PLwM`U!n&ZM_%mvLXp2e4VAN{txJ_ z%GCuUN2?yqqx$j=1-~uHiw#VGb{w>tsWiNkDsg(E)N}B6oJ(wL5~3$*3b0?yNdP<2`tqB>O{{H>>< z3d7B8ka`k(YovHmBdXl{`vQQE0KCDdH;bSzK+f56!i7ZrE@?sXV5p{SO{b99pML?^ z4T)c1IgQt#;u2M}Me(;J4ge*(09{y>019S#4m~_Neh_yD#Bt4lV)?fs z2Yb8cWkdcZk7di>U-ql?3#xdti^N4yW!DJ0SU+EzKt*7o{Y zjMVsRNQ_pQ>9u7B4$u_}Wf?PuDS!0e_Ela`xe+XP`tnnBgAF!5GKR-C;2%okzq)R*x| zUS1XImpJ(U2WsH5vwchsM+uE~NpA5hE?6-g+h z12R)q4xSnlPpfOe<}1y~NNbu*SVTngkPeCk+-GM~*jY}mEHB3kr4eYd$*l=!Z&y(k zD!F>?rrC+oY6 zc+h(th192zW!2TQM79T%fhm^{h!j$$BPK^kmGpTZN``rTvl^jMHq`YXCe z-7Xtf4*dd0LoTmw{=!bj_A;x)b;IG)e&@K|ni98mR8GF6)ea-wfnGMX&(1pKsN3^Y zpIu1tps4CjU#`Y%=!aZZSs~oC@M@fZ^2mm)ylBuOAt~icdEuB-4yVuIa!XNn_h@9> zN-$goL$4;Ne$gVkZj{bwuT(vI+V8yI54a4XyVocu%};ZWF6tGD;&{3sL8ykjGP3b_ zm2<*oayZ9922nLsYG?q%NUjBk-)qi>)cB=;7k@IMJ-6lF?G$hAIPo9!x&7dp{q-Ys zn8rt0P8hzpM&b8@r}Nr|UaP0~?gcgA(imUN9I6mwnJ}mh%-MbN=KRzwpLjTNOG!at zCMFHze^7WuuWNT+0u(Le0gxH4)m5uc68ld8v^EW_3dMYAgrbjmo!LwAeSD*UcN!fq zOY9F&0~n)Cj__^a)f4k;Tczt1D~E?QU!cfY_QNisfR@FJeDm32CZvKkCqF?QPH7O~ z2s>eG3hHkG4{{w7iHL1tm!wxMIk{CLmyHu&+E1-R?oU3mc_-}jgw5E?H^Ymm@aBkq zo(<&cmoKEPD|CSpkfZwA+j%Dgsd6b9?fqYQDd~w0ROr|!-5~b0Aqk09o|=#JF61p- zVbX*UUYcjY9N%!!uR3FMB6njpVqdqhTMU(x>lT%Cgdm5+T9b2mIT>t>y$PF?$r`l9 z_Kg#xhJs~ms#XPci~}iX&=j5(FHgE6%3*Rdqs6itZi^?2pS_d&Rufze588Bk=}EfH z9o)yy5ITkI_I=g6?iyDGC5;%pDi73|B5FE)AD|P8bUVcXu-nt-dtVzZP3LNF^~&VQ zC7x~Q4}Qwj&)$z#?D+0HVhq6j$j%{Sz_EArkWdcYxWRN0{}z6UJSsC|h8f>`+rL%| zR0M(RECR?R*sPrH&b+{v_iWl}UE;W6(>suZ)d9-$U6#!vOeOn3lLY_gt2@077$qMc zUQl8o=_AiJvs>J^w@2gian4zWR4)X|#31zk zw=8o*3|;BQpm!hNXMv>$mGt}3G6Dkz236VBRwubFTL75iFf*5?_R(>(vdtpn@`S;( zCRs@xA33rn{N+SVgO>v+L2bXm*>QBflg_>p)naxC>aR}FuLI3!3cAJBg9*r@5r%;g z@?gt6-cib_5gnDtTXtM?%ecG!J>E&!kpP-)l9G+t3g%1kkVXXi`MFJ(rQH)FuL#@8pvlZIKm zWlwqkBZ6xO3>U)Bq?8ArzVLjbsuoEyD0;@|1uk-b7j;Is==xyyD@7<3>OaV>{;X$U z909J3y)A>1R>o*u-uyh5*_ZBQIyQJ$24G$DpjA+bVguhfAzTgPt9L036 z4#Hvg171rGFiC-S(RJhX+cmUB+pFfB>2{oTj~=s6NSAwEw{F)*$EW?pGO@t;e3#{A zlu1*2j2K~B%HY1T1rG&1nJ?I*Q9)|zcXi`Y?jZ-cReV!EjNy)IvKz066!E1U12~vw`Sb_DbVz_J zX0~aJVA#%oc#CJ3_f;SqO7^2jO2E zJs{tsV_Xd##SXwea7d}EeCCkp==Zu1`jfJbW??d1P*im%9yYxVI=2vi_i3UBU2GD_ z{o_+kvP%p}9V?mvOm{Y(%oYR-zfe8rmt)Hz?U` zWD%(9(=2jcUkSK%drHD%hoBpcqFOWVz+h%y7Q9%bqA{y`sd&<}zCC-o%&b^qZ$(OE zH&IMHVhq!Xno!mde@X&SFsJc6n{IDU(>Y0-!CfU#VZ?8vqLyO^w@^n1aHDx`Rg_46 zhQQa!MaO8j5c-YKbz?ofK-YEAvW~eD;qYd(4yp|1(D)@OvaPmfpjjzW{k`5u8ICVm zX2EMYKJk~=Yb?!1y4en=mh}~s)&wmLA7%O{4RJ$p+qh@T9W-WRu}N{i$?XX!{OhmW z@MPwz!Iu1dl4o>0{22!~ca_wGGR)IcoQH~e7?~G*oG)9tSgKyDZ<(3T}SPerQT zZ(5MrQW6u{aZ-2RV1bu16K|bm(!Uv!qcT{KSwt%{>cvlth8cfC>@jqkw{*W=?r}x@ z4;sreS9=@o_C*MjJM^&ZR`%|L{}(it_J#jTG?w8+cny7%tSaUggsITZexaS9D%V~} z&p}AGE`JhKZg>+xXK;x>D(N^g>xS~DtJtWD@FT7rN>}9B1QFeddb~K^occ@%(Kd7Q z$nc(Hp5Ui1)w?{?IK~CV<`^c*`K382tc2|hGj)I7M@qtnJkD*ztxQA1MYH@V}*H0uC%_rE9kN!A9O(*CpX8HS>j!=#u98^jb6~~rUC*t zQ1Rq+IknrR5>7XneK(+ zwvKIG|0-DP|I-RzeKr`U0blJA<(8p*Aw}gqE6OU`8j3gASOz`i<38~}kkXE%k$9pVN z#)%BxOEeDu{w_}o2uSo_sr8)p#quRC?Kj~g4zckKnZ`%7&633Oke2eu5F&df1 z(SOd*2DA*?L-htC<-F9Vv967KZk>+og5_|i5&vxfK`cNZpl?ua_~;Q#^`4JmJaW3a z`LMC6soqg4J@)l&6Z2$IW_MMMrabeO#V|vF_L#K@+lFEbGPv)Xpu?PDa`@+0{-oTC zeGr{fFa&XNM$N%Caw27q2kV*QnhK6vLHDPeEfExEVjKEOw=pIY?L#lr0snzAFuW;K}vrH=rEY|?2*=5fpw2d=-nQOg}!q3 zct6bDS1QB!F2zQOvl*k=dYh1Cn9R-uKz89Ai(BxVNz__{tMYO4tX+JS$&bO+&&IPz z6;a=-;Lzn2%?*&%lug|#@HLYY7-9ZON_&OplHiLM@slB1#zq&SW2yNs85l+|@wM!{ z4HnYS)()IJvpMVx(R2G0E&G?9{#7jCn$r^u^BcPvpDk~xEj!I(xdrS5&r6lXv+s3kzYSkCUAxNgC; zW<8|Z(;@lnAeC7P-7`@|Y39hNQF_Edck%%OF(137A^y%_@+e7Sg6<&O>r}!PwZINR zgCrerE79xHzYWS}^{!%bwYfF&2Yuk=vm3x|T@oxPS^4a(nHYDmC6Zv{tUN~Z%JMO| ztft$DPM0%|P!PbbIXVj!_020>KF%Go+?8CR^rbebVJkMf!QVr}aBz>&6wWbLGM8Lh z59OET)?)N3T=;b`DR#9bf^N%oX5`}@XQKEp0M34pC~{1K2gPQ)M+2G{+!Kf|nVPPG zBo(x_zHJyhCP;YQoe=dPer8fEHmuustI%ZTlm`9}`-=16QH}fZRVhvlJk8~JnU1%U z8``-evr7isHslAvot6c-ps8cZ=;6d(y(-2P&-V)jxJ&f2amyo2*1`IO>K6W5I}J+C z>!8%x!>oA7v$sCtJB5EutJA^r3FeH)+WMg{k=#$Thw-6JiXuYU-pJKPx~{LV~3fM3JqaAlCVST`zk_1 z?!ztKY2oFx904-o)0<2CvWcQ4+b5PWTAhq)v^O7bl@zaq$;o9O{>$D?!z3AG1cwd@ zuVmWzbSQ6UE?Xz}t-TR-QZuqfeM9_1`BwOOkecpMXO#L&S;zWEkNF_PnW`#{pEaUy zyO!uKZBI>sGuiMUw`e&#GSo96zNg3!Ff(bzVXhy3iU`V|A4DMw22F&qlmFE{BDn z#Xnv|FjSX1el4+(Ds91umz=|XE+Pp&m{~=I?n9{>$kwOpsiB z0A;99l4tbm8x~6a{bR*}ghRxLqd^I6K$AX?=*?0b_ouJ!oxXqABB9L6b<68J_l;tB z9TkfSW;+zWDPFIVuf}P}>$J*$4sp?Wh^_^OK~O=ACJE0AN$cFZ#wX_i4n@S?b{ezd zlPCY|Aqz11C}fAj+JA70DcD(|pU%{*inN59NV^)ir(PDmh*lWZ6fPxAPZ&fb+?{m^j(e|%U6CHF|o zoYVdTML||#*ey~1=9ui!MK>FWnctQ;wq&1-(Ns%7N5`gsse=9ou+Gmmb|53S$>5v& z-n2MMfe1?i2i8p+N8bXdJG`BpRviut3Z~!hYfYE7J|k)SG@4v)_gdR@bNUFE{5sX? ziRo_CNzLkUtDn$~Zw!rW^!ne?Mj+MHTWEs5zKNntRU8_(eQL07HZ{savXYGY24zH^ z*nID)tzG2I(J=9RU)3br!A&OloN6jtN?1SJHro`2nvxW%v(S2BnnZ#$^Ez<3?^+XA z<(Yz@gsRzXIE3s@!fB?~vfwpK<+(-_=DpS%0tK1Yn=Db}Rw9;&&3*lFW5zGT{d;@} zp{S0G^ieckByFCHDGUCb)$o*<^$^?M6R@};_ne;8E&U4;6KzN%@aNk9Dfe$-^AeBHz< z1{H6d8&JyEB=YG_N>Zg^4+~d+`tyoQGN%Q}t#Trp*3AxqzC*BG3H84FyF=$QD4Qh% z)2U1O%&F^oY1QL{DM9Cto`dN6)QtYHJt2e~8bF?pAisoFERG5yl3Zc1>K>yBri5b4 z9*t3`2UVfI%p-Gev+fff!SZe4^X+3;X9eTp8i|p?*)_|{xp9Z$h5Ae?+(h4>P0)zP zmf)v;2;}+~!K-PoM%pAaOBgJUGQlXlq~DQf)-lo^pV4kyj85RdwpxJ^jk5JmdFu26)yp$PVkna+p}CevFYJJr_QHBZ4HBtk>b26 zCDiOwPGX!Mp0^KP5q(%1$%g;KgLX-AnhTz{Lm`g*wbLHw=jZ1=-xUH)51+0T-k;0% zh@s{--`a5Gid{-!%Wjr6XFGc?S|V*@WGnmD*V#&4)VRYdtD8^(%uPdr98ubjtW@_;z~l_~q`F0>^`%bWkw<4@TQGwNsr6$AO}&VM3c*=IC(OMqd)@56SoXRf z`2a{xUr@(P^l=?tD4YmoZ_uYfM4=R+63Sir59osQXLKVwoQ+%o!fN3V#!N!kb*gR8lrJ z7{lE61^`#7=FFuin`%xBtQ~@hlmH)!QoQ1jf9(?OwE-eBuVa~n{5R1&s^KU&Spa?w z%y$-E>ixwx`wRh(I%2Yr+CR?q2pX7Sp6?ULM%US4P^(zVBX6hy;#OMHy-{zUs8NqX zu8^0qz8ek~z{X5Ricn6>l~mtFqxCuH3nGsr11|BFW@GQGtgWSYtqf~>AMmOII+d)`p5CcfL~C}ejUQslJWqh)FNF-!L9)k||$rgNbS7I*No z7~$+Ov9UOcnv=4;-*Onb?1dsB=B7`sfr}FZw#=}^m9YXTD6HEy=yipU^tNhHPm@>w zG=P(RHY4Wq38fgzX@PyUCpR>rtu|K!PD{cP80XE|o=0?7SuAc8M2_+t6Ke zj&x2Uftchl`FEz3vt(^s_%J$l(zPUmzep}nkWGT_`E`Lo7RR{N-SG83U!=l83{-Ns z>QIs%KhY|sg-z(XRu}2B93#FGwBZNKF-*jNVYfE_pRik!>&M%mWdkcHFB7RO*}oqE<&5n5sBbIv1oJ9Z&GzZ_m$JJYVXgU4lx5zowUy23V~vC`RsJ)X_KuF- zNn(dRkuN%H{vXOH?TyKJ{c?umY;vkQhqDc0=c$4ip%|#|PHqdcLQgrTYBjnU^Gp)J z5|nO@cii-Nfs)gmE1-i_taG?(vt2ghSl<_@J~lG%8Z5Nj}x)!Zjg3ogIXEpP}qxw39)IM(ek!i}3v_?+ z_QJAGTOt~Tb|iOg18C^GjaTB2@ey{jY$lpdi(+3F+$vWhw8t3hq|XG`q*u$z z(yfkLhPdzK_4PwQ$4gYXt}hl>v48m$=20@|52&84Pdqs*yl z2lm*yN=fAydQ3Xz>LWYz{%rRWXw;u3EIBT!$|#C&IxHUvT}~ zb7Aq_=9)V;F9hudUwkG*GH3;-WNw-S4{jIUdL!At4`<07-$jUV^FEN35xXvW*S;a_ z=rzEYT*zaW5tOWQbkB2IF4@CUn`^v2u=P*6>PD!d^jE9)@6L_42BEIl* z<)#-dE>m%7YEl%Jmg+9UXU^*}=df-v^+o6OH-l@_6qHPXpmjV&=7_D|Co2X)pPNEL z8zt;An0khtrTcH~TzUBU>*6pdayEhliTx{}RdX9T885}51#?e*Qf|5W#+e1h{B)U( z0JtXhIu5f3F?4JSY;EffY_d)&D?KW&c&IzNhd%`Ob(if%POaWkQK@Cf#Tay%gte<6 zLMzgeJgJCb#@H}a&{#DnGKU*0`-4de$M zvbs~6;hI^$a+ck(Do+#fq_s@rP@;H={kZaiBX!pzTrzkGeNUx_P-7MxnF}#*C^z)< zUJlX>78-clkm|8pHVk*AF7Vym<54${%a-f-KB{nSDH|J)9b$6-TJixqOSHd%XdGp^1r=OY-JFKZb|p>v!tz zEyxYAmgL{ogE2mdes4N}kBR!``yc^pSLXGi>#ct+)@*0oOQvURhv(Q~kifO>VNaGX zn9eZ*07e=QF;UWTeCx%uF>j1&CnhJ`_K!z_FNF^qE8X>n;2WKbF7(LSf4(lRo*X7}$u*n<>+3rt?QRa*}Zdq$$gq0$E3E=TJl z40Fy7W{xQ3)Ut>x)Kv5Ba`1DssM|hn><>^a_YRDBXJ?;wQSIONTFRRzAL-B>OPoS5 zRb<;MnlRN(GainY=(G9>Wf>+08rYwZ&Siq#)q_vc*FpO>$`R*PhnUi{5JfJYY`dbC zn3%;36W{78?+^n%N^80dn@xd7P0?Z{7PcW@{BJ|vD;lxT2v8y`h2pwO7y21?j=h;1 z-m=H!i>OZ7#z+&?4!v@pZagc2`<0aw&F&KJA&?5SmlHn)o#WtbqrE6EHC;r62 zbAr2Gf0^fCUyf%mn4D6c^#spbhEv1;ldB4y?4#@o`UyDX-4 zDu06)+@>OjR|s4_JB$uhO0&^dQr81`c)Ez@%=8-q(Iu`&34)X|oCzcp2UJY5LAdT{ zEmHDL^M?fp6zpmF+T!xVw@LWn5AZ3FA=lY%l--|T+dgwUlj5c_p!k7{H@M5M1F`M` zuz1ByU&w6G$2DWNj@4tseW2ePi(X)Kbs5uKCZpP`7bNSRmlb+Bp)h-iQj#7Y=*7mn zCXFZ3dH|b35S&-UxT2A-90uDOwYBZ|U^BH(d5tS8Z*K+@9y_l6&_Z-KPtL5`;mt5#-o-3;Ob!w-v}=P(3VjqjK?N+aeBq$xjrtLw!I<#Mb_K zoo&56q(WBU$r~-{hi{~?38M+iqVCH(KX^BmLvKlNE$ToVdQ> zCOGqe=;?|igA-uL4cI}0LC90@dzJg811ZP*AFn^@QhR$pO1bfb=~dI(Tud$9 zKy-6uSw{!`1Qb6kB1$8UHX&4}Str+5SoHX)H=n-e_Uv)h>ZG`B?r|e=2Xzyq##!Y6 zukO+7>h&W;V;Kx)r;j8qNuuiEJ8>?Dx2o?QA8l1sM_2DSHNNE($zKma(D(OIm>*3_ zjTet`X!Eaz;ldKBZM2X6+2NWWp|-OVG+QR@6SP#b74*1=w5vnvN~7BDb=xb()DShn zh>K}sksF(*r$uGEB;4pqhN_mtK0#}jETaJ`f$mr;)kGdtQ<~6gokzQk&Y_=W1Qc9o zOmK8H3#W9O^iOl)ZgYLrUB#M6eAag+ndmdKETbXJL|4JizI$4qcVoI;apZ#9%!Z3)MIg;uzj*v?J`{4skD0{H+phL*!4JWtd8VJh z;tFT+9Qdmi$Vj*H%E~8BI@G#ElnXpR$nSluk*oF@>b}#MN#vnR5C6A{tFLqfbU-M*Co6gRiOmE7CEEH(A z$yG-~w=zP;=~`7HH4HAdW%mmrSE~cxPI6}_9eW-3l-?qRPPm1Igle2Vkd`@qt6S!! zH+gFlU(oq!52V&urUm6D!&c0)TTUxztELw7LifyNuQ)%3I7#i8p~`b)S6OlIWnYOy zRaKvn&ZLRXuI<dPyd!jw>c!ZN@ zGHApqRSuiWvp-^Pa*^jZ!h?X2a9i z5wh@Mpxo`-ZYSZjXm`x8QFPPG)B>}KY^7!fH%}Wzq192^s?AHN2oXZ4@-`-N*WH_u z$>7pvkVHaHbGRJFC2QSy!Xd#+X1Dn+Sr~D*94AV8PhAYIpKD*Jn#_;wi8=M&L%^BZ zS{SxU=eGciOpqJbkxpE&z$R(wB-Ed9$@sYm1K_>N6a#%n77Up>mJl^K&6mP0VT~< z8pvzfZhRUYu4p@Gjm7$DBd5TLZY9QdJ7lb2x%qX^nF6no{`gp;SH%4ZoOX&K`d+us(aIG zag$DxJ`Fi<<@YSM+U%UWWTar@OCf{nr#gjF4%5ierSZ6Vxte`B%`SsNlfHC(9D3e2 z$PIOS(yd~Ssj1z9icIUY*fWz8q@v@(#HCQsc%?~?MM7?=lj##pat8LpGVs3jl<#+w zi?QWSR}*#@4${o}>bu89vqZ3Q2!tQbz-wF$E_x4Wx#5KUBd_38yz`2ohN)z7557B6 z!*}9DWfnO$HF_~EtnCituCAKB_g;p%sw~>7M z`4d+8bCN~EC-lhnbw#Ul;-8PeKWJ}a)j8Cz#Ci%1!OFjjN9IakO633vI+UWDFF5&j&TY zC&fPOqZi{(_C!oVbA3^9zAYQSWba}#WyT?Rrj`6+!ft9xkI9g^*|qOFKI!PqmN2?0 zUr@e5^U9&ZF3YeiAF=RQ&XCLEruRmkcf9k_YqMx0w=JIOp&}0G{)G2@dG55~zy)#Z zK{r9$(eJc1s8aF$&Vl(i0c2rAP06041`)wD#vXaOFsVO^Q)hdaW@YHr#s8b5!*6P`cX4=292jlC%W`!OI;@9Kz6<3__F=} z+LPi2IOF3q=r!Ytfe6PXy0laXTE)6B?9ToY9~WNxhra1)W_D$J9VK-|!oMDpu2icf zliA1MR~~rhs;q0>ATY4m*~hlkfh2yR0>})dYI_t$n%D)^I_*-o=E>2B&#j~T8F%}8-OR^`mx+V5T zKD!y~Gv!< zJvcrJn7rMpK_5m9O zHIY%$<+;A-SnlHHT4rvj4Cf{@CFd5kju#$>lC*l8;XmB1xqJ6(kg=lw=J67p zX9Wk{O@m_2&p9{Ur;!J`0BCe&96;zh$e#E=9_ST=pUD_hWZguYKe*pgu;=R(q_>w)D5OS-#$#@AoT((yB#_tQB|s zlQ8fNeT*+hefEeDXn~vJ;p?9UPY=&XYLbVU*YW!s-c(2W+nHDRE0CeS&R$dN zZXr(_B>M~eBh|etw>|jWi^r`q3(F*&y{9c>Wxrqj5f+QY>9^0F*Mgw5RFzKGQ{W8Y zy$wbR5>RBgZ{&2}wzyD&na)ToSTG|7Q2Gu;fi47j_M7ASV%ai3O_IEbqxR{7|0Ce1 zk5Yvm*`MspzBME)I35&-ZcBJBTmC3!iKULssOB#A#?``1_ zViF6n&9E)L7IZKxu#I-DoUx&LMEu9v{$a$l#`m$O*Yqwwb|XrFuHAR+6qJE14YO$N zjaB8Ez_j3>ySuLkKGu-S+;+?_@N(5LM5V41)0ntGuR&1Njsqf718AgztxQ(R8=qX` zN0wWYxQ_GcCD$rk%c%CP#_iqdG%F0b^-uS9~Evh z-cU3$McbAgtF&E%sXM8qV+ohx*rJ|q4qx5Uui{AbS{gH>HSFETsuLZ(jGR zVXZdSA)WF#j=211N`G#LRhJt$f(hn?DC}yFe0T5cQ*O?wc)*3%nFp3C)A80lNj0qR zN-We_}E*bh=>oTfZ^hqjbHRP$N772Tq*bEqah2^OH= z{kDEMtb8UB0W`aOk2LmJT@0n{gF(oJSad|UWX1HffGLQ6u)zKYU9A!>BgnAws(_rY zY$H7G;4YcmaB25}!mqi3>%RO|>}<}NjKu7cB}=tmPr-2HLqUS)E1vnL`k!a(;2DF7 zv+{ptE!JLPu!I@lO${D2mJj_iapT0^mEW<6a1|y7CcB<&^eaEeQxXtB)xQUQ`{CY) zRK1cvmQ<}3elyX>RKn0-K1+dpb}m8=a9Trwq&mvq>J@${&%gK=jN;!%sP_}6Mc%H*`|lfY+OItPqZCtfYIf$!u63esc9E#i{JDzxXbni~wp8Rh56o{kT;e zxpQ2(m#q9lImtv=TIU9zvG8BG)=~X<`g9M=n+kXWRbG{$Rafkt%BM;5X3>OE#U|bAiLpmMEACW4WGas;t%`D`MnX=XEUD9gG4D>99~wPZ zi2oYS;I#K1G;jIqJiEl$ofJtBO_DW*Ztm_^iy87XW*3eVDC`cm^|2~3tb;V5m+YIR7&);HiA z<6mC_&fiA(e&LpH+k{lqE#IlBz;7`V@)`;|nGHl&h^G36i#e$IpkEPN6*UGc8;0bt znA1XXU3?pL4s82hp68Dwy7pAyG_iVthv8kOI|q%^ZcO!fZrY5F_hUYgSdw?Ky?!l{ z2yE}vLXe{V^EZABHpPF#E6f|8(b)+Ds*ZlPaRdyMJ{AK9u78W=3pz^v8YPv;AQrpBxB6f?D79 z@%0@QtjIsUsjmnk{=)}R4Zy)xtyb_SqvY#=_@l06)K4i;#2!BuJh3K#7%d|D`*pQT zIMNz^@=?I=)vIg2{av~y3uC3m>H*@VArZ0v%60`;AUgZHZ{Lm;teL);q!9#OF#%Ch{-GuiKznF8S$j<{^G{>#K{l&I-4SNZwH~>7w3s{f%`!aup+U&O= zGTDm`6@PmQkij2|yw!Gx;R3PIpVyy{;s*HrZ-&F)V%`Uz>*W`lhZjMl;swP5f<)}` zpWmRs0O{IbaM}-j&kdJe|nP?^af zA<^s;_CN2EH)X{+&DgFMME=p^B&F_U`j6(% z=d$&uqu1q=V{keHe`_OI2W%XCc=00{cX663{bVoC&3ckbBKqq;1w@}{&KW5XK+#wJ z=s>u_@08-XCs4y8hTy_q&GZssXUizp&#|!Two?_|{(3slxFr=iGS=0i zEAujz>z}wH5KaYA_`bvX5e~r<{^Z}DmV647xMcA7)_G+5TjLIL{!oxQNPZ$?FJmwL z9O^>`tn72E#Q&kO$r1}*T2!{jC!m3tm|Iy;0ak7N|6=bYAQ`gJiS~<5e z3M?T|{qK+d0b=|aGlGZM>e`PUf0 z)xJ@J0JFbuBXu?VKP$pFFtFW+v3ZV%v&NVFBUk{POb$SOvdgB%c*H)l;f4{~rv53;fE?$6o6PIA5&B!TX(8pF^>3U6VI81t#)8 z9QiX#UhvnZxY>gR27*U!^5037{P{n%n2TM+Aq%4-&#qhmf9@+jP{_Gs`ttt(#@Rg( literal 0 HcmV?d00001 diff --git a/example/example.rs b/example/example.rs new file mode 100644 index 0000000..1e72f2c --- /dev/null +++ b/example/example.rs @@ -0,0 +1,10 @@ +fn factorial(n: u64) -> u64 { + match n { + 0 => 1, + _ => n * factorial(n - 1), + } +} + +fn main() { + println!("10! = {}", factorial(10)); +} \ No newline at end of file diff --git a/example/example.sh b/example/example.sh new file mode 100644 index 0000000..1b2d552 --- /dev/null +++ b/example/example.sh @@ -0,0 +1 @@ +silicon example.rs -o example.png diff --git a/src/utils.rs b/src/utils.rs index 4214099..8026027 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -269,31 +269,48 @@ pub(crate) fn copy_alpha(src: &RgbaImage, dst: &mut RgbaImage, x: u32, y: u32) { pub(crate) fn round_corner(image: &mut DynamicImage, radius: u32) { // draw a circle with given foreground on given background // then split it into four pieces and paste them to the four corner of the image + // + // the circle is drawn on a bigger image to avoid the aliasing + // later it will be scaled to the correct size + // we add +1 (to the radius) to make sure that there is also space for the border to mitigate artefacts when scaling + // note that the +1 isn't added to the radius when drawing the circle let mut circle = - RgbaImage::from_pixel(radius * 2 + 1, radius * 2 + 1, Rgba([255, 255, 255, 0])); + RgbaImage::from_pixel((radius + 1) * 4, (radius + 1) * 4, Rgba([255, 255, 255, 0])); let width = image.width(); let height = image.height(); + // use the bottom right pixel to get the color of the foreground let foreground = image.get_pixel(width - 1, height - 1); - // TODO: need a blur on edge draw_filled_circle_mut( &mut circle, - (radius as i32, radius as i32), - radius as i32, + (((radius + 1) * 2) as i32, ((radius + 1) * 2) as i32), + radius as i32 * 2, foreground, ); - let part = crop_imm(&circle, 0, 0, radius, radius); + // scale down the circle to the correct size + let circle = resize( + &circle, + (radius + 1) * 2, + (radius + 1) * 2, + FilterType::Triangle, + ); + + // top left + let part = crop_imm(&circle, 1, 1, radius, radius); image.copy_from(&*part, 0, 0).unwrap(); - let part = crop_imm(&circle, radius + 1, 0, radius, radius); + // top right + let part = crop_imm(&circle, radius + 1, 1, radius, radius - 1); image.copy_from(&*part, width - radius, 0).unwrap(); - let part = crop_imm(&circle, 0, radius + 1, radius, radius); + // bottom left + let part = crop_imm(&circle, 1, radius + 1, radius, radius); image.copy_from(&*part, 0, height - radius).unwrap(); + // bottom right let part = crop_imm(&circle, radius + 1, radius + 1, radius, radius); image .copy_from(&*part, width - radius, height - radius)