From 5578c698198c1a5178a41868a776c34d74ac6f94 Mon Sep 17 00:00:00 2001 From: Agnel Wang <59766821+Agnel-Wang@users.noreply.github.com> Date: Mon, 14 Nov 2022 13:07:47 +0800 Subject: [PATCH] add three examples --- CMakeLists.txt | 8 ++- examples/example_CtrlByFSM.cpp | 37 ++++++++++ examples/example_CtrlByTraj.cpp | 87 ++++++++++++++++++++++ examples/example_JointCtrl.cpp | 124 ++++++++++++++++++++++++++++++++ lib/libZ1_SDK_Linux64.so | Bin 96056 -> 0 bytes src/control/unitreeArm.cpp | 1 + 6 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 examples/example_CtrlByFSM.cpp create mode 100644 examples/example_CtrlByTraj.cpp create mode 100644 examples/example_JointCtrl.cpp delete mode 100755 lib/libZ1_SDK_Linux64.so diff --git a/CMakeLists.txt b/CMakeLists.txt index 22bf128..3aa5395 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,4 +20,10 @@ link_directories(lib) add_executable(bigDemo examples/bigDemo.cpp ) target_link_libraries(bigDemo Z1_SDK_Linux64) add_executable(example_lowCmd_send examples/example_lowCmd_send.cpp ) -target_link_libraries(example_lowCmd_send Z1_SDK_Linux64) \ No newline at end of file +target_link_libraries(example_lowCmd_send Z1_SDK_Linux64) +add_executable(example_CtrlByFSM examples/example_CtrlByFSM.cpp ) +target_link_libraries(example_CtrlByFSM Z1_SDK_Linux64) +add_executable(example_CtrlByTraj examples/example_CtrlByTraj.cpp ) +target_link_libraries(example_CtrlByTraj Z1_SDK_Linux64) +add_executable(example_JointCtrl examples/example_JointCtrl.cpp ) +target_link_libraries(example_JointCtrl Z1_SDK_Linux64) \ No newline at end of file diff --git a/examples/example_CtrlByFSM.cpp b/examples/example_CtrlByFSM.cpp new file mode 100644 index 0000000..ac2a9d0 --- /dev/null +++ b/examples/example_CtrlByFSM.cpp @@ -0,0 +1,37 @@ +#include "control/unitreeArm.h" + +int main() { + Vec6 posture[2]; + CtrlComponents *ctrlComp = new CtrlComponents(0.002); + unitreeArm arm(ctrlComp); + arm.sendRecvThread->start(); + + arm.backToStart(); + + //example + std::cout << "[JOINTCTRL]" << std::endl; + arm.setFsm(ArmFSMState::JOINTCTRL); + + std::cout << "[TO STATE]" << std::endl; + arm.labelRun("forward"); + + std::cout << "[MOVEJ]" << std::endl; + posture[0]<<0.5,0.1,0.1,0.5,-0.2,0.5; + arm.MoveJ(posture[0], -M_PI/3.0, 1.0); + + std::cout << "[MOVEL]" << std::endl; + posture[0] << 0,0,0,0.45,-0.2,0.2; + arm.MoveL(posture[0], 0., 0.3); + + std::cout << "[MOVEC]" << std::endl; + posture[0] << 0,0,0,0.45,0,0.4; + posture[1] << 0,0,0,0.45,0.2,0.2; + arm.MoveC(posture[0], posture[1], -M_PI/3.0, 0.3); + + //stop + arm.backToStart(); + arm.setFsm(ArmFSMState::PASSIVE); + arm.sendRecvThread->shutdown(); + delete ctrlComp; + return 0; +} \ No newline at end of file diff --git a/examples/example_CtrlByTraj.cpp b/examples/example_CtrlByTraj.cpp new file mode 100644 index 0000000..a3c0071 --- /dev/null +++ b/examples/example_CtrlByTraj.cpp @@ -0,0 +1,87 @@ +#include "control/unitreeArm.h" + +class Z1ARM : public unitreeArm{ +public: + Z1ARM(CtrlComponents * ctrlComp):unitreeArm(ctrlComp){}; + ~Z1ARM(){}; + void setJointTraj(); + void setLineTraj(); + void setCircleTraj(); + void armCtrlTrackInCart(); + void printState(); +}; + +int main() { + CtrlComponents *ctrlComp = new CtrlComponents(0.002); + unitreeArm arm(ctrlComp); + arm.sendRecvThread->start(); + + arm.backToStart(); + + //example + Vec6 posture[2]; + int order = 1; + + arm.labelRun("forward"); + + arm._trajCmd.trajOrder = 0;//if order == 0, clear traj + arm.setTraj(); + + // No.1 trajectory + arm._trajCmd.trajOrder = order++; + arm._trajCmd.trajType = TrajType::MoveJ; + arm._trajCmd.maxSpeed = 1.0;// angular velocity, rad/s + arm._trajCmd.gripperPos = 0.0; + posture[0] << 0.5,0.1,0.1,0.5,-0.2,0.5; + arm._trajCmd.posture[0] = Vec6toPosture(posture[0]); + arm.setTraj(); + + // No.2 trajectory + arm._trajCmd.trajOrder = order++; + arm._trajCmd.trajType = TrajType::Stop; + arm._trajCmd.stopTime = 1.0; + arm._trajCmd.gripperPos = -1.0; + arm.setTraj(); + + + // No.3 trajectory + arm._trajCmd.trajOrder = order++; + arm._trajCmd.trajType = TrajType::MoveL; + arm._trajCmd.maxSpeed = 0.3; // Cartesian velocity , m/s + arm._trajCmd.gripperPos = 0.0; + posture[0] << 0,0,0,0.45,-0.2,0.2; + arm._trajCmd.posture[0] = Vec6toPosture(posture[0]); + arm.setTraj(); + + // No.4 trajectory + arm._trajCmd.trajOrder = order++; + arm._trajCmd.trajType = TrajType::Stop; + arm._trajCmd.stopTime = 1.0; + arm._trajCmd.gripperPos = -1.0; + arm.setTraj(); + + // No.5 trajectory + arm._trajCmd.trajOrder = order++; + arm._trajCmd.trajType = TrajType::MoveC; + arm._trajCmd.maxSpeed = 0.3; // Cartesian velocity + arm._trajCmd.gripperPos = 0.0; + posture[0] << 0,0,0,0.45,0,0.4; + posture[1] << 0,0,0,0.45,0.2,0.2; + arm._trajCmd.posture[0] = Vec6toPosture(posture[0]); + arm._trajCmd.posture[1] = Vec6toPosture(posture[1]); + arm.setTraj(); + + arm.startTraj(); + // wait for trajectory completion + while (arm._ctrlComp->recvState.state != ArmFSMState::JOINTCTRL){ + usleep(arm._ctrlComp->dt*1000000); + } + + + //stop + arm.backToStart(); + arm.setFsm(ArmFSMState::PASSIVE); + arm.sendRecvThread->shutdown(); + delete ctrlComp; + return 0; +} \ No newline at end of file diff --git a/examples/example_JointCtrl.cpp b/examples/example_JointCtrl.cpp new file mode 100644 index 0000000..b1e7a75 --- /dev/null +++ b/examples/example_JointCtrl.cpp @@ -0,0 +1,124 @@ +#include "control/unitreeArm.h" + +class JointTraj{ +public: + JointTraj(){}; + ~JointTraj(){}; + void setJointTraj(Vec6 startQ, Vec6 endQ, double speed){ + _startQ = startQ; + _endQ = endQ; + Vec6 deltaQ = endQ - startQ; + Vec6 t = deltaQ / speed; + for(int i(0); i<6; i++){ + _pathTime = fabs(t(i)) > _pathTime ? fabs(t(i)) : _pathTime; + } + _generateA345(); + }; + void setGripper(double startQ, double endQ, double speed){ + _gripperStartQ = startQ; + _gripperEndQ = endQ; + double t = fabs(endQ - startQ)/speed; + _pathTime = t > _pathTime ? t : _pathTime; + _generateA345(); + } + bool getJointCmd(Vec6& q, Vec6& qd, double& gripperQ, double& gripperQd){ + _runTime(); + + if(!_reached){ + _s = _a3*pow(_tCost,3) + _a4*pow(_tCost,4) + _a5*pow(_tCost,5); + _sDot = 3*_a3*pow(_tCost,2) + 4*_a4*pow(_tCost,3) + 5*_a5*pow(_tCost,4); + q = _startQ + _s*(_endQ - _startQ); + qd = _sDot * (_endQ - _startQ); + + gripperQ = _gripperStartQ + (_gripperEndQ-_gripperStartQ)*_s; + gripperQd = (_gripperEndQ-_gripperStartQ) * _sDot; + }else{ + q = _endQ; + qd.setZero(); + } + + return _reached; + } +private: + //joint trajectory parameters + Vec6 _startQ, _endQ; + double _gripperStartQ, _gripperEndQ; + double _pathTime, _tCost, _currentTime, _startTime; + double _a3, _a4, _a5; + double _s, _sDot; // [0, 1] + bool _pathStarted = false; + bool _reached = false; + + void _runTime(){ + _currentTime = getTimeSecond(); + + if(!_pathStarted){ + _pathStarted = true; + _startTime = _currentTime; + _tCost = 0; + } + _tCost = _currentTime - _startTime; + _reached = (_tCost>_pathTime) ? true : false; + _tCost = (_tCost>_pathTime) ? _pathTime : _tCost; + } + void _generateA345(){ + if(_pathTime == 0){ + _a3 = 0; + _a4 = 0; + _a5 = 0; + }else{ + _a3 = 10 / pow(_pathTime, 3); // parameters of path + _a4 = -15 / pow(_pathTime, 4); + _a5 = 6 / pow(_pathTime, 5); + } + } +}; + + +class Z1ARM : public unitreeArm{ +public: + Z1ARM(CtrlComponents * ctrlComp):unitreeArm(ctrlComp){ + myThread = new LoopFunc("Z1Communication", _ctrlComp->dt, boost::bind(&Z1ARM::run, this)); + }; + ~Z1ARM(){delete myThread;}; + void setJointTraj(Vec6 startQ,Vec6 endQ, double speed){ + }; + void run(){ + if(trajStart){ + if(jointTraj.getJointCmd(q, qd, gripperQ, gripperW)){ + trajStart = false; + } + } + // std::cout << q.transpose() <<" "<< gripperQ <start(); + + Vec6 forward; + forward << 0.0, 1.5, -1.0, -0.54, 0.0, 0.0; + double speed = 0.5; + arm.startTrack(ArmFSMState::JOINTCTRL); + arm.jointTraj.setJointTraj(arm._ctrlComp->lowstate->getQ(), forward, speed); + arm.jointTraj.setGripper(arm._ctrlComp->lowstate->getGripperQ(), -1, speed); + + arm.trajStart = true; + while (arm.trajStart){ + sleep(1); + } + arm.backToStart(); + arm.setFsm(ArmFSMState::PASSIVE); + arm.myThread->shutdown(); + delete ctrlComp; + return 0; +} \ No newline at end of file diff --git a/lib/libZ1_SDK_Linux64.so b/lib/libZ1_SDK_Linux64.so deleted file mode 100755 index ee9d9cff54c364e0ac228d852937b7bfd059d61e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96056 zcmeEv349bq7Iy~{2ntN1u*Q=?gC@$60Rjn#CWIk9GJ!w>Mgb=wnUF}5iIbTSM3!K} zF*{}##e-dS#Z_0lalH@}0?45&3V7iS>(#RniMS%3`Tnn}x~I~aalQ8Yec$iL=%oAo z>(#4QuU=KXs_GsV+np1;#l&=1#HYJ*krIRZ;zbh${T$b?az0jGyU1s{-gX|x^{bq(2aDoNt%NXTBzjeEOBj zpijX^zOr9ZUcSh;@;ffaeC;g?(64%VQ<0DC@>4&e*_COcylCx^Aq=5kxwW}1Ne1~$ z?&RqT%+pG`=#ESG{RBvAKmV<;ZQ3*>D^2+3;Y+ekz;{Bo zZYQ3tB%F|cez#%0V~TrBIQQuNFAOZ+y;MzJ(l{Z@sx)RP_gA7FS17yYSTFojyS3Nq znDHxD`cJy_gkiC>7M`G3`<;|^$%K8$%Nk<(T{?bXc7_uFx3|W}C#XtBzLJm-(<6D! zy2R`i-D0z|N`{px`Gfyvv=!}mFScj7C5c7b?a059PB zBEGu?{W7k5@ZBruSHxAnyee*9(*ayx$M+41)^GRY=1qLx#`k@EKg9PFd^LRO6T^!2$P z@BV(!g_EC*|9#dq13o+R;Pc8V*TLyAbxWP6=UsB>jt?&%ciX}~eJ?ri=11;-7Ek^7 z-jRK^+NYdpe<_<%bk+Utqu>1_U;BQi{nfZz-g?~g#=z|lUpnN@JEqJ%_XFFLE6#jr z`O)o{Y59Mj5YSeAbY>AU#7UmTg+e0^ZY@Pze$pAs5%<*tzZg*&tBugEX`#(ja+ zQTE^kwO4Q0U0N||ORL&Fb>V_1-nrnilipnL#uJMdm)3t~eMwo>D{0d^i)$wJ{hRiW zs^|J&^~e4&j67w??SXX{_jo1g>i&mX&di;A?n$pawCWFP;^UQr<7eM|?1yFP zRn6D$+wiZ!OJBM(yLz0mYV3w)_py%xs|IiGKYC!xlYd;0(5LTx*DOm&+Ar~d)?gT`?8lGO&!-)+kI=v?}D?Y zew_R92^YW8EAGDaPd>AK+YN6$zC#^8YJGmn4>x?%F@AH=KZ~!JH22)ANB*n&@#Mf; zXUyC4$g`&&YI${U-d7E;y_+|w`jef1UcTgnmTk#Z4`(Z@?qA-k?z=a~UNp6;`rN%= zzrMSDdB;2RC;a{S-8s8D;F3{46VFkUlOm*^ofsMa{H)0M-YEEAlNAM`x_mwu5JgTD zeA?NO`MX8opNJBXrOW5UDE!L@MwY)A5+d1W#hH=u1yS%9qUcZKY9#sJc8iSfk7DPc zQQGVBq{#M9!NeJ<+`#W5<0o1pPTNPhKZ6g%g} zM3yr#O1+LmX_uW*^k0R5CX)VFM=AH!DE7H9N;|6EBg_9|6#Lv2Ma~N-HZ`1zMFT!>@?w-*t=w)2!fsH5eWstl{W9`*f zSw}%QK5%dLsbYQw`TIG2nvkCdyORAAwsQOufmaB9vP|~8f%TWZ%7Fu%U$@&^AW6=F zCXSC4a^f)lP+m^%3^$ zC-APOFkpY&NH7JvFW?F|@&waeeRd@H{w4+}deqFfy>=*{I6i+(X%@P8rftOz@l3H&?J z@AO4ws=z-J^{N%}odRDe_^sPHFhSt&qghE$>rxIR3I90;l5n%%z6m=s{*9c!P{=tM z^&-61?MNv~?VC z3EXxzZ?AQx{(CJlQadUF*Zt&+?p*%_lm1_d{@(ro7p&X=S#%t#Z|mPUF1ndg4}r{X zrg6_9?7wm|=RZf(>khOp>lck2FXb2IkD}bPhd59t@Y4it72}WIFD8p|CVxL?94q*b z2z$2Eh5|lQ^>PRDa%=y^akw%292Roc(S`v&vjzXRdVTNWcs0K$F3d+{Pt`O&?-O{f zX*^jV`lETA?3+w-5)|uqT(It+XIMqMyv_03;ZO9j3p<;~!@JS$WdGv#IbX5R{{eJl z($i|v^KFz%{0D>`^l_{J?ZVpk0G9(Zvd;$Lw|h)}JGB>=-!8@U6CC)9 zz>f;MHE!g9K5o2)ppNvZy@TVGg8y~aUJ1&&|8M}^hkdRR{b=2DoSr9e$7$SuiofK* zEP?-3_=)mY4kQS>)uCRbe~~b}uK!ao4Yf<7&|jaYP8Q`J5c;3fjm!HA@<{)zWt^Ub z{Pfu=aPzoY$@)ctvR~8--I;xE5c5u!XfNG=?i2ND74;e__ zH*+9Y;8x*R?GJO{Qh`qvdbaQ4z$?N&`$T+Y72}@XUU^n7f8D#BU+))Z_K)1|8%6sj zi1wW-$}NfKa$1F+1<;#5{|3(NFUr;1_aoSq>T8Zmk6Jmuc^n&iwvhiXCRWk)>%QeU)L@_6`iOe19R1&1(;eau2-D_4ysYC|g9k?D{!7kXL+z6LnSH^*;Fg&gHe z&gc;QS^D^YCkKuSJOlo~`q66~7%24lJ30bu7gK+K^BmE>A8`J;g8!(PH`7e<@CoRT zq<@OgKTVW7U(EYOCjPTTxoJB&;~Rqi3HUSV(`xFcf3%YP1ZBPGkG%wci|BX7+c=>2 zyXhdQzWRA_y5MgV?NTfJQy(Ws34IcT9dvyb3O`wS4;Sz!A!i*X0;=yZQ~aQ~Tyv{E zHLf~eiPz_HDK1B0o~z95b{8h2sIoGLd@i=5&rZ76Y-SJsqNRbCCo z%O|JXE9bgvGAe5z1gI_3SK;-{M=@otIVEMTlBz0Csl6VhQ$|LW_}ngcL#eygSLvxC z5e2?XgLQ(9m@hAM$RGhTIs;4`D~cr8M&|guRXLvOTGXM&SC=!~UIx5oel?|zo<1Qz z-{bY=*z724G^x^Hv)P8vDXFV0g{I!hnz@eB0-w!RT2bP4`Mf2SzB)&#y`Tht?Di|K ztR6icwU~F=WD-|al}{Q@w%MGX`Bm-KqOxJyTk78Gh|8$p22BM{Njqw-2%um(q&vvQQ(S!u&J z4PSn5w|B9O%{JHV%k@^)qP|mEi3PslBV8`;CLX`fHwXc)Mi65MpHycA10C$KXd1qZ^ip`8=#zyrL^UF?Faa2JMtJ=- zzRGHhiC(YAt9Rz;l7)GrGo*3*3x-j~P>a!?Oliwx1;J|N9{jn|UF!3A$#ju)w0Eh< zuarl%Hms6q=q6k9SC*g;d%XT;{}Juz@w%!@YD(t1SgVSW#me<*sX|yIl`bjNaW< z?O$62bAb9ZSIx+@A2H6aEoFkRm#Lt%`QDOR-Z!HU4165wZ0cW}@wYc%l&bv?3i`!{ z_!Y+gZO8b|(tbuGM(?)2+A||rwQJ-3yt$0a)Rq28_3Uh#t_u9>dP+`!uz2#MsMGeZ zEh(K1dMq|DCSY6C3Q;)6Cgm;>3f5NBCKX@-iRkVBhO(l$x=iGwDoW~H?&?}BpRlCG zd}8M-2Pw*fs`=(s6zM(E>G9Me@t3Ry%PVOXosmHzCL$;WrN^q7dI*SM)1HYnN9A11 z<{lbCf5sI4<6$WR(?XXWfjELTcbTi+#~19hi2k_?+e}xUtJLepGSxn~7rSC`f< zKy}dKnfm&y$}<;BWEL=DX=d0?k5c6cA8~&~W6L~|^6BxK%tz~?iFMU>n+>u0#DYAw zm{$CCRc<#08U?afVLY0XAAx=6Gs+UQbnS zNo7qm7O@yJSfC`T!KZxqpD<%yK0)h<`=m) z7RwaR)h?jz3Nne@ESXGnK}o&)7s~D|F5TxYDXsWTMA>Xi)--o5{P{PMh;>}$93GR4 z_LHofp697|UlL)#9%)mAFSUPh?#S7lzpC(`oI7&iIX|&*?85wd0bL}FM(-;0mR#Aj zSu(NJ=8ckOOVble=b1(p_<7W+>}Q1-d~zJYX2;)1qK&3oF7bai-;T!qAMM*Rix%n& z&*#oMQz$Z-84hyF3k!)#irv^nz15GhjQ zlXkd4e`-0#HbLht8bgo?o`GqCZL62esjRozC=#hc{KK{~m>Jk|R^NJv?pAu#X_WI5 zSPiLNci~v6hBHS=@2vZ9)T6F4qWUUIsif7VFT zxo*FOFq0u{E?0eZWJ~-=9e(X9rL&{_M0aH)N-fSXT=kV+pTC5~a){VW%{6j<1%d;L zrwR+BcmLm{28R5fSOe2eeI_Qj%iUhjgsa39*J&3%O{CHmJdY0LWIgYs+8;|Si;&nQ zYAx`Ms^{CoWjG5fv)k!VgraOub?Vns)U86q1oyg%7lbUN)@3Xxr^jB$^SRLe{JRX$e<4!mm0>}*{H zt!a5hQv=L`^DhiCJjkzd*Ua@*bXs6_GA`l?ZmQ1Pr?MKRoz+oHL%r6Wvr(E+->~|X zXxvJ>J+k_=Dl*)l0-O~;!fDb)*Iqw>H4YPWK*63w9ofVGPXmXl7N=@1wvSP_?v z*fepMc~0j?0jFxb>-=hIhS&aj#b|a5 zOBuy$r*DeRS9lQh zTv~Tu<#)SkeeAGLSe;Tv>Vq}>+wF5Za4=`L=aVZLg`j(tl;e39dP<`Pdrz)fJT2lY z*LO#lb{TaQeqWhqzS-eMUg_`uqDu|F%Q2iynB;O+*7zGnjRdUZ=H$3WfGyYQ7@y-BK6LodbmM-+(2@MU zs0chGhYlBPI%(^aYU@m9Dmg_(+2b89+t3l6_=XRcNq&!lZQ*i7sRV{^Gw^g-H~e-) zEdGnb?|byXJ^k$gswcaTWq;%Gm*}40>xJKo=z(0s8^=;9Pj~zhO1#n=cXUtx^;G)c zzAx?wi&ZQvB>`{I5lzy1<1Zd-!}E8&fb_wC3Ztpa?n=z@|9%q-@COLVnni>7`)gJ} z`R6XclfNe^Hvyv$rB9a9{ijvpk;lHu?M8YxrCg-bvzES7DLqlSPhgxsR^soeTrAQW z!C!mq7CgCZQJxUkRgCVVJSXT9M)y`;5p-a2D){4-e+l}PN9M(mceD%I%lPAzZw2j3 zy#bF*cUMk07lq*y1COc~X++<2{mpo?H9`3u(i1@UtE_~(ou~{H^o=b21myxjC$aQi z$|yne`t@M-qx`)7-B|rezWzHp`g7ZRnh3>jXq?9%WYzKFB^=*x!q*7=fC)b!aLt5U zujO*uO?a`ukD2f_0$0TIqq;r^1Rig~R|@@8#QOj`|GM*eebP+0BIx1~JYDD4Y5o04 zO6`v?*^oZ^`!Hr)f1k&U>(9TMas7QNGoB>sMR+MIk^f1N@O%l^pED-@A^7Tg>dzCK zas53#Gp@h4X~y;E=FND9q|g15K3NhzNy76bTs#ubQi~=0F^RuI!mpR`_2M~x(nrQ? zCH^d=>2_Ef1#gh>1K`&`DpEP{&op3lW;}!C$fW#XGFnkqu^_!;K!oiYll&Z z{5QSiauumwa~KEzQz7xoc#_1gO8nL+ct#XFD+;bk{wd4PkAfFP!CRx?6;iqPNcz`G zc#VWNNVrYH*GIvVB>T(!tx@m_F^*E}$owlL`JYJTu9WbrB)nK^FBxAe@xL$euaj`` zY9UMABjMr|6^8GZ@JdO}0SUhiI9}giAI*fX5O|}cC-Li_c*#CK9mKU(;+OFRiT^E$ z-zwpkO8BlQc&%iAnLkD1-z~}669sROUgDSWJyGx#lANWIoRtz@AmRG^(xm6(`0D5>Ag-!}*GhQ4gjYy-k%Z$_KjYIN z;eR(!^iv7{Si)CI_yrQaTEYiQ_!Pto{!p@b);5yJON_#IEQN_aO8vA-!2-d)1e zB>ZU!&yes~3D1)7fP||O-b2FkCHzVWFOu+W5?(Cfv^S)GDkS_N9mKU(!s8{pLBi!Y zr%}QmmH1akcrOWGDd8VV_-YBiPQuqn_+1jdR>Bub_&N#K-}R*A^%8!f#NR66%Orf4 zgddXdJrdqq!uLz~%@Tezgy&0ml7tsY zI9^#cKE)D_pI$IN6%u~Bfx`bK{B;R$knndTyivl>knj}}j#rb7&q@g&V4#Y!TEeXo zzDB|aO88m{zed8>N%+|kzFxx5k?>XtPnPgq5|3AmL9+c#?$Am2j(sr%8Bq3ue20YZk?@Noe7}TW zEa3+v{I3$ON%(jPZJYT|hNqCWjZ>?I+ycifaNGjNEpXfd|2qqOVL9s?wdvD%H5m8&W*mntZS{5Q*rPT*7tc>8 zI@13I_(;c~4{)&zP>7$MhaCwW?C9uN$!OZzI}+M!(A^ll#h|-0`cZ?9W%Qi}O$U=l zLf0E~4@NIBXxcP661vKu>A>SisKlV@;NnPVszK8M;*n6cLDNCPk&w-x=|JE}XrMvU zhX0XJqCwM!{*h3OLDNS5k7WtyH)z_JKN8wv(6k|cB=o33(?b+K5N}4VpI8QGbJ`jdaxCplJgg^*3nRI7j^rnl`{ue}krt zZ`9wQ&ti0pK@VW`=ilq~w=(*mLDPme>Tl3zGkS|b(?&MxZ_u=XjrtojZCs=M4fQOqx}t8^Nf*LDL2>+TWmQgBSHTXxi9C z{SBHnXi(+{9C>LS&Tkt(AkXM zYtXb&iuxNgZIGh=22C5IsJ}tehA8T9(6oVx`WtjEqpvb(mC+>z?O^m&gQks0)Zd^d zG1_L(PDT$j=sZRz8uVmF#~Ab!Mt}Z|UjKYXA2jHxjNWU|(-^(QpbHrNs6iJp`c8wM z&gkn6dIqDH81$u#zRIAB7+qq}w6Tl!H|Wb5oo&!F8ErFY+Gs}qH|W`nPBiE%7#(BK zE=GU;wO;>XMjtfj5=QSe=sAquV$h|Ge$=4L7=5QfyBU4GLDPmb+TWn(GWsfmrU?lC zuhW>F^48Pr1izyB2=ut8JJabVdWeZ0WTMYB(fv(y9}^vCqQ5uk^QDPCWTHPZ(eIk* z*G%+o6TRI;KWn0&Fwqa0=zC1`?I!vr6WwB>mzwBBCfaYJt4*}qM9((S(@k`qiME^Q zaV9$5L=Q31gG}_9Cc3|g?qj0kO!W6pb@sn6P4poX{gH`&*F?W&qIa90F#qR%wZ z{Y`Wq6CG!wzkkxy{wDg6iT=n$ziXmjGts+E^mY^dtciZYL_cJr?=jK0o9LTNbc=~z zYN8jJXupZBHqmYqJ=;W2H_>?}+HRu9ndo#AJ;X#0GSO$6=>8_UkBN>m(ceEIwSRum zW?Hf2YlktTs=@xPcmPWcrl0x`Tmn0>@_Lzorq%>C&{Nw;QMWVjl{OsVmoxB*_5uK+ z&ldCsL7xO#4K7;e%>2X`r^ON#cwf5>soE`wT-D$;$yRLfAI%;m{yzv*2efxSDOy}pa$6r)S|XrlU%WZmXT`U2P{XSb(T8zn&fy$ zIE_hoU;76s0ZD&A7|`}0RW7^G5%_L%7IIC`*O~x310O>h82GR2NYY_$V|#{nl=KV6 zEhadazDA_B5AHtpRdNPV1-XlKzpey9oYt;NGiw?c#cZm!;1JsOA&B(;q-hp z*i-G^a6nf?`|g;e#wjK>JY0=qILIe|_%CW~A+`Y2SdDCw8V;exoq$)W!HsK3^Q9dy z)nTLnU{ztjdkk1u%acieHMp>dQ(HNe#i_@MLLHq<#f^ImnYS{wjhOF5A!Pqfr7qw= zxYP;;=%rrHDN(AEQ=-(1h(f8aqm9Y;hZ5biFhfCQ_8p~i7RIZY--GIh6eleBws$C zmD~T;hrtj`fAt~aJFN8+vV<#aXIVbc&IDXO)H0wM;%Ee5@hID0X&KiI{ax$LhJbO4 zNE$X-)Rz8lQRi<-{}7kZS@0G)dzPGk8#uHVsV>2B!t>ul`QL*YQS&!b{_A-D z@2MKR{L6X%a?1bLAIop2{Jg!!JsZw{8qa?o<-g*`^7o+py?ObI!uj7Kw{J<;a0#9D zWBGT2LwgYxqWXvP|AptjkMh5Vwu)N+6_o!vp8xv?!}aI+ucZ8c?UG+@8RuXOapUQd zdCb=z1IIGTj)ALJ#{tWLMr!J9;tGD&k6Y4DBL37L)Ihts<+F>`Eyud6F+0?~Klu7V zfLjQN?>JD-)-8H|^3TR`uc50e{tKq7P2;=|;8qQMH_xtw$>w- z#N1=ffP38z`!1Wh)4rZI*ml^TSH4gmusyG?w+$aXG!6e@G-@pmSa#%gQ#RwxW2HP$ zm!#eQC5oXP#TNg%r&nO>2y;dR)8AS6T+}{)cg04Sdh)6x>WYN@I;P=vMNUe(1Z* zfoX0H6z0RHA1V{;V1AYw%vYVM`_wJpbhkA3=|iAe zqy}q?zpz~1dL-MD*p0Xmiz&|3m((pkbaw>4ur$Bjn;5fd)u7s-GsX}j7V%)*qHg)R zyBgSSX?_@tYH&R>U$Ai{QgwFRBs5_>Lk~YjT^oL7X>I^JW3VLlr1V!Pz3H16%d&e; z3}+qBYVc2%_5;!e=((V7HcNY%rG1UGucUlgENv%CJBGBE^fYuJk}<_UTd)y_)A^(t5G9V@Uf{&xhhz61`T2;^HjL|Ag}zwM(Jm=-&`kn|?srD|$9+ zJC;U2KcF^!P5Gp>ES5Ha7l$;tb}T8I7uUnmTq_rsM#W|F;*fT^Br=<&jpM~3%_^m3 zv9xqv9MZngWukUz6k8+R6P$!}TvyHH*IVZ?{!h~^iM^98iG|4tmc&_DLj0wj29=!n za!X2CaOOA>Vz6xhm`R7kvaFRW@HSHbwPFgq z6I}shX<-WJ7C0110gQxH{qB}!C-kJ!5j1oy9jTwB#alvaHAk zFIE4s?&K`N^=nub*1~G)*J|JeuE5tPTbA7pe)s^hI#(hvKY<%F*0O9dS0EN*R%D}* zSoPzW(1`X&7AI2xyi9>pe_Vl6EXz)cpg=#aK%8aSf8v-0=-&ljksT)#I6b-o$g%}l z7%x+RUR?VT3!IKoAN*zuByk0LSe7m43efvPE3)D2%mVcGgc^)!0c0s;3V?SKHG!S+ zKFyn8$y#a&Oh$pNya|pCuq>O#EU<((!S$`+2+Ti2P2I{n$Vk=%t0s~H`8|aKxzQCs zpNe5kz=W`O26UXSnFZG10xaw!Lj+OrJ4S5Sf+yIas+;fIp-m%2ua13=FhO1 zBqyDN;ExqR{gEuf;Ptx=Ph!q|a4~lY8wcI$#V{L%R*5-v5d{vjEL$DsoQUuyu_*|ktIW81uU-|# zwVZK9&~bGAY+XM@E{RQd7~-}HD51^RsN00@ ztAw7QI}8&_=mEOJu%@u*5jMeSN{IGPZToCT;cV~VtQ5{RNbBg>Kr)z~FfAeMVlHe2gxU77RljXt+by`A0Vb+IXg9X+Hn7@V28iF)(H*P1-MDiZ zsi)H&vk^TH!|%>C?ndKo6Cw*GR0qjSb?EWbOlBm7D#Z+)05)e}tDb%fPe1T6N2wmj zwS=QD0M+jKNM3Kx$e!*9e95+RvGRTmi_3pv^_}Gmj^3Pxyk+u+U52ey-5HwPKyB$W52b9llTusKNe>jf3m5H`4=|W4ZM8HH4PpGvws`E=sQ4Hg z?P?%4ndrO(`a9jqq>>3OiTGc|$eeH0zJ$_h5If*!pd_YLUT||=tcw$lD1#3xx2i*c!7B_~nIT0JWc(}MQkhoU@( zD9=j8P9Ezdha#(SgUD7Oxn4S`|SaB(=xO@La zwWITcaS%rnAa;oKeU(0#{IY2B%buNm#Wt-CcBD-JY?X${5%v2ArTaa&$IPUk&x_51 z1T}au=Cppv_~T5D*RF!8j#v_Ki!*uT^9ATx9IyHEpKdh6HB| zt#z9Dh%`T*_G12VfQn7I21gdbjZ_4UGytwkZiIMCY7XXeQX5-5mefg@<`-hp&&k3! zAKzkpfj1Ga8oU%$9IvWl$7flZ7oh*6l3B;polWA$ve2GQ;yrRCB{o@EX`Xq-2pj5Z znVTNO?Ia2)3bNFeLKa%g%m;anCABJ<_%>2WxXyzXzT{fm)j=m`a+)RenPf_{q!uPa zyIILlFFBdAF;1)YCTnw6Md-x}$8{Acglmv=)Sh4-!g#dH-j~`#4RUiE{$g3W3K`TT z&r#!GJ8m2I1MM8-QiDxo$e?;!=8A`q?BB98i=JIm+Scps%iE)yFLp=nSyY{wROb<7 zdYA#XrCInhFJEnOqFsa`$ndkcNl;~+G0~q|OKNj+BV=1r%c$N}RPT|fHw9Z@w`vDz zL@=6mpHz2V=Pd_~bj|%TXG# zI{>}$0hQf*hT;CPB6dIjV%%@6VE2os;6B*E?x(nLziI`$ztn^KTUWDt*J9k?wU*uA z`zKUX)J1#xT@+l#3eHlr2Z)*hO0&VCZTr-wmnf+E&vZ6~kAuQ1%fnmfD_Q@#6nn?KaXIo|rq zZTP3HtNk@Z=C7~xz)x{E3j=uoK{D-6STUXzRpN)vcT7mWqJ~B{)q-L`x!71&3<6TC zaF(f$e3Umy`yTo?V^DXa@XZZi(oTn;IfFiw8`$m)mL;q3o#%z)Ia?k~W+80g!Q@6T zAF*7nVl-|?jNwe~=Zrbv>y@|ksHOR1NOK0tlC6%W?<|(()IPY2u`C^myKKvoJ)AAP zPpxPc@-%1QZnpW04V(!O6~H;b;qg0St;z;CO^0S@j=?kWgV7wg2Mz|Rup^2c_abP6 zRR$diV_p*Hq?oHv9+0B7D4Sk1W@n}?et164OKtl)Fr?CvYT$uZO8mJetF3Si>c7;Y zQvXdNSxcUyhS!JvY?pps0hR9~mC+Uz)E2c|@m(=$U{-PiwQzB$j`ucn2IJ#vh8yQI<&9Rf@*+wUUptSfsU|sOaIFmII7+J4mC0wh}0)J zp=+4PEGWio5jq)G=ll7dLTDN+B;~l70@G_PiPMYO^SkH?XU~AweDt>Hr-&df!{d4z zsv#5+#Jji$Pha#F?RxNNpHj(z!@Am`c_@cZf!jje(8&6If^gQ>}^tM z;(U^yZxpD(<D7$N(@C6`Fuh%bR&c~g0ab)uoX&@($ukW zRp{ToT}bWNW7*W+wn+`*{G1HK6(&Uig$BKewyZ^dYOjJ#eMvyzTWvDR5@SWvda7DC z-w<9N*&*rDPIlPK>cD0+!R&u?<~DgW753IGjS@C+RY$2U4Fj|U=(Q=H75%>U${SsZ zJ|Fq1+%@n}$^Mr`DOZZOc*~m0TZ2k(!Y(PQ`o2~gy}Y!}<%O8}y4KSu5B|$M35RB# z>X(M{(1NUaW`~Zvj<#d-OEh~Zq~D1`zinVQHHB`EmFSI4fA4 zOo1555sx@2L@A^YWma;rHlI1Brz|;vty$4ra06tvB)Vz42-Bb?v6>=$>^4~v{W(HQ zl+Z{kZ*BQ&Ce6F~@Qgwul9)f`qZ3N@>t(KIH~*V7uQV8Qg8u}}2UNS6I9mNT949#*ByQ5fPZxIdhmHD@5jz;F(_`_Y@*@Cr%lYHD6yqEl)yE-On%#@uR0uIkS zJnZmV5G~Ga&-rn(R+cQh9QRep!q0J!2?1p;qCS>K4urLO@Bu21ZLyL}^q)fXpV3_A zEVL)BZ>9E}UBJph|8bY%u8R6kHTJdG=w|ev+=Y`fTchKU(r$!$iU0<7k7HsU4XsiO1J_ z<~G@1Jxv)%-kfkAEq<~F!0JK1_)%%`v#N;NFERgO+~3Lcb@EOO zS4}^3^HnwdfCK3hQ4W?fvoP#!NJn-AgB4ElrNi1W<{n*w7fW*u^6&u0(o7q-;ULES zGAXiCtA^P^2vP8;7?01Gs@m&FW){+}Va>zb5$6dzvd+T!V{N=P2&%(HdM684#XSye z@fQnOOX`W1)B+5kGtnRLG@P;15JEYaI6Cb#z{kb*!eMkp+QZ;m7UUA)O&`nBwNz!X z@k7rWu?(;_Z=D6<0Ww2TEqlohL*e-N82<<`eYM0`Vv9diam#u6|p`eJr0`0U35#B$-8HzKQ z8}IC%o3J*<7w-ttGO8N{@9a3h`eQKeSrjLp&<%x{?K|ad|29}&`z>&y@2WTS*!6pzQUjOQ8Aii{twrmq5Khsq#Ve?AH6hn6Y|-&UjYbK3!J z1te64Jn8vJl1Kb%%ffcfkkdXhbTSjj_S0xS{em8M!s8bHv%q~XaR<8F@UT}-JiH(t z^S=JPTi|YT$ylmN3c2qv>jkr(J9!!oB0#(UiO*tm4lbBn~Rg z75@(<>W0i|*Uq4hh#CQ#IXkrJCA3z!G~q8Oq6OKc_61UEloF}Eh~Fs2j{PzS20c48 zi%Ky0gSkFh6EcejkaJT|mL*&kwJb|#>%j;WJXtO|2MtWE6-r03a(qq?Des4-==VgZw_S=4SC;QbHqNyjV1{J9wuc@HFKt3xd8#l}!SUlGBX+o!9 z3=ig0HxCwRYRtErvlPUfSuE#!*w{s(8-GvL)%DNN9z&utI4G7%3ocA@U{@M5%p$zu zL4jJ_-Nep}VNbwRYiZ^WG|@w*!JIS%lQ)+Gh(X<)t-%$7tuV(W-+h~S+Jm9~j# z(~4$4Y&PYmID^T_wAtDG2cQ(aP@F0)+Cg*h|01g=2@9G+nFfh zz+>1+v=i1ZEW@}%HXe1VF`630!5LQQy$7WruVv}&B%ujsX7rd!*#CKf6d8&FXH$Xx zRc*KM^#@Ncu=0vuv4|>;byf6=Lk`vFJYFAcT_>SnB{WCux03qoml#C6u%0&lLQbS= zkM88*w;I^ic0T!4+n3C{K%S}Jr0X}i`pt!HX`(F;Q&Va)AqDNOb!XT2wOi5dWUmt> zDjCCu2!p!#p|*1el_?x=JR1_jjyDF1!100v zM{v9g2$vo28)_)_baPk7dk@|DCpg|GOoZ9-FdRm3yqX_(yk~T6ezD`-ND_3%TN%aQ zZfjc;$=^Q1u=30NjrQGXerEo52_qVzh{FACI{8~RTtN4tU+!;h&vAcS#jfvb7ofQ# z_*>z&DE=1iibgzUYwf%qVP|a^y7e$z`vhekD0W;x&qN#qHk4lMPB`1In?0?6Jy(p zg1xPmeuG6ccLYBiOm9KzSVJ}=*LpOv|C6@EI(Iy;ZriJE`*=LW&)%CpP3hFpk|-j| zEuz!F3)o3u)6Qag`w@moGMW&tK{Y*>!rN|}b`g|z1U|&xRmvFFCAD{0qo4V%A6s%+ z)Y!~tP`@11i@iUKSFg5fgPtYd=zlZVu(*HON0|?67G&m1Z`bR(y$uh`;5?740#T@= zO4fP;^`u$)dstN-0oi_o8azc^y3cpM8k|z32Im)}Ui@tx%*Sfx4&O<5z-tS&JG>-D z&D`Vv_cq#{PyJ;K=PEAu9T-B|VPNem^dY-q-_GE(T-Pt=B(Q!LH*v*f4Nu*)rELc9_}&-PlHX-61)i!tC7H9Abm?3rJZ zkF;#LLQnHlROk_rD%S^F5tO&PZxQ7SSH*|-HNT1VO(8T~1BAwSkH|NW&=jUB&AHpe z^QG4eXYRHg{fj+o$q$@b#+7mWA;M!(9zXbN8Rz8qO@wzRoc^F2jO6$t!n+Ype}JFC zaW~^G0PXWW zM=ud>(ZQG#FA;9ApOfQ7v(w|}YOv2^$fE`>5si(_D}Zr-XW)3utGBFS$a3DCObcH= zX%OtB!Gqv}KI28n*nDIpE7>=PQdp@zdf;$8E6aBV-KNNG(T;cnLrLZ{uvHu+=xwo| z;{yqo+oF}@y$F}vVlBr%-w0f8i517C)>IPn(I1%26TiJ2Dv zEOqJgK0F=12rn_(<84PBsmC1X1$=&UWVTzHw=kRKWZ`8DJnU^eK)>u(W|oB5uTb^a zc9ovL&wR=Mq7(zJ#L8uX2S*$@(t`V>j~m6OiT)e-7Cb$lF**34wH?WM2u*6T8yDg6 zj5Bev;m@H7?Ybvvpx>$8xSl4A6GQnOe4705X%b*p;QHd$NmOP+YK>Y{8hxulD#fgGk+iNUr4con;Xg2>Yz?dpT@S|g{L6A zp6$$h$mX>X};mc~+uBA72X<$dmhFg&i|D&NqH{n}RXE)5^2vV5Y*^Z029S0hAobUv3Ng?xQ;SX<46bhc%4HEg-V zu;nv&ZfPLO+;ATp4ds82dzkVEG^h3^H4%P}U??;7Bv@3dheRp9r+A~2|NS=hEEe`G z`epV!ScUpvs-^l=3wthtd47^T|MM8P=XYdRlRZ@?q_aIoqA-&^_l^kL^C8T(u;If{ zLkp0|mT~_W%K3maYmHMC3;*)nd<1qGqrZ$Q=4oF4l*9|m{$56#?$ zQa?SPm70!Hjrad?{JoNdja^PtqVIHM!x?Ij&q-sKuOYApK=s(ReB;>hE-vU((mXue zh0(gb?-8wuoN5KmKE7!gfJ%fdhZEY-CZ2OP}hi&h&Sg`GN z+fl4DmOA%OA?cHfsh7uIV3dDKV@jYCY>IlV}GRZ9Qj2k^G^Ie2c^ z1^OUZfk)qr7S~RF*w}Rl^`U{wP)6+EV}}msD+m|a$D(gn(s>`-QVqP$whw|+u*#uL z!k3*FT#UBK3w+0Z%45rS-JPi)tC`#8k5RXLfY*3m#-tK>ODlN@Y6Z5aF>k7YJal9_ zSm$p+u`MxLx=6nRl=+_J+Uo!~Ge5`+eB`v`wB^No;qojRX48xbGjKK)OTw2)egzh6PU@0t+rj3DWNa8U5X|^nGMigMG2Wur$BK z?th=f$G30zO8R8@Ek>iB7>wX3v?FjYv9XnOJMNH{ODpLt==C+$&jFr_yMKyQ8uzj= z?tR_e=b_P$FWe~~jeuDg0l$vrD`}paQfMs13u@Q}@Zm);jEGf)(ukOa5%KFDzCl2H z_;TPiO$fvEsG=uA2-GoLxA;UMsA1`mHiuw~o_XS2a&Fq(*s zrx-kAQ3DK~wA91k*^Mr*^Dz`2()Q1Ayr7St5$!3))Bj)WIRf_4?fDc&VAyj#O*E_S z58HF}IbnO2A`v{F0@6I-(e1fvAhYK?aJ}Ewp4j4>(V(KAu$`X&=l$~onz+TPY%V4_ z*s6jiww(LI_WT64(kH)@xy^5bJ8A>KquVpb%ItX^xh&21zsx^BLQcKEzsl}6u_+~Z zGn+X6zp-iyEU8;H5t9V0dJ-V*(7j=+UJr}uR(+Q9OoXAe=fR^}_0U<&s-wtpf0|XL z;NIAO*89Kz>~eZeAJ1jttyU}k;ur*Rp(Sxjf+g`%jAuNSJ2oJ!STa}aA?T{5K{1N& zk#RD~z>a9(7_PtL0!~3lVvY2ENrd=j7)C1*->?V;LCyh%e;_3bzXL~s4z$X(;tM5z zEb!6JqrM-URE)z&jAkR~hY{c@EfZtdFDYd1u`C~iX@Y{5emm97y%gTCKnQ^geg%?q zvtOYACvEC><^)%ehb{b1E4 zkcUn-TG+2~YFAM@i@&BHdST5S%wH;t%W_J=9(*S4VqoIuVFy@mRO9hSz|>_Xe~j=-xJ zHUr;6(uCloDrZZMQ)|D2vg9;4GY|MJ;sji;4_*bJ@;9J6pj)JW33cgw^AMRoSl2-J zOQ8LR1fHHsy$8>!VQ2gWu&{&G!sdMQSG0ZkTKi19>ALw!-SY2~fG4Sy`?AJcFf#5{15>Pc)Gimlc#)g3EgU}w z;~tuUCj(|U0!JqVUdqO?T5CdfVRqnEoC!=1>@LsV@?1P#8pIaUvwT9JbTZN}#CMjaP;>C4 zc^9$xzC2KH;buZ?`vN)nJ9Dydt7s`GB9K#y?vfMO$=|tcndDug~jJBvC7b%nXe21imexBCY`1y&W!i`r5DFdpTAD`(*dX$XGu zTG?QOO7P=*P%4d#gUCzpT65rIZ3AknyYZZX^y~(6=O;JgcyXyznN_^f(Ybd$Lt~3Y`4Rh2H*sFpgZ9PM5Cary{4bQxWP? zLm`c_k3xx|vpcY>Nae4f>YC1$e1-7a7m>>ScB`@9K#yMp8}Jb6Vd1|gz%Fe|v^ogU z-*21lY5H#r8ag82Eiol6Dy?({!xES4e&Q zaWL3gcjUw?5DN3dOEdK5#ZT`B{;mCinUWgUvh+Q08x4FtS<%$M%7)QkLBqx(#>AL) zdjU1iVa<**!xlH*x3)CjNRGwdxh^zbSHgUtJ@yxF`i;~Crcx$gtL&+q3_P7d>Xwh& zrPRlw3Nd=&n=wkZEfM4WC)$3h0S>|Bv%u%3p}lUzkjC5V4|;pSKSM~`fK70!#zT-q zO}>=*5A)B{ppfpLTahgMvlJY{KabrS_RmMbA^bBN9NMRUX8w5(YA5^Wm!QM`c?!v5 zj`Lsq^N)~5{&_P>43+*M{8NL5X8(K@2dqEMKd(en!9QPt5aFLqi+kfOuuBtsCxpg9 zPiEK9E4Y)=eLX@02?=e)-|%$D&zEOp2VUogrY)W%8bILDR%dXiGgyvCh^1dcXO9@g zt$?m-z=P?XJ?c-t+`xYtet9(~Mf*E!04e#VXPXwo z5v|5R%IttgG5ysjv+WNe-f6)v#?y~1+4iBB3CX>+`_Y)}S2=oPZpX~AlZ0X?Ehott zz>i6MCfIUdH~LA51p2*6&L0|q5eGxF(ho!PHZ-;N8JN(W+P2fQ2mc98!C<1_kHtN+ zHw!FO{_{kVdG+5VYFuo?^V;IOdg zDV0yuKoOc`YXXjSlE{o|0J`>{M;v(Q4;=YKj|Hv0PJSsKK{I|OpMF>0vh;q+iO$%# zFb(-~GW>%g{De;p;y1MpadS56XT;Ac!Q0GIfE%YAJ@@cQSeKjTeKehVUt%r zR(p-yiltx1CX%B$(7>1nR--%5I~|Xm(eQ|E{P8!#&zsn9BekRt(G#=_0Ea4Jcx?$; z{6&yF#@HT;#n4OlWI%rpsD*I|_Crv(Gb2=rQbd2?_Gb^Z#62?^HQ|1&CD2e7#E%DI zs(}L>)(#^NU7uQwE1AcSvpM)r)3ziv^L^jRH16SLs?|u=$0rVL(?&usef_U@tzyx& zx;(bmmI~)=MzzWGIqV5OFMEQI9va1_^ul~C8SK_$JEa$B(7us4GLf%gL4y@Gimq2Qv%)Tw>S8D zl)|EmwQQ;(T2TH46qe5O(-eu&hjqH2H&ljDP9ZO@bNH;`yM zdc-n#E53Ww)##syc=0?+=|1eJWZC-gGoYMIn zh7`QXX&L(B)#v+DcyNMH8cu4wJHmcjx9Pbw8d~*ppccG6PrA@gwb6O|DryLf*^o|1 zCB{$|)x$bTzz-P~>PD3S+blcw_h;=Yw+stGN}hFo0RIX>eA@+loTlm?I|WV=IE++# zigwoxn3xwSEUu(5vf#Vi9Zh_+#IBtRe_bpKGF7-=F?lM<(NmZ4nG^Ng0Hf9Woary9g1AT`1>%7A%Yf7v9W$s~a z%06NklQOK%TRJSq<8=@7`zou3<+-ap-UUM|crHarAt@KyMp>`9#wv?V@w)5$Rld|g zwo$3$#-*iN&pp?AcEN%=pS$|JIxAPh>UI14UZ`a)sj>Q@C)3ed>tT8iwc=N5Yb&eV z*7=pb3aj0bYoF}O%XT`aQmRYNr+MrPT5*U0a&WqTmi=}F-N-AqyC0=jIf(r`=TMJOV!PdMIpSQAMiZ`3! zDYd>zPfgumt8LUpW5!7QXp@;t*Fx(!YnjJCr^-Fnin=f%fJSjDk}#yE%_fC@LOV=w z*VMTSP>GVcZlfVm!fid>QRB<^c~e*`x(vJWI=M>f>fBzRYre-juf*%|*Oa;DmX?kj zox*CIigvQ5*wS$w2aQ;xkxSm(cQo*jdrVWd);HKXIsy%@cC-T4C9V7)aP#~ zFR8AqS}@e(oja_|(=epWUGJ_MHW%g9x?F{x+RD=DdUG?AW;3ORR`{x`Ak2C`K2~aB zYoY2WuwH5(Z_UrnwOa=c9LUnpcymhXDob5;XqK9}toM|nNqk;^sn1&Dud1@vczo7+ zG=3RtWgPd|r%jtOZMJnvP1OQxov*~_cGaR%mGy3GsmEVcX7!=_mAk##&TPG8ieqwNPT@4C)#J71WKS!!7dWP1t4m41spx7PKDXjq zj3ZFG|F2)cR}0=WoMM&2ZAmY8b**oKb&khV=NmJo++R~lekkgvUnZxs^h|d{shjz! zT~CR875uhQMg~`z+gDOqWlJlq^3=FpFtl5eq4STPQ&Q&Ab#Re}c4ef~@mn}lkc1c4+G`oo|U(~O%y0!{p(_FTn zSD+|Tm!CG@TT;ty__LH0`A4|sRF0ZciQedQ)T5FkUDf54BdW{O9QC#|e@&&&>vm^* ztL=8uG`*^_&Szsvr^CnnZbyE>NSB>`Y@#~^g>hRQ=>im_y5{zh~fS)CIhP$*ViXbumvN0{k<1R0+ z8xM!OaDv;5u33gL7DH?S+^fWUu0E^%D6gm1?WF-eB{fBecGQ%)8}yM`$i;9gQu$yk zYCG6E#70Gq)l+}8D6WfuhdOF8LF^P)O`M$$T_WS8i-zAmwfX}Dt%U8Wi`e)zwc+{3u|hfv%u#@ zd^ZP!B@KOw4xk3398<{3%4lIAQ7zbwW~P440#(-ZRhbbrks0eg4`i zx8ssLHV03vueawHjF6{5!W6|Iy%mXQ( zrVoDm2iGcGvzj_O?oL#c8*yEGvZ9>O47tBkl##fu#?^`IbvOVh##O;}53Yrfm$0;> zBe}1le zbR5N%Z_S5?z%EN$n7l=Zf#Jh*=>YV`3yyY67WnWadird{<3aHV z%AEim2TeVkPM-vw0-awBx$waPpc9~tpwpmTpsoAxxQ}qqF`|#8(?>u9@cB*<#S5YH z=L#_f8UPh|eVo2gI|{lNG=kT74}vB@kAk-1-TVZ~mjK-fItqFp=s4&Tpi`iSK?C?P z$y}5>1$qMae*8uvLiGWC0`CD$gWiJsR{Z!Rg!@U*w?PB=?bd$aW1#bK@5gU`8X;#C z^f2&g&=ZsnKO{PW_zBQfO7}F{2XqW{3AGn~j@Lu^e;4f!I(;ymex2}tNT-X?-(#So zpe6s5P9F!I1`VMfLq9;jfsTT9flh;_sDFQmdV;2YlujQ26+cd=CqV;;P|tb5pMySu zPCk!z0rek-9)OO5PJvE=z5^QgDe}h)Ln+XOpyQwc&?(Sb(2}2}(;GoUp!5z{0yG6W z2D%qC^>g$;XzLO1L*GI#q8*6urF8lj?k6UZ4`|8%N~cTk*tYd$v=md=$ z(APl|p!DpIz7Mt#<0$mIboy#g3REl#uA9~g*Y*kD17(}U->O^E>7|5) zeI?btqLn@*ru-N$Vk7-z2=<4+C82T zZ+N)Cy|c8Wr&QcD2NkI<7K=$Bf=T8p!Hmqgg(brUyWAt*J$R==wgu(!*3IcO8B*^~ z$VVV-G4g8}PNx^p+Y~76h`ZXiV3()P=Xd{Mj&DJ&uVjUA!T$m5%EZKtdM^v?15AyFk>Q7qfE1nDDRO{f1E)GJUH$k^jv z;ajlV6ZZK>ytTf?y9#Q3f#JeBU&3>jYmP5a?OP1-U|AtcQC;j*f7FND)R!18+*L5* z-R;?fw=k*CsIGq0e-EhlVJI~M^~++!@B3OhT}J@geAtbuZFNPXQbB~zIK zh@~+MCBK{s+D?LFA4^y9Ahb}`?L-AG>yPGpN4aH&!Sm#3- zicr^PQVQK~!=BaXEYAaIW$vXqOaW5A=ylh_$fq6m-aRlNQYXWl7aEGx19?$j90zX? z=8G-F+nK}Ltjk69D?$FL{jg=k`xlzm-A)yh^+)`~qv`Yw6n}XpzJ=l`uLza@v2;2{ z@r63RQI`wjS+xQ2-U8m8$ZLRj-$V~t>#$MRf%4rC-UX;blz6|ZdEJ|IzK0RN5&8B~ z{QWvUlW&7r);r++CU`rEw_o$Ruh(^)??peN|63@2J>q2_yK8iO1>#501{)~;^O^XS zI=+R{qi<-D=Dj2n->Bo0h+nu5Z{SnBTg4B%Z=q<}#(NRpgYp>^|65E#D*q;({s7{S zpeRdE z+;ojdS7}MNq8OzYlSnrg{(v595nvmE-3NV+qOHAmDOq=u9ogeq;q&kIuJA1$DX8`Z zb`@6ps)o<1^G&-v??ZMKFc=i@WDLqG(s>#q6ihbtR$$tuOuL59+EqAGup3tOZWLeI z6{^$vZQRdSpbQ9p{LyEkd+_Q>JFdOw1DAT|ZkppOT2qWMQww|_=8uEmA$w?Qzgn`R z?#9e`Tv_bipl-sxqK4w_nFuO0*^;**Cxtg!*5aD-8FsrHs2?e=2n}`!aoyRt4js1$ zaSPyMI>m($*MqoHPPfY)mAXSRuSZ-ePrB`hJBm1aS!gWorTpN_zL$|H?bd4Fn9Kd9 zsufzMx|s5q0582`OJfaoH{v$Xay;+7j<^tf;nR^*gm##Z*YoUhsQu}qpIwN%j@zH- zAn3)27y6NzgT`H+rBIvPNeD8itUZvE`er(PH?C3El*@gqEUX{5cOvc`#QlKcRNsUU z*--56&a~$f;31!$_?4clmvI5y9!A_=#Qol?BRto(dM>k!mD=K~ktTsO)A)JS{kZmi zW3JS#-83#nXl(AH`E|IU&KGdE&XLn9dO=UCQg_FZ{zMW!CZ+FE=||l4A;qgSl$5uNGi^bbQEpKCeLBe#mZwY;m)%gzU~L;x}RQfn5*G zkF`h(@xf#hAK|oy?6TpcAGAgr2Yv+^4fqhAQB;!kd_Uq2VZHKY>R-gU-&T5Fh1)}j zTZ}c!72NlZeHgV>6h0QE6=<-9-$|!e|FN{&Y-us`Q`)PMHh?wKY|?H=+S>2UJT1+? z2atB-LFGg6Sb^cAQLp^1qqx|QcpAGRq56l`tH*(nzKL5D_5mQw*mdTL)D1l_95=D zLtGMZ6Nu}<`twTaKa@9T+{k&Ymgcq9z7UkqVN$FA@$*Msc=4rGzL0t1a`)w%0jckw zK)&;z!T3VH-k)Ir%Xv%MY0OKWi=nyfUDXwv9ZWycQZUV(;ZJ4fPXDlHmz&1OV*Ksh z%6?B0@)4*l#?Qex8OR-%6n6x1qi75I39oF!-)7tJ1mX^1J?<3e#rotV*62=ge#9-o zx_zyd$>WalyBcwcXIZDvXE9bn8s{4kw-0fb;hF;VRS&SxbAQ^tqI{1d-;>DqGOELM zRvigjeIMw^R>y9yD|WXz=}y>Dca#mLJ&sAV-5~jJ2jP5JbtIM5ky_g-MA^wDNOwG* zrc-={_co+QAl*0sH|a2R!@Sm_{s;jNJr6sGYwsrT!%mV@PH`s?*Mc}~A8`C>7Qb0!2T(wKGI_>Zn08&R^7n8l71lda|r+S`~>T9l8ZodPYba7fXOdW zuAw#SDq6FyB!8if{DoDtW_3>}tD5mGrTwZxdfKbmjy<0*a(Q;s63RR$U*ik3Au$G8 zX5I?JmNg>nB+`Bp`#}%T9D=&+c1I{JSb08Qjrsf=w!~y=b8s-Oo7t(G- zJ{^?y5YkGWmwp>ODy73C;MoiLzagG~QaonA0(OIZ!-)HCrNtRVL>>-xZo|(5_4+7+ zEhq1YXScNTROf>|*srC0I*<2-WyFmwc(fAsMzZ|*Aypp925-LX&{~benm*JYqqxXi=Y1d_23%>0Z54sAz z`3m$QgyWmG2vC~uV9S@-kM8PM; zd6%GQ1$ANtXlucc*owA6+(-Sp>T@VZ%H{dcBc6A8PI|-}F3+e}>~VYU@QR1rp09hw zKYBd>=@AoNFe1Yxi$HgH{=_EbgIJ!A;Rs1>GWw-lFS@f`r(j zuCM%o%ky4=_?p}E`vUQ}+w(}FIN|m@RVY4idtNUT?|VHD7K-}{m5@*TIksPSxe6X~ ziEp|J9&?EoS$bjYdv1I|j0$j#Vl9lm>G?OWM7Cy&bnZj0g4f*QJFbFXyTz^UMp+#1 zrxe4yI?&r)1xMZDQMW3c_xx3}KuF{;){}AFOR{=Is zsao^6Af%3`8zzSpXX~wsjxn8L>c5TSnT|1?Vmiv{PdC3a$>%l+GhY)-TVDBsnb&+x z{GJo|`3^$9wEtc3X;sbBt|!e+A0?bBKe$CQti{ z)ty?S^Yv`VpQ=4)Q?~z(X>{-X<)>8b^nH`J;@OIw4!i%WFTLRg7WBa5m5PQJ9-TJa}>xwqJXVh8T5K!e7(BYcxaWn*X2xb z!>}0XGZM##SRxReT1o%YoUHD3Jun_*{K;As|32Sm+Eu~-|Nk@80@F+M2(Stau>OXa zMwqrTO)yO{9c4Pkbe!n~(@CaNOsAQOtt#IVrhcXYrXi*grmaj9OjArpnT|0XXF9=j zlIaxFX{Mr|^JnU38eke?8e!VXG{H2*bd>2B({ZK~OedL6F`Z^A1~`AFex?DYA*KB_3=@ipxrgGy8MJP$Ca`>4Bn1+}}n6@%aFikNXWje-moaqG9 zNv2awrZkis>{{L7P_yB~1NH1586q zBTQSFCYYv}jxrr%I?lAU+&aGMYHB|3Uwm!*U|(|3zr3`fG;mdLP~HW4^J8D^^_g;1TnLo~O-m9@^!Z zHY4iVBhD40A2{LXi81tzJ$Uer%)(DN;q!&|2h3?a;uAvq0apA1QNsR#75}7gvgaO} zegE7kUw9)t?_1?uDC~Mm@g8xJNZ9mQ;o3{dO1T-AUh%(k)+JO5xA2L3x&8lwlaTvD z_)*69Fy6zsUe}f}PVp|3XDgRS*X|YIPWe8-a@xP71avAQo@ZRIm+kWVZSv1SMo#jN zvz*BB3I7n$#&6y2%4Kce&*4vbPyPQFr zoO!T!PI6F4Sx&vrVVASbCg;!c$XUd4{I-3PPct5|;maAf@2gw`ob*<^uf1KJ)o*C$1-+m$GuRiI<4+chtSMq|fG& z|0-}Q=jdCCe~}{MQY@fk`BMt$VEj7Z=km3gq<}lM!&g~O;7P@;-Ng4LzfYvb6yD9k z8VX5{Pb7Y=fEyU!3Y_Yjk`KPKcH_&;FMgsJ<#T*oJ|y`|#4&CMy>9(BaH?0}yNaLQ zL7`BNg(u}3c|qOFXT!K`lDNXm|F;7tIsQi#s@Ji@EJysU!b`Zn=sk6(_IVEYW$*|5 zJnz?XCg(umNq&gs>wYN(PVF$o{jS&D^j*uH=z^PuX zynd`w(cl5Z?l|HZh!gA8fm^Tm)q@jB|yISjmu`n#}6rdiz1?*al!o? zWqdbq(&yH96>vS{zXwj`9Dhs!?TlArL(8ch=yx_wcuL|vQSz@!fPC(a%fAIq@>5SK zJjU{0%OmFxEXPkT!y(YSq7*)feI}A)AJ#uR8~xsd$~pdqV$^zd zJ>#uER=9k(3zrY%k#jH)PQP1m%J;v3)3{z`o2LpeVNrP^zf$@BMiFr#aHsjDQSvjB zi43uvsbK}u?<6Sf$;1C`<`3*seDWPnTuuY0eix4_+^>k(i^5PjC%>;vyUjt5ZCU|_6GXHZdXM)SW zhVef;-??9w0H=QOv;O#*|AsvL{St?rx3%-%Fh2PUC4k=jq3{snB|lL2@;yde9s*AJ zF1FeENy)Ex&Hw*9^Xv5~x=98X1_-s=G%G%)Q5hBjm;J?h{t3o|66YHeX#h^;nPR^} z%YU5Zh`(3N@;zHzz5*OwnG^nyNB(svfYkFbl|=W~K8fdu5eM_&M}Sj($NoX3d6|>` zj^!twSHP8w7hRzEC%&zKPR471ll};vxYjaGzgvU~<%Gxc;Lif5^0Ypol6;Xf`{9P%ZZ%pKDEUe_XX1f>RxGR8DzLBE}U~yuN4KLwon@jmWHsGkh)0jGRR*uT1m@q-t$9)3pw_cK1{5>@`dPZXg0@p8r^ z4=MaT=5GZ~`6gKZs~D#P)SbrHkMiKJ)_9@GQ*GU|H1^43xT&4|-+xIZrt;AN}HH`at-l=8&t&H3KoI8P2z9mm9#x}R2{~`G~v572O#Q8p}K<#gDV|-%5 zihmb4$)DhPwufb1`YGpjuE~S{mBi6Lk0=3mvz!Njll<`~6%b?mL*}2FQh?64_|wjI zz8bin)0)W_fs_2npD9$^!#jXG*^LL8KlQlc*Xzx~&p7k@B@X}LcEzvPtyOvWBYE(B zEGP1?lGCe*_%(1Uzui78fn!7XG|$T$nBM?ScJd_KD?QI10PbY34lzD$^9Ksy$Pxe8 zi%PKG_qZH5<(pzXKa2B?NPfOCk(+`0P51ipZ&?25UWMRQK^b0V+`bO|_dN2?{;ae7 zD}Yn^C#IBKOhYm(15WdJgy(U%_cAmw{}|7wdYtZ({CGZPvwL4-{?Q+*^zye*xO@gU zwNHfoUfqxHFn_IRA5s-_QD{=Y=-lPWqXYIQ02>B>>GL!@Z2#_idg8elGKv z$s};nlZ`wepawEb1AhqkG_T9F{v?+;mq!?znt~NI$^ITXT@VMH^(6;t%EHmoj(AVh zDRNm`e=o6zo0iHmg(}sFQT5Tr?#ggucMyL8{Hg13xVg;0KbBV4c+HCHM#C5wY&YtS z4ojw`9f<_;Yfd&+8Af-U4ug@|n@;;exgz$mI!ewS5XMrQfiUXU~7n9jtLNm#By zdDzS;lS(d~SROuuBsjEYnPGHn-yRGG%giVB)ps-}gTaojwtfTW?R6&y>N~>CZTK%7 z?(EKVffTb8r||VBGX>w&B+=#Qul^l$u3RR@+Q>aPe@7L^iVsE|VLB(MU-EbKCkK*) z_*6iLh~iYk%{XE$hEnz#@)*1UVHnZ4vAHMS-qvG8alqJs(KfhUbU=xEV#!#vv?@>; zbY?Q>q#r(gQ5Iix_P6!MjObu*?+zp}-Ql3SZk%~Vr%W1()i74Bt6mc}!cDb?0p_}< zYmM+K23OUtqbvvF2Ay|_v)O7ll=jCuOATZ5_U#5vLK}$FF^kC^#!x`WVhEXoFlw)B zs$NrHgVZf+YP9f8Ej2Sb&MsikaeTQa_gPQYE6;PXUUN{MPb3WPsB2cPY!0^=E!8U; z!&K7*j&@9T;ylzXp-^38{fZi+thBte0)wPwC}8weAa`}v;VDZn^RxYGgW(|>jm`0L zoR}Bx;1X=yXvh*6IFqU`Zs4S=HadbaTfVZ=rE(BkMxT<^Qh&h^(n&tNjvLWU%`)EG=e zajMz|*fv7KG^Mnx&mM+JvyWLhg5{fI$-4e-oO0KX)AnQ!v@~1z^D22T)<*|28tw69 zSN`6iA! z&fcH-wO5ZTb5B&_=*g7>z2RUG2VAafUL$7|WZIlu4h!7d-G}xZvgi@DX>(TBW`8gm zYR0XbJJ5JIWQVP_5%V2GniZLA7iV<9s8ds6>V!FO#{rkHI%>4q{evnp59@FeA4i+q ziRE%eZRu~jk$Mg%ic;t2^qo~bE6_PLam=~#o;sY19L4}whcwnlF>gnuzoQhyG7u{0 z5I$7`J}_??&V!C6>#qqfTLH7V<+`TcUh2m6nRE1VwXA})%%K`RZSAq1=C+~O?1!y+ z2rfstHpTkm4GEQ(E>SRG(20h!xZy|_iVKgXjb>5w!A&u1!=X8QVh$65sri?#!H8=- zO*c}xqO(q|lACK8q@H9$BYRTKZ~AaSw%4`r6fHxIOt$P9OZURXlQ~G2jM7k7(xhBo zW;8YAHCR@^VCJ(jbVyE0l%MPiKF%9v+ z%671=9JuZ_n;t+@N7UictiIN1Lc6xqYMH4%*Iazm<_eSiQ%tQhGf8S5ZBCX23`4mG zQ2NcuE;Wxt8f<IRSi(kR>R)XtPdj19i4hWHf!Z4Jy@@ce>zP{ znuGauIi2w>#~8J-#V!zo7GFVT5*AXH*lcrXW+$g6cjeqi%VxcF<{KQSZRpeK=``A$ zPHc`Z$5#@%ark|IvK~iauWOFC7?x6%E|&$5FYW9Z9O%j|a!b9mSj3dGngobOg3+gS zYg>EwP%ubq*dB~ygWMrx+!=>IYq2j_%`VRjh4^NiNG~VVoRL7CWHTMghN>wAhkNHY zVP-{dYNg)5cZ@VX|f`GQMz35<3uw`2WM*{og%8Bm&%l}AkK)!85KwJL;Mxpzhl zu+n8VvWj~0)MiyLw*Ex(RgMo`3GXKB@y~R0o>{w2D^wWkj>L{^GX~{KyJcnt!z#wn zr?l&SQ27tGWd$s=^h&JCV0S^Kv#~y7{^%PJD7fQ3fnIW(zlMOJ*nsnrJ7`Q}_>%w+2zK8TU*r;)GM?ue<-$FN6Zw98d5_iQ3`ytE|? z?IoH@yHqZ(XX~Lydm^^^W&j1~$mxKl%t|>J&}OA(g_9PQ!A`LIif5F*9B(sq_r(wx(LOd0n-`s!2(ub9>tn~!#CiZaeY1n~ z(yZUh$Xig0Q;IP=5a$Sz>yG;Z>zQSM+l4qT@xLCwWEOB#3?7yunx$YK~) zM}tfr1XLPEoYu!}z1rJw*tUlIfvnW#Hgnfw_cCCFn=6e-15RJp9*pWv<(rsIPp}+g zQQ974L(66Bm#d_^PI0fHQ_JyUo>&ZLaQc7;Aww_%M?B znxa%LTR8pZ+&aVHu<~lq>3L52V_Rbc=P~Y*vHm6*C$u&aWS#L&4 z0(%1uFIU^z<`I}@yHPH=R-fjQOZpX=NiWw(�tf+NAC1O<47IaG)m^vti`OS-C7a z+yx!(%BRETSvt4CXT*!uPPN`G)A#V~`=V-V)i&X4qtZYR8B|@AyE@w;kl9T)_js@@ z`|w3R&LG>1>5uoeV1tc#Cx4c)vp0!V{Y};>x-1})9dfTBr}fp#0#*8}e8J^vHo%7$ z@kKS>Rnc{;>W&Y{@2pkS!w;ZUkR=;ASD5CeD!Bo^Zm@4w6DOp#tk0TqliaNHcVfl1F zez4Rk7|igUgJ1 z3`G3VXO?n@pt+_?(GV~hr@ymlGjP;UYiE+&?%3uk%ttlVT8}gOQ*k5SO0wCaQd*VB zO-pId?AmNz&&_zR(zIFW;0d0o>Pgd=HFf3<-?E@#4E3JMYp!o0Pf))hgx6>2Gnp;& z(}9)Nrd-At<;y?JVXTta)NIS#CB zEa)pe?2jk(x&&|I@Y^mkU%k;jzREhhuGhNjQ7RW3mW_d#d0|1w{2f|R_|J>%2=LHt5%X`DuMN#G1T3k9BjjW zjQQaWjpKZyST=9fK-XY08sDa7!ptKD^TN{D6fCE;V=~T*$J`0Q>B)>#6YW39@|))t zH8*6JplnDek>zRbX(^@St55Wm?3Q@5dcl(NKQj)WoI$X^GoUBWtc|d`5#?Dof*yg$ zAse(lBZuFo7E?LeWuKU{n_{^y@zA7+cr5UJw zu)8OE6~1#V88AY-L}_$KAA~8I>{l`TMNZ3&fw=xyPa7rRt3*#yl+t#jD8*&z<~Uyr z#5zPN9)jSOUS|b&951@HiPBgXzrflRg*1JKY&!5TRKAu0V?o~ymQvNbtxATzCOK3L zh?GUfr^AsKa;6dhk=e8l3<$g++}n%SV$JV`&-NNWQ1rkF) zRnY16@86n%dGM#x>+>r$)#p`$MF#%4gT57ig)2HcQm5DFk!kuCC(z~Be42J4J)K3V z@AY|-743GfnmRmpXr)Uf2ItPQOA*!*?^*s|!u_`J0p; zKPk=RuhZWJjEY!@KN%8MO8R9Ex*QtYg$r|feXg3OV;R9Jh5lWGreCq8*XOTks`+$& z`d(A|U86aFeNLOE=5I2R44qEXZ`so8-|K1m+Ga|X4LY4h9>s+@e|_$orsrrzruO!u zpQ})M-T#^M;igrB(Yc(EiQjrFzK45rdVP+Zrt}S5bFkft=WOZ6q%?ewkm)V+&8f5c zqtTaa>GipEnx--pQz@vd=I|@r`0z(#n1VjP?(ioSXGo&i|Fr&V`g=sp!=FyC&$%n& zAB1T>EkWOF`aU8kC!IcX-T`qS8_p!3yo?g3`b zKXbm`r7AslgG_5qujR}GnHABN zm@u7FxZgR64Z~#70;k3&|^;9zTn+1fAYYZ7L@D$2k8<{s9_(W-OZUr^}=5 t-`T))*=0ihFHx;>_&R=nWez%DjnQwsoYJ4&r#SiNYnolwHFJZD{|Cr4YVrU8 diff --git a/src/control/unitreeArm.cpp b/src/control/unitreeArm.cpp index 3d4b63e..46d694d 100644 --- a/src/control/unitreeArm.cpp +++ b/src/control/unitreeArm.cpp @@ -27,6 +27,7 @@ void unitreeArm::setFsm(ArmFSMState fsm){ void unitreeArm::backToStart(){ setFsm(ArmFSMState::BACKTOSTART); + _ctrlComp->sendCmd.track = false; while (_ctrlComp->recvState.state != ArmFSMState::JOINTCTRL){ usleep(_ctrlComp->dt * 1000000); }