From 90a7cfedfe70f440ca86260cce6cad2f18be7cf9 Mon Sep 17 00:00:00 2001 From: treeform Date: Sat, 9 Jul 2022 11:08:34 -0700 Subject: [PATCH] xray --- tests/fileformats/gif/newtons_cradle.png | Bin 0 -> 136136 bytes tests/test_contexts.nim | 92 +++++++-------- tests/test_fonts.nim | 136 +++++++++++------------ tests/test_gif.nim | 12 +- tests/test_images.nim | 36 +++--- tests/test_images_draw.nim | 66 +++++------ tests/test_masks.nim | 42 +++---- tests/test_paints.nim | 22 ++-- tests/test_paths.nim | 94 ++++++++-------- tests/test_svg.nim | 6 +- tests/{utils.nim => xrays.nim} | 21 +--- 11 files changed, 259 insertions(+), 268 deletions(-) create mode 100644 tests/fileformats/gif/newtons_cradle.png rename tests/{utils.nim => xrays.nim} (55%) diff --git a/tests/fileformats/gif/newtons_cradle.png b/tests/fileformats/gif/newtons_cradle.png new file mode 100644 index 0000000000000000000000000000000000000000..bddc25a499cbc1f3f1c5b04ea658294c782c4c34 GIT binary patch literal 136136 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¢Qcywl3~uu9;_7lZ9RP<{P#RlK)u6i_;=w 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%0DHj;X&QP)XnVT5|HMO*!5G&>L25%02C2_p@rj z!*27@w?1Z<3RHpWJ?3Jtq^A$syghYxqd;UQ?b3F;Me5R-LaI!6Sx5E55+=+9M;VQyG@gqs zIPlEtxAm4FIs~XEtCz{kRvv zw}t{i5pMM-80rb8uMV{|+M{So-X&lKLq0IS?*HNM7a0b7LT$4()2U`_yeS`-0z(hq28-q%1MI zdr(pZFCAsT*j<~VO@i3q=~H6|V`a9I4)n{3M6Jt5HzxS{KedYm8SFl1!z zZ`8X66TgtLXLEvkJ1In){(f)D#_YW7etqpTJA7tye1BcF?P&6K$a%a}ORXWwT|BS% z)0R+<;^SsuoC4Q*LJ;n(tJN#sifiLRV9lrO-j^xZ_E$ev+SEp1o?5p`$2(@Qd5%-z zyA1GI+*jdBV%8VI{kw8^aRQCCXO0b?8_+%_n=A3g?EwuBu986U*a_LZpKEG zs&f`fBVoRu9wu^X;Dg!z&Nm1RrV*|uh-_CYTs=yp4xHz3TwlgLl9d#^JySU_{LC_&((g;mDqzpt-XLmYPoO&hYHbu9@?+ zw;}0+mv+M%;7JAYd*>R;MoEt*77wlyy`1>Nna~l{mZjDv_eS$+T<_ka2uVB9#VZOq zmT#q;LQy_@UoI`RrIxAwSJQemgFg$M73YdiHEgc}zr|9xkoR)llr*YDnVlu)N01l0 zop~=od9_&8?U3?uNY3DL%D{rF2coTATRP)hx_(=n zI49s|GurnWKkDxF;)V5q#0xZ0m`Af430ho_NLYSc!S#%-aTu=9oKE})Ge= z4Qk5TRvH_nVBrL@lZe76*@+h{Gif-Hy>mgcjei!`u0BmUxRX&w5&Z7QbO362aJF+{ zd~aHzQY2yS6d7#$C6*z<$d$L0oaqMKimm<%P1sGiW?5cu6!4rhTCOQ@!mD=q<`y5| z!?Ruwu1bgOxqpzrGPI-!L7ayO!Xfe=vv*hQtaO2^PV9Fr*Naj(6VGBL9QWNAGwB>Y zWoIX9VSgVBY(_JTot>?LlsRCZ^Z|b3m($bJt#|gYzpazylRh_WV6YnyJaEV6>V^Fl zIsBGEW~QYj7ot$8%SMKVcR;j6O)St-Z3^2#19q-G0D*gdZ!K0SB))B?oVl+e7p2t* zY*tBMA$`A*wyE*XHY6e>gInJ>${iiN2pdJ@e~jG&bd_U11-&yDk@-db34`N{$jSz3 zj?b41G2q1rv93vhOca3bwP&#b+AH&wrWWdv&ulbh0N`ac!|(2YKe+Z)w8AULJ<2z4 zXLPpgE#!p4`3TLVMfcMh*pHc=MOFXJ(Rtf57RQ9*a0&nY%11o4m{<4p%;qo>#M}~LZ(Jj||x!}a6+yQH8Y2p7jEpLKN zT&#n(w*v>e!bR5AY$U~nqm7A6(!fr-SV;FJ6z#l_a>e{1P62ZFwhaOqiCs#v3Ue|uwT(~Jds#@Vp+C~jW^KUnkml& zPT_x2T+_-|!7JW`$=&uw%IyA%PklqnP7YuZ7;hMdqD`ojNH`Xt<~7SNH3X#uD#R~r zZTYyoT3sn?pJ}lZ*efuv*!cMCZX|++` zaf^s)n$nXV*UovurW7b118)=rMo`O2Mo4U%^G2@j1gvJm+ZN%c;yfw-t8 z(@^oi-XauPls+F)n$CTja;aXOu;&?8uj++;@IjsI#IA^_L%EcCnE3svkaQY1&${Rq zto>sB%iDTIWIIek?;M?eR`gAI4C;Q}vT}Y?)~}e$XPSN{cDH-b@hU8?c zdmR3Fl&q{O9gE*&&s1pqkG+i6U9Q2)npqkl6GsQ-jSrKT>{f=!#S4p+f(M>pp!K_~ z-OH)%0jHxax$%_U4^phwUT>{aDBE>V1A2CyGpM{Kj{L4P@E(Fp%{YZ<@6z~J_$7+4 z_Xe`5nveBYKSQ&H$?u5=a)}pQ$9DA;_U=C)6%RBZKm#|R-@uq>U4F;>;HTY{QEoR$ zp;)v_usi8m&vM&do81Zn>k2!y)0S=CU>srWB|P!)b3D<1d*^epCb*th;0(tsZts>5 zVwRTrDa*aR6pPY_98O$Soza1U_z(cPiQT>e^KHihf_eEqmvmq1e+k-#Ny%`B z4uP2DcsJY1i;iC(_W00%>iZ{%2J7nN#+<{@uuTdM1MH-Mgt^&{#=o(L2UDzv-4zAG zDm!AN6AK9FtgvMZuF!@MC)X&jy7iuKJ1NO8VJ&KTWXxIe9htls1xbN?4RLR3$y8Wb zE%wE?7{}XYG<&(5Rgclq+P#E_8Mmi5e|^7)o1mQlmQhRxxn{LM+CX!~ot-GN-sw4f zH~(i)XplWV#&40Vr3Cv*80O74Uwm)2h#tYfHnhO4hM>zitzyRLqmuU2=wLJs2J2sx zed9>xaUG~{^&z+2aYNnJ*}u|?7<_Tmp7>@@LCtLE-!Nx3HEY?Xi@1gSbESiSB`okR zc;a1rxN;aymJJo%{!_~(THJgIJor%ECyn`YwD!L_L*MtYrVRu|-?Qz+7njTS`ui5! z>{R!zIyud2$2+RuUSAzm2~kEC0Wn4S`gkA! z{NB=Vrhdzl{FKMEmQRX(Uz@lsmJn!@mg1rdr1x`6!1QkwMGnuH$L5i|tsP#dnr@{r zMGR>?@k{c|gU}2GjlTY30uSQjj@oEnOe?&g(t>NHeC+)yP=0*$X&*6Lbo`l6rk|tq z=z2#C)-!NI+kdu8!p^lB`~A1R&NJ#t7#U93NR;EvR!bjovSa>mI>}ksAw})*CNk19 zsda-XPShM@B!*x|y^hT5rmVCv%#0MB!uZ-@jrAXmvAf)jdJeFwSMQ-VQyLoZD*&oI zX=H`*aMd7QUx1uFNxVM?2*6h7#(8ER^+}8MYl^0gB=!lQbFqW-4bHK?pDFo(@2FM4 zjKKx;pxU{;xqfEN^#pO&NYo%FHntw?WI$i{qCQ8>d5!XJCDdB9Z)Atn?PA=IE~Xlk zWv7EZkV*__B+&f?Uiy%)Gt>4NNx(a}L{e0BwLb$O*pz5P<87sv{6vy&7)> z^{(O%P0!qd$ufsFAL7zm`ZIx~V#sH7If=0_b)e%6D%Ki*wgEvH{iZ;~Op{-XpX z_deo7C+3*SZdv$VvGJ@vZ2CVmQS8A1j_kMK=*l0iso-B+-fduR_{O=@gb>Jw#5QS| zf;C{@WLU-BgSecNsH=mFb~b!y!(thNn?t(TrK);w!|EAhFKV)Xbg4Cq41EGX{>)|z z`!&h>aG!Wnh1rvwW!bE`gdqVnt(T*@0$|S^yK>7Dr#2omDhV2CqKRpvrXMm-1M6=N z_hz)!WvI56srwtiUMG3vV=6+mJ*ME@4yIEvI@0)feYi-lOp2--&`$b`f?dRQq_`X4Z!nfOAwIO}DZVy6 zu{e#9KqGC|lvI|-eyXWK$jdd70)b6_S?OlWCs8(dvoJ4;)`RHuDB!v}Oh+Wv+#i$k z6t3wQx43+8eIa|%yZb6}(uUI8iwpzX$7Zv~9;GlK7L1+$&emAWg&)Dau5I>5w6epR z_njC)aogKsfsHu!7l4W1%l%EpudKzCEmp&udx~l%1x*fiQ8CcKj8ni8r87{jeK@F( zxPa+aC7tg>i}nsxJFP)-;_3j!Y~kRyKz3zMx1cH;!bNzqmz z^js_Y3$fi_p72WoD6crCrCdOs#yRSyfBdXY0L~P&BECEz1wcl|nWms<8<65$ySRZ? zdGC1dvbD1Tb5M?L=1Q93>lW<3GRd1v3^}F_Ew^$DdU463G>Ll>uK<4m_P>hBwXxZC z19a6kaiTG;M`NHLG>(6R#Kf4|9Q{R1DmYwrXwpes^(OEMhwha1m$q|VsRyP1U&wko&CsYH028_ZZ&6Nbzcn2t8Cwi;#jC%uAJ%M8jqS?qp& zsX{B~m&c(Pm=7#`?MKa0 zoIi&Te?qc;B&8oS1B-{>YhxMe=|27S!H&EX;{WRrwsg-@eS$f@t9R4Ye)Q|?x>wt1 z#+u^8Y{>k*eHXc^mJ_4MFM$}+D*rh1ChykT_vvDTc)57RW>JapEWIuoeO2 zNroSS#FQJK%`)14jqQlPK;JDEM4r~)yFgx9iz#iLW_0nXDU8Pk7W;|%U%GW}Q@bCz zW*ki1Xo^M?Ra5501~Jls^g*|V73Y>dlcsS*vBr3yyF&VfI@-_|o^ls`{jJ2T#E`_( zi-%4scWs>edBplHh^yZva1A~rUondonFEk#ts^$qKL80-n;fA4rIShXuhtKQV4(3* zkG+MLh4wye+Z`%XR@%Dem{+iaT+v-pmPzoydvJ>~8cp{V?f?8M3f9~&5j4Xk^heHE zpzRviLrPiIH-eIRrl1J$qdMEk9wN^_F$|DAO1hDY6>J3&8UBb6)zMzB!jt>doB=Rj~WH_jUG^Ut0`R*b43eCIQc`W3AN z3(vS^Bnvr}J8T3*Os87H?NM&6M2F8Q$1F2AHgto?-aZStQAsUVkJ|jb!p?*(OiRhC zCZ0XMIDO$Bi$1v%9N|yU)aWZF@R?bpd*I^=ONJl9Iakx97y&NHF=CM`cyY!9j}Hwg z7eyIk>3{@gC8CN4t4b?79kuqs9%hC6F0kle)yo6o%UHktfRd^IaX)RZwj5|>vJ${c zv;Z(vh3s2;OBY#dfpBLgj1;iNQ3b9!2yBnZIJbVJ=Jiz5QZ;d@w{hJh3T;8e`{_Ss zJZ*ORf;%GfrIDD}oMYKi>7X3~-A^Ivn=3dObQLZs;aB~w%~f54dvTf%retF%{%H~@ zB<^^_qn0v`7jE{0f%m)AOFh-RcSroZZTknsS}6i)0v40vu_cO;^ElB4*SaMCfc|S; z0m^mJV!K`1qvp_%S0=Sy(N+Nue{?NMN!po+>OIRUy77wlH?2EHo7evOTKn+~np4KB z+xc??%6lBI2v65Bx?RgFfc?QD>w~9S%IpoWSLiPXT2@&T0X~S$>jRbrDJ`?ef8`{# zbSqz5j?=2Hc#a>#`_0=qpCaCnOF;LOV%CD?KRL%HZKhB&Uxyu!)rbL6v7-vc9{m@Q_q2)p|fS!|IT{WJbyt4OSqW#09ZDk`* zZ1dHUjFYf@UDiH2#GchRjWLLtV$M%*KDr!&!n&}&88(M*H$!At78_p5Hyf9ZD zZ@t6knD$FlV5uv`SxvZ_!{g85x}*M}H_AlqpBD6fFg{r}VTCZy7}biGv#T)d)Z4<0 z-m!QzH1n55)tqRlqFi}SwUj5^zAL3F}W-_=1_81JDA^KXjOLU$_kU5QSZY%Wj|mD5`K#*SSnX9l63uM*7v;0wG8EdwYr&0G0!Tz z=Dxkuvktty7v13vSAE~9m^G}VX#DZ3!>pc^_Nc~D-Nahq=-O=Vgq!3M+DT5rxz2^W zgg2K;%RC`kQZ!`*qg*`rLAi|MIYep`7h@B!CS{Uq~$j8js=O={;5jGo#!{;tMQQObonav}J!7%%My^r0M(2WpxmB1co6xILUPui8S zp#ZSYyQ4xc=tIN2n~!)4pHEaw)Te&=@@aGKNYv6|3P58pZala}mDwoJTrTug=sC3f z;11PKriu+x8f>YoHLPKu0{%lKvzK$I)QB_4v{76urLixfkCmRa(oVEe9tW#2KA-hyz} z-J3FAQtR!#72f}=BWJG`sJcCUgIh;kdOMK?2s#*U7PA4#N^SsL*A=M#MD&7<-b#ny zgmed+%`R1FxMzNwb9DI6V}=ot*+tD^1?HJlK;;&%qTDA9HS|>#_=l~Drfo5*7e#9% z{x?24bM-XAVL8^ztl2MChV%IH!TonN4MzjZ^XJUsq$6T)jA#6Oyfyp<+nbb@CHg}& z&MJ&^vZa1kay@*XlUdEJdqc^9$R{;d>2)P(T81G%2%<{D0=e-ofX7-=dru~xbWCg6 zq1KaeSzu2F|JvRe`Pv5rDGT1_B4zfE-JDCzxR9Brq2BkTO}ClL-L#CO zOs9c#E1v%t%es`{R%{lP?B(9mS75yR{#%p*^1nHU^_lK!K*?}{z9_APpB|0JGoQrD zpcdEaaMkLMoljEUhiDIG_%*1+e;0&-Eyi&6c%^l-FWH(utb(nJr}w&~H)X#=BN^{< z_o8(}JT%`KZloSjP62SD?HLqzLNMyz{kRBgV$rXOod;rUs3t*zHIy1XdfYWdXHjVM z%1Cth(9h8Ll83kY6Q2>WqqEZeb0xzJJJlcEzpewt{^P2OncraOhWaai!ek)y2U&|v z{_2matz!Mu%l+4}zBo$v&06{JR1-h+EzVsfLu~Emyb$vf;`nqBc zmLg)Hei=hS&L^qAv2GE_6Lr|??)RGc@-)A7?^q@ZgR_e(R3f2~(ov|{2m$LMTPYc{ z>p+?_*DgqT-*Zobksy5m{K9G3f((?lhCNiHMEj7=0o^)(piW0!aUM7tQ|blfYe$W^ z(Dk_KO01jVi*MW3S?Rk_L56g*AQCVb;H=yv0(v2>+Vh>)w*d%eqE7o2kn-pwWj1g} zpd@}3!=m$2#*{mSCef$TE~vsZg-3F^=Xr5Jd8dQosb&7uDfau*f zI^X5I2#Qd(o(`k+#E}J9K}QIg`o_Ng+JA;o%6XdeO6@p{_$K7%^mdCORnjbfZRm-e zw#Igvw+3r0_$=*G(4w@#pv9|9`S31GJBB+~TQjrSh)q{o=ARS^=AX$L76cKsWR(2& z1~L4z{@l$c`x2BC<1+xfp_nxlRBArElzBzrc0Lv3-FdBFm&FNW*Abz9O(ADg5q^w| zUlfs>TKF5w>`w{UgyF#I4;lL#=Q_`NC5e2DQ%)F3@jmCiAJ^(I{LUI33^D#wx>A=- zp}mL3nY~jCw%8n16PA+stDy+lsG+<$hX~^IFNT6E61I1^rdpY}AS;u_}yWu3ST z%kP43TWJR^Q3H*(c z#q4?2NT=>a;G>T*=3K?0dI%2y5e)#$UQ2{)>+^REJ7{4YQSb+jBwvhqIId%~$CpHCj;FSqCZoZ6t9=rQ z1?rd1v}|V^o+0>B&-!I#Kz_dYPh04hZI9mh8{EbD&!10iMwspq+fG-+9-1<^NOA+1TGc7<@^V2`^d4{ zb6k#mYQ=ogz3Iam8VQA(l2G=YF#p?grz7FAF~`DA)1+ez4{MRHjk1H(^j(yG_?(m~ zhNpmRRTQzF<7ssj+-gRu0bih0K2YtP!1j6vM}Riy#s{?5o407e@f5F!zAG5=%3q&+4@lM24CW~Gv&f0J zk{e=3#ks_lZCB7+-xDPBxPE~$@Hawl-}H37jgt}tw)G=?tm~wsi&@*|9X~wdZJVlz z?4mRtjyC!roGRw)xoZX@7*MOBHHx1l+`R!YkSOlZBvo8>APVI!v7tk55Ci|~M0$e5 zTr3~hi89?CA92AuB5WD1`}ih|q;X)+b!pWQ*aIC*OI-Dw|8AHaYK zV&klvIq;Qgk>C~I?Yj8dT-Xv`%$P8ZlkSnWHh9vgE0t+t!WNsSaN`!vDrjQ(iw7ufAx}7M_;1pF6dq z|A9Y1fb5+ncN`9f%v`k}X+A~^ml`=Xf7Pv6_yH(dwEtaZth|~0ZAPFIxO2}guH45uhnRgb{xrod=KVF2$NHB#fWuOX?yd$k;?Wz6b~&jtj*V2BgrDFtw1 zBJL46d17$UuJ+)#mM&rMnu-sy@JO~Egq0*&W}G5oKYk73@UE&T|w=^RDD z_5Hsb7p247cl9)xGwaJ9O&L`c!>K9z5m;_a2<-~3ccw(miHxa%%$vGyyMf`}CY zn{k6We>;Zh3BXZd75#mE`Mr-X1Df35nCp#=4J*LrQ!weHD=!))qzwg};(dL6|3pSb zMg3n(8-UD1_I9QZGJJe|{())C_dae@3k6Eu00sM9P*|ArW};kJ{_6Pn_`>4iXa8Zd zb*+Lfa z+^@KwP*4oOlDv3u9Yd6RnXJVRfvzQ0=|zT)QXU5SvmUOjmR zAS~|22FR;9@LD|Daw_Y%ax8VJjif8tN(;^3m1#;~F$!1?CPXo&)7d_t=*T zJ$VwSMu6wYLrDa+g!d^9{ELsZzC{`%-a{VZE7oOc7Y|l0EWKt|Zi+0+Og99rehypK zlRV?<%uw`ySVEB6xpUA+Wmpbg>O0Cuy(b=SiLdY zX?$;uPbv^om2444xZH{BuwEyF!Ap@9e@p-%;n)1q`5ni>mL(;rZ2U-$n_T;AFH`@v z?giaM;50f_1F!j7uHLBe6y+(pkxl4$-ae9Fxut|NbM%o!ddK#PEyrB&rfPlt@ztKy z`m!-C_Ko44DWHVxCb2g^?pNy-_Va06dFsT})R5ta+?|FU+M9pv2EODSOX);c6>WX? z6$P#4#HW-kw%ZF;Hx1G6c*uzkM+RTi;K2LhbpqoRYxbit02=6B!%sbfF6J=Qf8SXG z-~_>9V!-dMQzkuDFrTqbN0`fWy7i_Q>wZH!&;E-8gtODopxVN?%wly*OaUES zwig}2fNv&!yMt8N;zS)`Ej+B7mP=xsmWkRC<6lY;=ls0^Uzr_X-pU9bYKH$*b;sdt zZnpT(b`RD-cyVoVcwo8AgBmHL6bKtE=#i=92XnML4&!*^}zF83hQq`wlW zWQh%5Ig(&-9#fV%E;y!2j$=gdUzE1sfjkb4vX6BQb7`zAg#JYx`99_~_Ax-My#iPq z@WeeWLuo-s@x4^MQxfS8=xLOMwkcIs0GJu$Z+?8PGXK%qB7+mNkXf$vuOZ7(i6zQoSzbWVCd`eF&*S6znrQ>*K>ZN!NeZv z_LKNGB^qeKBr&*?Cm}AeG1o-hmCHBH9Q|)No>cn^Q5SwSJC_zP`=-wUE%(AYu9yB; zocOigYxpvjvj)VF0zy%jm%$3Zj_MFpMeU3hir}pVP^0tXb!C3C4Ugci0f~&K>8~GC zb(m%kIi`4$T0V?Z=nBxO+x$+lT7!8&NFyE2niAOLa&Kv&Y-X7YDe{LL4+b)ur<)o| zRJEzm?0L%uhyXS9HIKhlgCT%6HKrSj^qJ$J^PK)NY{sno5inA89$2W=OVS>fz>p1u zu+E_}6zf^LClch#|6yb43KTz}9^Dkk5Pb~*i@;;ljcJ=Gkm3kHvovbiBj^u=$|XP&KVK6xb%JPPKIG{zgAm6y7J7Dmd4(U=J#fJfTv~)9=blS}zp2 z7^k(CC~o{iOR|K=J7xLHGr$qcsvEuDAEsVbq(r_(r<)i-i<0g*a1rer{#D(_mLKuk zo5zt$-)O61)dS~Zdou^bD0qNkfk5a(z*4XHv#ae+ER`U{?;xdyMqhW${Ma9pJ-_0* z;~zQ^z`9`?_jHLMYdrmxx@y>ItkyZaqf`q(KwP%?OSocT=#!QD79^`?Y<G=g79-kNM3QDO6%?+|6ksWwG^zewewx@5aW_0l=gOY_#?XW`+`^Ri`7Q8+mN}& zMY~lUM3euQ`&gNd(6o+EaA$992+XCKi!l7DAgzv z*Atv2uf4IqqS<&5_5X2n?%_=L{~y0gk*|>4A*WSD-8oHch9)`X7OPa`oTbQyIm~IO zRJg|^%3+v8q2zoVnhKlb7@CH}*f8f2X5;ti_iuMs*L_`|>$A`M{dzs0k4HV$r48~C z6%DftS6b`}?J<;qlxdRZSI=^rEl1`L!n)QHM^`_>boN?zdA>;<+d9fXjcGCWI^a6v z*e5p9KQ2@BCjcwv*TH8fza-j-%5mcA0rY%qveF~pw7mqc#URD!`0fqYsJ`a6;5i$Y zs7;!n&FsSK?40a0ghHSwd zPoS>pM7DP{LI#kr^zqHpn)XB!dwOOq>kfSg54sI4kvyd3iNvHf`OG-}onZT-vC0~b z#(%jP=S>8DaAeZsEuLfu1>Ldh(R7BJD5aTgnst+Z-ERYGqJHRyVpFQHoTd9_%0#t} z>MuVul#m4a_EVzZ_wOdZU8f`I4o@n7HL~Ne30TF@c3f4T9eY`!BkJH3FuwG^F&iIk z)5`)0y(N*S(~JFRRY#ZsZnKBhm*==^J)_mD0ee@8A89~UDV1qp#0WCZvw78Eh+>{# zK>VrRxSJH5JsoJvgNinnCx+`BSI7Bx=vxUqy*s4{>BW9T_4x6B$5V6P&qtI%ZAZKG z5sXQDs~F%iW?#@?EE7O4MTV4RsjTLeM-S`EeEyyr{<1WAtFG@^7-P^baCnAZftj|I zCT>0SK^&H%<16L@9VsVWBEtOuadh^k;wmxCQ zHWI}QNbE|c1Oh~!3f-1FR}T9y_2r1LQV4+SCn*xcyW?cpSG7!QDW|B#O|NfO z{h9F`RNAKyENf6gFtEJv!XQynPjuXJekIhXeRCpdmHaUKjBJ&J3mG_fV6&vgawFT!e+e}kjjy)e8L~xn>s7&8 zBljq4-Ac7$i7X|8?c_u|J>w_v1vmt|wlKT{5qKoltIE;({3FULt6~Ay_6> z1BT^#xMlmZhm-uJTFK3&7MGRKM)2!`w@KzPdaLG|R#D7T z3~}CR-f0;X(2>M}jm~1bx{wG%z&l^W<<=M$6A%+u5lR!H&RfH=lz51)FwsN1CZT@4 z(3Re)4T>(0MoEOXscJ6{9N@dITWtNm5I}Tx-T!bG>nV1O`f)kBF8{{@>M@Gequp94 z88SqNlqF7wwq_^>StUB`1^TdG$^`AfOfK9@46Hqy?A>ONXsbk5!cZ)yrO8V06;2<^ zQBrP0`pNcAFfy=5MxkM_MKEu&@d={LT;KN%oYCrXzPDz1L-4U{BdIoj$ydj2O0LdU zvAGKPt&j!Napa#fLl_NjA)dZ)$QOiSjw-gPV)SyjE!X1kv!rYIle-?MX*ncC7iQ^S zI-0-JB$#*#Hn64;10S7rF2+06LT7@cA_{`{Ii<~z+GAUe81bwE-fKqF zW~li|Uu@0rb`yWJH9Ot~vN)oc3RT|rP-D^V zm*2)`@uC!|GS^y1yJXCRytpAsjt^(N+qUzi#F^id!6_eKS=HLQGyouZ_=$8|t6HJ( za_jx{e9FwHD)k1HrA8N#TC6uR#eX4iE8(}cmR6U#49O+xwNiXDAsfmZDB9+J`mSi% zlEkB#>|S$n0r7^^l4b{r6TN8*kyw9^c_)c0(C{mY{O47w(PLjF~jSo>%Tcu?z-lxbgg_bye) z9{Bpi<3;5YOPGxfCht6nXTMZ(jviGAbon>ZBLHyNv=lmlo8UwG{;Y|I(cbzsJzS$6 zxcNj8v$1Y51irWU559E5;=)YIns!X+LW=`o;utFQnAn;jFIn5kwLW9D4uM5*I}t;LJr!ad72X%FWvHBb z=3UugIVHXPS}~`k7w`)@8l(Qvauj>GN*;-A>e33NU9CpN6KoXqFy|v9hU#JeyaEdA zwMP{ucE3(!JUAca9Hwz`JLSKgCnHxi>~@FpDWMxeXBKOFy230Y_@b?jzt1@-aMmIk z`+ru0-#IYZ(zVvx3e=gi6UEWcW{c;D2|}CP1#zNw{2VjkjiA>7^M3kc#`^jHwNf^| z{JxLj9VE4y?S*Z;WjPufXa&vDci;wFAM$-arM@cG7CXMQygc8SEu>Jz`6O4+bInA! zKDwal9`_N%?enel*|x2XIiXW`I1Vn9jts1z8gOYi5nrpYwhk%q2J7KH_n#nQR7;pY zF}pv^LGS});n^W3v|?=|Kbt>7^?yG_7|>r<4lptB`>ZX2yaugoUJpabhe~d46nlh3 zY44FTiamF0I}nLUYNirf0Iko^dYT(0#sJ@EU7)?SWp|F!pBd#KFb7bvHYudD4VBXL%?@fys$XzV%*NXRTDoDyvo^$l8mI{o{ZA z>4cw}dIn|1D?CJV%@_mF(QS{>i?fXGS3Typ$J8wGJ~Z*yAgBzPLU~&q-PHJ{y#gNf z&f?1{^`8S)2T;uY&4t++tABr0!?$H#w?_)y( zR+MxUT>|6hO&RGzMLCA83w|#Wi+7W(`K2Jj1>>Qyaony;>wGkBjNT~t_vhf(?T&CC zq7LlBh0;4ld#rKEI&XFltTF}E)|e<;m;_LMflCl4T{~zlV}L82&Wu?4Y}I{m`lwgd z0rb(Jd$~<3bIywMbF`M4^LF&7^*!R(k~>49^WH0kQ!U$l&~tP?BOd)3q7?F2aij1@ zJS$Guh_U5g?mwTs+WfkXBmc0$wzn9QP%6Uy9F}OKuxj?x-6E2K&E|pAd5^*|CQ?k@ z;2DV(II=X#oenx1~GFyV%`dKx((IXp);Vu>c5xBfqx$nUMNXt6zke_C zH(zfQmWM9S7kzy!4BVo^YegHcZ4^&rZa0UoBs{wC0uYdT`~^Dvd?YnDC#Zb+zn6C; zAY5&Kv>U}HDssDs^)35%bn}O2jl1#8#Cy)F_Dl70Cf7jvx#vwPo8E(a@ViBFw?i(h%w%=0zW$INjQ(h-H)$t-{VbrG_j-IS zHu)jpi5u1b`cTVct%E6a+JZ)SmPrlqi^N)J*koq{rkY1m1tO-&wC4?(Mai2L7T-VSZh>F>mi1^)Y=&x~md$1TOwnB9TTF7@>F zohT*Jwyr;cOtVi``xJ(L9sTq{m2Mm`HL+3HV6mp}=5CI+%(1fGBn0K>cJ!`(*jc#~ zu{UW}H@|oF`9r)7+&zqdpC2&7Z*!%$v7QA5V^e8_d+z{@xZ{ zH`3(|twI+rgS3!QA2An+fk~pht;hiJ<^0iAe z%Y`9w$!gR>Wl`8t`udgq=k0v&q!N=16wp4*+nrmrZ26U!PpUFi z0;eV(xKX1IuO{Mm|5avN(8i3H*dS84%AH;p?d|`m(B3bBaRy_L6QS|a6tn<>!VMjwGntObO+6VvLG20{*kRb_Eq9wLI~pTHe* zwP!D5Hy%^MDHS6F$CBCD&JfT8qbbL&c!TLnM(yMPV}?59&XhbhvD`GnVexpZ+#PPX zd_DOL*Vlg3lh6B3h@SpvkchAB*zlF!rMK?hq{r?8tVB&v7h|y8mp!>k*#-ZN=0Q(J zt-KIIo+uATTC0^e{XGMUJX@+ zBjZ05Me+dz{LrIR)6&j3@0GX#JDB{!wId+U!9Vj^0ADPE1uZ9A?wFb&xAjZnW@}S) zm8=f~3t6q}^+A>{&o|f_MBA6H23nQ;ptPwkvBb|$?_UeKb8<0O+{xs?Srx2jp~Tun z^*CD(jds)HOd?bkp-_Q4)j%NoIZL*1OWmR|(WhudUlIJOR$@1)uHWxOloT`vrh^Dn z8SbrqJILs3aeA+Dz_djy&FVX@V@;(L)$$|W#)$fF)>|ZJYhSuUwR$t}*NkGS{PKA@ z8`&VKfw+u=yrtjeEcQI}rY2*R2%Tz5nE<=_UT#l40PJ(s&>sOcwD)_~PuK~Fu-9Hh zN_~-wJC7=DY6GepdPWj080+#_*o zX&r}ZUqU)IO3_YAi;OEZQajG~1ahTe<_bKF--Qb`ACCP%vn#$REB_v*06~Zr4m)7P z!M(RRqXJ)hmSzmIq{ptd2-ET?tH+x$azuzrGJ_j=g!aqbTROeMB+8sKy7m3JP}Iqp zYk1n`uyD8a;dh~)Cyppg4tm5ZUHA+#WdMM@bzKEs;zN^flV=qxf&Qf+ulTQ= z*NU1VXGLb(3qB=pd9%B1=LYYx()z?-?tQ}t&F`NIz2-yfK;OXxHJ-4lRhm90jWxJu zrd1GYxLTEz33NAIb|)n|YdW1rYHt4sn|?Ln*?@ZG{;3r;L>RTbw+cpFomh2N)KK%g zg6z+g`$o|0;3INArNAv zx>L}77MvK9o{j7$;lAfONra#>}~8ht^Ls;)q#m1K_-Zp1vr}^0&i5JrbvHq)fCcFwxAI{&%8Kt#M_FZjY4; z#5G3b@WB@e0R=Cma)bfm6HjhRwNi9eD}QI?ku4#`k*ahdusgX5kb=fmV-HbvkG5r% zNgTCT>vE;BK$xE{a#}|*ve2@Hdx5LuN7Jx|z#q>!YJqK?gOWq{t;{lmBeIinr9mT} z16K)u=N{TgC8__nR3kT$E5obm+D$k zT7i=$0`J~DTd|zqW3L$tC8xNgcX0? zZN>lf1kr8msL}KE>ENX|wlu4Crkqa&MbO{n8zA;is|yloqR#3HnFIKzCniKL?`92h z@xZ#R?_Hg2=n}3XzwHl>efyw)tH0e{h{J!D8b!zAYdA7wlO#f+4tdU7P)B ztY&+I-4qU6f+SaLpRmB=I`R7ou@Wx zi$H_~%IKU7ZCf_)F_}$yKYk>6Oqg`wDi#-!2a1|Oq zXF4%zy;^a9G-U3#jcU3CLvD^TGG968;;7^Pi|cL`7~5HM(Xhc>DO^hruXQJM=#fj{ zVK8|e+-|yQ?B!`%YD>MBmDCs70&zve;UKOGDcKzrE|0ffR8S)BZu_5U{uHmE$it4w z80^i)CY4-uFku)fcKPqqyWiD*$tOSjUCp%2BI%p6SroJ8(aZ>Gq_<+EV|<-DpA94J zk}ucq+<0Hua~X7h6ZRd57jE7S2-$eMtLC6l*#Tq&N^dbrmlJ#BP6-myE7+APN7QA^ z5Lplyqv}g6#WQ(jv$5WgidyKEa@Hcu<+-XNnyJB)t-0&J7YCoYmDXNDS|EqnwWfxoiSbC`)wecCI*{{1Ishc&`_5@p3j03vvIoa7)Mi;SJMVSDS z9B>g|x&O!3+|f}Bz@!C0+gc*-Uk~o--QSC&e|ER#yW88_!GVFgfFt@FfGR&df6-`) z*Z->8aq~@icBgN@jCC_AJ3H47a9Yl^HaABaT6O~4Bh5$52;c;(WJCS?TQ2xy#5!{Q zOH%T#_0a>TBou=U(-l3xCfg=^!H+g6O&Kk04(HmvX1gf+!nC^&&u8bAjMY(^(K}EYj6AUx87-}lWP@U@Y^Nh z$bvWMDDn@@zhxwXyd*pp8XBMgubosxBoYlFjqveWpv$3^0|6;3cisOv_VI|>oZ>_9 zwh65^Q3`k6TkOeBk^!_>T_&-{(2D9v861>vUNw?9TI-wajVdaJuNB49B*uQyvOXj3Vz;`2}!+?dMHa5AkR;Qk5|1 zm|#r5w{(_Rh4D4nkGz2(^-BP-*Dzez14Ql?kY5pBG~8ra#q`H9bu2NP)xKuAiW@$H zwyJk#z(E#X5KHc-)O)MOsqtS!e(A}JiEa`>vk_T=1KCy`a{E0;RZwd z^7!bg$GUT8tPFYVV)s+90n?}znlKS?tAZ59g-t--pJhkJp|3v4&aJ%BTAT_syV$*L z+-gwDo%{S3Dad9BGZ_z5Z>%)yQE=J+5l5bk1w63@#t;Pr9s?|4&f&_{vtBQdxQa0(LpwX zG;fxfM8~+gxY@B~WdXK-`c16n+-P`9bF)BK8~7``l|ZC1`30t6RE03Q+I5n4@#u}27av=l;jcrsCL43k zg(x;d6#Lo)W=TNl&UEQ=vO+N=4-Sql00M^NU;{f~ridu_BIDGXrI&8jN`3R!TVKw2 zuLMuq>3YU};*-W$+y3y|^G~NH-8k0XE9e~F_ zHJ|bkYaBdVF9&w}GfsO7;OfW;u!Sk(^+4caJ{Zuel zBoQ1n&$i&bIM?eZ0HC3I!xP9iU-_d5?h5U3F3@c32`a?0Wb^l0HI8*@$H(gDA$KZc za`4`g1A8JP>f)37o+@O3G4)ndYm~FV9ccG#QYhywfm&UB8KU1D5O`8c{iD1Ql(4J9 z6NAEu2Q1MS)o#VA1nQe#0`h-)BlC~NvxZ)WABE$#dmotqqdk*2%CxcyI6P+yO#Nsz zEp-OSq^*RsZ(sJ{rj7(#!B$fkF0U+x4*rUiBnK$FhRrv7d<>0sF~f-xiH<)m{Z3Qi z_bCq}iL8t6<(MEZX^08yKw#2fl7;Rq(7mBe`CH{l&QaUbupzO)x`8O)P8C*7Z3XJp z^0c>SbYx-$-cg-~0#7ieC4U#&CRw2x#)tRMkDxxoy&VHIKQe&N2N7V%3>V|rsoIsI z1+mr4H}0`5(}PN0n8sI$%*jbgZ{|TdIhI)!4U@@ocgY!w`|Z}|%e7p8D!OVx~+_&Bw0r4pK?y9@eVCq zi7gZb7}+;7krRlxZN~U=X}3CCF2ToSWo{z75(L`ZsAujjMgKv9ugW)&-xhx(65o*w z=c|TKpNulchcq)Cd#+9C#4X8g1jby7@iY;AeuPMPnDehvPD0X3!qXA=innoJ_6%Cv zB{w=q78r)JU8}KpT&{uws+tOJ#b94Rc}AX6+p1oGZD%V@2qfzH;qc6s`?uL`)KvDc zZSCj<*S~=CQh9QbmRz{H`Y5Bs_3r>M`3vfE;5q{3*ZZ#zyX)}>)aT&hwO5MduHHIZ z^BqQrw6rYSVW{p}`e*y`D#5(7atf!}O`y5*wha_sFmsw_oT05y`Ls;?05yw9Z;^{( z#KCUL@*W#pm-z6$FER7NsRrJf>AfGpb5+K?qs1g-^QawwSKMIyAcrcR?&aJ&Kl)YD z2St&InBqw_G~VuCqpISwIaD>|&r8$-hIU|Vr(KRFCQ?$6B1pU9LWJ^A84*To;CTmP^=VwwCYjUZaYHh^k z6X;>?xc%P)%%5JS|kNb6XwH+{LzF# zesG+2yB(lO0#I$@(d524{THA#)8Y%S7YZnUr0+n%k3JBfEYRTuj36W>lk1KzW7Pp2 z4WDC?5hR;*@b~IuKE#+!qtffn&+jkl7;(L?cvIbg7PpddwKW%fKkLU z`Xpn<0*2#~zMs2?4i7xfvpDA~OZ`;T;Zr$dsyO4E!Dh9{1VLXA53<@E%gf7)0DeHR zh>5o|wSZzA^23x5`-g(UUM0*XpBW5SX@|%LPoKRX{?DzYyH|qS)i`HELj!fg#r+ou z`FFQ}!YJPODhsOGeQ-@9=WEE+us^yTfG>?*bf0yitOYqO$X%dfyZeh)@1E4NW7Z#v z(7b#{V+ETJ|j;X6z)!WmVelAzxeDEz>`1`CF>SP1|f8o_NlN$J_tItM)I)gCo**kaQ)F-!J zJ{SAN=X)9|Di_lP{QDvlvEY3$T0kn9Tn>+UXED4DE-#GOdN>5O+rTwOgyG&}$IYRn z3Xad0{c~>ukEE zIV6fG1WmE%arttSo)jD2@GfhRT|s7cyf;du z;)f%3$F+&&a@S-)7TuPpe5eU4VR?Q1?wVfIHmhfSw=FIUioUp)r=r5!XFF}7g4G*& zUHINztWw<*IrPe61u%FMqxTjY=H{6|b}Z6?UXbA{>N}5eCzSD&J>iJ_*CEl_jNgP*YWf{{o|B#UEcCO;&vVNxu1LE+8 zWa_dT)M?r~>eo;vcH@F ztWxaK(!6j(%0H0@BO!-glIaea-i=@TaW!4cOuZ(jH7#t)dnA{k3gd3bqwd>+}mVz!Y&Jr7(MwFH3 zLnwSg{Y9%pqHSsq)*c{iSC2+1xwBsT&f+DHC-YdH&-hD%ooZJHJ|OMgXS6twXKkgt zl@KkpR|33}Ve+HRp>=1L0BnD{yGwTZw4oJ)ch111{2)jfeUJ4?-*)|FhA$PCW|lar zk7%y1mDbgAQUuauj&oeL@Kuq0c7op!|! z!a+}8tU4ychEAf~F>c2dKs=I!A)-}tS`w#H#|Ox9@mX63;ae0a7TuD1(EY9&xV>ml zrtEN59>*_Pm1Qt;_wM?e_Y$IfRXAks%%9hHPHOwE=I^6#tyG+x+YkOv_9>UG#tc2# zoWc*YxZO?e>F8n)mWlV5(wo9?hfamKqyG^J+_14)Pqm=gz6aj0v&N4|IXOdvsX)uT z`yj{iO_G;i&^w1XM)ll}CntrSNP11KjXEE$c{8KBj#bVXD8srIX41b!>rLGYJ)dc^ zap(cO=xx&Zy8CH~Pn~mqU>E!FGF#asEnj#PY`3%&vC%~@j^UOj=jBG9VnzO4k=wCd z_#^kp%RdLA-=afcZHPPDHdE2;0$R~5@q|;(M_Ex{ua&ki7w6s_2Q~l#$&YTFrrG>y zo;wE8X9cZK;ttT?^n}2zxI_i`L}XKL&&#StLbgAcNF5%&`GY!@ZP?cfO?+e`kLvgI zU3Wyu0}Zu9q^b<{&C`?TCBper)OQuxzA$+Ij#M!y(hoBF072RL{{7riqpSM-s;|&I z$m|M<^-y`>S#+(nZ@R4uZO7+b6XOvx{-WTyVx=^)FrAK~Okc|U$d^xr=~xCmP*$=> zf6V#WDesf^y;4}|23uzsKT{!d5bt#7*aKs_yJxM~=qY<_q?g>*MQMYN`bR?#SCNpK z$rXi)18R|~6z|HJ(1^^O>~a7>ULT=a*&~va-QaRa%Y#U&R%8!_e%4ZC{}55z(EK07 zq(15J+J-{A%iTcs)7h`uUQyf%|0y+$Yd0OAj8uNlwzZB7)Hp!KOm+pDF*=jlLfeL0 zd5es|GH>QwL{N|SMNqri`^qhJtrF~*GXzbnfdM*}JCw1j+{e2?f|buMJ`Jhh9)>fi z0{U|rPi*k6XTIJ(1$0wdX&;)K-&%}*7W~-s2;DqJzt^6TP>rcc(6!xqX;c5|N}Tig ztAaHSs8$#AVO`RiVfc(c6eR&Wpl3ZUVIn1@Ffa>w!3j%P{k95Xz6qo8XBc6dOX!}I zAQpT}kZdw zIW#`=JQD*l*qb6q0`}K)1InwR3&r>E9}CqWSntK(GHJK+wWly0=puh_8tq-)2!ZS= zh)gkR{kHyT2girjCVOwI04uPWYM*w(QZ$9IU2{)PdemjtN61b{Z(r0Ey{WtL&XpQB zQt8xJl^^;}oacH%qXbdQ)gIsQJ_+yEq(vP)>U=-BNUg*nArIb9T=W?f#0*Z z?T}#JK)o&f*>eTUas}%Pn3$$hRxqM7IvV08(va&)=~RroH$D4`MoW# zsJ$a}n=x4mL7%~uD~Sfq??K9kV3L8=Fm<(sz1f~3zY_|}CcCT2^63Z9F?Fq|MVb0T z={3(HdWAHLZ35uyY_;F}tO?{6@`oIFRMWd+E%r0Sl^9iKVRO7x|6A#CDG*pWx}ewh zc{kao?^*U6Jz~+9Z3ih4$JFEGM&%^jhGt)dy+M&32@GsH&C6e z=p$8c>zYuX^3K2Zw@~?D>ZN{fZSF@=vo}e&X5?v-ZDY9j(z$2uR;Ai;2e5$r6RZ1) z5WIDXz=TadCqT9iU02?apMMU9QV5FsBf76ydU}LjCs?A-jH09d4FNZ1b`v|s$-(v~ z*xx(Kw9%a*=eIgkh}z(Kp3L9S3JVJu2AbT|-U_z|y+aY;9zW`;x4jBoa)A+%Eh8*R zEP7-zeT`9pydL9Y<@#FCZu9liH^lIyGxa)5jQ6dWT=o2(X^2X~LFCqT>`d>C(XXpj zGa>&B8g#n6YtbJXu0VWiKZj$uaCdGtlQ-~p#c(njY?=AcN6{n|jFT&1WLr&Y8btOh zlfb;_R)4#4v(-Z*Ybw9mz?z$NuaorKUAS;_-t#${2}CAnsV&d3znJqW97EuT|0n5Z ze!Dxa6X)SY6rwkBGmRH#Woy?i^Ct?;82Z9AqzeEYT2AntX#CMD4tCoV?%8`%Hx@TC zle-qy!OnH)!@(wYVK=;@PD8W$1Z9X#k1`Mx3Lxvzz46AYi7#^?kE>L6ff~_K=RxW` zUjZLIz^NH_9>m3$t9u;$Ht^R}@fT?YNpbF=nQiYE>nPft!7|&COJ{yOGe$&xa;V#_ z9oh2odo$e^!|~Y?-Nv5)&Tc2MfR@xVIl?^q30#u@A#q9ChU^=EvWdnlv<3!8AXD5d z_A*e;CPw`0vI|HdYQq}y#;$Z}>7c7LPeJa~*H62-PYgXRk!T+)fw(#;Igux_=bIjm zU)(+1F8n1iL%S zb$L#XnkRa1^9HnlVdU2Ar}3s*VBt#4l^8Lf z!a@+2nX41`r0<-=-reHJd+8trrBC637rxYex@UHetFmZhRc@s4-;R~595LFbGQXSP zR!B>2DB76eJ&qg-xr-}5x6Lv&MoQbuh#@w|)S-D`;}c7!DWksp+joIpeCk(t97cY;@mXz4)~q z;A0^;g7IANJtdQZ0JJ81Tc-X9;##d#Vw?fN8#`T!4?VlB>c7Zw~!ofK-W*P6g>S7@L0^-Xf(jKzLk zLMvawot!EE@m&d7b8CS0dCMEVnY8-Vf(O_*=ZeJ*tX2Lw)l_K)zp&5$fi&y<54BUR zl{hEVZ?4IR8`0a0wEFVHmHvX=CoVA6O8NmH&tuLkWg0%lg{wluBYKkCAGg>|t)5fK zGQsMBt`i6`L!S=jW(0X@*#^(exErte42h`8zQnrn=Nl`%(TyiH;m?6y=)R`>A+a?v z;)j?77QaPCexqaPWd$1A(DNyYrY+%gI~Si@d0s;7V+V2DN-d%O$$&kzQ}Px5o;UA3tX zR8$?9F?I8u#Tr3*;|t)qXABg?ge@-)NYI&!4duEKHW!mUsdT;3G@R{3rJ z!-|C_u4^(qV@_s?^bH$nmNR$FWfT*2$W_4T=}Y#lXR-D|?IT1p-A0I4HG z^ONX)qZnklE>81MN)@Wo-?Aq~^CTSi4Jf_rM{cY)DgHgm;*@CC7Z>juJ#P-r4>i*e z$+ajc?CH9_#kl1a{m)Wo!k=H(yo7`U3c&~Zl7s?Idbq?~kj_#@+jWN&EITFLgQKox`rom78bE32KR z)=z;LuCcH52|3GYFFNVb4rZ?9T3RZ*^aZ(%F;ki|1dy zoCyq!B&L?z*^VRYm-(Ix^cVc01eR5oYpBB6VmmoO0#Nm59wc(Fnq1eN_)4zHXnQIm zn@$c|-8O1n#P0TOk*z%r`*}lao?g?cbr@-XCF#oss;b-{de=cdZN--h{Nd1wUCsS6 z?o+G~6#`9&_STI)5etb|SE6yVZ{)^k-2373GJz>UnDF(9KALE+3>pQ)Sl8O8I1o~J zZAsO6;Z8HgtygBG1v}Q>w*f#cT?}{wwUnpd0E%mA&_+h=k{IqPXn^&}S(?UrS%}%L zk)c1vSQ^`ILt|#1)~=S7+~3uxZ`VH*MP~hMjdTz4>b0{A1>(ls($xtL14`Xo{&|xC zJ>SJpmGRxYY;M9AY#|3d<87s*0g6rC+o;WxXuC1>T0`oI^oQ6)bJrQEjd>T1y~A(F zhrSex0_*S(K%*NCAp&*o|CevCFO4@R`~;la*ni*Hy;n0Ceab835|Fan2t>`Mk4;P<8X6joou>elbDxG$J78csytlm_o`fhL z0qoqqC?CAq+@F&GiSK@2BlHH<0S08ZwsY@h0kCzW9AE+NEd7V98Ex`1x5%3Rv1E_< z&NW05&+O-)jEd`Ww>ykJ`Vk0hE7|rX+HgKe1*SK*U1enwarkVq zd?6w-UIH0zJ|=EXX}XL$`eJm<017vTg$7)EcYie;hbsY}m8MK*+T#-yvd;LrM_TZz z2mBibiFiCCzAnEkFZW=NXMRriqwK`-)!-LGU@!S`_%rxSNRL{aAYU)??-1QkRMgQk zv1%hImTkRS$AvpuuOclj(88{?3lSeev}JJhu=93N-(=kDGsqO&4z>vwbej#xQRJ-Q z(|Nv_{Z1P4UB0U7n5+|Entyl0W@yNT@TsfyXMUQD*_1H@#$kTIg(Vk%aFGa&s&r+e z=rx#=i~YR%J6lIqSUqo60QGzbT9E->p8xVD0UH&6K@l=|&&Z_l1Z)<2H666Tt`r?n zO+@67`=V}Mql3u}V}pT;u^h`pcVlE6=k8W|035G2*&W}hVwICK-p2Pun6IoVq+I06KQkCA`Vjq-9-I|9P`jpF7(N?$JW+Ck=jMH7g>H4HF{?Cz0j!$>w*s-v*`fd!9pmr&M!-y7<^1pq(bMz2kVJtsj@ z81yrygbo}jDlA%a(hAQnrTHK!zgdf{B8V#|J6V&pco*8b^b;fzqOn7x{deDmp%Nc0 z9!P@xB3!($p#n_XL}%l_1U(x3WEy$QQUo&h{-u@suh7qhp8!_|aI=)hy{@^1eeW9$ z2Ukid#l(ZgExSJ0;qqypXYH|VFwkpK>eWSMiI<#HMz`VP$L3g?al}SY6v!Gv( z>sK02zD&Nu9QZjygw`1xCqnY01dbXgRTKqq)K!2K0-NO=zO4O6UJ&q`!iVNp2VQsf z8a;10Ve&Y7Tw&t7WebYZB~>}V5rJc}GC-b7J!*SXhMip%sPG}zWkp5>s8j(((fh9_0hMY}e{~E7De10(7hU<=W=+ zs>0E^REXc^f3Q&#;~~1&(y^#WvtoaR^0CxKtQ))6?wnQb)@DJE3Hqb(KNnk{fgL{R zgB@kxjYxmBPlp%=Hfcj_kB9@4@o|qlCMQctwCfRC!?#^qWPR2i&>LJW9%NRfo_{4Z z(NK^prp|uC67w4U`&DuEU`A&!>XnV@iVv4x zup@@QNe6BTMXrCk54!R27BSC^fwbG+q*rtofDuGD(V$NWI6y!_a@1pT?Y$Eyr-#u@51`HJKSmRmrKSpGm|1r+e)X z9Ag97skMv6(ZQP?(RO%?+DW-FF{>x+U5y%36Jb#Cqu zR$=QYl-$7$6%Emxs>5*I&*{DU-K{bWCMEt`d}zpc=!j}30Pl_H6;yok(*AH%%lw0;xqUETuvYq9E9r_TjE1xJ2U2L5!6LFL4w~x%ll-KRI-$X&2Q7II`4_AO)Q$ z_j+B^^?2e?;{)6%`ohdK=cs*p#Ja{;FL&Z6m? zyQ>daXTClh@=3%HZaCu&KNAN$5Q$b!{6*N&w3MdWpnvP8!`@LU8QOB$|{6`uyJ)hFIaqbqV5yK55~~3WCr=4^VMz|{Uu`3 zBs2IdI$N8mliNHx8md6Lb31(O~>&qWVe_p6$Sg8`f_?O}hiH{tEc;DCq zkeI6ysBd##kVn?{t@6gx=8hN{o++)d+@!q%P2rbRwX3{Ue}_(~^}sNXV9+joLcM91 zbn$u8+2)KH=?!L_MVG~rXM;{l@D)aY%BZ=92jp&)@S+dR_arolXhw`v}GxxO9yP;{kqNhf!DI!@d@x zq!Y|L4tLH+CB&XU0IinIZM`sgu&%hOrJd4r)&EIfI3*_RegE8?wIH5KO53`Y7QU&s zAirVuk3t&|a(p1Y%S=xG^VlH3I1Mz@OkVx8%pFuKBlundwL5mV_Vkbgv>&w=X5-{n z@AR-ZXPVs->2bpJHkj`^hE0`Bq~e!`uAHN(&k^Sx(c5~qh|@@2K?v$ zjz&MRF@Y}?0~f&u@1w>2xcaPGLD^l&xw|gD=qxdIRwps13RQfXRUp-`WT_)g0?WBuwS@%L|&{*zEf=p*48!TLduohH6&Xo|^O#gTx3sh;-Xg&^{e2WIGJ_O+G99Rw z9wzY*j#K=c@MXoP*5(FjPUgl5Mv#ppA-yX4+Ijx=EmX|OfWSZ}SjU|uCUf{^UC!^k z-mzCH-d(;6|3}if$1~mk|NkmQK61)+IkPlTR}M|gd6IIt3aRUg9Ahb(L(Vx(r5r9h z5alqe5V{g3=VN8g=R-DQiP`4NY}g#;_wM_<-TJeCvb^?sJ)e)q{a$g+cWIS>6rOGaP1=L-ac03k;N$oW^Pt21hX>>(CcsXEZ&Iu3 z1YfgfE!^NW+09M4KY-+-j0_te*#Pzbxf_x1DgwP6uB^tfx_2X0JST8GNjr!r9ReCT zR=qsc^6)lG<+--PCs~iBY=xcF=&m3i;{t#Wp;9Y*OS#5iBr*C;ZEoHeq7lU-JJK*F*4Y zbSuoHw-vk29NC$Ncgq2K=EV$Aqf;45s-706R|}^M?l6G=-Hc;b-Cy zi#|eLDy;xVt+|-*(eZ7znM|HO7oh5V7sZ&e!%_Z@*+B%cAO6uQ^~NH9b1Cy{Vq>ML z9_5AG{9}{dGn-o$8FVL;{={qT1q;dKIfnyHd*)nPE}Tw&@5o0b*()0+I6ibQbORt* z_Lk6l`sL8roVK>Mk6G8q%eJg){blcDrvN97e4}kef%!eYjf?wBq&wd|ea6-4-j>p> z%r_QS07FsZTN{dZ#4T9ycLjLNua8T5s-~SGuy^*Aalt1fn&8&OSM96FKlmv)=#RwS z6X0*~E!-l2ed~4l0S!3%PLYZfNoCubgWa;Ix~T;iA;b5Z75RlI=_$HBy9i#zu z+d(S=h}Z8Sp!4kpJoT%GNh@LdOSR8mQ4%1_5 zPDX6tv=y{P;Xikz2O1tI6b32aSi^>b_AR?o9%B+<1Zxe%vpH^(sS2%PwCCU}M1oV* zEKYWQD~{i^#zq)#NDdz>6r&EQ0omnwS+By=U8%CU<9e_5PE`!-xmT|%8k#l8x~1|* z1oej&d3QhQV{Gz4YJiZw&9(5xpNE`r`-VTYQ=Z|T<%NH2p?lOhV9&KR#IQN4b3?D^ z+eHgK8n5pVZ07O-%GqbXvO@NZPcL;(NXO1@33Q^8*A}}|E-eO!*crUR{bIC@{WG~F zIn3Xs8jzK|N7EicxIhUT>NRsMs>Pa}QZXCjyR6qZ#(pPyHHGG6$ag4FK9v$Uo*Xex z98#W@QhzpZsM#H%mFJ@H9J=3gv)sX8sAxt6Dh6O89Zg9eYmd6PEQJ5G2rf`5zF|~; z3HOmO8JY?)6ol*8fsWBj*V_@DZ^Bgs0it7snKAGc7ybpRWnb6%cbsE%?CqT-mfQu+ z^@_QF2=J{VdhjDSZLij(s_1Unr6H6u2vOE45^{F?JC~9e3!exl5j@(R>fFuSUi@YL zP=&v?j6!<9iZ4_$h(&RZ07vy&C?4>%Ivh1yIN>$+ZVJ4pFWO zJwf>~6||!@vqlkG4`}yYP~?~;2^rlZZP$pFUMil5+sca@`22pe9hvJ*lzSf)T(Zxl zSG9z@yI;D%?D?E7Zcb50epuY9Y)uYoYiiB~^6M`4M)^RNk#9FXR!@6v72cHopNRKD zos$tsh?S?!@$km&hZ_TGz6pinCMMIQD@(>UUH@sH(GJTW8+vCJHsVhN5hV|ufN^w> zg%=BL#KPq29VVGPC(UDv#QZ;3O5*eKzmL7Dlb4PViEwl5GxL!gS5blHK~%!`-7MsK z3Ta~%w(&zeeal+J^Eb>Na4Aw58q0{NsG^5u&?~-bD`yNm+nZq6?eL9*-?j2%4T8kw z(i>JmCtmHfEVMU_Cenb1T44T@7Rbd1-XZEkgmckZ8zoko(~b<1Yme~mu(GXJ#DONt zfBb?E+Wcaru%!~$W~o92;~=Eoa|HJ^?S~dF^j5KO;{$+~ympFv+3E{moVc$Fqd>;M ztZN{PgSM3FgHhRwjMC-ihI@vCq@_BvA932*8D--h~e1OT37uvdx}(G-}O7%ogoCu5cc8wRDK1` zDd@e*l$}%9+9}BE-qFDfMM6n~70a_@%%QQsEpXXPU#(oixSrs-&xP-9NSKK_qXcnJ zhr(9*mB|v`@DMlI#H{GASvFAVptkhKrVaUN;lBRxYL!lLC}DO9KT#rnw)IcX6tGcP ze3kfWxtmvROp+Zn@LKHZd$%lcnvUbzwUAjpN8u#9upi*4dzjxB(07b^mPfc2pGU5H z#4)Nl5^}lyCPtM0rQ*hwI-u?oDkGF{GtP(HDq)5ihvJP?kWm?F%7^aN@8Z5G&mP*R z0>lKUvZ}hgsXmfo$fjnqnR*vor}qPn$+Tp-%CssR2@undw=bT2!AolOsd~VcWHn%U zU4QrP1DPE;dm^`SV<$N7j5IiTFDUsX#q2us30L#PusZ8&kyGa)Y4~gLvTxS5=a=Px zxEnFy;jq{zhpkZeRorcVg#BT~ccrkT-6Tf5&eu{pvFq2uH{GcsqCX*K)4BERPL0o) z-b&8a9pVF~Gn{F1SvlCGmtbXjCR0^>a~no!)C)R0MxG_zna`(Q)`3OPoM#KE5X*`*qaL}iB+wGq%E)y%f0@`D5#=mXk2^AW{ulWm zL}RF9y)&$kiy1@rGfCe=Gv~3eB*_JZk$YCCXKs|+j7{QHje-t+-ucO-+v%Z!=pbHk z=Yw}TmI|AIXe+8w4`$yG_f4uk+a-UvZtU-nMH`COqcjOH<%wOyEB$Zc{*u3}ZS)rb zpgwF{q5J;I7ff6GAzt+WP05*eZ9d#+g*~S4Uhd2@f=3SE6?3{({BXI5?zU&EKL~`) zhGJKd7ek%uGfwjj*lLxvsCh?0O&LF6ezH)@uNLVFyiL-=w{DfR66Dsuzdrmz>>8Z| z(nT$S=B<3r`?ztT3Bk5Vh;*#NC4XCoA;R6lvg?%5;wpHscuKriJZg?$(d66y>a*tCuJLx)faF+#>fr%JA7vML^)z+PpU2Qv0Z8|Va-X5 z3Nm(fIR+Kk`L@Me-drRxDm)-N>5xgMq$=DN=&i$T5nG zg)2(%6Y5vTAj-53dJm%qqz+Di7EyGG!_u!Zkn>mNs?8&ANiP%aBc25VvC8XR%jSf# zf)%YrymojZ{^^^st(~`M%(msLbh4AB*NC-ywJdOp7n{xqxT;_!u`{$`m>F<-<9y%y z*@WN_4ldu`L)X)4LLz=UnRRtpolfpen?K)$5u-4{1Y=4Vyy+`oC7@K&8;~XfnJxRP zYu1$CA1ZWR@4n85v{(jzO{o3llo|y3_Mv-*04$I?GQ^}1>UT@P2ZrR5A^aort?PhV z*seT{G`cs^1<4g*zF8|mF17ysh7>}MxftH{)-_f$(Bjr$*x4aL_-9(Wi1%n$X~23s zx}5$LYs>L$MO%3=GNs4xNIySlEDo3D8r!rT>vRzcEX$jv4}3{Em&a|JR_-;=@$V1e z4R+tIB>saj?>9)Q1+1DA=e+vO3E2LjbvG zmTbCZMl>w?{y+o@qVFA*QNU0C#MW7w?-BMpMJ|HxzZLe0)Fsb+Lu_{C5>OlvdLC`0 z8Zq8eM`)~noviSDXkc0GCYIZAu`NV%X!_s1@zsRQ-xs4VLU^1LW9hQ|LtGzk;5kaEvgQt}+|eLm#UJOtczDP?x{AnOwuohsPTRu(Re6tq(oAW*VrZUg zsIj4^1{M_-V*2FLT$|_~Z;ZJ(R&zK#Q?iJiiNhoJzMFx0h=a?2VFtd0apW=Rvv66x zM(r(H^al-lF;S@B?@+-RTGU@5zTCgMYF;UZmA!6-qSA?3gU z6`R&!EKNV~#|;^vh4gQv6by>yZZQai_aOBN8BFhMW7tx2og=U5$ zc_Sq^hPQfpY=rUKJ&;p{J=Qy63N8J>o#7j@?eISh%Tz)FcTvj}d(cu8pgXamhi5&t zGm+oV1BQqxu~AXZUil}uz#{9H(%4@g=i5ZR(L@a}GB&=@*60Pmi2<|QKxjm?vC`kU z#s9uUX*=Uq%B@_o7b+07jmO-&pyemHuSvSq4b;`Fu$ADHfd@v4+y4w59L{^(4Bww= zClEF)rjEq`m@L4(Rg@kaY>A$KG5>-v?NHaZy1E(~7N+Os;o(T>!0C?xsM})k^&hqX zJo3|KKwX})vhs2i4_L1h&mi~wcY)Q6n+0W8TBmk=IZ6|{8jCEC zHlw)nLKm;Ct>vTM`pQamIf#8vY;EnqucezCeA8{{g{aXgz!HkjGohF+}zjT{RlzG#rR zr3{fKNZ{H;Zow?)3fGdJt&Q#}*`P4{e^ei#$X>n>ujFObw^*wK3>3i)O1yyor3l&n z%x!okwinAAADClpaGkun`_O5%8c==xx-lyCU`*|#|5G(+lLPxxaOC=eGIqglvcV0O_1;i^*TRB z&D0SkbSJ@q=UU@npc^ydpPl`=7yy_YrbwyUHZ|d1j&gzdH##O6%%+4APeV_6RPS|6 z=fM3HGR4iR6=@QrVnb*+GO1yxMuq>$=b@|db11-ZD+aod!3}Cj`<#!h;^O6Uq<`U$ z*X3wy^F`1HFhWqwQo&vm)+1Yx+GpL+)kp<|*w6Sjzy0rOw(_iyEry;HmeB)11$>58 zEAx(}+kPprQ};H~`8MOA_RRL*_IJ|!KR=7JKg$Ax<+tE_z@}svb9^P!TI&@^sdH04 zcvKp9y443c>Y(;kQ#FlnQsw|4i*_i3K=n(4T{K$j;3vMF{ZQ|^E22v@JR-u_%_FW{ z-Sf$#Hy6}(-q6g7=~iFFcK=aR;%m+Ic7@L7+=V^iOds$!{$BIxQ{QX>1ol zK3@~@+ShGlsIy*X6t+9B)fLztWlq-=`9W&9O_m&5%;+|eW{jeYqAS~$K3al|9=`o#dG|~y>R5* zj>^@$TENNcRWjuMfQ^{3v?N~?1Ni~=H;>pJcBn5HDouO6+&nx7TrsfSA%iW8yBuD~ zKr)}xp&if+jQ}+c4l(uSg4!yA`UnL1&xo&t(slVp1G9>#r4-3!At2aXRPklV%Dp|S zBp29@nyarb{-Jy7iP#@1G9%_OoR=dNCJc61kU%4MVSW_6bXpz}NhPiNUTRw_Tb)2K zeE+jA;{F*JskwBYZDl!Ef-l7G$PU${?G{?bEI^~~?)8RVmFqQ}IPgRk{DX=4!vm_E zGt*)32McgT>VMZASY4@|iaNWz&$tbpz84T~{|z?qS1=!)3{y)UldLpXAVEyeXm37h zhP#(b;;9^c_LifJlE~H8?A=#~Mp3PVGcbAp7$!fG)N<$H{eIC8(I;8fkI|{s$p?Hw z`4JL&U(Z#jTtT6$sV=Z&Y%IO8Q)6D*I}8iR=Ei_vMap^LHwykq!_u{{+>-=z2=`|j zK2Yek8WGm>`R2ng+Zx&o#V#fZ-^)FxhgXxH2$(Jay zdrAg@qpgEn`Njg5BzC^<;g~s~tE+b1zV2*ytS650)bOaW&Np#1VNncJ5Wkrv!uNvb zE8pV8e5K6---8HL&&Z4$YK{3f$5So!lsUarjRvj_U^ATwl)v$baa)oIhUoM-ENKiT9@@634l z2_}$6j4L+3ob!I*v_27(=hTac;+UHv<*Ri@+H4uXs3vv>acOHD$=j~lB>F4wL$A_m zk3`MUNq4SB-+VBZbSD!uV%}fuJ?MXnGJ$Pe)DPq43IxGdy)Xkcx%r2m>OJi3?GS}A z?Cs#)4L+5_n6uTRwLe>KkJN`Y>_*2tIXAU_q(77P_y%Uc3B4M_vrUds&?7J8m}1)Y zh#8WmyIh-nZQlk-)i&t8AV>U_Fh)scUth9v>%b6V9lNdk12{qj)> zQWZW0ICkaj%BfCvMeUA;*G;`qjc|>*W4)?$y{Izg<^>`87yIF`;JMov1L^R^#XhyY z`OmCZbQ{O)b7O@?*fFY23kI6$4pygLmo%-Y7!+xHxhhAhJuGP+gDOO9oBV!Lfe_B79W`Gi)%0#0&4qqt;oy4$r z*-Xl5<@NQF)dwyhXoq6vK<8~|O!k0wd7Gk{F@TU|eNGlXx2ubVYAG1UZQet2z6P>i ztt)odrM<^Mx}WX+rKA89GoX?OEk1o?%T0Cb#eH>w%O9rHa*(JI;A4nYg5E}tWc6nn z>cq`;_A$e1!ae_}i0X^7E9tlFRf4IiZ?La@wgL7;-DklyM?Rv;CyycikZdy|dl5=yg2brQy%4VJsv*5QjAS=S;IC^FAYX5+paVF)t`el(4g;WqFIQ_1M#_s`t z85}MF9cMb|z46RwaR-!kyW%>bnJ&lrY8miYqX-NGvlx{R}~G^iFUt zBBiKfTyVCDsxKo`^Ru;~xh%xL^^Ek*l#eBsNze7Q1`mLpmIE$lK#g>A)MFUqG1Qn) z{fCZnX}Zpy;VDp9(oB|hIcXV(J4MqI>pByl#r5;+jCvUVBLH!!D!CGk_QAP>`5fkt zRC_MxcqC=K*0Hbkl4C7TKE=fFo&v6xO!*&`@35fng~{E?)d!j*I?A+|`nb}dhJ2LA z4a`39iqc_lZwume&}7}lI5ZJ&VMmGA;d+q-6^~s`Pn};#t#W-8{8J(AGei8B=vr#+ zzM(LpXm#8+TP;cJ4QVLm*as1q*Rza1wY-eQ6XY(5u^~jNh_jMW!HqA88HKcxWLyf7 zpZ+7-%_Q#OdFjP42{ZEW!@AeWZ2BUR2S=oYgBw2l97>;eE}J*cueT+iSxb1)jHyC4 zt%b&IerdA|E-+pqnk_Z&>I6WZXT(EWzhUcKQ~IW4p+2yy;93K7-6%yp$z)Fb|iRa8X8 z_j1G)Gvq&h?GtZ0CXFPkr)=)xlQ3QGLlkBzjFA;juc@+9R_#TsZ;PT%a=_5eC^>(OM3da-E82PI(V(<(e4 z8hv%Yq9AssnP7o4RHhAbQ6o{QFJ*}0MVD^i4s`Z4y zsDJ-d56}>KvAbJmUC)C>DJ`zQ$aK7})UZF2w8FNck{A}cjY_W$o!xt7>avU@FSD7xP|i%;9()%l5*3>v4`Y9%0(#ta;g*DcMu8Gao+YPVfZyMXMb9Mg9LxZP zfY>JEyjGb5sU2g8KJ4%2xSjHSR zFm&26*!{Hvl{dkeoZJX_Gu1%JgP8^D!LAXlq_RR~ z($b|obUA-;qqA*?NgIvN-iYe4-nxDxn0)v<()a1w^Ng=BOD~SW1crOUV`=!OfKt%c z@Y!|mly1jXx-5MIf$Q`U3W6}za+H#X2I$31W_*YZDju6ORmOW4t6#J}p^+esmNZ;C z6Q#w@0Irg6EF zh!N}9vdvJ#4O1qC*WA|hG30#Q)$(QfYE#6RcH91~xV=605NJtwZFAH1V1dEeZ!VWo z__yRiN{!J{f}&NmQ{7h~B%Gz|f4eG(NBOelM2oG@gfge6`*A;j*)TuI1J@SBg``5O z{{bn6H!T9lxTVNd02<_daKZ*pdFkqXHJ%D56jA}g38YEguXas5P}r}#(>f#Bc5>Q6 ziTxgVH9Gdjp|4^^kYoiDO$9)o^d72Nvi#L^1I?sqRaqH?AN01$Uw+mdHbA~;GK&NT$NB&M zTAtt%(L)8F+_t`SmUhtK@r*+Bl;wL5g;Kr-ANnDk+B0VKQ|RSZVdH9X@b|F33 zzVJ&(1$-6lEqw_K>(Np`$*)N}h5Ve?0g;47hc7#t zCYgBn%Vz7&qJA~%9n40BaJ9A|G-J|DXFW7CH+?Nd^MT|U-|HxR?c))zm`xvVxJ<r0O4-|<@9!Ql2cS-aaSSlok&CB6o zvDU*f4h;POTvb*TB)hNrJq(yE4$6BG)fWAqiFabM*S{+oMsz*~vac~rquJ#myo0(n zk`9Lw<5c0%y^C@8!vvIVyhWcW$AW{6&V$A%*UQ?0yzDTsC+POD!GxUzfSo;>^A-_% zT;I)9)aCy2c}jZqX!F9AUlFdtDHT9n>~7JVqVULeo(RGL!-!-}OonfW;sB=p1037P z>`E|_PSW^miFH?l956o+j(pdr?HFsIoRai%GQF~6^hw9!7d6(HN_e%&b3h=4zhmh~ zC(l0KSa%CVgX2Q4GQ)#q)%3C+7pX~-~05oLjY+_5o-jvkZSR|r!Sza$ZsA9yeuvdJC-R81l zG+2`t6XqVjk4ixU`DdU*YsBailGzdV7xT=ucDIVXs;*AQ$Vvhb>)eM2o2H3T3z00| zJpmF{J;bX&8A}9Fr%V!DBMbSGK6Qmeib=1t*0Q@`MKnxxDoyymDgtAH67 z`&3QKPd(|5vfT28#DI!X=tMpKfhHClr`zau2Tx!eUlI%((UG+a-oKwS!N>-&lZab)Es43!=7u=v2(^>C;2| zd&B?vxq2arkfGLhU6hbJ?`h-3RbdbM73643raUO_&!zwrsRcCu4zZO{`0iv5h)`%8 z%r!6BZ)r^5PTl@;$N|Bhi2ivjJP<{dG)s^*?37)mlifb&X~_K6lEAt)|JlMX=c$&Q zv<=Kevk1wmH#w3b8LFf}P0%sd)v<(y6Pk-dpGiT!Va`d>eJUmMpsy#7=|Zq>TRs&TAVtV3#(qQ zw1IlCGOb$6J<|3RUyXVB0y)EV^^DP9offyc4BK0fLL~4?v{v!x$$0bMrJLTb3 zc=saQAsjrKmQl!?d;u7(Hjmpax$rhib&%gHm;`REI|QK9RU53DjACB)+rMVF zz43N{s5N*6aDbwJjrDm8Kh;(^#VOUm3uq=0GhH{lHL7Lt>*ABDm3vp-pX6CLEJG5A zQov?7o+#PWHMt`$zBRuzvsiP4EP?(9Ws(Th?1cVib}aZuf5+BV$?l~BkGQ>0P#SQv z`@|1<4t<8`4}6TM=lkJ8(L5L8usuK>pB8PV{z8np9LS|NnN6` zcLp%u)r!Q=WQz5^SkFqxYS=WtIulA@&H3}|#_5+`-U>(cv+D8P28lf>mMhg^C}mQ4 z$S3iwSnG=c%<+SsM0X)pMcVX2>L#LkJH75f3Jb8tZs&FaeN&%wlUSj$r@GsUJspsy z^xTC(M65aTSFu>7{=@>@!15}*mbo7MFgn4_{sNRt|4x#J&b?BxmkU+p=tRF5f&kNC z8GT=XrXlc2lz2z&?Z6+&O4QgD>p8d2V=$_Nv=FtApm|E#G^p#{ipeQMX`_Rbl!nPk zFX*wufNF&wULSI0$xmz$B0Ux>#9s}q2Hn~9TQpF)N@OW{Gd{y7EN!z?64aEyiUOIHh65L5{K0!{MF}wpDWK=QV9m6P7(o41vc-#E1$tOM6i}E;fvHf`N zb>~>a(3^q-AnGc2f+LRuV2Z_nO7Vk%q8KnmIFGv{c#wXWk}e3krEJrTXz1mfh-h9;(_nv?4T zn}73`h~f?6fZ2>nrE*vRB?izmvQ@Z}#0JMy=NOpMh5lI2)<(vz& zj7WO3KNeIyFniE*>Vl*hI^7%nQo5<3Asf5HDBc_boRptGfA&VP8?I6Q73)>?xt%ST zSH-XK|KVx{^pnO0R{aNBc#e#rpekd^qT&TCUk|k`%gE$}=Uxi2n8tM?26X__XyM4z zU3OO;ppyQ%zIw(R@+z3KqccGYm$;tI?>R&h)g#eFQne9K5anm4l57kcfwzp8F;6<= z+YY@p3nG06`c0hTe*NwKDYi7k)c@N}Z6I7o1(K>g9ZCa2Q3Is3c*Tzmo@4(9TO6gC zH(f;$1r|&kAuT>yG1_G+QanASSYm?ZK$Z&W6iQ+wetbZ_Ps;@3g zlpHfJxZ|l^;hF!cz4j+5F&=<=ipRXoli_0>9pAq;_U)>9Af;;uItds&Z_Zi7vsxqB z#lba`4tT5}4sbpT6d?Y|?tW)}L2BnYa?6*GW-)dfgHb&uS6nEeCQDL2h3T8J*u&_H zYPkQR2W4HCDIxs+JVaLzH}#&B+6u~Z++4w0u~3^(-b9^s!~=v@*7-Q?rQ*Eucc}Rn zQAhdiqvvdgjqfFrLx)6J=5{4rMm>d1mnW}XCL?0Lmm9~-rp$bd?^rw^(eth;rUU75 z4PQnN1!6o$jh>S^@>)?4`4v6I2pRpW+MjtRrd$ch!7>Yp+D1^aH2@q3?^~B4Ao^tr z`T*TOC?0T>q}@%L|I=dn%Dhe11k^lqfgXV6WD!ocW&jOh>Yd3a!TC_!r|Qj}-KA@( zPSs9H+9-OPKnMaeWM{92*Ri*=FR9Cf&fyVovR}j)jkYg1x3qNIR4&@6_T1EC9ii+* zOl>l}C|;*=t*aLw9J)h@O$ASuaxZ^`(;A!FaLQ}zA5Zd$X*&3D*Fa(nkQcDiqB=l@ zpm?BwUkLmCzSJ%8Y7=?CbIV{?P{4HxlPYirfO$D2uc z&_C!zZovD}VnpQ}JO8TSolelBE(1v_V501qPDbn+V!oRu?0;APdGEI*9SGfk%KY0Qe0t%8@)-1%&h90v5Y=E`1(Mhc|+mhNnm{oS*{79tAR&7eBvzAHB8? z9Y<^Dh@X#`E2NJcb5Ypnv2kk#2Ma{gylb@kOGN)^m77@}ypwAG=SVR%-1o!QvHrkI z?$9})9}^B_394?ErRA2;W(HGQgI{0)47=`#*djoECR%kR0*@7+u!~Fg%vD+sU(*u8 z+44=tpH4^<4DSBs(*S$zazaBQ|HY+;!7A#ZduMNfT7Ebpzxw{iTFgwc8i!j&aIe(0 z3B{tyc<%90CF&((lZ%VL2xIoajETtlCn1Kh+>KV~J$v6nE*&(s2iQsw0y8o$Pj|3; zKnHT6OWLJu>Ze6@gX$*N=PG+^`AogCUsR``$)<@?(*tGDjy*&nq1O6d-+C09XuKqO zzhLPD(4&Cq+hyR_+&PB~ zZTq^P69K>EzLSe+ujkf)J+hTYpapcWych7AL>Pj5-T~vP^cuoO{92IrRni5Ym#Uvs zFwEdn3SmiRCZu9us2SP>7N1Ldd(s{Zovo3=Ry#Zi{-mjU-|(PHxX*rSQy^}G(FpZe z)l|5M2BwXb<{+u0KPXx>5jhu<-z%JFbxl_y`Mi)fWcUS;4KOH9b6P^l#}GyR(}X+M z)ucn>$I^%z|J$uR=X63N7z%HFYqt=-&_G=)`yL+yp%HF+=bGQJyC;?OG60B^#p%l> z(hQBw@OF0LdUd_)KUzPLMq06sYJ)?7pE7E$q28ck;2VSHTC7RLgqu*;lFau8D@=gi zwt00u;%TLSb-9p2QizvnWm-%0PHpFezKnmVMcjoCRzk7go0}tVgKov({b1!4fser3 zvtMdPN9v%cJ|Upt*B&TV{a!TW)Vzh=!nTL`3}eX27yj5i8HP$9I(RggTxAHIfDOKN zUkJy5jR+Z}(BN+&hRJ{j$q_3?;0Z5q1wh5LDcx7(T2H}jbV|Z z>8Uuo|Daz$N2UaC#6;9k*Xj>nG?ze^grEGFkp9OH>Jj)2`Y5cs+cmlv>ZL$Gb1x!8 zc)`KQs}$C}RCeX{zeFV|b6qbhaBZU>aCkKiSbYJ_8UOl8Un`t?jHC`rR}i@xCKSTC za~5&|Q7}l#^MReEu@a!$y7mDLFTz&842Tnvc7u0&nbnT<4dyp9yUAB7Kv7~Yhm5C{ zZ9=P;fo!)_X2`eguM@6-X=t!n=d53=9R&@5f-a1CR!fx#7bsPrzeQBUxMLNX&|me^ zcu?f(smQd9!+(`W-thbJb;mo4%oNJhy=Zy?ty-Orrjvcuk2d@?whX?a9kF+oGkcz- z_#e|f)TFa>oquVl8jdctGFnO`_at``oPrnTkHJDUt+G$kNj|0Ob%p)*m)T*BSW&~R zV<(S4TS!~Wth3x7S=g4JE2=v@W$IzNp(1ZzYy0T)2U{-ZeqEz5!b(gu{3q^g{>wYk zLblHbWNz`mNw)ErdjpIMRkM_FLlfUIKG~bs@X58{Mm&1qwA~y?Z!SG?0nR73JK44P zgc|c=0(?YZ_$r)HN@Ir&3VT|=Ee416!0vWjz^%(t#D?ff76<=DWVO}Ro|D4|B_FRf z0nN?B+|&&#E|juQ!7;S0c-@pH{Ug#(Xp!Z3cxhoQJ7ApRzv5x~48Y01~DIqpqHW{%=m6rTgIXO(;kgMKb7^U$i(N`E(0VmpwV>r4Hn< zq)|o>gKp(atWTm{v|{MMT`Z!N;Fon@wLi?yH7m$;H zG>tU1*jylJ((SY(6yS0(6gP{0DQzV(G2)y1yM|fIsA#{)$>7iNBTsCC6vx@>$K&tIkgc4gj6u_hMVxE~8PJb{hMFybBfw zF6aQa6s<}7339+DU2FfgF7TAy8=hZNxZ-%|`Y zEKOO*qCzDkvH0syIMS~*Kf#~aiLhHvL;%_`2$}3R-l^tc>H{WX?Cf;g40Y7~LOP&A zj54s+1Awd_6+`(~R!Z^`33jetS!-};S$2Ml@MlDIq7N$|ky}8Y%~~r3W6LI!4)x?) zG{dYHAW1A0;9HP{t!%s$9(t;f2PfrG^Xs20s%kf;=cZOola+u#3ua&V zSY<3)_v$VvikJdJ@&bASw_wCy)eOiu?Zwx3^mx%b!%tSTt%+YtTFo3@1*W~FyZrr& zEJlj;3!85xB7$2V@Y#9?@(L(8%*_iqACV;%=Fq5hBAv|!BB3_wY6M7JiT`H6dpqrDOWwx=yK7BQkkhP_Eza^G03 zPIUgBZOd`ieh?&Sj$o0Sa82s`hTIy85CT zVa6=slA9mgcvf(eDXNXHNM_I?-t^LX<0d1We!OSDqE2oPYiZVb&r>~rlL1o7yW>cz z)31?>*5Lygy3hk&NUQ-Q6D$Y%(nWp$IsvcpXL9t2mwG{ z>XG{^Zxy-8yo(dL7i!_p4GPkr1;#N9qL3uJ(0@*OgZM9UC7AfL^%;~S1Cb76L^h}2 z3h{4lqBq6~`+JV>9*qM&u>?IOywTOj@tIy{1z#zudm#xc3e9&n2iu{aW3YF`{9w-= z61jAXY+EZ!E>^|TsMj~-D(Wplh8)oJG37jxXczrH^V+42m)pPX&C95RrO|%5(7*Jp zHVcfYB!76BDCy&>_is>7|B1~t!hQ4Hg_QarKp;y`+Sl5(2u%$^)i_nONylkQ|0Z&q zQpnTL@+I-;>eA?x6hO+_FD+le0|4Nrng(Y7V|!G^41bpFPr1EU;*c3KF$<0p>huyj z1N-uXx|mrHRS6Uc2nZFdl2S%0t_3WGqKVIS z<~=`|bS_yr1tnw@Mq8|K0fij42x9_OlA9F|w%8Bdv4|W1eiMD_d9J#uNdL=*;Sh}+ z53g2%a@1T(T&zX8?UQG#-yGEs2wo9dU{miriw$lNC^SwH~Zk zZ@1GevEF2*!Y+D6P`|i-^UGtKxz}NHvR_I->=n@0%5%mf%qM77rS;(?e-Er!UHnQ_d?#WQ}nm?POLg7#qF)`lnjuM z2B@enf&GWUyX~b)?IEhL36Z^aWMe}MuH4Lnl!elZ+ayBm*l-jyoD?7T{`v|~{to;t z=JcFB2$3X7O9qk$bGywgO`jUr2dhAO`@b2?G*dz!{{jt=3z1@mFci5T@XZgJY-B5t zPT_<4&X!*YIrl(7ZSuvyg^`3^${&t_M9K?dzsxPM^H?L^NY~uHWaamFO_v+GyxQ(W z+!FFDI&klFzN@t)Y#^*cUr>!7n9<8HPX|IO5sMpOBjED5IX^V%vGKpVsHbXgsVJ?R z;oXqut9wR9-L?&fk*8X@%=KMMfI(qesZOScRU1)aL^l=BnELCp86pRFyFCb!7We>| zzJe`g63~AI(%x4^4UH`COs|0?L)b1S$V(%GXM;3;Ub4dU6+9R#{)O37Kp(f_S>03g z*lM|_I4`U&G5A{iR*GUfSMyE&jo29*jm>;#;>5xML9@9$MC3pC9lXD?Y0s`W_{pE! z&%T=QG-i9qii?hihP9HbV2a7TaceOm7$}+>Kw0D;mU+2;2ny<2KZN&|X5e?a^O5_# z&u1}Rk(t*~=2W=z$+@?@M$6vL#msHIS!_9k%lxvxF!;pJS?(j$vRX3AWc#|2YDJ+x zlls8MII)wa9JDSg1M!(;t~{_PKcT0pU*zX%9XXzCrLNrQf!Y92 zD8T&aKz<$*dm2_LJP#BHux>L);x7T;;+u%n>wxNsw8GIFg(D0cqhb)XN2dPDx`wK&TZn%12lTPzW}ZW5QDqCllZ9yKv5O`?LWb<2d>J zdjC5^sk-dRR9~DM4`9nLrVY6Y`k#)y1|~SDt4B36czFsSi6oku-=W^=odObL6D7wW z8zdVByDOE{(?SL>1#C@p8+^5M54A4a+lq^b^Emt~D{iAbadWR}4@fYExOsGf)eA(6 z&vmIJO`?lxidTyi8n3HB)MlX1`v;kEdHc8R4@SUVHIAm9rS zJB&@WCcIH-?{3gR@70q)!)D~B<<U7bW4OwLj8yG)oZY()H#*TafuJn33s38fZS$ z)gVTan1A>V!@~!R3!0IMUfBa1h_Yg~AkNg0`X4-=Uj3!h{brxqO7iPfMv;|XG|CQ-$8I^BqF2 zp9j*ODQRu5x4=cLtoay`P2lNuljd5USmC4Y(Q@yH=Fd)lIO<8&=X0BFg8t4ol$wmB zNBx@3#nPC2-}~y;|7(lL%zUjq0f}Rwolh37MSAa5k{R)~xgs;)rxa0LdTTNy{=|5_ z+YaMpOly9e$%Ax=Hm0J`)Jp>)@8y(|(jg8__J{*8N=q{RW7QRCa{a!}wAr0Aq_8*Y z*SEf47r0jFz%6u^1=~VFAxLy18v*KdMPNGg3ffR4S6s*$B#H^+Fl8lOK)>ew$t8-S z;d9kG$$*^Be&Qx5Gf_OU*=3v(KIMBD#a(#I<EG_AtV;A7G6EgOa=GNz!rTy@vz|cFVhvz665HRl6a(3!qkYPGQ*) z9`=t(R($HNwu-$e#mg!en=1Zyuu;pjf2ju?X8LKndcaCuzY#3voI4>F1T*#BOeAmq z!ZXrpWcO}%B`%~I71}A=UfKMj42S*+zhoKrSz9Roo4<4~(iEd??J(xND0#VqAa|{q8~nvVz~3{#CNxag4U1W#^+45# zOYdu5n?QZwb=jkXC5T%}A^w0;4riP7Wj`m7G#OH4Mv(``;IyZ~bzc(~h=omfr8r%# z#ZHCF54IJtCxm0*60HkN+zMzV2m$GvZ*6{B>;MNluoL<92dIJE0CprBNVH-%+^RxF z`mRM;VJ_5o|Cnwz6gN5rG%pM%ZE>sRz19l$QS?;ew^<3qZto25&$u=`K>5nq-n04M zviTQP{vp^qs)-6)tg6G^4Q%xZPs$6rYH=g`%ab!$EY?HV3}ic=T&A)eQ8^hcftWM|U<^QukJNvGaZcq-3&4&Rwc(`0-zzRd7QrL%S(e}OO z&_zoEauqS-)DM@KT4f+u+uPxdt*u%EtqlzybY_4p2>!((pWjLuQ!9Aa0<0*EegG-o ze_FRWR5mKQY3jo*RcU`egW`0nbjVPU<>{_^bPwd0X$(Mue~L0xgOe~JVL?HVU*4VS zUz48-z-nT0lt(ExFHuBujpwc&0*PS_|Nal84VI=WUAT^Zqws3X#hj!;0^pfrL@`p2D=aFo=82n9TlL$IL;8jcU#xeMwD}cPKHg$9<+$Y z%1v!;4VWY}HT62GNBS8!LiJ0*Ytx2;q+(XWxLl1Uh#u$V@DVK-(_xHyPTqu zqfL~_lRc19r=5KT1_5}qnEqJI{OE`45yZ>slC1iGR3y!bm@q%kBNX=f0n>=kxKrcW&|J4|~kd8O!^~v*x-j&JT`Ys$0^^0>37Sc$s3$|GAJ~ z9?Gq%t4iMhZ{N#a^0^?+(mP3<*x?A6`F z6vJ*G&`}KtXr3$6>HpsMY&t(CBXhj9d3Gr#fsG~KQmKsNNL__Xa3?6W$}~%Syb)ZT!MhdS`3glOpOuH+1p_A+^I@%%L6?$I$57G2VO-4B1&e_~i-jPp zA-@!jYuH5iss_#@;9jI1m7zK(*$+@Aep?d>=$v343u3;q+EMqKl+O4B#;7yeE|LQa zjvZrskdPl3Voa)mM&;v3Ag89ftv-s`e7r_NA`pRMKeQdGTimV6rd+im*FZLNQFLAT zl5TN@PI}tO3r4I(%5(x^uOvKppe>Ze?1;PPpExgv{2c3a`nKQ_7Nc{BDV@cKH!3j7jr0wC{>I z?IVNF2)I_EXjFR;o3~mZT_YkhFq5r1jQwj>F-a6uejiyoQ2SbUIYMzlELdz2;Q;zZ zN_ry!h&e@^ykH?RCojZf4;-9*uFN|yQBHkrO19rnmBLGko!q?F`RI`<$o$ms@`mQH^|0_-|B-flp2Wgd$ht_1M?SYvLW8@(mWoC z%QceyS`;L2$w;QN6bxi8r$t>Mo(B}Db;x#NJmx3NCewugyUo|laj`5sXdVaClli0v zIXhevfV4^34)RAbnH@#`@61^>_|+UDT6f?@P(xO~F&q@Nev>&$&ESJ#q1pT)^3q!$ z4+q&oHToOO$wF}l?DPmXq2mzprY)^G!e|BTf0A(LdBdMPokQFfTofsNUW#zz?Ff&m zwE^#D4JNDY+>e$G3fTymULTX)Hg#FrhLPL2X3^oGa#A0Cbcc7&J&-q?U5 zISYMB?uRH-WTlVyOGS<=#s3A07$bWQUVZ+hERAxkyY->;q~$;6M(@t1RU0x_0`@7> z{*8S8awdQHTaNABD=k?fO_yX_leA&om}X?CuZjcafAdZ4!e*#S^f0tr*Iyj2;-pYz<<=yQG6kGCi z@VMO(mxagb{9!>ZdNwW{3HSBzgJaA8^YOyO@;(wFR{cDR8&R*3Ov};hT+zjcr%z@X zREZM2cHHS)%Ao7VK$f=}yOrG1Dv(lDwY_rudpJzI0C`!_8<$BpzJ`AANeHnzc6#_$ zr5@`x9V!N&?1Cl+gx4MNis2=+DEJvOHB+mhO&!OWpg1Rtv-5jR4Fj+|y0+$FeRvL# zCjKrswc;~=zXyPYV|wmIzT2Mo8;t4<;u6?!pou7FDBhLAiOUE%!YRGkNWp}nch#TV z)+cWre_wF9b)Th!@4lR=)J)00wYqQNM=Nml8iGyNWD_u%RZB4oAv&Fs(|Q&#SNr9Y zh&MEwrY+0Wcia8P>3MeUWI+MygP6^Kbj)jKus*A#UP7BCmtyMbI;k@15^68@oxGA` z_UqVZ0pmyl+H<+HvmK@3R_6@2=8~{O;w*}t7=vQwy(-#u0*Se==uo-c zbew(Lg? z3@KN!a$XXCV3L3qvC}<^{op~sK(U@T&1!LTHzJ=&W*M9biE<3`_AKY>w8TIc-=FV! z6Xq&VOSFF8@EQaDFMyjf4!u8@@e^WCs>~8`jJ0l<3>H})uZ@SI-&V(`4PqmIfC9{8 zY7NE^)+Em_0pCGRJaDOLp&l7q);S-IFiN!+BE9?rOf#+!`qK64ZX)3Df`cYz#PoR<=^$Mq0oqZk zp8ZK~PIP-kE!S_@Hv!V8AGRgwIWl6Kg6>h#jLa2QHb0N+EZxBx1!+$n>ujbDwzlTd z%M5J1z8bZ3@qkCVEASkExx^{@Z7$4v;=HYjmZGi(P4?TXr{}Q*k549WI`2z(x9h=a zHE#4*u$r=VE{j$hG=9=s-S93!J7McQ)pHJG;&4@~t@`=9sGucC-qZH%Xk4KEd&-zi>WDG`7|5)=BN&hjlGlKk1Hd#4U zK3K%>G9TkFTp{OxeR@YZd{Tvt$ga+r{gZO>Z$)o9#th|>O^;F|$+a1+9j>!3HZ0fW zH7_oKdcT53>v8)G!I>N+zylwjIRqnjdbiLSF7c+mFUPyHEq4%7lAh+r?f1H^HGd1f zFF}R9V)>NBGCa|Gy?`9~j|Q|#j4H7rVAF+=X8ppe?C;U|fgM}IPdJ$lM&c9M%?F+aZD3btr+MnnO zj!h|uuiAB!GBeU4eqJ_9GU==maaz;m@#oA4WF-|tl3w%T;> zG`-<)c`H7K?Ht7kU~(?m^T;T*Lpo5{YYa^Zv89>aepN|bddnCt?GhdrBTuz7OD%NX zPgMM~lE|0MCrzyc$d9jd?S(cw?5GfqSg=MV-^yPO=6>T|-c%$#{qy+yF+vJ~CB;RZ ze2y1dg6eVm_6=*<2Y=AOixN2OPAp+UoGO;jve_Xrpe561o8QN5P;op(NdbHJ6M+(U zl%2h32zwQEouFbhBgvWTR5G(K{gl4^#v7KDTA5@;b*6|}xr#<)n!7<&@QhnOK62vB zix1VDUhXTMZ)h=kor<0Ly(WyU%U76vawvTENBL>aOG?{dQ%+jh;U@Q-Ax&K_*P-XNO4cgC7!&yiTTjtt1-xvuKw5tvj4~2|)Y(gB(2Zq?y?StOgiNvX zcjej269ZYJI&2S-^*-%M6v+t*a-WI+ZAE5;DDuyaV|?k@ZE*T2>Or}8@4kApL z;U4c7$?xT7$*%v?nHPJVT3tt=!$0#yiMg9DFrwCy^ zmt0zHBw3kiUnkJ^4(bfg62WaRO0JOmb9P3x@-I;r+!5-mHVP_$uc+w933fkh>9Qk) zbY$8+Q-Y;BmLj-M^H0+xZzSJ7x5I39!qyMOurO~RzfDMS*HX!rOM3dJKkkRS zeBSKVnd+&#uKb(#(yLS2S#nbs91R1u%72q!X&i$5&!t|{x=iIf_i}2G{A-0!GJ)f` zk2?pXWV7lxDFU;}*W2HgzQDTR_CLx*3gh1%J6)0a7?HZ%S$9Qx=n(rW>cpYV*oseD zR;~1ZK!rE4mjBUqJ;412>sFZgk*;5hN|LF*o>HyGshWguc)$JkYw`D& zNT0_Co&<_f?-vr7(CP+{Kq8p{-(fF+y{7`N0U`}o!p3*x{G-++UPEUH7k0>mE(@6_ zDIL=d8tpl{n2J?v)la2H(A5YUJSeu0+N7~L;( zIs{7`0Xq`6s-_};dD2>1tLKf7PB&k1^2HDR_}sv$SE1FvtUtQRM@YHLf4-~WrBH}m zcO+PeWI`ujqZm#HL1R=f<_MVd#hnnbOY zXUMJhX^f#2*LCoU0~hTv$FquHzqHe75zq9!yG>Me@{TdavJOE&YHvnyLIiy*`;)wG zLk_9&gstkX>zZrTy|foo!Ri*)fyJn!+x7Gjflc53Gv?Py;p#;h?_4~j^0&Uz`q)=N z7z21l*kS829nSj(U3oN^$h-#uK8Ri&=x$%f4BCA;{pHKFo!A zq6Zi~lXH5OLm9}iX_|x)%)k-FV6sgwNPR$MT8M0; z0{E!CB*YtuthNOB1NtDLBYie0_R%#SVlHv>t5#+(2zf|HL@7;K@=6`4nxlqEQD17G zgR3*_0c3#FI1wn+0fus^m~bO|DzHG}n;#V^m_1Q_BwR65;DlK74TG%M(^{lTrGQ^_ zZ-JwK<&h_8Pk6u*tmxMzX0f0HL%v3(MS6{2(HR&I7WB)ws+!lDV=SRnLhqUzeprs0 zOe~NH9)7W!x|E_t!wUI#zRJBXgfe!e&mCq+txFTtPNttgc!-f5y+$qK2d4p$iTZ@l zaLH-^LVdb>m(#~Ve9O7Bk#S^$x27l5YgO+@Oh+WI8ktIb*=7iPYPAw96yI@9|cy|=>}ciGqo_=5VS1Coi-UBuIq~UEBMUJ zQLn82C$91f3%S&q;GZlox~eU7KE)msI4AQusxL9caO%8y1FuQ0+goET(s51O-z5r) z=v&k~Mgw#KpUeH^SAl10ipW6#d}QVcmT-j)LR|)tR|F7C5)*7t1)t;?QY@Z)h>0lAVaDV-%Z zw#Z$Ml4c&eX9Fg7v3frYK(xmbJ(B_Zh542y70@%Ya)lJ`bu*qsmfbDSAbPVk8`3bJ zRDg|GM#F$EX&m|YsLG5{k-{NA7)D+75w>mP-|9~-SC4xv%#{n4xYWYz-!w9RC<5>j z(Mjswm?BTy@A|@$#Hu*Cn4H!2R`#+_6O0~hC|hzc(ei;{a{7Ua3|cPqE z3WD7bIbG!R<4>W}D3I+%csWgtj_$mh>=ihS15WDY6Qpc2V4aWB>^4bTWsM}mHdi<{ zk5qD3gH!4Q?e}l!48Xe|ZmmL|JVB)1gM4OG9HQ*6NagGW9w-Y787Dk zHGeElsPNuK25UNV!{o;+BKGXaFffj8G7@m`O!dV(hrg9swGaB?7)i=I*4^Rp!+l6n zR|tLiEn3e}*P#sB|Dyj~?Ooon(Do0t2d$GIJ(^noL*?wqzJ)rrq00eD>k+8MHbRwK z^ELCGNWQNadS|;)Ebc;m0wc)?r-L)GS9el+6h$r|N;zT^?*&h?nwhks^GNo1!D#i{ zTO-G}&CluxAgq^j3%6Q=<{mC!i`(P$ytroGRXTM!{iG?-qx^SA={p1^42JNAm9Sib8vn+LqAxc`qVMh6JUF6&iI8Xgx{5cYs)%;+vY3Gp`e7+O$JeDXW-W5q zOD-?m2&;BI3OgCRT;VTqBAxR@qZ92pXu}TERE|;L3&G^J(7){=B4H|3if6r#EQ@oO zeVEw4+{y>1$H%iNxT041yQ?6mp(8u_^Gcu{{LcE}zaP~-GE4scuEjpAG3;-PsyF%x z$#R^-Y}x&<#hKH!t|Z3}*?I3O6)3uel9&>+5KzcJF}1wxURhVCUQtzbrcK2t!vx?ND;wAZyWtakL1 zW4b8ClFpRJoJJ;q1Is!{g080-B7U=3^><&^2(z5cRoq!xI>#Iu>Z!Oj>1J|bz=ucW;G!f*#yTjb;T=6a{D*9NHA$r+a=5*Fz z1ZjXlU}`%~-AZh!(I)9?2q+ z`y?wNTc^Z?$P&8XSk-Q>uN^BQrYn2`rX~+Abm4kR@?h^3S@!9cXE?(R2!y4A-U$IU z`C6B4wECyL`H+*=&7zV}@A2s3eu^n$-!QC|At&@j*g`dVY3E5^;|Z4!xqhoJtpTSk zi4aKY)t;}Xm6bNM(gc-+ho4YRJNjIw-3>R;MP-QS71B9y_4pA220dgtBj`K zh`&%jmBL6w0PJycwx8ej1{PZkyD=4}j_sTr=K2Nr-GvZvg`+92@>zJ>>WVy%T)Fk< z-ePk86@!XRg=l)bs67lFSY@;qd}iH5%Qwie7VCCxxiivP@d1^Mkct} zF_u$S#g%<{WDR)o$zZ}}2IQM-2?+_MCcgVT`tW(N<^8Tx4--6Og9maVo?`gvFP3En z%h_o%oWtG2hwD68DZb}Rf0Ib==kpC4OYMl(GIQbx`acM%{`;x-<|mx~ZRhs;rJiv+ zN1^5h16>WYL{WkWx6xoumI92;Grol0#KYr<0#UfRCKKxf$_9mRG0i{eKn)^{djcQ; z|AvZLWY>X~3_!luZ_(&LyOYV;%M zy)06QnvYT~R32#*pi2Kox8JRfaM?`X$rZLf?&-hcuq?m*JI|bwtGvcYpL;)2#Pge< z`!lsHC*O5J^Ck(E* z_GVH=Wj-F1-BOwnha*(TZAH+*;wZBHHlMQm?W)5R25vsU_U=Uw-*nL$e2fwq3BD98 z|GFxt1}^zwB((JE8| z0}!q9N4$VW|6aDTZcxsvp%!JRzXto-Apj#f5um^;NLYKuXa+TE`^`eSro)wsPE~ZV zv7Z|=x9$7HMdx~^m-MM*|Bnop)oj)T>*1~S>G@_?9ep^M{uWSjg93I}F8Tx)GX&iC zC7qCl9W<|(3@$>vQPYEk?&zNbEBVY+2iS6(q8MGyO2^0(iVjJMw}gs?zX+u>(2a-k z7x}E9y%zU_11GV!HnxWM`QiL;GNsJVCE!k`-Ra3{93Suy)p=sWh#u7Z7LQW>)buOy ztK{xSf8lxWZmKgl_7=UHnoU1Yru{P&t^qFozB;9F@u`6({QC4QtRwEGx}#9ZNQ1do zo3C_VJS??i{7MHmxK^Eonq&9OYX^ft6~JSi9eDVvgHA7T0_HGDr-tg@&IN$n6L`VTiEE!q6yK+cY zBh>T2#$VLvFvm}&#~a4G0Sur*VIxo19wYNhl(}JJ_e=dPZ2kAu?6eoB2+{P~BFc$C~X1^{|ex+_3HKffxL*E!-G^ zq!aU94W;%H^Cp%Qa_q1sR2{&Jb)$0iJ616kfq^B-3ypm(&~P%LdrfY`MQMJ>jA= zFF4!{k|^5kt6-2Q#>OF)u#b%SA=(^i{?-&kpu!cmEYAiTyFOYwm5%f#t5zH6jU75w zDs?Y$!YU@v{2uWwC3l#P?|(57PCKP`gDY5sRNJvddCWM2yh!EMa8YI`4h3iJ1B4yEX!ZTDN3}B5S2Y~=gUS!uK?HLhwxN%M5`@cwepBljqGv7fBH214 zLIWzrPh=8;NKUem1zd3?<1(ZJ+SEJ!S1Ww)vr*cqm0Qxqp#1cDQj4{ODMCFaOXnbv z-Mm~oNKkZbM%&jSY`q9MV8I#C|Ejh;^n#WqgyY*Z5mSTEmfl><(&K@!-^(zbLxoss z+E7BLBt(@}<`Mk_hnA0`Tm(^J;aVqMb~C9aBy8RtUA7yb4be#lUwk z(il1C*0!mR^<#ga^?%EaSv<9#<)!!gQM6%@vF&D~B!*_dJ=K%~e(%dyFqAifjz<~d zS|@IlP4|5%5f}Z}#n0*kwQp?JRBFIrMSL*lSMw*>zU1P?7X^np@ajk4Hhp5~kUC-! zc5P16D7d8y^i9o6csRMAlsr>k<{MEI1M4$Rb*wnmI(tnhw~Ta>+#av?MY*DO-xFfU z#t{BRfhjcx@lA48I!k>*vmqMxHDSeBqsIWuWt^8t>l~dHTqR7D&pUNCY~JKaC)M)4p1p&-<@5u3#K~bS$+ZBvY_nTxs*X`dhv37&b$*E z!Ij_Q5KCiHz;h~cI=7&((KwvxkpV)?%U68-c}3A>(_i}#?9%hVUd(C2@u(X9sZ?s% zG$3=X!={$cwaF}5as%!Z7OW1FKC1H8 zB9da7Sj=r~b~X;~Qfwa_2!-1d)yljcwkX3Cg^(Duf)&| z!*WtgneC-C=yvC?%4KFz?q(${KA^Ys{_6V)|FJi-1N=K{TCqXrnr;P|gi)@1Gzti5wS2?Gy`bM($RRJaBabU!oz-;ri4SO1B#aduFsD$xln`OLI$epbNDwFg}4<*W? zyYQEJ0qk{3AVBq3ZX31}76;WnymkIdLa2Dv&83rwQRs-#`*GW-+|a(rpb+-;P#a3; zbfiS*GOY$rfELlk4Lzy6x@8q~LIQApnM`n~H+Vbs>h#9aKf9aq#L*p#8>EW??Iofj z6tu?ng;U97i}ti(C#ZRC@Pv+yZkpMc!o(D18Pk*h9SkO$91RI|5@@;{SAWCWFA55A zDpC~f!d)cQl2ug*@l29QFDSsj|zLhe$?%1>H+h5n9*{z*+O>BD|MMXi*EGX+t+FwGOA@U zz@#Xv^b&IQgEmy!GeHc(c*dj_42jQXUz6yZ>BWI+Ot$7HsjyLy(=WcKgy0-I8{({w zjRb5Jk22o5-v1~OwKw4OY^WGYP3em(ZYv1-J%DTz`VWg&lfMtHS+_7E5gsl6& z#nRSEZjA7@geZ$^M2-izDY#~lbjcWy5Xl%CywqY3V0@5QSAHJ9MYSHG+ZUU<2=1!S}J(=LE{?s-TODR;U8=Z;>D2+F8brdNh|&H z@l{3CN;Q?@Mwc%^%lC?21n<_sj+fCJ>~Vd@fuK-+=E`^cw!rnEpxt*cw8sY#_P9K4 zFC=mwor{#fxK9b0@x2|nOx6t3~(a;5MW|36^a|O zV*~yGHeY2l5WU|a8-I=DXSr(Ew)-SlOMhs@tcrHwGJ-o`IetcypmnS;GNaa+T z6>`_?n(!qP;RhXLX^J(V=oPGFY*~A|*=#;Du1c7zIiIuOj0NucFj3fpe@zQOX34P7d&6!YeZvbt}=zbk-w_1P@nT3RpZay0dtoJ7I8ZLUe zDK&&a)z?y{q*f`%&}-1~lYVwPJx|Lr50}=?9e~+4CT-} z^S{LBFUq)dlhY-!K8`u%edfNu2fgwWPF?zTtF-%A)Y=uWfL~!vAV2H4CN+kpE$4sV zkuMN=c4bi6?l&bE3ZaBTDj*t&hX#?z55kZS6hHT%J7peo%~C7RH{LjP?n%rX#rrC- znI}I<@-#{If&luyimO5eXj=`6nLAAv5HAX8?m+HZ*I6U<_1`WmF3xP5a}}^_8=Ti6 z=QAa;6fvp};PVr6_a3112CEldK(?%me$%x7EvS$Lg%Nevs?%0u)zT_mJoy8Odh3-$ z=5deL>4tjqvb5B+4x^c8QSy;)57y4)4(B!MAbf2Dd6slub3YHl@Wl_&bB=Hul=)*4 z#SNZ}JrS+0Au(Z#OCHPkY0E#xe2^o8g)m;(r&tlSi6$>2H_i$~ELjBZXP_66BL6J178A#IRB z(RORy+QqVOD|Dz^d8q;@leKu8{$kkZm*EO19!E<5|3!kYc?WACmim2byuEAWWDHeU zey6qkiWIO{a$Q?&iW-j|lbPo@o-|{G>(3B}pgY!n!rXV|VXwc5F@?hnZ=#G-RUvYEIJJ)R3{Wmv+IidBs*&BaoYypotuQXe};Ow*WnXKT5wA{k; z!bzU!UqZNxab_zfj%+4Gqc`Z3y>Y4xOnUN-~0M|6G zgP}deTM(4~WLBlOnTMF_*e_oRE49Q`#%mo#ckD+($c|##XU#p+d^^sz&)!~}0!EU< z&8My)T(-W_+4KI-H~h`yb~0qgNJe7-cQ!7cRlc0nRmM_r4u`PbyR#~`QYn815*kWn zWXP;s@n8+)9^N2CJ2^-Y-uzxSLSX|M)ev2l*(fG=RP=OfN%Qasv(M@=zc@Y|^^13A zyQQgUEZx??`G3!i;W|4vROFjht}3CcT%_l~t4VyrExiJ~BA`ZaJlaehQldL>Z8&LC zv1;CXAayRytkWWy_4$TTtNQjw;een?tD94tOA}`s;%&;VbdCHTu+J9Zy9^FrRTqzU zfrg|D-unQRHO$O*?nd3^6{>f%R0H!wLmNghhj|T;6CBTMK}_`R=puLhtG*VcncCRk zZ=-gW?6f8vxqC=@7tcUdSga0a$1)1&jJlQ<-nv=AI&yNLW|70mLb0;A(B z6%xg8)>+SrqfJB0WTjp9Rc`k$dqvqI;_3Vj=%hY|Z z@1D9E@ofJ4-|hv2c)n}B7dX}(J@qUKP*5T3Qjpe;n6j^T5)SD$(2ob6&b4iks|Dkq z@I%|c98S|P{lCA!C2qw^+YnJ3*j~dDYV+Kvy4u zsLXqjTeZDCP3zsGTUYWXC*}vsX#lPL5#n_iRK)ek&ZH9_oP|K-bHb?987;r2XM1aV zi)a?qlB$U|uBnT}%=_$W1Epl)-p4@}neI7b)M`h&A3{{uK};~#MxqdXTLcK%>GH=g z;JG^*X(r3u{J&3JbJ{}-_(A}kviYTWr(tNS* zGKQd!!rel@l@s=!y4RwwQ`ZHY!1KFQ6F#ueXH%#bKj zt0?f|GS$s4qEsK>W$4bF^!ugwEHH1AzA92Z(ow1SDCz@DPjJfqQV|{aI6ay37%&@Z zkiFnotI0GmQ$ZwM1Z6o_NEN3A{FccvIPl5lg(Gq$AnRn_;(Bf%ePp`18C+NIBxjnh z_y8^y=-A9jo^XP(BeTyk29_FJB+5GTrUbuU%9e|abw1;`f9B+bqY~_BFpl(wwV2%= z{CrK5h*1sWWOdC0PC#X9P?Z^e%?qjP?)`!!C+yI0tR__I##Df&zm21tu-}2MX1;tN z18FAeQ(juXkf8Nu;MCG@@pGbK{*j;sZExxBwt~jC-JaxP=_!=-!`JG19jf*yCmH6$fw5rpb6&ZKsdg3<46}ope}|0%2kQr)-6v?9nMX>slwK26rAKQJ0N2{pIPRu`k=8Uq zw}4uA8Lut5(&{d-h9T$u7oPHZ2|7AB+4|JAqFkQn6HyF-Z~kPP;nkj3R%08Imh``|C^5iy8|FMLw!Df@WH7MDz9E#vvy0>L=*7TwT<8}I+gCbF+Mb6>5 zCNmJUh`&pS+6?F-ZYeD()Pk%L6^9DGjwB~gtS^VXM#(jK$I*{_=rlvTW}d3Ky63m8 z@~i!ICNq(#A z50{?g&4NaOprzZ9qWQxj^WG}&!ItHfzJ$~pvPkC8B#IAdngPWZGzQrc3jkBQ*?>ef zvxa+Xj5tqMfS;}itHm|AYg2h49@Qg=Gr2DjnIJJeZ8v+1{uDO;On8EE0bLg)S@Mkr zZpwC98wO8DL`y#m!N$b>G6apHIQOd+_2tKAt!yR=b$J;R3OavD5UlhsLn47IDt|TB zEC{&K!b$Rj^WhjZ6*8c$cy(gwnNbW0bu78rr*h6+G1Pm)|J9w2kB_k{VXl!c0e4JC zeK~6Y-jqIo9zNj}+%y;n&Y^xF>aOCwmZVN*k9UTr6V)5&nz1OAL$FcQ+@7=IakdCW zW>gdp#OUZS418H&g8$tnaIuP++UHX-uoPlI$5EU|CTH5B0}RZXHEzqVJo|Iu)aK@}OHcLow5Uj{d{WhdBy@ z0^p&#k?Xof*4|B&7(kymnb;nDg0IobH)+hETjr%Ob9#;D zb$tiU?OnGz{+;Av0XcRU=fsTpmLpeXZ&&KIDvTa(o$0}{MH*gMq zzZaVN^@juU@NPIs*^-u}zU1uoVpqz3<}xd>CbTmA&atj#luwiFr-_&HSD906F4bjC zs%ZsEoG6G=qrYq8jQ5P_F65Mytor}G@c{p+zzmm}j=>&L1cs~eI^`*;g=aCtw&jLR z$K+yVo&7yl`3EBHF;f*-H#@CUa%7p3*@Oa+((Os}4b-IXnB_KQduU@sH& zE2;KAsnyZvnX5YX;qfRiew~ZvB-yU!?^^J|MNJozo;u!YpwS@4#9UY2rc$>`S1HV1 zFKg%F(d)AX!fOjVg#%Bbw)x+IW8ua+uk>koT;Ibn!2t^>1reydzUIPe3w80>nfX)0 z)9Bx=k2;P5UH4~0iqV&Bql>OFGTw;ut$G@*^g-izuDq#Ei<0|aVXmZbaZpVd9K$xMlW zzl9byX)OLcr9buGp%ISNqy5`}qG4WdVX=zrnt}8cLnFD3C7S(lxZQTT%)8cBtx~Rk zw0j2wk8MELJcmi`S9D%dnbNGxI(t*pC6;mZM`L0-Zmeq=XaWBEFr;ap7;0>fFsJiZ z$ihxc1Kaqz_tB}i+Q=$U1sW^}Z#8`Kj=&Z{3+4u^Ip@7Ut}UI&DZ)8P6KWuVXPLY`Tr z2sHVb!2R`x7f4YIeIz33X}n>Ga8kp_s6=GOw!I>J&*C#e>XhRlZgVJ!hW~35s3u z`0;(Oa8f*3`K*|Vj?{kfSr87C=Ih$6S-M#9f8Da?pL0g;8oIz7;P3e{mANd3TREV4 z162=vEW_aE62_1S*=gE)&&k+nAkOi9E^NfPSBItn`;)ijYLsm2G@l1KPS@;%jm7+Y zi2;kiGlu)OrCU-`Tti6U!9(fb2Qm%fIBZQ0Rc~VP)O=I}5KA<=-9WSk=z(H3I}>Lp z$)E^pb$#7)bIDT10q0V-qR0LkSFo!ck$Vr}T%>(tYGI*lCq}p|QMeB+l$WcFi|aHF3mhLUp1gbeHVbNV1WeTi}>qd?$DO$rZ`JZXtMR3+53 zqCIK*&@fdTx^p80Vy_KQ#{kiy&Xouj9s!Ny$48tw@k4d>!5`A=TCU2>(%irFS@^yx z5BMLvZj5Z$(uIpYZwkr=cv9<$$pD+Jl9c`wbPl4KbVpF#OY{~C1~=ao6ZVc6n!?-i zTH#~)Z@U)8DR^G-H>+Fvr5{-DzQ+}r!l0n=blY~{$fp0i%j){L5SH;pAxAiQCB1fk z{9)metp1LeYW8@ptp3)UMo=JKSz|Ot@pkM4_*SZMP=_7pJ$>{^tLYmU%h3)vomuh` z#6O9Nc9$^Y!Tr%x7bVFkmBGnb>fJQogoELQyR3V#5l7h)092~^sq9Rpj@*c+Yu-F0 zvvTgSl0XEeZG@%1tX9G1^LI~<=%9<<7t$a7s0MAJk6gOK)#S&({j-mUAM3il@Kf=0BObDj_S zI+^$#J$;1UH6Zj{BW?2mz*q~YZm;ecnwyzD)}N@VtxenEuvlwPf{|Erv&T_as{qaV zPYd*5Zf-7ZVq)+^fR7K_Z{SNsMQYh#+uFu_RSPtRk-!i8?vuRf zMd~sAqex*dFba#t(Pz$}LWFnBc+P7>u7))nz?Z`j8bFDL=fDFW;u}`E;M7=zdUl%# zfVju3@9yGdCYLMxcI3O$%ILq)tr2cL&Rk}BJZT{Tc@hD9IAjjM#MGngX-c&s z5UzaB?0gP^u?9Ulo0JOs2C} 0: &"paragraph1_{i + 1}" else: "paragraph1" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -259,7 +259,7 @@ block: ) let name = if i > 0: &"paragraph1_nokern_{i + 1}" else: "paragraph1_nokern" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/Ubuntu-Regular_1.ttf") @@ -276,7 +276,7 @@ block: ) let name = if i > 0: &"paragraph2_{i + 1}" else: "paragraph2" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/Ubuntu-Regular_1.ttf") @@ -294,7 +294,7 @@ block: ) let name = if i > 0: &"paragraph2_nokern_{i + 1}" else: "paragraph2_nokern" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/IBMPlexSans-Regular_2.ttf") @@ -311,7 +311,7 @@ block: ) let name = if i > 0: &"paragraph3_{i + 1}" else: "paragraph3" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/IBMPlexSans-Regular_2.ttf") @@ -329,7 +329,7 @@ block: ) let name = if i > 0: &"paragraph3_nokern_{i + 1}" else: "paragraph3_nokern" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/NotoSans-Regular_4.ttf") @@ -346,7 +346,7 @@ block: ) let name = if i > 0: &"paragraph4_{i + 1}" else: "paragraph4" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/NotoSans-Regular_4.ttf") @@ -364,7 +364,7 @@ block: ) let name = if i > 0: &"paragraph4_nokern_{i + 1}" else: "paragraph4_nokern" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/Pacifico-Regular_4.ttf") @@ -381,7 +381,7 @@ block: ) let name = if i > 0: &"paragraph5_{i + 1}" else: "paragraph5" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/Pacifico-Regular_4.ttf") @@ -399,7 +399,7 @@ block: ) let name = if i > 0: &"paragraph5_nokern_{i + 1}" else: "paragraph5_nokern" - image.diffVs(&"tests/fonts/masters/{name}.png") + image.xray(&"tests/fonts/masters/{name}.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -413,7 +413,7 @@ block: bounds = image.wh ) - image.diffVs("tests/fonts/masters/huge1.png") + image.xray("tests/fonts/masters/huge1.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -428,7 +428,7 @@ block: bounds = image.wh ) - image.diffVs("tests/fonts/masters/huge1_nokern.png") + image.xray("tests/fonts/masters/huge1_nokern.png") block: var font = readFont("tests/fonts/Ubuntu-Regular_1.ttf") @@ -442,7 +442,7 @@ block: bounds = image.wh ) - image.diffVs("tests/fonts/masters/huge2.png") + image.xray("tests/fonts/masters/huge2.png") block: var font = readFont("tests/fonts/Ubuntu-Regular_1.ttf") @@ -457,7 +457,7 @@ block: bounds = image.wh ) - image.diffVs("tests/fonts/masters/huge2_nokern.png") + image.xray("tests/fonts/masters/huge2_nokern.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -471,7 +471,7 @@ block: bounds = image.wh ) - image.diffVs("tests/fonts/masters/huge3.png") + image.xray("tests/fonts/masters/huge3.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -486,7 +486,7 @@ block: bounds = image.wh ) - image.diffVs("tests/fonts/masters/huge3_nokern.png") + image.xray("tests/fonts/masters/huge3_nokern.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -500,7 +500,7 @@ block: bounds = image.wh ) - image.diffVs("tests/fonts/masters/pairs1.png") + image.xray("tests/fonts/masters/pairs1.png") block: var font = readFont("tests/fonts/Ubuntu-Regular_1.ttf") @@ -514,7 +514,7 @@ block: bounds = image.wh ) - image.diffVs("tests/fonts/masters/pairs2.png") + image.xray("tests/fonts/masters/pairs2.png") block: var font = readFont("tests/fonts/IBMPlexSans-Regular_2.ttf") @@ -528,7 +528,7 @@ block: bounds = image.wh ) - image.diffVs("tests/fonts/masters/pairs3.png") + image.xray("tests/fonts/masters/pairs3.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -548,7 +548,7 @@ Seventh line""", bounds = image.wh ) - image.diffVs("tests/fonts/masters/lines1.png") + image.xray("tests/fonts/masters/lines1.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -567,7 +567,7 @@ Fifth line""", bounds = image.wh ) - image.diffVs("tests/fonts/masters/lines2.png") + image.xray("tests/fonts/masters/lines2.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -648,7 +648,7 @@ block: vAlign = BottomAlign ) - image.diffVs("tests/fonts/masters/alignments.png") + image.xray("tests/fonts/masters/alignments.png") block: var font = readFont("tests/fonts/IBMPlexSans-Regular_2.ttf") @@ -667,7 +667,7 @@ block: image.fill(rgba(255, 255, 255, 255)) image.fillText(font, "Text") - image.diffVs("tests/fonts/masters/image_paint_fill.png") + image.xray("tests/fonts/masters/image_paint_fill.png") block: var font1 = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -692,14 +692,14 @@ block: image.fillText(arrangement) - image.diffVs("tests/fonts/masters/spans1.png") + image.xray("tests/fonts/masters/spans1.png") let ctx = newContext(image) ctx.fillStyle = rgba(127, 127, 127, 127) for i, rect in arrangement.selectionRects: ctx.fillRect(rect) - image.diffVs("tests/fonts/masters/selection_rects1.png") + image.xray("tests/fonts/masters/selection_rects1.png") block: var font1 = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -724,14 +724,14 @@ block: image.fillText(arrangement) - image.diffVs("tests/fonts/masters/spans2.png") + image.xray("tests/fonts/masters/spans2.png") let ctx = newContext(image) ctx.fillStyle = rgba(127, 127, 127, 127) for i, rect in arrangement.selectionRects: ctx.fillRect(rect) - image.diffVs("tests/fonts/masters/selection_rects2.png") + image.xray("tests/fonts/masters/selection_rects2.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -751,7 +751,7 @@ block: for i, rect in arrangement.selectionRects: ctx.fillRect(rect) - image.diffVs("tests/fonts/masters/selection_rects3.png") + image.xray("tests/fonts/masters/selection_rects3.png") block: let @@ -813,7 +813,7 @@ block: image.fillText(arrangement) - image.diffVs("tests/fonts/masters/spans4.png") + image.xray("tests/fonts/masters/spans4.png") block: let ubuntu = readTypeface("tests/fonts/Ubuntu-Regular_1.ttf") @@ -847,7 +847,7 @@ block: image.fillText(arrangement, translate(vec2(20, 20))) - image.diffVs("tests/fonts/masters/spans5.png") + image.xray("tests/fonts/masters/spans5.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -862,7 +862,7 @@ block: bounds = vec2(200, 0) ) - image.diffVs("tests/fonts/masters/underline1.png") + image.xray("tests/fonts/masters/underline1.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -878,7 +878,7 @@ block: bounds = vec2(200, 0) ) - image.diffVs("tests/fonts/masters/underline2.png") + image.xray("tests/fonts/masters/underline2.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -893,7 +893,7 @@ block: bounds = vec2(200, 0) ) - image.diffVs("tests/fonts/masters/underline3.png") + image.xray("tests/fonts/masters/underline3.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -908,7 +908,7 @@ block: bounds = vec2(200, 0) ) - image.diffVs("tests/fonts/masters/strikethrough1.png") + image.xray("tests/fonts/masters/strikethrough1.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -924,7 +924,7 @@ block: bounds = vec2(200, 0) ) - image.diffVs("tests/fonts/masters/strikethrough2.png") + image.xray("tests/fonts/masters/strikethrough2.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -939,7 +939,7 @@ block: bounds = vec2(200, 0) ) - image.diffVs("tests/fonts/masters/strikethrough3.png") + image.xray("tests/fonts/masters/strikethrough3.png") block: let ubuntu = readTypeface("tests/fonts/Ubuntu-Regular_1.ttf") @@ -986,7 +986,7 @@ block: image.fillText(arrangement, translate(vec2(20, 20))) - image.diffVs("tests/fonts/masters/spans6.png") + image.xray("tests/fonts/masters/spans6.png") block: @@ -1023,7 +1023,7 @@ block: # Enable this to show how text is drawing directly # image.fillText(arrangement, translate(vec2(40, 170))) - image.diffVs("tests/fonts/masters/spans7.png") + image.xray("tests/fonts/masters/spans7.png") block: var font = readFont("tests/fonts/Roboto-Regular_1.ttf") @@ -1043,7 +1043,7 @@ block: bounds = vec2(200, 0) ) - image.diffVs("tests/fonts/masters/paints1.png") + image.xray("tests/fonts/masters/paints1.png") block: var typeface = readTypeface("tests/fonts/Roboto-Regular_1.ttf") @@ -1056,7 +1056,7 @@ block: image.fill(rgba(255, 255, 255, 255)) image.fillText(font, "Grumpy wizards make toxic brew for the evil Queen and Jack.") - image.diffVs("tests/fonts/masters/cff.png") + image.xray("tests/fonts/masters/cff.png") block: var font = readFont("tests/fonts/NotoSansJP-Regular.ttf") @@ -1065,7 +1065,7 @@ block: image.fill(rgba(255, 255, 255, 255)) image.fillText(font, "仰コソ会票カク帰了ノ終準港みせス議徳モチタ提請ルまつ力路お") - image.diffVs("tests/fonts/masters/cff_jp.png") + image.xray("tests/fonts/masters/cff_jp.png") block: var font = readFont("tests/fonts/Inter-Regular.ttf") @@ -1075,7 +1075,7 @@ block: image.fill(rgba(255, 255, 255, 255)) image.fillText(font, "Grumpy wizards make toxic brew for the evil Queen and Jack.") - image.diffVs("tests/fonts/masters/cff_underline.png") + image.xray("tests/fonts/masters/cff_underline.png") block: var font = readFont("tests/fonts/Inter-Regular.ttf") @@ -1085,7 +1085,7 @@ block: image.fill(rgba(255, 255, 255, 255)) image.fillText(font, "Grumpy wizards make toxic brew for the evil Queen and Jack.") - image.diffVs("tests/fonts/masters/cff_strikethrough.png") + image.xray("tests/fonts/masters/cff_strikethrough.png") block: var font = readFont("tests/fonts/Inter-Regular.ttf") @@ -1096,7 +1096,7 @@ block: image.fill(rgba(255, 255, 255, 255)) image.fillText(font, "Grumpy ウィザード make 有毒な醸造 for the 悪い女王 and Jack.") - image.diffVs("tests/fonts/masters/fallback.png") + image.xray("tests/fonts/masters/fallback.png") block: let @@ -1119,7 +1119,7 @@ block: image.fill(rgba(255, 255, 255, 255)) image.fillText(font, "Grumpy ウィザード make 有毒な醸造 for the 悪い女王 and Jack.") - image.diffVs("tests/fonts/masters/fallback2.png") + image.xray("tests/fonts/masters/fallback2.png") block: var font = readFont("tests/fonts/Inter-Regular.ttf") @@ -1129,7 +1129,7 @@ block: image.fill(rgba(255, 255, 255, 255)) image.fillText(font, "This[]Advance!") - image.diffVs("tests/fonts/masters/tofu_advance.png") + image.xray("tests/fonts/masters/tofu_advance.png") block: let image = newImage(200, 200) @@ -1187,7 +1187,7 @@ block: transform = translate(vec2(0, 60)) ) - image.diffVs("tests/fonts/masters/customlineheight.png") + image.xray("tests/fonts/masters/customlineheight.png") block: var font = readTypefaces("tests/fonts/PTSans.ttc")[0].newFont diff --git a/tests/test_gif.nim b/tests/test_gif.nim index 65d9d3c..85a1b24 100644 --- a/tests/test_gif.nim +++ b/tests/test_gif.nim @@ -1,11 +1,11 @@ -import pixie, pixie/fileformats/gif, utils +import pixie, pixie/fileformats/gif, xrays block: let path = "tests/fileformats/gif/3x5.gif" image = readImage(path) dimensions = decodeGifDimensions(readFile(path)) - image.diffVs("tests/fileformats/gif/3x5.png") + image.xray("tests/fileformats/gif/3x5.png") doAssert image.width == dimensions.width doAssert image.height == dimensions.height @@ -14,7 +14,7 @@ block: path = "tests/fileformats/gif/audrey.gif" image = readImage(path) dimensions = decodeGifDimensions(readFile(path)) - image.diffVs("tests/fileformats/gif/audrey.png") + image.xray("tests/fileformats/gif/audrey.png") doAssert image.width == dimensions.width doAssert image.height == dimensions.height @@ -23,7 +23,7 @@ block: path = "tests/fileformats/gif/sunflower.gif" image = readImage(path) dimensions = decodeGifDimensions(readFile(path)) - image.diffVs("tests/fileformats/gif/sunflower.png") + image.xray("tests/fileformats/gif/sunflower.png") doAssert image.width == dimensions.width doAssert image.height == dimensions.height @@ -32,13 +32,13 @@ block: path = "tests/fileformats/gif/sunflower.gif" image = readImage(path) dimensions = decodeGifDimensions(readFile(path)) - image.diffVs("tests/fileformats/gif/sunflower.png") + image.xray("tests/fileformats/gif/sunflower.png") doAssert image.width == dimensions.width doAssert image.height == dimensions.height block: let img4 = readImage("tests/fileformats/gif/newtons_cradle.gif") - img4.diffVs("tests/fileformats/gif/newtons_cradle.png") + img4.xray("tests/fileformats/gif/newtons_cradle.png") let animatedGif = decodeGif(readFile("tests/fileformats/gif/newtons_cradle.gif")) diff --git a/tests/test_images.nim b/tests/test_images.nim index b74e32d..9351af0 100644 --- a/tests/test_images.nim +++ b/tests/test_images.nim @@ -1,4 +1,4 @@ -import chroma, pixie, pixie/internal, vmath, utils +import chroma, pixie, pixie/internal, vmath, xrays block: let image = newImage(10, 10) @@ -45,77 +45,77 @@ block: a.draw(b) - a.diffVs("tests/images/flipped1.png") + a.xray("tests/images/flipped1.png") a.flipVertical() - a.diffVs("tests/images/flipped2.png") + a.xray("tests/images/flipped2.png") a.flipHorizontal() - a.diffVs("tests/images/flipped3.png") + a.xray("tests/images/flipped3.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(-10, 0, 20, 20) - b.diffVs("tests/images/superimage1.png") + b.xray("tests/images/superimage1.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(-10, -10, 20, 20) - b.diffVs("tests/images/superimage2.png") + b.xray("tests/images/superimage2.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(90, 0, 120, 120) - b.diffVs("tests/images/superimage3.png") + b.xray("tests/images/superimage3.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(90, 90, 120, 120) - b.diffVs("tests/images/superimage4.png") + b.xray("tests/images/superimage4.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(-10, -10, 120, 120) - b.diffVs("tests/images/superimage5.png") + b.xray("tests/images/superimage5.png") block: let a = readImage("tests/images/flipped1.png") b = a.superImage(45, 45, 20, 20) - b.diffVs("tests/images/superimage6.png") + b.xray("tests/images/superimage6.png") block: let a = readImage("tests/images/flipped1.png") b = a.minifyBy2() - b.diffVs("tests/images/minifiedBy2.png") + b.xray("tests/images/minifiedBy2.png") block: let a = readImage("tests/images/minifiedBy2.png") b = a.magnifyBy2() - b.diffVs("tests/images/magnifiedBy2.png") + b.xray("tests/images/magnifiedBy2.png") block: let a = readImage("tests/images/flipped1.png") b = a.minifyBy2(2) - b.diffVs("tests/images/minifiedBy4.png") + b.xray("tests/images/minifiedBy4.png") block: let a = readImage("tests/images/minifiedBy4.png") b = a.magnifyBy2(2) - b.diffVs("tests/images/magnifiedBy4.png") + b.xray("tests/images/magnifiedBy4.png") block: let a = readImage("tests/fileformats/png/mandrill.png") b = a.minifyBy2() - b.diffVs("tests/images/minifiedMandrill.png") + b.xray("tests/images/minifiedMandrill.png") block: let a = newImage(100, 100) @@ -129,7 +129,7 @@ block: ctx.image.fill(rgba(0, 0, 0, 255)) ctx.fillRect(rect(25, 25, 50, 50), ) ctx.image.blur(20) - ctx.image.diffVs("tests/images/imageblur20.png") + ctx.image.xray("tests/images/imageblur20.png") block: let ctx = newContext(100, 100) @@ -137,7 +137,7 @@ block: ctx.image.fill(rgba(0, 0, 0, 255)) ctx.fillRect(rect(25, 25, 50, 50)) ctx.image.blur(20, rgba(0, 0, 0, 255)) - ctx.image.diffVs("tests/images/imageblur20oob.png") + ctx.image.xray("tests/images/imageblur20oob.png") block: # Test conversion between image and mask let @@ -163,7 +163,7 @@ block: let image = newImage(100, 100) image.fillPath(p, rgba(255, 0, 0, 255)) - newImage(newMask(image)).diffVs("tests/images/mask2image.png") + newImage(newMask(image)).xray("tests/images/mask2image.png") block: let image = newImage(100, 100) diff --git a/tests/test_images_draw.nim b/tests/test_images_draw.nim index 6380107..c2d99f1 100644 --- a/tests/test_images_draw.nim +++ b/tests/test_images_draw.nim @@ -1,4 +1,4 @@ -import pixie, strformat, utils +import pixie, strformat, xrays block: let @@ -8,7 +8,7 @@ block: b.fill(rgba(0, 255, 0, 255)) a.draw(b, translate(vec2(250, 250))) - a.diffVs("tests/images/rotate0.png") + a.xray("tests/images/rotate0.png") block: let @@ -18,7 +18,7 @@ block: b.fill(rgba(0, 255, 0, 255)) a.draw(b, translate(vec2(250, 250)) * rotate(90 * PI.float32 / 180)) - a.diffVs("tests/images/rotate90.png") + a.xray("tests/images/rotate90.png") block: let @@ -28,7 +28,7 @@ block: b.fill(rgba(0, 255, 0, 255)) a.draw(b, translate(vec2(250, 250)) * rotate(180 * PI.float32 / 180)) - a.diffVs("tests/images/rotate180.png") + a.xray("tests/images/rotate180.png") block: let @@ -38,7 +38,7 @@ block: b.fill(rgba(0, 255, 0, 255)) a.draw(b, translate(vec2(250, 250)) * rotate(270 * PI.float32 / 180)) - a.diffVs("tests/images/rotate270.png") + a.xray("tests/images/rotate270.png") block: let @@ -48,14 +48,14 @@ block: b.fill(rgba(0, 255, 0, 255)) a.draw(b, translate(vec2(250, 250)) * rotate(360 * PI.float32 / 180)) - a.diffVs("tests/images/rotate360.png") + a.xray("tests/images/rotate360.png") block: let ctx = newContext(100, 100) ctx.fillStyle = rgba(255, 255, 0, 255) ctx.image.fill(rgba(0, 255, 255, 255)) ctx.fillRect(rect(vec2(10, 10), vec2(30, 30))) - ctx.image.diffVs("tests/images/drawRect.png") + ctx.image.xray("tests/images/drawRect.png") block: let ctx = newContext(100, 100) @@ -63,14 +63,14 @@ block: ctx.lineWidth = 10 ctx.image.fill(rgba(0, 255, 255, 255)) ctx.strokeRect(rect(vec2(10, 10), vec2(30, 30))) - ctx.image.diffVs("tests/images/strokeRect.png") + ctx.image.xray("tests/images/strokeRect.png") block: let ctx = newContext(100, 100) ctx.fillStyle = rgba(255, 255, 0, 255) ctx.image.fill(rgba(0, 255, 255, 255)) ctx.fillRoundedRect(rect(vec2(10, 10), vec2(30, 30)), 10) - ctx.image.diffVs("tests/images/drawRoundedRect.png") + ctx.image.xray("tests/images/drawRoundedRect.png") block: let ctx = newContext(100, 100) @@ -78,7 +78,7 @@ block: ctx.lineWidth = 10 ctx.image.fill(rgba(0, 255, 255, 255)) ctx.strokeRoundedRect(rect(vec2(10, 10), vec2(30, 30)), 10) - ctx.image.diffVs("tests/images/strokeRoundedRect.png") + ctx.image.xray("tests/images/strokeRoundedRect.png") block: let ctx = newContext(100, 100) @@ -86,14 +86,14 @@ block: ctx.lineWidth = 10 ctx.image.fill(rgba(0, 255, 255, 255)) ctx.strokeSegment(segment(vec2(10, 10), vec2(90, 90))) - ctx.image.diffVs("tests/images/drawSegment.png") + ctx.image.xray("tests/images/drawSegment.png") block: let ctx = newContext(100, 100) ctx.fillStyle = rgba(255, 255, 0, 255) ctx.image.fill(rgba(0, 255, 255, 255)) ctx.fillEllipse(vec2(50, 50), 25, 25) - ctx.image.diffVs("tests/images/drawEllipse.png") + ctx.image.xray("tests/images/drawEllipse.png") block: let ctx = newContext(100, 100) @@ -101,14 +101,14 @@ block: ctx.lineWidth = 10 ctx.image.fill(rgba(0, 255, 255, 255)) ctx.strokeEllipse(vec2(50, 50), 25, 25) - ctx.image.diffVs("tests/images/strokeEllipse.png") + ctx.image.xray("tests/images/strokeEllipse.png") block: let ctx = newContext(100, 100) ctx.fillStyle = rgba(255, 255, 0, 255) ctx.image.fill(rgba(0, 255, 255, 255)) ctx.fillPolygon(vec2(50, 50), 30, 6) - ctx.image.diffVs("tests/images/drawPolygon.png") + ctx.image.xray("tests/images/drawPolygon.png") block: let ctx = newContext(100, 100) @@ -116,7 +116,7 @@ block: ctx.lineWidth = 10 ctx.image.fill(rgba(0, 255, 255, 255)) ctx.strokePolygon(vec2(50, 50), 30, 6) - ctx.image.diffVs("tests/images/strokePolygon.png") + ctx.image.xray("tests/images/strokePolygon.png") block: let @@ -126,7 +126,7 @@ block: b.fill(rgba(0, 255, 0, 255)) a.draw(b, translate(vec2(250, 250)) * scale(vec2(0.5, 0.5))) - a.diffVs("tests/images/scaleHalf.png") + a.xray("tests/images/scaleHalf.png") block: let @@ -135,7 +135,7 @@ block: a.fill(rgba(255, 255, 255, 255)) b.fill(rgbx(0, 0, 0, 255)) a.draw(b, translate(vec2(0.5, 0.5))) - a.diffVs("tests/images/masters/smooth1.png") + a.xray("tests/images/masters/smooth1.png") block: let @@ -144,7 +144,7 @@ block: a.fill(rgba(255, 255, 255, 255)) b.fill(rgbx(0, 0, 0, 255)) a.draw(b, translate(vec2(0, 50)) * rotate(45.toRadians)) - a.diffVs("tests/images/masters/smooth2.png") + a.xray("tests/images/masters/smooth2.png") block: let @@ -153,7 +153,7 @@ block: a.fill(rgba(255, 255, 255, 255)) b.fill(rgba(0, 0, 0, 255)) a.draw(b, translate(vec2(25.2, 25))) - a.diffVs("tests/images/masters/smooth3.png") + a.xray("tests/images/masters/smooth3.png") block: let @@ -162,7 +162,7 @@ block: a.fill(rgba(255, 255, 255, 255)) b.fill(rgba(0, 0, 0, 255)) a.draw(b, translate(vec2(25.2, 25.6))) - a.diffVs("tests/images/masters/smooth4.png") + a.xray("tests/images/masters/smooth4.png") block: let @@ -172,7 +172,7 @@ block: b.fill(rgbx(255, 0, 0, 255)) let m = translate(vec2(50, 50)) * rotate(30.toRadians) a.draw(b, m) - a.diffVs("tests/images/masters/smooth5.png") + a.xray("tests/images/masters/smooth5.png") block: let @@ -181,7 +181,7 @@ block: a.fill(rgba(255, 255, 255, 255)) let m = translate(vec2(50, 50)) * rotate(30.toRadians) a.draw(b, m) - a.diffVs("tests/images/masters/smooth6.png") + a.xray("tests/images/masters/smooth6.png") block: let @@ -190,7 +190,7 @@ block: a.fill(rgba(255, 255, 255, 255)) let m = translate(vec2(50, 50)) * rotate(30.toRadians) * scale(vec2(0.1, 0.1)) a.draw(b, m) - a.diffVs("tests/images/masters/smooth7.png") + a.xray("tests/images/masters/smooth7.png") block: let @@ -199,7 +199,7 @@ block: a.fill(rgba(255, 255, 255, 255)) let m = scale(vec2(2, 2)) a.draw(b, m) - a.diffVs("tests/images/masters/smooth8.png") + a.xray("tests/images/masters/smooth8.png") block: let @@ -208,7 +208,7 @@ block: a.fill(rgba(255, 255, 255, 255)) let m = translate(vec2(1, 1)) * scale(vec2(2, 2)) a.draw(b, m) - a.diffVs("tests/images/masters/smooth9.png") + a.xray("tests/images/masters/smooth9.png") block: let @@ -217,7 +217,7 @@ block: a.fill(rgba(255, 255, 255, 255)) let m = translate(vec2(0.5, 0.5)) * scale(vec2(2, 2)) a.draw(b, m) - a.diffVs("tests/images/masters/smooth10.png") + a.xray("tests/images/masters/smooth10.png") block: let @@ -228,7 +228,7 @@ block: rotate(-15.toRadians) * scale(vec2(263.86/40, 263.86/40)) a.draw(b, m) - a.diffVs("tests/images/masters/smooth11.png") + a.xray("tests/images/masters/smooth11.png") block: let @@ -240,7 +240,7 @@ block: a.draw(b, m * translate(vec2(-40, 0))) a.draw(b, m * translate(vec2(-40, -40))) a.draw(b, m * translate(vec2(0, -40))) - a.diffVs("tests/images/masters/smooth12.png") + a.xray("tests/images/masters/smooth12.png") block: let @@ -249,19 +249,19 @@ block: a.fill(rgba(255, 255, 255, 255)) b.fill(rgba(0, 0, 0, 255)) a.draw(b, scale(vec2(0.5, 0.5))) - a.diffVs("tests/images/masters/minify_odd.png") + a.xray("tests/images/masters/minify_odd.png") block: let rock = readImage("tests/images/rock.png") minified = rock.minifyBy2() - minified.diffVs("tests/images/masters/rock_minified.png") + minified.xray("tests/images/masters/rock_minified.png") block: let rock = readImage("tests/images/rock.png") minified = rock.minifyBy2(2) - minified.diffVs("tests/images/masters/rock_minified2.png") + minified.xray("tests/images/masters/rock_minified2.png") block: let pathStr = """ @@ -278,7 +278,7 @@ block: strokeImage.strokePath(pathStr, color(1, 1, 1, 1), strokeWidth = 4) image.draw(strokeImage) - image.diffVs("tests/images/fillOptimization.png") + image.xray("tests/images/fillOptimization.png") doAssert image[10, 10] == rgbx(255, 127, 63, 255) block: @@ -306,4 +306,4 @@ block: a.draw(b, translate(translation)) - a.diffVs("tests/images/fillOptimization2.png") + a.xray("tests/images/fillOptimization2.png") diff --git a/tests/test_masks.nim b/tests/test_masks.nim index 4dc7fef..a48c02b 100644 --- a/tests/test_masks.nim +++ b/tests/test_masks.nim @@ -1,4 +1,4 @@ -import pixie, utils +import pixie, xrays block: let mask = newMask(100, 100) @@ -34,13 +34,13 @@ block: doAssert minified.width == 50 and minified.height == 50 - minified.diffVs("tests/masks/maskMinified.png") + minified.xray("tests/masks/maskMinified.png") block: let a = readImage("tests/masks/maskMinified.png") b = a.magnifyBy2() - b.diffVs("tests/masks/maskMagnified.png") + b.xray("tests/masks/maskMagnified.png") block: let image = newImage(100, 100) @@ -53,7 +53,7 @@ block: mask.fillPath(path) image.draw(mask) - image.diffVs("tests/masks/circleMask.png") + image.xray("tests/masks/circleMask.png") block: let a = newMask(100, 100) @@ -66,7 +66,7 @@ block: b.fillPath(path) a.draw(b) - a.diffVs("tests/masks/maskedMask.png") + a.xray("tests/masks/maskedMask.png") block: let a = newMask(100, 100) @@ -79,7 +79,7 @@ block: b.fillPath(path, rgba(0, 0, 0, 255)) a.draw(b) - a.diffVs("tests/masks/imageMaskedMask.png") + a.xray("tests/masks/imageMaskedMask.png") block: let path = newPath() @@ -90,7 +90,7 @@ block: a.spread(10) - a.diffVs("tests/masks/spread.png") + a.xray("tests/masks/spread.png") block: let path = newPath() @@ -101,7 +101,7 @@ block: a.spread(-5) - a.diffVs("tests/masks/negativeSpread.png") + a.xray("tests/masks/negativeSpread.png") block: let mask = newMask(100, 100) @@ -112,7 +112,7 @@ block: mask.fillPath(path) mask.ceil() - mask.diffVs("tests/masks/circleMaskSharpened.png") + mask.xray("tests/masks/circleMaskSharpened.png") block: let path = newPath() @@ -120,7 +120,7 @@ block: let mask = newMask(100, 100) mask.fillPath(path) - mask.diffVs("tests/masks/drawRect.png") + mask.xray("tests/masks/drawRect.png") block: let path = newPath() @@ -128,7 +128,7 @@ block: let mask = newMask(100, 100) mask.strokePath(path, strokeWidth = 10) - mask.diffVs("tests/masks/strokeRect.png") + mask.xray("tests/masks/strokeRect.png") block: let path = newPath() @@ -136,14 +136,14 @@ block: let mask = newMask(100, 100) mask.fillPath(path) - mask.diffVs("tests/masks/drawRoundedRect.png") + mask.xray("tests/masks/drawRoundedRect.png") block: let path = newPath() path.roundedRect(rect(vec2(10, 10), vec2(30, 30)), 10, 10, 10, 10) let mask = newMask(100, 100) mask.strokePath(path, strokeWidth = 10) - mask.diffVs("tests/masks/strokeRoundedRect.png") + mask.xray("tests/masks/strokeRoundedRect.png") block: let path = newPath() @@ -152,7 +152,7 @@ block: let mask = newMask(100, 100) mask.strokePath(path, strokeWidth = 10) - mask.diffVs("tests/masks/drawSegment.png") + mask.xray("tests/masks/drawSegment.png") block: let path = newPath() @@ -160,7 +160,7 @@ block: let mask = newMask(100, 100) mask.fillPath(path) - mask.diffVs("tests/masks/drawEllipse.png") + mask.xray("tests/masks/drawEllipse.png") block: let path = newPath() @@ -168,7 +168,7 @@ block: let mask = newMask(100, 100) mask.strokePath(path, strokeWidth = 10) - mask.diffVs("tests/masks/strokeEllipse.png") + mask.xray("tests/masks/strokeEllipse.png") block: let path = newPath() @@ -176,7 +176,7 @@ block: let mask = newMask(100, 100) mask.fillPath(path) - mask.diffVs("tests/masks/drawPolygon.png") + mask.xray("tests/masks/drawPolygon.png") block: let path = newPath() @@ -184,7 +184,7 @@ block: let mask = newMask(100, 100) mask.strokepath(path, strokeWidth = 10) - mask.diffVs("tests/masks/strokePolygon.png") + mask.xray("tests/masks/strokePolygon.png") block: let path = newPath() @@ -193,7 +193,7 @@ block: let mask = newMask(100, 100) mask.fillpath(path) mask.blur(20) - mask.diffVs("tests/images/maskblur20.png") + mask.xray("tests/images/maskblur20.png") block: let path = newPath() @@ -204,7 +204,7 @@ block: mask.blur(25) let minified = mask.minifyBy2() - minified.diffVs("tests/masks/minifiedBlur.png") + minified.xray("tests/masks/minifiedBlur.png") block: let path = newPath() @@ -214,4 +214,4 @@ block: mask.fillPath(path) let magnified = mask.magnifyBy2() - magnified.diffVs("tests/masks/drawPolygonMagnified.png") + magnified.xray("tests/masks/drawPolygonMagnified.png") diff --git a/tests/test_paints.nim b/tests/test_paints.nim index 1dfcc9f..ebc649c 100644 --- a/tests/test_paints.nim +++ b/tests/test_paints.nim @@ -1,4 +1,4 @@ -import chroma, pixie, vmath, utils +import chroma, pixie, vmath, xrays const heartShape = """ M 10,30 @@ -14,7 +14,7 @@ block: heartShape, rgba(255, 0, 0, 255) ) - image.diffVs("tests/paths/paintSolid.png") + image.xray("tests/paths/paintSolid.png") block: let paint = newPaint(ImagePaint) @@ -23,7 +23,7 @@ block: let image = newImage(100, 100) image.fillPath(heartShape, paint) - image.diffVs("tests/paths/paintImage.png") + image.xray("tests/paths/paintImage.png") block: let paint = newPaint(ImagePaint) @@ -33,7 +33,7 @@ block: let image = newImage(100, 100) image.fillPath(heartShape, paint) - image.diffVs("tests/paths/paintImageOpacity.png") + image.xray("tests/paths/paintImageOpacity.png") block: let paint = newPaint(TiledImagePaint) @@ -42,7 +42,7 @@ block: let image = newImage(100, 100) image.fillPath(heartShape, paint) - image.diffVs("tests/paths/paintImageTiled.png") + image.xray("tests/paths/paintImageTiled.png") block: let paint = newPaint(TiledImagePaint) @@ -52,7 +52,7 @@ block: let image = newImage(100, 100) image.fillPath(heartShape, paint) - image.diffVs("tests/paths/paintImageTiledOpacity.png") + image.xray("tests/paths/paintImageTiledOpacity.png") block: let paint = newPaint(LinearGradientPaint) @@ -67,7 +67,7 @@ block: let image = newImage(100, 100) image.fillPath(heartShape, paint) - image.diffVs("tests/paths/gradientLinear.png") + image.xray("tests/paths/gradientLinear.png") block: let paint = newPaint(LinearGradientPaint) @@ -82,7 +82,7 @@ block: let image = newImage(100, 100) image.fillPath(heartShape, paint) - image.diffVs("tests/paths/gradientLinear2.png") + image.xray("tests/paths/gradientLinear2.png") block: let paint = newPaint(RadialGradientPaint) @@ -98,7 +98,7 @@ block: let image = newImage(100, 100) image.fillPath(heartShape, paint) - image.diffVs("tests/paths/gradientRadial.png") + image.xray("tests/paths/gradientRadial.png") block: let paint = newPaint(AngularGradientPaint) @@ -114,7 +114,7 @@ block: let image = newImage(100, 100) image.fillPath(heartShape, paint) - image.diffVs("tests/paths/gradientAngular.png") + image.xray("tests/paths/gradientAngular.png") block: let paint = newPaint(AngularGradientPaint) @@ -131,4 +131,4 @@ block: let image = newImage(100, 100) image.fillPath(heartShape, paint) - image.diffVs("tests/paths/gradientAngularOpacity.png") + image.xray("tests/paths/gradientAngularOpacity.png") diff --git a/tests/test_paths.nim b/tests/test_paths.nim index 464dcd3..d452846 100644 --- a/tests/test_paths.nim +++ b/tests/test_paths.nim @@ -1,4 +1,4 @@ -import chroma, pixie, pixie/fileformats/png, strformat, utils +import chroma, pixie, pixie/fileformats/png, strformat, xrays block: let pathStr = """ @@ -54,7 +54,7 @@ block: pathStr = "M 10 10 L 90 90" color = rgba(255, 0, 0, 255) image.strokePath(pathStr, color, strokeWidth = 10) - image.diffVs("tests/paths/pathStroke1.png") + image.xray("tests/paths/pathStroke1.png") block: let @@ -62,7 +62,7 @@ block: pathStr = "M 10 10 L 50 60 90 90" color = rgba(255, 0, 0, 255) image.strokePath(pathStr, color, strokeWidth = 10) - image.diffVs("tests/paths/pathStroke2.png") + image.xray("tests/paths/pathStroke2.png") block: let image = newImage(100, 100) @@ -71,7 +71,7 @@ block: rgba(255, 255, 0, 255), strokeWidth = 10 ) - image.diffVs("tests/paths/pathStroke3.png") + image.xray("tests/paths/pathStroke3.png") block: let @@ -79,7 +79,7 @@ block: pathStr = "M 10 10 H 90 V 90 H 10 L 10 10" color = rgba(0, 0, 0, 255) image.fillPath(pathStr, color) - image.diffVs("tests/paths/pathBlackRectangle.png") + image.xray("tests/paths/pathBlackRectangle.png") block: let @@ -87,7 +87,7 @@ block: pathStr = "M 10 10 H 90 V 90 H 10 Z" color = rgba(0, 0, 0, 255) image.fillPath(parsePath(pathStr), color) - image.diffVs("tests/paths/pathBlackRectangleZ.png") + image.xray("tests/paths/pathBlackRectangleZ.png") block: let image = newImage(100, 100) @@ -95,7 +95,7 @@ block: "M 10 10 H 90 V 90 H 10 L 10 10", rgba(255, 255, 0, 255) ) - image.diffVs("tests/paths/pathYellowRectangle.png") + image.xray("tests/paths/pathYellowRectangle.png") block: let path = newPath() @@ -107,7 +107,7 @@ block: let image = newImage(100, 100) image.fillPath(path, rgba(255, 0, 0, 255)) - image.diffVs("tests/paths/pathRedRectangle.png") + image.xray("tests/paths/pathRedRectangle.png") block: let image = newImage(100, 100) @@ -115,7 +115,7 @@ block: "M30 60 A 20 20 0 0 0 90 60 L 30 60", parseHtmlColor("#FC427B").rgba ) - image.diffVs("tests/paths/pathBottomArc.png") + image.xray("tests/paths/pathBottomArc.png") block: let image = newImage(100, 100) @@ -129,7 +129,7 @@ block: """, parseHtmlColor("#FC427B").rgba ) - image.diffVs("tests/paths/pathHeart.png") + image.xray("tests/paths/pathHeart.png") block: let image = newImage(100, 100) @@ -137,7 +137,7 @@ block: "M 20 50 A 20 10 45 1 1 80 50 L 20 50", parseHtmlColor("#FC427B").rgba ) - image.diffVs("tests/paths/pathRotatedArc.png") + image.xray("tests/paths/pathRotatedArc.png") block: let image = newImage(100, 100) @@ -145,7 +145,7 @@ block: "M 0 50 A 50 50 0 0 0 50 0 L 50 50 L 0 50", parseHtmlColor("#FC427B").rgba ) - image.diffVs("tests/paths/pathInvertedCornerArc.png") + image.xray("tests/paths/pathInvertedCornerArc.png") block: let image = newImage(100, 100) @@ -153,7 +153,7 @@ block: "M 0 50 A 50 50 0 0 1 50 0 L 50 50 L 0 50", parseHtmlColor("#FC427B").rgba ) - image.diffVs("tests/paths/pathCornerArc.png") + image.xray("tests/paths/pathCornerArc.png") # block: # let @@ -170,14 +170,14 @@ block: # path.arcTo(x, y + h, x, y, r) # path.arcTo(x, y, x + w, y, r) # image.fillPath(path, rgba(255, 0, 0, 255)) -# image.diffVs("tests/paths/pathRoundRect.png") +# image.xray("tests/paths/pathRoundRect.png") block: let mask = newMask(100, 100) pathStr = "M 10 10 H 90 V 90 H 10 L 10 10" mask.fillPath(pathStr) - mask.diffVs("tests/paths/pathRectangleMask.png") + mask.xray("tests/paths/pathRectangleMask.png") # block: # let @@ -206,7 +206,7 @@ block: image.strokePath(p, rgba(0, 255, 0, 255), scale(vec2(200, 200)), strokeWidth = 0.01) - image.diffVs("tests/paths/pixelScale.png") + image.xray("tests/paths/pixelScale.png") block: let @@ -217,7 +217,7 @@ block: path, rgba(0, 0, 0, 255), translate(vec2(10, 10)), 10, RoundCap, RoundJoin ) - image.diffVs("tests/paths/boxRound.png") + image.xray("tests/paths/boxRound.png") block: let @@ -228,7 +228,7 @@ block: path, rgba(0, 0, 0, 255), translate(vec2(10, 10)), 10, RoundCap, BevelJoin ) - image.diffVs("tests/paths/boxBevel.png") + image.xray("tests/paths/boxBevel.png") block: let @@ -239,7 +239,7 @@ block: path, rgba(0, 0, 0, 255), translate(vec2(10, 10)), 10, RoundCap, MiterJoin ) - image.diffVs("tests/paths/boxMiter.png") + image.xray("tests/paths/boxMiter.png") block: let @@ -250,7 +250,7 @@ block: path, rgba(0, 0, 0, 255), translate(vec2(10, 10)), 10, ButtCap, BevelJoin ) - image.diffVs("tests/paths/ButtCap.png") + image.xray("tests/paths/ButtCap.png") block: let @@ -261,7 +261,7 @@ block: path, rgba(0, 0, 0, 255), translate(vec2(10, 10)), 10, RoundCap, BevelJoin ) - image.diffVs("tests/paths/RoundCap.png") + image.xray("tests/paths/RoundCap.png") block: let @@ -272,7 +272,7 @@ block: path, rgba(0, 0, 0, 255), translate(vec2(10, 10)), 10, SquareCap, BevelJoin ) - image.diffVs("tests/paths/SquareCap.png") + image.xray("tests/paths/SquareCap.png") block: let @@ -309,7 +309,7 @@ block: dashes = @[1.float32, 2, 3, 4, 5, 6, 7, 8, 9] ) - image.diffVs("tests/paths/dashes.png") + image.xray("tests/paths/dashes.png") block: proc miterTest(angle, limit: float32) = @@ -326,7 +326,7 @@ block: path, rgba(0, 0, 0, 255), translate(vec2(30, 30)), 8, ButtCap, MiterJoin, miterLimit = limit ) - image.diffVs(&"tests/paths/miterLimit_{angle.int}deg_{limit:0.2f}num.png") + image.xray(&"tests/paths/miterLimit_{angle.int}deg_{limit:0.2f}num.png") miterTest(10, 2) miterTest(145, 2) @@ -343,7 +343,7 @@ block: path = parsePath("M0 0 L0 0 L60 0 L60 60 L0 60") image.fill(rgba(255, 255, 255, 255)) image.fillPath(path, rgba(127, 127, 127, 255)) - image.diffVs("tests/paths/selfclosing.png") + image.xray("tests/paths/selfclosing.png") # Potential error cases, ensure they do not crash @@ -398,7 +398,7 @@ block: "M 30 30 H 80 V 80 H 30 z", paint ) - image.diffVs("tests/paths/rectExcludeMask.png") + image.xray("tests/paths/rectExcludeMask.png") block: let image = newImage(100, 100) @@ -415,7 +415,7 @@ block: "M 30.1 30.1 H 80.1 V 80.1 H 30.1 z", paint ) - image.diffVs("tests/paths/rectExcludeMaskAA.png") + image.xray("tests/paths/rectExcludeMaskAA.png") block: let image = newImage(100, 100) @@ -432,7 +432,7 @@ block: "M 30 30 H 80 V 80 H 30 z", paint ) - image.diffVs("tests/paths/rectMask.png") + image.xray("tests/paths/rectMask.png") block: let image = newImage(100, 100) @@ -449,7 +449,7 @@ block: "M 30.1 30.1 H 80.1 V 80.1 H 30.1 z", paint ) - image.diffVs("tests/paths/rectMaskAA.png") + image.xray("tests/paths/rectMaskAA.png") block: let image = newImage(100, 100) @@ -467,13 +467,13 @@ block: paint, strokeWidth = 10 ) - image.diffVs("tests/paths/rectMaskStroke.png") + image.xray("tests/paths/rectMaskStroke.png") block: let mask = newMask(100, 100) mask.fillPath("M 10 10 H 60 V 60 H 10 z") mask.fillPath("M 30 30 H 80 V 80 H 30 z", blendMode = ExcludeMaskBlend) - mask.diffVs("tests/paths/maskRectExcludeMask.png") + mask.xray("tests/paths/maskRectExcludeMask.png") block: let mask = newMask(100, 100) @@ -482,19 +482,19 @@ block: "M 30.1 30.1 H 80.1 V 80.1 H 30.1 z", blendMode = ExcludeMaskBlend ) - mask.diffVs("tests/paths/maskRectExcludeMaskAA.png") + mask.xray("tests/paths/maskRectExcludeMaskAA.png") block: let mask = newMask(100, 100) mask.fillPath("M 10 10 H 60 V 60 H 10 z") mask.fillPath("M 30 30 H 80 V 80 H 30 z", blendMode = MaskBlend) - mask.diffVs("tests/paths/maskRectMask.png") + mask.xray("tests/paths/maskRectMask.png") block: let mask = newMask(100, 100) mask.fillPath("M 10.1 10.1 H 60.1 V 60.1 H 10.1 z") mask.fillPath("M 30.1 30.1 H 80.1 V 80.1 H 30.1 z", blendMode = MaskBlend) - mask.diffVs("tests/paths/maskRectMaskAA.png") + mask.xray("tests/paths/maskRectMaskAA.png") block: let mask = newMask(100, 100) @@ -504,7 +504,7 @@ block: strokeWidth = 10, blendMode = MaskBlend ) - mask.diffVs("tests/paths/maskStrokeRectMask.png") + mask.xray("tests/paths/maskStrokeRectMask.png") block: var @@ -531,7 +531,7 @@ block: else: ctx.stroke() - surface.diffVs("tests/paths/arc.png") + surface.xray("tests/paths/arc.png") block: var @@ -550,7 +550,7 @@ block: ctx.lineTo(p2.x, p2.y) ctx.stroke() - surface.diffVs("tests/paths/arcTo1.png") + surface.xray("tests/paths/arcTo1.png") block: var @@ -586,7 +586,7 @@ block: ctx.arc(50, 20, 5, 0, 2 * PI) # Control point two ctx.fill() - surface.diffVs("tests/paths/arcTo2.png") + surface.xray("tests/paths/arcTo2.png") block: var @@ -600,7 +600,7 @@ block: ctx.lineTo(110, 130) ctx.stroke() - surface.diffVs("tests/paths/arcTo3.png") + surface.xray("tests/paths/arcTo3.png") block: let path = newPath() @@ -651,7 +651,7 @@ block: let image = newImage(100, 100) image.fillPath(path, paint) - image.diffVs("tests/paths/opacityFill.png") + image.xray("tests/paths/opacityFill.png") block: let path = newPath() @@ -664,7 +664,7 @@ block: let image = newImage(100, 100) image.strokePath(path, paint, strokeWidth = 10) - image.diffVs("tests/paths/opacityStroke.png") + image.xray("tests/paths/opacityStroke.png") block: let @@ -672,14 +672,14 @@ block: pathStr = "M0 0 L200 200" color = rgba(255, 0, 0, 255) image.strokePath(pathStr, color, strokeWidth = 10) - image.diffVs("tests/paths/pathStroke1Big.png") + image.xray("tests/paths/pathStroke1Big.png") block: let image = newMask(100, 100) pathStr = "M0 0 L200 200" image.strokePath(pathStr, strokeWidth = 10) - image.diffVs("tests/paths/pathStroke1BigMask.png") + image.xray("tests/paths/pathStroke1BigMask.png") block: let @@ -687,7 +687,7 @@ block: pathStr = "M99 99 L999 99 L999 100 L99 100 Z" color = rgba(255, 0, 0, 255) image.fillPath(pathStr, color) - image.diffVs("tests/paths/path1pxCover.png") + image.xray("tests/paths/path1pxCover.png") block: let @@ -695,7 +695,7 @@ block: pathStr = "M100 100 L999 100 L999 101 L100 101 Z" color = rgba(255, 0, 0, 255) image.fillPath(pathStr, color) - image.diffVs("tests/paths/path0pxCover.png") + image.xray("tests/paths/path0pxCover.png") block: let image = newImage(200, 200) @@ -729,7 +729,7 @@ block: path.polygon(vec2(50, 50), 30, i) let mask = newMask(100, 100) mask.fillPath(path) - mask.diffVs(&"tests/paths/polygon{i}.png") + mask.xray(&"tests/paths/polygon{i}.png") block: let image = newImage(200, 200) @@ -783,4 +783,4 @@ block: color = rgba(0, 0, 0, 255) image.fill(rgba(255, 255, 255, 255)) image.fillPath(pathStr, color) - image.diffVs("tests/paths/pathSwish.png") + image.xray("tests/paths/pathSwish.png") diff --git a/tests/test_svg.nim b/tests/test_svg.nim index d54a97c..6950119 100644 --- a/tests/test_svg.nim +++ b/tests/test_svg.nim @@ -1,4 +1,4 @@ -import pixie, pixie/fileformats/svg, strformat, utils +import pixie, pixie/fileformats/svg, strformat, xrays const files = [ "line01", @@ -19,7 +19,7 @@ const files = [ for file in files: let image = readImage(&"tests/fileformats/svg/{file}.svg") - image.diffVs(&"tests/fileformats/svg/masters/{file}.png") + image.xray(&"tests/fileformats/svg/masters/{file}.png") block: let @@ -28,4 +28,4 @@ block: 512, 512 ) image = newImage(svg) - image.diffVs(&"tests/fileformats/svg/masters/accessibility-outline.png") + image.xray(&"tests/fileformats/svg/masters/accessibility-outline.png") diff --git a/tests/utils.nim b/tests/xrays.nim similarity index 55% rename from tests/utils.nim rename to tests/xrays.nim index 3f6b1bd..c13f1f9 100644 --- a/tests/utils.nim +++ b/tests/xrays.nim @@ -9,27 +9,18 @@ proc makeDirs*(dirs: string) = createDir(path) path.add "/" -proc diffVs*(image: Image, masterPath: string) = +proc xray*(image: Image, masterPath: string) = let - master = readImage(masterPath) - (score, xRay) = diff(image, master) imagePath = "tmp/generated/" & masterPath xRayPath = "tmp/xray/" & masterPath makeDirs(imagePath.splitPath.head) makeDirs(xRayPath.splitPath.head) image.writeFile(imagePath) + let + master = readImage(masterPath) + (score, xRay) = diff(image, master) xRay.writeFile(xRayPath) echo &"diff {masterPath} -> {score:0.6f}" -proc diffVs*(mask: Mask, masterPath: string) = - let - master = readImage(masterPath) - image = mask.newImage - (score, xRay) = diff(image, master) - imagePath = "tmp/generated/" & masterPath - xRayPath = "tmp/xray/" & masterPath - makeDirs(imagePath.splitPath.head) - makeDirs(xRayPath.splitPath.head) - image.writeFile(imagePath) - xRay.writeFile(xRayPath) - echo &"diff {masterPath} -> {score:0.6f}" +proc xray*(mask: Mask, masterPath: string) = + mask.newImage.xray(masterPath)