From 1578d73468d143597249546aaf15e614f76557c3 Mon Sep 17 00:00:00 2001 From: Stefan Golinschi Date: Fri, 21 Feb 2025 19:23:57 +0100 Subject: [PATCH 1/3] boards: lilygo: tdongle_s3: initial support This adds support for Lilygo T Dongle S3 Board. Signed-off-by: Stefan Golinschi --- boards/lilygo/tdongle_s3/Kconfig | 7 + boards/lilygo/tdongle_s3/Kconfig.sysbuild | 10 + boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 | 6 + boards/lilygo/tdongle_s3/board.cmake | 9 + boards/lilygo/tdongle_s3/board.yml | 6 + .../lilygo/tdongle_s3/doc/img/tdongle_s3.webp | Bin 0 -> 36138 bytes boards/lilygo/tdongle_s3/doc/index.rst | 233 ++++++++++++++++++ boards/lilygo/tdongle_s3/support/openocd.cfg | 7 + .../lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi | 49 ++++ .../lilygo/tdongle_s3/tdongle_s3_appcpu.dts | 30 +++ .../tdongle_s3/tdongle_s3_appcpu_defconfig | 3 + .../lilygo/tdongle_s3/tdongle_s3_procpu.dts | 157 ++++++++++++ .../lilygo/tdongle_s3/tdongle_s3_procpu.yaml | 22 ++ .../tdongle_s3/tdongle_s3_procpu_defconfig | 7 + .../lilygo/tdongle_s3/ttgo_t8s3_appcpu.yaml | 27 ++ 15 files changed, 573 insertions(+) create mode 100644 boards/lilygo/tdongle_s3/Kconfig create mode 100644 boards/lilygo/tdongle_s3/Kconfig.sysbuild create mode 100644 boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 create mode 100644 boards/lilygo/tdongle_s3/board.cmake create mode 100644 boards/lilygo/tdongle_s3/board.yml create mode 100644 boards/lilygo/tdongle_s3/doc/img/tdongle_s3.webp create mode 100644 boards/lilygo/tdongle_s3/doc/index.rst create mode 100644 boards/lilygo/tdongle_s3/support/openocd.cfg create mode 100644 boards/lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi create mode 100644 boards/lilygo/tdongle_s3/tdongle_s3_appcpu.dts create mode 100644 boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig create mode 100644 boards/lilygo/tdongle_s3/tdongle_s3_procpu.dts create mode 100644 boards/lilygo/tdongle_s3/tdongle_s3_procpu.yaml create mode 100644 boards/lilygo/tdongle_s3/tdongle_s3_procpu_defconfig create mode 100644 boards/lilygo/tdongle_s3/ttgo_t8s3_appcpu.yaml diff --git a/boards/lilygo/tdongle_s3/Kconfig b/boards/lilygo/tdongle_s3/Kconfig new file mode 100644 index 000000000000..2da6bfecb7c9 --- /dev/null +++ b/boards/lilygo/tdongle_s3/Kconfig @@ -0,0 +1,7 @@ +# Copyright (c) 2025 Stefan Golinschi +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 if BOARD_TDONGLE_S3_ESP32S3_PROCPU + default 256 if BOARD_TDONGLE_S3_ESP32S3_APPCPU diff --git a/boards/lilygo/tdongle_s3/Kconfig.sysbuild b/boards/lilygo/tdongle_s3/Kconfig.sysbuild new file mode 100644 index 000000000000..3a2d17ac5cfd --- /dev/null +++ b/boards/lilygo/tdongle_s3/Kconfig.sysbuild @@ -0,0 +1,10 @@ +# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +choice BOOTLOADER + default BOOTLOADER_MCUBOOT +endchoice + +choice BOOT_SIGNATURE_TYPE + default BOOT_SIGNATURE_TYPE_NONE +endchoice diff --git a/boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 b/boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 new file mode 100644 index 000000000000..05f8e8b9d971 --- /dev/null +++ b/boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_TDONGLE_S3 + select SOC_ESP32S3_WROOM_N16R8 + select SOC_ESP32S3_PROCPU if BOARD_TDONGLE_S3_ESP32S3_PROCPU + select SOC_ESP32S3_APPCPU if BOARD_TDONGLE_S3_ESP32S3_APPCPU diff --git a/boards/lilygo/tdongle_s3/board.cmake b/boards/lilygo/tdongle_s3/board.cmake new file mode 100644 index 000000000000..2f04d1fe8861 --- /dev/null +++ b/boards/lilygo/tdongle_s3/board.cmake @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: Apache-2.0 + +if(NOT "${OPENOCD}" MATCHES "^${ESPRESSIF_TOOLCHAIN_PATH}/.*") + set(OPENOCD OPENOCD-NOTFOUND) +endif() +find_program(OPENOCD openocd PATHS ${ESPRESSIF_TOOLCHAIN_PATH}/openocd-esp32/bin NO_DEFAULT_PATH) + +include(${ZEPHYR_BASE}/boards/common/esp32.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/lilygo/tdongle_s3/board.yml b/boards/lilygo/tdongle_s3/board.yml new file mode 100644 index 000000000000..778871178114 --- /dev/null +++ b/boards/lilygo/tdongle_s3/board.yml @@ -0,0 +1,6 @@ +board: + name: tdongle_s3 + full_name: Lilygo T-Dongle S3 + vendor: lilygo + socs: + - name: esp32s3 diff --git a/boards/lilygo/tdongle_s3/doc/img/tdongle_s3.webp b/boards/lilygo/tdongle_s3/doc/img/tdongle_s3.webp new file mode 100644 index 0000000000000000000000000000000000000000..b970f6b1b8d9c6d919f580d19f36912251f2c9d7 GIT binary patch literal 36138 zcma%f1CS@p)8^Q=Jv+9sW81cE+qP}*%#N{R+qP|c=6C!4-|z0bxVVeBimvFVv$LzJ zE2}b}EG0=XF_KsyAazk81vLdu4HzIGAj-d09ps-&Qdn4_0{HJE5O9T!v8^)*5)hEB zor{x_xDb(srWO(8CJ-+0H&i_*i zZDQ(d{P*qc->Pry;NMyqW2b=$k1OCBA|KgPY=%^?O z|J8x}iv`U8H*EC3;s5IEuL=;jF|)DdKj42BV^=4)|H3$b?-RgdpvK@yP}Z=|Nc`xE zxU9r?R0+&jJV|2Uitf5s)(&3ak@Z>OTPTncT6JIAcfO+-jn>YT}9nkzH{!hRXVDJ?P@N#AP z3Hp6f0a@;2>2q^+b7X(*Ud^BK#qo}KqkqD`@9+Hr1n?e+*95EpgwN$4?E49;zF)qb zzr$bix8ghhN{{alkL2I|3jOo^1p(6EpfBN{9My=Qx#zryA3Yn0hJ+5?tpLPN`L~(1 z8-@HQ{&}yi_xxA>SN}u)Nx$i@K!5u0((m$*ksJ9pLIB{4ZyAvLp?VVgod4qA(gRF5 z-O~h^08o7|yoevU0~nt2FMHg6p8IM7iof`e@>ks-cCP)OdWOE={Qv;K$0Y!8{qhnI z0CdD(n*;7Ca8-9VT?m1=X6?8U1Mp5c@F9B4`51Q{ySN5Z>`Ro)nt_){Ec?JPp0pbQ=BI3 zS1EE)fg1-?PD4x(TWo25bBYy4Tcp!T2-fmUL&s020x2R+hPS(@ihCvmCq1$sqf=r- z?KavjlyJA$xuz@&&dqv%jdSxxTZw9UzyhingBO?$)%l#gt_Xy4rU|-8{kSZ~Z}Svt zUz$r{2Y0leFcZN*;*6r6jY#G#9*4YhkvlScmY3r*lfr>w^V3nEiFbv`hE7zhCibuO zoj)!>^9+enqQWUp#!OX-xRiDXz9W-uFK<|xa=!u3a_;~dLvOtmj(E(*Akfz3pSM{0 zou|Hb+O~hZqNCj}qbox68kCk+RGmte;qFu#O;~M@FAEBb%^&`=hWNWnwG$|!yJAu3 z=;5*0UugE|Th&&iCQot@YxuouIi6_CYw-LxTlA&hyT+rJ=@hPZG+odW?SEnURR+@; zy*kiEmcaXEI(&t$aGyf@bwG0~iL$weAcAsc{%0){JVVOWY4Zzx?g_f1AO1-SArC7u zI6DtreZ1{rSEpY%po6uv-H*X>Aw@^SNxpcPD_2?M>Q?wJ4Ta*7h@EJoPU${s0@@Za z0Z(2gHyCvAmSJ2{O^1Ew9==Ec#o_#SUmX5mC60#4se`b7M3`XqCx#`Y9cd`uYh#)% zv2c_EGs*H0Vx!F(pm9>Y$nVswe#*^_6g@e}3}wQRe&nqWn4}eNo(PK#GOA5!j@hGZ zNIr%TuY1SXIvSL#^OaAn_|Jy4o#CAjat+`fT1ZVb{hXC>?p)jWnA#*W07oR9Wm73A zupv0k>nKoR?D{c&OS)Y4q}=x;Ep)tAF?j26N&5bKf%iuM55kolXeoG?w%X~er1jFl zD)^gk=tkn7qWJ`_5PBFK649l??bvBG+y$QB7Vr7l+kbcWMpV_vA&EifID*liGvJ7H z{Cqd&*9Bq|%q0}E-_%Y{A2W%lzI;EH?9y}nP%oX^ayu}GHnpZpS0+FJT^s^_LPj?7 zC3S`K8wltE-96;PmL%1nd^ZmOP~GKv8Lr<(42|(ReGG!C#(W3;weeMRPUmmz`P^Tv zE7$6$Eh+KYnE$$=E|>O79~8e@b&W*&Yjd_&Z_+(z6g$B`jmH_@1yzi;4a82SO=?$CL`Q`q>VDqb=_G+vIxJakyt{q|jq(qJdTHrj9D~ z-rl&sq21mR6lIt@Q9g`24N@F#o&i_g{`Ix~b4R#tWvDqbWivoq&{+3HXE5kmcoZ2* z1^v1D@ZR(9SJ*N2Q%(brT8tO7i8S9wjnpqHlp_Z43zhZOh?u$X`UCjEK|u&(!SnkU zR@e)l#_NFpRe&%J-$VZ_bz%DvbS$!SyYMjP6>wF7(hIxV%TTd5|b-s4Al?%5vSJx zf~kNcPi-_jzVGzx9~STCQcfoxy|Vwri4-TJb4%z8pt@w%mk%!D+T9)C`ftkZ&Ssr} zE^7D`7^%KWc_gYMe8?YPFsKO(;IdLv-eUZLTg5R5c~CkRnZt%!YqQib&Zc`Lr~yCj z(Vsu&59MVCNoDwto&WV4!`H=Z7g(fb0*~lFVU&P{eLlz-+D9$)yxP`VQ)xeuo?$L2 zEU`i8$S1a<87C;Yts=19W@o43D}j<)a2we@5TH2fuK3Bi&5W1ar8kjTJZY1Z@pmwd z|A}>6-#je?)llFn4q22Vb4Vy+B5wME>?zxM+s4FQL=12*ar)uA3k2(`ftf2;4aMW< z>8#4#=hYj~W@{-D&)`mZRbJY8k%)Z$W}hp_CalExrOJLbs`cewVri;E7cqoUF!le5 zqIN15b$P_Iw7l8tC{lE05OX?FI7vn z34SV>3MvnFWBY^jF#&maeT5>RffV9*cW0nS0fgCe|FV>vw(Fk*=aI)}s_|)~t81tT zoD8}iujf*OCe#u2Bh}}!N+l0f#Ez3`uNb9dN>-;RQ#5iNJLx55%|+AjwYMgmWdc<9 zncUt8(vAOmdd~fne$|>_`S_eGdTDioAIBHbpfhvqYMCPapneQXJDig7A_7*m@H~aP zHEChz&|3MN;%>11R7A5Mq?6Qm`53ej>a{Kg@@Z=dv-)g7d}(kLoA`z?^1Dv2gP!Ep zj@+N=mPow+VN^4BC?g`gYDVA^IG6cRoAg5D&js?oAUddqUNCO*PC@dXo2RT48P(s0 z4M?^K9dl>bfc51Gon(l_r@jxK`YK&+mP$NmakKa|aK9NXtG2$91}?u-AeYMWSh3FO z4sF$b|B`fcgZTX|kgfg?&2#>22P%;knTe-f^|~or=Rqv!uc!N5x;u2k2}u?0gG#6h zoe9ksW(tJBX@%7{ z=Pwq-hNXF62~PYWFbMu9LRN9HlPKsP!g33m6NV5>C{IpZy**y!7RjB7QG>wtl9S9uic`qLIcK)u;?jWcV#vC=pB8w`SDq7<5Z|F0Tk-D zno|t2kSeCF6UV-uBS5xFKxrYD`B$NbrwWH1s+=EGidW1R75@gUo|9F(pX|5edD6V` zQhM;@-LPsQR|F%!*cJWa=@Q1ims=0)Ouu*T_SaRa$&Rj!KgyLpttdl()rFg_k?rHmO?rK{VxK4$jA8~+J67*KW6{`X7~SRIxtKG^bJ`4C*l34 z0B3@4VW9U#N0oDDs+vLQ&#a`z!X_C0k(@Qe)>pg*o z$4_hMgJBt`dnH&sS>sOS42_BA@;9*#nWtXF=k|QlYNPv@YR;E-ALr@&tt4g#MEH?$ zr}787oF8mj)Ma|eQItT@M7hT?_lKph+&Xm*NE0ivXucB~MEfNnnD5Y<pk+|!8JUQ4SSz` zkq*%QG?fCL<304gjY7V=N1hiyB@&u;n69!x%R73Ay@8!Der<<_^jsV}HAsO{nl3>X zjT2ZmU-JgVTJ1;KB;^E>kvnKee z9m=)?qii~Gc+PUk>D}j;oWF26ZzIdgus#(SnVAak+DQ>)LGm;`TkmkjkmhnB#nO1y zjv7?edk1Nqo1gY56Wm#rBhjk#2J1Q(2znNZ+IXCKY|6n_f z=2N43hHf|*P>C%Cw0P^^fDDaiC5_0pedkEtGDTdn^6+wLHS>Ol<=uUl;&JauXZrc? z(?|S{k$p_g8V;nMq3RIeR?8+MflwO+4M~&}H;M7M$s{P%&v9)57V~C}7{B;{5?!cn zjSvohA6^18Qb3e=Y>#3-TlFVPyczLfHT?!|axv6EX1H%BIS}deM9}}8vOs2_2O@h< zB^-vei1T|9J@r`8A}*>_pSmq&gh!`}gn%_-i9vPR5R42TR#0vJP%}@yx*EoJG)IU< zL>^F;<-#h^i@j2(R@?|=b4~1G@@W}tob;i;!L()iYxz{0HiAR5N!207^xXLg5eZ4S z1S9NfFP1JC3vsL>W?O195(_2P;-yfTiSZno82;0h{6}X zUxC1mSt!D*_N#V&(PHnaV^Xn`C9y_W)3LM87=k(TS`v5CLWu^6g8GaHr^C223(E{G zTSf6LrgCKidTz$F>|!zfXLT!GLNqkaLB!s{Vu>5xFpVSYlxnwlfo!++^J}Cp)j2#Q ze)JW#DQM4UZBkrj#@970$#mKV>>tWjTQuWza75;@mVr2Tzv0d%uS;(uT9foPax|d) zSD#_ihted<{4=%|noda{NGD-B&JT;nR4o!}EY{zz3^?0<>_Qnu>Mly+iyx`hf(6SJ zX^8W0@n1$f-maO^mxoU_4gH0K-6Eli!EtrYLEOYefnRcF;YCWG3qdW99N((AD7# z5j&U=aw&Jf?UmC_$Nr+Gxq(f9EetuD_S_teLPwarP_fmXfEb@iKEN*|Sg6BaZHPSE zV4W(GygzQhwJ)B@!t9pw!gdmlV|ps(;Izll$ypPGXwAwLW9L1**td{M1LQZkUY2av zw`wsyNFMR_{V53h)vx;gS?unxn(T+)*q^0pZW;4j?MCCZ(iJ2WjM8DB=FD~&qx4(w zk~(W;G)Pk7cJode-7FTf6&`zux!hARz-QgcH~>~lAiZTjEKl2G|AZA>{7h)89wDMp zHbqM^rq98nK2rgoFGNHpqB0U~!tR?Hx5;Qq$hNawQEwo4nHakDg|*#&760-oF8wAC zW3$@EzTVQ{5UwH{snhn?T&E2KzAf!@EYjx#&&ylhw?HW=1=(s25Zeewwi?3Xvm%-7 zyTUG2k#o1E3|gOiUi$(M zst!p3Q{{Pe#B3FORJ21t`2LHLtW#fWezb^QkEu1i$r< z6R-H3!EmDs==-;Kcor}-B1X>%j%NxocHg&Hr5eY>vXuQ0PC5N`Fy`7jk@;=YKzg`@ zsicBZ|KQl*h>W<}8s7zdJi$Tf_|*VC^dE~f+A#A7kQnO7f%dq~s1;jC$(~jQFB|~L zL#K>VJaWuyH02`CljU7r2A4)PJXh98*Vi5dv`PIvPV)zNg)aI?u5&oxiQv%_E%36^ zvwUffUtF+iFW^~@?YuSj{F)rEod-vTx&8x)KNfl2vhDNxuik`VDiVoAj;`$=i&39?^0m z3%4;PB{*F%Z%9uoh~hl>xG=~lj6acTVcs%5IuJ#yNdZwI+sqD$;SUB4AmGfBp(Q?( zOI_ZhFBgCC4w3EoI-W$9KyodkRI$w$5hF14L-N3-LLoDs5tC}sSd(kbvs$cWX%<_) zh0EM@zbT;g5A)Yk$f+MK8Rr_P?ulUKPNIS1L&;-9Es^T9zXAUCLc_k^JH}qx5gil< zetCO3h*yJy^GbtZ6zBdgRXB~FBL?9RvKuL7^Y&;){IcrqQ0cJ#Cl)ms zX%xVA?HVkz;61O9`p-}h8PmS@7p*U4+@I?{odxV~v@fU<`9s<( z%G7l!A6K^3p;fc#`GeojNhPn3a{k1sB_aK^y(zTCp1O7t%9ZYB9wX71r+Wp~3uO^# zq20b{&lsgKD0(;<2vkieI<V zqA{*{t5Yb2ciR}VpyOV23CpB5BFGWG-`n&MR6>3yP;3Ur*7oWASOFcJRUHWj;ZY_|4_AC z^^#?NjIC5{NzQXojoI(rnW2!=UA9BAf|S&+68!R@Z}RjMB*g`@ybJoMn*Oi`$mTxD2fM;dm&5s)A`(|S{B~mNtQ6c zqYue3l@6r3j(gWDWRu^I5o?4faVN~!_{HXr#}@HQ&Lnlbgg>oN{<^%MNdV$<1Wpo- zbz)%ND?1GYgtK&mapp!y?k#VM_A@4wRK8F-OJ&|R+UF5CFZKzVf?gn)E|Fx)oopO= zjUzXUkd-Lhr!ky(Rt^N+QXnsgAV|NR5m^3s&wXf!DYN~LUBNsL>jtH^AcaCbTYL9t z#o}p}w$vwvZ_&s{$JXv9qD=~_ULE6=q&qELs@B_NW#%Dc<;=swC)Jom?VRW* zx~R=`BA74+LC$%$ZqaYn=HqiZg&rJB)|*=>t3%4n?=$nKV!>MLu3!?@DK>6sI0{i@ zXgCQJ{T2g2vl~fSYj=YjZz!7uz=t?p1JP6_iB_OpwlSAV0A(_ZA%R?7K+e*vD*4JZ0F>PHVL^!4*D&`Uxfv^%sjh2+e+iDEze#df>rsy>a#G)r+ zWv=0ztL*@=*d6K@%)A{(_00L#Jm~+q00$j%=)dEevzx{#{uqsBGeAc}meXkaG@HAN zUSLq?Z`W3OO~Ua)?_Lz_UWbG~aGJ$dY&;B$51AT(bm`{!{OOfG7Q|8!(U;DSGUF-r z#*6I}Z;5HBIgs_|nEpax{CwTdWSuXr`dC@TbQ0}lNI?$2Y>Gwr`xO+t6YPfRboN*I z$6gKGC~$>UZI1?SFojc~sIP0z}dPTp!{{$t5R@y^oNzn$i34$LRzxe7Q$({2q5t$MmjndZ1n_?tm?z>+)|U_QieP;^P>x_Ta2e?XH+M22YS8vy9-u`^4&>HMuO0pO{KF9 zG5Rv?<{Z>d@v|0WoF#y*xCm#>r$jW)GOqQk^T$#~6ah{E2VJ*peeu)7xkPf9t%xO) z%B+oK8Wl@L3Z^w3;2;@2jF+3+lkzZ`-T8PEkRPgdujC9mkxf%~DJ)8bhUzhv{FE6jhD*4QUy_!6>4!kq%;y}i-+ zWDDOzgdhrS$%Id%^TxP$prmdB!|Wao8K}+5e2VVqvy*0g*O&i2Z0%mL@YWjd{^Mic zk9-pQ%LE$ox{)4k{K&E59vX#liivZxqauHM(XF*fdJt?UTPDX0>t?jHRtfV)Rp3yy zRxJhrcD`WtYF#^N_Sx0l(}D(KMD(u2O{A1D4IqV(X%C&0o-%O(g-Ci^=T+JT783E3 zZ+2ldWiRabJbWB{*YTB$#|I zTMDqWHBD!F=jDQWsWUP0+vXZ7O}wcX*IoQwYJLHU?>Q+-&7AcU~5UOk#c8t@!BbbpF8ySR#fzFlv4N}*+Edd?)yAG4J*OJAmj$?SUU z#rWe_&pZT?VuLL z&KFyjPtJWsz-#Rqk!IP@JGr!hEV|XB7cvN&q(+8bd!E1;i@y4`werU;nqyN0Ulk*Z zJg@;==?U9aAWT1Q4os2jD#Z_3lkVk~`Ssqyyhu+T=n$4%wFq1%Q<}pBjKyhHq67zc zq&Fdiw)@((Gm?lRZ)%kqXj~StH;JiP@f+Iu&2NgDWeTo8amgy&_;Xhu1FOnrd50{U z#Jhpps7`*`C5~6G`QbBGGn4>W?!R%7oAKyvyBr}w|1wG6}2cm}I)SJv$84f{ImJ1>ax~J}*$V^iD$}O!E43BqKOdC2onG zx`L9D+SSAfzH$7;r_%(u6&cSfpyh3tp@pk)>o#p$>=GW`?O0Icpxn?Ie*_D`HxUy4 zl^7USe$X*#|5$5@iN?bT1J}5qiatN3aGir`)K8S+B&XntPCC~X7?{4>d~!4KBS*I~ zCzK_Zp#9FV{ST2HFXy+jqy@w`Up1Sfjm$Ce0OKp>kz1ah$*Q3jA_Cp+isN9RC#H|CF-j(c% zL`NB3QR#MgEp~!d>6j9!IBiZdR#(k+;5sfi2>th9+VJkdpb8YL41CFMK|0Y&9oU`pCW$h^5pV&+>1sU4&e_GMK z9K7CsaRg{hB^E2oYWV{Px_C@xOM1;Z&X=o)mJ`MZP(}1#^Q|FtyO4L!?YyEVyHeej zi>o6}1N8Ww^#p%{mPQ^UA?>`@XXuB%45s8_-NFx@1*?#tfG(hZGEEh~oz) zo3P8M)VJu^PL*tAObaZNe2Uoa8$A8Q$`_czpDoQE$1QehQyGJx!Vd7S)Hd>)V!H|V zSq)a;h&=b{o7$mUk-sPG;a|~IKt>5yxS)8GuE_UdP|5v)xopp4IC8tFt67rIUEl5| zP*m)&*E)+i%6J@;Mf|g7w&o##x~3b0O2?sC%+rAyFFp3r!?+i<#C81&ae9HCa@wi5 z?2dcmiB9$IlS0inv<{WttaS_{p2>>qWUF5_FV^s#Ef<*LT?=ERYd3san5ca9r<=Md zDknvwUXj((0of~w;rB{d9$q)9sV!3WRePktD|%7$edP0_#8ej&L@kv#e8cZ1I)S;g z+*Ln{4t$C&`Pr_J3)Zr9^j0ZmybSe>0u`*bGP7Vdv~LQp1QrQ78b!8Wk@Ul?tqT6N z7Qs`BjGg;LZ0U-OVT*5 zv`*SlqGp5i$9fxYdXohnO8Q%IRj1d#Q_G#%2ppHrY#?3txQZ|S*ezFydmc&|PzN=q z;xGuGh8AB8v(i8JY4Qk0w;F8))!7sb@8(1?H@XsZz5<j$=H2Q5?(F9{zx6I2MRM6)pJB8jbw87T;&ai8oEC=yqmuJjSYXUqHVjm%>Np^At}*uV1;fe!3}{O zeOzbe(`r_bUZ|mVph#rATh9 zM96u@_AuHji=lh7KC9A|f@@PujV7oxG7T{^-PZ9@>S3`+@={!!^Mo+Mb z$tymX^aWyOLA!E%-vA}sZKL163jj}$DPYy;7ShimrN#KxDHjHpT%W#;iMseU5bg~% z-Gdw;D0IO{oYSC+#R%zY@9aokr-k7HolcY?@z~!MaRPU>Iyfus&*q6oEMzN&|CuXx zvXP}*q(>r`Xy_ztu)1Tg8ZPkVZBuB}u}8%~I~ry#k3mxou67IqEh356S`|N9kY}nt ziH^H|)yf^xTfhx;V^!3`b6YW|Kt9tugflr(E{p%(Y9s4C;C{53KzwSH)>^&fA<><{ ztRWnKYCK`afY;8f|l9Lu+ zLIGhaOJHf!hL*L1HZA3{xv!n7n5L3bEeKMo8<=#-aG$BFsSD;s(>m>jlA~T0Ap}d~ zq9Q-)cm*jc8oN{R4vKP(Dj*Wj*JnOyUhpu}>A(7C!FQaq)R~bmX!?%QxGeYJLk{$u zb6((mQ9yCL>~noNpjJWY?HFv*y@c;5MJ_k=k&e9bTDqz1X9VUk4ip0}1HUO60tNR4 zR5)U0s}&6qektdS>)=62RAfKkJb|$g+1D}*5yuYfGv*PAu~z;!q(Pk=y+c^cIz>j6 zS=$`EI%PLWPB70yAO}(V&oIe}LW^+G%BPJ?sw&m{LzD3Kn3NT3m^@$-i-E^*&bfLi z{LEin#}{xOdbG6LYWncQr}Dl#O9?aAv1TFA9p!WO^zrz1ZZJw~6{E-ovJafN7;j5tjZ=Psa=lHNVSK?oH1F%Yyqhz`=; z>fa24?Ogdeu47IsQQ$x(mFT^}ES<21=Xm<)KG$|#w~~1k<*ARr)}~^9?1Cnr7&8H# z0y|+LVW{j06fIvYlReexwof>fpXyZ|1k~GUMs`=I9%(4ux+H!H= zxY5d>`_Z}z5OU2_R-BhI;$(O6la}AU!sMQuyh*#3EgP6_huAfzp6 zYF+z&CiPVzhvWB!EWm6rJ$a7jLJQOj8P?gZ!V$h8r{%D%v!vp8h{wJU`pBvMs?_*& z&ajX3Hh4p-qP6$hkfgqpu5{p+4}mj-HHa8LX=|n^uYwjmw~zd*d~vsol)@4*AS=6? z#$S@#5LfzF0H5o3)@*@+wEs5zV!Wx(7;tSRZt&H)-pc2MZ)-}a{F)x$S1RXbT4FAE z`(;@h%8NGh3}Cal1mY)>V1-qV`qv>k(XBP9fB&m&02A*E*AgkifEf6-L<2^-cBooX zJV!L~6Rh!4dKZ86sZ+4o?^~QN(0;z)Dgy?Jy=t@WbMYl>=l1bIp|wjn@pI^cK}+8}eP$1<(1dp?f26=3z2)~3!`>Vj_D+fU)hp~UyyLqMIBx<8K>-|dBuXz&c+x%b zuQ(0P74FBeZm$LwtsGn`L!a^V%Vj|Z%AI)uzEESV62>)D4i7gFQZivFb}aPn0Ks}*|L(R2fyD^!`ERAuCXyN z1iz(2%(Pe13b-J>zn(pzv}j*zex7S*Xo%24E4%mW&onTI7VD={tkQTE1Oi=v8WlQ! zg@odz?Pxyr7mu1^A$-^Cp_fk62}OQR33Xhg=e2U0_xNgao*gYyD;I7w+@WrcPUsE~ z?t*KyU#;4-lPOE{5&9MtjQ1y~&eX6k^F}sK5WAV!AqmoG>e_vJ0IoQ_Yq+JfB1`=4 z=X*}rJ8O|-Hl+VVTP#-gQfcney+?sjDqdG2NH}%FT>y*m=hEKFDbY$sQb1g_L}-Yodh@4O>*Cv5|o!MawF>*$Mq-`9rLuP^@l8 z@Q`EoSZkLDcQikRXB&2=eNo9<1@wwd6`T-d2V#_p#I4(sa6{PPY?lz{>w8$+2<9oq zqo=z1dO8;;J&W2-^@rCzF#A*}=J7I^J!rsJo-TH!!dKj7b)I)--F|?|&1RFF65%6@ zO!kAiPB^!o-UIX?OmxkCvq&YhV<|(cBp?0O57cM5e@NFO6`B}si%wgAJtLK*N3rHH z6HGr{&hO;|4v}TtThOE*>D$}Iie5sV+|){2U`ScTv3H^vi1k&oWamI~X&EF>>ns2= zn%mJusK-vBM+U)N%5EZxg_+FD9RJk<{NwzhXqXKhS)f_za>G#IC0LMksBCUd6eO%} zneaSb+aPop7Zg=3zMDl!qv$Annkpxs( zQvLM?f3kWS2fhi17T7pyEWcAo9S7y1)L{eu3mQ2k#GQZ6HB0Xe*xAmjt)OSxMk=)- z)|@ccl=7BPn5eQIY|Ir*6+U6_0agN|xxPY5zUW7&5u6!F>qYuH9o!II@k%F~3Sx|~>nl`54CKa#Oh6i?$k#LMmr7cyv0AC>(Q$04G^nK^JC|&z zIsE%IQ`=w{-zQ$f`gE`eE!adttW^T+kDpZ%5)=S6%M~HwVp#FEbXsK5ij@4MVS%Qy zoP&i^fsk`4+JGH(GA%v7ej~eObwEuuV-KV?w04+?!qZ81&QfYn4foE=3D%Z|0c-tA z-&bFb%_b0Aes>2n%G4bWI#_GT=Ez~PmyO^LvXg2kWeM=01?Ly2yt$YU13A*Uf$u$> z3wznEg~?18K-W3ft*WcG@cw< zsdq~y!#E9Ec*#BngC>zh-L9mKs71>iH5GYy*8oU4G&w9TycMe_>C)3u;CNA8SCdJF zGJb0mbZs3%$7)lCO~SWqq)8+1<@~~eqv5y2FlgpftaC8tQUKt+Fq670@=fgJ#ml3zjkd}Tk#sQ!Jc=@&zqgu>{H*=THU18j~hQp+#!t6|oGR~FKbV=tB#X7r<&$=PTpM&8a#hsCX1cwP5 zrJJK}INbpLD(MixH5yscy%Ta*VL2HhlqS9En@k-uT~ zYA8-G|5ztOR>m070RypEaY)uex{cQFn&zHjY;^If4ATC9{ZieMZJ_<#LRrtSv2=y( zTbdI}gnwOVVicxp`q z_$2&E`o%`Eks85~j-NS`KkHJ*_JC~n6-1k-d>OAy%Gk;LCwFUl6_VPmCTc~1Cp-)0 zW$alQfzwVt!it|8O-J@{+g8Z5i3l>wMfYe#l*-u~4yC7;5;!-`?9<8Bg?)slWM(j{ z?)%R?V!&{zB>iP<`%4V%OSFLp?ImID+T4X5HTGUU5-N>qWH2UDF8u+}u->p^4d<(# zMKP>cx3>~kiwx|P=|jSFG~*$ytU7+J&7RmErk-TU(BC{eZc_9Tf{UStiAGwKu6~=> z<_^7u)uM6zvo`U(5ISMLiO5^H+7|z?$I->`_zJLh;Yn+;kqsO7f8f zeWD_M|BwXNkzjw%szRsSBc_m*6)tep4uM960xk}U%?okyL1dTqU7W$%?P_|dHj(nR zqL%GhG<{f*nN1d>PyyJy{qf9ITWsNA-%;{RDxW}n4?p3v+r}%q%fMcNIdcz!=NTF= z>~X3B_DRhA8sYb99uZ1tI8{62M-J0aizCz-IY-b|=CZSpbcW#pu9h36{@}~`*;*@1 zih#KKp&n{hslPZq{hAjXc^q{{b6h&3o2oFRT#*naMp~eJhy_R(D&~$2PMsh~cir&5 zPg?Kq{@c+dze{#%U^vQio|{~p?Vjyw2nG>d$6RL_?96X%H6`;5_m=80?DKpx#F^0S zwf7^7Cegb;Y~T?MKty19)UbV9gRS?CS5xUut3Dhue-Bm0E!3Rk446WQrA*^u_sg^v zcYC}KiXGOV9gv-fq$w(%ER8G-dCDytM-53izDeyJxgcBVG%vR4l+`A)Y{jiD-ozWr!eFb)3TM<}#ZL4fX6Wyq=0 z4IXQ7kk;)wNzP~4R-?Ew>`eht!C$Xi1KGC6FxL8>%g@qR-{RVx%YbH4Lp~_+`Q(YM zz-UXU%Gr|w+YPD$5ZDwNBOt7vpHj;~K`^7kJ0@E)7B0{4u9`*|9xoViJ2$2CcC-_Y z>U#}6W!PXH^J+V|3#TYe{N}efr_TgQec8pW;F)qi1w76A2VT&D;RUuqZD&&zeVU(< zEXVQjPH`#?wJ2JNG>>RHk0;oJl7h$wUqH31qyVLaJT|ruDJX9wKn*l&-FnV4(Qemw zy_Z60yFTo9!h0A=-2I|W03zcF|1_8tvpgcqf=GBL*mpR|$SGfw{&lx*$4xs{rxBVx z4tEGcmdBT%Yi*Q4TaMKY4-1N*u01tRl&4Q-mWw)q&_Bv2$0;@rL|hL*^V_zpT`mcx ztCF8pP4eD#^q`~Vt;L3hC^GKW7BciDE6D2Xm7ilXI_OqYcuwhTk4pIDT&eMm!19rf zvMz7I^b~y%g`v{Ef~sDp348Nn7p^rwS}B=UNp~4f{Iv=xEsLbtttiDgPQ|8>U)4C| z*%x@+5JEbG*dwX`W0kISdmGZy27#DB>Idno-31HUvXc!P!nk3-RWJTK4#*9dEVNO5 zBTG3H#^peqyg;fJo}(ihm5GHUZvlJLBQ{TTdLd2xJ!Y_N`kke7SDE?V7y2aw`bPOh z`R!Z!i>YG)xI^Vi7NSp)?k-~^F!)B~o9Doo_Z~x%yg>ktbfv<0{L^L&>-p^&*U0Hb zEd(wCy5k?j%mAF7u?>OP5K<{z-!J3Q;IiU+t(ffgj~_Wj{SU21pS&{zGOyPmh!HdajXt^d z*YnI3TZJ_oAE!_t18@6d4iuk+KXiekvywX#bnJgJX)aR1Q+>|##p;As8xC0xuD?qT zC{VAug*h_Q&|rin`gsF#`ri;Fr;_xWAAXV)GSSln)mwAWGV@ap&X*$uaMVi1udTTY zirB{}QQS5L-5q^+X6Oao>mwGPP2A+oZI_^bC}#*BNu2cYB=Jp%HlcV&=kIv`fSvzL zgjwRr*sl_^kBL{9AHY9*jlUU6;D_R6YPvNO{hB0Qb@^tT7P3QEbR@OC#G|HUr~e5g z_qi<&k12)}lSzS*+xt6ib8QIvRTBPZzRKRWpp}W$Zi%|eoFlb0F{0#%BHxg6#z`jr z2?B$pOAHGK2X@-|tY5VNlu4s$^3ijz4!SL2x$H}}s}9YskOVAd6%&X_D83X&ocz%} zbV-@<-eskylG*I=aRoPB6-$!=apaJ;tGfJZ+HJ1HQ6yHO9^aTI3R#)cR-8KJT%$1) z0rQl+oG+c)WY@DU<&{HFNeNVa)kou?PpL4M{Hfk<$jRDH9drX4dh=ZEY=Q$=>~8Ax z#%BIVEQ~+_QW)rFca{+Y0c-?RN6|;8vVk+E!KloVdIG5Cz|vP*N1D7(G`y{&#WW6W z6H|TgLPo7dR;(u`3-FonoWtq`p~5khhEfgJSCPqg?jHB%WT+8|m-6{n7hj?@>vgqt zDEz3G+x5=qOzhswyIeNt*w?8Z-th1nJUgihp?rat`A&a1|IJ1=di>~9?QiWM_VW|Q8-uaPO^d|DAoqw_UzL5t=HwYDQXDxC zkzTVZXDINWCgPiH)Pmx~@+Y3Z<{s$Fn<31QqrC};lNJEQ#IukxOkEret0XqP@aoOC+cHKxdL_kqA4p)eb<8I zxQ4&!J%;(ksP|70Jv9UBfhTZ@{NDp*_NvQQ4R2l<{;o~m*Qf(!k;-j^W zo+r5*f9Us#n=YVCZ6oO=;?1uaMFN-e8@nWL1`t`cwvG z&e#w`xfnOGl)?j7fz1U9qBv7?odg*r@-R)c+hY^E0)1@-t3&l@Re9 z46|O5!&y6ot8^ERSITX=D)NzBR9yyw_(O|CUHfQx1d;8D7}}s%TQAlWfs3p;a)eTJ z6PwofizSjXRVZrS&HFdUPb*s;{SE4ed;VwLLt>#*UF8 zWjY1^2LL5N+P}h_+iI^~Su!;M;3H3L`+xCUxeVRm4B`?674sJWmtJsVWwBw6F_rGq zL%IxDG?X3lg3A=ab2cI!@ia!Mj5Py`Nv2U6ysnaXf9FcqO&$KLoO$68pVAK?IEGZk z9@a|DeRiFXy6j5d=@CE5l|SktlSF184eKe244?1oZ4q)(T)hf=*t5dS(qX%M#@@ay zsgzk=hZ`R~(+}l&N|`e4BQjEf6Ol9>u@j&$Gt9pwaEIS$#yr7P>;5US-kbi?Bj0Jr zGpz3*$@=SI#Z9+3@dk*pKB8p>bStGQ?aQU|7F>N0BP&`?L@Q>SZ}KF3_K7N-{r7tw zjfm=@rk2zI*X9;=*3&+8A2>yI>hkNDT$&1XQZ%*mG6I6JNG(0Y(iaj)>lzVh4d#Wq z8q7R4jVcM75RRgtcDwFPT|`8{sHc?}sW=QJS1taf%AxuoAH?gNp?yG=6T)whNhePN!%maMQer;3+l z;#isaFrV4Ftt&*1BKxdv4pmh+G_TlL-RK5?W3lCc#BAKcxQo)Tv{06i_7rS$Hm{3ld&#KOv*b5 zqJ^gxYT2N6zHe02$ulIV=mo06DKg${+bHBR*=COGm&wJ+D{qN@ZVdBP3O6;-j+WbI zg2``Svm?_sTca4RvlhmyL;FPwx}Bp&&uRkvh?toe7%1SlGHi-QXLx^7sbY9mb7b%R ztJ;@A7b4u*p7ydY{In1X8~PKKLSr&>A{p-4`JFusFI!niCTG;yQ^y~5?gF0P{0*!U zbIkkcsHHeDVUM~ArWK=}X$YX)v^$6Jyu^N9+r)@msd3T%TFntAzkc(Xdt=~c9E9>XmwujvxwAD^b#Y#pM zmLg>|QWVl4RIEt+lpDS(lzc)#hsPV97OzC{=zJzVnpWP}$COvHM!$;n_Q=N&@mWUZ zd4)B}JX@^YxNu+JUR?0&=#ruEn;s8ELmXoA1fv;d{+YC=eY)I@gn27U-u9@)&ojW7 z2v4pT2$8j0S$(BJs^}Y|@XoM8UcR*&y}und z84lomT+b2xKW8FvwJn3_D!|^*5rp--`+c^Fw5J=(h8$-i=Al2|o9Bm)QoGZ>o}0%w zdW6eIg2gbktr8M8A%Vd=OZC_B?B`r6qO1WOH~`sa6u7jEy#5+~z7k zW{QXMBDodeSX|y;Go6`(0(hg8z}!2ia-?7Q^FYwnAz&t!ebe%7aw$4TiTXq6pUgb> zh2-hHP~tEWbSh@6FVjcFq(LLD$HzXwk#HO7JIDT4!20HBd(cd1aO4Cfvd zAk`RdV;^^>!QGtA=w#}8k%edi_m9!s@@->ZpRYZYp`Y312$nRABnU8MzWk3$x;Fli z2L?lrWjre;SqBtp8>_>IyuZBmT?h(O7Ad1+Qas^9$$O}>$WSIKTlP!Cl(bz;-Y0gM z-$?-&tC>8(b+f=maCR4@7elX##p%#@>-XwHCy5@aud@%dtpi96J`Bb5l+a?)vT1F< z{>4K;e$VG=^bW?Yr_hlS?7wB4rmKxjfjoVejf=b{{6*Ah+ZepL-8y!0}w(0ql z#ZXqLjErM2axYU;IkN(!5poN6t)89A9@@BhZ&^_4$X~U>jLX7zBgA0X%Jsj9jz^%V zGciFaLqC%{!GTZO=75s+3Vqrmhkh;L2s0=6KPEfD(ICAdr~6I2OOR4s&|YMEvW@;# zr@v3*o~Iz@bX4Hu9ZK|_RAcFqvZhJsEr9L#jNtwGYQm)TY_aHFPPDZ&g7@rtmzU2X zenG2`_?kV=P2P<6w1DFo=NJcmMcJ;5Wbzd3EGM$6*9{ks7+b@Y8E5^i5nyKP+!Asv z0<=hB?%k4^*7X6A$SGARKWv(aha48wX~XQhbm}tiY6Q|+1=#ZSY9}Gehl9?C0VdQ^ z$4|2TF5o}30>HuA1m|N&P!^T!89tf%9;`6&yKPg$*kh+womk9Th)s+NbK+uR`Bj}U zXY_W;iYwE$UYYVkxIvF^pU2=KoOT7RI+6mn3Ju!604wK71NqFiAGPIuf)5pd{rP(@ zh#HB5;d~_>K&w4!bTUGoRy7x=i{GJUo*9_eqLaWR6b!Ku!~EIYv%efKhuB|tR*gxMT#?>5R=Q* zgwC3OG5}6JqLnEGj5??UB1dN(aENjv)xei1gc|{sH}vs%VnW;j^Y7lQaBYkW5Ghq& zk^jN~b(X%CQ zSLFTrW1LzqrYclf;{JB;fV^Q27x-+&x7SrgW+7%tZ)YMed)W|u5Mq48SXe{qHfRrL zR94}uq^r}V6d+3+wcuXG#k8ywbLkwS@YY*c7L7_409pvEf)b%TQg7AI@rxmXks8-E z^V&9||ARuPo;(c8A7}CIe|yCKd>+GWJ%e!r3TKECLVrW^;R%+MvR!F_z-=svj7JVS zP5V)&Ir0v)9gL7a$qJqdv>i%k&j0-0jXHhq3Qz;%{MQ>&`r=xK>L9@}M+uwg;`I{q|QjB^||U8K#IhJ?vm4Ag4A_bb!GVF#WQg?$qZ;JOVr}S zZfw#VU^>l?gYzp-_;w)d$nHdnmKnBZf5dJwJzO_N*1%TfzTsZnTFLY|pm|wWzrDmK z9UBSf^9{ppXNPrNW+HmWMpX0xWk#J>ybZ{sz`)B1O(r!Fgm||C|fO3qnISkH_AleFJ zxV!OA91>JMsn8I!JhRu}dk*J`HJRCwZx=8qY7{aM^SaGQmDL~zgaMNKn-u?y27(3A zn0T{+#$p{U{v}*s!9H$s@@qW7U=LS=dp>(Q#8|Va#%m@dlID7Go&bWIMA+QvkxPJ% zaZCrRK+F3%Aei~zm#twYAFmDjj0-fA7iOexsS^s)98EZ(%%?+KK2o$oBDh9ujgzsdSqXeNkj}A6uDk3is)$|kH}jrG5Jp>{80{jq`MX}TvqHy+lr*SUs)6KDq%nx6(@_t( zmHYfL^NNRaEl1Ii5K~n6{tu}c-qMjQE$j07I!3~XVNsaRRW`yG_?7-2-E`5SJBmjc zW2)Q!IkontIwix^LKAZ{zCvf@)|PM@b)-l6Opb!TpJ%F?t&6RI>RX65kbp4VolFhY zZfu4-W?d0Sa<|=G29y_`bpWakNOCm_;ZGC6oSRRov$95t+doxhW)}4e8|uDAt~T?9 z0ySZ1a$Y@E%|-=& z7y6lli(u2P#6yinPo$cJ4prP|Tr1buBuJi7g3U20w*LFFr)bRBI0vMAJ8c>BJA;H& z-kY_-<&s8BQo-80ZSlVJ3+1L_lA}-+0uTfRst=|M2ofVJNYcELN=h3T-+AM1nX?>q zsk9Bh3yq0z?T(*jSihB?A~E*{;x=$iLJ0bYw_x>w;t0boB27FZ`()tkcDIB3AytNS z{9-`&rGM0(iS|?3S>d?XhHhvD!9f|+%7x_kB4m@e5llXY>`3W;0A z-Qye2QHBp6EI2w3Ptai4c|pb36OFicC7vLRyf-wmf~OEdH8{F3Q_t zjox6=-olr-DWf6WK-DF9pHI0#OwnU4gSt{My&K>PpBw1^nbZmBKQ*W&J9$MVIuXO< zM*58)yVuQSGgRkW1B0>z2IGf=Y3cBeNzaZ`xncP8CNH)U8)ILh_2LY*eBW_^W}_s4 zx{vNBpv%2JeSVl!OiWUS!fbV5>k@)x_4;pNk2X=81?pb$qODO3pzxkFwluK})q%`g zmwv0Q=x-C}wGxF9qo1p0@lt|*7J`lq%0PQ(R(IVX+yb5~6Rn#3)lG3wU$X^a*lV<7 zQEB~LrBxc2JTySy9=QkB2VFht!q2?OoD_&G$DCTZEh^TAGyM7X7$p6fb~zG49QIeX zs_{L;7o6QA1GExI4q1AR!le6oVzdK!SA>J2GO7s8a~DLXC8({=pHWWQ8B_fCFh#;s zcCo4zj&;kYx>j*MgBO#x5U&F@8{_NCaVOC~PpOu=YR0XePNkk%B&nS}qy9U7kSNBz znO%|d=SAHbA0-s-w+`ojey;V(LsV~b3B)^&OyRD$G#nDLb#L^0Ju_+sE8$`h$R_K5 zL`f~zAIiDFk2E-hhulTTvWS=>r4K_YtOKDUMlDJaM9K47n&)r?yojKpkbW60B`9wc zEJ8O)r$4Vk*u&NP-YH^dP?GW)dAqKM`O`;`-Bp;WS}qwNR5uYD<%AfxvyzQf)BIGz zQG5H~1L+DLW75<2QtVJ|Lu%R_UNdR&hGIH9B7lzMellk^{r`?n_0O>(UiTE(gp=*0 zlio!?_Yt<kJW1GweP})QWD@}T2ErF0ncMr`6We`}YM)Ph_y%L3_Q$4SC^l10+)FgqWU;Vg zKj)M^Y@IlZV7E$+pNx#?la|VyNI%9_Tq-kdH7Ps$Z{qu82*!*KXS?X*0;l$pR~y1M z*@722ltx60+L^QTx8e_Xqh$?NQc-eL>koO(hp;Zh*W3Wv!E~FTff6;sM9Qh3r z6(w$bTsu?L59IFzeHNTCi1E~@Jlerz(yC{_3H!%%-#2}@0-b-|H#Akt53o&~0QXhp zS>im7p_PN=rsaGL!})Ra78*9ZP!6e{y$!m}qG{QHll0x&5Znb0 z2B?(!VB5(&U2G^_)s2T?R!ltua_aAO`?DSBg2W2*b;v_;dXKQgQ8uo&YGQjDYi?YG zzMEAuqD>SS9;^NxX`{^`ZxClKs2V&ad6oHnX!+9-TDiV~Xm`d|(=l?ZZ@s5gp z8IgJ+E9YVIdj_#kww?ewq%`*|SSbj4*NeeH%0fouJs8@xf+hn{a6Q?l&8_c_-IVO3 zkQ$&*?3w4UdCyCmu8qXXjFHbIBzMzN+;9u>Z)%}TOlP67X5dxU|af=`lC!ZfeV zK^cTW?f$U3DmYSme6!WxDI@jV>4XT3n*_cg#yc6{&x>6msuZIFJYfJQ_#y}pZtMvx z+?Zc^9{m0SWI%uiYKY%FC!SMGppKE=OGLsj>seLsI45wLg_MeTB4T3^Yhg%n;0fr4 zC2OZfh_7X%HVr+qyk0Gr5l7-@F9CIyg)9c}V5^~AR>1rk1KhHM$&=HP>+n3V;1rH6 z1CBWVJGsyO%O;4i0GfRkc>(Z9`xHXQzI83R%ghkC0e9s^eO!N+lI4}FFH3~b0XwU! zqkn$Q*q?AG3)Q5;OpCpx{yon;;}a5xm1HV)1eGtGPd9YSc8R)lv|yMr$&@zZWF{%* zXC32vzTNz|)ipjP4q-c!Bnvr%^V6I=*UTh3LATsZyqoi1QZ_e{S#G!8`pfR8B3f>J z@+Xrv6go>|D24|V<$eY0FTl&g1nguDq6prhq$aLrh99Go5Pq(3(xd|36X&zHqtV{m zp2EKi{V<^nhQ|+fa;f+N@gT??#yN#EC)8z~UBSIRUs>^jr+h?-->v0X}8;F}Jq-mDG#64Mmw7(7(8r+y!! zLa`bK)OObyv{6e<*zHfinaO!&mnw_gVEJ7-+=_AfBlOGXG{f$>aXO2KvZ(1*@G=df zcdClT={z|pherN~hGL>~7DM5wc+x6gsEsawbD2A@B5|oaig(j~GA2qf-q7Qap+lq5 z&D_MnQnt!`Hy38gT=9Sv&2ml&cS5T9ub=n3}b10(6$Jx|!ZlAXIekCFsLPlUVP z@Dw48hW7M`-SqY7BwogYx(>#Pi(N(Pss1(KuRb@jP6~5e8}tJIP=WFVzQ<2|ovsCo zD-Wl|i7uG&4~WkD@arZ%D3hI>I&S^7cx^#XL0lvVndy2|^R3u>9fr0J<@0v}pZlY^ zZj-}^sw>}J!G1Ci;4=`(&P|7yeAjN&;zmK&6xJS7gAVXKv?MZ$>x z6MRg&UC>(wuL?TN_K-R>m>eiq0iH2EYS%KxuLk;{r<1sB_yHr<=ApcK>+dSI*n_DW zV_DL6(ik+LO^uH2C~ZyY83c`g5oECGCtzaEEScut?1pwl9<6i>XdqsSoPGFKhJg-d zw?VxFTSFq+L`Q|EN~qF{RfHbDW>0L8of6aM=s%`mn5E?bt#?SE{wf8%^TE$3n=shg zH``x_EVgo*?fWs1kb2HB7qrW?LwT2xV;#BAq=C^7Ox*$4vLRP`FpZJ;L_*+;)6@^v z>2cscZxcP?zNsEqg~TRDoc!4CpF1l1YAj2Y@u%;U6MPoK>6bNUi1!)c@c*QISv*x< zNWi5V4X{GldUc=q+*psgZqJLNDAR!{HfU$182-Bh=@L{6Y*Khx-SPQ*ZBLrHHsyT_ z=+RVr5=;tXNlk>wh;`NbZZ84vQ&p~@?&+sRV+6uBDkorF)ja0Rm~kwn}omz@FM7>Ue&+K{wF*J`ivf0sb;wxKxC@(*sN z?#WLY%M>kl2}-DzG=+wptQfw;_oIa7WI3no=n**mE&q9(Sn8O})5JFx@>yPn*Gv?dAC6KbCy{x}aGwoC6~1 zhm_E0hI3g^CSH;HFXw~*vbjMNclr@dAd>w_C;)V&AIniqM9h^{FOqOc_HxZuqA{9l z+4nR82;?>#>uc2oMO3>Tjx!^m(w=L*U>2PB6h4gA##4*+R78 zKB7`CVE9-I%iJnEu;`9^z!Y|w^hbJ6E4`NU0AFyDY9WMxwbdo90i@uQ!OtyQ2MI(6 zCA?u-fQzrJK$?mn)Zq+do3j8^* z3e=DNsqZ9ee=qgnLg% zP4oi|kWT4#X1!)kYeMfJEfU#$$khEdO;ifMdMqA%{lFN=XsE444yFk3aaTUU0!>T< z`V>Hw84PYam%6~~2uL<^qWQ?{)S0vZNWFUSn=Ox8d8JRe!b4|QuR- z%*{sDej=sG2t;aaiFL1o;`n3zBZ~GDy9tu4(0IP}y6FOsG3A6x&7qKZT%vn^wsIV$ z0RyB=^KE|Wvn$L|9SnUM<;eu4?8=WmGCw{-PV(MFaz^cUzJJNih_=-6BrsM43q zfUOkWXtez)(5z^?` znK&I6*vM%%C4yly-kdtH-Lfu&xsoo+7CN{@_ZWA^p@0|Ww1{uOBuNDHfYINCa$d~k zl9$Rjm;9@A3N$B^jFnjh%dTFCaYJYRNo_E)-HI>c7YVa~ufMJR*CB5dn?9o_BM z%}u@&Cg@Xc-CyJf zZ%FcbU_YkB<+LwD&{Ae;S=R%xD8-zzB0@#M!sU$z- zn^{7+Om)o}eOx=rB@Hw)QogzyR>X*#gHafd`KjW_!**Bjij&D$0qU6Jq2A6|_A8}B z4w?P)uU0X4iFvaC*(7WBwA}cxjHVX;PwH1lN#{x^POJQ^Kv{)yM7ZLA4+cRTKsQMl z8pdYEsbE*+@rZ^I^|x*liU4b(+tI?}WA~K;W2zh$xC*Zxvx@1@mvvX< zgDKr`(=9z$S>EZ%O?GpOeytxh)d@s75~%sB;Pq>~1{rC?zYnwS07vc+q^tk1a*)!f zOlF{m8;=%!h4f~0=FzNs&tq)yfL1bMjlqrXKoPK0b~W2y4pGRCRF{*+!YQCOOJhCR z5vcqd?^kqqqcwmdcw_wBAPRWUsd`<<1hP64zT7@gZ*%YZyjp8qTz7tzUk!%=7 zumVVoDc}psR1LCPwkNvAFnuCEidxas#eNpxA}D(LP|TjxC?~~fw=%%_hmW@RNkXNq zN`RVWrz(T@p<{y|;lmJpw2pPMB(}I|E;)?>{|!Fl+;UBZN3{0A4CNNzf`EC$voA0a z@`qqS0oBHdlmSz+cpzS7R=MDQ-N{XL9GGbI!>Y~T&z=qEjh=Fn(O}?NMFcV~-y*^2 zy>b@Dgekpos|bLzV#OTEVr%}PiHd)<1Gasn1{ACT0}&K5uZu;x+?7v?_^E{GaifHI ziD5@I20udElBB~4{_;Sn=eXP6^>SUxVo_NsfN%ET$i?Lx`6pkIHzPm-K5NTF#W(Jk zZpFm$?fdi~=2tS}+<2LvI4L>qA7@V3v;`3-Yv+4G`~2mx!P$5Cbx>y9?v@E^giY%m zt;g^xqDCyC+{g?|nZqsT(Nv!+7^ms5M;Xl&^5F@&Dc&8BU4QLHrlc=NY(Lwzx@;T9 z=2skFeT#ScnwGB0+N(u|0;X$^X^#8rn}urvsE}wRDB`2UFDL^?Y3m{%m<9g}Ub(vw zu%o(EI}YB<8psDmYr{R^D;jZ})M&#T-r4!wZ!*q4iGUcR)MR&Mnruh$v^%@=7!oaf zcE9$x26JPV6Wdk2^duXPufRf(Hj;fa`2#T!ztVvG3Q{THf>4?{l-9sT!BsSSB)enb z;bdG3Dw&J!H+5rLuk;P7{`JK!bk?x%L@Tr|o`w zQ=cy24EA$^C~cFoTLyFJzY}F*J2Orjy4r4X#SdvbXLrit z+`ZQ;5C~ZAKymO~6JP2@m!rsqTL}dSDYjzQyOk}cs%)2@E9;sP+N;1<$%s6MwXmzv z>x5oU2(fZCxJ)881GIaJfI*wAw0 zNb&ie3=-?3atqsln%Cn!QP4^mOGuFasO^>U`K z@{kGe=XqB|m~ZQMBhk<7>=8L}Cn4G?RqDh2W+Y5D-_2@h0fVy{)|GG_tC(hx99&y4 zqK1Gr+@sV#kP}vFOSg1@_1_Q>>O|*gIbLKxZfYi481mJ*Kt+Cp&qugBiNyQ<_O#^~ z*$Xem4S;_MNQ%(VNQ_MdgJ(jr-eX@VeSYBoHWlaBd>wR&Od zm8P1Gd`bfA@hspI`#ZPs3nKKx5H#Ky)870rHScCih`(T*Sza=8;Rr~KhX;tVs2T#b z$`~d$sJL&360=>#s1x`nA=X(7S?+%EusdU*F?uq1J6+~{(`r9q!8pln7bd^VmJJ}# zJB5?ZH5t$*6LXEl77=}SXUFR~B3Ga#R?B`yfnokmX@ciN_-HK(1$xt(uiJkiCZpsW zE`Yvv@uIr5Z_%&7MAM)j$Ppy%jp)^kq?#boex*wE$-7}`Ip7(i*W*50hv7YxTz|i9 zQv)s8VZst6RVE2ucTHnq^k1{yp7g~DTW!HQz*u`jY8k}SNSCy!KVuSkUo@(w6@Ll| zT2~MCey`8+*RE!3XL2E#g#YVgG1WbCGFr`DyF`THa3?l4ShOFGd}P|ejq3_}ns$^r zME-8?W~#**-C+B4fcGx>DlVa;r8}v#n>Siln;Lo?kuRJZ{L=6|Nb5k-U%gG1P_|y) zDH0c;VPMwh0SbQNo|U?|?vn9v`QH3T^n`l&_ON0a`u<_mZz5xG`qkW8t1+6}^`?_l zC@ZJm{0|g?gmrM+njZd;Q5fPcnC+YMqJ@hw&K!{Bp>}`>hE!`^8(}k}@su(u?~xy& z_Tu9xwA(|Ru-9B?-0GdvXU14q=yM5im(D&QS0KyD}~mmiyCYC+6vgX zi=E<+#PvWi5zN^Wy7cX))<^>2?o%{_85n*(t9(@8uI`Yvd)2r9_|tz;`%?FCT33Q& znu_dMb2o)_sPH_GLhlIxpKNa2hB~i$i%K7U-BgD|Ah#g~u0@u0ZD>oT>{C z!^xnO^#w?mr`O83E3&WEQVxeNS=ZzB7;w(E`IH>)n-N_4NG>7c1q?u|4_eXn$eN+e+ zOMZQJSUHymV%N8F?eWR6$)tg60`eB>3 zE87Ws#b>f2hO9jbKEt5Ml{nd}f5e$C6Q9mp&axVX0n!3~*^3eWth|=7UqDs6n2}a; zw`}g9kO;(B<%knkvT~}R>DQb6?A}jUfTEpvm;nSWZ;^C}9?OF0XGyx1==6s?C*}ZJ z@)teADpdU&C6!Xtj0)4l@6PXu3_2!1a4gL7`dfZO=spFAA)v)r6&)L(QDT@ZekNY; z^5qOfOrP2u?3^!Iqo~**YNt&9H$ujUI=F?Ozcjc`TUc8R_+E#42aY3dH)Y+_b$Rc0 zwH4RT>AO5nBzx4qD}{3`Dn#pR%f;Fnsm_?vx|;X7()7^wAWyTeJ$Rj@m<1D^5X@!v zI%vjX86PfItDAOsS4&?t6)sBAjjF>>yg>MiwTz=`odhr7DR$65Ur_JD5*SJRBPpfy zVH&WkR-;fuGrCyr9ika~P%#E?v7+$}BQPqfUj`WEnc3&y#O!RyHe3xWM=9U`*C_@& zu;q=kongE>=-wGFa-AmeB>gf-v~G>DS2xBXo586xB2t1#HjPyu(f{KNeib(mU1Ffc zSxF5<0XJ$cp0eBp!3sN;J#Htmv3>3`0jFeSWHhfmSj~@p#WtVtYdVWTByLMxcc^v% z*CD8}CS*|57F(b=-J!6uKo?LKCey`kijjD7he@Q&fn8qd&T#BL!fWeRP~rLGpq>hN zSRHN=sJyvUt+v$2FN#L=3sk;d^RlpaZauy4k|GG2k((NctC1=>wnA&4h_PJii{E27 zwVpD*$D`T2iL7NtqTskzoI)k(8TF38jz?i$L{X`upEQ@CfwUl2VuHQ@=T$!TOv>y(EK?V{i&?5pzL|#5 zHE$RZ;MEH~Y1@+l`Ll$T7p&chRif9X!iIRseUk-P4zxkb(9p8^7IWO!5i(zKf4u!$qte%rn zh+nTwpX?(vy3ZN;n^NiU#(k2pM17jfcybx?5tY7RF>ES0hKpx=6RZ~Z{ePSg=6Tm5 z%D_+}Id@h!8qz&@^_y{DMT*+PpojpOC^Q#`^* z!WgVD_NQM1bT~PGTjP&SmF6hYs1Kz-T<6FsTS?gwrY=yNs#Rx_)4mj>Q~5XL!!$## z@}8*S=!5Ulp8{1BuETZxv~T9w!VLcEGh&Or`)rn1FOg7DZe$-$#H(z(N?NDm6hf-! z8B_msEk{QcJRPtpbwXZ!Z(1UV*P;m@5OUYK+Lki&@!}KEq&bBlASs`i=`zZ_X>c;U z)#lvl9+9gV7}=j(r^2zV6&~RA+3mntkbu#jU1tb((6f1mb?hJkvw+MZ(pRL%a?hIW znHAQPk5({vhT)!TZ{o*aY-#D!Alx-{*)iw+qZnSH&{S$;4S|tZ$fIZs_W%NcsES)o zTHEcsI$1`2QcTm!3HJY-dT8qX%yN^0RrH=5QrNcGPOce?&m z6d#K25MOuFg>ialO-%UY+b;aO&bL;Eo;#ba_Di3JbY#3Usx8Bcw;g4LlndffL>6ypl}m$yGa#y;K{#ob%T)>j%0i44ewAc78Ro= z5c{U<+Z}cHMhn)#8P2IkjoCMQ_2~+iAFLs6z*Q>PG!IYswOHw86_%HBK3d49{1kM{t5oyT$lHgGrHteQ`{Rp!ySRtSyA}M!M%z!x zgGd=!R{c-51H)sVc&OP!OlSctPP{waJhgi*k-e;Kib1a8e;l4!2T2I%C=#lF7bRj8 zj3Drry+?@m8k{qUo^*i)|LZu0BI3-6PC-+;n6(q3nWhV8gbvX*n#b2-05t>iv_j>Wf zETG1G3K|pc2^qr?6`;Inw!V%FDLW`B%yJJ(0v>&nS6|+ZntXOf2{kwV-aRjvQsiB@C><H9Pv_~Xb z`!4hiTBOT-J>7rAQBa=h)2dz9o*V5&Ml{FtyM4V+J>b!Vk2k;1{g+|u}L)b;8`W1w^jUHywwz;OnS6;wgsKb@_?Jx*oR`_+OIQ{F3O5qzy!g-T})(%vD z9D|O%Bi0C+vsqAiUXl#pzxzYi6z%h{$p(euUp(IH*PaOC^X}y01b6d|^V7}stNC)T zx$ne}L+I+YnpX)^ouV01cP87$XS98|Y4!Ywdt;%?eC<)BWFn)(aG=+NljfzVT6tS8 zE*XaQf%JZ4FSft6lpjV5Tq=m;zusw{6{Fy?v_G!m9NL#=~pO;4= zwyq&EFj}Eoehrlu6%IAWZw3mK5=qd8&mT6j+(UpWXTP@9d|K#5XT({c;tF6fa0iHQ z7FBy>pOm&W=9Qcsy#-pE22^JsX(YU`(+j#$>VpxN`{k(0_S@t@&3GoO_!w8Ykz}oaSDRc)(VZ zCzSo^LrRVUk~OxDsb9(h3E4bL|Brn`--T~W2N>q*8ygOpVbo}&1r9)&77okU?49*6 zVctx}5QP>_VRs#%>bzHnWS*0JJX|!&4uh?5uDjbww%q;6Ne}VfIYidFzGZs5hY)0I z97hE+Gk1uU+77F0sTf#n>-hpoZgCk4q*U;5DK&EhC~xyZa!R0R){&9_QH_i@kGw>S zesQh_bQUo{O8nq0-wToaY1Wz)=g*ot<;A&u>W57joHT@52P8Wh$=%zH+vtmL194=gFK1EvVeb`+Q8#+2{Qpl zJ4XP~T}`Db{It(Z^wpl_=BRG&Yz2nij`lICafX+&nDX}9W7ZLQjyX1YkD-M z4eS4f8gexR6q>qh4hezniS{%r1N=(KG+{t7nJ#akV&D-CA>8EdcxJtb`L3X#K&?kJ z4kIa~5?#YyH2@pWj&$t2GoTD%wjRJL5s<1rv|RC7rN`T-yCsH>!JkSX8Ar!g>P*4Y z$&t%73>K?1BEN@gvKr(s)=vrDn+1+Q!&BQeRY=R@^jT`U5A;j$CB;_}N2A(>u-xkOpZp!dkbx1Fu^AX%JkVmi zIz>y|%J?<3QsMnnk52YLzo??xUAe=xA?l7jEiofkiXW6oZQ*5U%_Uicayo~W2Rcl$ zomTLg4xB4mvLsU~?1^WzpTYhs$$h1w|+`plB%Y<;oLd1EIbTz|`Y+9Rd zhGwB-s&};rggzT~?C1NEo5pwZ`NC<1`9vgK|Kosu5+60lL?PPlg$Gt3tItwkSqamUxJP7q$SlI< zWE*?6urtEkg%=`9){qMr7?Gf#Q#?d(W)mL98%2-^Gps7G%8%w;*v1~1@%dUD1M+^Q z*u?yeUE=oMV$;`OMqcVPb&E9dy*3O!I2Me3eV?fND*ju0<^TA<8yG@pHx;Z~wP?yr z1flh)+Pwj#j|!mL!)A8c;QfoF!NueLRKyk)Rh|m+|J@_|sQ-VC4_*S~)`36UVQfqV z-%N;O*kouJ^`jO(nF2w)uF@g}0F63( zVH;<&!0Tc`C*R==-33fvX=ud*!RTBBHbxF+dy-<+pb@Q@k=^D^fG{HWQ8LPBTEL6+z>K`qrLUEjb#1D*RdPnorqdmB za*HDYLG9|#mrjbFHq}L>B4j@rj`5`^oRP*PalM@Ylb(d(7{~>|8XIYaG`zc#T&r&0 z?0oFo_$y*x&9>{sH)wxh;kuuO4 zbj8JKcUrH7*~9V#N~)N#JF*vLfFs@GB$&W1CSY!D%ascV`3_sBerCsZiW3}A(O1if zd07dVwFJL*rc=_{=OO+DfY&H+*N5BA2G--U;16db97q9yv9u>y3N#A+(S5mqv46CK zL6LP9cw=_6T+x(p^D{O#-w&L9w8N?)utpenP+(W2;wz$U+~QQ&6zyfVR>bO4@q@$R zc~QCiUL@CgJZFG{{i`XuZLie!_NvJ2FS`{=8W(5|;Kas4Vy+J?QXnT;3#2lIxhWf9gM~2TKLe z_&@4c`M3}%PSYZ&&Bx_q7FSV6qIE5wQUsv6^MT8Y=U5Z*#%>d~h8?BVN;^WQgO+AZ zoo6^3TpPz@1=Sd7jS8t%wL|-q*4~0rr6R4-*wiX&x3;AAENTZeO3m1+s4bM3H7Y1l zp$}DRl{e3LulK#L>zw;{?(4q(=i~Wu&iPviTp09Go@*@8R3Wc>)W+5U12A`DSMx;17XW>iE(JJpO8b`h_jP_IR_eUd%ogS9$ zVt%P49XA-K_?xH#KQ1$3hUQ`=wy@4NNql2-3RaY_hP#ilKpjUg-A2D`DvpmwH?o|) z_G9T4OvA6T+(L2SiTCP2+$;A!F%+|G@41u8-cQwP)o2eY$FEpdF zzIzHEJ0~(VT5SQH76xJO8Dv(}J%#0ZE*nf`CAzzdokptI^t?Z`87buB>K)zV%{fjK zQ8YRRb$p5DJcn;m0VTS3dDMcyH%SC`r$wR3JN|b=%7gk{mrlMMMCK&Kjw>eN?QctD zj}@w>RmjMG^uyknY$&*^oC9buf~i8S2GSLUXU1bksp`)lpR5ghpI^TBK7H&9(OU1r z!M7i~Kj0Lf<`;893GWItpi-xe$S)j-YI=Vff?8-KZ^*j@>|X7$LZ{~+MG3>Gwc3o{ z&_DgDk3T8&n5EoudWm(RqBgoFDg0y6_FhL#u$V3+h3*2@1yz(a6#_`VWqM5T9c>#O zoY(o9OzZrocv8XFIHA6SjxA~FlXT(M|AP6akv*>tYg zmTv~z3@^)k6Oxw|Wewukz|Aj8_+cEX4URNPq+-T10CN;Zsh!RAr-|QPN9{MLskqkf zJq|j@I8&HLDXC@UGhwgPVfog{run?11=bBlL7=Ohhyx{C22sPB}{-xcp3Zj&|=sIT{Dl9 zDBSG1_2fmnMMO%tg#G)@i8knZSk(vqb%>$7E{*!pl{P{;@pd?ouNme@9md~m<{Mb6 zSaJ+Z?BC_F>rIn`{hHIspnV`B-6dc0SzTu~z~|=M+J@GVl&7roORNJp$7sHN}l8_q#_=+!tyXZU8Nk-h-ug-g>zSE5C#ZB6rC9iBq>KDY2c z7JRO}Wy;~zlpS03{#4;opvljbARWEk4wihuvL`m)_{#kR6k&X#UTPaXqhg7p3n%n; znq!v|3qchXdzZ-w##Ki6=!bO6s2dXCa9F+|e@J%B#Mh;p&*dx|0v$YR=a6)3X%<>> z9&2v18U5qpv4bZEdTA=VSRXl9km`XKQls)NmqWRIw$goHUPERd7f%Kq&WsY<&h6?GR5uv9)v6n#Hef8Z#EKG#tKr5DVIS__aSpTH-v~KpfK(y! z;t?1r3sKbzNzemTUU)XXS)2nn=z7ho+2jcebtvQgEDiK{P_y;a{p{NW4)%!>RHw@9xpXd-z+P7cvd7{20-Y_q<8 z^5E+mr%!c6`@9#S#S>wevw~A8#)Vb6(QVY~z|?^J2Q`dQe&n<8(&&fdk*yJx<*$t$ z0f4KoQqK0RnAv7>-8d153@p~ps{b=G5bga#9`L*71J{c*QNA4~P2`@90qF8>;jNJS zhpDnHKpsod%pglzh@-ob*7CwFs!L^NBjmCozZxTs=zFiYZ{FY@6u^&H9#YsFN3%wc54aw2k#p=}Joh zJr*;}B-`zQ1wL4eI_mgUaVmOVk-3`P8O(}cGZowvsV`4tyrVnWhllf^_UpWG@h)N5 zrm^6&RRtlf=38x28L8qJ)uRPDd{xoyx-Px*a*%((PY3-NxEI!`l|5I_;l%_9bt;v7 zL0U-AQy`|HCsy&nD!~o${H7`ZASC)(rA+r@NEka%<}j|4LGrijF9zE%1GWcYvpuRh zIU0boQr3D#anHfAjfqkvS-j$1s@J@J)A^tKWyR&~VrdHRSp`2qN9>jnqXCP_-$6s=>RKh8PyNOu z22JPmaak#;kEfmBS$0#o(wcRAkjZ^w4DP%-_6ETvT}+SkC+e19i+}iLay6o-9oeqsF=|P)|#ojCew+Z!y@~t-x3F zj%XbkMR(JzZm49>(l*bj-LrJv_bw2UU2S<=pW3}R^seo=outUGO?ibiV@ zHj@pa$=A39l^8~9uucK5oLxK21B>!K*VX%!h=)4R6e%m?B=mF!UpIn_tWp}2y3*G* z2|xurh3rkIbW)tj|39>ly4tOjf|kFt0|20_D+XYotbhP86%BxjLVpczD!RWjg2Ir0 z*^0s<|MpN*_!9O1`kgVffA>=a{|-21{!8b-83+I*(F15H6^c8zG*$9HOhr)u6#QG4 ck(Q<^_($>l8~~s$_(u^**^1`>_%HeY0L4qP(f|Me literal 0 HcmV?d00001 diff --git a/boards/lilygo/tdongle_s3/doc/index.rst b/boards/lilygo/tdongle_s3/doc/index.rst new file mode 100644 index 000000000000..19964690d338 --- /dev/null +++ b/boards/lilygo/tdongle_s3/doc/index.rst @@ -0,0 +1,233 @@ +.. zephyr:board:: tdongle_s3 + +Overview +******** + +Lilygo T-Dongle S3 is an IoT mini development board based on the +Espressif ESP32-S3 WiFi/Bluetooth dual-mode chip. + +It features the following integrated components: + +- ESP32-S3 chip (240MHz dual core, Bluetooth 5, WiFi) +- On-board antenna and IPEX connector +- USB-A connector with integrated TF Card slot +- MX 1.25mm 2-pin battery connector +- APA102 RGB LED +- JST SH 1.0mm 4-pin UART connector +- Transparent plastic case + +Functional Description +********************** +This board is based on the ESP32-S3 with 16MB of flash, WiFi and BLE support. It +has an USB-A port for programming and debugging, integrated battery charging +and an on-board antenna. The fitted U.FL external antenna connector can be +enabled by moving a 0-ohm resistor. + +Connections and IOs +=================== + +The ``tdongle_s3`` board target supports the following hardware features: + ++------------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++============+============+=====================================+ +| UART | on-chip | serial port | ++------------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++------------+------------+-------------------------------------+ +| PINMUX | on-chip | pinmux | ++------------+------------+-------------------------------------+ +| USB-JTAG | on-chip | hardware interface | ++------------+------------+-------------------------------------+ +| SPI Master | on-chip | spi, sdmmc | ++------------+------------+-------------------------------------+ +| TWAI/CAN | on-chip | can | ++------------+------------+-------------------------------------+ +| ADC | on-chip | adc | ++------------+------------+-------------------------------------+ +| Timers | on-chip | counter | ++------------+------------+-------------------------------------+ +| Watchdog | on-chip | watchdog | ++------------+------------+-------------------------------------+ +| TRNG | on-chip | entropy | ++------------+------------+-------------------------------------+ +| LEDC | on-chip | pwm | ++------------+------------+-------------------------------------+ +| MCPWM | on-chip | pwm | ++------------+------------+-------------------------------------+ +| PCNT | on-chip | qdec | ++------------+------------+-------------------------------------+ +| GDMA | on-chip | dma | ++------------+------------+-------------------------------------+ +| USB-CDC | on-chip | serial | ++------------+------------+-------------------------------------+ +| DISPLAY | on-chip | display | ++------------+------------+-------------------------------------+ + +Start Application Development +***************************** + +Before powering up your Lilygo T-Dongle T8-S3, please make sure that the board is in good +condition with no obvious signs of damage. + +System requirements +******************* + +Prerequisites +============= + +Espressif HAL requires WiFi and Bluetooth binary blobs in order work. Run the command +below to retrieve those files. + +.. code-block:: console + + west blobs fetch hal_espressif + +.. note:: + + It is recommended running the command above after :file:`west update`. + +Building & Flashing +******************* + +Simple boot +=========== + +The board could be loaded using the single binary image, without 2nd stage bootloader. +It is the default option when building the application without additional configuration. + +.. note:: + + Simple boot does not provide any security features nor OTA updates. + +MCUboot bootloader +================== + +User may choose to use MCUboot bootloader instead. In that case the bootloader +must be built (and flashed) at least once. + +There are two options to be used when building an application: + +1. Sysbuild +2. Manual build + +.. note:: + + User can select the MCUboot bootloader by adding the following line + to the board default configuration file. + + .. code-block:: cfg + + CONFIG_BOOTLOADER_MCUBOOT=y + +Sysbuild +======== + +The sysbuild makes possible to build and flash all necessary images needed to +bootstrap the board with the ESP32 SoC. + +To build the sample application using sysbuild use the command: + +.. zephyr-app-commands:: + :tool: west + :zephyr-app: samples/hello_world + :board: tdongle_s3/esp32s3/procpu + :goals: build + :west-args: --sysbuild + :compact: + +By default, the ESP32 sysbuild creates bootloader (MCUboot) and application +images. But it can be configured to create other kind of images. + +Build directory structure created by sysbuild is different from traditional +Zephyr build. Output is structured by the domain subdirectories: + +.. code-block:: + + build/ + ├── hello_world + │   └── zephyr + │   ├── zephyr.elf + │   └── zephyr.bin + ├── mcuboot + │ └── zephyr + │ ├── zephyr.elf + │ └── zephyr.bin + └── domains.yaml + +.. note:: + + With ``--sysbuild`` option the bootloader will be re-build and re-flash + every time the pristine build is used. + +For more information about the system build please read the :ref:`sysbuild` documentation. + +Manual build +============ + +During the development cycle, it is intended to build & flash as quickly possible. +For that reason, images can be built one at a time using traditional build. + +The instructions following are relevant for both manual build and sysbuild. +The only difference is the structure of the build directory. + +.. note:: + + Remember that bootloader (MCUboot) needs to be flash at least once. + +Build and flash applications as usual (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: tdongle_s3/esp32s3/procpu + :goals: build + +The usual ``flash`` target will work with the ``tdongle_s3`` board target +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: tdongle_s3/esp32s3/procpu + :goals: flash + +The default baud rate for the Lilygo T-Dongle S3 is set to 1500000bps. If experiencing issues when flashing, +try using different values by using ``--esp-baud-rate `` option during +``west flash`` (e.g. ``west flash --esp-baud-rate 115200``). + +You can also open the serial monitor using the following command: + +.. code-block:: shell + + west espressif monitor + +After the board has automatically reset and booted, you should see the following +message in the monitor: + +.. code-block:: console + + ***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx ***** + Hello World! tdongle_s3 + +Code samples +============ + +The following code samples will run out of the box on the T-Dongle S3 board: + +* :zephyr:code-sample:`wifi-shell` +* :zephyr:code-sample:`hello-world` +* :zephyr:code-sample:`display` + + +References +********** + +.. target-notes:: + +.. _`Lilygo T-Dongle S3 schematic`: https://github.com/Xinyuan-LilyGO/T-Dongle-S3/blob/main/shcematic/T-Dongle-S3.pdf +.. _`Lilygo github repo`: https://github.com/Xinyuan-LilyGO/T-Dongle-S3.git +.. _`ESP32-S3 Datasheet`: https://github.com/Xinyuan-LilyGO/T-Dongle-S3/blob/main/doc/esp32-s3_datasheet_en.pdf +.. _`ESP32-S3 Technical Reference Manual`: https://github.com/Xinyuan-LilyGO/T-Dongle-S3/blob/main/doc/esp32-s3_technical_reference_manual_en.pdf +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases +.. _`JTAG debugging for ESP32-S3`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/ diff --git a/boards/lilygo/tdongle_s3/support/openocd.cfg b/boards/lilygo/tdongle_s3/support/openocd.cfg new file mode 100644 index 000000000000..0b2c4909fe0e --- /dev/null +++ b/boards/lilygo/tdongle_s3/support/openocd.cfg @@ -0,0 +1,7 @@ +set ESP_RTOS none +set ESP32_ONLYCPU 1 + +source [find interface/esp_usb_jtag.cfg] + +source [find target/esp32s3.cfg] +adapter_khz 5000 diff --git a/boards/lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi b/boards/lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi new file mode 100644 index 000000000000..858961422cd5 --- /dev/null +++ b/boards/lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi @@ -0,0 +1,49 @@ +/* +* SPDX-License-Identifier: Apache-2.0 +*/ + +#include +#include +#include + +&pinctrl { + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + + }; + }; + + spim3_default: spim3_default { + group1 { + pinmux = , + ; + }; + }; + + sdhc0_default: sdhc0_default { + group1 { + pinmux = , + , + , + , + , + ; + bias-pull-up; + output-high; + }; + }; +}; diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_appcpu.dts b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu.dts new file mode 100644 index 000000000000..74650acf502d --- /dev/null +++ b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu.dts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include + +/ { + model = "TDONGLE S3 APPCPU"; + compatible = "espressif,esp32s3"; + + chosen { + zephyr,sram = &sram0; + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_appcpu_partition; + }; +}; + +&trng0 { + status = "okay"; +}; + +&ipm0 { + status = "okay"; +}; diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig new file mode 100644 index 000000000000..48546641cadd --- /dev/null +++ b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CLOCK_CONTROL=y diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_procpu.dts b/boards/lilygo/tdongle_s3/tdongle_s3_procpu.dts new file mode 100644 index 000000000000..4ec75c4c49c7 --- /dev/null +++ b/boards/lilygo/tdongle_s3/tdongle_s3_procpu.dts @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. +* +* SPDX-License-Identifier: Apache-2.0 +*/ +/dts-v1/; + +#include +#include "tdongle_s3-pinctrl.dtsi" +#include +#include +#include +#include + +/ { + model = "TDONGLE S3 PROCPU"; + compatible = "espressif,esp32s3"; + + aliases { + watchdog0 = &wdt0; + sdhc0 = &sdhc0; + uart-0 = &uart0; + sw0 = &button0; + led-strip = &apa102; + }; + + chosen { + zephyr,sram = &sram0; + /* console can be UART or USB CDC */ + /* zephyr,console = &uart0; */ + /* zephyr,shell-uart = &uart0; */ + zephyr,console = &usb_serial; + zephyr,shell-uart = &usb_serial; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + zephyr,display = &st7735r; + zephyr,sdhc = &sdhc0; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "BOOT Button"; + zephyr,code = ; + }; + status="okay"; + }; + + mipi_dbi { + compatible = "zephyr,mipi-dbi-spi"; + /* Enable D/C line for 4wire mode */ + dc-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>; + spi-dev = <&spi2>; + #address-cells = <1>; + #size-cells = <0>; + write-only; + status = "okay"; + + st7735r: st7735r@0 { + compatible = "sitronix,st7735r"; + mipi-max-frequency = <20000000>; + mipi-mode = "MIPI_DBI_MODE_SPI_4WIRE"; + reg = <0>; + width = <160>; + height = <80>; + inversion-on; + rgb-is-inverted; + madctl = <0xBE>; + x-offset = <1>; + y-offset = <26>; + gamctrp1 = [02 1c 07 12 37 32 29 2d 29 25 2B 39 00 01 03 10]; + gamctrn1 = [03 1d 07 06 2E 2C 29 2D 2E 2E 37 3F 00 00 02 10]; + te-delay = <0x0A>; + vmctr1 = <0x0E>; + colmod = <0x05>; + caset = [00 02 00 81]; + raset = [00 01 00 A0]; + status = "okay"; + }; + }; +}; + +&uart0 { + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; + status = "okay"; +}; + +&spi2 { + #address-cells = <1>; + #size-cells = <0>; + cs-gpios = <&gpio0 4 GPIO_ACTIVE_LOW>; + pinctrl-0 = <&spim2_default>; + pinctrl-names = "default"; + clock-frequency = <20000000>; + status = "okay"; +}; + +&spi3 { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-0 = <&spim3_default>; + pinctrl-names = "default"; + clock-frequency = <20000000>; + status = "okay"; + + apa102: apa102@0 { + compatible = "apa,apa102"; + reg = <0>; + spi-max-frequency = <24000000>; + chain-length = <1>; + color-mapping = ; + status = "okay"; + }; +}; + +&usb_serial { + status = "okay"; +}; + +&timer0 { + status = "okay"; +}; + +&wdt0 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&sdhc { + sdhc0: sdhc@0 { + pinctrl-0 = <&sdhc0_default>; + pinctrl-names = "default"; + power-delay-ms = <100>; + max-bus-freq = <52000000>; + bus-width = <4>; + status = "okay"; + mmc { + compatible = "zephyr,sdmmc-disk"; + disk-name = "SD"; + status = "okay"; + }; + }; +}; diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_procpu.yaml b/boards/lilygo/tdongle_s3/tdongle_s3_procpu.yaml new file mode 100644 index 000000000000..5b01812a0bfd --- /dev/null +++ b/boards/lilygo/tdongle_s3/tdongle_s3_procpu.yaml @@ -0,0 +1,22 @@ +identifier: tdongle_s3/esp32s3/procpu +name: TDONGLE S3 PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - uart + - i2c + - i2s + - spi + - can + - counter + - watchdog + - entropy + - pwm + - dma + - input + - video + - display +vendor: lilygo diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_procpu_defconfig b/boards/lilygo/tdongle_s3/tdongle_s3_procpu_defconfig new file mode 100644 index 000000000000..d8fbaa879257 --- /dev/null +++ b/boards/lilygo/tdongle_s3/tdongle_s3_procpu_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y +CONFIG_CLOCK_CONTROL=y diff --git a/boards/lilygo/tdongle_s3/ttgo_t8s3_appcpu.yaml b/boards/lilygo/tdongle_s3/ttgo_t8s3_appcpu.yaml new file mode 100644 index 000000000000..b9bea7145c3e --- /dev/null +++ b/boards/lilygo/tdongle_s3/ttgo_t8s3_appcpu.yaml @@ -0,0 +1,27 @@ +identifier: tdongle_s3/esp32s3/appcpu +name: LILYGO T-DONGLE S3 APPCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - uart +testing: + ignore_tags: + - net + - bluetooth + - flash + - cpp + - posix + - watchdog + - logging + - kernel + - pm + - gpio + - crypto + - eeprom + - heap + - cmsis_rtos + - jwt + - zdsp +vendor: lilygo From 313a885a75d7a91005bf5d7c8878d8f4ac3a54a1 Mon Sep 17 00:00:00 2001 From: Stefan Golinschi Date: Sat, 22 Feb 2025 07:16:08 +0200 Subject: [PATCH 2/3] boards: lilygo: tdongles3: fix copyright and whitespaces Added copyright text and fix some wrong trailing whitespaces. Signed-off-by: Stefan Golinschi --- boards/lilygo/tdongle_s3/Kconfig.sysbuild | 4 ++-- boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 | 1 + boards/lilygo/tdongle_s3/board.cmake | 3 ++- .../lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi | 6 ++++-- .../lilygo/tdongle_s3/tdongle_s3_appcpu.dts | 3 ++- .../tdongle_s3/tdongle_s3_appcpu_defconfig | 5 +++-- .../lilygo/tdongle_s3/tdongle_s3_procpu.dts | 19 ++++++++++--------- .../tdongle_s3/tdongle_s3_procpu_defconfig | 3 ++- 8 files changed, 26 insertions(+), 18 deletions(-) diff --git a/boards/lilygo/tdongle_s3/Kconfig.sysbuild b/boards/lilygo/tdongle_s3/Kconfig.sysbuild index 3a2d17ac5cfd..6173838df77f 100644 --- a/boards/lilygo/tdongle_s3/Kconfig.sysbuild +++ b/boards/lilygo/tdongle_s3/Kconfig.sysbuild @@ -1,5 +1,5 @@ -# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. -# SPDX-License-Identifier: Apache-2.0 +# Copyright(c) 2025 Stefan Golinschi < stefan.golinschi @gmail.com> +# SPDX - License - Identifier : Apache - 2.0 choice BOOTLOADER default BOOTLOADER_MCUBOOT diff --git a/boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 b/boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 index 05f8e8b9d971..12f013272e00 100644 --- a/boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 +++ b/boards/lilygo/tdongle_s3/Kconfig.tdongle_s3 @@ -1,3 +1,4 @@ +# Copyright (c) 2025 Stefan Golinschi # SPDX-License-Identifier: Apache-2.0 config BOARD_TDONGLE_S3 diff --git a/boards/lilygo/tdongle_s3/board.cmake b/boards/lilygo/tdongle_s3/board.cmake index 2f04d1fe8861..3bde85956087 100644 --- a/boards/lilygo/tdongle_s3/board.cmake +++ b/boards/lilygo/tdongle_s3/board.cmake @@ -1,4 +1,5 @@ -# SPDX-License-Identifier: Apache-2.0 +# Copyright(c) 2025 Stefan Golinschi < stefan.golinschi @gmail.com> +# SPDX - License - Identifier : Apache - 2.0 if(NOT "${OPENOCD}" MATCHES "^${ESPRESSIF_TOOLCHAIN_PATH}/.*") set(OPENOCD OPENOCD-NOTFOUND) diff --git a/boards/lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi b/boards/lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi index 858961422cd5..d345d79becc3 100644 --- a/boards/lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi +++ b/boards/lilygo/tdongle_s3/tdongle_s3-pinctrl.dtsi @@ -1,6 +1,8 @@ /* -* SPDX-License-Identifier: Apache-2.0 -*/ + * Copyright 2025 Stefan Golinschi + * + * SPDX-License-Identifier: Apache-2.0 + */ #include #include diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_appcpu.dts b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu.dts index 74650acf502d..68c7c501421e 100644 --- a/boards/lilygo/tdongle_s3/tdongle_s3_appcpu.dts +++ b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu.dts @@ -1,8 +1,9 @@ /* - * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. + * Copyright 2025 Stefan Golinschi * * SPDX-License-Identifier: Apache-2.0 */ + /dts-v1/; #include diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig index 48546641cadd..ec7efb8b5dc4 100644 --- a/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig +++ b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig @@ -1,3 +1,4 @@ -# SPDX-License-Identifier: Apache-2.0 +# Copyright(c) 2025 Stefan Golinschi < stefan.golinschi @gmail.com> +# SPDX - License - Identifier : Apache - 2.0 -CONFIG_CLOCK_CONTROL=y +CONFIG_CLOCK_CONTROL = y diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_procpu.dts b/boards/lilygo/tdongle_s3/tdongle_s3_procpu.dts index 4ec75c4c49c7..9b17037ae439 100644 --- a/boards/lilygo/tdongle_s3/tdongle_s3_procpu.dts +++ b/boards/lilygo/tdongle_s3/tdongle_s3_procpu.dts @@ -1,8 +1,9 @@ /* -* Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. -* -* SPDX-License-Identifier: Apache-2.0 -*/ + * Copyright 2025 Stefan Golinschi + * + * SPDX-License-Identifier: Apache-2.0 + */ + /dts-v1/; #include @@ -15,7 +16,7 @@ / { model = "TDONGLE S3 PROCPU"; compatible = "espressif,esp32s3"; - + aliases { watchdog0 = &wdt0; sdhc0 = &sdhc0; @@ -23,7 +24,7 @@ sw0 = &button0; led-strip = &apa102; }; - + chosen { zephyr,sram = &sram0; /* console can be UART or USB CDC */ @@ -37,7 +38,7 @@ zephyr,display = &st7735r; zephyr,sdhc = &sdhc0; }; - + buttons { compatible = "gpio-keys"; button0: button_0 { @@ -47,7 +48,7 @@ }; status="okay"; }; - + mipi_dbi { compatible = "zephyr,mipi-dbi-spi"; /* Enable D/C line for 4wire mode */ @@ -58,7 +59,7 @@ #size-cells = <0>; write-only; status = "okay"; - + st7735r: st7735r@0 { compatible = "sitronix,st7735r"; mipi-max-frequency = <20000000>; diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_procpu_defconfig b/boards/lilygo/tdongle_s3/tdongle_s3_procpu_defconfig index d8fbaa879257..b43e7013c5f3 100644 --- a/boards/lilygo/tdongle_s3/tdongle_s3_procpu_defconfig +++ b/boards/lilygo/tdongle_s3/tdongle_s3_procpu_defconfig @@ -1,4 +1,5 @@ -# SPDX-License-Identifier: Apache-2.0 +# Copyright(c) 2025 Stefan Golinschi < stefan.golinschi @gmail.com> +# SPDX - License - Identifier : Apache - 2.0 CONFIG_CONSOLE=y CONFIG_SERIAL=y From 31e5f9787572e9bad954d0f9338c69b84e588731 Mon Sep 17 00:00:00 2001 From: Stefan Golinschi Date: Sat, 22 Feb 2025 08:01:18 +0200 Subject: [PATCH 3/3] boards: lilygo: tdongles3: fix typo in tdongle_s3_appcpu_defconfig This fixed a typo in the defconfig file. Signed-off-by: Stefan Golinschi --- boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig index ec7efb8b5dc4..3354204ec78d 100644 --- a/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig +++ b/boards/lilygo/tdongle_s3/tdongle_s3_appcpu_defconfig @@ -1,4 +1,4 @@ # Copyright(c) 2025 Stefan Golinschi < stefan.golinschi @gmail.com> # SPDX - License - Identifier : Apache - 2.0 -CONFIG_CLOCK_CONTROL = y +CONFIG_CLOCK_CONTROL=y