From aa2d49ae0c32ef1d11b493163473ddd385250f4a Mon Sep 17 00:00:00 2001 From: Lin Gao Date: Fri, 18 Jan 2019 14:53:13 -0600 Subject: [PATCH 1/3] Move BSS to SRAM2 to increase heap size on ST475 IOT board --- .../device/TOOLCHAIN_GCC_ARM/STM32L475XX.ld | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_GCC_ARM/STM32L475XX.ld b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_GCC_ARM/STM32L475XX.ld index 85a8427822a..2ffa1c3a085 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_GCC_ARM/STM32L475XX.ld +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_GCC_ARM/STM32L475XX.ld @@ -152,7 +152,7 @@ SECTIONS . = ALIGN(8); __bss_end__ = .; _ebss = .; - } > SRAM1 + } > SRAM2 .heap (COPY): { @@ -183,5 +183,6 @@ SECTIONS PROVIDE(__stack = __StackTop); /* Check if stack exceeds RAM2 limit */ ASSERT((ORIGIN(SRAM2)+LENGTH(SRAM2)) >= __StackLimit, "SRAM2 overflow") - + /* Check if bss exceeds __StackLimit */ + ASSERT(__bss_end__ <= __StackLimit, "BSS is too big for RAM2") } From 85762a86b1d87c52e1e2ac06387d9ebdb62fb272 Mon Sep 17 00:00:00 2001 From: Lin Gao Date: Fri, 18 Jan 2019 17:36:20 -0600 Subject: [PATCH 2/3] Update bootloader for ST disco board to fix FOTA --- .../mbed-bootloader-internal_dfb7cc.bin | Bin 34784 -> 40192 bytes .../TARGET_DISCO_L475VG_IOT01A/mbed_lib.json | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed-bootloader-internal_dfb7cc.bin b/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed-bootloader-internal_dfb7cc.bin index 00fd19b5a7f5262d08b80e66fae77b3ba4a7b774..54f2289a33ba6c8fcb0fabcc759d7c44640429ca 100644 GIT binary patch literal 40192 zcmd43dwdi{)<0Z*nM;xhnIv37!ewSUfgyuBA)qKKlbO)u0*1??2(C_utepg96x~H} zm*Ju!;2I6Okcgt_E{bRdj7z{c;j+8#s=G5lR)V5YR)-|dY7a?B=R*4ZR!`z(f6w#2 z&mX@(-sDqL-PNa0ojP^u)TvXan)r$NAr~>ejuc2I#s;KgNPk5l|M5p*Xrjf#*Z(*3 zugi$Bdqu2{HeCPT#Qpy_T*Is#rpsKfn(Hm<Gu1GBjHnD8+*^&fcd?fIkj}0+{n!8j1Ws-q(oMoJrP1? z*7Ks;)2w>Nol)*y7$36a6I+$CG?@{`y7eKxVe&=S+z2uJjbW*!cKf-4b zM@H4@CGAUe9jD|*i#QOOSkLb_zTi>#`MmREv`1eH%BC^$&ju|44z-l2lv2LV+(?33 zA1B7E+GNjjbwuC~eB8zgcq27iTxO+hIH%4GT!lA^v^PdkDciJLF*`Y#<2VN&+N~rz z6B@D#{vFw^q*$0~@!2Pp&n*1;c&im}U87!z0Bf{0j_-bRE#JNQHzjhCDNSUY8{JD3 zi+Pk{@mgh-VY>bI7b<)P6IFBca*{qF->5K^CG8h}Wop-(CWzl&Wbfgk4ENP%jEx8> z?IvOX7dLUla$5Pwc@mNvh%mW}2=6#`@VhYXnb#vno*>2u(shu>)Ovkwj1&A2C-j57 zXbw=0pC7b{EI9EJU?>()7t=-)zu-e7alBe}E(k#c8R)t(coIgkt7>j#O& z0Nnp4)C@q?sl@(mD7&CN!U$Zo?f``%x$JY3i-@oi&-VaJ7O>ngxLX9?Pvyx`vOF*Z&{bhM`NX6sH$BUkn)v zY9fY$oskDO6XO9S4$AZ!}K;E=i%5IyKi}G=z4ghUD_{U*wFXJ?Y*xRC@M14?!p)m7w;|nuXm`jU5|Lbj?miE zJL2MtI}8a2JL1@~4g+Tq=jVTnajD4ufWF}G(AFP;r?+nhKV?;Y2>CXo zpW~Xg3!_?`D2_&rodf6FMm#B`rFH1pYRr01DM`*kVBRJ2m@VdrRoZ+}JjWPx&)F#I zPvxP8cLrPqI;{nQG)-)&w15*^=CWb}xPCqOv9&MN!-QrQv_%9dEvinV5QR}SHwNPp z3jwnhF#isdt8P8dcl?dxx;H<3S~2F3>TEF=yiQ^$H@+Rdj`fA1R~jD#~AQcxLuqE$|$BySL}f?cz&D4%RQ0N z9Y+0Y9Y)>UC^3+$63@2)`Y3pQ&^jrJsDSZG#WHBS?%oNpMY3dEx=(SFFq zFNh6KAp<0z6_T~*LDdQU-FVTrX_83om06&R_W4s7PkMpajC4#;yf#*NQcMu%@Vz~W5z7;4keFAnEuVEH_91asV{Na>inT9MB| zPWABPb&1iDMj{-5CGeDz;-ngKi^5`NyTN&)lTFo$I)_`E&$e@MPHrYEJOw*}n{=JX zx4Lj`b~2N=$t05%Y@!w8Kh{H(3-TcDo}m3TtdW|P!)E%VaNwdg=jn#{9Mjl-4cpDO z*+Ns>Rj~GAHO&y3l*6cxnfy^?GWw>YuSwHokUVgT&T+6?(DqSIdN&GpDYzT$w2Sn9 zv{UW5ntsUBL0oa!L(*8{!!HpzU?rxSn5p%R%jCPtI>;JXVvcd0!~ z2R~L!(2|Tub_`QEN|Vb#zbjxz+wbj*$)%=KHQNniPve3a?H+}8Cu>|trd$9AJTlAC zK2>`@8lXH#EBFj{Ef+V$hlhu2X;xx<_;tTAU@rKZ#)qrGhY_$5iqNYw!H3zD57Li& zGe%n(xKJO`6}$}|ti^mr+rI}nZU3i3^V{=vqp4)j@s_H`Sfkcxb>GZD4%)=gHqEe$ zqcOMbR?-)Yl6f5$-rYOVNgT|%Y*?d)+LOwI3z^(cjVBdf4u`RPvTcfRMyZ3f_@;B3 zsDGX6EwPu6e#9}=eDpo;q#`k-TK_s9t;4(lDOm87GG>9=lh-@^79V{Tu!+$z9I2iL zEj*fwVcFVCWhbG5WYtF~)(L8?ykbxX{uv5>57`?7%DxT7$_M&hM!Ttf>W6LmHj-Q) zQeIfF4YSTufy!}l;kw>E=G)QEr+Z(!{MtiyF`-UwjJMueaO-@%{8;bhNR_fV2ij`M z$8E+X2@Oq(f8iO$pTp!bj+4m02@@Nva3^a$sl4OV37eHil3^2DH!Dk#)*?NOv<^=n zMLO&}qpV7{j3@Hvs!p^AZbrR}d!aj59@kp)a6jW@!Z*Nj;HVY3AF{TXJU1)_FKL$C zx<1;{X$4&g!4su^bioMJ)v1muGD~sx37?HD&X9Ib7$vF`=j2z2T9$R*{_^=p_r78OHDkKjSoeNv6Jlt`sez()fb=+i+K8waoBc zbR{`G8X;KWj6^act*;+@OJlEn0WZ1~zB1uOwCC2w-b^p^d}FW0OP(k4!9f$Geic^4 zlt0A!sa->WB;7s$*2<1_@PhC{@C!JI~BYMQga$P452+ zQ|ei?s~qj3YfRb>+6LN|_4Sb6g?cedlUuu1XGrnqF*ibv^SY=#t`3wnVZ-a4f5t&gmNMTruaRTI0_e6|`MuZC!o| z_pJOBEPv1j17)Ozl{a5OYwq7PfkabSL18CWyZggTahliINaNOInZf;|&ha^V+tzwqdBspvm%DgOe5D7BGvxFcy>lta{6lzuK&nC^c zNqZy$j@J#0Z1qce`Pn{V?+nKm8UDuX-*nMH%(fNYv7$}utK+J!c&A$@{wr)3=_)dY zb358X@%rjbuuqH)EPNnjN`GjTmB@{XUerZb5h90_$KBDeE(%b&Svd(w&_&^dHe%faiWd)z zEkqmS&y_tAYvr9pZoySE9eud|OuJ?UGp_%MYYT9jnKY+fo;t8cqBS|0rMSx)SOsiE zzFPq&Fj#w_GzM79D= zM>)SlUrpp^VW$y$G_2RSb+hspa7(XoYo?Md{sr99gIflTTYv30+w{>rxTD-U-hboW z7BK@FnhtFsxltD=b1^q4VQP0;HXZ)AE5L2p zxVCBS@*}keVS@>-b`E|(SO5jmAx`2S&Nwo01j(Af&S^K8^4s+ZCG935|6xyiMj6SP z)6N-6+7oQ~?W}$l?7-1wn;&j^m}E@@G-vpsbQ(*nu6CBsYv*(paf*m_?iP|svXqE3 zkPv^&x5<}aiW}kaG4L}=f#mq(_iwmA*_1MZy+1wvgm0rS-IOsR?|!$B!*jX5Sjv}P zaE}iY!7n{2rHh&H)*NyhPyZ<`A%9Bxc6Z#_1#YvaDM@bp)6#z|{k1FG!{>e*8Kp28 zsqpCB?~3LR&Pw42Pe$h0HFJnCq{gN8Ukao^BYCTVaw49cj>oWo=f!gw&bIsb5 zAK)_r=0HZp@EboaPYx{qN%>5S-?afE_oJ6H585$`oyyb(a*)_Z26+pWHXhQ(!h=T$ zOEp~}Z7y_sa2#kb*H<;f7bnciklyLXs)Iuf+w z9aWu3e5iA1WXjv9bjejp!YxiOk)K!M(e_-)b!l?S!T!!mY(JN4D1!E!8VT!*E#i2u z+VdWC)R&P=;G*~}NR*cK^;8EH9jcaQ9pc}ha^_a}o7mUcYPAP?sd$ByAu%@$Tsp6N-{0wuV&4=kJlGF$)hvNm=z+Ds%ba0960krWMB2eyLqZBmcXsa#DAa{@# zQyUDZYmxdV=rrSXjZ_9V(0bV7G>MaHr8Mw*Dg5TtcdwObz4z0yPk&T)UA?|gzuP2P zCGs4}VxF5{&H(eixg0bk#q;AnoQisA{}Xu`T5WIOiYb4;1%IJqGW#R+Iee|+OLb`t zY^Ft=NJp|@w51hFus=yIkqZ<)Q!j=ZB+Mm~1`T3j2T#-<>mX}4ht0)48}&wz%p8&3 zr+kGWgz`BKdlvte&zMe8E+ z0}b?f34Du0HXSaJ!DZQq9Hlak+=ZMR{;t#LFOhlX0Wsdqgud&H^S>Zw7LS!!Dc;NH zxV7Jn+V64gS3WjZOu~~A?e{kA_b%<1EsysabKLmlb2e(f$F*NhwB(j_kzY=8lMtW# z5Z2IU{R}q=7v!2m^NoTRb#A2ZfD$bSCEDFc+<8T&kjM`!gOT?z&&l;u=S_u2hGb0= zf2L$vreI~k%wXh|YT{Lw!+Te;)n%)gYGD36ABplR@ExmkS|idtaznj zZ^fR9tjb6wF~NGhjZ~fJGzg~-X5hJ7-CHppI|QYbX}Ft(yEL9_ez|fq?xw4qtHv5q znn&XLYBl%XbB3hm6kOX;zT7Y`Xf80v{5&p3o)8>?CmHI9f^W5cC6)!h#T@-_(t0QI z14u`a;-ALe2+|~^8AvOU?nhdJjx+y^bl%X^OSvLES1q&-J`^+~tr;Av8O9_eG` z->Z!LfeH;G@9pJ5#TnecrQJW)$HFR*ycBX}pJiNHkg>SjzD7u(HXaipySD?wV|e2a z+8djDiIYO*yBWC-rCU`=!fY)cQK&8H!Kwk{AxPh+`f0?xB#eQbuz#qfKOLC7cxR*P z5pNKw?qTGMSd}pHHk7W!Xjgk|eRfUr4C7ErMvLP`zxX7mzq-$Wl{+sx`(R%qxA(o< z-_vR6Pc0*k+rkY|lJv9Cnz4NTUiX5t*`Q{ixA9Pp2HDyBZok|``bXZ)XT0gQ2d9c- zWiE*c|G_=Auw!TpM;Z=rWLWT;k4zD_=%;;!ySP)b0lO%=pt zpr6ukckh+}BRf#4qq{FNOsKc1m$pH9`knrsu17tuh#!hyMHqRk`dUZ4j*+8-x8{fQ z19bH;qaAWcd8I&Cj1=|2cf8kte&gjMy)*N#8GG2xodO*E(Mn_5*-^m#Y_I7MBR38* z@)v_sG{{E90J_>ya&qwLhFICU-pq7eep}>v4dTJxKlaO=T)){z?4O1HsjXXRZ>{P* zHB|oz%;3D35U9o6PAzV_X5xy|rIZE^^Gdpx&a(?ZCxv3<9f*atrd?opH4n?h&NT%FnO|wpm%?-K^ZY;8WCtRyR_7A!RdR?2p&+ zEyS`}*+TT#w`n@aS7EhGxT<%0cMul8&k_c|RfOR8x6XHZw_D!n-DFC!`MGbi;&nbSZijL!+EMBphL8Y3Tek}NQb7LV7n_xPot58Xc+h!a zHM|mddOMzG-2?B0Q)#@aP4Vo6=XZ+}7L53ec)rbex93pip$UfsNq}uk+ebZbzf=zg zibXg4>h$h4jGk#&{oKLW(c0SvhV_X% zdy#|HLPveKHuf)L^~Q?@0TNxRd(*88O}z zub6G{1OP@Suf)2T+8t)BWhf18Dj%JScfVHQM`#L1A{Pn(M#iv1$yflM(4SIcRbYkYGVBpM6B*fPqAmBJBRC5vfub#^|aw{rz) zK?=tfP`&U0X73(JCtnz_h$btg zjmQ}d&^O@3XpD+ofvP|P-tc-00=EX*B-Wyns|WUYEe(|wUPu#Hz_ez0QFkL-Fn}@O ze@j)#+uD8*_9M2`je)&I?6-wLvEyf^uD&dT)VU5?j`9yQIO7HXX~7Ft<@zOJ6N4g-ajBncUaFsN_FyU1I*1HQJOF} z|0VZG4POS0;KiO0W~(Q0$_S?l^21tuPbQ*A}@rtT?giye0?N ztnaf3nGa6{+F^bNt4%34uvy9sECV^D(&hn&@x3lJa_33Wi?VcD6?pHwdIrpanzPB=-29}xE})-$AgdN zL(D$4XQXNs85_O2O6A3>2Ff*hC*p2tLwwB??QSpbEDZ^}=##f`P4j+jPaU}DVZ{cz zv9>x)JxuUB`Y>A@FJ{0;L)Rrv$n`2s{>~mX2UcO9TMqi>8tYeK+??!3d=YjYNba$Q zu|?^{Untv~n&7ieD;`_a)W)AkD{jJ`Qd%*$f{Q-5cyG7B?Y;c0$FpL?FQ|;C7N-_r zM_YS?i$3h(x*x<&A5+Gaj=+1m6I?WmvZhq7dqUZX(s*ErFK&(8^G#gEV{hGa^oH(| z*VZo@v2eSjtKHwSX`-R|(QD7Xs5_RE(4_w1>E63vE$MszfzJDGy#DqPJ@CZ_VKbF{ zSVujVq&i(>uu^09EkewNOA*XWuF=sGKHp||;(Qx>Ep}Kt&MTQ!`dx8vkj$j1cb;W- z>pC`@Mk$$lUQoCNbK2uqzMwFBkk5HRVQHSV#9PuHow}vnpxfRa7?z3Cq|>)^3GwYC;)~i7;&H!(nZ6|7 zHFbV|r`RB-hvBzLgOBDucm)^7{qAEWtqHwWgZ1niixj~UpHFr%xp@ljFgnOHm%_wS ztnI$NE6x=sh+9O5SSr34LCtq8Qf9unNJ%r5w0F7H{M~-FKItA=dt#_ zQJeE0Yd;rnf*rLpVyvS3Fp5Vf()D&q1F_I~gOfOUw&8Rd=d}er5|iuk{vq&}sLSY{ zV?Iry_Bgi~*I|GLZRji1W+M^t4PS-D{8u}Syg{6luWO}q)GU;K5_a7aVD(6+P)7WYR|EtRu{Ky9GCB_pP8K~0>8dQ_A|V=NwJ&t9V}UM_IPwA zd^06V zVcg@4%`%s;ds`g7@QA}#_GG1RuaptLAHN;G3+o*BUwE?e{tL7Oza95qc+~Mg+1APj zgmRSNx8s2ezjmy-u(fhc87;wY$C?YjaXeVIt@6RWv;@B$4_;XBc<92m%7-q{68v^N zv_lb`j$f8-ul%J@finDd{BrMo#SJ@@$xg?wE^M#-RT(YEZ^y5Ejl_C9>SCe)`(pIg zfZon9BhIur#r5D;c~Gw3T{jLkF0(I590eXv9)xCrp2$Hg#M1Be%4kiK#I#DukR}-o zO)`GScW0cRoWB)ORw)WIYpKg9xH<_x)y2%(+`fP);b_F!NPTw3BGzlR5?fOnV`JAG z+rVzbSjC+IDbaSkjOtSJGgw=79AjLSg%wmr)t=us@HteX4A|M;C7LtwR97Jxcdf02 z^^&jl9PZVNmH=a6u0Q-Q~eJi9jsD;s)c?VVYCxL=kT=T7&Ipr6L6AfCz8XSQt=rxo(iOh~M^mrOpR z*sI=%^6V_}sCX0gd`vrxRZnIpN5e9R=s!{mZ_{dK23-xMApYt@(`QPiIp8Lt<$=$z zKW)fAid})Dcp4X8j>wJ@nMu&+@9QAOPY^ZK8;S3Dj44vGy!8FCh|+RaF*h-mkHpGx z6kC%aUOHN_P~q=Q&wn=KAmR{@tl&@oW`!kiQn5D?3v*L@g%*e$9pxpAe4s(Q zdU_BJx9QN+bX~ZqJk|RO{KZ?Sw?2z~`%rm($LWbs*M$I_? z(MsmVto-`^&Tbw2hN<4wvQB?2!taN6h`+k}WZ-9W_J~&_63reAi5_@{Zil}F@`W+; zX1GASx+V{IPYzO@v_X9J;GF!gBV29qoIiy@r}LT`(8#5tju|z~O~Z9GXgqkVu3BtF zq!?SA7IyJ5i_EJBU ziE-kl%Gc_Qj;+DkgMP%|+~{YkcLr%36s0pJAJ3xg{n*Q-(h!r4!|-t+2Kn64%Bz1u z!FQ3v3cKJ)`JXxybl9=sg#2oE&Z!Th414NeJYqP&2@Y{6aon?P%_|*o`gae;xb%yL zKt8Rn7;WTs(VqVBikEVQ{5e9Z7a>|`sQ<4Jdt2y8C4^FW>lwp-W*uLhTFX^8 zDh1ACQHIg>gax`Q?h*fbkj5Jk`@-Q$K;U;+8irs5?u|&ph zYII!u2XnI4Wrl=`#fsfGp?FL?$Ck8jNk|JBWQN-f`xkB7lM5N5E0KJ4=FvYz8Qs+$ z#IDV`+9OmLWWC`!k4H)H8D2C-8R!|?R%Y6>2LZ*{HX8Q-^&ovOSzX#-UH6MpP|68w zXvt!5BMoa3hQw)-qo`^UZNEo)4%RPmxa6aL#!C0Hd{-E|AyfvN-z5k9jD_z1A;MR_ zgL-6g_m;Mn8d0_cJLiKv(%{N6JM#Mmy_JJKWrIdLC(aBS1*3g$8P}2q%XFdIT1M-i zd?o2El64R<1a{*!BH!^R4pG|cUn#GxsDX}trF3uUU44)BCPrr_=oF)mjs%P7P)7N% z=D(6Foq$imsOX%}1zMlbjw5&LQc%iYduU|ZP&@HyWu3NxZncSWTll5`L zwBLZpg~^=0I$^&KSJ@n2ort}Bc1>dRYD6`pVE>)UJFN-(y;t;3V=(b|iM5VEqmpf* z@?YcTL$Rmt47?vP?P^qtoalc`X(?+3ZI*1r(SR!07N#oO#?%J0Kuc~wy0GE(NL&Ea zA=U)Z?G7^{kESeOu9^}iR_hu*I+Dwdt#$`jV*RDX7(dNA(kYaab&Q5)nu(fju++Gj z)5I}5Oax(#b=}DQTt^;9r7u@WyHVH}>+4?(m=2(w`h>Tw>sFLgm<`-w#e8Fp+j45S z)m$|ru+=dMq-{qe#Y&H;gLO&#wDtNciM4AQzIu}22{R32;Qn-tzWW9lq0D;#bJ_cm zMnp@2GiDq7#eB0{vHDH5Wu+%0yOqgg`H_eBQ(a`BRvHPqka`f z;KGxLsXMz`<_XuT_5?9zxHV|EpVZDTV>_89gw}01Z-t?*Gfp__$HM^Pq-|w zQA+i~2X5uC-%NEyLMqAD z`8RfAsPCO|CWR?a_QH;_h)=@axAhXltgz4$W?+1+!IXpe4d=3Ph|Pq)vx#Fxrhv#_ z^wV`B+UcoEr%bXOvk7uY9(S8WNWM-C?NnwtU+yOeu_q?(mHuLib%8+)R`!HP$P{Zu5({F9mBIRqZD|;5$Ye^=+?Kuf^XRZ zEeeYfYwRsr$@ZZ;T0&Re)Ls^)=fOGHEzs=G_@75yKE2xRr~8z@mOjC}Q!bGyYeUVT zCk!gKq1KIV-RX0P9*o(aX>;hDkduqAi^y|`$f(`DpFsXe3 z_RKgjyW$+;9!KW4OCwzt_(o=Fy=4;_(OIGPyn@-sN}U9IePzvvey4m)G|Wo8!?#IK0+&_uxYe^xcvY z77lC%4ZQeXgudsh8&ULfKldb43kVa_&+W<>f}RKHNF=x1S#e29%ct~0>SpIl zqD_C#Cgu9NP09^OGc9V*&j;;8YYDZd`~6r8Y5S1Q7f_p$ePAJUyi6zr8h@NO17S1-U9lj<#zTW#aSg%TqtF-#7uqU$Dz zuMjrsb+g^2?&FHzhjc%&h0?tF%rs-RUm;~mn3?{v8~Z<8+h?i8*ri^v%0i}{;pAEtiuSLzZ_z8Q6L^7{ju z?7XOJ(b;r`iP24jm*40mQ`z&Bo)*=HxyFTlOnS#q&%chfZvyiSW+heA^BsuFn2Xuc z-{c{%ROz+OAKTG@7DL<`_D=^`MBg!3!5~hJCl(#{)usi~5d)I$g|sxNJE#(loHTH>xSiSAxM-5 zRAzb7r!&_Z=BYg?s%482eRuVsu!YGL{8YBEiV2e7?=@Q09!Av{rEXzn)gDasr#3Lq zWNCwq7ma`#e4oO^@O(QM!=qgJF`j?FPlB%w;W9qH-yEGEfT~0(){=KgUQQ&kOHpLO_@jrEN6k=I*A!7k6UmWCV z1VCm7PIvOSmvO=dHXlv*Qx~$SG z`cLorp>b)hAm`TNj3dirj}Ov_cn(xhEZkZFCm%gjTf$zQZKpHEHJ_!y$8CXCm>Op7 z$)Bk`e^EL39jR7t!j-cj`Ig+Z!OrDRe`?^HlZxjknNC=JjWjaiBS>U-sHE%5+%dM% zRwJbCX`D~NDjq#-D5UW{Z>V2m-}#$J0d)R8wCPPGg6qVah>^x}tHcQ$ z^fBGjpV`PsR_u9Z!_wdw!ZvUbhFZc`j-NFzv@d0wRw#mRTQM|q|8{BA&x-=_y+F(lgtTp4@Zy{CPRC0&oKS?W=H{tLEv zQehZ7zn(51cMN$Vv>LIvWd_j#JH6?WP2RW2)@8P((>T0E=V(cnA9p)Tx#DeIdi1^$*;STP&B#}JldSZt9Z8j9=UtZY&k^~OTG!{7U2z{oDBoyYF@v6X z=8CcLg=%8_La~I1m1{K=FJJ0ez~|@-48`uW8u#VXYR_tQpl6qYmimd=f^+Ru9x&-y z1|w9CIp{Z|l7yAx+CD1bbge{)q3EE0@{ zigI`acujN4bI&Sxy8F1!VlTld?JSEwCciO_K&BO^mp^OB3+5CSNwklOycy*gxWB4s zu|!ACVsADeLi)Vm6b*vcAa>zCOM@^1!U~8*D6wb|<`@p#kJBJ5fEY`0=<+;x zOsnx82`(*fN{Z5Ndm%P4tIm{Zu~|zc1=XE6CE~Y67mwfNyy4772c(pA@z25N!I%!mwf8`kLNM-#>=<=6w-f=-z5PtPZ!<_Oth-#iw z`hfyHlJ$YY@1bwgxD-V92S%XnLc314q!fNH1wI=e-P4etST_M@+FD4~#YiEdoN%s7 zWv}T8Vdy^&WP>%cilfCKd+3%r@8kB!w3@VoAb@}lY{1?B%cOHh?LU}y{U#?&r zbYEgch?z_|H5q(XaHhp|^qOKXMjLu_eY!L$gf=`tN8du7zFE_4E7H9jI8It8|0-8v z923JniRyqDw?7%QP)>Idk0A4$PF!57_UwX3Q1EHdZci-I>AuIp3ZF(SzoO^4)LitM z^N-RON`4j6o`1Hn(^9d2)7o;sM7_wj4q@Ln*h1I4?eW}Sk*5Xl7EYyo9AU2eI>N%Q zNP@#{)WL~L<9SI}Q%nc@2!`qK*h5d@p7LRS#Z7^OQP=8;!EF^h&XlORLTOk@+Y@dx z{D$uDEC|gj*GmafSefp}&T@RXEg`O?ee=Acb~gTfJf9TWE_IbAmfzAIKjNjpEDz`L zw8wEDNFJ<<9on4_9HEC;8fth&ENH`Cr%LIcV z*W>U|df+1jMSDw+MPkqCQ~Io|^l;?uz(*BCLaaZR>JdDqO2IP^=_3hwIepjDzS-j` zeHHI-Dt$RZu6il-A>bXJbWcKMx~G_?a(DYCx4ZONx?_{4-yQQb?i8)kR_O-!$RJ}Q zwuA6B5leh)<+!fU{01H|T-Q4+-;FwMnti&in-p__M4lWThJh0b%rL!GScoL0^v!XZYnfm#os;d=O{ zoQR(5%!}>XU_W`N{d%$FhxU^!sp;TOcRu`!7s{x2=7vy;_O_#($t_#qC_kx;^JDF? zq7wcCS6O9gS;e6S^1EEb>%{2z2TtP0=%5@zjIH)|tZkb2ZbJ+@cH)ojKK?s=p?ul6 zuSzr4J_cL4tb&_L{2tbFO*U0?V$d`5cM9}j~2X9DpdZo4fp<}4O9NdHt03Z->S7?Z^g24udH}Z zu~^c5LM1axDEsf)a9#a``TOrZM{vrbS?zi7N?kWuFNFP5r?l*ux;@BR7|R%}o$1*L z4zivqakxrLr?Jnp_x9fliWl!+x&K}cIaAHl!Y6rU|Gk1%dN$&pYB*~Qy&Cm#OWjNJ zS|Y^qNrbaBgL|jx+)nLY%%9g3*GMU{Dal+P7pjq1*~FT%uL_^T6)9Qabm@2}XG2O^sMsvKq-4Bj3YtZNYs3mLrYX+wXVO`zsgpJ5jpMPOz}m-#IQyi~ z!T#taTCTT@X^qvwXB&p+v@tG@~6^?&b%@v zcY$X)sq62Q&5h?IUVBQ^z~e|_`o^Y=@spz+SIL)vBF zn)j9`U=_Ts)gf6b(hau;n-Op8kTT*pS>|@SuWg}gb1H!jj48|#@XOgM1UyUiIJ}k8 zSC~E5V-{hBN{qrXb-(m%(TPqj_4FNQUC-d8P793*JB74h)Lll|;O^Bt(%E%$r8j_oT z!0uW;ViKc=YT}TFm2ES^hS+ySm}vWYV~;zF@2 zlOrMAfin6nA3eCUllyHm{FIJu;oIP^Jk;%ZqX>$`uBx1B?8?}=PHL>2!d zs#1rjVsVn#AuZQ&%@;t`?5@PODGEsOyZb4Jm+IDcPXrC$Y7m!O?u?X`kD6Z_pi)Eo;!nsC0}ohQQfrvq zZ36Ts8gzHd+z2hDoQ}bLI0W~SVSTsq79*b+g3BF};bV~D0<6u}K_h&QFq{8#bTgA5 zx+PaStIKHK3+rx5xEWF8F*>S1M{Pf5)0vc(Drb$s)l9CL-Sxp+!`k5ZH)Qe`kzCqG zYjVMX&Ha8cS8CC!zuj)J$t!jBPcOx-2SlT(Qh2mSVn)wA=QvOgB=(N__P=>2=bOS=>1%Zy9V9#+23*ZGVaJU zdiNLHeTlm!4YKLLPFOlbZt^y1dVIz=njVJDy9An^>i2DKYLn53!tB%d?wVoxnJLm% z=#CBk`9lzg+~m?mf3nOc70z?XTl@+5PSIW|8`{YWc|XqWg?1WwWv}GcDAalyuJLc7m_=71&6vk!3sOcnRVM4ZLVGp-qVqH-!W*1gCeFukA`Da~t0@(1-SR8(S z{C{|!ByipYO|m)G?WGbfvm0p+KkjjFt@NppgC~W9zX@kW(YFb7#RL45CZ#^V_#9?l zE{XOvk+AcJIB_ap8{IdCN%jq)Po)YeH+bCbo<+9OoL1Iu#vD8{#NZrahV+tQ9JFKwu&v>k z8|b=)HMe^I5y81y^i(v=SWKTv?nd|A=F0ZWYf60+k|F0bRmqI!67mXt;z!6*5#A&uJ*8>@GEakg< zMT{dFU4O?(dqJuty5_R-3UH)M;|R_$DYV_umd~_y)3u0R8r?;HfwRY)$yciOsv%J3f<@*9r|N1o{_=%JLe!qKgL@F=_Xa!}#CSyGGl8zf zH>8w3h!bG#M_afox~}0uM>V_o=t@C4XD~MZws21+e9M^mIF|LmyKH$0rCSPHhe}OD zrFWuqQ=w&54AwbRnugL}7kYV4bzU1%J2d$|#_7RRod_$@i~* zHq2=CT{l$UR;{#VsC4R3>9bntD?_E$q0*Yj!6>=w04R=0+sjv8)nrUpd>S%plP&BC zb+$a2yBxjlg@ zzT~$E}@<0a0aGg zt1I2ZuE1^{^(WZ~yqMprf;6J28Z@!pWJR^c9T)Ogo2o$*|C2<}vV*QR3BzWvDx~5+&wbDLV%)x8*Zt55O%wNJ#$Y~oya=a|2_#gF_gf0Ls%@)%%} z0n-|Tf!tx;xSl>e-f{?j4LFtkgJKj%YT4E;_5L9x%%Bm zIUrqlPwh#^H$CxP2GP*Es(=+%NNk6j+2D?Ap)EMsmX>SAezQ@)ew#~<)OE14FP$|y zrfFZE)8(Y(WaZ@K*fCr5^sSJv!*KttMl$)!esT{Hv@bEXF1=+5N_=B6i*WeXA;Ze= z^%C39iuZK8?%(D9=q%<~@82SWJ-4f$M-~|IE#q$bolnAvfV~(24VH_DFF4y**h=ZS zrB&@Yj+#ivBJNQCrOw)e#I_e-j48SN-ThnKubs6@AA0u!zNzoOA~7D*^Iqn~hj4=W zB5IkWwhomOPglea9&Fb78h0bHaOD#ORoP`Dbr4ui#vjJmn5z zoR72^sd_oSQ!td%Ynm!?-&wAHhy6zvnaQ~7sGlaExZa_80m|kfEkJ_bhB|N50mO?{ zoHLl~@#R%%b43yCDl*OHDe}HRzr`w@)JptX$?aMRUrAy7HVTujmE>zB#7#>+(`$Gt zw^EozHqTb?F0JIGRzkFrW%zD1Bk`*=JSjHMJKg??MP41WY(7RhY-!-hz+0@eVbx-c zN+M7Xvl+hApL)*!R(@SO%OTz)<~tAJD^~EGcZPPu|4DaeLfEUR(RNB}ycX!f`*GI! z0Vnl@`kb8RPbc^`WXzxbNek9RR9{UJ@4*P^hdnK&8+76r_?0rG<@kp6YWX*wn1>wl z%240xAJsh#7J;5$r>-SvRe)Ea}ECUPQVKbgYe`;_)iL(~`K)AXzNP!--7*3~}f z>Q}GWq)d%My1t@*boyTH6~;a~R92Cy#j;I>4qb*;Rk@dGt;%L=uoFf1buD7LHx`NV zBK(x*#wxUraX@baryn)Z*^i|-wL7{~?4wZ*bMbAex&H}UO?PCu>i-oirS*T07ybA@ z;1!B83sa@cf(-aPPr-we3fbob>gO}pFH{8AGn%KGLCm9e z5@USOUd**`5V$BQg9To;*Ug`e#d{dwH+~1UUC-&ko`VWKA2$KJ-R>XlZacOB2Tm8I z1;-YSEi&RaMH&}m+C5e#N=mo8rw94yT2EQ}DP2kXX<_7eoL*<>hE6L+Yog(aMbDID zmp(U7CV8V}PWMddwPB&hADdG?>-I1tp7J9a| z7iU{31R^AQHYp1lD8wJ!Tno9XBLx1<80^Vbj%g?7@qJ``MUIw*;lKNFdrZaYl!G`2 zF+Pa1xa}Li?}cq{Lkp#NdJyk9F&<$7(ktKG;rET`Ps|%ACqxH6#JG?iL{xYCCJRQo z`A4utafQbERK(xX*kwj8ykZixs2(R`{Jd!*Jn6xCRA!(aX4cO^3>1y7pNV+?zR+4h zS5)aaz4R+-=l1x9rh_vZn>vl8KO$ov+E*`1I>ck*THd*`5I4l z8hMZl*GReZoUS@I)2?IqAT#Mj@9XZV#cVsz@@Z{z473F2++YNEeRXRiSSYFpWrZ`P|s>4%r(R1ZLD_>MjzxT;^`R_J{ZVaRV zW<+t424esW;$_O01m*=YctbN{m$Y(Li}y$5EMmjR-NeP=$O7Ro-Uw%Y2k}&ONNUgH zLBy5@&GpyM+gfL^SHOzEH?otFA7f znlJW@<=ASr_EO}+swpVNPM-D#tlw&`HiFVDlw!Y2D>dQ_4qy8jN-Zcg50#p6szX;B zM(H?|T82t3IPsyc{c~imwi4gFa<8@$H&h#H2Ycoz7gnVJ)-?p{;*9tXeH}0)qSQZB z>gVF{h5FYbaRpa;?!p-a&0oc1wx%<-3CWB!5-AO794RpEpyxNR-bPej5>Mpa3S-&h zihWPv|0(a=VZ00n`~r(eThQ<#CfHO>@8NoRnsY zUdQ{H|9<&=cFsO~uf6x$YrodsXRWo%)8mDVt;x>gSLKNz?>c-5C7HDgAgnatkea6p>ka|PDT?2`Xd4`~`@4OhL-`JaB>Gbcra@fE1 zikz=zjPwmI$z%w-nu!@VlVU|F4hoU;u=U{Q`d{{MyPA24li^m23=Yys*f$w3K$41i z8ezYX&@PG3dG##pCOyG75W^p>38Y{rkn*;dwJn}fg=YCek;`~bQ zV?~*llrq}+omjt79@QV3ThXV{@6&VnCu*Zk>n*ckzlz@V#<#9=Nn}0DQw$!W??}Hg z;jOFkX_Lw(8rf{^e@5b@aqXgShk zLbDI`LMzE@-EQgwpoT2HytRiYGDfKJWfsBK?ojkFH7J)WcQLt!DDhZPK~Xh31zl_| zH|q4|$+BF%CFZmS*vs=(E)G_gC4C-!AGL$t$mL&iM&)x(Sw82IWq#$x%%3Sir1w$T za!BG#b;?i4@Q*%m4zrj2F_XSM)+pO7zrWnX&z! z-Awb2=^dl|`&@30GX?2$kbV-#v`v-%1i$@N(oDedh26G{rA7XdemVruZ65} zt+qYcS=ZFv5R1T zD>U_*sL%UI*G^#qbU2rmA005X9v!GK9v!HvdQ?bhf&|mX9m3CitN9djN)v}SB;qu8Dz ztcJfLxJ}dx8uTs>Dt5E&V+GmHL2q%8?b%a0!?mq6&s8P7>0@2{eI5cT$g5DW7 zS|lF)I&lkrwC3OE@ZzW(p8UHUHhfJEo}QlogE64a_y$?`iQee$=X$N8Es7t(S{w)a z$1%W$upk^7@fA7_@^e&r0=TZ)?ls-4Gh5go%C|g?{lrxlo6+xNGrw|ffZPjV&YmVo zRkxclouyqvm6=+5+IsA25qKHmAEbCW;wkhPLM6UJXW_(@w=7BQ z*;VyS@>WZ&@q}fcQEvUzsJCiNC#?HSOtartt^L%r-&X}oT6e>()^-h~YPo_Wmr7G- zN&sJ>avi=taV@O5oW_~Bs6q1z{-qtt{k>fS$$*aQQ)uEKJ00>~5+PgzUy8gC?OR)W zuycVOuid)ebj1t5G^V;9fJE@PgL7WuJfHe_%`3>g)c5dhNgp%KbRi3TZz?Pck*t5! z%ha2tutYKJsStlIsq&A$?TKSOGAkL%$REFi9tLU4+>4 zVr)mI6x*R8ev0mv$u2WuE*tdb2Bw!0*3$yEbh(og?{_&fxIy%jeU(##Z00=3lTNJJ z2dS(#FUkw*OrM(mWt({$QTo`>+LtGnPd3oXo*_)l6s_VHL4&g|HH_US5_aM88QM<1 z=XLjZ#QqrAos+Oj3S&2pIJjS9w*G6u+ioSs5bL{!xuAmP16t!icdR_rB|p<|5sIf=`X( z%l*B?`EZ3S%VzR-7+)TbFQ;k)H0LtLl%t<#-fhgr3iB_)Oze4S zCw|HpgS}=EgUtkyha~(+XO3jVCyoG{2_XK8;V!bOMUQg2A>jzCa8WIu2io8dI1A16_-buqz!6U>kshP+=5N*XPn zL4StA3wy>}Sl$Fd{b7rT>7LX@J0Hg_Ubq))WiB+Sa*c&YNvAjDZGfHqW8e#M9)$ZC za0^VsDoAEVK`w2F5arTp#GV6vg+KKrW8Sb}SM~cLHkHm5)i?`eo~J|F*<*YPUOH<; zn1|$|69mdd(a$L^y0}G4gj;+HZLv5*zZ_zD*Ii<++fXL%)`=Dp_k0ZbT&^<#R%4V| z%RDUp3&!nw6B@Vs`+0ecsF$m_HeR0%9xGjc{xHd8q2_i(-3DW7j^N|U{QqORQaopEa>50?SMT8WtvY3TZ84@ z`}#GogE28jaeAwPN3BmPW8P20euU-R>a^rWxhy$zoia_yxdh=ecOz0?>}brn!==#3 z<|Bvgz5VqGGG}kUHKEF-$i2;_oHNyVQK0B|~x>qOZnoQ=6^=X$t*gLA-DKq5k=Nf3_XzJ!1~ z3U+UzHD0$;a~)bdklM;s^efbvmMEtzH`=*fSa#{c=A-Uq{;j?NcLM(Z+uhsWhOd?} zp1;Ue=V*ZM*b#hjlbT9R@xV%xEkr%96<&5?-!*g?au`y+(M~1u<)HO{@-Wj}a6fT4 z;663!JaVl|P`NbiQe6m^?y2}G!tDuTT=YKG!YzU(*By}lat_znI&>WntqD`m-$znT z#kZDwhH%yprq-&VOyN`UMj;8O9yhh+aO~wFvdnR$^x7%1`=f9*_eSlMdQl|Q>7i#~ zv#S!eXmC%43l`0EPxaw`AXtou(_UF&UwIz%zT;Z*uglz3IQyV+$$fc06ZIxvz&I|h zfldO8m$W zNxqH&D(?pazk)>QOKz>2@l;RxRuxl8yk0}{bGo=Q8R+SLZ_;1}Ea=Ka|0Uesl2_t! z`$QU%j$afkCoBeZR2VuCP?UJx#x&CLqdZ%CT5;!CGRF6X(4-{{r;_yDs8h$`o`WQW z{x0-z?+hWSLUt~pBI~<5$&f7Na6i|gJT1K+4(ma|@?w9x4r`*}Sx|!P1|^V{ z6)mJeVJABz=TuAqHyF>}71u(A@L(64eyfv5YrYt0&0zg4Q9S|A^-_I0%Kk-2q^zJk z1B&XhMJ(MzT4-NBi27v1&T`267x6tu2xW{jFwccR(v3S9Qo!pDcz=NV0xZ3dgffMebym zV$Y}D*qIe7`q_qqxUGQ290^?a#a`cfYg9nxJ6;-l^3L9GbhBzaPqM9-p^KimMklH z^q%#tMY&g88L+T{wLCZuybbGXKpSp?qjPxTy&i*~thbS^pBMav<%P?VjaYp=2mFP` zd4>V#+tB|rI0qv;sic2=9(u{Mk>js|vkbE<|Kf9Q4|xv;wFo&7WK+9@S@#+QZcfPi z^WgYApDWjpR~ho|4CW&KDa5NTE96?C6BaxO=5fGWcV!~(pu$xAc_1}l_Xg4eq< z$}=k_Te2(}h76S49>jP8lp~leOu@4?I2r#8s~O+F2pl^CsQrPvl4C%oPx$B zoCE&7aPPo*;idpCv1iPZF%>`RqFdACv&%D<;0Zec8rHcqvr(&e12PGdWvRn>)Y$dN@9 zX)G7^$#Cm#wy*?uC=PhPH^dH4?>$X2R^mt=aFbtwS&7>{yIZ!4az8)B?YX7I30eD) z*FKm~MqwL6iF4?=FUV)AL0{Od8Ze08`I?8K0k;A7hfWdgdT@02MV|rfMQuAgc4@6U z&}9hox2p%p2g_}Yd8!8*DlN$2_Q9ls*uM_WwXl5VIoeTQ76^)o@c+ECrnkk`6IG*ErxE zkJ@+j5_djMT$7V+*8^4n1L> zlW=`MNEqfJ_5^OU9KUKN#$h*dIjFnk6k<4@?w8^winq$hRx#XVlbAXAP#o6cE^q@= zk?y&GRiIoq;r@pUy%~n|bDZXg`&% ziHGl@0B#q^NH%=srZu+%X9p4oGQogT?CE!0TlH%h{vE$gGT7WShF731X&nC$Pns8> z!t*saei!C8tfLipF58VeJ@IV8vkT8p;Ns!WhU`&XD$g&RTVqCG6aTUz7(?1*%#H}|mbiu)MS4!if^$7#D* z!XGgIQoh6QC&KSqSgv|j)Lm1ali$nD8IyurW$t-Fcg?vv4fpKy=qIa7cHoAI#G_+< zTsf>DFY~%(C32w?VbI%$je-GK#g+xQYZ*eo`%`FZCwFIxRR03E50Fi4tQXm(PFUes z6gP$C9_c%u3?uuYDUj<*gq?vp<9H)!R2CKmU@vMPaZr}ph5QC{xd0-)yaEt=D}OIlGVvubt%S=U5S=z%iTtW^_25&-6vH}eBUj%Ozf*Ojx)vym)&tfndM#g zo9RZVJGCiHXqmm^VE!}7GQoky$>7wHQF;BGbW1r$2 zEEH?VG79FV#j2l^mK(;m>rveVq2UaDD_GL~MnA8_HeqOA{(J zaYq6}-YNbE2jc^i9)>QcUKxn%-vw!+%gIXE9P03-ZP}$Ox{|y_c1Lc>n$-P=Uk(g; z;sc2VC70wSED$%izcl7dUJAphc85o~Wq)bW6~z`=VO~kmC1uh6%W(=eZF2YfMNIS7 zMW$bXzT$c4G33r>kQ^49hET2$ygY^DeB8@sE_OYplbzZMxqpAh17u4|&ha}1HshQV zu!fJ_vfj|2sZK1X$n%qqvNWm%@b_`kx&uRlnz;Bt`dHGBREhOaq8@RmhwS7oM&k^Nl}6ul6`wimEk(bPVOybS6=Bz7RVYX^jnL5;eH!dy*Rjc1?N4N-e)==1FL0oRQs; zUGh%qmK&{3uuOy{IN-Qw65u8P$Lx|nq@v9i-|C)^(G}xX3hvMGW&ZQx(icu1xhzv# zFUQNc!g0cWw^6w0P8ObWHwZ5G7UBDD>Me`iFZRpga!Y2q3k4N&xcE8ot-c<(*Ho|l z95OSJ{xzl5)%?ADwb@i}ZEoOe941Gb9j^^myTfeb*O{!1=K3*e7KU4EwXbb5H?6e+ zelsr=SJad)T{B*FiV%R)Y~oRL&D=4P=5)ioNKn^2%XEkb3*V5Ev0;z=JvWn7@k-C+SM z+HauK%4U08Ym3ccuIEde`5N;^e$JdZVFI+-Ob!eSYVYAp%#P)4rux$1eixB?d1>{{ z$)rI|?fQ4ghP&&xjdB_hH+81vHC1JNsW_5H_oA|9v{=44iSRW-N!17y=xuoJ2t%#C zPaF&qpxxTgj2Xvf=Bb|}#!mCW=*||If0fB*YT{Rj1279iV^qH!6`jv7HLb@)g8?Y! zY`3(uHP-XBW`0)2$aoqabc@Z+z^!h$>n-H7+DCxI`V$3j9%qsGN%gndFjq)Oj>fRY zT;~8rOHHjHSxs9j^#Yn1mNhqS=4;?^*@5xw7#)eysU1f$3fCgsJO#CzQB#_k&2~HCH@Y6-NeJDT zYGCK7r}4FID73cCA-#qB>qtteJL{h)hS}L*H#c6Rg0i;+Oj5kkRUq7MUR27qm&nBAv@^0!+gzde!Mz2mtR_Iu3uJzUQbhz0gG89 z+AlX(trkOQ+FHo7rRJukree!sF>7*(*M#a&_#h; z9(GX(4&i>VbUcgTKFeaNzruYC=Yo3`?hxDoxL?9W1I7n<9?v4U%Lp5W{}cS9;ic}x z=rMZ^;CIe^RJWsK{>J|b9P2soVb8@iZ>(C-Keqp_{af#N;)8!pe_`kI%G2DMZAq^` zIBV*OAH=P6-21w1sQb?y&qaT<$I-v%_;Kr=^FLbr`d4rL?0CYvzl@vOl6Nux`3D?J zK04HO&)J6u?yFvY`_87fW*z+fG0JmH!e zz3Yz;&W*p;x_5oz#N+!@RE_f|S8Os&>v^qf&dYJ>3zj^8x^mfnKC|X(%M8okw*JJ? zQg@(zeEaVoP|4nY+#h;<`{l-}{oZ{8uU~23_!dYY{^;C$0UQtcHz(}1&uU?+GPoUZ z2jEu1ZG`KA+X9)888c=?P63Q;SDN8A!i|L+Sj1E@cm@lZDhki#8hlrP3n4ro&jPpw zaCg9!!_5T@z95M03AyFHNyuGEn1%g`5&p3e{)!0y(g=TLgnwCtA2*A!5PlSt8WFxE z!XF8f77<<^;g5vjC>-)XNhEzve#izT0eO)?kQXBVBnl7v#d13&crky-5fKbeFyZhl z@`uB7BmGoZxUAU}UM1x-kNn|s7mz=kHWE(?9!`rB{~PczjAtSFzXnfmVl|uXdSVO1>zuR zt@z_)az(UKCDwub2;BQ4junlOvyN2E4s#)J1zDz!2PQLy4moUlh|O!}nBfA)8b6X% zS(}N^H`{D2wuRW%w}A5|{+e%YYpONdW>7g)9ikcKPi0eo*oxY@0 z5DTVoe3K2I6A4yZ(viBRKe-bTkhV5X#v2r<^pW`KZMw@dt8EdiKpo5S$H zrqN_;z&a}O@00*sv$d(Mi8r;jHd^b%U2;STBMe1xMErEI^lZMq#cUUkOmJKUdeX5I z-->lt%3v636vsCvf=el`Ub=RrzG|(=Y}&A)vJq>jz+ zqGyDe{e@CD{3h7-ZB4EJASklM?D0+63N1E_lwmSQ^lU6^k=;+)AyHF^MdKL(OZx|D z0>DEYhhfV6eGkM=(P3@?7r&XWvzWmSjnpoDLP9iZY#RwK9+iQ;5hoECndYWe$7TYP zwm~DvQ7;+p_z?)A6Y>r#`qfC9(OHkeEn=Gy?x<8Wwczl0`d@0ZvbEks#}}ip56^Dl zj3UNk%}sfWL(+jgy*LMn<=#&JBlzE(=KoLwJKwU7Z)rq#<_Y5w!r#a}lGqXj-)`rrtfG4z}#5bSx?4J*QFX9)G#s5EE@EnEsHcB)lQjq+M s5#Pdz0Po{l{581Wz|s3Z^Y;>mJrnlg*E7MdZ^E8@vsA_-2&Z!X2V?rPfB*mh delta 24704 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 diff --git a/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed_lib.json b/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed_lib.json index 99c40b08986..26f63ad4a30 100644 --- a/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed_lib.json +++ b/features/FEATURE_BOOTLOADER/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/mbed_lib.json @@ -2,8 +2,8 @@ "name": "bootloader_DISCO_L475VG_IOT01A", "target_overrides": { "*": { - "target.app_offset": "0x9800", - "target.header_offset": "0x9000", + "target.app_offset": "0x10400", + "target.header_offset": "0x10000", "target.bootloader_img": "mbed-bootloader-internal_dfb7cc.bin" } } From 837e86df28a1ef598918f112800d9219b2f298b1 Mon Sep 17 00:00:00 2001 From: Lin Gao Date: Wed, 30 Jan 2019 15:13:04 -0600 Subject: [PATCH 3/3] Updated linker script for IAR and ARM to increase heap size by moving BSS to the 32K ram --- .../device/TOOLCHAIN_ARM_STD/stm32l475xx.sct | 6 +++--- .../TARGET_STM32L475xG/device/TOOLCHAIN_IAR/stm32l475xx.icf | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_ARM_STD/stm32l475xx.sct b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_ARM_STD/stm32l475xx.sct index 6784b9754e5..72d7a20fa80 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_ARM_STD/stm32l475xx.sct +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_ARM_STD/stm32l475xx.sct @@ -60,11 +60,11 @@ LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region RW_m_crash_data MBED_CRASH_REPORT_RAM_START EMPTY MBED_CRASH_REPORT_RAM_SIZE { ; RW data } RW_IRAM1 MBED_RAM0_START MBED_RAM0_SIZE-Stack_Size { ; RW data 96k L4-SRAM1 - .ANY (+RW +ZI) + .ANY (+RW, +Last) } ; Total: 98 vectors = 392 bytes (0x188) to be reserved in RAM - RW_IRAM2 (0x10000000+0x188) (0x08000-0x188) { ; RW data 32k L4-ECC-SRAM2 retained in standby - .ANY (+RW +ZI) + RW_IRAM2 (0x10000000+0x188) (0x08000-0x188) { ; ZI data 32k L4-ECC-SRAM2 + .ANY (+ZI) } ARM_LIB_STACK (MBED_RAM0_START+MBED_RAM0_SIZE) EMPTY -Stack_Size { ; stack } diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_IAR/stm32l475xx.icf b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_IAR/stm32l475xx.icf index 864e944e7ba..0ea0b53a057 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_IAR/stm32l475xx.icf +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_IAR/stm32l475xx.icf @@ -33,7 +33,7 @@ if (!isdefinedsymbol(MBED_BOOT_STACK_SIZE)) { } define symbol __size_cstack__ = MBED_BOOT_STACK_SIZE; -define symbol __size_heap__ = 0x10000; +define symbol __size_heap__ = 0x17000; define block CSTACK with alignment = 8, size = __size_cstack__ { }; define block HEAP with alignment = 8, size = __size_heap__ { }; @@ -44,4 +44,4 @@ place at address mem:__intvec_start__ { readonly section .intvec }; place in ROM_region { readonly }; place in SRAM1_region { readwrite, block HEAP }; -place in SRAM2_region { block CSTACK }; +place in SRAM2_region { first block CSTACK, zeroinit };