From b9f9f6c12b1a98ce76e3546e9f900ecb45e3c95c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20=C5=BBygowski?= Date: Fri, 21 Dec 2018 12:23:27 +0100 Subject: [PATCH] mb/libretrend/lt1000: Add Libretrend LT1000 mainboard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I32fc8a7d3177ba379d04ad8b87adefcfca2b0fab Signed-off-by: Michał Żygowski Reviewed-on: https://review.coreboot.org/c/coreboot/+/30360 Tested-by: build bot (Jenkins) Reviewed-by: Angel Pons Reviewed-by: Frans Hendriks --- Documentation/mainboard/index.md | 4 + Documentation/mainboard/libretrend/lt1000.jpg | Bin 0 -> 80098 bytes Documentation/mainboard/libretrend/lt1000.md | 117 +++++++ MAINTAINERS | 6 + configs/config.libretrend_lt1000 | 5 + src/mainboard/libretrend/Kconfig | 16 + src/mainboard/libretrend/Kconfig.name | 2 + src/mainboard/libretrend/lt1000/Kconfig | 55 ++++ src/mainboard/libretrend/lt1000/Kconfig.name | 2 + src/mainboard/libretrend/lt1000/Makefile.inc | 7 + src/mainboard/libretrend/lt1000/acpi/ec.asl | 0 .../libretrend/lt1000/acpi/superio.asl | 0 .../libretrend/lt1000/board_info.txt | 8 + src/mainboard/libretrend/lt1000/bootblock.c | 35 ++ src/mainboard/libretrend/lt1000/data.vbt | Bin 0 -> 4608 bytes src/mainboard/libretrend/lt1000/devicetree.cb | 298 ++++++++++++++++++ src/mainboard/libretrend/lt1000/dsdt.asl | 25 ++ .../libretrend/lt1000/gma-mainboard.ads | 17 + src/mainboard/libretrend/lt1000/gpio.h | 189 +++++++++++ src/mainboard/libretrend/lt1000/ramstage.c | 15 + src/mainboard/libretrend/lt1000/romstage.c | 63 ++++ 21 files changed, 864 insertions(+) create mode 100644 Documentation/mainboard/libretrend/lt1000.jpg create mode 100644 Documentation/mainboard/libretrend/lt1000.md create mode 100644 configs/config.libretrend_lt1000 create mode 100644 src/mainboard/libretrend/Kconfig create mode 100644 src/mainboard/libretrend/Kconfig.name create mode 100644 src/mainboard/libretrend/lt1000/Kconfig create mode 100644 src/mainboard/libretrend/lt1000/Kconfig.name create mode 100644 src/mainboard/libretrend/lt1000/Makefile.inc create mode 100644 src/mainboard/libretrend/lt1000/acpi/ec.asl create mode 100644 src/mainboard/libretrend/lt1000/acpi/superio.asl create mode 100644 src/mainboard/libretrend/lt1000/board_info.txt create mode 100644 src/mainboard/libretrend/lt1000/bootblock.c create mode 100644 src/mainboard/libretrend/lt1000/data.vbt create mode 100644 src/mainboard/libretrend/lt1000/devicetree.cb create mode 100644 src/mainboard/libretrend/lt1000/dsdt.asl create mode 100644 src/mainboard/libretrend/lt1000/gma-mainboard.ads create mode 100644 src/mainboard/libretrend/lt1000/gpio.h create mode 100644 src/mainboard/libretrend/lt1000/ramstage.c create mode 100644 src/mainboard/libretrend/lt1000/romstage.c diff --git a/Documentation/mainboard/index.md b/Documentation/mainboard/index.md index 11f964f34d96..970f18f0074c 100644 --- a/Documentation/mainboard/index.md +++ b/Documentation/mainboard/index.md @@ -71,6 +71,10 @@ The boards in this section are not real mainboards, but emulators. - [T4xx common](lenovo/t4xx_series.md) - [X2xx common](lenovo/x2xx_series.md) +## Libretrend + +- [LT1000](libretrend/lt1000.md) + ### Nehalem series - [T410](lenovo/t410.md) diff --git a/Documentation/mainboard/libretrend/lt1000.jpg b/Documentation/mainboard/libretrend/lt1000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c450c4add354331ab951955dabb16e0b8794249b GIT binary patch literal 80098 zcmdqIbzED|^EVnOQlQWR#jUsmC>C6byE_Ca4nc}Lv{2jw1PE5#p#=Aq;uLo;?ohly zp$~lI`;&X0KkmPG_Poy7?Ae|7?#!%C&Y#&oKL9TjWaMQ4NDst{#0miXSpY}^FwxPU zqN8Cxefks&6B7%E_yrC&HVy>=Aucg36+Imd6%925knc4EGY>O04Tm@yqbinwVnPxLc7Vc#^KaKmkfoi1WKhsTwIb@}1rE zTt}-;Z0N1~?GC_JN<|ZomyvQbU0ehpNeFk%sPfXE`Fm?|f=WF-W9nj;-RWAXRN;j_ z) zO83g98}>zQPhNd5BY~k_$TR#27I`>QxFn#L$vXoK6l(8K95ErQhygD{lvO8^ z_?L+kMT$g*?M=UK9c)8Ht}I6Ita@syU+PV+6ba2vh7|hv-ERCVT40tH&G4t1xboem zLi=7{J-2S1$ovX&;Ne$#Vn3h#Y3gFR{QO51w(>XJix z5@lU_x*z(x>1q7F>$Ou78&m#k{$>@{dPk?bx6*fyh#=wErc<{R z-ekD7U0YTgww#Z5U91UvoBvi^fDZpfy*cj;d+YFTmMK5CmaStC=kx}zmS5{5-UA}7 z{!VPif;Rmrh3*5TJX~(9gl%*Mn`VkqY=&Gl2adT051jX+z^#^>)uJbFS(TmI-32bJ zjf?zz8V?=;AL;4(&|uTM*{|!qCp9Da^YLz5tst`=5pDLWO>C_igOwDOl{ga^{;kL&SX z^Shn($~S2J6vNoj>Ci_!Byw*OOF@|p+2q}b+y=18aLvs2zW40v&zfH6BO)0tB)(c}jN7u;Yo;hU%^b(6QoIM~f@ru5=uu6Pf?d_* z93SOZojQc0YwWWBN_OH~#kP6eXz6ZYL55cAy>VCLB++n+Bupl5~Z)(oF{;fTPb8wGAF!eD0v9@xfqw$mR;ggM44#dKtCn4KC?rEC- zTjqG%LK9VCio*fMdwi~2BQK4(H>TT84&HD*6tZ~op-Dv_!%?7(lTSpyA~)OE#|bq> z5H@h>*w~ZdPnlknT{7|+fCL(nz|XaRC;&i}97$%49i(4i)!(X1we#DvUt)!T2vxTLOeGg+#aB$Ob3WT*ACv7FGd~)pD;fTMLA-lQ8AfYGrkT3UOL&fg) z{@D=#V5iGr!1u`eNgAcaXF2`XT18R2Au!i6P87Cg-aabFdo*uX!Kg#7V+Uf<#;|hSl z!q&z%uz}O9LECmdW8E2=KLV%@NQbukuR(4^A3@^C?nzP^e75etEn>nN$|~0 zjLV_<=YM$%RB!iVV1>zq1s@I!yW6Q)swilW>v^>`txm^{{+x}oj_<<@31)c1^^DTD zkjdH`v8c71aW*++zj3imcw$|YHSC#Ydra`_27F^1bIYC;up;`yMwbhFNLi8L%hn4b z?5EM0nke{h?7V^e^YFz@t085l^8WH!WnD#T7|YHtfA=*VFZ0e^P}#wvUe<`!04AHMS7yw9a#jDd^{(v3FRKTW3-HjS z_ZDYuoFl_$mb+%trbDobeBWN~N(ZMzRerG&V1Hmj!(bEd>iiG+HdY}ovAUH zd%dncNZydky33|Nmp@F|&V?M06mLNSIBVmU6r3M)*7Y{`otie=AIM5{ThG<)H53h$ zmUq|(U0+>L2;ZsrzX!-WE7WqiVL#$ zqg?#7-MXj0zQ3>EHS^pE_C^DMCZ70;(!5Ggf3eU$PCZ5s?38r{5>ymg4TAY7e`|NO zScaUf)UAld3cd$?1%O!pn*P78I~V($P3(BPFZ;inT=$jo zyXjp>UR*JZiho9+0HSVkWPQRQzAb15^Gs*$fyZxa>N^0B$z!40ChUV~K9E@Gy3ZW1 z`<~wZ*}o(86ZGhzi9)j*N@YxA$H~^E3jIk$Te84$-URM>H@k>>Up;;eyqotQ&o!l*OCU&X4l;+ z_T@4^-_-v?i|DD_ANfaYszdWrDHot=NFuS4wfdkBXQrcVZ-;DUlfmgtzj}o$B-BOa zLzCNRt9G0+33}Ro7c=aNz^5hg_Hyo6^s^l#!YfLe!*}G;O}RX6wb0c*RQVcOGTP=&aUA7K4&ReCv24&d&m4e zC+zi7GUmK0BF*1#D#X7P$Ko~x1Nu3a1WxwW8DYDxhUN$HruO>>^OIc!vN|Y1oUw`9 z+7MgkOzslRsp{G7l~)fak7QbwZlZq{&`y5u6SS6{J;qREEgGe9>b}*m0GnNODad0- z>|_e;#zYSXG!OKK>D826MF2RScIk^u0tcJ~trZy}@3^*`>}v?FGJUU8cb`*^Uv4(A z*Ks@AX%4rAsZhlJr$-@`Y&5&9Uu?JY4R256W~PmA%p}i{&BFwaW30v}E9fV0o-J{Q zR2tU^zF*a)8;z%a_oANW$+C><>j_+I2tBOwB*PKH5VU4MwJKo%W z!Q%Rqd8BC{M(#2zjJAWMin{eM)4`&eGGAb_UN8LiCzQIx`+W0qo58)^alEiCisG63 z!!-9dxs;!skWZB_DM5rq7mv;s(}%mf8xaC;VHME9CK_qumaK}ImvzQ^g-Z5z#zIz# zxE?GsX@|YU^L8%E<^uDEV}u3ap`R1xBpaA6VpAwjC_`dm#<)KOr2X<`fgmnFx?aEElE!~V5oPsxQF$1|GSca+`& z?xQREJLcdR>J){JIAz0ch8c6^O({7m!F>81vYd0uu}@9OGDk)^q$q7^E=m=j4iH-@rLGNv$843~_cO9&zhOnooDIoWdEjc_{V+9$9o zJ=>jaIv2Qbu6iz*s<`B>JW}Z|>LB2rn5`h`#`Uvz$q*+3KzkJ|W#LGTbmmp2O z39>pkxKP0WW+^Sg*3~qbutT$C@qQbo1j8`Z5Z*Md@EpbmB4uTqjTCZMfU-h8`{Y(F zhvb}F?z2HE{^TOY=|$;vv0ngOW?R+Nrb&+wNNZOkQR@3b>>5T}#zs8Db(3|lr!c)4 zjVB;veVCGyORFbsv7=cHF)33>CN!qClG^@xw+*zO3q z&uGK6Qg!c?1X&z67bYfsI?Q^=pp#YRXVZho0G)=fzmX^Di}hjaizu z8ZKZ-?+R(Gb(9eYpD7@uzzUh1CRslrMs#r+&-RQ~Gd1+f7yN2_m7U9$vqfx8dsWRj z7yi};Q#@e|w&I4S!TYC{tL6q;{X@%M8w*3<_xiDu*7TjswdWVW`7FmTb(WypngkI_ z@lX<4Mj8$!8NHhHg``%WHEKZ$fuqmsIv0Y!{eLT8^UHtSx!7bBZMcZMp5cPbxvkG{ z&pt{i2;eATuLl5#Q~HvU2rO}T%L`g9*1JN^yNtY5d#hx_!0ejnuP1s1J|~*HUGSv% z^0HdSC~fN@6uH?1Yj7uF(yjVE2b)Ank~6UxzS^79S4uwQ?mxKuQ!vJs-}W5e2wzwR zhXvYB#6hx6AI0`ax^ch}cSvDId)fwF%TS2bw;3|&#RYJ)t*K&%lIrW!!{HH17>H*m zmTgaSs240hqG@ZQ-%noe>OSpiS-0)B9lei&SQsjoHv2wk01+I~#wiV2kRtO?~9w;I3i(p+-REb+D6AuY_HtLxloK`$Q4W%-@5N*5v47sxknr$yK;%+sB=y zAFRCY51cDEU}1TX4yRUb-7Udz;uYc^$)5us4iuhLdbXCq*U7%{PP@(| zole_Tp5*63cwxh!g)@&IH(usK$v|@*LJaF^+il~)BFYibF8~w^3+ahh4`O_xnaMYh zIyv8To8%cK(40my2{izTBtY=b7Tplo){Ybvdpb3KwpM~xa&h|Ug4w)eEN(r!O$9++ z(`mcdJyGq|Jcw<54hTD9HgeFM_hUnyz+C&xzruR}0HB58c$Nt0DIcsKbIuW-P*Dzo z_J@~23i=K3Oo4OGc8?R+6h-eDM*W>3jqXUpOz-LOW46&{kDkx6tqUw$JBlUgyxVPC zr^9WW?I)C;?RwmLNf`Diyyf+Fu}+BH-nxgq+5@=^DVvw5Z<_+px!gXCph3c#teEw6 zN&8)^M9xY>iWJRl;V%^izhm4JAS?3IlqPGj- z+nH9&KR0I>o~7}PJQ(ZwP^(==gMC5zzM%8I>%#)f!BQx7IOj7DEr{V^2ltFpQg5@| zAmx+hWMZ5$&~b5dyV#vjI@1h=Yant`u_BYrio|Z)5W;hP?6YHBKewg?!P9E#!iw-v zZ2k^U-n2Gi4~XF#5E?Nz1F~9c)i@mUsJ?Zc`)jlUu*4IylMa1I1Uwl$CNF?+rCaru z6oS|b40$&vv=Utk?bAL_V{fg`kf(8Es-%{I40*R|Oh_rG-9KlEo|Tm}fs#SogSo?n zHHuzvyDE{}=*uwh?-XOuz88!`Z+%|nx8;oJGH8DDuNm=Cicfmnwg)$7@@7&D`9hj9 z>}a?ICy2DG%cqAcAmm$hgO=0%<=xWhuV@iRH4EE~n>Cgc+Xd+q>EsG|tSq;oC>%sCZ_Lw1RZ{vw-J}6WKuBB1S{fAN#`X{=Avg zGb9(O_Hm>z_sG))O}rhatm^%wdIt-E>FfQ%CI|)l@3t$Px|-?bCa>7VwiU|SZTY&v zFMHxK)*{uFLXMoyg8P-a7b8tOCxrz{TEx3ig!jKj? zUNZvWn_Y`3WJRjrRd{m3v&9*K$+E(+xy|u=AB#tXe+jvDDk>h;yM^fC5JQLk4Z+p{ z7|BGax*W;avHJ_bSqteGz*DOR<$o9Q{}e;@E+cw{dFH_mAlNDgzXuM@HX^rsn(HCA zE=9cuZhL^<16~X{raw+$|Be2G000i@H34+ftKXse9rb+v3to5l00IC|!>SMLQc12C zKe;jzR0#)Dj> z6rR0Mo^AXZZ2JGq@tDGtJfygZub0&e~+=W=P50sx~MsZmq!0H&MpZkH)N_V+H~eR(B1kp)jXw6LR4 zfBr`tnB#*M??-W!6qF-htq!KsIDo4C!yJiZbrTd7rLjExyQgWYe7(M9-Ao94$F=Bo)eDShUG~X1 zrqa79ckdc(wY5@q9(QE%2RT(y3{5bm9(Rs73Ob)3E)40Wm?-wP1JS|5o~T_L7xB8o zzwfIzCw8&YJe7id{y};=f{M`!hJf&mWI&vJbv*?;vu8r_>DE3F3bP}&g0IX9!yRBt znh|->2)DL?6CKQ`W{7Mqe=&t%^KcqzhX2fuISuLnn0AcWmb=iewhjmyR#KmY4R;xp z0AKxufmVb?^qmjX{Vl}W2TVG&wXT^%HUph3g>JX{tj-&fv~gz>>ab_*+_sLT_3B(3 zZnp$H*CuT$nN`7t)x}sV?Pr4b^D-UuVqz_pAkhg4_&tgFWSjYI;CTm+wIJ6z8o}8a zXCb41&J%frFJC9P&7Ym4XV;h&q+3@uZ<-lT%C#CP*zg)p+PL>SS75Mi+&!mu?^QZZ zQ4BK-FuqW6ERq@KGv>P3q+-8yUwtl`(&UkBBkf~d4_^)9qFp?b+}O(~^R2k8w7-BF zZk)-Jj19Ng?s{_lEkhaa=-Kj6eYpWbyXwNzLu-q!dKLPNGNIG+%`JUl!xZ=Lwq$8J z!I}me$GoiDbkIF}Lxeme*)p1#!@&x_ddq0Tva0m-#HQ=3 zC+I{hb*YoE{%496cBac*wr`LvUEsvvkNwI0NhJ9QGKNSFizP0L&OM~+MAn^gKBa|E zyu4h&K&Zr6-QU&wzuh1GWZW+R$VeziNNA`i51y}w>(LViK*7bsr$&A8l7^F;;1w+g z7tb4U2|AFZ8oiWh{DYJ1>4WPG2^IMd;0w%aHP4%qW7+->;HG>a%Dr{HvtMRzKcOCy zg5E7Ju_xh8uI4$)4egP3)CZ>RXO?B|48E%Ltn@5^n_GP@9R_=O!WOW-UvUi>P~p>i zr2(_dB@~0Dk5HYQ!Q+^GXiY1~x^{70iW2iaHjX+?i-H3;XWZ(I?*@fKL%#i3R7}^l z9qmDNt^hkd`;Y-OGMJX63lyucu-;((RDM$DLY>0`LVG3(S+4h(068d6_HU+63kHf{ zGw))z$ZNiN%f&3=VHbkc+|vrBl(Imw1d!R95sHegq{Er*^JNIex?a2{E$r%g>4IsS z`h>%d`$eG#4?Vxclv$|wimQDC2AK|0!e^qVc`!j+v}x>GOOBr%uMYK-mHikIT8 z84LnX4z;`uBz7gwYh#KxKp8Wd>M}G@8;5k`dIdwW4t*(v8{%ae_efbBGx(A6j1~-L z(^sTgXTbE=->&dw2cIFlSct^SdZ#wFaMVUpPjvdFztR=^-v$V9bD4hu~=CAVqJ_Y+2h#;nh!2_hwuTbaha zq+{<9^BMl4(@Dzz&kVRY`j z)vAZfSsiPz@9S^d7CLuP0is-BX=k3ehw5u|jH6W7PcHO+(8$2h4=Q1xxSI>^ecTQUtSGW(ywIKfTtc|s@ap1H2QA?|# zb0|+Eogp2>)v>}UnzL9;WIA#F-GXZTiY~l&;qF@i!<@7%Modelq>M)~0}S1F+7+4g z`xtg(2px<0s(oHvBUIK#Qm)tIW##bb+^(v%GcDy1tewo|Il+DIfHt$GH$E}@MxHe% z+Ovr-N>&3uvN2p`#t&xRH{yifziPwAqIX;sFU#d7w%(!ecY6ZqXD0`vJmmRL`G?flEry zgY5|Ak}6DPw)BJ1+NbhUNe<4_q3LtJfgIt~YdBj|`oCF-q{oD^ETYe3n}^6|xNNMW zH3zC^gxyCd`}S$BczKfEL>HGBvk3C3N1iyZF(KGh%xZU?FcDzBP4!zVQF(LHj#Gnz zvnFAut6Mn-Ps~03JP=!>dM}C1#H+9Rnd%!{thh+1Kh~=#UNblIVLqLNd*#MIr7mN& zy|M_&Y!#SuAP^7U`Q=(B;qfz=5-&GeCPRJZrTaGukKB)qzrsf6Iq_Q*<-SMfbEdBG z3y<~ard8K5v^pwjyq10&xd5``g)>++jR9jGf>b3>1zzL${|;4ehz9rS80&~Sh*o0} z&m^j&tqYY=tSi}cUw$F9d* z4qBxtwqNtc&c|Z>PzU4*f;tc~p=?2nnSNmyqsKS%>i+aey0*CC^|=27SZSmB{r=+R z{dXpBn%`n6mrOpUqgI_6L3t*6*~Mfo9s!u9I;j6#n(TwCYgNzS?*X?BD+SSt#*Pa0 zcZz*$Zx0TT=;S`ze@I&r?rhymOU*YQxQ9FGveGrxiy0oTkY9#f7F|-?4-yrfG4Aeo zidA70zM<9DFyKh?5wrFUY;3#Ksh%obxWEH?g?x?pf+u_3C&wV6z-!ApwGm#Lyl$nm zu-^4UyQAakIB@O{z-i-_Gu|R<;ySUQ{q3lyz_&6Be)7Qn^I_}HuexuejwdAfm_4T- z>L!Ue`*4oa!t_nPGI&t31g!aj5cCX5htu1#uPh+(?sim^`mUrc90|YIj&edtG7;fxoC6P2G z{S3(${cl$;#pdI7*X;W#0$<+*;Awf9(_%$Bx!6ZiZd={@Z-kJa{7@z%$l@(Z&}fQp z2#=#UQ|RXlPt>>SvNA78D1%E=tZ1}X_#4nj2r2EpGXcSMCR>jtDRni;*wCc&-)Tn7 z&8vfx%35fC#&}}7`G-+d$+uo?SBZG8H67uS8;dT;e9`NOZo>8`3bM!p}FoN z$eZt&dn%SfmnP$jXAf4aFSne@8~Bjr_T%}ShmhdC{Z1qnDNCyFdb)rRuwL;pJM$5N zdBauv-S%Ux(Ge|1dnH_UIz8PIU?+fHKI zhQ^Dfb}DlvJMR10=)X8+W4f_Qp^x19@x`3*ldJ#j0nXS6ye6C`#WrzDR_9KzH~EVP zDJ-zhx8|O}{f&FIA0xes?q8QiW|)xO6`rij#_0L&hkW|Ew2sL1NuQqi@J*`(Es|P; z3?@UbLD|=>{>Hj5EnpuJ)HQ>OjncIbl|DTTD6627#20)QG=}}g%oZj|^)sKOqCtMt7mS&Atk#MeCBh{5;%Ar@+8R!3x6nEz^Ln4X_(p_h7#R4 zwb_8SKo%NwOTTnP_zwUG?y7ig$^fRQsCuf!~Sy&QnO^`VGsO5&cK9N5b|habOJ*mBz$t#MSN6 zGzfkpKLQoB&^M2W#*<4k)XHzP*&&a;t@#7!{{t}J&HmIzZ(`sy!P=;@t|v0rh2S^X zBzQPqJM4w({_cp(KBfGel`F3Cja@=M^MYgG1)-F1l;W5&aA%xx2G$D&lAm7Ty>w5g zT!(l^adHgtNXV0_qYg)4AYZNz5=2*EUM&UI-kztg!(^T4PolJRF^*wR^w-lD)bI<0VeaGK8%Ra7u;#|gICX;^+<^g-fjw>fNZ{MX{ z@&qbVZHT?z`~y%DAv>vjLzEyC*TSh&(Cy(=cUH=B|7EyG-o$2iwSPoGNuBs@f?;M# zoP6CvkirjWYrpaq52VokJ-+TIA~mg<>e7R8u|XVxWv`$)B|mHT8RNI;NdkT=J*z62+~i{N#^~$67{)uu>%$>j7D!=Ziq;$ zVzgePHAW*tafFxDRxYY$3AWasr-(Xj&?Gp&0Z_3Oqe^bm!kjW|JZky_fZXl>0aTGa zVY!LZ62j+uC_D&u8i=d z`zE`9rI-c{i)6}faHK50xGz)e^!GcvMv2Rlx#!rcvx4W>FlKrnb{DlLbT348rdF(t zYNG4CLf!Aaz}{HeUL`?*vw%VR+`W^CE`dcDxmDwkGkhJ?1Bo7$0HSBhgS1j>z1MFW z9MwtRF^NvW=L^kViNV>w^yD_Pk=Hg~#P7%-T@=9N`aL{Css%3$vQ+3AqA>Vif$wBRW5;!gEFsCh~fcX6VWQeVhZOkw=un!8l)iF2S)@r`vyrmu}NXIxJzQoBA7;XN0O;~flAFID+G6)JECsYBi!Rogc>l9FRl zYNM-q=0q#!D}2z=bf|&4+*uDw1jofhSR}E!RNGM)CRQ<~wlj6e%%#eQ;OTXP#4_Yyb1Ol@i8Znv9W%xvpqr$5W3N$C0H9G`%gh{^v^CHU!(nUlM& z3l2g7y{?e+L!5(=eFdg8|Jw?5EB0e?k33Id3l{iJJ-BH3(9bIu@QGU~I#2s0fo&o* zu2E1OQ2ixW+I*lalFr)nYjTu95PSZW*dZD5H1Ml<%^7zo>s2qNDB_+sJ7p8^I@nag zC_L<~lGjQ)58Bj68w+W4MgXZp1WoG~2-{ zWf}frx33FwzTy;iH012pYVhN4Af$e0BJm#B=%7-vnVeGAT-!?4d7sTK;UCp@Tb;OB zb}Kr<>h0wPA(Pb#X}_cDeOaIr{x5o`iksiu|fl8#K;70sNS1 zy8=hB_sNC(jXkq$wnC z^S(Ogds?@HA>3prGTA~>`JAqQ__Sm*ksPrh&&F&Tsu_PYLY;y^8-JwJWHH0X5cNIz zJ z)J0ui*?CZp- z^2omO$h3>Xq}8HSU7$-uwoY0%S%lj$d(Ovjn->B7WLUd?Jj*kg;O@sQzpBEy1P%ikm1)crgK8(WFn|GZd|Ct?#w4Hw?->*V) zfbKUf8!J2sZZ)`X5c#Emm_)Fb{euZ`hPW@~`#XueAVfgY9-)X`6;Wc4#!;U#BboPmhVMc(w^k1qWiFYe()g9I4$8q z(KX_TvyYS%t0}SX+~)j9A5@)f>ppH>{|y(7b)4YklJxPi#|IM^GAE8if01 zEa2oEF44aOdAX{inEj6VWl{M%@6;IUCtkBQy?JrW?mXm}8Xw>1J71sZ+_7_RnJAVA z6J>rYcAG$-OPMw4uN{&+Ub;OHr0#M^v+U0qtEqZNd<44tUH1pTxrvya`hrZEJa?b% zzJ=SzFpt)VMHMbCx2CZ1pTNa{GEfV^PS7WKE#o>#lO+9;IGAfIU%a9U=G`{%wUFRN zUpM7G_*dMf2s^+!o@G3Ixo&TM_cekHDSy63XUUNfwX(KbCQAbaJ6MkgT`IcTC}|a8 z0qUmrE@qQ+b+lVAmlXKyuKvGvV-rfbVuX#h7k~{V{B41)^0y3*;g z#|NGG_?}cO)RYQ)~IUu4{){koZ1!X3a*;?n# z!eDV%gFdUB#^WH|g~u`KJ6LAfuK5|QhuyYaJ5c4Bhy4*mevCq8TQVcLn7QQyo? zV~40TMq7(y@18ZI%Z79C4(J{$x;1x9ITG)Ove2aw61=06E=Z8ZfM#j0>mixtMCWO# z>b$AtSzy9~$QDo|L;X16f*S^S&$7!U(6IJ=fVQyYo> zu9E+~Fi?g7v^t(3L2G9jI1X>TlzHr~jw{hfMxH}B$6`EW07cvHNfyLuh9X|Wa_Quf zGbQM!k+_=kuhepObqN@}R;e_jY|STC=$Ew5#W_IVnL6lYV|fz^`lQjxEqaY#y=MpI zxK0(B%QF-72M<6}XE-Z0!G%rmqP2-K!@XqZ20|5Iv5BLlvO1LXc(kWDgBOs!nW?HW z6P?Eml@0yJ7yCw#3d?H_&wYdQ`x%rV!4kDXCHz+wZ)=`h%W}-i2SvY^`o+2RTtVr#t#aP;8uBB4-)kXOn=b@ zq5tmz(3$PSd)SGF?(v2}uk)<8m^y6s@WTZ)R##sI*R?v0raq7gYc&^2?9BE#r7ijk$uf{10 zn~^Ptc+#1=UtyWxq(7;#CLn0rpg*FAw^Om<45gB=TCA?bU_DuEMyA6o2*C=fquUZU zcjbVp2&ht27u3~TL6=t;fZ(+`sR+t=LkCUC9(!?h&JpsM8`mGl~DvJ%4)PoL6YFZe-E|C)I(zFsxc?k{h^2xMQxf-Lb zwW1DTVSQ4LnG;1mYQ^raLh_X8Jis^iHhJDsh2(DXyg6s?%8m8NxxqFPdtS(CK6$lr zKVYKbR?=*#(6-!hKFoSi_d_G&>XrKsN6;_-AuO`YR@81uYxkEQRcs__>e(SgAUX|> zaWj4^=2gey1tWY2QmEK(*(*`0-}f?C0a8~&GfT&D8*wvRi3=vZe*n~XBMD++32iG0 zBEuI~zU$Yt7uWfhGbeuleSxkUsv{dto*SyJZT`!@?&aj4WQD3Pn2HNgC-#HFeJ=2%a3Pv*fj>EzuBDq2p%EeR(eKVOmh*hKfk;rv99dnM zI$0=jvDr$!pE<=gNU8T5pCERTDU=f`y8qD@=}UBZYz%pq%=7Rg(F8^m89pvAZ_tlK z)jNwTpmZDQq_}dE2*v2k1(0zjX=EPvR^61+a6FNF6lpj);F{S zk?SN!y#c^*^B4@=+;|SLdkHBM!fxK?6%G>bJ$atg?>|^a)*Low4dsS?yL%i^PA6T2 zUVrzAwe`BbAUrY_gXu?7>YS)4^}wute&%$7dRyvnWnOO<6C<>H{Dd>QKgmePXI?q{ zP&T=8`4J*5zW4_8-qwHUO}QWZgPiMS?p`)8s;On5Fy<2~;I--?SBa|Xiu@U4%bDzD z&SiV2ZwF5{&+?3`v7Nvy0;=2Xof{z6;l%ho>uQK2e_eRlvT>Pma@T?ln{t;I>c?dFRpB>Wr)g>_`Z0^m2QZ zO<0uluD~qP4T_wX-_P*(RF#T`S$6 zgSt{tSqiT=H_EJr2Ezvz))-HWq^H=1yz(CWcP%vXFc-XPLh{Uo|A5x>Abp%G!3*`<1 zcKJKuI~lV~L$_vS*A9yZpG74+oZP#!o9mc7ZFv2&ulnaCorfDuRu4bXucL;`7Ktr6 zE8jHv*vnP)E=S0kF6aaZ7s+|oslVAuEu#Vz7nzIs`UgO{W)(|xNEpI!C>wEjL~2@D zam&5iM;!#2JA#vKS+zUmJ>e5LL}>_&k~Vo6P8B6+g zk|E31i!JFqOn=55LXc!|irLB8;3$jP`JANd6kHl5j{+N83{UTdpU8?bmqIFHeWPg9 zTAs4YW$DB`)f&ssKm=Gri+Z@_PVcRWWW{}m!< z`2$Kb;_i&4h=SV?-n#4E=3?Qb)61u^LZ`7{gkcG#rOO;>$r{nbo;+h&M4rze4W)~P zzp~9smBVxRsEf=^(GxGx)u3QA2K~+Q^(~VjdSdAM8g_zrnV#(+qa4yO&3hC?bG~ME<+z2R$2)VE%CGA-hwL=?_x&BX zo=;1*Y8rFca)SlIY7yt@-&$u64j^yecz6|eBfi&<+UH_8uKv{mW0(N^3;GLDYu;vxC%6Rs_;ufw-c}Z zMe@(^{Z)Ar^w@SRY(GNMUp%0nHjp1bXF92?K1!Nk1hwO%`Y~Wqq+!l{Gph>egskdZ z{7m=xrQL?}y@BB8EO2#H_nT=|$ihtLVcDw3)Xzb?Uk-JY!}Xwt7)6?6{-qyUJB5P@ zc3sX~eePrId3_a zN5?>~5t4^j{7KKxVqG~zhv&NhZ{2BvL@=(b!sb(k3r?EET)gw1M!I4d0UHqoi>T~g z2e*EfX5z^#?mH|ir^G1yyiXIB4wiPOW?H+|x;b65GUQ2?I;8@#K`O$SS!;qm5$F_d z>~W}LKbnP!WIxpPZYozqZT9;$y-uM&-Dn4=3_`D6Smj;(pc~ipecSBP5$vikj|C&H zqFGpw8`*gmB5E==`DKEZw&ick4jHm{QC(If2qL8`X-uq&_>Trt(2qKE!trxe)jSX9 zN7W(61EquoYFz^x4V+Jtm}L}V5(?Eq6mbi6fezH61-VviF$G4b#J#h-{lvY{1e3mI zau}p>r!6Utp0;1^)R0o~Vf{#72A%4cehBv7G_WbsIL4lizF#xfguT$&D(mT%MD>6{ z^TXH|CVidJ+5z2&Q`l1U2lm3&p)!P+@TMAkRB3Il#e&Zrq{=b8J1iR`+AOtX(jYb&%Hxp| z^c-I4IG4Ohg%D$%BnvYc%7sxEt)iTPe3z^Zj6)3p`7wgupaJ3vwr4V1XYf)&QoK)V z3zc5J9imH83d#wQjFD?Qe&4@&%CxE9CHarjW5`cMhfvFvRb}ag@7LBYasL&tIkU*AAD5r0ho=AwzS!C%i#bQfl5wQG@6V0*%kk{DVhA8^uYO_*y|L=e$j_)!t$z(zE}d3 zh$1D~U{Ethj)+~^OlO_}D1%d@QcS3&n4jr&= z)~mXKKc33tfnS&>`lhPt-aT2N*W!Z`$4N7X5kq0QKWD>|>iaj5gQN>k-m;mTQ;wKd zD9USN){;v6s0_Xr+oxY0d~3~y@P1Q5SkGcZL)NiFxm|N@DH2kz>iit>`eO9~hI*4V zOMdjGOgz@glqCs_$vol+qzO+^#Az^woC?c#Vr#r`sYLM^qBjS0^OO8x% zt5eB^XwhUj=9im*fiLAO{tDtTox+jt>^*Sw9Ec>s#!dr!)thkUQ}LqpChZf>MZ-pK zs5E!{pDD86IQ;V8x+H)UpTat4y|pS0ZfN?}TY1JW->wZ;X>L47kX;oDj%nzKJSV@{ zQRIWV73byHgb&Qi^@LPz)^IG;2T!2iMSZzS@81*&?e~gkVwG3%FwO&Z>w4XGK zlb#%n{iaP@A9%9vmKO1TwbX3k%fs3Of7q9B%3e4PJ0u0cuPZ)K_>ymmFkn#3G8-{6 zXMIp}2~x%MZ(7~x($tvbQPVd{)(`#f?dr_x4#{Wg3TLyq(jz;Fz?#V5U@%g(hscU94$kJL=$0BV4Gn{VTF%skng;8{GFk)nBl`*V#fs16=&hr1ea`xC)JUb#ib`#p4;mmpfUVv+C(D4Sb+( zMAdQ~Eb;D6{dSv@Z-wU$Bv)7nX+qGGxeR~d7!jU>KGhFOC@Nzqn{{7GK8$~z1&aT( zlg_=CP7DYMq2GDzvL9Ca5bm=G@N*pZ*qvC87E2y{J26q>J@A)o zwDp=+q$FWWuNhsEcC4$P`=vYS{v!Hdhxe)X(~_L!K?$R72H8N&o>b059u~t*-DH>P zphVwf7OfJE0)>rM3~H@1%FZZY1(#XkP;IzFQnX0;s)Blx{oB=nT^oIxenL5fG?X=d zZ6=JZm+)gc)0jNY2D7$RmTF<{Ps(}RN`nMx5ED%kXP7Pa74>m;WnD@K zl4y9%oVqZlG2g1Y5+2!aR^UHS!q9;YT9_xAHYxF?J&>QPqmZ2n_(?ymPrl3WH)+b zQcK->m%=U$;DknjOL10#LNbehMQR>L-t6^!zD2&U?nCY~#x zRjE~3?kvrm(pr+fcrJp-V;YiGca+npk}yxk)XGsx(LQ%8TQr?6o|baf_q$l%~NZzm<|pTH&?co0T}=~#Kso34RH%Wl@yM{Ed(Z1V$M z11xZS!#=EYp=epr!>~l$s^%&wq(O$t_2IvFN|#us`Hy73d#h&C;Gu6CHDyVC$KCsyMnT`aIT; ziu@OAHhM4Lj(XN4Yc?w5J!7vZ7US2Gp_>PO7LR(?XMZOAzvke-OuoC~4}d~nM?2Z_ z;g-U+1s16=#fv?%)^RHPRQ?4}1l@shWlZ-S6v}g_XL{JoKl}cHn;x`;m zQ|y&}@bP(AzznQ+n_-K;(@A$MS-?>VF62?txCgS%^TIA%c{8{v&-duPak?*tub0Cxl%oQfB<`7@-4WPSBy;5G=K^w-QEW%=R>) zg^!d+^eD&wL)BXV#MLtk!<6C_*W&J8tayRNeQ|d$Qrz9$ireCgyE_z@#i2lPDDD*P zzt8);_q+E`ve{%ea!xXtoS8E->G@}`kvQ_hC^#fI`ZrZbj8S+?x8=vc%)pFjg*f}< zKiY*5_i*;|hvuRrbiqF4+M51)3&+XF35 zA5m97SRv}-O_w0us)r%(JMD|7;cGA!q*&kce#ywfWzf}?ZgN&<;;RTf{+0Sb$(_{6 zN+5x6c-^V=ohoy-7N98ET*0G?3}jWFO%a#SpgEJs_DLtFX1Cbi$(5{ZgG6**vAll& z-wn-a`PVl6Id7Y|dzPFVnB{5r|QOS`E%lxgcsLv?q=Sf1u%CnD^MF@>VI+dMp_Y z2DPm6in5vuwz^Z&daC81aU4BdixT9r!Y@C{2DDc%^N}MWWT~`uW6(f9bf~aepETB< zEE<06iDbIhM67kto`C#2w$~$i@0go!CoJY#{J72xFq&QEmnC1_2HPPpe{8SU=eUwryunTSJ0sG7-*s%8~!Qu}s^bP&@ zp~{7&m>RkKXu0_OuxbK*4Q~+m_uL7Wf`$!xOod<*)RMwC^)jg+6 zdPw{l`>_EG7J16Ih3)_@Ol=}%1N(C1@O)Oo;c3(2LuwE~m0kFHbuEmLzc9-1ZPFtV zV?wmjzdp}2YxNk;m43_oqZ36Nmn#oj_fSF6ZpwWev88WOXtff$W%^n|o` zZqxpaij)l{-gIx1KRS&Me_F~kWG_okI~h3FU&_a+0&|It7-6+P>w zW3$`DvV?>;!4jj@mrzc%8pmZa^Z8WRH-da3=x^Nd5QFbNFhSTZdAvS zDAm|(@3@BZNOhW8ZyyJG_)MdDPkGjk(OMc``!>pXYEYy`qMjC2tl3aug6*+Zder^n zs(c@trV2!G9WXC?mdporuTKD~B$;A0Ml@>KVp%k5xz1rI)-4?^8z*MSTKRs<-;k+L z^oY!Eo}AiLR1SDGtf`f;zgtB|W$_!;t8ci>9Gy+RXS(HHCG1fuOH*)fysFjr{v&Bb0Ejs@{P z75*Dy#lNzWv~cVvecKW6YNaf#Bw!jrqf@t+RoDb57AaPYY|5-am-))I!~hD7$m5$- zRmSz^VMCV1j{$%n*1b#_Z8U70?4y+uKk?;!$jguUMo3gAJLj~OFsvj^{xnH@-|QWK zVdxCX5@D4&e<4@oyp0@o;IEW%DrNw0&10)-+Qdjg;Z7i0ROOfnYd=dZ4mbM0GyXpb zY;~H@>n2^+e=d1B%CgkfveZu&%QI(meAOo#_tUEIUJ^!c)!|h= zn-F|oJ((1XL=IJ^1hFgNB}FQw;^YN(OYfUpMjG)qE}__aH`+4w9*p_h+uJ1ecTOzQ zNimp*s2>{CaASz+p+#SmOqq(*sOCwvbE<68+Mn_VQY_yUN$mOW*WNV;ZOBE^=TUr>UsU`9`f=8*waOIMdl z%TUo*bj$kl(B6d{9Yi1Oz0?zM;tTwr7_37i^Uvh_X_=Q?tfb0R(=pFWxCYx%c&p$R za{h&+rSMj;AUC5M@pBqZI&e-vn9+8b%MkGjpL(pd(5&ncTUpbrZ{;Z@EpBb-B`!Yw zpsq;rXhkC3yyz>J@;A09f1T_?xkuWWz&3p9(M43umpBbd6KryReWF&7eZvGx!;47z zLF3{f7Loeruk{s4?zV-yvH&WhMCg!=a9SLeE+$+LBPH&rEV9Ut{r0yLc5uqY_*Oxz zz2Qy5TKbtiM3r^+3T>QrD*($>C}E|3{w3n^UKUsOR7m+h#SMMP2^06#Bc^$1KGWH| zdT6HyL5J!lEb^P?!}_lI6&pdy+{==8*EX&_M3tzuZo6WYP4XyxKjVxp%)AR@hebMv zMIyPi=P`Sg_a2IhuB?BvcbgrPDqgk;6WL)&NF1Wm5-EYoDv;8Hj-XR`4=o*D4-lFy zh%ZZlye#3a{2X96(_>L9u~_5f9VUodhRv&eKMMs7N>h@o#HlGM(5jhbOVlH-#93Ml zI1>+RhbH@$vQTPiSD`pAB2)GW=ke^v=kBW$oa@4<=@wpU z+I|`uc}v^x$@?*PNz8**f(!CsSqJwRZ;Ybe-KC0H(iNj3lIc9MpufiyooOF?y~*dfQ`L^Qq*Nv z`L3J=G7EQ2c=A?}EPzOkJIm<>sW%BClR#5auV;w4q-NeegkD&|8a1ZI@-HIz(CFD@=I?4Zj2F2KB8FExtmZSIFAX5#Tw!V>{;s`7I7yQD3j-IYy8 z_E_)p+BIua;S{~RXu``})QWZyXINKz<)H@XP3f`{6XQq9qJg;7KT|<$FITObz2+Vn z?w*g#4#`IFM;fa5>dP9uoj?1HM|NuG*Ydun?%NG*tyhLD?6x4U(z64;_AukB8o}ez zgqO<{nI;y6XR^lUau!dQVmDb^RZZkbb*I$+w_@uaAPQuGtI5_Po^tOJ@q?W?WTl-H zKSpW*q>uH7p;(h9^2anPJCZXKU5UE)(5shfu+=;+ORTlEQj9ovp~QX)cd89Tau57y zxR8Co>?ro0e%y8gi&9KmqMm6q8QCs?Jvp(F%_&+TM-{r6Ud_Kvybb+@X;?XrHeE$c z`c-JupgC-TEALCij6H}MQ+Ul(f0I!~F9TiN$otzDsdo5#b#2gYKZNd!%!qGUd`~*k z$4L6dO26h;R(NVS6y+Q-8rMiBJ!7|vW*;XPLuMEdPa&Vf#wlt@`W=d@XE#T_EPmIq zC{(Q=w-td*Y%RCatkuYTQe&y-k+3Lik_Ge7M2yBT+YP)#xkOI}V9_YauR`T0)!3+0 zRc^aapXCz9D#&drD4Q(`xpnE5hW`P(e|CXO>p2_lctK=)ZcS|NQ#D3xc}9B%@cK#; zZM|$lGR<)d{;vAyn`BZ+mQG2uC_O6HezrxN4#TMf?ddExXV*U$=-9U}^?izEb{PM2 zCrK;y7#lq9$UA9!8EXq7IbMmR3Y5g3K2ZN^Q+`s(O=LA~lj%n(Y7MsI>K=^;oC=*B!O1 z3a+fLhe5iNJIRWf`S|GZrC8SI#sFE`XT%U<(gaQF(dBP?o0MZBd&NMiTw$1BzMyN_j~ed2PqCWUDEEjhhDwZ4rnWPk`I{$uE~#nYWTa7HYHJGu(F1qGvij zI82OoCMg1m+hiqQ*~?fnwLx`e+J$yUB=rXOigU&C59(((9Wf$ozSQ2=PN1pV5Mn94 zB9nCq-#A>t=@K%$g>tp|F39S#JrnHn(oEfJvE!nA==TBNV_5OOrb+y&w=hxJ6y7yc zr6z z`Z4i&WiH7gz1`xz=C$MGlWXsS(Jo-WJQD3)i+^t-d(5W0Ap+ zVc@GScvn?v2o5se@BCh^_RUIfkx-y6fhut{)^abhRJrDot0p}g)}|bPs$f1#hiYu% z(=%R=RF(}A5c*I$)QhjookrJUnRY@q;M1D%A9>@cm!A^`1kMM!$V&m zLd~*LzQ^X|`hrQN>YRi_@yR5pQ2ZM;hnSjaa(zD>cQ6Qot8yu^y#sG-M&lBaSoB{V zQv^|{j;Zmco2PA0{9uLn^wQ)i|F*zim`(!zKIHDSN{P=qUG8@pZ8;L7 zqr;oluS%tc+wb|lGOf8}8 zm<3C1iQ=%f>WboK@6&18q$FcoZ}K%gG&z+-n!vCW6FzjZs@M&NvBp zt80DuZr_hok0YDC0B-~`E0qp6IN?#t|~l<#jPE; zcRc*#PV=-^0au1(mTuO7KM8cje-zb7cR{GpoG)1Eyrvmx_(>_!k66JriXYC3uE%e* ze~>w;v59zU*uVo4&+O`w<}D8@i=gp9gf2ky!yuTss6E?T-DQItLs~C7*d1A|ucYn= z1nN2+4>oao+x`@_n74+MM_m#S&j`@8G6=ppi#`{rAlFUmPX{{rC9|H?P$#?O(&#!( zQ)%-8r$OsQKbD(tigbrEtrchcUTk}J@u<_6Bnp-wb5sf)*in43Y9#CN__{i6`h=l+ zKnDwsBOw7$-pKo*A-esXCpm_ds|EC1HQLSR^GE5UhDj%-Qkz90>8wdgQXpHq0M% zglAzV73S`d2oPewm9|$W5)*=uI+U}PfypBW7_yHGO?M&IXXTckn{$z@fm`xvBC^; z<_(rR2u0qhOGVo|{)Levt=>6vq?$Vvj$JVduAG5$(2PC%NO#0z`EimVItkB-s0a2)AsB$%NVQ%K{6hVS1YG zs_PfGp(Q=8N0Z{_2=0!Rt0LagN37^G*1bIWcapJFedA8*NZ`f|oCrA4ajbre zP3ieFNyIK#OIo!#y}r1bT)09|cqaO6Wl5`E^`hHQyq>=KC<MX~_p9>Or;O~8x(44m9x-GXvEBqMI-%8-#zsf(l zh`tUxw_xczR`sN(5uZ2wGsS=+hqN|%FP15xl`f@JAUMZ1j3N-Uru)X+VC**X@gRDU zoTJ1M7z`^w*AKxcE+drEM?mG*8JNa*Y7BeV2kJxPQTf81#j=Ym;p=D|5{`JXVYBuQ zorw@&AAE%)e}`M{IBAcvxs?GmQ2iKU}P1{IBQ?r@=w;|C6uxuW2A^I=#k zZ*s^G%sP}p7`(K=x!S{f1ilzCB{DmvM5iy+uH$#wX?o%ZEp>7sWI-qkQJM}W_E*U9 zuEbq%l-wav%9(7l!I?f7u9P!Y+pKB3`~iO;9p-5M9TGcwt`Mt@Zf{D!E*3o3^zFuT zKmL8HQ-sWyNndHA^6q}mv>#>~t|rX?U^UDS8w47g!|6NhbU&P<36ZvHzehY$9d=;A zWNfWuD!XKJo@QBjTzz#DY}5Dd=5wcHGzs z{%`W6J{bL>q1$zr+{hCd+-2>D=jg*?7$WQIqU8WpIn?F!lxhfZM#}&cSc)04Ch;>5 zFUMozNwh%>(IU4h)e6u0y{SAQToXG@zdTN}?@_781oI{&N1PegXO&mfAqe1pq{MZi zn3|JJB(0iwRmryiRdSHSnI1UMU{P%TB!LwF59c0!EA`IGBBrS)vynP&LruesmrSA; zbFELDrq#QC8T15-&?auBuNufl32Z3iGZ(lw1qEV$!DC%1?Wau&2MOGGrGs_S@Lfkj zm>f@!ss@=gY}x}Q6d5yT%#%y|H&CHiBMoi?SJGe!%|YQ`{jPm#tkd4{exo-nv9s=U7rMcz2TN@z;y z8xQ9ks+pQ%b;dCW0vwtR>poSP_)3cR&14}BkhGO|pdGWsB|5-(UNPRFJ9O3`W4ZI$ zuLpGj?L>_mMVUN=zjvi&-Y7jLYG$L)03>B`HFiM4xa*v8z_NrjvnU<>6Y6b95>Ps_`7HE@27mUF<3PA!CJ$RQ@x;=O?nyf~$1YJEP`E$85 z7NExbuG}ejn=xs~c9680Er(9{AQn@Q0=h~r>py$GN?aaH1#cPx0QcACE^_DGlJSa) zo;&{{;${vf%B+$bxgJh%cQpEhj3lYxz*Pn&uP|0Z7L1JgCd>|AT#=G4#ijF?A=B#j zbsbf2eZPJy9X3F8vMizI0VV(;XgtGEolNTegM!PSogz{72X)eC7>-$Oh*`)#^D#&> zJo2`2k$)Wky{-Vup@srulKh)CL*jI!_aWE=x#orvN?BoV`G368Omtp@LXx4An3&0# zFZpI?q<$CTw1}TG6d%Jjsz^KN6PyH2U=%08d3-I{Z0z#aXt!`%cla?W9@1}ss=$Nd zhyfrrVxkb7q;6y0%P@Ot;S#y_+>+}Vs5Rm?n07)c&v_Yy2k!DKdllmZ?#zu?zlFBP1D ztIyT<{ETM(7knAesan(tiTnl~*BBDL)_KeF4Uqj~(Q5aA?|jrJ1OM4`3#`5HncvzY zS)bmps;Q$vB=@?+v$=23`3f~~w^&K;AuAEHzY0UhJsHN*{1o^)&uV}4rBZzd<+PeB zr_3z7QZ7cfH99H6$+sU04>AgmZS*c*bXnpDNqb_@;)@I5!lZjKXfB#Q!a0)S*Acfu z(7ns#0}pCO2Vm)F%~iIbpsowR+UneO zK17U)9}m5)Mt8d?C6L=wvVc5kb7SThdHr6ulEu8E0{UH^Td$8#OaktG=P5(_J2SJbxVN!6>(+Zr}7nhQYA6MzSOsw{^ejVT45@uL)rLad|*{vl+ zLM4m%sZfB$M&j56^!6RAFIQK{NHt0{wXTu+wWMd-<3&2y1{H|^lCEr#H)g*=r zJ38M>)y^qI5x}YD0TE+IofaC!c$Ph$Sf_>(G0jmFZ$|ahp5dZ-AOTm9^Iyj~0Eh@;} z0QAR>BzQ5ae6q!7Z%uDLtQzq+jL?y$3$Z>a>0Icm!pU{}flCzYtjMt~>ZP**V>mKn z+ySo}ejFg$jCQoK)i|Hbn?B?ZKE|LSr;Pj(^mA%H`coDIe_>#%HC^;v?1ZH1ia6+N z5k(9bQbwRcJz-IVKwI9t-Fhp8Wge{Vbm4#;>S67iX618%2GtN8g`zre1I2~mKad6> z&i-MGITq~6XSJ_Q2lyp5(6C>pye=Ll>NQX~o)7T#Gi*RyxgjH^5(gd}BMh8D#ux93SnaP=s+*s?SM6XD3cL^*!o#x%&ION!Uoq z`u%)Ht(@!K1C@bN%oWed>EW@BBQws0ismLZ#h~wW z5;jwQ6q8tj^FC@p&f10~kS7iki5{lvXDu$qG~ubiGuAw&n<$ZJ8v7r>WxU`@` ziljb`;<-o^T(of-HsVLY)2062R73*-S#h)TPaEC6W_m6UdcQ-%Sq1K39@-=IqaZuXJ-10R4EAt;hCjRyMU>bz)0s`=jt$!Qpwl%y0!J4{=-rVqKF zbE^7RMJh&CQ{!_@=_upy6Vik^4k=$^ns^s2X?jO>&QmQiHk=nFuM6s+imam1Q1vFEGdR)xa<9T}fdZ}Is5M8q zVcnV-YLM-6E8|A%^PLFzXVyB^ZQ&X+mxV(UPG>@g@94Dy5_zX?6d-&n} zEToF&MeezNm9hDc|Ly7FA!DT9CgVda%LEscl`_E0+fGC6)OPw&Z+XmI_Vx5#_SyB#;FvgEsZ(5quj00g&g!oN~E7>-OpCG zWY^qZY&xTn*=$4(?l3=Tq)$Cp`dhc5&UzM7A=9{G$8=?R*M6V}%2EBv*FbaN9@dKX ziBBbyBjP5+i(W*XWvD=EnTy{F9s0olCD|^@aVTPu)DTd@rg+L3xQ#{H*T1WrTk|#G zU86DwFo>gb)vF2=;-;cA_W6S^-nk(!F_4l(JUI_jm(z)xu`c9{fz6e`r7$Jn+LQP_{f@0iOo!|ji>WWO+oRZsZC+k2*n^=}zQeccppI71Ks5(!k*qkG2Y_mNO zvskFhcA{MM1dj_rqGI4v# zxabs*1#_H)T_QEzg% z3S$!i7ca0V5tcm=ce~kavUeN&ZSU~&e)^y63h>g zrxe!_ow(a%A*wrhw)sFrb;1c=EF6^z^ZrSOPScAt)%u1A-zl$+vM7jIgaiGgP$sY@;8Ae~T4jUNP0Rff&n$24`c)PjoeYX5 zv*k*k%DkERg6s7b8QLS@hzyX|VL~ZhgvU*DM~@<-()f_)VyHW+5{^5+gd~A@q{Gg> z>qie6=d;3_I|7or@uhAR?Mzx@mEm_jxiyM<35g-32e=;0S$TljyVlVU;bEHZ@ZJ$d zW|1?TBSy}F*&Y4Uw9qry{|`&?3Ini17BeJF5b4dd_DrF38_Zve@toLci3p|~@wCQ* ztz_a4(0PN*x^T@eg$|AnsT&v7UV{*Emnal?mbAEJbFcvDA(df zDDt<9GM|KS-tUU~*=i@{!@DVyKS5yp zpzsd5p5L3hl8&l`vjfut|A*Kw>e;O17>q^$;8U97m5iLkvSYf0uBK^(p+X|Im$@7y(@I;lVsJh~uu`ICFlQ}Kk8rDFWXD~^MhpP@1=HCzl5ZXo+Y%TFL zJQ)xM<}77Bvy}7z_+IFSw!ybs8LpwoZd6T5;Hm+BWm5NGC-DpT-e_EL_sAc|=zrdD z=ho5RaRF023O?92R-FiZ@0#JsR*)+cC*}T$bgiyqoEMq2Y8bk-TcKmHNQz_UF=a?) zvBDC>kr3&mHwhDd zHG#s8(}~>VCJnOFwiv-(BGEOj>>yF!08vh%AfUSY0mF_5@D8#_^mW%^R>k+2ltF-O@wV3qikk0X4Fe!NIv|jzwQT@Fd>1ilQ07~=>Z7l%mB>_iC<%XZMV%OO5x(VV1 z*a=-#*I+}tV1>oWIajSltATH`z>72jp((qRD`LVWLN^^2H zydD($C=NSuC=t9kH5UY4_Wc%jC?KzLi>2cnI=pR`(su^B^C;!73#ml2-CAIZOG(B! zO5TjGoWn%ylA?RmZv|l&{eRvZV!VZ49-dMNl6CH5M z!nDB+!j>x2$rT7u6UH@!?ljX4L=d)*4Q^$Ex|EIFw(BsvQ0jw(JKl%5M{ z7{qDhuBS62@BfI7r!#m^C2zn9brQSK8p8tF&#*DsELsTTvl4~QGE!p}=XzIsl)(hP zOu~K0dZa+8BsV8S*OJ*-B+5$VJKjyTE?oNREQIwWaQV%TN@U?z8WHzs^ihq#WcICD zlLDLH{i+RNWq(-Eic;k#Zb?H^9x^StqN)dvifDpp`vq~w)7a0NCZt$eE$^NS1(|=S z+jlvIeyBIG^h$MT4$_`$?I4!Icxb)@U(bY6 z>~&w~oT#+s+NTp}ud0wW;8;i@027`i^%Rm>yUf*&$uSRH1CM6j)V(}(QT?C1v67%W zPmJK}akkCQgWB*&J4XSq=Kta1{3pq$xS@ih16&hpD7UBh8E<7xfgR$w*%>6(cM|>C z77Ob*j`|xfxy7fzpBlkf;C{3WYN|?jz!BzNu2tF;r-8eU?@^ICC()5c8EOgFId|x} zKp~<3@8U~Ps{hjl_ad(ogmZeRoro0^Acq)@$>FTXH&uD|0UtCX*ud+C1@@v-UN&5G z6nFqtA~3yf?D4^i6zJ+K#1RDUZ+(WbHx%nvHs0?x-IpgQKP5%&^MHTpOus%?eal%4 zVA)sRUhhq3el$DndJlMMzc-r5t9*1h?M;8hCH~;`k6ksuOK-cHUDKb6~gUPJqz`?da% z|Ai^gig?Rg-SrEg5fylo@pof?gKt`TLw%%tgg8F=)en=nJB%joD z>-6)SqgU2#13VQW9^)hFkv7txNL@ zBqrl~FXsnI0i~;vuOQ4L@pybMWp1`#F2yNAur8UOaCPFZI(S0YSF%h3HO-nn5zpbg zeT_qVUNp#X>c#{w$1R1f*c6l*ncuigk$FG7S4bICacJ+Kiwxvgp5m!npBG|&JAd0h zs&)Pg!}r!tpdhR8T*pqhP^5R!CAP5@S0r*8=Cxu>i_TY*L3CWD5cfN`Bp)db2XT|J z%>BGu)#knSts?X-;lm#)_bKm(gsce1grT4g#xM@a@Ibkszc9ym-AP_e5k{F|9bb_< zyL}QK^;*05Opfw?%5GTKM9i2u3J~c!D>yfO{z7f^T;40cXZB1_Hh1IyQN!(QRYbZC z$?rr$&WvfA)Bcye8R{PoqoOIBgn(e@tkp<29?hTxmnpU_&D%|z5aAOOZ#0NA;E@1? z_(yN4i6t}9?1ervJt}nD`wv3=x$ZhP(b&ibU{AWI5X>|`b8F?A!rMp5lq>ROv-4eC zCB#dMjA6{(+K-_xuhnOxTb;ru8@2b93abUO&&F^vv=WkE%hQ70U<*jsU~>2T%Lz$e zaEF0I@WExSgxCrmF)?4L&rTmZm-2ESUVf?ns%W~sXgwf3{Mxi$X$0F=8Ef55qcw&) zfMVYgZZ}Yu^(Ttl+G=VOTB`Tpsq|H`tjw>M<3iB>`;~6=WN=_3E82~YD>WF+;r;1@ zW2x^1d@#gR)3lnejTKLPr0p+Ewk4DP7HnbAP{BGq>U3=b-`3}v&gc<4O;ko5lu@m4 z?^?J!)B$0wi1Yl;LBnT%lT8oj^~C2dB)}}wc!kH7F^-xjI#(T5;Uqrt?gLzR&AibT zQp=;_a(2^6fpP?O%v?IAR(*ppu-v65r+PrE<=DKuU!!3v3^w;$wu@ z#>h8`Gq_8n>{x8@l3FD~ZHZf*>kB(WAlX-LHm=-3Gn@MIsn9%*+Lk_a5!={z=E%RK zICb#F3?jfBeMX<5=kIY1o7QU=Y9JH^X=Uup4?BJo`C`{3Ko>*b!QSDK9&w)Ci76Pw zcYtzop`56d&AI-qVMHS)g&E{Q!wWneN#5u_LCwWe?&x7hRPd&Qg;Rz*B>27@d_@Y8 zwmtS@$J)R#B-@=aR)&SllDHXCchq8SXhoibNp?Kk7&23stSr=#&K6*putI|qXsc``vf(e#CwhlXIUepm zdLj{`j`A)8gpX$^1ax_Zd+!Lo%*(c9S!b^4tCktK?++&?;cxZ^ z`6gm@)z#uYp{*EH;E@p6xL(vu|K2pn9c&8);c662m z(AzDNzs1jk-=yYm=vK+M<8sgBTP}1tyvr@RW4*@hrn=J@0m?fpX#tUq4_^kz&}d6w zwM|y+hm|eqS5Y}2`M8*zOuMHxdpReqPMCN(=_XROzmaP#DJx!jerOblcj+oOoV|DE z%39iC%AERa92kp_95u=6+EguRjFZRnsRc80b3;q)^LJ@!8sDYk$Klmi%#G3}DXH^R zNvZo(afJIOsY@zJ_;&{7BsfG6GJTZumsCbK%62e@pMq%tmweh!sV_!@8}{ThJ5OztFqv8kEjb#w2M0uS(X)*G z24_@RVR?=!z*DQ_nbYjGkDYsgHXK4}OR}9uxty%WQLStyFFa{kKS5VtdzohJ{cwD+ z56MRWUIWUR-3%lMaJ3(EKGFS!DPz3>54kD2Rc5e$E_8>j9hC14f zf1NL(Jho7lP=g8EezUDd-%`gXO&}wO=JMh=_Z1Z$}uZ7k-?q3 znBjXv_J%8EfIJZ5IRd)!OON$tC%iS}JnDk}Fm3oLJ@!22$G5AzE~{F+lVR^G!!Bud ztcfA->ATz$!6lEX8J)aFVbz)AMp5vT&7$dB;WFTa`0M@- zMGAqZf8t*l57zQLhO~Z-?s1QH&YJk^jEEeKw3I5T8RTTxBEi^5_$Ad3%u61IjaQ#8 zxw6t@Up~C|{|!h=F>8WlT5NuXLt5c?+Q2!SLEwVVJn<(Arp`#GQRF@D*vdc` zUnnD-9++et2Gjs*nE}bmesX7@>JIB^^iH=xjyRn;gE@?gTY$6=)f_K#jEEm?p@LrA{%wCE9eN~3#XF_MCNb^L86hxl0cagcb@LqGWL!%IH5G}} zRrC$S<8G>A%6B?#DkKEH7s7Xz*9j;m5Du9Vf^Q)!h_KgYT)Y35Ywb& z8TYACD_)?}mjdS9muUV!>x+Bwn^^Eyl}x@A2&sFI19n^yl+5n~*C}Ub!UYC@^W#?y zt6hsoc91U2I^@|geJ`Jt>q@;c{Yh)wZetrB>>nj6nGaHiP(WnolBXzPOS}>$Clv%6 zBaIx^B_}8gy$@v*&m2hMH}^5$<>R|v^=hMs1UmHapr=-uwCpxr#om){f2VugQ^T~~ zf#I*&padeo%q;(}@1F-`m>Cp4^A;psCIgmQ_nz9etggT1SSIfOpUP7 zb>(Mq@v6zxcb(>B4i37d{nACO3yz{dRq>!>BZk=FZfXN`t8cd1w_cdcTC?yi_ZJ5c zKm2)d+%{jW_7Q94hl>h)(7nA+{#yEc&< zlORVT+SDyVSheVj4xFW9!_ms6}uNkFvpWr^;0z3_kHDheSJV=BUh8ir{`h+oB z{$^}zLY6LHBsP`=%&#lDe%tX!@^yB9!m(#4GjROz$wx7RNDED8n^oqKmixP^Boji| zFWpH->0(Z0I1c*2h)OP`-#K-{7N2k}T$X@#)b9AyRk+rU(=h7EC`j>D zgx4qFYYdZ<4Kv*n>k{;iQg3dRZXnoSf9KAW3eIkecUejD$kAb#qz-Pwp`!`3o3-05 zvsrSQxo8oBRvh$P`^tClX}2JFy}jbw7)U3Ptq}P6i?-NApGVyEZTj^Y7R3>ByKbqpQcN ztRTCjQ(9tC`JvU)@eH@Zb)k{j2leglrRqo%3H6)D@pMOa&p8HrqO%xn!zc}4gQhnH z_OZ?>fBHM|Y}-~w3!5d%YO;oya-|2(A%3x2tfNp2ShS*+gTc+RM$6a~yNMD>|2yzkTGuH;89;g>DQJY%uIV1g0wbWqbzux~u2B1$VPoBNvHaSCNaJ62L@f`GD8%)ak zSK-tAw6cqz*4gTJ)KSg84ip7ZT!(RIP+irs zS=f7oXNcz#JF_rZ1J@khffB5l(|j%pQDEGs9?}P?=`N)3dH6#F5=EPC<06p;CJ9(l zIT`wDX@0{w^~W^!e*_PKiiG(ivZ#6b7eel2jc}($dR#DdZ zErwhq2Dz&88WNNREgJ#rhM54!?lfQPg0yB?S!|u{V0lrQ?1B+g1iZ|*>DL_7D{a33 z?5nI(s{f^sq8N$*^Z-HWCjJD}%4EdVT8yd=_#&LPp|tQ=KP%~u?s413yt^;BD9zxL zB}e#`j7)GowcK=)HOsJU?=5&7wmZQn@ zh#ZpqBJ0n9UE$?^L0|F^tkzvG0BA^kRd++bksN|=O4x7bTGXmJyL(Q?{VmHY< zxh91%F;;O~>Lm%r2ek4jncdx@S!le#;L$J~5r{+fQqt+z@iVqLzaMLF$i!#j( z>hPL`De$dI<*BnU!^fr}LZ62u5-DsNRDN`;gkCR1T5%;$;!hl>GDPExH1v6eF_Q2z zY9*XonvHUbd^Hgca`e2e+FVKTZvGh!oc>n{yteNB_RbAY8R+e@~*v@%4g)P3#j( z8$j2GmevBuHrftfeJkMt^eudsMeu|qju}c3Whq6>Vzbx%B%Z!wP{TylyADT)WO~dD z`ya5D5KR!ry@2Ald zRjfRm7utR%Tg)xzZf;wr?|K@Q4r2j;sO`BB5e6@fPoT8B#~ieL*Ra`}et zfhAX<=IAoyKY|xdw$G^objE`<+{l4x0p%wa^$$PtXxHS2yrFP^kHVXnrcHUA_-P*_ zE^rPe&8cx|lW9}oJw!4qQ5RZ6=PS8{$e&A3MAAb=nxV+x!II>(6}M8~o_8)IcI^CXe|Wl4;*)ha_`va%wJK?KVf8Zas-0ilbaxvD(q+O+`Xv$${y6 zdv%`swTx9ks9JXh4yt!nMx}5k4|AK=Q}d+a0rUt1(KxOuVfewuuxj&Z zApFo(Kb+z8m=28jAAt0U06saqNNE&Ld|pEjaI za$_I8{r>>Y&{P~)@Z&-{szv!jx##t>aXpiIUs5ZUG3~3$u{V07Lw?w5IPy<(B`$wD zWEYS2aE@y#rmJLhxY(~CN9LkW0=T)pI%8w>iXZ$IxzU03ct}@qWUl$_5>|+=IWSb? z%BH>*bGOSb1b%vW$cU?>vMruQaDqQxOs9s-mqkQ{?|(|E4HBEvBE+YC#VsM^-Jdrz zGp9a54_>pD8w3eOXIcZyO6ijPD(G{-1+SKK{@zZ(a7{=XDcowccT0JJ;k(2|=G9dQ z&o^HOZW)ea(dWU>f@erXD#-XH$zfUivdxoznHZeOX$ow<8!_=FOn;sWir8WI(>K>~ z1<-%%d6NPE^38hgXM1bcK{wdhRxPCi9QF(y(pBkx-wpO^ ztlygh@9i+@(c(-mERWO_DIrHbRq&5IHzpJCIT|99g`z%J(cV{a(_}9&e=x5x9i4*M zEOl!up&0w6mR^gNrE6^VU=%UQ!FpQIHuj7)n1E2s+B6jv%quK=;tH#bwEmFWlR%U< zm&3ymcPj($H1tL1?8ANk0*)OLc8!aYgZ24gw?X_N{mK#(Zl!$Ts*dxLcauFUdvbnzyxjRx0%8C)bBixCuwyS{GYH{NiBcdANnCzm+EgDv$aW9vDe^ zFu~6-BJ9w5Fx!cHe?q3hkrqqv-GvY1cwMm(*LR zVA#_<#WK}9!BeiL;U30<>yBcB-Tv+~LY-E>HDsl7_3DVvmq??u3+Zm-nSR3eHjF@I zsDr35`8+d}&~olO9*A*yi^$hlOXtTI?Y%TR=liBEjRrsai#)`Wp3)mLIxK1WKyEW8 zsXq%ssDC9N$-JN+e*HG`^6H+-Cd`n^o461`o5I@H;N_WPE*RlKUd&XFu$&IuRQUa@=PqUamh!CCz?gm1=Np zWO1ME#mCWn!Y5_YJ9{0g?uu|u{994Ah1|KlObPUfd`qE7XiV^Af@Hg|r4+`I!lFp@ zvI|*Nc{5SsLYtVFWl#vQUKC8a)BH@eP~l2A(z>S=w7d71<*M*!025YE6r@}dEfGD0 zdt$eFFE{^n^@0AQF_Yj;yqeFjusduViCDSjCg4Dv==oebb0#IBFY-jbApq?- zFhq}puBBylaD!a$Hxd)VZz~30pPM9fs#W39c1ehg&{MhDWEe-X7Q3@&c!ZS%604V( zw0mBYQ5RP~ph~!f4o~DtXx~Cjjd*)Zm?Oe;MqKp;7+FaV9YzDF9I7VbmZ@K*t6GXz zC$t?J8&?BGygqW7d!~1EU@~yD_AVh_gq>6(K?0-mGOT99|RiBH0?;e3aQYOxZe6e3Hq$ryiX6%n*&c z7-9Nt$PItdYR5I(*_I<{p8NS2$=^hwEo*MB_L z!Oxa`i(?cEbid~Vs&qu19HjFg9+ziIAhv%L^w+`d=KBC=*q zGDSH17nL+L#gDx-qLcwvGT^pA>m1$s7LT`KQrD>zT8Q0vCb-Rzyv(d^^xsC9yYxVs zG_VqPA5|D*bGVLOBre3R5tSW`_`~Cqe zMd4@(kx`~wbqu)l^v3FWw{<;gp43O8oSO_n9uRm(;;mE|zd5F7?jIIyS>76+%g=4n+>E(S1u_ ze<3OTR64m8Z|@}~%#Xlg{5jeQakAMQtdcj=RRVm66;N8u9cSC6;Sh{bovI~q96B@c zcySYAU8ea5;2fs;OIJU*Lf^EeGTYWt^F=@ci_yl_sN58}?!EucE$)LMoy7{Ib=OeZ8~c!WXo*zdyO9Iy}>py8NA8sNar()6$u5FmYs z?8)+%xLi`t(9}endMe%wx5L2?1#XXwHmEZ|%s3UMv)Kr;A>wO8UH^Kvus$K^AG2%I zfDvNuWLYL*`o@*2nx47 zY+tfOl{Q_DEEdyal?sApA85&W4p9uEgRtAL2V6hQ;RbYNrU2qci&wO5$TcWsu&}R6 zmrE?)m%Mk<#vT%bI54dEu23Hz!mayd@pXK*tms1xzjNl3gf)$$$W}Qenvyc2EhWhh zX1btEU^+pju@~RW5L2?!h$A zyHW>RC$aiyyrLzm$c*g+k4d3!ys}yKr&mAkL#QSP7)1?%i7CNv&4@0{6mwE5yo}4I z%)ispR*<{_;UzM%loeIU0!}kpX}Cu_JOL3hTpAvUF@Jl5#%aU$vG76ww%8X*BiwIR`szDwrXa( zrUg1<>ch~DjM@b@>cGEOT2xo*vqhuZ7d;r;MAFXP?q4$kPAb|7M{8%lrUA0UppVar zoFE6YV6=bJN}C)V?19Oy)hh?l+u9WMtu!|PhQ9%H4jb>>*{0HKLh?6yF=`A}H;{qRZNuzqqGju2ZwkhaeAd1#wmx(Xdo#%N3HVic7 zbtIz|6@8rA?+;lUp|nYi$AxNGnlor%sk%Pdm3etYY}`j94#hRp^$b=xUd|D#5xt`^ zV2K?OWR)j>2vUh^d>hdxzk8zYFx=h+NeqBzbz$Tq(oa&oWUkrRdUAdrh22bQSrtGerTou@eiX|92vytU{pspZXa z76X7^qu@eo1G|)@1fG6rE%Dqy^oOj<8vU;E&l)f?zo`#5X87N!^NaMq_w)-ltN@NJ zU9UgEJ11|R)$z_+f3^O)2VG5+-Tt#j!p@>VyzaHB)y5yhm5$Gh=-F1TC?^1P+f;>K#@+M+uzU??cYG z_+p>RG{^etusoJelg3>O(EabeDFuw5gwZr*hJ?S4qbR?9fM<)~E6cy_X~(}6pFLqM zj*4|pU~0XR0vg1x<3SVk>4UuDf>AN`eQIh-09tUu)Px~}&8RVP9}lGO?8l*vn5KzTq0 z%W|DIQr{<}OAqrY3-inlwmnW*|82xk^xS3b)|L5bh7^X8ugV?9DiRW<(-PZu224HJiGDtlU~kaOxg}+`Y;2ml15(i<0(p zv_{v4_Y-ieVmB5J>uNon;7zE0~l zxQ;<>{uJmrGPBRDLlO^$2sMNsT-9SNM=&HaRNH!_p>T%zG~h%h9|S22fo|ubQjHO@ zEm3^Ro=+h$Rx>*VK3FZ+-L%I^)Qg_Sk9&0H?ImnyI zwy2x?S2{hWuh;#UNe%Gu>nnscBg;=u?AaA*Md zNLR9S>aj9laaI3QF?^V+>W`@KdQ9}25hPtF4D{YA=@{=pZt_tlI0bou)A=%st-N9^ z_uwLUyQCShKY)=>cp#Y?X*$S{Go~S)QuX&lXBne4ZZnmjT?tgvh=#c*_e-u_S7bsv z4^bm4ScVF8=gS$dW0Qlp8TfG>i0OtJCOq}Oav=Ou^Jz|hi?`1fz0Z`eaz(m+2DSHQmh+CJkAUq|xS2gtsirPH5NkMp{3NNnUSrK`}B} z6AA>0Ra!l}bKB6jO4xzc8Mg_J&LzzMJvLwVcj1-hEbZabE9Ex^RQp6<_y|1h?Bko66{9Kr zW@Q`MCXSH0h;AE>C!(#+Oj7Gjwr2YAn_1g-6#oozj}n!QXX4?O*mc$=*SNv#w3LNq z!9sOQk4JFF9)h-3alYYUU{l6zaB!7`S%v40mInBmGKAS(WwqCVK0Dy~D&;s( z$#c!<8hM`gHS(Rx=0!g0is9DQESSfvlCnNP*u}}9v_ZtV7f+gjATLqHwmo;|$Zql3 z(qWk>+)g5`k4m)MboP`()$D1cCnGNSacZVt;~KqNHK+X&FwEFnW45jX6Z$%PI8(2E zJQvygRPfW($}7t-`^4g)pU!}g>J_6Jp?%{sIIe)B`6*SyQe?(#n6-%_Fx-vN#9H^I z+IIPz=r!yd>Gvv+GZT@nSp@(|UpLXuW)3 zxoO{X?8DU-WkYE}y(l?@==N*YIBKiC8|G3(La*^rZMQy(tOJWJKl+?HnM_-;maLA} zqSogu>Wr1CL8)UG#t{}qe2X%afa=vX7nwiXxme7L4f-e%TxxQV*G63-JqAxhng;*)|c4sqmCGaZ* z-A0FGL$>MjF(>Eci z#c7@e&6!ykTQci)9rP(%`O~%=0eao!ZEQO1ca@?>MD%J~*>{cqIdGwGqBx{~4!Nej z7PjG0$#8DfsR38vY_sKzEJkAkqw&rAIs;L0e-=XGVrP@ZcH2a@hML4pisg+YBt!Ag zCybq^Z|6PbsjJa<^h()-caeW4;3g_*f~;)V^B+5?JS6EOr{O0GQYl-8^BD0@huuc= z@ua(b`vWkAhdL}1c#tA`qd5qgeA&GV)P9Tb3ociHVeoPRU}cUfvAVLM*csh>0|y9n zq(u)}hB-(Hp5*m$K2L3U@>cQ0Tv~d8^-zUvv{soORp5@e4s1G%p`P)KPrGfu9}`ji zuY)>%$`%Ed7&Oymcc+bn|M*t2KFLB(49rCEIv+?`-Y{mmjU6 zSe&-+$UL7fJyn?&yCgIEw#InW8XF{lpW9qH@5|^I*`$p+J(C3s`gFPFZ@HTLDoZl` zN<{S`3I0%pkn=WZ9K2*!0F8_RbE6`f3I0#~xax>xt*x%Olu&y=zH*nz?weRAqj8Qo+J#TpT)6CU+*MEnFk0evhDxP!Hs;b4(`YCFH>l+QG z^;))3A8GW6IFcDDYze9r+CKm^!)g2^9Lv_3qR9%38v@w)|#K@#bt?V>BrSc%*C8Q^;O3;+Ex46ruC7@c`?v!)R7uykm5L=o$PL zdV90_8TyGn3%uKH-BSfBoz1u?$6(KR1*pI7a z^_@cFpK2Y>4SCv>7y5C|{-c8r?Eb+$mos(nTZr>G#RV)9f<}?vUlDJ8@eUr?(6rCZ z(vnUbUWCXMgo*j?c5F0+oz6RlBjAU>7nk)YXCciW>9nem}3TKh=6eV3Z`0$ z_U?qd9k$)KE8=@*BmQoDjo_D_`H_Ir1L6By5})U!-Zz<@K#FS-w5J4nKR(@4uzvTd`qltUZe3LPyDHzty?raPuUh0@_BM;Eq29rCbW^NgF$|0{;vMNN% zdRL(8V^}c(NoejGdTI7pwYGs^QUNJk1XIL zE(R~*b9Z!39ZW5vtzv`9n!rI3lfowDHJTq7zutU@jZ4UX! z;>u_EwB84%cFlwzz0Gv#S##ED{d7tl%=Zc%oH4hztTky{(Z~q}t-SVZA`wd7I{vg* zcgJhA4q+Vsh9Js>{1^oDNv!Dl8{-~MZ&!Av#1wcMQE#zgy3`F1J%lkckq4p_U0-$P zBX<3}oS>hk4bwh>+YXzQc>aWqv*ENOW&PVrHp$`e5NQv}==8{$W)~1IVwJoF$(}cY z@z5}T&$MaF%AFe{g8ji*3;Zy`uC%T?V*!zMJfBKGkQpmr_LzNUX=OH;|8q0mM#&XFEnLS4BpUAgVamnmx#HmZw8QDfnhRns}!J*en|X69Dl#j$mF#@Z$p z^ACD!gi%hYLTa*H+44$-t8MhLgncD{A{-ZiHOxQX~DfJXnxo z>Rkb1%CSao?I0jP_{O{3#YNPWfK=NqcFVNBa{VQVFAa0Fed>LQN4z+!SS!eR&=u3j zE*kfelSzMMB)sn}Pt1P5V;!XzwFGdSci;!7V~1o~#}(PMPWOW$OW3FPR;@VkPB6ff zjTcU^2rmy-owtrR(pylvI9^~zU99ESD^~u%nEbo+$6^CfghNcl*nI*T17ehsh12Fk z*2i2q}u|#jjH6cd8lxi?5MYtF12QD-9(DknZmfWW#c^cPmvkMU%oq(EQx^J@`ma z;P?DiP|FMp$2C(@E3!3b=txBU-IN&yD^sK_uocB;$7iK_u?}{ZR)3e*h@?AH;_bAAx@WcLl?L05rS8#^Y-r zGPiGuyW`s=Ec?%ie*nX$K~Y`rB8B~Ll}#WeaZmG^x4%SE-hwDPZ=YnQp93lSZ(ery ze~KudUjG5m{Sdh`giZ@A9O0XNr@7U@Z-4!#v@k-+%D?gU>hIKF^!B{$;uTIty&|-S z!!8kmo<|+e1kn!JeRoi*A;L_tBRGZ3nmw9Q;(R{4|csXDUfJ1NB{<9eh` z;=5db_@Mzrv15&cEBaP#Yom-5IRQ0A&^E1AG>ZfIWPkbPldhqm-!#G%uKzdR&B|O z&|OROT;(EaBd(Ray{AuUEiC&jU_P0Oe;WGK{$8g)2O6x3}cdL4-DA$Vj?0vFq`)@%d->3xM4@5x> z2`i^rNj`igAd9b~#d(2PzhHu|_@`MrBT83d=EJ}T=u4E;~>jO#-_07bCQ{mic+re_Us!~RXR(}}ab2Rf6L zi~e}}r^8-68#k!yK0r5(h^ljYqy{JlJs+)~I!x&mzTM|Yg6ue$9)AE$5MgK;)I2gH zdSE+@m~<8Gw283?`0@k6%)wtlvSzhtni)MLD~ESyE_ ziHfj9>qRjEXF>4%k`SWpa{L&^0|U^^0KnoOfaeFw-J8@29-37G~9j-YbNA+X`|$SI?@Kj0|uMg%3`9e*i2)S8q?ZLA9Gf$_Jhwpj8p3 zAAQVs#0~Y$W*u?3alJ#<3aZBXS!hi~Mp#XrrKQ6kfe>DXjboNYmn={6XTI~~#@Tu> zXUIzh#(7GMyKV{=`4;?XUDB>R`9q!T10X;io)&>;gF0$F{#*HHzuhT6w~r7R@p4OvDD5$)y*E2p z!dAR@^uAUuF}XUIGarS1wqIgQ#j-MOvo73R=zD^s3!9}b&9J$%N>aHa)2Qq~javR) zc4HX%?86!Xf4Jx#;Zc@}LSAbUHI7+t(EWlOl{u@g^D_6_1>r#J@w(%o=Z>**8kRS-%5S|I*9IS{+0f{6db-o!fg@( zZBX$JZGT7;-76G@1+=*GElHfbyNgz>m&V9ZL>x(RZ2btRV?;zaqKvE^p-)_ANvu{sJ|B<==-r) z6k+0sOiY51>tj=V zU|FNd5Eeq`sLdm`(3j%Q>DYg`zK_a(WUDfgTNpnW`6Qr=f6;hm9^;c+cW|zkbWs%L z^c~~rNVSqdMmF1@>W6xr{Jy&16id3r>|S=+*94pA;CKipwF(C+@*b)HYIPdi!}vwI z$T6o+_Gc4a8e~UU)j)#oj)kzQnT=ZDxRPlHWk>mpaY+|_U=qO3vDrXgc#eXzuDQy@ zTRsBmP&XLrrRvbSLlugqXC||A{5k$W5!^r#uO4f)_*1`)n2AvaZ4)v2nzlm@_Otxn z@C@z-5i@)Pc$c3P|J=||cszM%gU9S4xXFDSld-Xq{^#+I&~Mcx*o>cHtclBe%mTlJ z0n!(jS)!J{QYZIF*>EQ5zLjdKSRyrs1vo-YaH&hy*k12P^W7v$fwgP0@2mU>aUCT+ zNN?|UlM%2K8||=t!gPa+XgKlQ4DILLyM|HK;yk(_Glv`6c`xTj8-Y^{hbCUu4dGik zsa#R8SNZlbOVgFBxyymVxQYk3NDT_0WC||n1f5RJS9YHT2k`^1gJERK1aF-d7$2 z>Lgkrh0BViPew`kVREk_E-!x1?S8rD54%02qc81sC@hwFi7=5$Z_*}zhd1aV`mYpDB1IBaw%hLYfd zYcRHf0W`2Hq*2FS(Rz%8-|Zce*ETwv z`7_0KnQC|pW0ClpM4h1JR{X%CX)4{*1?J99NRB}w9(fq3w(X1X#~EjJ?w>r`=6 zrGIcjk-da>%<9b;TnR;90E7THwN?`V9PS?ss`C%PVHC=5jW4^j>zCxf%6?~=+kfY( zv1HH9D|9C}cS>ULfod=fZm0?V!A#Qg+6is%>JO>%P91w{U+$x`Q9Cy6Q~$|0 z7*=kfA||56ff5L+nC)r5*xM$9Lq{~}Ulb+4h8o%(UcD^Wp|S6Plw+9%k1Y5v@Yn43 zr`VpjZ1gy2Z2bPHNhCg+Ca^K4Id?6xhPm-i0{-?Q76_x%A>fjXKp7yvD- zqjpnQKZyp3y}Wxhg~1uJ!nOBrww?h2%^cST->6eRvGgyLJG4_Da{Y^u6FOEPi6W1C zS#;$11&Xf%7upFM{{Y@6NI@~cu~(COpw|;1C^5FZ`rfHsoNGF|007E=Xp8!{j#?1S z^@8W_lQgJ(!d7Wyz`_2_7F;tKM?=9K$mXBflJs#SY*%!{GW;({?MF%(7k0~sqXN#< z>MuUT4<}(%DlaGZPm#*~u;9u`lASMN;F}~{LVj;>s2cz=(tnDi;m*om$E>f}Y!i22 zf0JWqoRRGQw_(9yI_o1_WW68T6;qcpt$QhwItq*bEfJ6dJ7d8ES+fSYO@reU*YS0A z639ZCEcLfU0GQ)U^s?Vz^%uCbI4iBXnl!ni!Qj8ZUju1k3sws(@M{7#I`$g(^p$XozWfEiC{qy}E5bFW3ZNrfXQ+gvDIc?=;1l?9?7z$a=R7KG<2iOGPaQ^f`=q304l zIQTsPfR_|plzY=mm1fLZcA##a5ljs}gl0f{wrv8`6aTb3BtrW45wSHIq&#Jjwk<0* z0OcSADJai>3<;Z0>87wTtasjHh6)>Cd@jZHKLB__$ENlc#w_G6R}NeZvSbk&VX){J z5zik0XygMuBB)DFHc}ADSB`ZkoO>A08de$|DyROFHdTx=xNR!OrDeEo#i#87+s;5< zbNlc=*k7B^JB^rqE{T5gv1i#O+*$Jn0qCCqs6$B6gFp%^#D9dl+;U$y+>(lURN^7b z@xAc=MZrNuf^{C?%LHkiN2KYa)vc6@g>TkU2mb~CHQ=Ck8x#))@OMC`|2Oo%?xbJ< zKrjFR>O)olc+vj_|6dap!J2?#gX;jmMFGLqAm{%waz!r_u)(l`y`rQCU@)Zr3;EXx z3M2gwo&Fp0Klfyay|8n_13Bl0R(Oh5;)%=-{ zCIM>mgz3TPeO6h<|0yyHNfuoybvrQ4PDJbFGf0Y*1>v^ScfWt1^WS>?|K9)dilc$% zKp<9eD5$@z;-J?A@RwH{^)It{3aO||aWiYk;{MH`%I$ygii0@HMNt0$Lh}HZF+IP7 zz7NsUXhDH~S*fmbC6cCXd*;)i}2Y-iG)gt9e z)r|@531F1oq99r(e>oVvBQGRCLTt{gj6jKW*?WhptcWH0|!N8Vgu- zQz=J9l7@jv18E0JpR!=3%9n`Liy2~@m-=y^OWciy;Khc;-rL-VMi(89p5aoQOX?K; z2S9yR`7qKc1N>e%e&XBh9{}zm!H+DVApJ8>Qo<3)r8xHv zS~qEE|4*L>!to2#*?($)UnAO&THZ!RGM`oBbtiX81=?ugDJJ(+OomC-@_ZUbZ}+GO zaiJu~HE%;&EFo1*&{ccLnZ0_BE||8gxeLnAxJi*~M!guOMp-aMFwzSpTL z+kr!PmEtyrVU~C7-GLI^23^9`jB9W<=)qkZ8njNREvAy} z7phY%-MmVL#GY*|J_)t~hZF^@H4RLQN10d^;P4=EJKY?pcoVy`-NVk^ynW40`&jHz zj!ipgU~F(7gm{xnL38o?h*03RC~RmgrQ=vk?Lw~F(b>H`=4}O+R==Y)#)`P zz+=QWi{ocT@FGlIvi(Y!50>UgS>5j*rY!ikR5CeIwMxGFMBh+TA#TNQGlqtFu{osnnPLSS*h37V9KxO<5%JCl>tu*96|CeAd{>#ISCsPm; z+cUCL-PLuCbTW~dmaSV`P=!S}#3bf7Eahr|j^VSSRN{eAl`nZgqe|bKA=#rTbtj^1g+26LB|xrap73?p=<%Vp1m> zG2BudbWPHpDS*++uBm3MTIuHn|4CQ}hw7M+&U+ruXTj?O<9%+YAr*ytjkMnmS$EBo z<1!QJqA=oOC7sUI>wnpxmZ60e87hrhTP3H^5F`;+e1rpg=9+tQrkLZzsr|WZ3c@cT zxe@hq#p8WL2l>;W-oaRj$!2t~f{eT4V5*zQo#2Td#}ZZ73(RNto!Euk;@+K%xa^7$ z588Sj4tI1~6CiV+&Nu~2gRw!M_6GN7zZ4}DSL2TnghE%O=3ik`PZXiMZnxNjTY=Qz zLh~bVdVYm5l9k;|JS z*4z`nr8A7RmwKGU$$BsXVYjRSjQ)lCE%I0_J~6iQzfH>305`e*0~ zi+d5oUDhQDZVYuc5*L&l`T3v)ba_RN_RuCXP;OvkZ;$ZYHwK0d`584pmStM2?&N0jT61PE5tS??ji62e3MCL^F{h z@C>`OO0&XNRJ+mn%(*RG3nAbCw{awm@D`7?FgSHu&vqSC7mHjDj{d0AJmERCTXw#^5jB*{0!_Ypa z0o@_;A*%e2%41Nt^xd~39NhD-D*L#K=S}RvWAUsN9z{%Zt_EICS^GS_V7z1ZP&|t9 zxVp_m=9OIWOWVGZEl$L$JqefC?Kxvt<)2GYdx; z=cO)}kl~Nf!B>tB9KPi4Lwk)%1JbDvan65>Oj1?D^L3_CnJA zmbCRD^Am6!s8Mgdq>e;%Psj+r$bn^Q8bNzjfvYFjguNB$EjG9#AQ-B7STWJCxM;!R zL?pFTgt4*+c1i2VU*&r5KiIY%c>|K37A|k@E83#0fm^SH0q0`FKWW#6Xe*EpVny%| z+2MBps;cf_xH74Pm~%*~O>DREf#hw#Ml`7jP8h;+Ft8cLR#-QRBYsJuMqp2_s?CC& zj3zWBszA&PuWkSidiZ8|z8 zohT(ep0u*8+KNxigJ{NKfizmd`U=8&0QdR=$s4msMlsobTrqw|-5HJ#D9NjsfQ?3_ zb+v;$a{ZEi^z=66>i1#62ih~jo>u^ptEi+LG*d~_e?moHAQ!r3PbEhsH%yz6tu1Lq zNmLu0LBMAc2W+|aUa3s(9alVCNLiYO8}|BDosLTvDWy0aUujKaJ=^rO$c?&j$&i~G^SCe`72|FnUpSgo!Ov;Afy9eC)#Rvo54jg=`Yg$-{+)mwg0YI)&w2j_r;mxut27mdgz zWW&#nM8N8*ifA7PJ0#cQk#0n*HX!39^q=ex9pqLlf#QwJ8*czpp<60P%k0e|F`6bg zggwfm(7@M5Ba%wQ%{GfoX!U6=1)_Hq72k!_36cVIdmu*ntG~8%%HTwwyvgV`8wfrF#It`r0fM7kzjEmh3mqLq^mzP5viXW((Nr5N# z!^@O9ShNUEKYc{qI~&%+N0M$mnc2a=id>3L9jEQlUbrYW5n~_tEb$n6%ZG0Rya~@$%?{Ouh(ez@NBD>kYn3P_o}A?{uV z8*XhvT{VbU4>U(!?MxVzq9=DJE@V&5Q66CWlTr_Nwo(uH;{*4mLsRYfW2Kr04d~SK zsIcwu$X+$|1L|2s=(lqJxMbx5x+R}}8H=wAFz)fF)PuF!5uipG%`o^qt>1DMwMwAR zp?1QixTq653&G}A&%ay?%Q|f$pCR~RIx}0r6Grcl*}bp;cNXKU2BN%??UN}xMFzzg z+Ae5jxH33Na0AE@u1`&35`yClq?z2K+KfDOW9oKU1hK<>-6O&DP>HmO_*Gflp(_Ya zfhKIUUB{WWzQwveW=MQt7Ux~}+Ad`%wAZDcTZ32uYSE$c17%j}0~)+Gy1?UzUd?F5 z95P3wlx`b^s&CG45PA?ptSTk?B*xilx1Ks18vhv6UMHe9FTvv9@0Gh(LM(0n+(A43 zZ32uI-WqNElU$7{wlXK4sMd$KLi{Sbv2{RGn6tmrlm+H_SL}@^irG(3RJ}X9G5TLN zZ(&k?2GUe^y(uaFO8*s5v~m73keWKG8zsVvM(U?zuF#|+-A`#A;v<7bSIy#00;j5+ z$PMb6F21fF$5Dl^js_bA90eRNBGpd!?{fWx7eQ8!Ooi8vB41t$GyVY7e~VPV7p{EF z{|y&ueJxynSN`!)s=#o4)D$1{b%%_6gWkI3OOZVlnTqB#f&~?)mb$U$D;Rlav`Yjh z7X~T+Ois)az6PFbD+k-$ef$=Ba?q=Z4hW&s$%j6>YXmarSbh(qO+4GZlN zVCP3e>t|jCQ9l1|dA~7rPrG`B>2rGIadWKdO$Od=&E2)4^jfZ^&qYY`@tw!x!~CRSUw@6e@y2hKbCpJ7{C>i_rysGEV;fYq4k zw>q&DO!o2>8b1+iI*=Af`;Z|Nz0Hg+NcAX+JU(VoJ~5)Lo^_#Od{owuo5wgIUjq$8 zmb}_tA1os;H@{IHZ{D0xCSPv+PX8aa-UArU?`;EKYxTwM>Ydg5>Rpt@>b(ZRt{Oyd z5xrZzEkX2>h?)qAh_bpUAwh^0u{ zbzL7v>cqR(pKkp|uHK>tPE;dR2X7+punhi;ie$h12cXOWU0>S2zPOo{d$)aU{Dk`U z)XhEW;p6KkPe^*Br%CW(vJug$cY+L$E;(sN29jrPtI2_9|JDPz4*rIza`$PJQnP@< z^LYOOptrAYsBZ%g8>-RMGZ$I^0Pd16^ql}!j)tY1`9H{UAd~i@Bwijf;I(`H0Ss+k z-hOcW*iq5x*2R;HXPYOH@1Ah)2RD1#&oMcIS_E4!ug4=dd}dW) zWl@x#@7q?NZ$~%5;3VQVk8AZlTD=sqXf)rszWB?(FCHwXJWji$dlDv#!ya9K6$N<@ zSU+GoO|j+@Xv-0sox=iObq$79h|bHe$qPqETHjYa@hS4aCm#W9Z08g$p6f@B+4Fsq zzn(moeL{`D;r&s!S8PVurpm8oNt4!)nbKz(!7>md#yo!ZQ6=FyP&lmlsz^-4rQtB| z9arXGhCXzG1|o(v$$pSDWHOS2M$pB2=B{c-fHkf`1>5Mdj~jN;#=ZI+;k~TD-$w%02>#sieRX)r*_EyhP{q0e-R7(Y$7d2W~ z+p+7jU%bkRB;V+F!;_!Yh!{`XQeVWXZ-K1uQr*{9S5-if{DD6ONP9y~R`2z*4^+#R zv~BC)R8{!#TAhSgV4;au zHz%fpUP~lDKc?swRapCoyx>g8qJ>fW{JEBF;laJ@k^c?U0SQ3=+P}1p{|(ehKsawB zb+>UkL~Kr*$;K_Sqf_?DZEBO00QlcP9q@5A;?6`#Tcit8s5*rZ=N!yRor=tv0P89#bt_QyWlF5+A?aK^95JE$dojPm%?6YAGbt=m*&7 zf5x@?a8_+hxyraP2h)j)=)Aig(fLw;NGBSLObp8YoMeJbOl?S&@DZ2J%(u5RakNnFdUeML*BZTioH#5G&{`!rjBeIz6f#km&8K6yP z(<}BMs+6v?g>V<52rZ#CpoT7cP#@dw$oMN0?-T~H$=q2$C)oCjkXZdEQ4I*a;s*xI zV!U0a9hsKjY=nL51U7Pu#3!QF96FzVV$`U`f=wVuITcyU`!ME_H0 z@UQS37_VN)TM%VfY^)q?-u-(DQ534GAF|!`>bCOV!Z0#aYcMPQ|ZX$+ju_~6`yy0*#ew}6EZSl@w8Hd)zSq*ylgIzBLbOp zhjl_J*AGBhl+ZesSJB;lEJ8e~fH(~FMbpB0kNh542%e5cA8wtY1=i{cWO9*PI{VFf z6!PkCw<1N+%RvtsiFI3EdrPJe^%(|oNR3Zd<2Q%x4GWc2$0diZVWE)7BC{(}0GPL6 z7h&JZrisU}^7m4x{4QwxxuiNCA%NxIy zr{3Dv|JZ;0+b4~lsT=Bch7jixL-{nbuC7+kB5=;93J1k3J@@v9{QtF%jTNT%Br18Z z%d}g09Hxes7F4h)F{gVTI^5vYbMRnr)4fM)ao#&sR>d{JW7R6q>f)rz=VAe61MHB< zyqN$7M%H|34Lvom$S$vGuMm}tRPPw>aN^f4D+eKFE(5aRmNP#)_i58Xi=0$C#Y^du zzhZYNHQd&6W&F+Un82tVp)F^khQDWWrx0K&YI_0l9PYC3Kz;K}Ju~_%od!Y&r-J2i=9Ln+WxTyi#3>emcgN z?4(pl0fF|saZ0=9wOzJhnE@@E^yD?sscr>Lk(7Bx(t3%fGMRO_^ai=1`Ob?E_Zcpe zVh?tJs0jBt`V*m$l*bJWbV9qS1v~)T%fboXaBhd1!-~JQYBgDwywsaO_a?C8y(;aT z`7kw0L+-{pak*Tf{;&-~$+z15hMJ%FpGMR_1>E1XuYwNxy@b_j`Ek2c5WzO#uJi5R z7#SiwRqGU&lyiVbDN)2@HEyY{T+$_mezjthE_N1Hwu3ST;69ee99&bj{AN}1EBbNV zh_7ngL2|5mDU?fhj^B@jOGf>yqlnSPNgY!eLO)Aq)}?N9`Mj;#illWBsP&`zp%kSx zh|s3WUhL`ysr;b8g>P&Ca;%x_lg%nL@R2n9{qdw+x;4QvI#8E}219gXM?po+LeeAt z5C1jFYx@f~9zIa@N9L*~yb1ax3dxHfP(UvyK3G>Yc(Wy=`LIwyzAv;O|ABJwB z20NUKIbGcKN_#a6GN#?3xCDAIN?bwW>CFRvpWA(Pdxj1MyLxKT=-{@(^wfu0#~gX2 z{~(S#*Cr#uT4??0C5h3Z7hPI9yDTTqq|QdxtM`BQ z%5bN-?NSB5G$Uo@SbuNzu){aONX97F3;pAw4T_@^;eeX;7kZ2nc9q2@owi_nBR6d+ zVQ~Q4q{;Vab5V8Fsp(Ph587qdjS4L(O;7sKjcjYCIDn73Y%+7s}bEW+g&8*VXj z22uyG{H`YNoefRFU9+b$%xfGs=H0^Qj)s?B1$S>72}dkO!L32Y>{K1HL)nfUgemE4 ztDX`LGc}@w5t|6o_Z|#5?2A71G45I3bOxdo#8n0Y;@>MK$kl z`y1c58+t{ry64c1BE$1O@#)s99ka)YR2@Xl!XBcp zZfLtLM`d@aMDtMJywY<$X(9MJ(75lGx1Ff8+oSr=|26A(iLTna1OEojhww~zXlFR@ zeN-(e82Z_Qv|L`?_QpDn@czzIhtHmDT50{uE$=7cS{OUS&#*1hBPY8UtQOvAmvjVdP+!Tybg-2;70^y|W$O@uG-tnx_gK}PgWc&4Qt(EsA3mZ{vTxB}mX4|Q* zwzhRbxLQo{ta6~Z*r3sY*ruu8vkI{_Xwnbp^qcl%v(yy7Dei zE&olokDssfmS00TSj$oRlHY-)!@~!L1q++r2R%KMdetk@t5!ZK3!(wJ!XdDnj{HbB zN<*sSz6m*DAyA>j3)e|4gCD?77X4IpLac#?d9F1vx|hfT;5WBjrc-L=15?b08WagZ z%@GZJj*jLGHWcLcO8B4ZxDFv6JHN>zx@A^b=Yj&29OdojkZUL?MS(6`OBA{{i#eLl5KYG>)SiRWw}kO1{L*#8-VYK<;s zZZHHi8eFA%Ptpz*!Isz^p37U}E$eLB;-|0 z|4z9L1T7!yC;xAm#>Lw6auZ?6Cz$2Pfh!+n{Q3oAD+aLj#p+4y#|C1YccI-iGID8E z!BS{@2kaVSmJ9DPlgWfv6|6Sq1fxIjvS;6W8KmA0@>$26)Q<|$hZ*QAy!Q&{6o%-7 zzm}CdA0>{?Q__QO!8Tncjx46q7R#)}UD-?t_IHzeA7oZOx}*%#_zDq6#BP<9oBAaj zWu&7gGE|w%|2yY%33M4qeb)<*IYltg-C6MtgeBZ&O}0Qn^r7&infv~=)IZE8Ns1p9 zCsSS`SOr^D87%c*dYP1m8bc>M01cwPPJoiH>19&J)E77THi~0)2Pid! zR3F}|1))b&)$&8V)*VT`R`7ny9&QotbrI-QSO%2+m@+vv*)u63-mF$nG~!9GU9b7T z4$=y?&YNQ=Ket_I-+31db$ezSJaTG$l;jgr69^afUhLyzMFJ*2xy?cvka6>`KO3Yu zA+Z)-sbX9kg_H8P$!Y=P#gzCk&iSX-c;nRbC%QHT8CZ2g|7XMRWYR1soZ>e`Php2C zK5!aMrU1r{oj@m4Ah~mqoSdAn zoWhM7mE4f%9nbo)XbilIIYXzf?4y1hgVl9sU zWsLbBQ+xQ1N(xLoJ1L=2`@zbov%-j5*Df)R64dh!sz2d3XHP>aLv$$mqLU@=DM)GE z%k)JJ9uF8}EiOnb^fH^TObrb5tDriz8#8hK4XZ+H{){1#ov@8YyrHZU8NXa!z?=Vk-)o z$j{;id=_pPXiFNk@1lDe=h@|9VM#-CQb_JE(6lzuf}C3SB{f}@X6X*GV3weJn!@yk zO)qxWTK+<-JFGF7KF3p>0mGaWp7DygSaKAGPtT_}T6Gp%^y4D06Ek~(OVNU`_|3Pl zx@PDrxDxNkK4Zcfg3!7xsb^1g|7#m}@N32=%pW@4r5y~c;Cnw3#L6|ORwZ6ljfyi;TD|u=2Lu=-Xx1#C7YaB=>#P$w67M+rT#Nv zP$joMj1UdowYcR?l4GoeKI4NEySSJwrNsNuyU6IKglj)t#|%z+Kz=3}e-3v+e=c5& z^za`l_}%Zw$)YeM2C%5b+7YCNUJG~BEPwdEFMGxk6dDwI{ypg({*9vHTd}FU2kNhM zLUp1YNAF+j|Np-vn0I?rkI6CfN38WiHDxqT_HT0NKLApn8>(Ay)?ND7$>KI&{^qv- z13(6pdA%-RIQ^rT@%qm@ee18^4-UV5`TyQ#YfnzU<-q;QI{jN;dy7zSNcV`E5L>>9 zHvJyWe--mQnlt_HE%>FomDq0udz#@7(-S#EXSvdLi;XiwlB^9)4JgTWJ_3T+6rcji_(tsZ{Z!U`-r}>!E8u={EWL{ZIOHMXlHJ zMf4zlZ8Pj$2!#n%FINM(Nb{-3H?qR`7d<9^n(;5gH_G-r+}uojLEViHl6K!DncL6H zJf)If$ly6gRz>g)u-bRMB(7SK60$e#Uga^U-Nbpxh9RQqy(|Rh$z$f&4CTowdpyB# zb(yIuY{Nmx9a2fohN@VD_w}bxEs8kioj_efXMHy}lvF3$7mQ?1wAw-nClqMym0$B{ z2K4tCPMX>{Hw?KD6g*C(iz@)9yopptHm#BCmLJ22y5K4EKKbJp@nQ-wN@{NNep~7K zdIiFT4Jha2thIqlq~58Jn|qSeB&7?6aT+W^2Q}4eZ0wF>uXB~G{w;E0b=vY$ab{`=SgNimvFYtI^OW0cQ2zg` z2|@_`uO`U9;Ug#);D0qi{v!zj;oLy{A5DUTB)U0z^PAm3g=1CP?Z8d~YS6m#Tx722)P zZ#Tck3|zjEio$W8-Ll;eja@j+`)z|g8Hun>dv@a0{kPe3!vR@VkNAtreIgna%o z5xB4PBsRe?F8nk@z0)w#f06)ZNbPvRYscwi|NGZyMW0O9lU@U*Xj%jRH7I$1cC?D5 zyg;nl5yuY=?GxKvp5Eve@?`2F`q|G!Gq(MysufP--g(Ef+2G zLK@tyD-M|*R%7aW&V4KL$*qj8t78^^mw&b0r_PCyy%>ZOlV$aRYXwrAE*Jd^7{i2= z3b%^RlS^0=ekh+f_Eyvy(x?_UIghQr%;u!^YGz}$d zf_kLenPSL_<9B-eiQl>an8o+fLlCX}^BksF?;MR{S9tgSV&B&nkd4L@-EfRBX$8Q9 zYJ`#AvCW-P?Gyb~xwVlj=1xGaGx0s9?NJUJ!>Z6gtY*Gk(Py-+HY%mvLdof3la!Ji zu>Bw_nX!NPg?dC$U`$M0=kTG6pA52EUX(P0{#BD7(NltQwKtbtXHYP(%FX4?`K?Bi zpczqdI_Lc+v7}6L?x0K&vO9W#&ZQw-!U@zg4xW<<^q& zR~nwY-F|lgW*qDs+H9+Xw3-3!fHA=lTNW`=&5?WG!mrAs>Yp_J$C3Ti2SN+0ak8Y^ zCo!BRq;yaW=JFG#yV!r)A7fffEY2%+OIjWd>?Vckaml_OdL2{}6R8m4#F#((89L%q zq`=btJ=2lw(JOiJLh|v;$SB6)4G+>#s^)IxHv}+DPDb9EY=a0{BF=Y!cW)~R8A@}< z=F6}5^CqIp4{qg|stz2GNsBs76FZJ*NDE&O=lsP0HnwVUV~v~&?Vn@R7E@uz=6C~c z;FKq`{Ou1@%juZ?+Ohy%EaB0@E04OhH+qD)4QTe#Hc+FR%Hcn`%)`ZYM*$Pu2Pp(5 zoJ)>IIGoEI)!P$L8{t^Yqz-q{t2JI38>#nu+T!w?W4XCc-J1}n1@v_`sX)UkAe?4*WinjE4Gor1dJ|6&j)82%@{qEhBRLQBu{z}71WfAHZr$g8qff( z?-k-28c(lbxg`s&?w-lNaGchg4U*ULhTQ$RqI zlC(%B2q$0RmK)H|gUs#!9r^WAE+q^5nz8buYF7+zar)53b)aE{{REHf(F+ z#*8&S5RwQ5Ghv4tSeYwu#y8()zbS~-VOg)Yd`V`m2`D+%LHGz!Wa>{XdQkMpNhlBW zSdY?fyJM80veIFw9QWa=+f;&o)(lXI&9~j5+GD!WxDGaxgMw=>4C_W*&Yw>I*-U!E zRDo6)jNZN4lt!uxI&V>vY=;m^Ox_@z6b0j`zH?u7Zwo&h7LI}63&X|xF+nv1(58oZ z*-Wwskw2>nW`U!+;!<0ytzrwL1m%y{HqxXLCZA8N40pn^Gaysr%Ly-AY?XEMB-TO2 z?zhkm`|Id~Cs{Xvx2J5Ixd>@D&iIE39WWX!_09C)58i`l?w12XoH8ed9Ms>3wD zmaG~pU+!_JGIF?nyOFvN1#l{}A!>r;iL22n{4E1i^& z8}=JsZ}I2F2ad3JWlJ%~S0m*XxG)6AOoP0ns172~Htf<0v`6~U4Rw+;@>Fn8aJn)p z-_gBnqX3eu{;t{MXKO| zpb}Nl&mnvEOATH(H(}nKY#{g3f{k52>1&b-%lcOeP8dKHLvNNuY}BbsaXxTdENuAV zV8<5r*NU@xCe`J+jKqE{5dk2XV+n|bdHw~^wwgWU0|4WwufbwmMn=X~utU?8u{L<) zM|(mto+5&qYh~wBgM9rL+xbuJo8-RUE9D}}_6av{+Nm^DqZxlB5%Z(Zn0F@t337x( zou|En2E7&XvXbjsGjpD6&hG(uQryBz8MDz3X`~{;w|Gp0MMs}q1rHN7z7@4PkKE2g zs@d9efH9wLv^VtC<0^&J%8-AI3>WR96!HeX)_ua>URb_*)qp941v*)QE+ko7e;q|~C$sv{T%v=Fdj?uEid z$TmCl1^41XF5SeCD22ugrybB^{$!iX5>$z$Z1o(Jj-I}~%0!*7Jrb{30@_~?F`vw9 z)I|>q&K1Wgu~IEXX`)F=m3#}3{>tAE$#NR|m`v_BEEBDCBd9&|w$uAbkp_eZ1iP(; zGhOq>Ys8iwSXhlr(cV)Gc&%AX=mhY)PnQrXrqessvsr}$zUpPg{Z;uXP@msn#*aOy zsxH@Rg`LN5Vo_@~QY)o2#mm0YO6yL!uCz;vS6eGvn7C@?%Yi?gC*jZ0trc=^RJq1s zeO^W}%0+QVF!sp)a)kE-pfOr-z|YRYuP6r4NTL|Gg|Y17^N6bg&g)iVZ5K~gt6Aq*`F%#F0}#jDz0`!D3%3UY=>7k4T2qUFAuBVJ~5Zx7880l zbD_=GK04%bB?P1YhIuw3|8Y5*t?d)3{(HhNZ`WvK$t!XsK2bWM67Netk2(9qWMBrc zZ2J5=s+%b&&W_+<%{UoiM9fTcF#VtgElByy42uNBG$$Ku$v3T@yi&qU*h(-B8_6j+ zKOX6nRj8l4CE9<#4;3B!iiQum=oa+{Jhvs!Tqe5M+Vdl#W8ylzWD;WLH*I$;Ergn! z2?;Se003$ z0ra&r@H&l;(AZ#%onag0c_9{V#b@x8o#5iv(0aTr-~N~qlZ@_B-r?RY^eDinTjgFR zv=O1Zbd;ySbEFcbF!fXE+CM}WxvoB%gkSS6F{7YANoz>q>p#a!$IMH&;hq@Kg1H5l ztjMYvng~D$=-(}m$29!TQrS|vW}Ja*;Sw(@TEk>>qQMMmO#x(g753A|tGq<)iGuOC zGPA?f(Gn~J7L|dVU|+;lRS_`h$i=Gv=4IS<*QP~t%*Ks8`NNs|04Z`L` zY{wZ~Weo9*aP?knW}eHI=}N?~?cf!SYl^i;j4yHvqi&b57Qpp=zsUCi%xvfpG+yO^p_KsS%OEb5NAO4*gpV_fGE9SX%;xFTe*6QN-tAgg;+l+9g87Eo_tK`GMSfR zMbmQSm-t=`y+%Tqa?7-z*mLNL@-XdNG45#qP_jX;KR@autF&t-4seEsgbxBiFi2d) zgJvWiK*#oO#S60fly4ZRIWe}trI)FOiW&3`+ubp6)nkIE6sh;QcLA$)PtV2-+;kr?xaxhPEbE$2nQIQ4M~q}h;l7xPG{&F^bk3A|yui@n?u z)RE(gSEy;z;C-C&b)5faBgMnL@?!d=_DSv*5~tf=b8t~rGd5N9&`gy|In@Z$aP=xJ zK77Prxo5BbMD^kN>Um!N`fir}!W_kvl-o@!5J;oFgFK&*-OD4ROgeraAuqBhW_7y^ zk`BFO^edAphBylwZ*5E$XC6zc#VCD(d>b%bkKDKf(q`i_P1l|~jY^N51vw@Kd{d9n zm^tWWQiy9jeWXQFCqy4dLv;TifPwFIy^uwjBtb@|fI@!|fRCjd@!c+!UT+dLKQNTG zc}GN%n-`oCx<_7bLawIUmJ!;QOF#4G&Eg(?wzk$qYUbq>qncWlynvzR>@r0|jV3gj z5<`hGqxljsULzo~91!uY3qizCc-KR8|4vUryTftstD=fjF1@D{A5>YVJW?cpitp-3 zIKWb^>qo>b{Cq8ZDuHu^Yr=ILnI2ODSk*@XJx~1mVDaATvN<`cs3z9gcbc@fNBOw< z7b8#5^prLmaW9zN!@N@to`5c&3?L0^zF84+g^v}5?<%a-$*O6%)?3dGzxAI4@rp1^ z+D8V+1=pmJF(waylTNXOR$(e6?&;*-t zlcR0W>-vKrbFE0J*%#k4$T5*7UaastdWkkc#*e*!7S0A#*QLO1vTCF;IJ|eF55wmk z5egxErR*|{*9hgtvCqut41bq){o%C#g;_U3jZudfMTrw%vwtw zEKtfQQNus!nWH2ITfXRneVmE-Bx0rcNHY93OLe&u*1vz0Y%_L^<DWt7y)%7rf!;;;AS5H=8Setr_Ep?EvbkWDma=d8SqjXC zj|c#MeRIBJ=YEG0-+z=FNPu48mzHn)Lav$)&jH&@1yn)yka-;&_4okdepaV=5h3v% z7Ce2R8sz0#v%=Fl(;DSrxO8Q%{p5OBjAQBKz~2+Tco$o_WqL&_l%DVJ!gyL&&q&YH zUlX?rfN5k<@D{yIWeuTtZ|dl_M`WL}GAMazpf$dr02!1$N;s1lXBaMuZ_O5UcoO-e zxJT-hJkq_+h^<9_Ae8?ku=Ihr{E)u!J7|b58qfn=N4)}CPMT`_5b1Bb`~g2k4R4qD zClFm-&eH^&7>>2zlvPx5(^pDNesnk8@v4&UM9#l$@Ie>fIkr$n!c+kV5z&Z_%- zL(>FGN-T2&(SyWLb^~01%dxO&XuOJLN=MvOuD8FJ8Ly<97$?pplM}@_W7M<#+Z$#``M}FZh+rb}-g`l37@!ndnW9GRf#3N|L^}d^{}qpjDx`Xqc9R zr;S16Xj;Btyn$EzH*KLPEna)m|0WWE(1MCqI-lF`7HE#LX;FJ?=lr64Dc&hu!~3FL zeUB&|<8rni7Nu}Hx^u_)SKq6xh@E#zTR9gG%5UdxhX;}5kK2#^lZ*{us$H*2Z=uEv zSoHT&m&@|wSUz_F0bBj%UpgdC9}MyCwjzJE&HIKOv)V^MZ%qWs_2m!bMH%eDNo*TU z0=*&1?&7rcjw%ngUSWv@`yzCaA&5buN~B45RuWa1>Co4Qn=Uz|1#*u;CH+`T^T5sKy9#YTk)+bdw6iXyfbzWz4ao?HD=Vov$@NOaTFS zK0oZ1MskA=-R?IB_x_^xKOfMLBuf}Q0CM?HL4jaBo_eV?!4VU+SsP_+*kFND*OzOC zWobD;L(M*aDIHMPNuLI}^&%|Rb$-CQ*@x{d6RENPAQxOq-z%UfB~-vzJ9uj&_dKLq zQ}96QFr5yPOXj^`Z2zj4Bhz4kbvNUo^YN5SsZsd*(6MC7-L2}lA#Lx$DE4A&pr~Au zlb9)!Q*gGagyt04fVz8Z$rjb5$oYD|^^EJ0F7`@dOW&N7dpS$o03u92?@)&20P)he z`gqQOB*!|q1WB|JwP4{U0nN{kQ$_@dP&A|U*eAo z{c8sNx(yR|Im^AFi++hBQxZnfSh8XlD_tK9kF-a|#x=Wy6Ak%--q{u-**cEBRPO8( zISBQkBx*`hkxWgy-zZCPAOIl}TS+_!Vb0_JW!=^j(5|-qLP%#wKNc6%lk-hg;Qb6} zkk5C0YmT3PnZJ{LNiklSd}1#=ut_rDQ6O&YkkMdkP(Z`Ls9krQ*FjQ^sONEhe8<=_ z&u9q`lIJ4ju%|djq`{|}*HXKb>|n}HK}ti@^USDvguNq)6{X9wq#~1jZ(CaP;T|6k zSw@|NC2avs&PghHax+WP_5A(h>0S+^;bzk_ED9#sno@Z0s#Mo0Ni9D53fw>Y_Hx)D z8&vCbMCfC2wcX+vfEG#}_2BvAigWF_Um3hT`dl4jWl@Neivb?NtoidqE%g+OMfvOn z4oaaEwq6WM@7#w`Iondg{{D?`S50yOHo-4P35u&UZRgy(({!ai7!={WP`FYlittiD`H9ao#e-Z&xQ@P+-;g_v8=CUwx|uBFwMy%GsbYfwA!oV zJSmlu!UE*tzohcp++xGxD)t*>_6UUH^j=ppR^_Lb^xjkxh7F%2T#J&^z%f0K{IlV) z5H4LKmIj_GBBp-;hzdQZun%T^2$F5%^4^u)%Okz-&)zius);5;ygNkXHi>$9cGgeS z>m?5T2jHf2Q_S%T6TOu4AD>AOg-4C*cX{YCe;n@`h|>1d5?R#q`-R`++m_^{ZztG; zc9Rzu8DGg~tyRA5T?EhYmg($gE)9E*?$TEL+?4W88Yxw=tL7EPa{KUxDBQPH9MN8i z!R|XqT!y{KHUxolh&LHeBZg&th2Y9>_DlM5Mm18_q6$(tEo^70Joo$G^xq@YwNA`a zu-wIHETc1kRPVO(P&@^K=52T>S63*0p&1gZz~`;AXU`2Wqh^WDysz*|xn$~H&Na_z z-hyhlil1*l<=C^Wi&DY!K|5Xs7+IfFm6@bO3>#W#bVHAB^;nYxq5-n`aV@c7Xi}cs zOw~@P<`^0;**J7|_rKCuegVZk&yT8dK zj5#DQX-LZVIsk}(;2(gFt(4}GJU61OGx;dT+8zFrMYu(4+ssu?bJ2;V)sA+8C3u+W zlSQ(NQ*hvZJfkV8d-eE9UO{$+fIi=Y4Cnj=wH!I9y5e`-zAhK5cW_z2n5(N(ET_iRhpr_;bK^J8bw`q18x-I)85Ve?P zWe?!6>t*aIqMnu=boH@GlWv!!X+20pk@62Wh%rkmc_jHX zf}G}!CZBgQJ0mr|ziMf#lpvC4ewxql0REHnBn`zZ@|Lh!<4sM!eB4$WdzVE$>telS zQO?iv?>GK7(`5CthuJAw{xPE~De5;)8+eY?`N3vgWNJd`UNbXV0!i*qI_}yN(@(lF zsLli(NTwPvd>Ya)u+Y*v{B+}VKp~FcYd`E%hEPJLp{3C99{^h{pj-krJ^q(}O#rE( z^vm3<fe#duPwPA>#-*x*Idswv(Ro8<%8!eKUK!&gaS2zlm4<-0~Z5=<($C$eQBkNJjM z5=Ld|&gOO zxTBAv?5KL%4uTd$DNb0}78+M{i2XpRuT#fFz!g6aZ3sQW_LWk%I-M|?EPW0@U&wBd zd>LLd-?ZK`fO7R~HZzr3T~XDzjQiy&s-(rn2C3@qCSF%*iW7-~3_dH>sxVDUIK z6B<6(|5*}aAsu4?Nb+UF8wu3%=-Rr}uKPi@*FCUo0@TXbwRC6>iM+OvYBfq92n0p1l9APKAOL!z-#} z8UEbK25|STMI;#Lwpbyax>l!F0TR6Mj-auV(`qL~sB zf~z(4_3&}OM32pS=FoqGUw1RBb4R`y?9^`k@?Q)A&uZ!AM-no@npCB*gLeIlj;cQ5Mkt}@+e{!ueA17WNh9g5H0102r z6^)Yb|LzxXa*AcS(*j6N869!eU_=8rH4McIhM3fi(0{jSS|Bm|gHthqJ*gDq9IUQW zg^)(B*9)ZMo;X`sG73brhv}ekjA0HK!2?9FFWosi` zWa)cRIRjmk%f&&P4>wGZ#p|gDGs8aMLU?_P!B>HdM)uiZdmKPhP0Izpz`QCa2*Ft? zg$#y%W>qXbP=oH$>^H4V(~;^00q-RlEXmOA~<48Gm9vouXl8@L6{A#Nh(z`(Y+z-K&ZbSQ4+CTBuI53Xvdx zJT(Wnk|Cx~yTS(>3T;~@%|Djkmj7XcZV)>yLYhZ8{~XI-T3i1FAdO}z4l z%&s-7>DCF9e_k`-2XYabQ#-!9VzYLI{5^TOJwy8IQ2r^d0IzQyXmj4cGpOFWXPyLP zvf$_>kTwlC$gDucr9MfL%8f~*auVm(X9f2X{LtDA0HnovLmg%M9W)F50nxCM7);tO^W=!V(}e%*+u_>(qkli^77e%$AtTXj)?&_u71Qt+@mUuuY3|?~T}e2pK0Mr- z+FX40cWa4uJ6S|GHXl%FMEcN*28iuXhY+I+M)K3(sIS2T$O{-yy~-#`3^kBl!zkXk zswq^dAx7qjf80p$dig_uJIrTpI#Po*sbA(1yI(q;6JpxHSep~IWyCd35Q+-2QVKpv zd+p213!dpZ$yRXth~LO(%j}08g(U#$Ob*0%kAVZAlUOXSsWGCP2^!}Gg&;3aa%o6q zl_oOsg?R|nwrC3!0!%}jFqOV!xlar#;$|~EHn4mMepeu*UK&t&?ViSl=xBecXyc;@crK`xe{8r;W z>DU&NOnyi39DCm*o9vD4lirEnOHqHs*IfU6fA=Uimqdg^B2_qZgN@t&4Vg%J`UMZy zs8OgakGeyvS{`Vz-7gRe7_FG@Qs&p5iF54PYS5x%aO=7$< z@*kWe={hS*)d3!1?+@Igdo|!#)J*kC{zu5P5T4@kAovI9*z=t1AP`LEj(H|71&}YH`Bjbmf*I8Gf%RH44$f&%_I_cS zNSd+%TFG4)t`y>oU08g)Wy zttaC40-FhOB??%gEmmygKgj++@o)-C2*Pfeoi)xG+`UM&T;OS`0WBgi$0am<q(QGiPc>6_9bngnxxwRUxe zLj0fjaR{Ot8JAurssN+NY3EMy1FzytAN>OetMUNGL^4n^bNljm5nuKqzOrH3AFTa- zFY+E{6XH9XKG%Uz? z5Wstuv7Q02Oi1FPE(``d--)en4k{T9f6%FY#3_;HN*zhyMVFm`AwAAy`i|Haqh2T9 zsZo}T$*u7YFj7n!Nv3?9P4$3UOfsc$GVZ?r9PMSita>}s#o z3eT+-*JWI7o817Mks|AHc)szEZfrConUZ9A7_8R$7MVz^E#HBrI@?IU)Bz@ENmG8 z$xUw_{TzMvCCBp&hcQTPv~!fe>7pmEtAW6#quQ-H>H|LQ7e42zi*Mslo_<*>Pjm-R z!Cd7g>(b$YkMp?iwcpqymKS8AI&yvlCPIWnlnMEj@b~=tm!lA)(m=phOv3haU3$bX zIC_oLnqmeVG^CVB^kX^RRxQD)w4_hlk`w;QGLw%qhnQY3`Cx&|2Xn?J7R<7o3fm|D z`n7uZwX1wcYy!%TKJZOxS}kgkflZ}dn5myt>35{xgY|^Ru{BNV^`-?`4?4Z)orplR z52oM=s2p1vpU_W20U**BCTtR8-Vn&a9n^%)x)KchlB%t^;5s{{_aDHOHn35*sfI|H zIh2}7nC#t$i^z;DOMH+v*MRDI1m;2wM#E$g za>D)k0h`{7x)k1~eUv|7<*F$sU1rduHA&Lh{)*Ug zq+#PzjGXGFw>X^S(@I`w|K0JPy-ovXH6m_z{>JD)BH zT5?cz@E7!MMe0noP_7%$ zM|lb4@-n~pi-iC|HAO`_6EH0>9&!E;;PrFMSmn7@i7@^g<-t^0pdBD$onCuee_4PP znO(h6)Ez^!d753(hxYIYdwxEEU=b!PlnqRB@)+ZCSLHb$+mdlc&;Ti(HXbF?sAF72 z!Fq~{?+*mNZ&N3kYy+yez@Nqrv?o0s5Y`PP-C{ilJhnVf>DpiIE%P^c@j;ofOje>S zYLSNFqYw$sM!8({VH6WB+oNl{fQH>-1s+7?7?+URQO4uG7^`^hgLuV-<5mAOme53S zZN~8)^K3hBJ{9>ME3i>pZ~WO8zqoIih-)?lR>X{cA-$`;HvOw-`9}Xw0QoBh)c&0z z$izC75PT<>na0sghZDE`+*YwX2PK5;a%!<5kYGX(i0gSyuU7#|Vk?{yRwu{+1c&Du zoDJB;sz8vPwH#!z6e1BaFIkl0%#Ict5wdrXGKG;O4~&iodvkQc-tFQ*bi_+|(tbe) z0wSg(UHjpo>1RQTJkr-pQvwn>0vjxr>sVnSG>p-wg*U($yn4p zPOlkF7S_dB7j_* z?~9PajI8y7`1Zgslp==;lWQ1!pfb%(-ro9f#K#Uh;uZh`1$cKU-#)oh7Qg~|S8rTg zF`Wz8aB3(A!T$hd^rfSq5J4)Cvsnv#bA%dm27L6#2ob1A1idG0ikvBf5Hk!W^=>lT z06-v;bWop$Y{vw9uzy}-oLTSy+OV{W0{CHeG$CV@eOyA_XGQm5!66k(t@ikD1PCbv z&}h_SGdA?V%^^>U-ti^EMo>hlMIIpUh3Z)XCVM`;^6m;0Ny{4x`(t}zFo=z}JM`xc zD2=R6HRWM3Iw~syr)d+XX6LpemJA?CQIJtgV5MqTJ@MB%CxPb(7=#89IV%~_m`Lj; z4OD~kF*6>I$9U#;q3%AICXe-aJS{UGtW{m}@$HI7YG>is5Q%Y5QS`wr_gN(G9+poZ zGw_BejoSvaqX8UJu|8M?ERbM%cxyU|I;oJ=SyhsSo#v2K=&10{K;$-vTCRC^&2fg& zTT4B{tK*Z2WdRAoEm4_u4-1UC~ysNalo znKY5|aHy22z%Pz+vQb;e5Zw`p0D(aS>R7Y2U{myL0Z3iR@?fJ<5ti~(<$@q2q=H8+ z@V>K~y}v*EASzDQno~+}y2+WXHQ`UooTb^AsA#}MinUrS%(Dji9Wa{kEVVx8XYmF> zkYpJKQXk00G{j(r@>Je2kTfrIB+|7;w4?K!Xrge=l|6C}O(q0Ofnxn3tV}^CkPsqt z@b{cSKmydyOp*K$H4~%GDH7l+ES+^xizKG0IH06c88E>`xJw*N;ZROU=%VI0{{S)V zCLz>Y^QId%L}d(c{#GfG1-D5n6V%c@sezw@R7%;--Q!5FG-hHqykg`t(RC(Bg^Ucs2K8^4$LKAjPTdOP z=OqPFLo%wxHoWp;%0prm5j`U!EyfU|%W{12F>DoM6_z`%Obe}9VG=?g41aP!md{$p z6&NTIX_!Esk69}O_*96fw$8*+(lMD42VDOXwsJXZ30+BDt{CO5`7apHnZOq_9tB1sg{haR}8O!nAzCo>+H z%FH2yPddd=15rvo%=XP0^(;=e+XBk5A?0Tgf;xO;kr2Hezbqz5ODzdz>(s}d1TW7Z z1$0n4oV_OzVo)Ny6mK-aZ~z?$50(%Hh?F7mkRUA#AgU&d5u63Y2{kq?taw=%I8!>B^X(W+ zT4?h$udX4$stD}K`RkLY=mPdK@8RalI&>#*wn2FFiHX8n{H&CK8eMN$bLei&1UmJ@ zqC*p4z{J)u3ZykDAt(~{!Ub@GfDs9B z6e4VKiV_@LL#p(N`7#(00^|gWfm1UJh=G>KpfpJbSF;;YIt0w70I=?3XE_m!6O=o3 zFH9`{bR@|<2RIV?f-I&k`qphrNSIC@{{ZnT1p(x7fcB8HDHNSDbYpS@wUID{;al(M!v86Ut6 zcQB_AF&R=gqG7#`w_Wgr4N?~Fee-htVKht9^5C@TKAAJg;$e7wu~H+TxoC1Gv314} z3o$+5-ZyVhOpx<96nxscM4!(12xP+KcV00GHjNqa#w3JN?7ui*@L2{3kp|{{@+P4Y z2u7!Bq#VN-q|^{?Fu>clOpD|$!NP0v*I4HPXPD~!kMoh@i5qO6gC*l$-?l_z2|^~R z)x1k#qC^v8+{ym{zz{?ijpRX~gop@u-b_LY$?mT?IzF=UWnV)phH$=EtOv2f5|IdD zh}BH{Jmks%1@Rs5+=D?9+t(=3s~L8V^!>QhzSZd(p8o(%U?u?-*e-ft3M5HQ;U}>* zuuk|gJC#W+(U3|EY!j%Sm5skF%!gNptoO#q<4ud|&((AF-2Hb9nt;2Gs8)pa$rweN zWPxf8qHITZ?A8S6m*H5hUZzZ71Uwz7aG9LE=f_pL|7( zaR;P{G3|$Fk}`<*zHl>YMiCs(PBKamC1IIQ#~DV7rYCafiR*b2LM%Dvow6$70y-1O z9QnkWg;2zxV$BPUWG8k>xvn*tj?IVRV7^}r3y{#b!hnWv@Wx63x7 z>XnF+d|!-&fW*L=@@d1gOeu4x)ANnuZi#^Aqlw0@%?~TSAkc(PQo`+qPK@c~$Z0Yj z<1ba?i^6MC{Mi~p!*VPo)>Tjm2gt(_fC~%)@pJ30as#MX5c-&DJn?}EBsDhp#O-VX zOPhT#v*gP#K|N=`d>$Iu{O1^jAdkh)P)cYash+q*!Ih`2m-Fd`3kaDSr1r=XW=If+ zAsAz*c_ZH@iW4XaDP`&Q#1)dUvfiI&Ihr-spXf`w!bj1~K*lNK(-#!1%8Qtvk?oNK zup+%zu4*?KA19pR%7iDcoF+(t6cUHi{?U0dIdl*b5Y6=R;9?C0Om&QilM7EwFrP~b z%9M^&b-^?qsM0G!O=Am%a4b$BLLvyBU2qc6$b{KPmtMG>qe2X#q!nx8B3v6UTolI# z7*bTgWXvrZDe>!3F$nAeJ`am{sFQ-JqS}CW!-mR4)CAcN9We@%I-6oTbjo<9fhZfO z9Xe+41zrIpvD(MGjuL{RbW+M0>xp+LBUB*_#;1Mz;UJJ#9aR!#iJ_g$A1nyr6ckzjjrYc2EeymZY2r!rsms|w1;dyz zWq@HP5ZXXzrd)*pSh{=HTFPoby6Ka(2qIt?2AYpvOao_D5JVp41(PU|TV%bra`0uX zCdQDTh-4-W9u$r14Lt;V;+n43s3FGCZv_h>t?FyWQ2RcA_8f7c>9F~hJY{8BmKkMD z0T+g-*gz{VlrJ56;_$iliHgt>msobDs+B^WOie^lgnssZ5%tf)KDqcu*FOmQ;87y| zuQ?$E0T#*A01?}HF&53@NN;0+`y9QX+R&ti#%^pfU~JmP=R|bY@4iMwTxFDf3iRg~ zlaRsEN$z7o(Vc})WDCHQD-AX7=rB)JZ~fb%0eD!M0x-KA|aE!o3vJdBC|ZZBEK)9yM-I*q1EZ5<#T1si?TM428KZ=Y zHOE-*iX_<>w#5h|jA|iSqZq42h8ypXYGjo%Yp13H3lP!6EE0l>SOZ1lI&jXL>#su$ zgNYeYXCO}+Llju}21otC4Px?99n1t%T(b!waYcJrzzD#*Mh&bzA4j;aJoAyF)Ca`F5d;AZ_Wo9)V1#ht z++a5*GRqgL+w{QNm^1{0>YSNeNJ3OT;;z^XQh{U_anQ*bS@6%%^YncEA3sOW(eOBI zKvM7zG=P$)N2WnUK!6l^!^Tvg(PLe=i$oQmmRNZ%IN6ep1f>GmuGm343{8T>&A%@A z41$6HL9U}$#y;{e7HwO%za246ut5%@Z_Xh^K~^0^-FLr+XaQWXOa&!JTJ3;vDN35R z5L|k`JEb$Exo;I~Izcdzlt z&`F>+L#f0~+WFurCVt$7Ks3tQhigyQ1dts|WKO$Z(-UxF6rL=zoVMVl1pqg;I{g?_ zeJgLo{&>a#I8!z(N}G7$#$cMn*ABjnk|J}iyjHrK=)kEKgp6&FsOi@aPKX(pC6v3k z#zEDAEfwe5V;K^F%8b5aAXW%u*{3CiF+@fZ#c0vUWbHo1hyXZ|1fH#8s0$3vVBf4` z1lj>Lpd zOe^F8v;mQj0wq!DbckrAdHXvmKj16li$qEklyK#rMS|Bb7sILg4W)uw|O9t)7 zJuz5{9Mk|?^NEdIxe#g9_RE4mQ9S(&DhSC5u-w~tIT4asQyJ3PYyd`RD~vLLN6Qc` zkRfdBBpigpAg8%=zs=$ixDX7=d*UsT3ZijGrMoXULK7;1su@_Vcg3v3WJ#2qS3v>} z1^D3zLV+R}XVo8$vB!o82$vlT_Pu2V*g^?6z46-^aL$9@G)cv4pGPo5iG!g=M9(o^x(% zn6P0}!6b#>&mdTRkvIkf0)Z)!4vvSXoJRPN)e%FiLlB{pV30_y!2UQAEr2)nWWt^x zS$tL%wYBU^m^wLqg+#QKJU?r^CCZ~oml!r?CUP0z31C1T!k1ih>@2B!(Rm0KC6sM9 z)BMgmGY7r~E5$J`Z`e6O)qyCD0aPAtR;XvO#c0R~+lwUNBRnNzpns`tN*W ziZTbIuAe+_640s|P8KHWHtH64gKsg!)ZK6Fg!-X-IGNisa-NjP5rpIdpEVG2MhdZ7unacJyQkMEKv1)G*G!*; zq6X)t078KU)Xz9J!I?mU5pSFj0#ejL6sdG^x$BIJra^>ibnSyvJ`lzTy!}{FlnmM_ ze|y6UyI2)dTz;^!PrE~YF>-?~6yPM(=&X?lgHU)0U_IIGhc*$>tfd^x*gQrR(xq2N zGR73{Q-F=K8r~LJVkxNV(8tFFg-$8&Mn#R7Of42wiKos@ut2b7Zz$FX2R&VF_j95a z5WwnUdl`Hpq>JAeVL%4P)-njDVsatL>x_4naiTD0_JDZ_DJT#FSYveH{# zyz3a*iVF8-YW_I#wzL8cjnsN&?G8z)%XZlLnFXx|QKcEGl04B$ILK66s4-OmZYmzqlU*g*go#2cMBJt01cd`+6Qs{m85)s+%`0k_uxw3mtrnea zFxjQxz45FHUKyQ2b0*Ts$y%i&Z#^+Yr%FWoSI-b+ra+a_&fYQfoo&^IXlN*?9=M4- zv4=tq_*sUA8AHNr>y2b~j}DV_fQsDC2GYnLGD>5e!p_1`Yr%$+N%sVRc~>CKAzFd{d4g@u6`%=&&2+@_@CE56Z+@ke_Z^}>yTH3U`>fF7;t0(Bn0aBJoa%E z`0oIz6Yj4#&Jf#DlS3;J=Oa6qK+{m?vT_d1;|O;12hoOU>>4K3Q7}h*ppp|HFs0CZ zW1L0G$N(p9avBJzCU$qOHr_&TikSs%aq!8-F}S^=i!smxp~N~wU8Y@dV2qV>w?6m? zy+rlBtEZ+Fkh7+vQ6965EkYyPa~J;LhHz9}c2#lhfMO=txD^rWJ@M-$m!qv;Cm0nwgRhGO>;s$xtbZC8U+#4ggt@Vl48mm@1-Nq{IswUi#*R z^7VS*fvs>$j&?wRn~l4Q#bwzBq|(bLc)>tbA(*Cwbm-t)Nje}1mV2|(up=X09aA z;_!Puke8=^nOqPg4W~t7K;(567^j`i1}-OVhAh-3J*hh(aVGT#cE!AT7pU5z7U`ETC!Lv9eXL1XCRw-)@;2TuPly zUx&{Qxow9B!aVlKbczK^3Ee5K*bSjrgrSr#-yEc(MXFet`S#7Ord`O1U7RD6D>Xoh zbhKV3mwDwQPdBVM76Jm-6CAh{WYQC1^zVWY3@RGI7f=vlLWmI>G0uWCmY8 ze0!MiK$1gI+O?tp&5n5p6paA{$q5)z_{q0QWRr*aTp;8g0L5hOcfY+ zc@Kn*;nSS)!2yVbn0#_ZUl4%8yawI1kf2h~7ww<8=k7WCj(+2xxaaOTK*uCa+pa~3 zVdyvyyMRs9D=V277CCHV5u}3x(?;8+gCjIHVu%Jd?)!Jhu8VAlZC)p~S;CMhJILR! zt|1IwOE`}hs~Kcg=ss8Q$J;_HjI_ttlYVc7^OGcIK`As|rU}GCwVndTZQXXpRrW;g zF|G_Z;TX_|y8-revUFoW3#{Nwor8Fd45aV4#l#f0Qt+N3Nu_H9BCj};>^fi(NHejC znwjSGnaUUd@T(DrDCU!vu%G~gCbJ@#?C;kqt|*~-7UcRk;*g2@?W`JFS=SBK)(GH- zg#Q3tJuutILXMvL^u;=h5*XX?8vK8X{t~i5Ce#rR(1in#$UXe!iIL zf`Kzi;JxXdBL>$D5jk=LuJgt%W4wy**M1}Z+;`XQG4GBB3qZ7xY{z**vP)@o6eQDv zrc=wfiH%HDmmno$2R+%al^Hk*mJU^xRB90Qnx7fB+8DiQP0n2-VOAb@yaPCc zpqAIuhdA((ky6BYtUwGUT*kS_5P=k?evBh?)``J@AQEIh+XVw*M&HqaB(#~1*I0{+ zSqi+(?8QQ265hr0iQE1yQVXiEhW#=W2vV??N9+Q$nh*(ow zz;F;3e=j*O8Kff5Ue9td0uIj-^XoWZa=^%To`3kif$RSOmoJX~r{Ma3;FjNpkLmeN zpWXQ0toT36{{WNt9>4i=`0wg|52yYKZTM*ZpOoqS-;L_egZ#hwKY{E20GBV0{-@yj zf8dtihL7p_PM_WQ-mLgP%l`n96${tYp!oj)QZxV~)c&w}EjLMl{eK73{T9R=r)h7Q z{WknGe?p=*t&n}ctAlnB!^~kaSVBySJhEgcqAD%X>4S_@V12!R_{a_~IAYI);A$YH zETVSTLe7|s`tndno14B&9wd?w2Ra=j3lp~{un5ewz^_(HQEXO8U{I2#%92ZuRh3;A zG239zi)R3D$T1{>5g~($Fut`YBWc6@S5!y8t z07QZ!VHT=+$Hws$1+pPW4P$u|Hsp~Kw)auqGjGF3@Q+l2C?up3Nse+z+&QI4CQR2Z z$w;zY39?OMh;U|$Z0?5WR}qm20hthQFmwS#^@I3A;!r0zorvfJI6UN?CuA9EwjTYm zJu0%Q3Q0jVvG)pC*-Q|N!1Egi{{UPgqzrFb{{TjVrCxWx=n;_<@{i_f6V@;P0KHhT zNFq#fsHG}!2-GIP7q%ei&bSQGD-Oy!pqB{4G;C6NB;z#D#%4%J6&%}zgCMaS2rV$? zu1O?7=#7rDe<{Qm3m}<;herfQPh=81$&euwB^g3uK?;H|OpXnuMPU|ZtzeG$RUk8i z+Iar}@3ukMlPOA_k-Pvqy}XW%Gdm&;$qn0LWeC*a3@mG^2^*1&B*Cn0R)gpz(oIHLO4w*;!+{PbdTX#bf`kc-eXTVih^M=m{e$i5;ZB3Z9j8?paLaN&ng*`V=}>{ z(Yku#F{0Ej2BlG^>%a2p!(iNCNSJaG!-ZH`VKB^b0EXr;+DHgVl}`l~AKgx*1GU#F z=v>((e8XHOr&BedUlG%zh%N|(O(4{sr}lV-ZX`j6Djeg*&1CWVh%>yZL7Y4ku_sPEefPerC zLQSpz0PG>TPZs?#s~hBhFaQ~VB;!UIK)x9#Xhbr}a`T+XU+sTEK)xL_vnZ;aCj=rYi8Cg8;Gly5 z0uI<5t3d(%7MTo?*78qcD?{HuS?hoZ0P+1SjIofsGTEWDIMSFL}`I8Jc6cZ{4#?B3Cc6r7gsH(ftG`ZnS zKm^jwiI4pso#_7nZ;bx;<$53T_=nB^0FT7~0CV#lf4Adz{!v09XT{0X^uD=oLC8xI zp*Cv)JfYP~$vd2>2|$bo)x`)Is=y$({{S+9Ef|qgfnl>nB7Jf|R9g^f$B6pp^8WyA zW^ceQ3|M4U6A)M6*lFe)C3dzrERv4au_^PjfQ-C)@Vcd?(k&)gW~>jchi z6!@EcV899`n02rRGot?hk6aGF zH`fAJ=KAEiPs6S+i_hQ0ZTVq6VyuW(7xh#9zcJVQem8&V`F^bYS5N&28X+TanC*cL z!4^1rXXko9%H6_93|3JnN<{2Ld~YXKLE`@a3}I?LitxWB_{I%wO!>+J97CbOWG2S| zS(_v4lo7~8EqiLyAQ!F)yV2*a~8zCInm6g=`Y3-N8PK#d1p11e^?Ul!*h|{ltF5_s`Zp zd^f^L4>|dczuWP<;)dK$Ve5sHpO@;-#dQAw(4+(a_9qP8ixvnb@sBxM#3%14YebPkdUC7asHJJCOKg8XBl-C@Sy3;k%|K z+R}f0@WULtY5$heX&tkCDBxDS*H-tGLe1vg#KJGlH_PUI3>5?l zm=Q>N*&f(eX%iHs=6)_e7L_RU=K7P&|JDWs{u6K-R^$Y2N zwXKDh=By3RCu19=my^l^~^D34Yo zkTDRwv1$Pzw4@3dHPg;+@%S>N@raG0Mk5r(of3d0E=G0P$|T=-{)Qz$P>Spvi|E!2q^&mP`;<59v^A2QNBDb<-Gam&9{eR%Rsh zaut(IU}RASz?I`Q;>Wg60%Rk&c*jU+%!^9BRh(>u7%uJ^5C#H(m!o(w2396x#N+FM z3uQi7Ikh)T2OQ*m63Det=3`k+a<}wnzAIeH5C&tL)+X5%Fe*2aV+dgWOqlZ&9yPLfVdY~U1f#!r_hA2=vU za=Dt4Ujp9P{KGM1BOC{4#-9lcj)dfI1}Ugg5z~nx31o7P&s-QNV?cLq)-+v-N#442UkJK!Ke89GwhzYIt=a1BthIPH|dqF3o99xkz~5F!SPfIfII zm_S$Dj+q|0g+kGxo@V=D0gWT0k=?0)!(9?d@Zq`wo+K#$7ro8Tv*`{wnX66My|0i3?zzz9_{gv2a( z#H8jnXV2NdoxhJv{CDYq{jawGB5zEAjt<#fIY9Dc7vBB_6vCzg!sQqPMriH(X8C%4 z*f1(PKG+D8&gu5e3wp!tfI;eioL0$xI%d9&ehk_>&*m{*{(hLTe&-e;UtR+P%{)Fm zLyCZDDVHcq$n&}UXSspKbddF23`wVzV$(K$8_vtP-=23G;{5Yc{eJdBAsPHPfU*Si Z`}z33=4j8$zB)CC{G0?}AV2)4|Jj!CUN-;$ literal 0 HcmV?d00001 diff --git a/Documentation/mainboard/libretrend/lt1000.md b/Documentation/mainboard/libretrend/lt1000.md new file mode 100644 index 000000000000..78d5fc056ce3 --- /dev/null +++ b/Documentation/mainboard/libretrend/lt1000.md @@ -0,0 +1,117 @@ +# Libretrend LT1000 + +This page describes how to run coreboot on the [Libretrend LT1000] (aka +Librebox). + +![](lt1000.jpg) + +## Required proprietary blobs + +To build a minimal working coreboot image some blobs are required (assuming +only the BIOS region is being modified). + +```eval_rst ++-----------------+---------------------------------+---------------------+ +| Binary file | Apply | Required / Optional | ++=================+=================================+=====================+ +| FSP-M, FSP-S | Intel Firmware Support Package | Required | ++-----------------+---------------------------------+---------------------+ +| microcode | CPU microcode | Required | ++-----------------+---------------------------------+---------------------+ +``` + +FSP-M and FSP-S are obtained after splitting the Kaby Lake FSP binary (done +automatically by coreboot build system and included into the image) from the +*3rdparty/fsp* submodule. + +Microcode updates are automatically included into the coreboot image by build +system from the *3rdparty/intel-microcode* submodule. + +The mainboard code also contains a VBT file (version 1.00, BDB version 2.09) +which is automatically included into the image by coreboot build system. + +## Flashing coreboot + +### Internal programming + +The main SPI flash can be accessed using [flashrom]. It is strongly advised to +flash only the BIOS region if not having an external programmer, see known +issues. + +### External programming + +The system has an internal flash chip which is a 8 MiB soldered SOIC-8 chip. +This chip is located on the top middle side of the board near the CPU fan, +between the DIMM slots and the M.2 disk. Use a clip (or solder the wires) to +program the chip. Specifically, it's a Winbond W25Q64FV (3.3V) - +[datasheet][W25Q64FV]. + +## Known issues + +- Fastboot (MRC cache) is not working reliably (missing schematics for CPU to + DIMM wiring). +- Flashing ME region with already cleaned ME firmware may lead to platform not + booting, flashing full ME firmware is needed to recover. +- In order to have the USB device wake support from S3 state using the front + USB 3.0 ports, one has to move the jumper on DUSB1_PWR_SET header (it will + switch the power rails for the USB 3.0 ports). +- There are 6 unknown GPIO pins on the board. + +## Untested + +Not all mainboard's peripherals and functions were tested because of lack of +the cables or not being populated on the board case. + +- LVDS header +- Onboard USB 2.0 and USB 3.0 headers +- Speakers and mic header +- SPDIF header +- Audio header +- PS/2 header +- LPT header +- CIR (infrared header) +- COM2 port RS485 mode (RS232/RS485 mode is controlled via jumper) +- SYS_FAN header + +## Working + +- USB +- Ethernet +- Integrated graphics (with libgfxinit) on VGA and HDMI ports +- flashrom +- PCIe +- NVMe +- WiFi and Bluetooth +- SATA +- Serial ports 1-6 +- SMBus +- HDA (verbs not implemented yet, but works under GNU/Linux (4.15 tested)) +- Initialization with KBL FSP 2.0 +- SeaBIOS payload (version rel-1.13.0) +- TPM2 ([custom module] connected to LPC DEBUG header) +- Automatic fan control +- Platform boots with cleaned ME (MFS partition must be left on SPI flash) + +## Technology + +The platform contains an LR-i7S65T1 baseboard (LR-i7S65T2 with two NICs not +sold yet). More details on [baseboard site]. Unfortunately the board manual is +not publicly available. + +```eval_rst ++------------------+--------------------------------------------------+ +| CPU | Intel Core i7-6500U | ++------------------+--------------------------------------------------+ +| PCH | Skylake-U Premium | ++------------------+--------------------------------------------------+ +| Super I/O | ITE IT8786E | ++------------------+--------------------------------------------------+ +| Coprocessor | Intel Management Engine | ++------------------+--------------------------------------------------+ +``` + +[Libretrend LT1000]: https://libretrend.com/specs/librebox/ +[W25Q64FV]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf +[flashrom]: https://flashrom.org/Flashrom +[baseboard site]: http://www.minicase.net/product_LR-i7S65T1.html +[custom module]: https://shop.3mdeb.com/product/tpm2-module-for-librebox/ diff --git a/MAINTAINERS b/MAINTAINERS index a79d98f01c7a..3a31847c9b92 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -317,6 +317,12 @@ M: Vlado Cibic S: Maintained F: src/mainboard/asus/p8z77-m_pro/ +LIBRETREND LT1000 MAINBOARD +M: Piotr Król +M: Michał Żygowski +S: Maintained +F: src/mainboard/libretrend/lt1000 + PC ENGINES ALL MAINBOARDS M: Piotr Król M: Michał Żygowski diff --git a/configs/config.libretrend_lt1000 b/configs/config.libretrend_lt1000 new file mode 100644 index 000000000000..f12ae3f81c01 --- /dev/null +++ b/configs/config.libretrend_lt1000 @@ -0,0 +1,5 @@ +CONFIG_VENDOR_LIBRETREND=y +CONFIG_POWER_STATE_OFF_AFTER_FAILURE=y +CONFIG_GENERIC_LINEAR_FRAMEBUFFER=y +CONFIG_USER_TPM2=y +CONFIG_SEABIOS_ADD_SERCON_PORT_FILE=y diff --git a/src/mainboard/libretrend/Kconfig b/src/mainboard/libretrend/Kconfig new file mode 100644 index 000000000000..7e1eacdd71b4 --- /dev/null +++ b/src/mainboard/libretrend/Kconfig @@ -0,0 +1,16 @@ +if VENDOR_LIBRETREND + +choice + prompt "Mainboard model" + +source "src/mainboard/libretrend/*/Kconfig.name" + +endchoice + +source "src/mainboard/libretrend/*/Kconfig" + +config MAINBOARD_VENDOR + string "Mainboard Vendor" + default "Libretrend" + +endif # VENDOR_LIBRETREND diff --git a/src/mainboard/libretrend/Kconfig.name b/src/mainboard/libretrend/Kconfig.name new file mode 100644 index 000000000000..cd272b0a3165 --- /dev/null +++ b/src/mainboard/libretrend/Kconfig.name @@ -0,0 +1,2 @@ +config VENDOR_LIBRETREND + bool "Libretrend" diff --git a/src/mainboard/libretrend/lt1000/Kconfig b/src/mainboard/libretrend/lt1000/Kconfig new file mode 100644 index 000000000000..b4a4e49ef7b7 --- /dev/null +++ b/src/mainboard/libretrend/lt1000/Kconfig @@ -0,0 +1,55 @@ +if BOARD_LIBRETREND_LT1000 + +config BOARD_SPECIFIC_OPTIONS + def_bool y + select BOARD_ROMSIZE_KB_8192 + select HAVE_ACPI_RESUME + select HAVE_ACPI_TABLES + select INTEL_GMA_HAVE_VBT + select MAINBOARD_HAS_LIBGFXINIT + select MAINBOARD_HAS_LPC_TPM + select SOC_INTEL_SKYLAKE + select SPD_READ_BY_WORD + select SUPERIO_ITE_IT8786E + +config IRQ_SLOT_COUNT + int + default 18 + +config MAINBOARD_PART_NUMBER + string + default "LT1000" + +config MAINBOARD_DIR + string + default "libretrend/lt1000" + +config MAX_CPUS + int + default 4 + +config VGA_BIOS_ID + string + default "8086,1916" + +config DIMM_MAX + int + default 2 + +config DIMM_SPD_SIZE + int + default 512 + +config CBFS_SIZE + hex + default 0x600000 + +config ADD_FSP_BINARIES + bool + default y + +config FSP_USE_REPO + bool + default y + +endif diff --git a/src/mainboard/libretrend/lt1000/Kconfig.name b/src/mainboard/libretrend/lt1000/Kconfig.name new file mode 100644 index 000000000000..26e5255f052e --- /dev/null +++ b/src/mainboard/libretrend/lt1000/Kconfig.name @@ -0,0 +1,2 @@ +config BOARD_LIBRETREND_LT1000 + bool "LT1000" diff --git a/src/mainboard/libretrend/lt1000/Makefile.inc b/src/mainboard/libretrend/lt1000/Makefile.inc new file mode 100644 index 000000000000..cab4a5e1944c --- /dev/null +++ b/src/mainboard/libretrend/lt1000/Makefile.inc @@ -0,0 +1,7 @@ +## SPDX-License-Identifier: GPL-2.0-or-later +## This file is part of the coreboot project. + +bootblock-y += bootblock.c + +ramstage-y += ramstage.c +ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads diff --git a/src/mainboard/libretrend/lt1000/acpi/ec.asl b/src/mainboard/libretrend/lt1000/acpi/ec.asl new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/mainboard/libretrend/lt1000/acpi/superio.asl b/src/mainboard/libretrend/lt1000/acpi/superio.asl new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/mainboard/libretrend/lt1000/board_info.txt b/src/mainboard/libretrend/lt1000/board_info.txt new file mode 100644 index 000000000000..2d7c8933e3d0 --- /dev/null +++ b/src/mainboard/libretrend/lt1000/board_info.txt @@ -0,0 +1,8 @@ +Vendor name: Libretrend +Board name: LT1000 +Category: desktop +ROM package: SOIC8 +ROM protocol: SPI +ROM socketed: n +Flashrom support: y +Release year: 2018 diff --git a/src/mainboard/libretrend/lt1000/bootblock.c b/src/mainboard/libretrend/lt1000/bootblock.c new file mode 100644 index 000000000000..bc85deca9ba5 --- /dev/null +++ b/src/mainboard/libretrend/lt1000/bootblock.c @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* This file is part of the coreboot project. */ + +#include +#include +#include + +#define GPIO_DEV PNP_DEV(0x2e, IT8786E_GPIO) +#define SERIAL1_DEV PNP_DEV(0x2e, IT8786E_SP1) +#define SERIAL3_DEV PNP_DEV(0x2e, IT8786E_SP3) +#define SERIAL4_DEV PNP_DEV(0x2e, IT8786E_SP4) +#define SERIAL5_DEV PNP_DEV(0x2e, IT8786E_SP5) +#define SERIAL6_DEV PNP_DEV(0x2e, IT8786E_SP6) + +void bootblock_mainboard_early_init(void) +{ + ite_conf_clkin(GPIO_DEV, ITE_UART_CLK_PREDIVIDE_24); + ite_enable_3vsbsw(GPIO_DEV); + ite_kill_watchdog(GPIO_DEV); + ite_enable_serial(SERIAL1_DEV, CONFIG_TTYS0_BASE); + + /* + * FIXME: + * IT8786E has 6 COM ports, COM1/3/5 have default IO base 0x3f8 and + * COM2/4/6 have 0x2f8. When enabling devices before setting resources + * from devicetree, the output on debugging COM1 becomes very slow due + * to the same IO bases for multiple COM ports. For now set different + * hardcoded IO bases for COM3/4/5/6 ports, they will be set later to + * desired values from devicetree. They can be also turned off. + */ + ite_enable_serial(SERIAL3_DEV, 0x3e8); + ite_enable_serial(SERIAL4_DEV, 0x2e8); + ite_enable_serial(SERIAL5_DEV, 0x2f0); + ite_enable_serial(SERIAL6_DEV, 0x2e0); +} diff --git a/src/mainboard/libretrend/lt1000/data.vbt b/src/mainboard/libretrend/lt1000/data.vbt new file mode 100644 index 0000000000000000000000000000000000000000..cb4a2f4a6cf0e67a08f098ec8478cf27df187f20 GIT binary patch literal 4608 zcmeHKU2GIp6h1SvKeKmcw$mxfvS2+TmTiG{wm^kiWwyJ8F5S}IZmA`ju!UW;aiOIx zrufGiOG08W`=AC5(I!4<>Pr*jlQHsQBq1t3h`z~-i4sjr#P|Y?XMWlW4ef>m6~mc5 z_uPBt&Nt_rd+wdHYx>*!Fx#~!73=Cim-3*)_iBvVh18zx$?i?W`eJ+AQ$6u6{08oY z_tk5c0P-BSLXPTsGl4}6Ko2*hxZK?3r&f_*fZn9BbbgSF}8nyp;#Cl953WC z+rJ}*7N)}5j|>&_xa-KleTC6hBp{t;V{}vF#!ZOPre^x-(aqG=Tca(lo3|<~(Glh0$jV`9_6VAZI}IZ~&Yastn-ZYBP`mL<2+wQ3a0y z9t4jH27;jisvrV*01N;GP%R@=;5TzT>FPxAg)Gf15xijc4QsMX=z$A4P*w2~Az9=H z@Y)@fL$bsnG~8KN+*!_R=_Yc>yORLX>Je5jFsquC96GP2F&RyylJ$$untk%0lLEPW zoy0RMF2rghXa9H*datT2GztXi60_vBHl_IC+;SGoOqDfcLc7Oe92k@q7vuIYDa?Vf!FGxblTOQcJ+bZ zXt9ZyDb* zdAe?2%gzBMvO}hMr}yL<*hw2$5ZfkK*}m)sFyB=Km;hGo?lsbD@@!Jtla{>$zOduE zzs->g+kf*;*vf#Fzwqb%49@#6b0=#4n>{OP>Jpa|+4)p+#&_Gh5x71At2*IApj5_- z_o-rTwR5lb)-?A&Njb@jbTAlz)RmzVA`pTEtbt{agS1^YiS{{roe`C(5TVN2po>r> zOyFY+CQK6n)V~hGBMb+bHpbYC4Bung$Bcc(@JFWo$rvZ$T1nd~vABdolJ>mBj!XEV zqd{<4-!Jd{92Ul zIz^uHPF9c)Z`V(q&rGh?({C-GLl8i6BUuT8-e8=~P3HAb#;FH^ybvfIiEcF~Z3M+Z z@L~mCTnfWf8kg&`9=DzX+lDgjN3x;h-(u&3mEiR wZy^2#T7M6m+)idDsdC>$gvJ?w6LWM&bT=;e&$@W{@7@LY3pRec9{>OV literal 0 HcmV?d00001 diff --git a/src/mainboard/libretrend/lt1000/devicetree.cb b/src/mainboard/libretrend/lt1000/devicetree.cb new file mode 100644 index 000000000000..f54b877f18f8 --- /dev/null +++ b/src/mainboard/libretrend/lt1000/devicetree.cb @@ -0,0 +1,298 @@ +chip soc/intel/skylake + + # Enable deep Sx states + register "deep_s3_enable_ac" = "0" + register "deep_s3_enable_dc" = "0" + register "deep_s5_enable_ac" = "1" + register "deep_s5_enable_dc" = "1" + register "deep_sx_config" = "DSX_EN_WAKE_PIN" + + register "eist_enable" = "1" + + register "serirq_mode" = "SERIRQ_CONTINUOUS" + + # Set the Thermal Control Circuit (TCC) activation value to 95C + # even though FSP integration guide says to set it to 100C for SKL-U + # (offset at 0), because when the TCC activates at 100C, the CPU + # will have already shut itself down from overheating protection. + register "tcc_offset" = "5" # TCC of 95C + + # GPE configuration + # Note that GPE events called out in ASL code rely on this + # route. i.e. If this route changes then the affected GPE + # offset bits also need to be changed. + register "gpe0_dw0" = "GPP_C" + register "gpe0_dw1" = "GPP_D" + register "gpe0_dw2" = "GPP_E" + + register "gen1_dec" = "0x007c0a01" # EC 0xa00-0xa7f + register "gen2_dec" = "0x000c03e1" # COM3 port 0x3e0 - 0x3ef + register "gen3_dec" = "0x00fc02e1" # COM2/4/5/6 ports 0x2e0 - 0x2ff + register "gen4_dec" = "0x000c0081" # 0x80 - 0x8f + + # Enable "Intel Speed Shift Technology" + register "speed_shift_enable" = "1" + + # Disable DPTF + register "dptf_enable" = "0" + + # FSP Configuration + register "ProbelessTrace" = "0" + register "EnableLan" = "0" + register "EnableSata" = "1" + register "SataSalpSupport" = "0" + register "SataMode" = "0" + register "SataPortsEnable[0]" = "1" + register "SataPortsEnable[1]" = "1" + register "SataPortsEnable[2]" = "1" + register "SataPortsDevSlp[0]" = "0" + register "SataPortsDevSlp[1]" = "0" + register "SataPortsDevSlp[2]" = "0" + register "SataSpeedLimit" = "2" + register "EnableAzalia" = "1" + register "DspEnable" = "1" + register "IoBufferOwnership" = "0" + register "EnableTraceHub" = "0" + register "SsicPortEnable" = "0" + register "SmbusEnable" = "1" + register "Cio2Enable" = "0" + register "ScsEmmcEnabled" = "0" + register "ScsEmmcHs400Enabled" = "0" + register "ScsSdCardEnabled" = "0" + register "SkipExtGfxScan" = "1" + register "Device4Enable" = "1" + register "HeciEnabled" = "1" + register "SaGv" = "SaGv_Enabled" + register "PmConfigSlpS3MinAssert" = "2" # 50ms + register "PmConfigSlpS4MinAssert" = "1" # 1s + register "PmConfigSlpSusMinAssert" = "3" # 500ms + register "PmConfigSlpAMinAssert" = "3" # 2s + register "PmTimerDisabled" = "1" + + register "pirqa_routing" = "PCH_IRQ11" + register "pirqb_routing" = "PCH_IRQ10" + register "pirqc_routing" = "PCH_IRQ11" + register "pirqd_routing" = "PCH_IRQ11" + register "pirqe_routing" = "PCH_IRQ11" + register "pirqf_routing" = "PCH_IRQ11" + register "pirqg_routing" = "PCH_IRQ11" + register "pirqh_routing" = "PCH_IRQ11" + + # VR Settings Configuration for 4 Domains + #+----------------+-------+-------+-------------+-------+ + #| Domain/Setting | SA | IA | GT-Unsliced | GT | + #+----------------+-------+-------+-------------+-------+ + #| Psi1Threshold | 20A | 20A | 20A | 20A | + #| Psi2Threshold | 4A | 5A | 5A | 5A | + #| Psi3Threshold | 1A | 1A | 1A | 1A | + #| Psi3Enable | 1 | 1 | 1 | 1 | + #| Psi4Enable | 1 | 1 | 1 | 1 | + #| ImonSlope | 0 | 0 | 0 | 0 | + #| ImonOffset | 0 | 0 | 0 | 0 | + #| VrVoltageLimit | 1.52V | 1.52V | 1.52V | 1.52V | + #+----------------+-------+-------+-------------+-------+ + register "domain_vr_config[VR_SYSTEM_AGENT]" = "{ + .vr_config_enable = 1, + .psi1threshold = VR_CFG_AMP(20), + .psi2threshold = VR_CFG_AMP(4), + .psi3threshold = VR_CFG_AMP(1), + .psi3enable = 1, + .psi4enable = 1, + .imon_slope = 0x0, + .imon_offset = 0x0, + .voltage_limit = 1520, + }" + + register "domain_vr_config[VR_IA_CORE]" = "{ + .vr_config_enable = 1, + .psi1threshold = VR_CFG_AMP(20), + .psi2threshold = VR_CFG_AMP(5), + .psi3threshold = VR_CFG_AMP(1), + .psi3enable = 1, + .psi4enable = 1, + .imon_slope = 0x0, + .imon_offset = 0x0, + .voltage_limit = 1520, + }" + + register "domain_vr_config[VR_GT_UNSLICED]" = "{ + .vr_config_enable = 1, + .psi1threshold = VR_CFG_AMP(20), + .psi2threshold = VR_CFG_AMP(5), + .psi3threshold = VR_CFG_AMP(1), + .psi3enable = 1, + .psi4enable = 1, + .imon_slope = 0x0, + .imon_offset = 0x0, + .voltage_limit = 1520, + }" + + register "domain_vr_config[VR_GT_SLICED]" = "{ + .vr_config_enable = 1, + .psi1threshold = VR_CFG_AMP(20), + .psi2threshold = VR_CFG_AMP(5), + .psi3threshold = VR_CFG_AMP(1), + .psi3enable = 1, + .psi4enable = 1, + .imon_slope = 0x0, + .imon_offset = 0x0, + .voltage_limit = 1520, + }" + + register "PcieRpEnable[2]" = "1" + register "PcieRpEnable[3]" = "1" + register "PcieRpEnable[4]" = "1" + register "PcieRpEnable[8]" = "1" + register "PcieRpEnable[9]" = "1" + register "PcieRpEnable[10]" = "1" + register "PcieRpEnable[11]" = "1" + + register "PcieRpClkSrcNumber[0]" = "0" + register "PcieRpClkSrcNumber[3]" = "1" + register "PcieRpClkSrcNumber[4]" = "2" + register "PcieRpClkSrcNumber[8]" = "3" + register "PcieRpClkSrcNumber[9]" = "3" + register "PcieRpClkSrcNumber[10]" = "3" + register "PcieRpClkSrcNumber[11]" = "3" + + + register "usb2_ports[0]" = "USB2_PORT_MID(OC_SKIP)" # Type-A Port (right) + register "usb2_ports[1]" = "USB2_PORT_MID(OC_SKIP)" # Type-A Port (right) + register "usb2_ports[2]" = "USB2_PORT_MID(OC_SKIP)" # WiFi + register "usb2_ports[3]" = "USB2_PORT_MID(OC_SKIP)" # F_USB3 header + register "usb2_ports[4]" = "USB2_PORT_MID(OC_SKIP)" # F_USB3 header + register "usb2_ports[5]" = "USB2_PORT_MID(OC_SKIP)" # Type-A Port (left) + register "usb2_ports[6]" = "USB2_PORT_MID(OC_SKIP)" # Type-A Port (left) + register "usb2_ports[7]" = "USB2_PORT_MID(OC_SKIP)" # GL850G for F_USB1 and F_USB2 headers + + register "usb3_ports[0]" = "USB3_PORT_DEFAULT(OC_SKIP)" # Type-A Port (right) + register "usb3_ports[1]" = "USB3_PORT_DEFAULT(OC_SKIP)" # Type-A Port (right) + register "usb3_ports[2]" = "USB3_PORT_DEFAULT(OC_SKIP)" # F_USB3 header + register "usb3_ports[3]" = "USB3_PORT_DEFAULT(OC_SKIP)" # F_USB3 header + + # PL2 override 25W + register "tdp_pl2_override" = "25" + + # Send an extra VR mailbox command for the PS4 exit issue + register "SendVrMbxCmd" = "2" + + # Lock Down + register "common_soc_config" = "{ + .chipset_lockdown = CHIPSET_LOCKDOWN_COREBOOT, + }" + + device cpu_cluster 0 on + device lapic 0 on end + end + device domain 0 on + device pci 00.0 on end # Host Bridge + device pci 02.0 on end # Integrated Graphics Device + device pci 14.0 on end # USB xHCI + device pci 14.1 on end # USB xDCI (OTG) + device pci 14.2 on end # Thermal Subsystem + device pci 16.0 on end # Management Engine Interface 1 + device pci 16.1 off end # Management Engine Interface 2 + device pci 16.2 off end # Management Engine IDE-R + device pci 16.3 off end # Management Engine KT Redirection + device pci 16.4 off end # Management Engine Interface 3 + device pci 17.0 on end # SATA + device pci 1c.0 off end # PCI Express Port 1 + device pci 1c.1 off end # PCI Express Port 2 + device pci 1c.2 on end # PCI Express Port 3 + device pci 1c.3 off end # PCI Express Port 4 + device pci 1c.4 on # PCI Express Port 5 + smbios_slot_desc "SlotTypePciExpressMini52pinWithoutBSKO" + "SlotLengthOther" "MPCIE_WIFI1" "SlotDataBusWidth1X" + end + device pci 1c.5 on end # PCI Express Port 6 + device pci 1c.6 off end # PCI Express Port 7 + device pci 1c.7 off end # PCI Express Port 8 + device pci 1d.0 on # PCI Express Port 9 + smbios_slot_desc "SlotTypeM2Socket3" "SlotLengthOther" + "SSD_M.2 2242/2280" "SlotDataBusWidth4X" + end + device pci 1d.1 on end # PCI Express Port 10 + device pci 1d.2 on end # PCI Express Port 11 + device pci 1d.3 on end # PCI Express Port 12 + device pci 1f.0 on + chip drivers/pc80/tpm + device pnp 0c31.0 on end + end + chip superio/ite/it8786e + register "TMPIN1.mode" = "THERMAL_PECI" + register "TMPIN1.offset" = "100" + register "TMPIN1.min" = "128" + register "TMPIN2.mode" = "THERMAL_RESISTOR" + register "TMPIN2.min" = "128" + register "TMPIN3.mode" = "THERMAL_MODE_DISABLED" + register "ec.vin_mask" = "VIN_ALL" + # FAN1 is CPU fan (on board) + register "FAN1.mode" = "FAN_SMART_AUTOMATIC" + register "FAN1.smart.tmpin" = " 1" + register "FAN1.smart.tmp_off" = "35" + register "FAN1.smart.tmp_start" = "60" + register "FAN1.smart.tmp_full" = "85" + register "FAN1.smart.tmp_delta" = " 2" + register "FAN1.smart.pwm_start" = "20" + register "FAN1.smart.slope" = "24" + # FAN2 is system fan (4 pin connector populated) + #register "FAN2.mode" = "FAN_MODE_OFF" + # FAN3 PWM is used for LVDS backlight control + #register "FAN3.mode" = "FAN_MODE_OFF" + + device pnp 2e.1 on # COM 1 + io 0x60 = 0x3f8 + irq 0x70 = 4 + end + device pnp 2e.2 on # COM 2 + io 0x60 = 0x2f8 + irq 0x70 = 3 + end + device pnp 2e.3 on # Printer Port + io 0x60 = 0x378 + io 0x62 = 0x778 + irq 0x70 = 5 + drq 0x74 = 3 + end + device pnp 2e.4 on # Environment Controller + io 0x60 = 0xa40 + io 0x62 = 0xa30 + irq 0x70 = 9 + end + device pnp 2e.5 on # Keyboard + io 0x60 = 0x60 + io 0x62 = 0x64 + irq 0x70 = 1 + end + device pnp 2e.6 on # Mouse + irq 0x70 = 12 + end + device pnp 2e.7 off # GPIO + end + device pnp 2e.8 on # COM 3 + io 0x60 = 0x3e8 + irq 0x70 = 3 + end + device pnp 2e.9 on # COM 4 + io 0x60 = 0x2e8 + irq 0x70 = 4 + end + device pnp 2e.a off end # CIR + device pnp 2e.b on # COM 5 + io 0x60 = 0x2f0 + irq 0x70 = 3 + end + device pnp 2e.c on # COM 6 + io 0x60 = 0x2e0 + irq 0x70 = 4 + end + end + end # LPC Interface + device pci 1f.1 on end # P2SB + device pci 1f.2 on end # Power Management Controller + device pci 1f.3 on end # Intel HDA + device pci 1f.4 on end # SMBus + device pci 1f.5 on end # PCH SPI + device pci 1f.6 off end # GbE + end +end diff --git a/src/mainboard/libretrend/lt1000/dsdt.asl b/src/mainboard/libretrend/lt1000/dsdt.asl new file mode 100644 index 000000000000..624806ca0402 --- /dev/null +++ b/src/mainboard/libretrend/lt1000/dsdt.asl @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* This file is part of the coreboot project. */ + +#include +DefinitionBlock( + "dsdt.aml", + "DSDT", + 0x02, /* DSDT revision: ACPI v2.0 and up */ + OEM_ID, + ACPI_TABLE_CREATOR, + 0x20110725 /* OEM revision */ +) +{ + #include + #include + #include + + Device (\_SB.PCI0) + { + #include + #include + } + + #include +} diff --git a/src/mainboard/libretrend/lt1000/gma-mainboard.ads b/src/mainboard/libretrend/lt1000/gma-mainboard.ads new file mode 100644 index 000000000000..210ea288b86c --- /dev/null +++ b/src/mainboard/libretrend/lt1000/gma-mainboard.ads @@ -0,0 +1,17 @@ +-- SPDX-License-Identifier: GPL-2.0-or-later +-- This file is part of the coreboot project. + +with HW.GFX.GMA; +with HW.GFX.GMA.Display_Probing; + +use HW.GFX.GMA; +use HW.GFX.GMA.Display_Probing; + +private package GMA.Mainboard is + + ports : constant Port_List := + (DP1, + HDMI2, + others => Disabled); + +end GMA.Mainboard; diff --git a/src/mainboard/libretrend/lt1000/gpio.h b/src/mainboard/libretrend/lt1000/gpio.h new file mode 100644 index 000000000000..d937ae5945e2 --- /dev/null +++ b/src/mainboard/libretrend/lt1000/gpio.h @@ -0,0 +1,189 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* This file is part of the coreboot project. */ + +#ifndef LT1000_GPIO_H +#define LT1000_GPIO_H + +#include +#include + +#ifndef __ACPI__ + +/* Pad configuration in ramstage. */ +static const struct pad_config gpio_table[] = { +/* RCIN# */ PAD_CFG_NF(GPP_A0, NONE, DEEP, NF1), +/* LAD0 */ PAD_CFG_NF(GPP_A1, NONE, DEEP, NF1), +/* LAD1 */ PAD_CFG_NF(GPP_A2, NONE, DEEP, NF1), +/* LAD2 */ PAD_CFG_NF(GPP_A3, NONE, DEEP, NF1), +/* LAD3 */ PAD_CFG_NF(GPP_A4, NONE, DEEP, NF1), +/* LFRAME# */ PAD_CFG_NF(GPP_A5, NONE, DEEP, NF1), +/* SERIRQ */ PAD_CFG_NF(GPP_A6, NONE, DEEP, NF1), +/* PIRQA# */ PAD_CFG_NC(GPP_A7), +/* CLKRUN# */ PAD_CFG_NF(GPP_A8, NONE, DEEP, NF1), +/* CLKOUT_LPC0 */ PAD_CFG_NF(GPP_A9, NONE, DEEP, NF1), +/* CLKOUT_LPC1 */ PAD_CFG_NF(GPP_A10, NONE, DEEP, NF1), +/* PME# */ PAD_CFG_NC(GPP_A11), +/* BM_BUSY# */ PAD_CFG_NC(GPP_A12), +/* SUSWARN# */ PAD_CFG_NF(GPP_A13, NONE, DEEP, NF1), +/* SUS_STAT# */ PAD_CFG_NF(GPP_A14, NONE, DEEP, NF1), +/* SUSACK# */ PAD_CFG_NF(GPP_A15, DN_20K, DEEP, NF1), +/* SD_1P8_SEL */ PAD_CFG_NC(GPP_A16), +/* SD_PWR_EN# */ PAD_CFG_NF(GPP_A17, NONE, DEEP, NF1), +/* ISH_GP0 */ PAD_CFG_GPI(GPP_A18, NONE, DEEP), +/* ISH_GP1 */ PAD_CFG_GPI(GPP_A19, NONE, DEEP), +/* ISH_GP2 */ PAD_CFG_GPI(GPP_A20, NONE, DEEP), +/* ISH_GP3 */ PAD_CFG_NC(GPP_A21), +/* ISH_GP4 */ PAD_CFG_NC(GPP_A22), +/* ISH_GP5 */ PAD_CFG_NC(GPP_A23), + +/* CORE_VID0 */ PAD_CFG_NC(GPP_B0), +/* CORE_VID1 */ PAD_CFG_NC(GPP_B1), +/* VRALERT# */ PAD_CFG_NC(GPP_B2), +/* CPU_GP2 */ PAD_CFG_NC(GPP_B3), +/* CPU_GP3 */ PAD_CFG_NC(GPP_B4), +/* SRCCLKREQ0# */ PAD_CFG_NF(GPP_B5, NONE, DEEP, NF1), +/* SRCCLKREQ1# */ PAD_CFG_NF(GPP_B6, NONE, DEEP, NF1), +/* SRCCLKREQ2# */ PAD_CFG_NF(GPP_B7, NONE, DEEP, NF1), +/* SRCCLKREQ3# */ PAD_CFG_NF(GPP_B8, NONE, DEEP, NF1), +/* SRCCLKREQ4# */ PAD_CFG_NF(GPP_B9, NONE, DEEP, NF1), +/* SRCCLKREQ5# */ PAD_CFG_NF(GPP_B10, NONE, DEEP, NF1), +/* EXT_PWR_GATE# */ PAD_CFG_NC(GPP_B11), +/* SLP_S0# */ PAD_CFG_NF(GPP_B12, NONE, DEEP, NF1), +/* PLTRST# */ PAD_CFG_NF(GPP_B13, NONE, DEEP, NF1), +/* SPKR */ PAD_CFG_NF(GPP_B14, NONE, DEEP, NF1), +/* GSPI0_CS# */ PAD_CFG_NC(GPP_B15), +/* GSPI0_CLK */ PAD_CFG_NC(GPP_B16), +/* GSPI0_MISO */ PAD_CFG_NC(GPP_B17), +/* GSPI0_MOSI */ PAD_CFG_GPI_SCI(GPP_B18, UP_20K, PLTRST, LEVEL, INVERT), +/* GSPI1_CS# */ PAD_CFG_NC(GPP_B19), +/* GSPI1_CLK */ PAD_CFG_NC(GPP_B20), +/* GSPI1_MISO */ PAD_CFG_NC(GPP_B21), +/* GSPI1_MOSI */ PAD_CFG_NF(GPP_B22, DN_20K, DEEP, NF1), +/* SM1ALERT# */ PAD_CFG_TERM_GPO(GPP_B23, 1, DN_20K, DEEP), + +/* SMBCLK */ PAD_CFG_NF(GPP_C0, NONE, DEEP, NF1), +/* SMBDATA */ PAD_CFG_NF(GPP_C1, DN_20K, DEEP, NF1), +/* SMBALERT# */ PAD_CFG_TERM_GPO(GPP_C2, 1, DN_20K, DEEP), +/* SML0CLK */ PAD_CFG_NF(GPP_C3, NONE, DEEP, NF1), +/* SML0DATA */ PAD_CFG_NF(GPP_C4, NONE, DEEP, NF1), +/* SML0ALERT# */ PAD_CFG_GPI_APIC_INVERT(GPP_C5, DN_20K, DEEP), +/* SML1CLK */ PAD_CFG_NC(GPP_C6), /* RESERVED */ +/* SML1DATA */ PAD_CFG_NC(GPP_C7), /* RESERVED */ +/* UART0_RXD */ PAD_CFG_NF(GPP_C8, NONE, DEEP, NF1), +/* UART0_TXD */ PAD_CFG_NF(GPP_C9, NONE, DEEP, NF1), +/* UART0_RTS# */ PAD_CFG_NF(GPP_C10, NONE, DEEP, NF1), +/* UART0_CTS# */ PAD_CFG_NF(GPP_C11, NONE, DEEP, NF1), +/* UART1_RXD */ PAD_CFG_NC(GPP_C12), +/* UART1_TXD */ PAD_CFG_NC(GPP_C13), +/* UART1_RTS# */ PAD_CFG_NC(GPP_C14), +/* UART1_CTS# */ PAD_CFG_NC(GPP_C15), +/* I2C0_SDA */ PAD_CFG_GPI(GPP_C16, NONE, DEEP), +/* I2C0_SCL */ PAD_CFG_GPI(GPP_C17, NONE, DEEP), +/* I2C1_SDA */ PAD_CFG_GPI(GPP_C18, NONE, DEEP), +/* I2C1_SCL */ PAD_CFG_NC(GPP_C19), +/* UART2_RXD */ PAD_CFG_NC(GPP_C20), +/* UART2_TXD */ PAD_CFG_NC(GPP_C21), +/* UART2_RTS# */ PAD_CFG_NC(GPP_C22), +/* UART2_CTS# */ PAD_CFG_NC(GPP_C23), + +/* SPI1_CS# */ PAD_CFG_NC(GPP_D0), +/* SPI1_CLK */ PAD_CFG_NC(GPP_D1), +/* SPI1_MISO */ PAD_CFG_NC(GPP_D2), +/* SPI1_MOSI */ PAD_CFG_NC(GPP_D3), +/* FASHTRIG */ PAD_CFG_NC(GPP_D4), +/* ISH_I2C0_SDA */ PAD_CFG_NC(GPP_D5), +/* ISH_I2C0_SCL */ PAD_CFG_NC(GPP_D6), +/* ISH_I2C1_SDA */ PAD_CFG_NC(GPP_D7), +/* ISH_I2C1_SCL */ PAD_CFG_NC(GPP_D8), +/* ISH_SPI_CS# */ PAD_CFG_TERM_GPO(GPP_D9, 0, NONE, DEEP), +/* ISH_SPI_CLK */ PAD_CFG_GPI(GPP_D10, NONE, DEEP), +/* ISH_SPI_MISO */ PAD_CFG_TERM_GPO(GPP_D11, 1, NONE, DEEP), +/* ISH_SPI_MOSI */ PAD_CFG_NC(GPP_D12), +/* ISH_UART0_RXD */ PAD_CFG_NC(GPP_D13), +/* ISH_UART0_TXD */ PAD_CFG_NC(GPP_D14), +/* ISH_UART0_RTS# */ PAD_CFG_NC(GPP_D15), +/* ISH_UART0_CTS# */ PAD_CFG_NC(GPP_D16), +/* DMIC_CLK1 */ PAD_CFG_NF(GPP_D17, NONE, DEEP, NF1), +/* DMIC_DATA1 */ PAD_CFG_NF(GPP_D18, NONE, DEEP, NF1), +/* DMIC_CLK0 */ PAD_CFG_NF(GPP_D19, NONE, DEEP, NF1), +/* DMIC_DATA0 */ PAD_CFG_NF(GPP_D20, NONE, DEEP, NF1), +/* SPI1_IO2 */ PAD_CFG_NC(GPP_D21), +/* SPI1_IO3 */ PAD_CFG_NC(GPP_D22), +/* I2S_MCLK */ PAD_CFG_NC(GPP_D23), + +/* SATAXPCI0 */ PAD_CFG_NF(GPP_E0, UP_20K, DEEP, NF1), +/* SATAXPCIE1 */ PAD_CFG_NF(GPP_E1, UP_20K, DEEP, NF1), +/* SATAXPCIE2 */ PAD_CFG_NF(GPP_E2, UP_20K, DEEP, NF1), +/* CPU_GP0 */ PAD_CFG_NC(GPP_E3), +/* SATA_DEVSLP0 */ PAD_CFG_NC(GPP_E4), +/* SATA_DEVSLP1 */ PAD_CFG_NC(GPP_E5), +/* SATA_DEVSLP2 */ PAD_CFG_NC(GPP_E6), +/* CPU_GP1 */ PAD_CFG_NC(GPP_E7), +/* SATALED# */ PAD_CFG_NF(GPP_E8, NONE, DEEP, NF1), +/* USB2_OCO# */ PAD_CFG_NF(GPP_E9, NONE, DEEP, NF1), +/* USB2_OC1# */ PAD_CFG_NF(GPP_E10, NONE, DEEP, NF1), +/* USB2_OC2# */ PAD_CFG_NF(GPP_E11, NONE, DEEP, NF1), +/* USB2_OC3# */ PAD_CFG_NC(GPP_E12), +/* DDPB_HPD0 */ PAD_CFG_NF(GPP_E13, NONE, DEEP, NF1), +/* DDPC_HPD1 */ PAD_CFG_NF(GPP_E14, NONE, DEEP, NF1), +/* DDPD_HPD2 */ PAD_CFG_NC(GPP_E15), +/* DDPE_HPD3 */ PAD_CFG_GPI_ACPI_SCI(GPP_E16, NONE, PLTRST, NONE), +/* EDP_HPD */ PAD_CFG_NF(GPP_E17, NONE, DEEP, NF1), +/* DDPB_CTRLCLK */ PAD_CFG_NF(GPP_E18, NONE, DEEP, NF1), +/* DDPB_CTRLDATA */ PAD_CFG_NF(GPP_E19, DN_20K, DEEP, NF1), +/* DDPC_CTRLCLK */ PAD_CFG_NF(GPP_E20, NONE, DEEP, NF1), +/* DDPC_CTRLDATA */ PAD_CFG_NF(GPP_E21, DN_20K, DEEP, NF1), +/* DDPD_CTRLCLK */ PAD_CFG_GPI_APIC(GPP_E22, NONE, DEEP), +/* DDPD_CTRLDATA */ PAD_CFG_TERM_GPO(GPP_E23, 1, DN_20K, DEEP), + +/* I2S2_SCLK */ PAD_CFG_NC(GPP_F0), +/* I2S2_SFRM */ PAD_CFG_NC(GPP_F1), +/* I2S2_TXD */ PAD_CFG_NC(GPP_F2), +/* I2S2_RXD */ PAD_CFG_NC(GPP_F3), +/* I2C2_SDA */ PAD_CFG_NC(GPP_F4), +/* I2C2_SCL */ PAD_CFG_NC(GPP_F5), +/* I2C3_SDA */ PAD_CFG_NC(GPP_F6), +/* I2C3_SCL */ PAD_CFG_NC(GPP_F7), +/* I2C4_SDA */ PAD_CFG_NF_1V8(GPP_F8, NONE, DEEP, NF1), +/* I2C4_SCL */ PAD_CFG_NF_1V8(GPP_F9, NONE, DEEP, NF1), +/* I2C5_SDA */ PAD_CFG_NC(GPP_F10), +/* I2C5_SCL */ PAD_CFG_NC(GPP_F11), +/* EMMC_CMD */ PAD_CFG_NC(GPP_F12), +/* EMMC_DATA0 */ PAD_CFG_NC(GPP_F13), +/* EMMC_DATA1 */ PAD_CFG_NC(GPP_F14), +/* EMMC_DATA2 */ PAD_CFG_NC(GPP_F15), +/* EMMC_DATA3 */ PAD_CFG_NC(GPP_F16), +/* EMMC_DATA4 */ PAD_CFG_NC(GPP_F17), +/* EMMC_DATA5 */ PAD_CFG_NC(GPP_F18), +/* EMMC_DATA6 */ PAD_CFG_NC(GPP_F19), +/* EMMC_DATA7 */ PAD_CFG_NC(GPP_F20), +/* EMMC_RCLK */ PAD_CFG_NC(GPP_F21), +/* EMMC_CLK */ PAD_CFG_NC(GPP_F22), +/* RSVD */ PAD_CFG_NC(GPP_F23), + +/* SD_CMD */ PAD_CFG_NF(GPP_G0, NONE, DEEP, NF1), +/* SD_DATA0 */ PAD_CFG_NF(GPP_G1, NONE, DEEP, NF1), +/* SD_DATA1 */ PAD_CFG_NF(GPP_G2, NONE, DEEP, NF1), +/* SD_DATA2 */ PAD_CFG_NF(GPP_G3, NONE, DEEP, NF1), +/* SD_DATA3 */ PAD_CFG_NF(GPP_G4, NONE, DEEP, NF1), +/* SD_CD# */ PAD_CFG_NF(GPP_G5, NONE, DEEP, NF1), +/* SD_CLK */ PAD_CFG_NF(GPP_G6, NONE, DEEP, NF1), +/* SD_WP */ PAD_CFG_NF(GPP_G7, UP_20K, DEEP, NF1), + +/* BATLOW# */ PAD_CFG_NC(GPD0), +/* ACPRESENT */ PAD_CFG_NF(GPD1, NONE, PWROK, NF1), +/* LAN_WAKE# */ PAD_CFG_NC(GPD2), +/* PWRBTN# */ PAD_CFG_NF(GPD3, UP_20K, PWROK, NF1), +/* SLP_S3# */ PAD_CFG_NF(GPD4, NONE, PWROK, NF1), +/* SLP_S4# */ PAD_CFG_NF(GPD5, NONE, PWROK, NF1), +/* SLP_A# */ PAD_CFG_NF(GPD6, NONE, PWROK, NF1), +/* RSVD */ PAD_CFG_NC(GPD7), +/* SUSCLK */ PAD_CFG_NF(GPD8, NONE, PWROK, NF1), +/* SLP_WLAN# */ PAD_CFG_NF(GPD9, NONE, PWROK, NF1), +/* SLP_S5# */ PAD_CFG_NF(GPD10, NONE, PWROK, NF1), +/* LANPHYC */ PAD_CFG_NF(GPD11, NONE, DEEP, NF1), +}; + +#endif + +#endif diff --git a/src/mainboard/libretrend/lt1000/ramstage.c b/src/mainboard/libretrend/lt1000/ramstage.c new file mode 100644 index 000000000000..e9eb80afa282 --- /dev/null +++ b/src/mainboard/libretrend/lt1000/ramstage.c @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* This file is part of the coreboot project. */ + +#include + +#include "gpio.h" + +void mainboard_silicon_init_params(FSP_SIL_UPD *params) +{ + /* + * Configure pads prior to SiliconInit() in case there are any + * dependencies during hardware initialization. + */ + gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table)); +} diff --git a/src/mainboard/libretrend/lt1000/romstage.c b/src/mainboard/libretrend/lt1000/romstage.c new file mode 100644 index 000000000000..510038b3b73a --- /dev/null +++ b/src/mainboard/libretrend/lt1000/romstage.c @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* This file is part of the coreboot project. */ + +#include +#include +#include + +static void mainboard_fill_dq_map_data(void *dq_map_ch0, void *dq_map_ch1) +{ + const u8 dq_map[2][12] = { + { 0x0F, 0xF0, 0x00, 0xF0, 0x0F, 0xF0, + 0x0F, 0x00, 0xFF, 0x00, 0xFF, 0x00 }, + { 0x33, 0xCC, 0x00, 0xCC, 0x33, 0xCC, + 0x33, 0x00, 0xFF, 0x00, 0xFF, 0x00 } }; + memcpy(dq_map_ch0, dq_map[0], sizeof(dq_map[0])); + memcpy(dq_map_ch1, dq_map[1], sizeof(dq_map[1])); +} + +static void mainboard_fill_dqs_map_data(void *dqs_map_ch0, void *dqs_map_ch1) +{ + const u8 dqs_map[2][8] = { + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 1, 0, 2, 3, 4, 5, 6, 7 } }; + memcpy(dqs_map_ch0, dqs_map[0], sizeof(dqs_map[0])); + memcpy(dqs_map_ch1, dqs_map[1], sizeof(dqs_map[1])); +} + +static void mainboard_fill_rcomp_res_data(void *rcomp_ptr) +{ + const u16 RcompResistor[3] = { 121, 81, 100 }; + memcpy(rcomp_ptr, RcompResistor, sizeof(RcompResistor)); +} + +static void mainboard_fill_rcomp_strength_data(void *rcomp_strength_ptr) +{ + const u16 RcompTarget[5] = { 100, 40, 20, 20, 26 }; + memcpy(rcomp_strength_ptr, RcompTarget, sizeof(RcompTarget)); +} + +void mainboard_memory_init_params(FSPM_UPD *mupd) +{ + FSP_M_CONFIG *mem_cfg; + mem_cfg = &mupd->FspmConfig; + + mainboard_fill_dq_map_data(&mem_cfg->DqByteMapCh0, &mem_cfg->DqByteMapCh1); + mainboard_fill_dqs_map_data(&mem_cfg->DqsMapCpu2DramCh0, &mem_cfg->DqsMapCpu2DramCh1); + mainboard_fill_rcomp_res_data(&mem_cfg->RcompResistor); + mainboard_fill_rcomp_strength_data(&mem_cfg->RcompTarget); + + struct spd_block blk = { + .addr_map = { 0x50, 0x52, }, + }; + + mem_cfg->DqPinsInterleaved = 1; + mem_cfg->CaVrefConfig = 2; + + get_spd_smbus(&blk); + dump_spd_info(&blk); + + mem_cfg->MemorySpdDataLen = blk.len; + mem_cfg->MemorySpdPtr00 = (uintptr_t)blk.spd_array[0]; + mem_cfg->MemorySpdPtr10 = (uintptr_t)blk.spd_array[1]; +}