From 0f167a5e3251efd6361323f20af7486905840f6f Mon Sep 17 00:00:00 2001 From: "PANIK\\chris" Date: Mon, 5 Jan 2026 12:59:54 +0100 Subject: [PATCH] Added driver name defines --- bcdrivertinycan.cpp | 13 +++++++++++-- bcdrivertinycan.h | 2 -- doc/Install.on.pi.txt | 14 ++++++++------ doc/~$allenges.docx | Bin 162 -> 0 bytes doc/~WRL0643.tmp | Bin 15726 -> 0 bytes 5 files changed, 19 insertions(+), 10 deletions(-) delete mode 100644 doc/~$allenges.docx delete mode 100644 doc/~WRL0643.tmp diff --git a/bcdrivertinycan.cpp b/bcdrivertinycan.cpp index c3a33e0..0012ae3 100644 --- a/bcdrivertinycan.cpp +++ b/bcdrivertinycan.cpp @@ -36,13 +36,22 @@ #include +#if defined(Q_OS_WIN) + static const char* cMHS_DRIVERNAME = NULL; +#elif defined(Q_OS_LINUX) +// Linux-spezifischer Code (z.B. /proc Filesystem, D-Bus) + static const char* cMHS_DRIVERNAME = "libmhstcan.so"; +#endif + +//const char* CBCDLL_LIN = "libmhstcan.so"; +//const char* CBCDLL_WIN = "mhstcan.dll"; + /** * @brief Destruktor. Entlädt den CAN-Bus Treiber wieder. */ BCDriverTinyCan::~BCDriverTinyCan() { - resetDriver(); } @@ -72,7 +81,7 @@ BCDriver::DriverStateResult BCDriverTinyCan::loadDriver() { qDebug() << " -- Hier!"; //if( ::LoadDriver( NULL ) < 0 ) - if( ::LoadDriver( "libmhstcan.so" ) < 0 ) + if( ::LoadDriver( cMHS_DRIVERNAME ) < 0 ) return std::unexpected(QString("Driver Error: 'LoadDriver'")); _driverState = DriverState::Loaded; return _driverState; diff --git a/bcdrivertinycan.h b/bcdrivertinycan.h index 2c0bad3..e6c42fa 100644 --- a/bcdrivertinycan.h +++ b/bcdrivertinycan.h @@ -55,8 +55,6 @@ private: BCDriver::DriverStateResult setConsoleSlaveMode(); - //const char* CBCDLL_LIN = "libmhstcan.so"; - //const char* CBCDLL_WIN = "mhstcan.dll"; static constexpr int cRetries = 5; static constexpr int cTimeOuts = 20; diff --git a/doc/Install.on.pi.txt b/doc/Install.on.pi.txt index f904c6e..14b4970 100644 --- a/doc/Install.on.pi.txt +++ b/doc/Install.on.pi.txt @@ -27,12 +27,14 @@ sudo apt purge modemmanager // --- -$ sudo chgrp pi /opt -$ sudo chmod -R 775 /opt -$ cd /opt -$ mv /home/pi/tiny_can_raspberry_790.tar.gz . -$ tar -xzvf tiny_can_raspberry_790.tar.gz -$ rm tiny_can_raspberry_790.tar.gz +https://github.com/MHS-Elektronik/OBD-Display + + sudo chgrp pi /opt + sudo chmod -R 775 /opt + cd /opt + mv /home/pi/tiny_can_raspberry_790.tar.gz . + tar -xzvf tiny_can_raspberry_790.tar.gz + rm tiny_can_raspberry_790.tar.gz diff --git a/doc/~$allenges.docx b/doc/~$allenges.docx deleted file mode 100644 index 3676d3dadd8a9d46a3de0996e8849b0b60d86571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmZQg&M3+(W*`x;G9)u(FcdLlGC;KYzGY-M@k37U%yByf=DVl!1%#fd9r$akCvn0~ zVdkCF`D{S*VPYWqjz(i_24{+z3{ZZ`ms9y{p%!u;_v{pSKc52Y6#=TBquv;60HguW COC_lQ diff --git a/doc/~WRL0643.tmp b/doc/~WRL0643.tmp deleted file mode 100644 index df96f2b062e58221ad00808d4a37e7624cd0c404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15726 zcmeIZWpo_LvIf|aEM{hAX0Rno7Be$5Gcz+YGcz-@WJwk?Gqc5Ht>(hs8Q*zl&;EX| z`c$5-%KRd`sv{#JGry1#2l<2o00Te(002S&Q>?YJ5fA`S2nqlo10aCa`K_%S46Pir z6x0S`urcC>$8ci#EhI zc?Jq&krKG$%kTKrwadX+NW#c6GDI-B<~|9*=s&%ZW&w%V=uCQw{x!)rUdxo7dUh=I7VKWP73)SNsyGC82o59~PWmCNxlV`83Uoodgl4?yS|cqF#)Qk3lU=z_H8WL|Uv%oI<4a zytft3MHn^$U!sJ17{sX!zAdc;)j%I{w!LOeC*ukC~ktv#K-8`2lsrXLlzsKl-pzFMY6cN zBV$Uw+g`eT+WnkKw6pXJ}zhPxnXpf5Y;B z@mT!RqgTZBehf>PZ)`QuO*$s~F4R5bB~5$g4|ci@)BumX?4uk9CE| zW@h83-0U-i9JdlQudtF7VZ%Bh7oN2G)n7VX0EvMeg^Vr>Hajrs2lqyAqr{?=qyFKl zs9}>>V6l%ODdRoJ`&0t=`^C_vM3j?r`Xu%FS+_iHy#{(tm=+&rMC|Au`EC9Ao|4 zv~AqxLi4X$(*4tc_)rVudW%}O5ZbWU$LoxKdpOE3_+B0*V!K(_RVF9th#g?W{`02s zsCPR?x2uPHqqvxvIgUbOMMmuT!V8gJ8Lzv+@a47(1!H0JeK81*>{^Y-;}qz5xamg8 z2Nikij*0~x$7!uCQt6`>2RB592W8u-p@2_s%}MN(r(c$}MNZvUBH3(?`xzP{W)m$c z0JO~Gl;~%=(LmB*wUUz#(Y{ld-|PY)@c6gmb3;m1aDh~ffkc&rMebciHZgEM!$aZ{ ze?BDK)+c%3Dj>Emi-PSiRi(wBz}Au_w0`QVpm?vds3x%y7i6R!<>L~Q_}0YGP|}^z zE7G(=sKCLA*~?f?rcXN2L@_>YGIDxd^fq7Bna8cwyyTame@?oHRykh-j>G4j z-(IG{{LW4E38bNvz=<|U=CN&(HeO8as%y7iz@9*ZW9rEQXbKS^y4<5vJ7~j>Vbqqr z4pof7QQ5>{UP+OmN3X&$1LAjguHiY+VooUSV_+dg+U#1%WwQN#}yMBmv|5gdBFwhbj89n-04l_Q0%8@OZ z26qgG?&Z$t)1INQZ!>k+QU;y4?d#q}PRZp})C0c!wTf8Tt~*uc+aX_#oq-g0N;}jW zJ|m>PT2h5pjnr3UPuQ+1X9;{i0s)|)OUZY1r8#`e-3+?&e%X#5rm&pocp2*?0;hh2 z|?1KhlQW%4}d)@d5;IvTz|AyP~fQ_ zH@77v?kjx1RaRUp<%n@z;$NEcW8YU^ae*YNs<)IL*6Z;_*IR_YRZ8+_gw&M2o;K?$ zZDGAoOA}LV&Tx#_te+mxoPY?UC0E1r!h>&~!jko9*)5Z{^Xm5(YMB zDH=rjMgh~s3E`R0%{u7?1}rE&X1wz z(#o5B6#o+>43eeFg;6hLsrVVl7H8tQ3?0 zpa|O>+568d1zhuz_h5veBvF^h>&y~yOHsF`E3`-(I;=PY3^06x;`&eOJwr?nGh|=6 z$P2#Ve-6FCq!a3a3fVRLcpUw{z(oM+7p*;^fTJwbfi8W)Z~3>*CL)yK%bK+<)M;b= zVS%(~Lj#NIiU?r7l2e;Dg?cZw=U@WZJU{)K`yqe=ZdYHh@sw)tADa%%yGEcqV^jd9 z{c`0sddL`qa(r&(Q$qvyZ%6B@S{)Dbw5v_qdV){bG|CxEWU<(07mFdNUr2%`(G<}f z&PgEWs0+KlX*_wQm$E=A{YW8nXZfiYtKAs!VBB(&fO(=xTRu2Xt~LuQKfF~{6rHJ) z$U8O>(rQ;V^g7A&ctaPwqLAKPyfpJLtoI{JX)%bWv%M;np{N4k#7A_T0~OZzt}&LS zuwzoim?R>s(89za@=K5&%|3@K`L9=gE=c`Bm!T6vUJxRb=Pqv7VQ70=C>l-=uV-+5 z_(9oU&d8EI*8IC`$53i3;O&TDM`( zhjLsan8gM}hq^|u?yWJhW*fFi2Xz+TSps^nf?vNWGS6 zU>YxHI*bDu--^GhNU%w{?>>bcm_uqAwK^9N>m!-PI3e4BQA@M4)!i|E#Guz8IPWt;rtN;Ck7FmBC<(wf^fA_8t!xbAfnu z_SJ{nMsJI#WP4-L=rf0b(4(!%pv;Y?7GDO0YOWV}x0H+PJ}I7U=mA+Iz>aVD&HMK8 zK!`CQ^b~kJAKVXUKqdS9Z2oHBNfw>({O4&ysd-Y^*e(Q-SwCF4uSo?Xgb#X96C3wq z1_z%EFzt>Bp70rjtJRLlL(^3N2e3XkBKefZZmiB^Q~%NO5HS%z6;B3oHjDIA)P7kr zkoPXfjHtC!G0x(R>;tiiMD|{O;>!5Xx#~CNT@5dCI;X{pT1}6<&P8)IRjb~{q;NsH z`{sI~kRmw*l}hX((sX>Tam;ayWFufV-pOa;N3A}g1+F6j4JxX0v{nPcAH3fNO(8cmE3M!K zB6eHadvHEwSBUG2xqR-ekJ0P!i84{Ky(oukybZ;j3P>LMLQ5&K_>)&DyH2o6WR}!< z7Up|3({dHsmeU<^jULVw&vKLLGnBSvfi*&xj}=+SMvVcnJgx zRR%E5orWh`{l=MND4m4|A&0s>!dMCdiqSQ&O+vR3+wc`md~R(Jlxi8|@N$~JOBm#J z;QmW?d`1d6g4f;ZPyD}Cqk<{Rz!@+Apq~H$K>cX(4>fWyF|;(K|3}IAk04TYJRF-H zr5pX32gcs{m3227!MbMHiEYFRsV+SMr?H7EztPBm#Fd@wlbGE}p^S()JnZcPKP4>7 z)Rg#pN?-un8}V~N?N?&;3$kU{fI4%P)7^(GFSpC%W7mVx`CvxJCI>x#068RPo2gFihKtKTpzHX;RV!maGw^$Df{dx2|dE za8#Lm#>1ll{W|$zc3$WOn`4K&SpHzvxgwVhmeUJxO0#2hT%h)4A3peII-A$7eyKDD z#$DXq7G(W$qQAvTVd-Z6=*9EhA_b&S(i`^DIW4oQRNH^X$P!kYzOh|vy~kWeK$J;~ zKlxRSRprbH5|gpbGLYS~TD$tkHfC8$c$EToY`Pw;P;kTpP)=qzi73wJ^esdz0Nu9) z9Gji97zV$d^qc@l3_3-zH#yW_<n+I#2F377n?A;!B2hlw5 z;+-reo)0_YW9Zf0@6XlQ*{WNXQE)%6JdyOb*ZPJhG|~FOXrZ@2et99iAQHKTIw3(N z5RmHgJ{TC}SdSwJqG^DqJ9SJFYA*RK76pTCcZNul)&i`BYJt`aBb+drFOG}UsI3D{ zkyg+TXSpuu_=KAp{ZZ*3ijYIx_2e-HmU3K!{l;WNkZEvPhleoK2k;Q|mK>8|IFKz! zGQkIq3G`S;xIZ)GQ6jI9F+Lg^5kvf9v#599JZ3PH-y9SsLz)1~V@piIGU^B_LK;*W zq9}6RgNuue+}ntNhw+Do%z|Syl(G&9tQlE5VD`U|6k&F1zMN6DAZjJi$F>7!OcHil z<_MADssJI=-)gIQjd zt>cTUxu$|69)MWq&S8N4cs8MgGzmk>xRcJZiIq+`>t9aSG(?RX5vd^7@}@M)DmhsxvW_t!>%;#4C=IaJi%+lsE+e-)*v;k0kbk1l^p*jNNT6Sp3 zZoy!YQfsWM2{Sv2a#&UhNwLy5>c;5zYcu>32Cet2HNUUfZo_a~;)V5;sTB+C={Dtx zl0A%0hj<~{ZE ziSxuqY8{k7QiKkD*1JMMax*^c%QMxTmN{Xso6@$g?%CfXxMNs*kP||%LYU#-FIMo{ zUbla^CDTt^tx{=PRM40lo&^ilXh|ip)5YlBul?dN(Pd>s$9hC5Uol(4&K*>(h@?6K z%fjeB!I;rn25$ytGGixv6%Uzq{pl7mu@nI|K8Z8Np5I%i#h_&OC|x>)3I1NBp%(0JvSh$Up5jgdh?xQ=Uio|Ru275Tq?v2nEVJ{P zsc%n4aD4j(%$se+(50aoGix@!CF-+TJlq?k+4_n5p8kqyZOZnV_OYjI>qy4k2zGOI zgD_@cwSj7EW^$avegw^HOf2l{h=-oo6+)G51Za+h7nPk$M&Q8+Pnso4#R^c8s9udW zC^TB4MXBGS>FUP#k0m~vwnmG2twK|I$xyJqYW0@874r34D??juRwuc8wa%R@;Q7lM zpd`OJoO8b}71uvuyMOJvU*OhCSV;z>p<~hnM{lh0GS{wB*;wIxG23v2P&tsToUv9) z&s57*wS0iqYM!NF@mDLJssz2W>c)PIG9C z>s2-sFZ`N!og>#Mx+GlTa(NP``ht+vyn6;6>jV*10g+e&N=~cV_bz_1hKxdr447+w z!OY7wm&a?IPWSik%R1r-MR{4E*QzKmBAO5qr{gq__MXfcU?7$#bNcxQAELXlu3S%bu-zkLC_%Lw;wH8 z4i-g`^qYuG0gWuHpBRjp<%6UZ)0bqDO==)m?^iF8-)SO)mSxG98xn*;)s68laTF}P z-*`0d1X6J&U(L4E8%teW9h`<-U55;WM=LHchAlt>oyLL-Va_I~eCau677kuAMrdEn zvj;t}-BTJ)jn+OOa6QnGiy2OSN^#=mtKqumzaD#)fb%lZUUK=_W)OvAVqtSfL?2ph zZekhBi#h|2rW(CxC>jZWaod7>O*X28s!TElvO$z%9(qFa`)cH7S5`(H2SwL14`g zJCNfRir$tjC80#uDDr0_B2q#V1e+6{qww#US7wE;p=lQa87adt*xI&ki!6abhbl3c&V`C#&joT&ir~Yri zUmEgKD$Wrreq_aBi+Blk$ChJxTQuZuO`pGd8(h_Y%BezlVvaHDOx_D3nEjTzL6O24 ziY>GsM@2fP8R^SujTVtaDvRI)jGp|BzHDG({waw7#{W8Uhb`?DbkxRJ*gR*yzmY-c zYBj6BIvRVqWt-7cw?qFNT|1BgT=6jyeG%QV2<?7%_vqL zVUQ%B-5v}+Hc8PK7dB-|6AHI|mUb3>Q-0m={#z5HilgUu`Y}}l{Rpy={vBsqIa=x& z+I<+AKWxm8SU=@iiCAm#-yS@`&ws1QOZ@I*jylN66`OuI4njdi8g@hgG6+&2+QrR`y#>wNpw^UDEvOMsizJq8D|q6NJN#060g4WK zz|eveM+jSOcg{$XJ+=ef13F_MN-^!O^K9$S8^9BN1yP{}oNnL`$s8RDGb_3vGtfs% zDsA=>zOd1frEu>!tERJJt*UY{+RrJOXk}rDe@=Dd9-9PXZ>e}gQk0XwMMW-{j=Q9S z1#`yV0L!IAHA;ho83OC@@xG%{Wnj3C0P4bvx)up1=W8D602B zAhmF~i=dsM5H9OH3JMAS%xY=t?o=RK>!nHH5tl~;$MW;b$}Sf8!G@j_CuyX3gf z_o$c47PdvyXW(=2giNJ!6*m`icA#BQSk z51tgBr)8}Vi3j@m^Lgz}dTeGd;XP9I7F+s{!|3ZvH_8%}G;OL2GAaxbgb9sOh>6xX zbZwp2sug!C)uJN@m!df-q<3|iy}!Lp%B=Sh;1#cGGpxSW%L$id-oql7v-rE?NiW>06`G6Ph6t)a`!U+YOC+3WemVq z6WheIAw@*UoJkF-?5ty;kf-~X>Ux&8LsvorC+?MZBWsjvnxxS0R+GZoRvTv-k$HIr zs(o^)*EiF|^g^574~yL%FIROG`0`o;Pz2Ok6FWE44K#=J&d%X3qsA4FLKCh!*Ud<_&19oi2g&5%q3DND~?(XEo;PDTu7?qSEaE#Ud~n5<@1zTpWeBwsK3=k)n!}1;o!) za>L>+!>Jefs;@uSEy?WJq)_AZzRC>t?J9fpp_!^4 zRX-K4c{*~QUFz?WX^^1aF0dRE10lRN13b#uM+m)!e&2UKSn(OM}?^S$QW$ku{!R~1gW zY^ad$hNJcLpwddi-fsGQ!JG(Vf<@f;Sy>qLBH?>?iz$`}{d`Yll%8Y=ywniZ!;nxMX{ zEAbkyQho2?GUO!^SJ+}-?AHUBp+^Zvn&3n)O>yAS=Gt<}@$R}L_zYche8C#t9sa0D zC$bU4eCen;I19$JwjMsmBkr?l4-Q~hyFes>Y3AGt-gX*(__(sc3tGkP?6+z6XT@8T zYRq#MGgAGmVu(yRCXvKN^|ZKcLL;w2CRo@z>yI}niX{rrCr-x>0nZ=&;cN z*t8NzO+(Pmc07B~Zf_SW>?&nw!CTy6(>DWV@My6$FPbJ#s$b0*FOJnpvL^KirAu7o%NG38Q2^1d zmoEF5v8Hrla6x)Kl{M!$?<^WyrQJO>_WJXU_xPOf`GYsInc056;Jzup^?`JV+&Na9NJB( z1ag-9%3ibL)6d2?)ghxhNme&n_b&A2S*EruI^~yB26FezB*nfiqXkVJ`Rr_kZevrX zmmcKW6h+iPo+6IVXVw;6ZsU(7t1hhZD)n3!rjTP?$4wgJaf>w4?rMEZlWuBQnN_My z$J?l5msq&l4ddQPpR1Od#={p1kTeHsyVL>8$Hkc4o;=r& z=ZsW8^L6(2gpVt!c?8mXxNqEZg`Fg(SoUeNvjDc65_#@|6WM4pRjbwOHYe}-RnBHR z38-9V1E0^lcg<)=A75&nTdw(Uqd2`nHh{jvPg5hgj>{5`M9*-tJrTNrQ}TTJqSlKD zgkG8Rl}?TKCB_6)mM?GKN7V;E@4=x5-WQE3;2X4Kk3=uLFA^04JQ9@vFElD&P9PNF z6ki}RLxxQ5SE-UIZh;a6(vK6ARsrIlkbk#<%~*9G_YZ)Q{b-J0lFJ9tAT#b^>+}Bw z3q+vE1->E3l-@UqG{jud zS$|z!P3>X7eH-9FouQF+w<=$>9VbRC!OrH0Xu49${%J!55ZnLtr!qrlwtY4R_G0E&k9&Zyr2K zBRtz~`mVtofV+kkZ5}in3pbIzF#Pr9*x<>7@|%hMFjikFe(pFep|T=JP~VYw8h$Rl zyH`LL%QK>khnw!zz;o^t%u8-xNf1-N94?{(xM2!a5s4`eYGAE-R+A2q&+;;aHa za=3UIZxFl+ASpIwgbEDv2viYf90|ImK@cisguqEBz94nzWEo}7B%0D_G<@rmcS>AvBf*Ei_A_y%Y$FKUXnA4r~7qrwxq}adg z`sh_Bpi?()Nb)RC+!d&u@fVu9XO@htxg9-ApC!71I`8cZ2fBb3fYP8hNuP1u+~T{r z7_n84+XSq{8JfKlOY7Qo&Bs`Za06+#hq>r?OzFt>xhZrT`x7Y*ekja(&1vdQ&`}#n z89l#+L>f03D;S#%em9GgIIcH4rl!>M2 zKZoyxp&zW8Mc3DQb*G$!^S6(ruKqmxL8-FB&e7Q|olN=}OB3^BE4Ox2jV)r9T)SQW z`E@1B);y{F>+bFL*nXC6t&)dgwLkl?Fnz?q_#hcpMs!Lj=#b|R-8Y{w;5H9^M5Xo# zMfR-I_K9Wv#_?U?^`o9sAv&ViwrO5?cD2O=WcQ?1?&{h4GQc(YO+|mu8_ap_c9!GO z9nHfQc&Rb&FWIlkCeuEW<(WBe9F(Yy8{=T6S~&;!5#>=bYoJ z>&9g@@SZ~uAsfa4Z|{kf>oV|I7udsEn>Nw5vCl)-+5PMh7FpU{m=~~4)=Om8HpjH3 z>=|74)*NN-{)?CqQcYMCQQAk|=~cPThH9UOBB$Elv@lkJUIt4S>DTf=OSLn8QNHG# zJQu?ttv&=WSCh9u!jzI{e3h3z+Sw@4YmX0>f2)or?;uK3?7DLEJC%`>cDV+>3n;74 zb}0Kc;mM`AH+<1}k)_xYZreM$=}h$#N1BG-SKEcn?q|$#(n8w@Tc>Ldx{nsMxjf)C zDAKizZmr^crF_>DZgF*Y)Ygnr8GplYWgD-dnT9&u!w^j@vs>=&spo9o?xLGzAGs3O z(aC$VW8QxEb;(L*yK!7%iOcq2$vmQpPl;o(z~)MHz*@(hvZfyF{1JB zqE;R16~D;kyBS56Uc271*fk;Jpw)Jw&(8Y-6JKT(;aHqY+u4jRwWjcZLo4c3m;Gq5 zvGpo+fJ@RDkruW1@BmF~j=)lpyhOM<;BKS{@GE}In|C8Q8F ze|wN9yulHv4VS1a$UuzW5t`>2D!FMWhwh}PE9a?1=_Dxn?s#R7YuD7U=1eS>^%0R* zznYw!#0YZB3$6a#=n{vPEqB%lo!D5N9kVZcIYa9D_0u&MH=0&V)zQAF-L_Y*dE4i_ z)A&kev`nyQo>Q@T?b>7cz5L0|ac?Pd`VO<>s}T7dsy}R2pFEPGn)KOK%wZ~zb#{vp zqql5UW^!bh)`g%H>4~Ch<*1Xn7KNd4c+;jF*!A{ZaV^JrGSUN>P#v0mTm=U+!}9gTv-Sfz=^=?RUhh*nvr-FC9N_n$g{6nk`hx8l9&RR;pe zDC*^u0WobZwzxj7H*7{7C$#pwNwIQ1Mt^1#vxN2wCOjT~Wn%O`kJPZ&%v~Eh7y8xi z6(r*=BUQ{FIbA?VU^D3DI`$AMKC@y&d-@C+`pXEnf~=z+SsvRSe8r1783q^qS2=Z! zWYyf+z;jxNRmYNoRPZ}@yUP@!&`q}MuO7vKTfu;NY6($26Gw9-RQ};6lSSjfh{9vk z^x0d26lbOAG_XO{x7R`UiJJ^sqa1Pb7iu>*auRuS7YV8p4L{$0>$}p&i@)bmUqVqz zNqulYygrs8QU1No;B2TT|EG*LF3hmjkj^T2$nks- zX=_|~`NizzN~!&$-b38`!!8}+&Hlvl9x^cIZ7T+>e5}u+3P$(H;LEBR12UxGKD6O9 zKi&N|z1Eh_RCZO6Q{|9YX}P|z;vdHv3XBV>2?f+PVL>YXhvP{8^0CFb#F~|oF zd1Oh|E`#TU5sX>}%v(rw^Q%+)sjY8p~ZL9(3iB$zh`Lt|lp9`e7w;3|1v!kh`4SQ#i2C z#F_Nt6tp6;+wy*@hSM~2T1zR)JxEH@>>^ETmt~g>s?OEbSK{EOha9>dvkOfl@tf8a zi90T43tg{&y z7BHHc^z{o=m$7R!wDMD6_%RLUX8#~I`VS7|UU<@wjveA5WQI6D$U}Xu@4@$Ly!E?b zvA1;fyXY0o7d-lIngzH!4R`G!FB&nCiv9{2=<_8Z8|37unlt5k_uQ?rgQvU|3XX&P zP~IpH%Bg*8Hk%_3KEd1eJJm#&Gg?~cs108k!~fnKh;Mbhx_p>} zw-1#>{2-8hu*PKUtZnS+^{wsxp^YC27XQZ@`>>M{akA1MHgR}U@)b^eQItX~k%qy6;l!h6v>UFyLQ@vP@d>3qO|f5@kt7Bsm^ z@;%4T@RuT6F_gVfl{$QITi;pQyTn>WTbiyc8iB%*G`12G#9LBhaHdHTzGU%_to0y| zqARZ?!FZZ2&M|c9n&jL6DeNzGVTPD4OQ<@z9@e8Ga(b2CD; zIHqG`Nz^u=yw=$wa-(v(-57zZC^M6Z#G1RrpM4md6}O+4DO;h2BM}FcmeB)J6`RbB zUc0}6=4cw$+|jr4&23tyX`abtbG<4Fzr<#?PVeSWYo zzJ=q`WC(_S@1cg=`DNp}rd@H-P!oU0GqMwOG;?d>)=m`Clb+bHkVR#kzua#pRj12> z6D*4(lyAr-W;G;=;yI^&|2*lpZ|mz#y#e%@+)}U>u*=dvmST%{!rJ64|PTO zv%2cq*!*ET|4&;#Ufai!AvY%V!Ex*$zJ`~*sEqeRP*5kHgRE(Vb&l?1=5hJ#=daG z6D!YG-@`4gpaMoC0o`3HYx$qzLwOdp$hK1Y;_)kiQY2>l{TiC)q1fb`oDHG0VLN`? zgt>|(MqVU8z=!s^-;xzRFQ10DpB#lo^9N?K6A^l!v5#xC&H-V|mS`Xq&EWp@+p6_7 zp4Qoe*5L=LrYreAR?e)$4|%Hei4d9e`!F@~Ad4@JwWGm^K ze8s&*ya+lR84Gvi-844Z#K6Sggnj>b=l^8q0s+&0#8rQvSo)8@=1;}nq?yWy|5dmyg`Z<(gQi};gJ z??&D4;NRoz|A0>!{ssOm`u<(Q?-ApFB$zY(OTu5`$KUaPb@Bf}0|3t~0Kk7a{NLe! jHMxI=m$Lr}{x1V8BM$nZUH|~h#|P*`LzTb$arOTI7sqNu