From 7f45198cd12fed5f8e2a3c62a6ea3945af249cbf Mon Sep 17 00:00:00 2001 From: Michael Sippel Date: Tue, 24 Sep 2024 10:10:25 +0200 Subject: [PATCH] intro slide --- beamer/lc-beamer/example.tex | 60 +++++++++++++++++++---------------- beamer/lc-beamer/intro.pdf | Bin 0 -> 14943 bytes 2 files changed, 33 insertions(+), 27 deletions(-) create mode 100644 beamer/lc-beamer/intro.pdf diff --git a/beamer/lc-beamer/example.tex b/beamer/lc-beamer/example.tex index 66f98d9..f3ee859 100644 --- a/beamer/lc-beamer/example.tex +++ b/beamer/lc-beamer/example.tex @@ -40,36 +40,40 @@ -\begin{frame} +\begin{frame}[t, fragile] \frametitle{Type Systems} \framesubtitle{Safety <> Flexibility} - \begin{itemize} - \item<1-> Goal: eliminate undefined behaviour, - facilitate abstract code - \item<2-> simple types are overly restrictive, - loss of low level control +\centering + \includegraphics[width=0.9\textwidth]{intro.pdf} - \item<3-|alert@3> polymorphism - (regain flexibility in type-safe way) - \begin{itemize} - \item<4-> parametric polymorphism (generics) - \item<4-> subtype polymorphism (inheritance / coercions) - \end{itemize} - \end{itemize} -\end{frame} - - -\begin{frame}[t, fragile]{Type Systems} -\framesubtitle{Safety <> Flexibility} - -\begin{lstlisting} + \pause + \begin{block}{type information in comments} + \begin{lstlisting} /* this is an angle in degrees */ double hue = 156.4; -\end{lstlisting} + \end{lstlisting} +\end{block} + \end{frame} +\begin{frame}[t, fragile]{Example - Image Processing} +\begin{lstlisting} +image-read :: FilePath -> [Color] +image-write :: FilePath -> [Color] -> () +image-mix :: $\mathbb{R}$ -> [Color] -> [Color] -> [Color] +image-saturate :: $\mathbb{R}$ -> [Color] -> [Color] + +let im1 = image-read "in1.png" +let im2 = image-read "in2.png" +let im3 = image-mix 0.5 + im1 + (image-saturate 0.8 im2) + +image-write "out.png" im3 +\end{lstlisting} +\end{frame} \begin{frame}{Performance Checklist} @@ -124,7 +128,6 @@ image-write "out.png" im3 \end{lstlisting} \end{frame} - \begin{frame}{Example - Image Processing} \framesubtitle{More Types} @@ -180,7 +183,7 @@ image-write "out.png" im3 \end{frame} -\begin{frame}{Abstract Concept - Multiple Representations} +\begin{frame}{Example - Image Processing} \framesubtitle{OpenGL Image Formats} \begin{itemize} @@ -253,7 +256,7 @@ image-write "out.png" im3 \begin{frame}{Solutions (I): Traits / Typeclasses / Interfaces} \begin{itemize} - \item todo + \item todo \end{itemize} \end{frame} @@ -340,7 +343,7 @@ image-write "out.png" im3 \begin{frame}{Morphisms} \framesubtitle{Coherence} - \begin{block}{Coherence Condition} + \begin{block}{Morphism Condition} Assume\\ \(\metavariable{m_\sigma} : \typeterminal{\metavariable{\sigma} \sim \metavariable{\sigma_1} \rightarrow_\text{morph} \metavariable{\sigma} \sim \metavariable{\sigma_2}}\)\\ \(\metavariable{m_\tau} : \typeterminal{\metavariable{\tau} \sim \metavariable{\tau_1} \rightarrow_\text{morph} \metavariable{\tau} \sim \metavariable{\tau_2}}\)\\ @@ -688,8 +691,11 @@ D :: \Gamma \vdash \metavariable{e} : \metavariable{\tau}\\ -\begin{frame}{Summary} -todo +\begin{frame}[t, fragile]{Summary} + +%\begin{tabular*}[h]{p{0.5\textwidth}|p{0.5\textwidth}} +%\end{tabular*} + \end{frame} diff --git a/beamer/lc-beamer/intro.pdf b/beamer/lc-beamer/intro.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cc147702d92161e769617400f2dfee26bc0d121d GIT binary patch literal 14943 zcmd6O1yCK^wk__#Ay{DJ!QI{6-Q68F?(Q1gf?KfQ1P|`+5In&N?(iWw=iGDa-uvFG z_v=^vz4z+wHJA2WtGnhLV{TG;VNn_eS{69c`lHHwIA#Dnz|PPTj++}mCv9SD1~dn- zyoeOx0001;sD(Aq#PQ{9Z2&Y8HZig@Hi6^ig>wQrni$x?xn)*p4BL|QqqJVDT_~`2 zsnN_z?-s1XP<9ZXgpHk~Qdb-Q zOk4h7l%?T#+1KRm%J#^J?c?#l>FaCqy-IGHfUdX(>vk&>5oh-+H3b9}6ZK%q`lFXS zo42o%0j=@e?V0JFtuOb=yW^_t>+|8q%ct+IDSQX6pVpoM=L-ZLMg+i)j_i&@yQ(KA zH#hel#Cf{#-KAtOldOQU9#~;6kX58L3 z+TD{!VNykh&tb5oklqvVIbBSjZ*@P;-`e^*`^G)ng)a04s~ac5Hx7uRxsVZ$)jg|y z_Vw-XY)ZCZ5Y)y@#w!cgDCRi!jGNEf8RJ3HEN_kH$i z;vADxWAnszb@T90(0cY-B)W?27=aod_;}kfb;Wjje||CDQ7}6)uax@C`^>22GV4pa z)KJt*B8J!$_q}Ctu4zW`yY<_QRjUOF zoYLx9MuFBeP2oC@np*6zxVFU~f^B^|Y|pc7a$Hl1VJz-xNyMe32@VA~mwVNY5cI}# zX;q;JpvN)~*`dTk6>Zk?KQ46tnC!$3vn&1}qTj)u14X4lVw$vF^WX=iRbBegG@K_d zMGT7+h}ty0n%=v_P2M6-HZU_5VUU~Cm3-#XLQq`wp*0C;ud#KK#r8R~;O9rqK@!%p zwvl4K_vd-mJ#gnxTe1kQthC>X7MH4fB!{<%NGz~m7@&jnvSc<@dQoHF;R;fqX+^+W z4{VC9r&BvbcgDw05GtVJ(+mnbAZmKeB_r?mKvCri1|s27V+H7tnZiO4ib zPNMMMS}^Y-qa74QS_@otQuGXVPVT0IejUc#exup59{#3Jj5UlK{z_^vl`*;vRxZm- zYG8>tSX^6YAIrr=(WG%t(VU>TIzoiVIet4_Dr%G#yf$dLK5b|B>=xkh&%F5HEe$QqDKY($;;&wz0TOr~ws2;B<*cl~oTOb4c|^)k5*iiojrX3CAFWOx0Pt7V%>To5g0RAdm-siUjnXx8tfs0(EI98F)KnCluhTWBd>ag8gDTB6cM5v>A*Ynrve zjAv(d`HHwxd-paXt0>-LA*^1PX)?LtGLD5!X|{sWSFEN=6XcVv+~tNf;qaymp|FSC z0IOO3hmNOEr;9`77UZsd(eGhy(U`e~+cyfqO_OIfkujVBWx=TQ>8v!Uxo4I$5<(;v zvEHY9brwuRw}l}$y4{?j+&XhV(?!AqKZeC&g;T;Q6JLdIo!$tw{eGWsVFAVX!dBq99L{vHXZ| z!OlTu+bhv5w$Pwz@+l$~H%iGW(xH073KRXUr!(WoksJT6F(F8PT+TctGA(p)y;+cqmmptq=yl>)p|)qwkqf?TSK9d-GkZ)AlWn?-e6jkyjq;i zL5_zZ(D@yD7NS`GQqbo3X^`F_8~cGhR)k4A00L0MbCeATde>)Fn( z2A+jc3`e@zk8^XO@#X@Uu8vN_LQlUN;qEo&fz~xn=|6G(&Vd41+`vD(ZXb&xm~9|- zY}7_qKv;Q@1rUP5k}a!D#67+om_sdyTw+%zun=q|oxwr^Re=pNT_1TIh1}e+#egJ$ zq{#^(&4Q9fc3vT{}68;pE0(Nvz&vQiGm_&wD3Fi6O5*@V?aloL8--%m5doB{nmk|4huRo++kx~l(dUS$+VHM+(ILFrXidH%{@D`h%_b-6*vs@W?<;P+7Ihz zX%;JtG7bmItQMz6-~jhpV2OGoCU)`wQ%q#FB17r8RQ7)Ox1$e?V9+0xXtuY+mT@lM zTYXQ{-6&5;;8%85XEr&<_7}L#g$?*oUcc_3{2Vq*ibCUN#ZmA5jccLPVS zlYIZ46EaWhQ1GChGa5*X%!*p)hEp<&@Wyj=fmgYXFOSoR7aylVwg;*(d zIwB-ZO6IGA=gGvLlu?~pp&_Q{yLf0)i%h69AS@&s&Q$DYyejW5LJ&pP0A+}Xm3p@f z43O^;^WmaJvo6mtyac@|#4}+>d}P)z4Kznj-D?&YB{a(Nq;gRSdYAy`~{k zl2FC;<{0l=0#(%)oK+#)B!Q~1EA8@-6&<*x0d}D%5~MJ8;DO4Zje%Vh0`ixArT&5^ zLu({JM2YQ=s9w4A2<_R<3DWbm#bH6{M7`1J--;?jO^?juN7Xi zOn({czsz$HH=vjj@WnI-aC5&3UOsdN^e-6zosa;40YGPD@N#@H*k1~MAL&HxY=M8P zZAwE=Ll0p4)8K#Y;8nx`VEM37LHCp0P`Q$|FuiOq(r|S@jYS(32KqZ8u$Qm`$F)RtB7iWTGAJ#kg=3 ztvW#D05JN?Jna2iJh!>80vG5GH989ImhBj`yL^zYJm+k7qre`X)~cVG4y&{Xj+V{C zmKi}4Jr0L)*<9`L9@ck-59#`!!~p#Fmtw(TH;9&2eyFL4jkn23^a92e`fZMK5DQoy?+{8nx_)hI93Nb0k;+Hw%+vu*I~4Y7^6fbjU#c zfg0l?$!6P6!<&>fP1GY~6p+11Nh&Hy(~(JFgE`K{YAWt_4(x}lgPn5ZQ?tY-*`8-t0lO+~i8(J48{_zGWq6KRd${ zQrvp@a!WyxFukwLXm&k!Z95qDoFz=&yvm>4g*MNJb{O#1Q6Kfji-{Df)t_NqQy>uw ziKwHm6T&|dtbf$D8=D#~YSi%j%n|gAd|P%XBS@(>G7>JTNSn=xy|qzU#Z0QegpCFJ1u<9?(8zjm6bYwDo6P+rOf}MZY@1K&`?O9c)_nFvPswgq`{nMn zHp%Z?=Ho%TT4KGf--2`j(g-0BCq7vz_zer8JA>=thUL{w4Um*p%IFv1{q&-V#To1| zL#_Un5fy8)@2N;y2eOyMkQJaX|hf zQeq_f7MX31KFh&i_qZA4W>H&iro&-VdI~-|HuB}M^KRz{Qrmtd7A(9k3r!QTn; zwix&v*fvq7PNI~(oT04P=*KKJJI<5%ovZd?per}C;r7kJTRG%20^RD1v`{fO+v_iF zZ&cumqVxs7g3KjCI;TS@Y9akjUv{6Fc z!Vd(hRzF*cmNv1tsR*4SSP7v-E`BuL<~?mTH7U`_C0U$NO(kjfcD??Z?bh1+OKI53 zu}W`)%g<_CZ(|OZIUo5$$z-@K$bi?|43`z?u~jRj%G3t;`os(BRs0UsK|ar+dr3u%3V5?Q}V1}D5BT$ zGp2YE>~Wqj21U}hAMhcd&^s+SeRSlnCzV_fp7MgjiF0#`Mgsj57Zas zIKv5ut+$0{%s$g+JAH?3?R2WZa-Yuot*6_pA>bdTELflQQ)U)O0 z^P}YIlgK%;P^^y6Zg%3w2kvjPJQ-5gELIHOXa~M1OL1?qc$u=b`7b~A$QSpp&nT?l zu;jC|2G*5h$UkboX`n}M+v;J~T`)6?11Xz9uT==JPPUmL^s7;&s9vUkN2ej4z-sq6 z)fY;-9=ns%a8-RM%>AU+A{Ry=2mE$m?{$*jHm|#taqZKzk1YD(jQ_pFjaTTgek2o8 zAXUM}=iz!yMvl}2Jlw4WqYYtZfP#|x0Z>?sLFU4#i=%I{M%2ug0!O14Qj=M9+%#&y zIMA@P;hUmLS}ACHcNgm{Z^Pkw_*GKX^~Ze)9`2yYCUlP+;85E`qvqQy->1V5DM&{; zblLTK?%Vx87AJMr2G-0*{TUumePLNs52@5{<1=c3~25&ZGx7r^#3nN&>s&Ny3Yt-aNE{qdZS@A@f}Aba{T)Kwr?JT>O_Aq4*? zu(gUF_dCmc#G+qmyhAsLRaXyver8k}lJo*KYO07cefKgF)=zF$EXz0NnRgzvI*2Z- z+7mzU={|rs$#{`^NpRv_ZFr+!j*g{=lo)?bmAz4eEDI)~2%+v$(Zr&UhYRRSc~$lySEa8UMrsjht% zy_p*gH)@=h3J%pib$R zMdcM$RCbHe8`3_q5brtc`u32e&Zy4By@>jfFV%ovW)y=rTiH!rfL4X|%de=+1?Nk6 z;nMPTft8$~J}N4k>d7#bdtG8*i+!F%O=_vk6dwZ`?Fck6I=l>a@8JouJl5vW`tQ{` zII69r4zC(d7Oz)UPcgU}j~3btKH2|FU2WY>%0I~%P2LahZLB-iwcl>;3$!w8kkkEA zP*`vG?aLg7**tH{SB0}B{gb6G9xYl$AA^|l=U@(9xM}a{5?(1Xvkhm|lYVuUyLSPM zx=c9ZxKJVy-O2G#h2_dU!gN#86xrIc;m0z0gxH${*#mnl^4!f!8|#z}1oCq>+Rw^2 zYTaCGXX6$3-}gN|T9@Z5-MvmL32Z!ewdtpR&Lo@IV93;?WsYXptzNs??|-LAvSFe! zl^y*!@x^Gi@39th&gSP>o;G`EGrzM$s(Z`$X0_Qmwn?Ah_uU6mr;DDku6v$uaqJ2$ zox2g0-!N&+gINiEO6ldB;R`OcJGsSA)w- z?G9YS>Ew`~`C$9wM71%v;h^;j6{NAAPlUoY#8M1m6eom%O>ud7xipwT%GcC+%S%+@ zng}Lqy@z1e=eygqn@H;uxy_CZ?nAm$-Z=u-D6dYRk_vCQ&r?ARgTa<-z%Lxer#G?z zY!vHS1{bRQrHL0zxu&L^hNiT`G6hr7cB-jT9+VE_V+5&_lQ)mc**C!9WW9G>*W&%1 zfsbWhR=IX!zN`oOdR{Fg+1ai&Z3ceK@|Efz$toF!I<*}^9I^NUu3q~SF|ZNjXoCD5 z&Qe07B297aQ998rwH}^tiPbFE)sk`;N4Cnq<4u8w%BE--md6mf>Rv0dB1tqi0#+4ZXVuXF^>7gJK1r=-X016hW^ZRg6pp$|B$ zPhj(_QLZrf{_tvjonYBD%Dqm`>~bp;5THWFHG5_Rl~$YdO^4ZpJ~FMTwO*W#!QStE zyb9I1agll>#lCHte%A9pR>0q_!Y_5}iwi*`L=&4bAlEj7*GRnle814W!nH!~_?cTJ zo3LY-vdJgw2_Ljy13D7${0(9);$cbQX_OD)`X-2HET+cjh9~=`J#g)M!E=Dk=jibH zfZQ{2=r;6+^8+;@BoYFzh&NA+9%(CkdYtJhLZTPlBgGgG7s1s;zLrLQH0AR$Mc* z=U9rYN|*x?${+-W;+rTi7(D{EgT(Yum=v+p4NmNEN#!vtEzUdHMy6*7Y>8ezYZKLN3d*|BFWudUeHOTI z_(`sxuK2^Ql-~LC3wBbt4(_M9sJz!@)&4pK7M&GcHiP9@>ZQ=MHHQqx1uayw^esk+ zH&N9ptPD1ECzUoDCuvco|U{XVsoQ`-AI$-8^fyCmV$MCEXyEqMk>&D|S8kOs~0M+y%cj4Brc zCI0g0A{hw&S8j;EEzQ zW6M^`W+@MZMU;gs(k#yg3T!yjNjoXiROP+n>BEHs(i=?2t0~@rML#Ldn{O7l*-95E zdt-bT#Q-z+5Vplr&O=uoU0g5lE2%+ClC})bRml_Zj;za&R)crIWbc>8<)c{5#|ARe zVBCnV^p-Y#Ellmf&c^CzDbtzMPfOnuP|#3i0&}teC7~CzB)jCSPATmj4uChYl#QQ+ z&T6W)gcaWI3MhS4z|>6oKh>&j^t?OmKl;N zP4ug|1k?UnR6ZNj0U2Qws5-`l8h>zz0k?X+`63T8c%_4a_^9H8V}5$fUP_VvkOAeA zJxKs(=Fp&lTbO#+$@K?v>k^nVL)Lt))e{%YoHac2@>QK8Q%}RFY>r(wkMACa+&t&p z4F1`&a?%AqAmpU;%-YFKbAAZRjfjs+WT%E_+r}m!1W}4i>_li+)-0D;4=Inc7a1is zOPD1`8)3#WvK>e-f?I~%n?il4sM>8v$lW?}%JpX4SMj@=R1&z~)d;(qtc5wsH)B{5 z8y_?$;E|f(^^konhOBZ!2kTQFovRyvctEWxm?2ZMLQnG>${ z`cO?di4%}o>WZW*t`g1WQ%YH$Gv1rJkw?rM zhIJ~CqzsP+z1dyj2n-yRWD1agk>d~2<4(84s$HJwWIj374+Rc0)7~ zXf@bKtUyA;ui<){7-}S>5#q4;zG!ir4R6T=y{FzX#zgeO>b<|*ElSI$o-IGkNHkqa z%v+$}7i1K@u7isd+;QZ|J}mGylqYLL&6O`CIvmCJ4WA6WQCZ9mOBSTyv&tm%H*O*V zPT%GY4kF(p^9>C~%2>JpW{!KhRVtBE`imHG=Z+3>o8FCG;Wj;0W!^h8f#Exc+#j$a zc+7BK1NKEZLPS@U(ZMwOophQZ9gpra6^(c-@^n3+TBrHf34dx+F<845o@IF*cFcPLA z=ZO9iz0GV1IcPB>xm1f14s#?SoOnfIi1BhJAM^qbr%fQt%Pt}9$Ie?hd5C_|UWniG2<2HvD_P|8cfwzq9f!uDahKAXVP zbyFiFZZYoziBk$$H!7o+!`aBB%E_F^QWS4i0roO5p{H?+6W0G7rv%vbE(z>PWX+rW zgVo|o=F==riOrUma@VbqpicZO690SW1cq>FPlt@Qa) z|DKA!57fFN|M?`(=0m>(vOh09c>nDUFMAl5H~A_ex6kR$T^nL+S*?(p_k>(tGz0yO z9%L%dD5)TYvsdYP5Lxb!y7dS{*!LcJXtorqxS>LcJl4d0-(`i~1qZsZ!DXYjkibBJK0!Zw@xlHZ#Q0Ct`~~r4VPR$d3p4&V zp)U;o^Vk=i1R1+PdW4XZTMS;8(1=*Y8c7(7eOkP$+|Q37;+eElFbX-)Pmh~T`vva+ za=IN2ne2E z<~ReqhV~lWP%Y#whZ{`gI2NciR zrx|SLZ3w2H@IGdUy`OGhPo61vI1T(t-vl2)Hm+qJWdX_gNT-U=VZyxc36obEJDL8& zA-p^l<23wMxIB%8fsxpuOItWuWwR-)XaudFbYEMq= zlXJy+fS~UI+*Sp_kw#8buQ`XKRCh)DktYv9NXrynn3# zc&$P4y8~+jGbaEO<6pfA3fj2=v;Z^=?2JqRnio9*7#JB}4@~p`onN&ifCknUMgq2G z)+PY@UlIW)Ba;`hg@cjlSN3&|uX!3KdbVEzAp?7H6ALqQ;ID3eiIjjQHmU&j-|b&B z;(umd@A4%Y%j9*;U$n+QNSRmm=9Lh6rG5UPlHdI~8v=jPG|G<7Ca-0`q=E)cCck)~ z|5`n-q>Yfdf#aWgkT&=u&%pQxt@BTs2Qa*@&2PR%#P%gr%)-_TK&NJ5D`4wn@u%R| z_-Yo$Ky#-Tb+R(B&@!bB@s9qF79$B@UiU@tqg)yhsS#AGz>nVQbqZm}-1OK^Rd@?dQ^e=m^{64xXznIj?5 z06`KYT*&(9e}nS0`We0evJ71SQXHmK@PQw2`r!<`K8b=T|rA*U?PTNOjK+H0;K zUf18wn_@NeK_(!~1VVad_LRIXxTpxA<9x!Gs6u7&c%Sy=zrO>y#p1X6{`0dLVwYY+U}B)A3=(`o2EaOyP-YDBMU+Mg_Fa zAaPBI!@HH!ljy7w2$rKGkoJ+C!zu5oMQtu;CHRa$z<($@1zpY?w=I&N4x!Vi7raec zVKESSQkf<%TO=DDa*tkEAX2zKKPO-EMZlG=O=Q*E2o+{ILW`{PH~ zn37oE8*hn07Z=ki^PSaY7dAF44@ovuu9z4+p4o<*^bXmCa2@W#X-~Su%S8ii6r@ zY+><;l4I32NJz<&d?v0s&sMWd^Tiul`2wfhd&wmu^$s73Vtbx%DcPLnk zclkSfuGvKAVi8F<D@J??Dusq;ps7C8-L~@rWl*;P=_aMAR@qO=CQCi9BMrhEp8u zE9R(S9ZwKV;9kx|$d*Rjf&6jywf1nu#QlM>rOEz#O`XpM`u%s(tE1rJy=GxlujFy7 zn>LuYD%#;gmVS_8JWg9WCg;(vZ!!EXkTy^9cG^69q6A|fd zImBM_!x2myv_T;q9IC+#1A+9#c4Y_8p_{RW5bzfPXA)+vExgPw@3mQrk~c@Cjg)gdT^CB=}U4jYVeEQ%||M3Fw%5RQY6 zu|eoOyxe9Umh2#e{YQ=W$Ok>3wG(+a5kwa^QZkGMK z?$Ks#^lMJ@X$m@LH8>)}2r@3dP%Yj84|I`kM*C(gRTXh)Bv{tqm@siY0p_&KR-4{x zboK!Y2!#vnJh#Hm8-jTa6}ma9c2{)ls9R*k^e#aeb9z=$fJC~$ zk#^}Yix~v0JWf20*UL=6>M5<+4lHIO1xgTy9wo|`rywIRTqt^b;%ol(cJMR+)h zK?|9}$t#wrolSY4W2P9)d+8!~_1nqK(NTlGiWJFt-HyG5h7ax|$xpFr>N&yVN_O5t zq^){Ob%RXS$rPq)E%1ZftS{@bWYLlFQMu1XC2jTU!-*69fs>tHi(n1o41EEXCel9z zC{LV(TMSNX%zJm{4c8O83sXg-LwO$x@&g4>&YWS#tMFshVxgD>sf3nIMi=ZB= zPt4}+OJaLTNPS{Q9#OGNx-Y4Pp4amJHOcUzman`alU?3$;C@UsgRbvgU66}(&8J}9 z?uA-O&9Ik?IyD)xR1ST^xxtr|t90SYW_i?TX`<<2sPwU_MtZSpIzDfum4s*50ZN(| z%Z)cIKREM@{728Dr!6>ecBy>JB-Zj~<3 z%zTK+<_+ge^*({;@i;NfN2)j{Nd0Iy$03{<@Ue&~oA_qB8vspDH}-5G zc%l^K%&(5_=kkr{TC>rYGx|ir8>!MUTFQv8b_ZJ8DZ0J z>D@Ezl#7LDD-0!RU`#ZYn=*|C9Y^Ew4=nsnt@G&emDs5Uud$LJh4`a}aQL0*#$Rn> zt4N!=l^zXYTyMurF1Fb5q>6hmdyvvM@vZUmsFN91z0mE}MH^hw>T-I8U|chtK=NTI zVX*vpzT?3&qrrfU>TX66E{NfQ-G>XU8*C!G^@7IrCns5>AD(Z;c+kWJVi%DWW6cD`FX%Sdoxi3Ci3gdzq$+^x{ifSEq$2;b zB}}*vYmo3W&Q&>DJH8+hH-R8grqHo>V}9@ zC5KxtMmle?xFhy6&j!P;raMX&ildrIgM-G~fam!e^Pdm!AKtceEwY};g$e7DUh4Tg zZ}0_NA-OtxRo{7tDHRUFrz%bm@4gN9@q&CFj6hQL-DXkQzsn#H>3WPDzrO*%Klih7 zg0&#?D%t@k6QJ-%1QAF|-;aMKRer2y34ES2>E!#=k=?1LcSX}0)BWKw2npq&AB2l_ zM|qbx7i+CBic)AY+gwaIdR7H(O4g!fuBt)>TxG?B$(hEzVn=hDr2>YMIiJ>|4Ys$J zZcn$LB6r*MGrZ@|-RAW;Zk;nviFTY|dC(iolPdCA+{xO`#LeJR?>FGy5vLKr4(9Sp z%dE1cCD)`?cDh8Vn@WXrwPKd{Ngz+~k&2M2|Hf&3HG=<$O=DzZX88+g_hxyMNi}$PZg~(<8SYP+g_s2N?dagdl9bnSge_1Fdn{fwPn--wAx?t-;e?f`m0S zGs6gdutP$SN!7_xbZUkSMfh%H-KM@`x`+}18C9zGeYp+`o}stfAdlQd=me8oBSG7 z=`T>^MH#=Lmj9VD{sb`qbbsC-jrgw~e?vRQ1}_lJi;iEBjbCe`_!}AenIA+_BEjP4`AuPdwr80$2#t`n~ z2iiFy5r*KfrY95_`P}Q29kEKnUCa42-=iQ>cj3X^f!7cTfC}m>s>HSFYQ0(1om(OY ziQ~zr4Q1okxA(i|)m*NG?fkG)Lw+@u%~kkLI+1w{OwK)xNScY+{ej#JV^ z28D0FK5$Yv?Qpj{4NZ4vy*=dffg~SEBtE%ZnAVS2%IrLo0k1cMzZ#lhO3SPTvy2k+ zbG!55G$E(rzVX)bf`(408+4bmN68$}GQT5gD)fjl#2EQJ@T$Q{(sQ6cTMSI4DcsFt z(6`14d%L*er1B!dRfY2cJPa$q{@=Wf{tiddv;X;GXZ%+