From 69d452721fd94f8dcb67dc60eda2c09ceb87eb62 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Tue, 25 Feb 2025 21:04:16 +0800 Subject: [PATCH] update with workable projector control on/off/next --- Core/Src/ev1527.c | 11 +-- Core/Src/main.c | 127 ++------------------------ Core/Src/stm32wlxx_it.c | 6 +- STM32CubeIDE/Release/WL55JC_AS923.elf | Bin 67912 -> 67776 bytes 4 files changed, 10 insertions(+), 134 deletions(-) diff --git a/Core/Src/ev1527.c b/Core/Src/ev1527.c index 68dd3ea..48d1571 100644 --- a/Core/Src/ev1527.c +++ b/Core/Src/ev1527.c @@ -1,12 +1,3 @@ -/** - * @file EV1527.c - * @author cyWu (1917507415@qq.com) - * @brief EV1527解码框架,定时器中断的方式解码,使用80us的定时器,直接放中断服务函数就可以,适用于所有单片机。 - * @version 0.1 - * @date 2024-03-28 - * @copyright Copyright (c) 2024 - * - */ #include "ev1527.h" volatile uint32_t TIM1_cnt=0; // 定时周期 @@ -547,7 +538,7 @@ void STS_RF_Send_AddressBit_and_CmdBit(uint8_t *rf_payload, uint8_t rf_length) } } STS_RF_write_send_ending(); - printf("ending bits ...\r\n"); +// printf("ending bits ...\r\n"); } diff --git a/Core/Src/main.c b/Core/Src/main.c index b9c6679..5eaf1b7 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -33,37 +33,7 @@ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ TIM_HandleTypeDef htim1; - -#if 1 -/* Captured Values */ -uint32_t uwIC2Value1 = 0; -uint32_t uwIC2Value2 = 0; -uint32_t uwDiffCapture = 0; - -/* Capture index */ -uint16_t uhCaptureIndex = 0; - -/* Frequency Value */ -uint32_t uwFrequency = 0; -#endif - -/* USER CODE BEGIN PV */ -#if 1 -/* Captured Value */ - uint32_t uwIC2Value = 0; -/* Duty Cycle Value */ - uint32_t uwDutyCycle = 0; -/* Frequency Value */ -// uint32_t uwFrequency = 0; -#endif - -#if 1 - volatile uint32_t capture_Buf[3]={0}; // counter - volatile uint8_t capture_Cnt=0; // state - volatile uint32_t high_time, low_time; // high level duration, low level duration -#endif //uint8_t rf_payload[3]={0xF8,0xCD,0x07}, rf_length=3; - uint8_t rf_payload[3]={0x1F,0xB3,0xE0}, rf_length=3; // RC_PROJECTOR uint8_t sos_rf_payload[3]={0x82,0x73,0xA0}, sos_rf_length=3; // sos_button enum rf_cmd_enum @@ -172,7 +142,7 @@ int main(void) printf("start \r\n"); // EV1527_Init(); - EV1527Reset(); + #if 0 /*## Start the Input Capture in interrupt mode ##########################*/ if (HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_2) != HAL_OK) @@ -183,17 +153,6 @@ int main(void) } #endif - - -#if 0 - while (0) - { - HAL_Delay_Us(1000); - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); - HAL_Delay_Us(1000); - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); - } -#endif /* --------------------------------------------------------------------------- TIM1 configuration: PWM Input mode @@ -230,29 +189,6 @@ int main(void) while(1) { -#if 0 - switch(capture_Cnt) { - - case 0: - capture_Cnt ++; - //printf("cc: %ld \r\n", capture_Cnt); - //TIM_SET_CAPTUREPOLARITY(&htim1, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_RISING); - __HAL_TIM_SET_CAPTUREPOLARITY(&htim1,TIM_CHANNEL_2,TIM_INPUTCHANNELPOLARITY_RISING); - HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_2); // or _HAL_TIM_ENABLE(&htim1); - break; - - case 3: - high_time = capture_Buf[1] - capture_Buf[0]; // high time - low_time = capture_Buf[2] - capture_Buf[1]; // low time - if (low_time/high_time > 2) printf("_"); - if (high_time/low_time > 2) printf("+"); - // HAL_UART_Transmit(&huart2, (uint8_t*)high_time, 1, 0xffff); // print high time - //HAL_Delay(1000); //delay 1 s - //HAL_Delay_Us(1000000); - capture_Cnt = 0; // clear flag - break; - } -#endif } @@ -263,59 +199,6 @@ while(1) } -#if 0 - RF_Read_TIM_init(); - - - uint8_t vt=0; - uint8_t codex=0; - uint32_t k=0; -#endif - -#if 0 - EV1527_Init(); - while(1) - { - RF_Signal_Decode(); - HAL_Delay(1/20); - } -#endif - -#if 0 - // for(i=0; i<16; i++) - { - printf("\r\n Set Key down \r\n"); - HAL_GPIO_WritePin(RC_SET_GPIO_Port, RC_SET_Pin, GPIO_PIN_RESET); - HAL_Delay(3000); - - while(1) - { - k=0; - printf("\r\n Scan code \r\n"); - codex =0; - codexx =0; - do { - // sts_rc_key(i); - //codex = sts_rc_decodedx(); - codex = codexx; - vt=HAL_GPIO_ReadPin(RC_VT_GPIO_Port, RC_VT_Pin); - if (vt||code_vt) - { - printf("+++\r\n"); - } - // HAL_Delay(10); - k++; - }while ((vt==0)); - - printf("\r\n Cycle=%ld decoded x= %02x vt=%02x\r\n", k, codexx, code_vt); - - HAL_Delay(1000); - } - } -#endif - - - #if 0 uint8_t i; while (1) @@ -379,7 +262,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) switch(GPIO_Pin) { case BUT1_Pin: -#if 0 +#if 1 printf("Button 1 pressed, sending cmd #1 \r\n"); //STS_RF_Send_AddressBit_and_CmdBit(rf_payload, rf_length); // STS_RF_Send_Multi_Times(rf_payload, 3, 8); @@ -387,12 +270,14 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) STS_RF_Send_Button_Multi_Times(rf_payload, single_button, 3, 8); #endif + // for SOS BUTTON +#if 0 printf("SOS Button pressed, sending cmd #1 \r\n"); //STS_RF_Send_AddressBit_and_CmdBit(rf_payload, rf_length); // STS_RF_Send_Multi_Times(rf_payload, 3, 8); single_button = sos_rf_cmd[BUTTON_ON]; STS_RF_Send_Button_Multi_Times(sos_rf_payload, single_button, 3, 8); - +#endif break; case BUT2_Pin: @@ -412,7 +297,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) case DATA_433_PIN: //printf("^"); - HAL_TIM_IC_CaptureCallback(&htim1); + // HAL_TIM_IC_CaptureCallback(&htim1); //RF_Signal_Decode(); break; diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index a8ac49a..d732eaa 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -369,10 +369,10 @@ void EXTI9_5_IRQHandler(void) __HAL_GPIO_EXTI_CLEAR_IT(RC_D5_Pin); #endif - //HAL_GPIO_EXTI_IRQHandler(BUT3_Pin); + HAL_GPIO_EXTI_IRQHandler(BUT3_Pin); - HAL_GPIO_EXTI_IRQHandler(DATA_433_PIN); - __HAL_GPIO_EXTI_CLEAR_IT(DATA_433_PIN); + //HAL_GPIO_EXTI_IRQHandler(DATA_433_PIN); + //__HAL_GPIO_EXTI_CLEAR_IT(DATA_433_PIN); /* USER CODE BEGIN EXTI9_5_IRQn 1 */ diff --git a/STM32CubeIDE/Release/WL55JC_AS923.elf b/STM32CubeIDE/Release/WL55JC_AS923.elf index c62f420d56c71fd3d064fa0c94b054d3c54dd9b3..9975a367443671eab9db566d3f172c646d75f4b3 100644 GIT binary patch delta 18483 zcmaK!4O|sf`p3`Q7Z?!qq9`EJy?_cTCa5H4#>JN_iVCEqr6eR8CMcG+x@i~7%F0qZ zDr#D~X<_LKA(bW}n|;z&cX88A`&SFCChTf^X>mc`?*I49o$;PK+y6f{-1$DwbDs15 zGG}Hw^M>ivR@0X7fQASrk7kTzZHLj_nbw-HObb1ojRFjOTRBb z_Y%&R`!J`x{Z|b4>tt7SEIJdf55cbLS8Qv4Mdk@N%9Dfh|EGaBmv}RO?i!E zehdO^K2cm{ayY_|O)y@lZY;LDTmM$W2F0%az#i%6cgfxQo?A+mhyUk-H2UUsck6L? z>vhI>xOH^@*6uWi&Eal6<9=s#tgDytonk5Z@7GyPXCYr~jhF7?o2}8(SzckaX860M zLzMjUP0||U4(4)qXSUd9Nr&tXNbWh`WSqiWx4P}I(xKt$#vPE2Wv-jBDS7HnIMwP$ z9%+kkUh0l<3~~4&WAR<|cTN|vKdx+D^fyys8CT(5^mmHF0l2bs(ce^s192sH(cdu& z_rn$IqQ4^)9)hd3PWl_yNZ8o z=>}J5yX5eMFoA;A(A}uWO^DQFU^eo`s$MHkP-AT1!((EDdvwVa?$#gOLFtk!iRZ*b zr_NR+e{=^cF=rtpi)VHVTGy8H6ofS(weNPv6hvg~o{(?>wL8kd4P{izy}0C>#j9hI zl7H+lpu9smS+epjq0+ zlLx-zw-cH+Gyh@W1nC7HJ*bcL3{M^uEj_{K42nvc*DWgmWJM*~ zR@H09-K+m}yyx^xmwQayLU*g3AB`JsK1O=p5EqM(=J*jw9i2VWQTMKdPHHbLo&E|< zR_JCYwK;c3cm)l3?$&E327_ITZatmRoppL zk!2~eCH&zb$S znc%96Te& z=vR*fU0%j#X8k4N05!-AgDtWke2VAV?z!e;v#r@AF=S-6uwv4)8jpodur>+TvT$v= zb4}q(>}q&^C_7Rr<6mTtF|-u%?(D%4Wr)HwtxrLZ3Kkvlebj;tE3J5=&Z45gH5xJNLP93>{M$^NAaiMHw8+&GSH4jcD8o5Cw|Ie zSghSK)zR7dPkw9m4CzMY#0QfkDVnc(=z$lwk@lCWR9OC4XezX`>OPi zc^Z==aBiRKd;Y2{gUJ(N`?X*{4l)W$a?Qv8OskymNV;U`-@!M{n`>@ItUY+sym>=H zW-@sc&ZRgv<2+1dK8@yk=34Rzs~Lb+(y)Zd3A||jm;lm-nwf1aKQez*^i^DuBw{*~ zX$Uf5h`9+FUAvFtnoBvu%t_E*k=aB|z7LFsXp|&9zF6JUKTO ze;>|`O=^ULlq&xjCWq|6_!%=aw?9g8XxqdAh6}?Aj1{rDDb-}7jS2DmNbb1cTr3E+ zGr#gy?paCd^$mT^3K;yEViTdvD*d8RXY|0CP$(p*wNAYbK4?SJL|T=(F3c2 zA&&OeQs_y0yMx8}J6J49J6ex**eg=-d$BFXF$}-I>tM&F)P5r#xSW$={O6ZOisk#J zAgQDE?G6?{wN6T9vAuZd!gbPe-Z%gA=poCQY{$u%%Q*-FczVyMHfnN93yox~?Do*Mg2TSx1>_7eEMAHGfSeZZ}imE4?YYHz*Dk1h_g ze%nP_Ps#OHytN@dlUjOB{MzDCQIET&d!*QWi=3Q#-7t8lz$6Petej- zsBM&EDB^ml>wJ?%ddNZP>1b`dZHDZRN}5U1-uj!a#AGc8er?jc@0%>B;~lqI{K5;c zh<#)#v$eP8BTXcK1#-LVrIL3iq_#{v3Yj!ZDTN?+b_T`6Vmw|=iArIfzMkZWM}%G7 zr0lazOU6MZ85@OUjOM)xtV0HOQBpifU5uzEBMFw+kxCN!3A%gvoPwyRB$=^5slu{YI51XYURr1%WO$}|GF@~ecjOn##m06vg~BR z_`TMT$rU)4;H<@Y3Fj)DYjD0+S@i5UlOcX{<@?Xg3EofyDJ_09Y!F z2*c^={DEzY%`Fs=uiqWX>vsk5tJ_9Pi9BL^sx+HFygky)Fj-i*w4)EN+iT)mwwoji z-@ZLg8p*4-$3;8=?Lcp&N(7-O!`FG&cB{05N9{<(S|Vr1F!QNQ&Ck9a;fA_QeqzVn z=F1S;c-{^x4=S}A+A{gf(xK7-KBF{_?<+N#?OE^+b*woHy94?BLa9|M=FO$!q)+(p zovG3ZUWC6V`H`Jg=`((Q=P*NEHgDfK0n3~5yD<0X@TYg(9c6ly$&-{cS~i$oFusVw zQR;S}KV#{=)zO+AAn^&bb8-ZEuESky%Jn~~Bc zUi9WXshppEvl1Cxx5p~I!uReO<5#|z$%zKEn+X2zJxPZ80zP=}UFLdB=21u_ z;J2q3E-&Q|z3nh`F6D2%?U2IxwYSGf_wnd`3#4g${l1CP9{$C?O!MJFPlfdf*w&M= zI*yQAulL!Sq90NjCa1GNcFx*3xernCYy?o{_@Lp!B0Qfo)LyBJglxGil2Ch4&+!bahf^b4p;+pAndRoD-Pz z7X>E$Wr0awFYtGsUIr<{u+!Yz{SyS+uoFOX3B50Z&-frVx=F53hqm)m&WVXL!u zsBcC0)A3*(kJRx@9naSBqdI;};6MZ8?!zHT1%ixHwo~9f1~BqQ<16J&(etz;R&F_B zao*S0H}%s6Cd>H($HEis)M%c}eHf!18;#?jr(GP4smuz5@Jh@AL+@k<1OXXjVZnwU z90ryMhx-JF_kwA=NQ;2%iOE_U4#{3YHLH{$ktxAmMl(IkSNz`UED)k4x5Wa_M6|Sz zq(w{lS}Ev>SL=9_j`s-sDE#dO)9g>7M_|$)&~cf-b7)#V?G^BG zzaQkJ4H<}W7};8+SUb>T-Q@6$*IsGV1H(0Y&xo5KFeT`KFq;$8W+{Gfcsd1bs4D2; z-i&tW1OW@;7s{pZ@VO5$^MOdENkK9sMo zutty8d6}={a9&$s&Cb;muFX6L+0zG1$;fEg*xeKUQuavt`(#YU_e<1riH$?MA|6m7eW8BPQOjiuZDg* zxVI4gT|vJM`uBXpJJ~V8;5`^rfiJ2KC`*Ml-y+#4u#)9yUwyv7q%RSeigbg(b7<%| zJkZy{Cjyg$^1(X2z@*<7@2fv7FzL?-ObIwA@EpX?8btwEyUU=V<4cr?c4$M#4Z;2g z=x>5)2-2#oUC=i}-vPD>`u;<_33dizG>C+tzhE$0FrXZq8|n=(h(-_f&=OQ9=*iwb z%xh0Mo+L2oS9;m0tixA(1jC*jNPr{L>-UR@n{|2qvM^Uy#6VfrqNzTG9P0> zz5-S#FaKmUGTW~sjXguu!;e`=X#U}XND{TW27+(RiVvU5TJEA;2Vlc3j1NVaR?4Qwp* z_3%fl90|kpWbkEyDT5ZlK4KsQy+r{yRLA{z?WeC+XW{5B!TBJ z+?h=m1Z0rK*Pk4x+;kt{dDYmX(Unl4U{4Wj5SYSm6qxiU1t$F|fk}T=VA3}V3_Y)@ zj!r7X7C2NmJd?&sfyqaUj>~xVXVx^@I9CFxp-xZqW!gj6^yI}f#mkhE0lWfUXlq@w zB5C1NFH@+)0+Zf^C#;%1=@0Ob8mseghF5wKP52175L&Ito2Gm9NYZ5(X@JJ1;r}8qNhqQH2 z;ta2zqRHa5r>xPl1t}$l9!Ge>c`_5krCMu}MUax!NFCE-3M~}rU+3Ai^mt-Ltu-Vx z)2pL+PxAe>Rwq5K&_XQvmDJV=dJ1(>;B~)ZPft2De`Mbx@N55V-4W8RTO3z6|=h*9oG+!qz!f8o3QVb?CykyMJvY!d z`HIi2&d&s^TgX%m7!O^QmPuagvVGI}yIEc){ksBFEG4sj^(O@;z3U+#JysxdyaF;f zH`mJ)LA}7F$42*QYg%rO*Gh3Ka1YP32H1M%x)woC_Kfd8jhkdVW+I^MCLokqee9%l z%SnQs(vmJPd6~4p8(v9;u88SDFU)WRv9bT1s*#MIVtEWaT_a0iijbaaiTe3`#TQm5 zJ>3$emjzaeOkhgZfLyOV=?4l-`Z9q@PtU*bgTph<)AKKZoh&`iDINfQLQ%Jr7z{}46 zZXc{(&{HzMTjI5czmbfd7-|kT|B8deC%k&4AbG==){quKN^V1W$QeAMUh1_a>1dvI z#ww+7=}aVFdnS}8o(bZ6&V+`n)YLn#YTJVeZ zbVDFAy*wu}y~-x?faM~i8z1r!z;uOZz*vZm>8%aXVWf`f%??ffA6(H3_%x36Mz`(} zz*rZSqGwbNnGFHGTu*z|F))Y$=OV>6a0rSp5&Rl<+37VCaxfKq&F*!$5d3{0UcV!~ z!N8sbNAL^htkKPa)q9Zk3B^No)yq-vgFNKCHR(213(8#*e4mAsK69Y7P+Z@FzrfBk zy_Z1z3wRaJJ8un%Nc7yKku(C&O|$vd^Hyi@2+xifNhd>U#JsAc3%me)1WiSY>ptvO zCSi%D@#Cadcg!gKS}=Y2pcUL^@CzuXd^Ifxz~=?~25Vi|!py7=EVi!(@XIzPf2Z2t2Cw1k|2)FED9c;g<529k z6PP?-%|<4;D$1Me<=~BY6oMb6uzrIJdfC&Y@+Pnt>s#Q-C?>jVp;UehZs_gJ_UA#E zMs8t3&}uIk2J{lA=I|U?+n}|;!Plhcd3DxoF`7n(3w5bUeb9NdI@kf}8dL!-w#mzTU>mxqUCFGGRgo8-cEReD(7v>e z`U9lcsZnzf$bJUj!un6s-vT#>FnOiwRl;8KWOSecl|#W9=rCC-M}Z$i7uH(ZK=3L| zWcR81kv*{_q1Pm7XrYlK6$W`i%Xt8d$ZgojgFcYufL~5ya*FDp2z&t%Qjt?Oe*=D| zr?&&W3fA74v7m$O0uM)>qRbWh_j_V2tuitBE)rlU`j{MIc%jBm4!;0T#hNTZnY8_O)w4{{jnf{Enu;BOudlc9!x$#wF&Z^3##VZ;LJ_<`dQ{ma)&EZLZDe?Ys&~E%L6<+1 z>!^JpKqYuQQuwr*;*((QWhLsIUx5#qnLJz7e*<114AXxDuRwy*)d-u(ewgPG8fDOk z`V>mY$p%0`ADF?PQUb|fS~bRlsZC4v{8zN@z7$!i24L)0e>kXoNEM6lQ>v%ooUKnbDK!2f$|^!~2JHOGFNi zLU0q?$YrX-FTmr`%AZgj{snvsd+wpsOJM&KxYmNnMz!w(FToog+Q=4&jY%;9QQ+@U z=Qh>;9&j~!i2?B|4(CEZ&*5{yRAiW78GYoawF!Kl$r=)v+)uTC9V|w05RB!*oqm4| zjL$XigoiI5`yars;-<=}6>*c!z<`P1$aJrRzTowew^s}R(;LroO`a+n3Km=WJ>Wdd z9oy6d-wzfOJOf-6i0?^Ja!Q@e*BPt?7hxGQNpUrdJ!bK|&?A2P{TV z1s;wzqLtu9@K_9Nzl9HKBMsoh{!UM$qxrd6=OC~zV{q zzJl4(rs`*d=Rj{)`AP64Og1sZDDr2)-Zm1<@bZw8jSyzL_hBF=pc>p45gb+>o&`_t zsg4tH_zieJa;zYPL*X~-0SWiO=KsGyAVz?>pM8(n?6+!)o51EICNEYU&@;#x$bq&V=z**@ zV77!>DUrM=_!I6^L!d{!%RAK)iUE&Odz~`>PlDhJJY3RBAQPO1Ivl7voC_8cxI)M4 z!8us*q^tIub^5o#*HEG+Reu<)jss3Cn}gX22)3r<6A;zlEI3|RU|a%=3Ba3MY$-}) zr)u8~ZlEncHHQI_r~*u0+H~9x9DtiBZ5$Z_UZkvm(En+{F#!TGf(O9#)r(dFdEnq) z-fma|P8J5Pox1QJ==d~+M+s@&_%e7q=7wTz{(l|Ql$d~@VL;#dpcIrkl~CDH=+|1e zw1ESVgSo2S0WKAW-h8m=Z#6M)R;e3OqkRF)N|=q}M-@oyHC=!`;HhY}Bh>)qVETVV zXhUr+c#W{&r~~6a8}fmE9>^{O4q3bd+26q4Td_d)6FA7koOkB$yU^dflS40d69!@q zI>AN4z|;?|oW6jB5|jYS;bbs<1e&7qOz;cQ7)S6Fk@UIXh(f2gj+a1C zfh7^WjY|ekgK;R`Dg-6;Jn69@8LT$4J>V`BxeZ2Se;oW8ZZrm}`dYBK?EVutc?iQt zjUM|(aF`QAsaB^yLy&+Xq&lJ^>;Q`;&=Ys5BFBM`3rn z1+PORT&?;$a~J0SXspS!68JL=il$-#p;o~a@DemKMUSz&349(S<16F<+zfUJTP|iR zx-F_iOOO@(jndCOC2%izX{vW?EZyq#&Cxs<(C2j8NcA*Wyj^|{Oz-QWnv^2u#6kk_ z4kKGAMEDt4EU`MUxCp)Cgg|U`*TDbERc9*{`M}uYi^Bonc4w^?TsGm|V0fIs(o_ zoonO3F|e4!^WZ_qz$WHNz&GHA1>V{42k_01J04XVUu8sRg8AdwlGJFD%1g)lN!9?`TXU_&tM{dgfM(jHXe`b4 zm%>W-`AIO+lVZ)Zxu~f6l-}@@EDGnAO8!vMw?_qZ8CGidmn@QEHVi-OpvBLA zGNN&-vGgom(g@X9+UzgIc}&Af6JTsYHYxIQ?6+VmMq1jo3&+I!!G|?6 z)t2@((0zjKSQq9pp7{;KOBz{JxGyu&k@om5(ml|mB^&8~O+Uozxa0q7@EaNPp=Nt; z)S{K@C%k|ejWznr=qi1NKK<}7tkhUb@>b}>3#wl?Uk!DwZ_K{`N)dD4YtDABcd(f3 z`=!N_dsSoY9it=rels-RA2-%WvYad=_sfmVR_4C!XJ4S$Z_a1#FEsWu8_&Z2grEIn z*?!coH%24D;p2=I)fk-4$RncyFL@encxvwyIfB#m?myJAUiOj$j_AO^E1rhk9%-m? zz^|92q<`G@G}L$+ZnL@(C?XHFBy~4?Qk_<(r{QzY?h?B@OuxHG8u}v)#uxCXEpbvZ zf74=*@&aTZS;4R%)vP7 z*G7M*$sB^Cm^S*GD|0s-b#J4;88Y|9QRg=Lo7xssS$oI*CNr>fbO!#RHOzId-Rd;e z_AoH3BhFM4bJ1{BiVL}@iwnPKs;zv$TrHPs@0c86>CFA=@i3~{_D&gL=@}(PyFP|A zo`&GMP{_BocgT24mWHJN`*sK<8`^_1jP~GV`j`i|!*$HM6g7@EWVK@3f@Abtt33vP zPLQJJy~^|$W;5>7yC-{k;7Gzzj)%E>@W*UprBLp&ML$>3Y^+-R$M)ONm3fVZ7Gn)_ zk8hS_3~|%fNj6AZMwUzNo zu6KEx&EBy~o3YB%@Pj8bU2+fO17d6`Gi1qEo{nO zQJGsu#b3f{AEM*BeRTT6xa6MB*Ty6c{YQ%qCnBnq#q_h9oy`41OFyu=)l_M!Wp(7Q zXe+3G<#dRBh6)=ZMV5vbhQ4{FO_zzI#oy(lXB*j6iR$J!t2;}+a2$qXY7`Pm zU-zk!2aeBw#_B3$8_6AC$8>e!{HDE&w1+>i?+)Atg)xxth#e)p#&5=Uk(TfWu{P;h z9?`33;>32NTt=#K7B4w&qxM4OG{_Nyv@p?Em!WGNb38?2dxgkxZ8v zSwg4w`?{jBr}@p^eWZLI+$XhHdKs|_o!9SyLE2V5 zaZr>LQiL;b5nDn5e<|SysfbTY>?2*QUXj>e9}tJW8DCwM^ow%H_a|GB-#PkQeK+|z zy(CrVj+m&I;`rW_7x35Y7>&P^9mA!#>J5$!dTDC4J#BBGPM=);<+vxL=-+#Sb*cX_ z&3eJebSESGIkVkNpIXnP)`nNOJ?oUtR9Jm0D@GrfP{@pNg}hVF|BX6AZ7@@3jh-Jl z)_d&m9`mLgOD;*|c3ebyR_C>_3f2bU*eD#E9v)NrQiqbBFUXCSj`CHxkLl7D@y~L5 zM;%2LhH+iycc@~vsKujanesgiU(~U>qr5G*Fdz+8ca#@TcvCrQn((4DhZjy9hBml= z;vwlYpE4=MqH8Jo^!nWpX-g*B(cspGYt0FtvKVG}I5V8B4PWt^N#mvS)%wYak|gn= zPkq}t85J-Bn*&=Kw)Dd4?o$FKsYA7G>O0a?W5zM#G;CKg{I}nfWisQNu_i;p$X<3-Az}|pSr42GV_8h}8KQ*I&KryuUdHsx; z(g>cL_o+0Zy5lp4B|z=W2x&RLGSeb8@&_~R_#2gPPi%yP0G)%-+&4 zs%gG_)ZFlUkHMMX?C5N1__}efq8-wtb9TT?p|7*K;brJa`_~p06XaxelD0IIwK%Gh zu|Lun|uP$?AN4her5LO zwq>aE_1G9LV=rQ#fh}F;#+21X%y@?%o0Ezmr)5r5^u(qMcXd+S4PEbl-@X}SymI}n zLAoNBq6Z%|x33h$r_Jpz&E~7-+NXc-AzR}%>CptlzQ}X^uFl@vaM_cc$zqxty0-^7 zch%>-#Nr+9t)^{ zVR&;Xd_Mx;2KZj-QR~WBpI~TiIL!;^MOcovk=9#t%}wO35&0RE+B?Vh&KuHmtVeoO zvd=LYho;=t^&WLQXq%yY7Dg>9e?EUOufJ=2;}B;*(Jg}Wx{DJR9#(r~sZ0I~ye z%p_@Un9`OoR4qYZqcr{cT@%jnOUQTjC0N*>&S2K&hBU-P^5^AveqZ{BQ7QLFABIet zDA&Th_S{U$hsAik{*=&8m3jJhqB9N|UI&?^E@f&MtK=}|3t@!wZ=SRC4Q!)OyrDXg z)fj|evJaL+__fui>&_$Q_w2bv&f~=G&`W&~1fAOEhIiX3=#~aE&z(OvVrn~$AKt1w z-pJxo?w|O${?_X13-jMG1l&QJS;+GWxY-a$%f5nJMxz0aUm14Ct63nxO8dZB3}Gj1RwR<;lA4=2cIvNZeh@J!whf37_hFv3g$@&|Qj$Fu$QP@cTAxgIZ8+k4&kI~%*|3~Bs>jWK~GsLH7Z{@)c5{N_e`z(q{`zk^K#w{oL&koV=o zrF(oXx0t759F9cBJ+R%!R>U{)>;aXKqQY5fC*w-pI%(3^r#rDw#o``xbgXhCHsw-Wts>ZVBa=%aSm=2;P(;mGO*C(E$!zN=&?dQx|@6yMdQ(GDtam z)uukuVt!~-pQw+ZjrC_YYt>s-N|nBXy=6{?X=v z0g(_|dG2NlZ{6(BCFk%b%KPbN(5^RMUv3B}g+3N~dq55r8TRl~?X;`KI9co8D zv#~*pt>#r*hICy$(^o%BAuS{3iJK$1X{%w_PEe^PJ=OmnSX%S{(>I+L(#_%Hw~n^C zVetecRQDtuI14=o$KeVif~^tK5q@s#paA1+W;}vZ5fN-vv?qAa_v|VWD|NXEKopDV@gM#6;Zjd~J??Yq=VN(AiP1EGe>Z$sn0T#|uk2(O9_C|;HBw;G&*8Rx zmc;pjbPIxA0H$bk_>WSR3VKR)kQeW>xQ>{7zDaskU`lmfVA98#efFeJ*YIV5$v(WZ zzkLsZp^sr9$}rAwLotpbxCL#1C`8wDnP zsKAsyTwu~i3JkpqYok7g*Sy^hW(>nnz2_Eq57rGxETK1&gIK|yI8I>7FiBw2Cksq^ z@`oLMq0A%kfd@OgCI}{!eaD3SW3u1y)@ise^Ba|9;+LV?Fn#6Ly( zC!mE_i1G6VK#R39sx3#uJ@|%7i@6f_6KeaTYz#bgZ*&0p$8@&RlDb%!Es&I!`@CND zayP8hFf9d&`Z%6iWw9;Qc-f}mc)p^_lDktQJt;87c3NPH#Tu>V<-N|w2~2tiudlMW z(gf*sRQwol7PLxRW-A3f<+5I2@-nH1e=bWk{5K7!_w?B#eP?z@5Ksp9`L6$C$qj$R z&y3Bn_?WB~YPdwhD+Q)7E4aDZV&0~a?&GPD9@I#&;8<;Ooe-oGF!8Mg)4hN?Z8|IH z=R$u@qrWWZOQ633#t`~2{VhRX2K{aS^e%Q^F!&G#55Sid2UMhkR{tu&!#uw(QepEk zRoNbaDg8--Nq<`4DHz1qy;y$-jRKPccW;eeVA9`+^Vi=KnDoZJ{`ydX;{Jf8d{Fgds*FgZww_XR}yB!Nl4 zRAADV2u%7O1Jv}mypw_Tp}@<@0#kxDyy}k@SJ^-{nRixwUSRTaQD90HKFDWJ`W^z4 zK3QPWkI?WF{;XqJJogieYla|x4yPjzEL@k_LP1Y%iv(T?`(llKsh}tOl>$?kKM4#y zuKR+34000u%Q;nG(w7NL8Eg}n^cMvt{bdcOC5ryhqCeurM=h>VgGDi8i!@xM;l&zW zs^OP3e07M=KZTi=SEX(p2u!90qf_nl}x!fA=_NbpjmLxExcktq4melmed{!jg zCNO#3so@VayoX;phRLEJ{T_{AKX@uqs~5mlK~G*;vM*O+oxuM_dOcWebfoVl=!qi* zM${N*hx{x+?@00Ij|7&-c~hZkpl3neB^+eyy{)2%LmjGK z$1Koy1gAl+)=;{j9|k==UZg9LgkgFNI8I>lmm}EYB^|~lhyw5=zTwmU^6l-PdDW*_ zi_px%B2#?qz!FzHJKCcmWu zlYXVZq+cU2>DLQP`U)TSmPg}lK7scxPs2yJt=5t#KT<_<^)~pR#_F`dl=^)cl+gBO2hNu?Ed)rzDCGki>`?g>o#G(4tN?MeR=zx0`9%)LyX z^fFrU&)|j7s;xdP%cmzVw7Rc)S%!%sJ(G>(bL;xJt|B!(gLMe0_XyUMnw|ovsc*r) z3QSK0)ZA_eda|b{1FAj6d|zPFH~RP~xv8-6z64}o5SSdqYnUE8LyVty`Hh~Y$f(>e z-RFrXEs69D!YkFWPV)PLUQ#DOMS`AkStHm0o zXBcWK(tpj(r|8*5;wg)HQnpV=9$WdWQx+FJ%TQA+_>E{yf}T=^3;fz|*wbSW)gRd> z3B2|{?K`t%!GID><>o(G%ri97SJ>driWX#yT5L5ZJ^b?`oikV$Q+NrIld zIQXp7xH}f4@kliWEMEFn3VJH+YJthi%9*}giCLh371J|f64R>0u>Xu|Frz12UIXu_ zxn5w(ke+yn`fWV%jKxJyzC>wczKcS6+DoNCP+p93-|)9`tL zIw|5In`U*U&!wx_1d7uEi>|N-|7a6laJfOVvUpNs$GI~I{3*1k3;;pzZ1-)Fc z0#ml33)F0M%=Mq`gINVV+4sQ1L+tRA{SRjJG*K12`x_351if65eAgEiDT&+8M)PZ5 zg!7!Uq4ILqQZAjfnCXF|>W#81um=PWLIdPyGDlM`CtV@gHOGi5bu z1@Fc^{HYPp>)5KE?5zSX{tf#`K@a;F7ApvrX%bMFYk1<97BjBrR&O@mODcw#FX_dL z6<=bCyI2h&h#i9m^^qWr7#I9Fh~4nxK>6}cuUmV4d)wo94J$7P!^EqncXI`MJX_HO zXV);jPAVi|@r(Q!Iz=zZ0nwyiw5OW_k?9pYAEU?88*x4XCfgcr(lEWvBHGW=FumF# z>R-?>z5b!gL#3Y)?7O#rP-$3PzgrnOxw*o-Po0AIkO zKD~=V=`+B+QhokrgRh4$V?60~I<^=*4IPHklRaO4KHQclB=`^p6A=&%C1h|Iyopzx zwVbYrn#Qz4b;L-()d0K+^!bQ?3JX+nr6E9d?;|F;c z$VfT{($TolmqP^41pkbVrRLQSiH@>&k2PcGCdd>4EMvCL8Qd%zw0 z`s|N|unCM_dQ>ww1%m)&fSIQp{5kMnpkJ==w_y654{=J&->s_-1aq! zm4uhslvJ^JTY^42QBx&>ms#*?w4!%{Uq-R>C2y|N!1Q)6)OfR~-ZKll*X9fRMKFEJ zqWW72-i0LsVrm)NJ7E2TzKu~0_QRkr7R}Xja)J`z`do?xRPU$3YHv5;o1BYav8mkz zpR+RKHO0OOe2m+^8RXiFmY~-5a2yO9z>G7LVq}9K^z?;Y2(G{*5VEJrdKm}w_NYPO zHDEE<9pF`{CVEkTqWlDG7E1MbC>zX%q6MpGZzv4ttx(nBd9b=(Yl4GsNzbK=mRvEL zR!ILI;cMoRc=sa;3nY!GJ<2v7-1QMG$SB2n94w~K0&n5P7gG`^I(+9~GofG8=>e2cfv%4-n%>t0SzK4Frcrf)RvRilQ9~G z^|Bt_1^ROsBa#&d&w|YumMLH==0fnRoqQdr6s*2wW5PLK2QI)lMV-s`?{~tmTVr6x zM@WEC=^!~oqcSQ6$H8yS@(l?m!Svad>fi@3epdQp!hPahuy}TwD18TJJWgj5{sY4p zOVoM$7IC->f@Q)m*aKXQ&PX*tooNKv+}~H_lZdfA)1pB}v5#dWp#8qJR^(N|^b>RI0%s5HW zp9jA$4AYmvRR}0u$?z8VE((yPa3ff#Ar~{Fbe};o&C{cpKSHNQWTj1bG->}~dR$uL+Mu<|eO#_u);6j8wA)wFsyb)_xH%=jb)j8nWC zEMbVD8gfwv??WKJp9=vEjdfsJ5~ZP!PC;)Rpb%DU;1KpT^zp(t@mKJR2pBTChJFCk zYDqHM6#2UizJfK{vx;7i)+r%CoMM-p0Ix#%RbgN7G~vpd2o@XV6X5Nr5ekS(JRN)` zm>J(7MhRzw#Z$6O!yCcDxM4a%H%jDSI|Ks|;XcJ-HFzXi`SXgyli;CPf)7_l;mhC) zCf}9$pWyv?vqK%(8o^=!9l9{q6OGcU_>Tp*p_k~8zZ`%Q0{ZkOA52v?8Qc-AT5S^r zU>mM(-4y%fU@-%HXUZ^Lc-Zeh0OLE+hv`4n*yCL%_7!fmTBV{e1S40eMH&_>i6{1bQ>2DVq=gWAY9;G*s>Z#SUp z^Y<}4Y*qB5z~#_86wU`+C(y#+5}!p z^1Ha*0#6nS5DxBUrb+@m;%i0}`fKUlolC4qCFR7!*lM}X;lesv(446eb*wp#JG z5Zo81MAeso-{t9@R&?uY0 zEi}+5>7(IT0;>VJVkjqJY##uo58BlPDd6pxGN}osg0Emgk*+w*1K&jn)f#*roPv=~ zycMZ(BBavFTfp?ugW4-XuwF49L;KT|UWe;{HwgZYvHP^*FcI7p0WDQH4NRZi zs{!VL#ef!pe@2NHD)yz|W%0gi$y)GGaGIju0ltn#EMF_=`hOCFCFq7~248{248EfT zxVpVU4$$g<0FOyz#(9dvM(|n`K%E~LP*j^RfmwiAw0Ped0(}7{C>5w77gbp_1WSZ& zI1(Iyv0bf!bnptC!&oK5T(B76^BR5yOkcgIZDh4ZUjgpr9Vxxn|Gf~114A|V5}sjw zr)2miFskd}jmg(wF@T%k1E`S-#l8V-qlH1G4d|kA3dZ{`&tc#U+#4QLum3R+>=o`| zhl9loGQm-3L~0E@O&sRymdn5|3N^SvlYWneYr*tAP>y>2zXZXR1ZFH!O0W)>Eir)G z(9_35af-efoQHm{cFQQ7{0tOes-jN;|3w&z^T49NVq%OdF6xKW2407Nl`<>-Vy-8# z-)RzT0%xGr4u+oW_k-ylt5EMSkAs&96OeP@1e`LI1N}UNT>{sbd;{B6FmBCUR_Kvo z2>Tv_9+)(i$q7Q)Bj^skHW9{dK`)lz0r-$GFomI&(Gav%^dug`$RHM<31^`jIMK1z8R9D!Le zrKb|U1r`I^3Vsg$)l;w&O#e`dI?z=;g8oPU_=sxoISgviDoYfH7r{2n+0<747x1AB zOfZyFa1*=$jZW5MWUL2Yz)1Nvr3W{G>4B30JDLx4w4mDxSI0hhBFZ9^TOpdoj)K8~ z6yMre4p=PFY%qPVM-JsS02Xhj-v-l*yzz2|diEZeo^YuFd<@==Zb~&k`Tds*0x^TD zU~!gu6D&5mpTUD>DOWEzXaG+U`nlPPk#nH$cDpxtl~Cfb;JfH0*vSQO&BoChG^&Mi zqX=P3NTYmsMCW(~7+v$>q;w-#{=gb$RHcW(*D*4xr>F+}F3!0+E}Q_11-t^DoBwb@ zqBr{<0viNr%p1`yaL>-ZD!vciR6Xm*yiV2U>X+-QvmQ(e3|UgRWai>|GiMjfseZp@ zKtLyji)JlbSU77=%~uk>Xmyv@1W1-(T7pY>4X>t@Uk3)zT1I2J6e!u{!+qs_>5!Hm z8_RRm!^-kqfl@^I`amf(fIetCO58`1(?yiu2$aHc`~cRfC?N=zw9?dAo*D#yG;k@_ zr9qMjW*dCsV?na7o3x854>n>qzdRAUf!lV=?*_?V*sVbup=LuB8;p&HCG~gjN9b(j VzcWfPk#2*;ZmA0FaUSL0{{YPFr>y`0