From 6f896b6fe749481f8a6d9d96e0b7730545355797 Mon Sep 17 00:00:00 2001 From: CNLohr Date: Fri, 5 May 2023 07:18:53 -0400 Subject: [PATCH] Ok! Fix Link-E --- minichlink/microgdbstub.h | 4 +--- minichlink/minichlink.c | 41 ++++++++++++++++++-------------- minichlink/minichlink.exe | Bin 79872 -> 79872 bytes minichlink/minichlink.h | 4 +++- minichlink/pgm-esp32s2-ch32xx.c | 2 +- minichlink/pgm-wch-linke.c | 18 +++++++------- 6 files changed, 38 insertions(+), 31 deletions(-) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index b94c8c59..b55cfea3 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -24,8 +24,6 @@ void RVNetPoll(void * dev ); int RVSendGDBHaltReason( void * dev ); void RVNetConnect( void * dev ); -int RVSendGDBHaltReason( void * dev ); -void RVNetPoll(void * dev ); int RVReadCPURegister( void * dev, int regno, uint32_t * regret ); void RVDebugExec( void * dev, int halt_reset_or_resume ); int RVReadMem( void * dev, uint32_t memaddy, uint8_t * payload, int len ); @@ -274,7 +272,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) { // Request a list of actions supported by the ‘vCont’ packet. // We don't support vCont - SendReplyFull( "vCont;s;c;t;" ); //no ;s maybe? + SendReplyFull( "vCont;;c;;" ); //no ;s or ;t because we don't implement them. } else { diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index 158f375a..d64b844c 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -589,7 +589,7 @@ static int DefaultWaitForFlash( void * dev ) return 0; } -static int DefaultWaitForDoneOp( void * dev ) +static int DefaultWaitForDoneOp( void * dev, int ignore ) { int r; uint32_t rrv; @@ -601,7 +601,7 @@ static int DefaultWaitForDoneOp( void * dev ) while( rrv & (1<<12) ); if( (rrv >> 8 ) & 7 ) { - fprintf( stderr, "Fault writing memory (DMABSTRACTS = %08x)\n", rrv ); + if( !ignore ) fprintf( stderr, "Fault writing memory (DMABSTRACTS = %08x)\n", rrv ); MCF.WriteReg32( dev, DMABSTRACTCS, 0x00000700 ); return -9; } @@ -697,7 +697,7 @@ static int DefaultWriteHalfWord( void * dev, uint32_t address_to_write, uint16_t MCF.WriteReg32( dev, DMDATA0, data ); MCF.WriteReg32( dev, DMCOMMAND, 0x00271008 ); // Copy data to x8, and execute program. - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); iss->currentstateval = -1; @@ -723,7 +723,7 @@ static int DefaultReadHalfWord( void * dev, uint32_t address_to_write, uint16_t MCF.WriteReg32( dev, DMCOMMAND, 0x00241000 ); // Only execute. MCF.WriteReg32( dev, DMCOMMAND, 0x00221008 ); // Read x8 into DATA0. - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); iss->currentstateval = -1; uint32_t rr; @@ -753,7 +753,7 @@ static int DefaultWriteByte( void * dev, uint32_t address_to_write, uint8_t data MCF.WriteReg32( dev, DMDATA0, data ); MCF.WriteReg32( dev, DMCOMMAND, 0x00271008 ); // Copy data to x8, and execute program. - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); iss->currentstateval = -1; return ret; } @@ -777,7 +777,7 @@ static int DefaultReadByte( void * dev, uint32_t address_to_write, uint8_t * dat MCF.WriteReg32( dev, DMCOMMAND, 0x00241000 ); // Only execute. MCF.WriteReg32( dev, DMCOMMAND, 0x00221008 ); // Read x8 into DATA0. - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); iss->currentstateval = -1; uint32_t rr; @@ -850,7 +850,7 @@ static int DefaultWriteWord( void * dev, uint32_t address_to_write, uint32_t dat iss->currentstateval = address_to_write; if( is_flash ) - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); } else { @@ -865,11 +865,11 @@ static int DefaultWriteWord( void * dev, uint32_t address_to_write, uint32_t dat { // XXX TODO: This likely can be a very short delay. // XXX POSSIBLE OPTIMIZATION REINVESTIGATE. - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); } else { - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); } } @@ -1101,13 +1101,15 @@ static int DefaultReadWord( void * dev, uint32_t address_to_read, uint32_t * dat iss->statetag = STTAG( "RDSQ" ); iss->currentstateval = address_to_read; - r |= MCF.WaitForDoneOp( dev ); + r |= MCF.WaitForDoneOp( dev, 0 ); } if( iss->autoincrement ) iss->currentstateval += 4; r |= MCF.ReadReg32( dev, DMDATA0, data ); + if( iss->currentstateval == iss->ram_base + iss->ram_size ) + MCF.WaitForDoneOp( dev, 1 ); // Ignore any post-errors. return r; } @@ -1234,6 +1236,7 @@ int DefaultReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t r } } } + MCF.WaitForDoneOp( dev, 0 ); return 0; } @@ -1514,22 +1517,22 @@ int DefaultConfigureNRSTAsGPIO( void * dev, int one_if_yes_gpio ) } ctlr |= CR_OPTER_Set | CR_STRT_Set; // OBER MCF.WriteWord( dev, 0x40022010, ctlr ); // FLASH->CTLR = 0x40022010 - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); ret |= MCF.WaitForFlash( dev ); MCF.WriteHalfWord( dev, (intptr_t)&OB->RDPR, RDP_Key ); ctlr &=~CR_OPTER_Reset; MCF.WriteWord( dev, 0x40022010, ctlr ); // FLASH->CTLR = 0x40022010 - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); ret |= MCF.WaitForFlash( dev ); ctlr |= CR_OPTPG_Set; MCF.WriteWord( dev, 0x40022010, ctlr ); // FLASH->CTLR = 0x40022010 - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); ret |= MCF.WaitForFlash( dev ); ctlr &=~CR_OPTPG_Reset; MCF.WriteWord( dev, 0x40022010, ctlr ); // FLASH->CTLR = 0x40022010 - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); ret |= MCF.WaitForFlash( dev ); @@ -1541,14 +1544,14 @@ int DefaultConfigureNRSTAsGPIO( void * dev, int one_if_yes_gpio ) } ctlr |= CR_OPTPG_Set; //OBPG MCF.WriteWord( dev, 0x40022010, ctlr ); // FLASH->CTLR = 0x40022010 - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); ret |= MCF.WaitForFlash( dev ); uint32_t config = OB_IWDG_HW | OB_STOP_NoRST | OB_STDBY_NoRST | (one_if_yes_gpio?OB_RST_NoEN:OB_RST_EN_DT1ms) | (uint16_t)0xE0; printf( "Config (%08x): %08x\n", (intptr_t)&OB->USER, config ); MCF.WriteHalfWord( dev, (intptr_t)&OB->USER, config ); - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); ret |= MCF.WaitForFlash( dev ); ctlr &= CR_OPTPG_Reset; @@ -1579,7 +1582,7 @@ int DefaultConfigureNRSTAsGPIO( void * dev, int one_if_yes_gpio ) csw |= 1<<5;//OBER; MCF.WriteWord( dev, 0x40022010, csw ); // FLASH->CTLR = 0x40022010 MCF.WriteHalfWord( dev, 0x1FFFF802, 0xffff ); - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); ret |= MCF.WaitForFlash( dev ); MCF.ReadWord( dev, 0x40022010, &csw ); // FLASH->CTLR = 0x40022010 @@ -1604,7 +1607,7 @@ int DefaultConfigureNRSTAsGPIO( void * dev, int one_if_yes_gpio ) csw |= (one_if_yes_gpio?0b00:0b11)<<(3+8); printf( "CSW writing: %08x\n", csw ); MCF.WriteHalfWord( dev, 0x1FFFF802, csw ); - ret |= MCF.WaitForDoneOp( dev ); + ret |= MCF.WaitForDoneOp( dev, 0 ); ret |= MCF.WaitForFlash( dev ); } @@ -1710,6 +1713,8 @@ int SetupAutomaticHighLevelFunctions( void * dev ) MCF.VoidHighLevelState = DefaultVoidHighLevelState; struct InternalState * iss = calloc( 1, sizeof( struct InternalState ) ); + iss->ram_base = 0x20000000; + iss->ram_size = 2048; ((struct ProgrammerStructBase*)dev)->internal = iss; return 0; diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index 5def6b948b17d3beef6e513ac9d7a75364cbd4cd..bbf21f1713659adb1607a37fd96274ece88cc575 100644 GIT binary patch delta 17846 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 K<#py4@&5zEf{xDs delta 17678 zcmcIsd3;P~+dk*WkdQG!CJR|6$smcW2nj-l2@|3cg4ijg)&`TJmI;y8F-D`07u9NM zwPx9k4(_R+@ zj^{YeV%Ky*v^J7dKeCgV+yeT1*PQ1>?ZI9=XXgq^t$hv(Nat)(ia%=)k_Y`JB(k>@ zy<0mJ8&R0II6>1?w>2|>uC0++`iY&@K zVR(14(H!g!`O@QsNHuEgxG|>D<+|WJM5snnl{A9^6^$t$XE4%K=gBoJuf71!VwrOk zWQCIpE%~>?(d`AS*gcqkj$LyP6fPVpy6?V>_b%}zf8upXe=vy}0_1u2YSSQr@5VlE z8s2S+A~h8^TIOIWMjxM3(h}%tS48y~Irx#IP34T0PU+Wy*OOIXN#$ z-L0!SpTt*&VVXh)2KxWqMKUrrLM#)gf_Vo&>Q&LL$BZ)j)(=_0VG z2NtRwrK{+|bGe@JQc|vGZbtQwY?aoKvH>zv@fx?~WpWS7y|5gzrHi@2<{_C@cSxKQ z|CFSoG`c9I2UNocLluItG=kmIMox`Ef>hBd_mAu$5P|~98vba&Ej)z1^2Aa%Bs~cuNi7idd|(-ktVkvZAtb$> z1a?gicwncRKO2Rq&dDx-lHN;pk!NyCk;k%}+2hVA^DjvAI~%6!V5>lMX-~PLavN-W zC`nJ}`YvqD;w*0rtP+i@KC2-#71wr~?E59i#3gRv6^*G`CA|S95G(SRcym^_{Jw5( z1I4Pk<{Q$P7dQ_V>=h-n?#u>yg|xiiiO0%QuZ4eQd0zhfIkwTu(C$Mh(;aKtr= z#8q2lDxQ?|FS9DI4*W>w*&?`AH>k~aw*z$v!pWV`yb~MIBCy?W9ZB7>>zay38>yVoKpITIRWT~8_LlU=efeoAVIn?XpC^jloA55?a;Q)Ld8 z*|L>wK?6;=Z2g=|#-(5kdCD@%$yA)jLEr^}+~AZ`O>~3IKZ*bMqQ2#laW$B6U&DU z!J2Eqn0mqrTlw*yvmLEMdvACr%a52b|pZpO!>J!Z`V88hI zx0(XI+Ro3L)SbO# zHL~AX6u_Z>;VUXfnbR9vM0iaED!UL8=g|jr%)D+oNKF)f3Byv-k8^o@!e+D%@G3ha zJ20sZ4zmrdgKa-YQ1xz?a1SJ$Fwr9|kf@+kSFj6y>{&G7wa-!p(a3-dtM03YPNXEm zpme5jT6~jQhMyuqgvE{?%g)&Yaqc)6A z>RlgHLazRs;qvIV*saDWUCB?Lb8g%}$u;3PYZrB_PlRVWP&xG1zf_!$hI0%v7}dEM z2sf0eggoPLkS;e3Hw`llHDwK@+?U>3f&5J36*KD*kjcNnRtJQ(T!19vNz8s9HK#&$ zEFghj%pL@cYV%@yc_`yDr7TbORYt6A7%?;3GbzZI&tfkJ2J@ZS`+)=aM0PhYJ|?Du za=3=tqp0Vup_SUBX{z_)&SFthLoF{-l3rw)L4NKz?Jy$knk{U0&~W}CI~~-f^^a}; zL%v_LCqaIEIr9xp;*mNyn4ijK2m85aAOUXz1E#TW)A(>FO-IQjhzkd#$REL z4gCbqwrr507k`MoYUu60IZVy?x?zsTIz(t(t!G&wZQY%6EO#bb8e(+csYFa{S4i8| zuPPDmmDrWiq?1y)X+>YDx;xsO-497=lMsp%YLl$g!2@YW3$HtU7(?0M&>{Q<_I_yh zmiCaR4wEmj-$T3eM_6oFkeBY5T>S4ZE5&cd#)Mg;zZ#0$UD9Y{xb*{dJjufer%(A% z=FpFUdHg+$E@$Ny_9V>DqnDiiy7MCzZ1neNr^Z$>lhJ>mPK{05!qKAYfg4`qBQzIH z#k3cp@&3TBkCExL)LFQx7C1tX#TTkYJGRX@$d((76`&YrXiS{5y5;?;zw?u)kW{z4 zhZ37jvE1gk2|xEM*=Z&~0IM~%^4s@h`BFtrpx7URW7v}e*w@K_y{XD=vf_Geg8Uz3 z#c3tM#ag-kCs|&m$kS@&zuuPRNs636$$07=SstOt<7?&G8d)Bq$Xf*4TnRe=EGu|L z;Zd7luj1%okX+Ey040N~PTBsTA}4=}e1%eh7K$JLT6t@w0^}GiG1cYArt$nub~Hk9 z6z@`K3~EUg`IcJwc%@0#DDqlIntqS#`yqEqfqwWymZvH91d9CB?<60mNm3L$0$qw# zN{wHK041%H=g0{(s(eqaeU(zsEfB~TCwWV8e!q#vVIwxSy`QZUR=)b%o+G;W3eKjE zw%Y;nx{B3P(tjQB@4MqEmrU96o;z-j)+{+TC28Ov%`6?$oI+F=Z@obgqO)AyAHn;zRM6^9PI<(%0tpc0>Jf zRga8qN)c`K3@nc1*y|hzKburL4zp9PNp?Lm=oh>4ap@Bq>c_b9aq0c)=`9YcF-~lJ z%p%@*Ca{O$Azco%p=#YJL3VU=#6E;>m-O2q*6sK1X%VZPx2v)FJ;<-ppDm!3IfOsgWm<0<9j>lG%snn{r17i?gdr8#I=-d} zqCSYGBiBUPZ~Q%s_$Y`Zy?_@=x|$`T3=i3qD5Lhz&#~jq#w`Q>Hx+G&((rr@dn>v% zu4MiQ5_7@}4?K%*Qqn zUs}6c#KPKQAAv{C8O9tsd(W_l=h4X(*aA72ril+N;tZn!m6+kYj1?ySQvB)E_|syR zv2F+Z?J{RW`=lEUNa_3tRya<=2r)AfhNF;|v2Q7vrjs3%&X?u&3clqr_0W}LZPDIC z66XXM<)c*I7JFdp{Ww+yDP43KK1F#iEOQp%vY^R7B~>qGpT|bqW~$wTa3m#jKTgq|!$N1B%fS+`SHkaJl z)7%Si?LwcSI}CK9$i+C;PP@d8#vAx|SXI2{avUtPs<2OGm8O)QNsO&2SE{}9ds zusNlP*;qBoEn;taJ3oy4@SY8J6X#n9y+Cv2zVD4@(R5HK28rf|ytDO=16`p|Dqp00 zH0hlIYJ!wmJL*|s$C<*ER3>%w!MV(*(^Mhw6SlNdsKBSP_d0dpkF$%NBKV)#pPl?| zr7f^(6`Zy=JH%~pues+#wJ@+=82r>77@Uh+!PSewL`RxcnEhxX?SG+mb? zA?$O>70$;vZ7$Cwy*;ouX&m~qWOf-Q?~n=U<7K_Jw~Yi2{SlYJOD+Q-9B4xo{Xv(0 zuuFdjO$)uC==ZwxkuE(RSV;f9m+b!omtMA~0_;)rwquIHM#X?M8x+kBMX|<}vW(&w zVvFF_q3G-`-6mBx9=h3zuE3>Rpz6%f4OMh`F5OTs+(XDIp7ym#igLC~8LuYvJgL!p zvEqbX`nS=VG^Mgq=|F5Yrr>6f&tB>>Ug&6MUw1L_U$CIA*6zb7F zUUc1u6Y&vE9{n*{#}u8Rq0T`%VR8!FkQ6PvaF$gh4G0|Ele|qRI zFjDaT&SJY=6{aM!Cf(yAlatA?5e=UF2a+|UBn5pS=~p-9x#gwSmKJ+6izCZuk@RcX zgzkaDI0{(3;8fD@WP6fB{jPVzz`rC8F~Z2VCR4ndE>=tWKHXVOvYlVe=JlM= zY-f_}qBS+bKYNCg`(8=z!{3)%_!l;?*HG=F_v+rpK4c&FO7+|hiE_6cb>fqhCpx()Jbo!Zhhu>-rl18^ySb8l@}HF*@_41PHb#yPmG35 zslEAV{EcSXzIy%o12{mya=I14`GAqoRYg2gB6|LzXxAdG^2ko zFSOXm90O84&b%(S;oL*)s{s+6@?z16nsyS$VIbrxZxE7xnPM{z=OBy`=X@-A)p#Sr z1P|;L%etl~U`d;qo@Dzd2IFX=Hvb9jrt}1ar`^ezD7_{9La3zD+-^$S=+9x6n~E#( z$bbrz;XFfrKc(ODCTh({F6jp&L42vG>4F$`&zdgEuLKjdZDsWUsKsM=7CKh@qBP$f zPT_7%35y=+AJF(u`OG7sJuDM1r90A%QD(b$A(~;;3HI#3q_%q=Kx5bRr(3-}B^yQq z9iD|a7j1Zi-#cIm>R_b<6MTomQuHju5?>*@yTp<-l?sxQLelYf?}(N$=kpyXJ7Ip-c4 zl1q;uG(Xw;4@h-uOO>~AELsV#ma}n#d_3C2C2GE;m@OF;A`JYKZGrGdSVK6w zn3WC+(|eTH{fL7*jpPH>zu1F89rR;nQLL4e>@y7O0?U=neCckBy#Ah*{qC+ z;Gs0Y?I}2wpT&xqYfwA#SH)%<+n*8M@rV*BJpfZwYA^QIn!Y%YM2RPt{zNNTcg=uD zJZEhzYWe_^6812!OrOrLVaul124@EhEHS}OJGlC`MMVkEPo4)6dhtu_~yBlx7S1XI8O)Hq4&_sW}^|^-v0q}8@$yoAN}rDqn(^A6y`R`*H{r1>>A-URyx?1 zuV&W<$M~15aTRvl7`0o(t2lq0XTd|FJTqT&tw3}3vEf5P-7g~#oLJ7Wr9)DKu2Ncu zK5!oZ&2Vbi1RhancN;SX}qnTDeNE=$S^6AF*8u~}iB(~r=*DE1*o zbSZOWbqRd@Dw-&lE=^8%oI}(j*L57ZDm34)s;toFF~}QFj_m|4Ke_Ea<~4M&&~-0+ zb!eb4e=qxJXt*uD2z_u8_i+qZPc%p*;?;lA2ISBiNcTaVt~KdyD7pmFt*+CxC*27} z7fiZ2b-FgB+o9-Ml5SY7u8p=iDIJQ^jg;M>#MV4)by3c+b-ZBRQ{ikGq z_G?C9Yju|6EwN@OJY4+<*OtBm@x;bs({*TXAs+vg^Ih40!hLphWMKSvkU1A9Iet$3 z7G53-E#fU4X-%W)L_4NDKl!kT{-AA6Q^mBSf`pLUEP7OH!=2wS$S&qRGUm3%EQ+eo zd<_9jcHBwKqUI`_GAf8KVlR&hvoUD$?-(2zylI7}o2bu6yc$Cg6G1Z%Jozsy)AJ(p zA1%(sqA>;%4=Agz;*Z&p!oyo8WEeRk0dT?PKMKG zb|*c~VCC3F7UIv;v@7v^UPGhlDCuWFPpkSW7>Jr>?7-+qVbHJapQ97n`avY=+XV^u zY{LsY{{de+WuM0bGx{!K7fT)!*1qx=Y;32k8s~>os4iuQQVZhRr`-qcoPoO7H6O88 z#&nFG2Z5x|4U{*gX^2?p2VIKGKj4T7!yps&+4x(b>HiCJjxlB$5s_E%yOKT~mKZM7 zS2VQ-;33hjZ3F}7_mkLQSsRT_UYK5j>pvKCn~<9;%h4YZL-b@y5QxgGOD9|m-3GSP~}seP+hPYb*{w7 zvys%1;jXOP`W!Z9T!8Ry5nDK}Cq4lx85iDSWevSfTN~rE7$mCDyvTkZHw@#i|M&=x zOd}f2k|pk;VY#o*GDvtz`_q%;Dl(Q+fJ4~q3bgqA7c8ftJ994 z_{(+i2*j)BVwKkgr@(ihNb!kv@l1*jK^(ewKV%mtj1b=WkVQS)(|d9?PU_;>f_u8v zzBKXen(S(}&*VpBOVLmz3fF_cW{k z;t(&KJN5E$a=)aH1jFDg{{W-lm~#?NAXK#Yd(|OS3cIEolG=ykrl@@$CU_L_^KmDbFRKg0~3OX;})zb_>l$|hQX84 zVf*%^-@|(Tgx0^LTRnsv+7lMG!l=Z9)#Ar;Zy@)OpV+?V+Vc0>D~pn|bZqd{Zp|%-DZelo?3#saqU7Qoix?Oxvp#6zDyV99(#dT{q4JZ0UE@h9&tfh$SMIeqYbZ5! zBzPz;B>i~VrS|#_D$!|c`}j*Vo6gWJtqpcbJI@AAYvVlwR`q-!cg-5MXj-J#ETp5$ z7q&;V|L7ZR|Fn=!$+FP;jk5y4fQpIh|H8+-Wx`&^Ejtc$JEy>hlW zvG7xHKtU_cWrsI)Y8wT=lP$Vgm5x-&vf-}IE8rLoa*L>Gf5KS}0_}*oO#fCFj~jF3 zXy6T&_10DXQBjAtd-7O8rfu%X?`E4ei$YKiJO&2b)s5CP%2B+YLf&P%SB^HLyoYNa z7fsl*M-W11GViU~0ynd0)>d~7f23&Mj-WNB=S~tdFM}V!o;oY z&>nx^#0tC)tLvfsx-VU}YdURZHG7P4+O0Gma?`M&v;@VQ)w?HYuwIwGus8;U(_iff zj1{MGxFl6*zGS^V39!Y(1gHJL)9=!d5UiEhO=QaJmJh?aP(4RkqIN)7b68#8cC`Qei9h_`8&`} zJc~~^<*~mY-Hv0M4he*G(d|rbhWrc$A6jyz|CqHa>dcq1QAM%7ySypw)IGNeiy4c@&ev8GLClg_E^tz zsGzzDi>EBFXzsD~M;(IK!J>AhCwY8I{7YFczLZ5DTQ7v~XD5%%5oR#ft-Pxc%Zlcf z$MF20?49FrwwLx|tl?PjpKzI~e;QY+@~81NRlf1RLtESb((wPu&L;goIsV`Ls(qKl zNo{}rMCpPrRXn3&iHaYnxKYKGGO~=5yL-4sfYf%d+TQ;?GHXSwA#obb&cM5Y7;pup zG!qi7t?C|-?z8fW5PbdgV?{{#w={`xPkemFHxVf zm{V!O&_!&)ses_EYMQ1JHoR(s6BXK9zMeyu} z?ELAjk--qjH5iD`GU+2ZlgDv4X9ZgQF zBwTumOF=TUTL!*|eCcVwBK$H)@p%ni=(U;fguGJ4D(4;xeg`V}p*lk;S(les=^4E_ zm^{!X=R{>oXfdzB*Yg^8m-r%y>EcxL48(U9$ktX5xj^xkFvAIK%NK5}s!Lo#BK9Y}46b{wOIU6esTEJq@={=rADGfG?4LmmxyTTji{M$dm#?{~M`CI&@H1W9e7Gn7I{QG&R zN}6~=xBPc3iYUkT?5lGjp1UEIt0d|7G55~`Gv=!fU+P=`b#uKcodjw15^^w6`OX}h zN`-SMvPidUv*61l9v_JR7-9KHvdK@j%wxHq8THpuZWFroXeyHb?k4AdlzsGBjMvA| zpu?+2V!)=;7d*E+rVBpk=r)p?%T;M4j9FNKzk1Rx(Yu?Ic)F z0{LfbhxRQ9(xeJ!K4dkAVX>Sna@nm5Ccc8jRG#7wu=|xGgqa=K;EPlFN$k^$Z99C2 zJ2_2+BPMji71W}}V3Izws&8>LVXmtdZ!*tIp}r^8*le<=&$ntWr`z?VEcH@k@W-ky z4!UAIU`W-|Xiht{MNl{|v(=Z{>zm+cM;m?ucqFcQhz{9Ql)P- zkSEJP=myeURod4jwaF{pY*ifR63f!*s94)& zSHmT})AR|JRs-o4MQU^QY#^>w zjl&yA+jUTeOUnjQyDEL$vwoeAs?whztq#OkQENz_0ic7oZEb{ZKEU!_{Yge;qgSNrPD4)$y5LXE<3zvz7iCo{Gmk72mDK zQ&jXitE4xm7*`bk#X`YjuxUtYR_c(f_@W)x|Jl@b=CmYDJ|#&D&q&e(mG1#3+5aU_ znzDLnj-317(|0~24U>x0Ob5fk4e%YRlj|4%-GO^Or|+n|`Dc=}=&U4dLb`ow+E6y( zM|`1GwD?CsFr?0z^TM2NhT#*YTKm2*$Na*q=LY43$Hc@$7$#4cI^(%XZ1K&IqRlr4 zX*6@YPwZ}GcW-sHaomA)N%}UUF1Xj@B#+EgbpIGwXEO=%W>2LfTj!uU8;XAeo9VzM z^}<-lau8%$fU3x?XW%l{6&?PioL>{`si~Zf4ra3(1r%-hZ6e>=FH4fn;ZbN3!Yzcy z2%eCAJ)|h;&a-^GxDk@{boeG)k!3?i{7^P~|8AtseJQ>&UaW*m`3nBLOhI0all~>} zeQG=uX?m&YM%7F2^7DT{o1FQ4)rmpPcsOtc!a+42VN(i3j>p&IPiNF+d7Yh0w^^;6 zE8Y-QXY*9l5=r_JxD&yOuoiKWaR`*y1Gam?FCmcgiK?7*X|N}|`kA^o$!T(@ z&6+%Q)>P{P?wJYCa76?E2ovIWS2djfT!gYjkh%Qtsdy>da_<74!e-yMweXtTFl|l| z|DY6iF@axb+w6lw5mpw$0$==Bd*Foq{WxwjIAM%G$L$6uyxN-MO2G-;0yyppIN=Ed zCpcjq&gBol37tW(GvPll1pa~G1y0yKnB%-nyiF!!5D9>SaEO89jNpV>AsiP6PWWOd z$Mpaw^a#U|1)T6rgwf!HlZ+fU1DtStJC2(VPPl>sIN_@Hs3bTc7jANt-%QwC34*J;Do0U7J(C{Cvn_zaKgn1h2Vr|5jKDmHtmM) z11C&F*bYuu(F0uxP8gZYakf*45P1Qi5}eS#Ct3j90PKzM132L%1SdG*a)evpgrx|# z!3n=dcnnS$(F=Xw2Q2~Igy0EIcm}~69BAXln$QA>5MED3--8o|_C`2%PY%Gz>g&LMOsnaKe8fYyc-T_D6Sv6YfFS-p9tvWZwXe+Y1HZV}w$0 z!XD`ycMhEJV}vWBB|+A=sU z3X!(JY=q9>gzFG`fD?X+U;!s=l!@^HPH03J4Nf=(VG=mu2M9C334cMbf)mCK#ux%8 zOh8x;ZX+^l2&M-jIl#FHYrzRWLf8OK_zS{jaKg9n(6b$!@Oy+}aKdIo(Q@E~nqeGw z3fv2rfKUleI1=FsIN`Zr=>KbofN;MeIKc@MhNGV;0dP3N18~AT1TGZ|3-CfVniQNc zd;}I2aKc##e&B@L5dy#oXO2XRffFu7=nTGaqz&^MkwioYe?Uk9C!974-3Ly%2O$HT z@K=P<;DkY=F#y2{D-m+Q31h~fslf@~9gEflCwzpk0i5v1aU8eRh6s_y<1sJ63G)z& z!3mckoB}5-MmPsfSU4HY2u}C`!Yy#ZanGaWzzIF4VfyvuWo!ZN1y1OL;0;b_YlA<2 zh!6%)051hTLNI`H)6o(L;ov#IR}ngc7XleVBKT(D1%w{pIEHYUGthG2Oz`3Oyx2*t83cefINyPjH zPXVr8iB%805IA);#u<1Hu*a+D|57pn`3~V6copzyA=ZEJQefh1Xd$uzezlI4U)TV* zZ9$suq6@(bfdk7>OYjWfwquw%;JbnC zk7FEw#{qkuz!Gl3`kw-_0^tuz44hnn5`yOdZKu$GY3O6%;?tNZ#DVW17{PY~uOWnk zR{=F=(0$;zt#NG-;=plJ<2oR82FERp>yD5Jj++^`&4xcc5W#hg!xfD)gA>w!=$8(T z>l)VqAp<-PI0zvNJOg+gVKjIZF!&r=k?es!pJ6r;2QEC1mIKcNIuQ!NZv+2z0j&id z##Lf4A?!uO>oVqa6>5Y1do%DogyU)afsodGF2Alh9~VC!mgp*OuQ!eo2s8l+J=|~# z?2SX0s=or+P0}Bj(46nVH*4a?H5uF}P8iSU9N4MjJ$T<%O}SS5tDI+Cv++%HJTlx% z8&|qj3AYcN^Wqbmtci2O|6yc(V?RE$FYS7CHlSUL4iEAfp}(@TxpqF<>F7{F=L0$~ z&>4Wv1hnVV8Q^xm1GD`2Gp)4pB?;xnij~42$c*9-H(C?td7yb5|41VgZ(iTD3*WA} q83v`>s