Date: Wed, 3 Nov 93 11:35:47 -0600 From: oleg@ponder.csci.unt.edu (Kiselyov Oleg) To: macgifts@mac.archive.umich.edu Subject: myenv-notify.cpt: "Standard" progr env for C/C++ (source) What: minimal minimal "standard" programming environment for Think C/C++ Highlights: posting synchronous _and_ asynchronous notifications, displaying messages: like crossbreed printf & DebugStr, but works without MacsBug loaded!, simple error-handling Note: _commented_ source code Note: The environment is used in the programs I post next. System: System 7, Think C/C++ version 6.0 (but worked for 5.0, too) Contents: myenv.h Declaration of functions, macros, and constants myenv.cc Implementation source code vmyenv.cc Validation routine that checks that everything works notify.cc Source for posting notifications Comments to: oleg@ponder.csci.unt.edu, oleg@unt.edu Explanation: notify.c: The set of functions lets a (possibly, background) application post synchronous or asynchronous notification messages to the user. Synchronous posting means that the posting function does not return until the notification message is displayed and the user dismisses it. In asynchronous mode, the posting function returns as soon as the message is queued into the notification queue (but not yet displayed!). The functions use the Notification Manager and the EventManager (via function sleep() defined elsewhere in the standard env to relinquish the CPU control while sleeping). Circular queue is used to store asynchronous notification requests. ------------------------------------------------------------------------ (This file must be converted with BinHex 4.0) :%'ejC@jf,@j[G'PQH5jMF(3!8%&$9%033e3!!!!!(5N!!!!!S(F"!3-G!!!F5B" 'F("jCf"J!(P`!("`#)#)3'N!Q)H@!(H!F!!!!!"`"fGi"`#)Q*PQF(G`F)F!L)@ @PQ9fGBKQ9C!!CfCiGj!!!!#*N!!!!(!!!!L!!)!!!!#3!!"`!!#BG`!!!)#3!*! !!)#3!*!!#*!!!!!!!!!!!(Q!J*!!!!!!!*!!!!J!!!!!#C!!!!#!!!!*N!!*!!% P-!"3!!!%"")$!$#%+5#Id"8%e+e%+GEPM*Drb&@cdkrUhV@[kY,8h0M[lRFSK9k 2qTi15@ILdEPb'3,dBlfYh2U)6mS@)IKq18iPQmr,f"ARei3b-fTkpHmdGTCR4rq jDeC)C-H1Tq[0p&R(ChB3hV@PUEHjYI0Uk-+R4c9Ti9GIjBpHp@MBMXpV2dp'&1p RITBqh0qk'hVAXV-crjrMl2MQCQeBjY'ciSbE2RXp-)CHle11&3ZZTl[lrhmr,Ur $6l8-N!"p2RpmQ2RprKpR2br2R3cYMd'kT3b+R$,KiTVNYH[qd-QeIP[3TDF(p0e YYMmHhAVahmFpc&042`al1$NL)Y#%1$Zcm1+hI[a`FNNm[PNhlFeq@l*`@jlYqA$ 'DH2GRQa6@lmhhbbIAVG[Xk%F9%@2aaF%X8aaiCBdEm5!MGaKHKieIYh2)Lq#A"4 Kj(HZ(JqRMcIh"A9KT`KFmNed'9)HBeRbH(fqR,fF0(MPZBU-)!!!!%)!!*UTT`S '!!!!!!!!!!!!5AS+Kf@*D(GhS+QJ!*LSUJH)L)L*!*H+F(H)#3UTQ3B%CP4RCDG @4'P89AH(UJJ!#)!J!!)M4&C@8(GRGhLC#C!!J*Q3!*!!!*!!!!!+!!!)!!!+!!! &*b0&99CP9QC@CRCSF!F(L3Q)CiD(Kh#*QBQ)#(Q*N!#C#3#CQ3#3!+#Jj2(QKir Rp2D!EJi1$VPKhADj3p(frE$CP2AMG5GB%FKmrTql(E('&FYqqQ'--GXS9aM1f1& X*6lVX+6h5RM$C6#'k30160QrP[`MfES`ZhElj%HL8N"LkHZr+f81(Gi!mip[#b* rhVMEG6MfriGK1ql8k&-,TpM`84`Ga6VTP1dLHC(@H6jr6f)khVTZP$X[TUMI$@( 6KaQ-0mX-Bh6#CKM5&dpq@2*6,%!kR)S8`elBi3dp&dmUbV$mreKjSF2kCJQ[pF2 PGL6RVM,#kZYNQ%,AJQpAlC4[C)r-XMc"P-EYDQH$'i`kr!*$GTjl`dqR#ZX'(Nj [lIejZEbL2[*b3r$d`TX5,DLU(2q29liCZ$jr6-"l#9DCB#Tr2G0SPfAAbXF2H5X X9Ar`k4#$'%C`PKJP5PDal*30BQ0S&!0f`MU&CS-JM*dheZU6lZTH'j[P$ZTGE$5 L!cZABq0K'k12Mii@H8QR3Y2lSq"GLBM'4Hi+mKq&,i9Pqf8Tka$2qIaiiIJ'lUB cEdDJS6[ZafSjPj-Si5*CUP$I'YC"Z3+@fh'D!V"&Hf4R!8L888+aD$$A'qrM9@! Z+6Xk(2idH0TB-E-j&l"&d",X8fCl,%,3l6-rjmpQErqD%1k1Qqi%!E#S3DLM9PX f5`r2QjHAPr8LS*3e''1FNfKD%XBVMRGM$L)ea&k*G6UPfA65c5Q`ef%R)ah4`ZM U$3AbRf#$5,S5J*k929)GE-kQ!B91JMjU8&Fq%pFF@#$Kr6$VTKKi#U1HJBCdbl0 X,UV#Y%2`iYd"GCM''f@%Z(4@lrdU-*kcb"("L(!Ic)Sr4M6T!b`,H80ppBEld8R h#f-ZKkBe&3(N[Zl6X`1'B0qQ1%Gh[PmFFqF&GFH[($qRhIFJYBYVThAN%)*CjB" +GFQ-Y5K43p!j+&Z,QJQd%FlUP1MPr&'GqS)Rdh9hhLbCNre8q+A'XTm)N!"Gr%& e3Yrqj#(1U3Y2+LGT@jh$YHF),AK'SJVMS0*lieacI,-*8#6i4'Ph1R8hGB8p0bL CGJKPY`AE-m'Kb(Qmd!pH&QEJG-FrGQR"+qXR`E0+$bPY9c)pqd9aGQAK$D(`hLm P(bABj*Z+KhlC+L4ZPZTKi-'`TM35k*&MY`592&1AIa"$9KXL'GY8pEGiD3-D9#H P5N`8lXZkA46KpBFNCZ'cj5Ui4,m0-kceq[Ji),ciHFmAR1FX%SQGVq-40Y[0a[0 apCZ2kiprq3K3+@8I[Il))fm[V)*'SFE2fmA'mA'mA(cLiqmq&pbBXH%p,Hk)VF( &T2IiPV+1I092U``pUVD[[qpN-F@l3KK'kXY1f9pi[Dpr9m28B(pmDUZ2!TkqImH X#UVjc8TjdM(FH3!GlVM@4M1KHU6$5d@919LGN6+JXc"bAe-8mrh6,LlKaUSji'H &-Jj6ZP2LaALcEpK[5GflH'RpS0)GiXr6$$r1EcdTI)*CTRLa&1er(R2$C3'0ldq -Z+`PMPK0`*3q45UK452CD(h8aZf+Ur(0`GmHSl0L(U6"V+4N%&%C5lC#FT@XCT0 1,Ed5Ed5Ed5Hp%M$Cc%m`hi(R5EU"%RN%`q2b+pc!&'p&Qm1Qm1Qm1Rkd@HB0K-2 HPCR1qfPF)*f2QdY,0hUhJ#lhE,$j,CJTQm-i**GP%qaFkGkCBmLCAFR)ePF2CQ" GUNU9i19CpH&@N!#KI5)&cBl)JZK%%G)PP)kpa8FVKJdA&1$0QZdpfUK1G'GQ6dQ IXFDYGFlHN!"rR09cb8k%GdNV92d$f48pjj5hjqEP8-2`flAJQj*XkTB-06(F2C8 Y@q%6l*Bqi%9[8Z8QILU)'m@KbHXAB[PdjEJBj8(Nd@#cY3+9iG2-%&Dp2@m2VbV [P1eLRFGqqqjIJ-DbS`!rVZfA$HZ2c4G5e2[EFRkY2Hjm*T4$db-1,0#)AH,K8rD c($%mcj6N15Y9AA#I`#-*$VJrE+kZeA13!+3p(6m('YcTJ5Yeh2"%LHGB8"[K$2U MVlH`*qBfTf01&+6`bQGEKiVMHN``rI%GpC[p$*-IfPA%CJD8[Tj#iZ3hlBMaiZe TkqTa62(Y(6,k[fRp4f$pK+`%4[9YjDIdJ2pF)fbq1ql#9['GhU1iG)2@1Z,X&&H qRD2MGP[AKUK3Mb0BlH!hQaE`hGfKj4eKq8HfA`hp1&"cbVRX9bd2i%0K0jXiCrN ma4AYURb#p4GIe5ed2r6%-(Q+b8S*DGdDpSX6j@-brb$pPBH1(iL,dlamhb0qiEB N5qGNrdH*!c3TG+f[[cV3Gq9dEaZ+4iR4(@'0TADAA&K(*!(H+p))c'mV#X2%ak9 Xr$4N[dp(2k'I2lSMmHF3,rj5FKeGjZ$-LjpQ%GQIa"+G*qNi&b+qX6R%&J(HZr+ Ze(2e,S-2"!c4!iUS9rPG1fRHSY)Kd5(rMS(Hre%3F$2T$+8l+jcZP8*HM,#Sl89 -B)$5(!*GpDG"ep!&rA`%c3X)a2MTFV!i!!#!0Q"S"hK`F!!!H!"`!!#!J%!!!)" S"Q#!L(#!!!!!J!L'#!F!K`H)L)!)H!"`!!!!"39PCh9S9PC`C9G`"i!!!)L!!!" `!!!)J!"`!!!!!!!!J!#!B!!!!!!!!)!!J)!!!!!!!!J)!!#!#!!(!!!!!!!!#!K `!!!!!!!!!!!!#)J+!!%d4$!!!!"3"3-50%#)Z)%k!+J6[al[I,8cFY&I*fq'k%G lEhplGaH2b#E[4i3pHZr4mYXI2Tk0@)em84Gk`3pS%kRkr[jq9r`I[DlNAJIUkIK r[jTjX0HRQl1c'cYr%ZVXA0DbM4b8cdB-(eLpjkU1#,RGKF&(Bp,6d[&J`5bFGFp Y1HZb9r0bb%2DL-ZjA6E609,44b8f"h$,006A9bbXYQVacD-FVH'Q[JXPNdCmd[9 jYcIPa9FGNV-qDLAPQR8rIVcfdj+CjQ8@'9P9&(&KNkITpP"@[ICprrdl(f"AAMD L*rA6M"QY#GjUILhRk[SdCmY%pZI3!!!!3J!!QCLQS!@*!!!!!!!!#J")H!J(CS" iGUQJ#3!!Q!J)"jS)QBF!L)UJPkU3!!!+QJ@8G@4AC3G'4@P89RChU!LJ#)!C!!) M4%99ChG`D(J)#)!*!!!!!!!!!!!!#4)M0&4&9QCRGQCSH(GhK`#)Pj!!ekr2mrT lE0HX!HMjr6aG%+jaTXMPXK+RGKPM6G+QC(G'L%!4I9#(6#1k%EVZ&FmGdYN-mE, 2,[bMfES`aTG+cbiAdf5[KEZm!KEGS(`(i8Nf*---+Cbb[L$@`ThAVKeCjB8l+`a [KA`hGH-kX'[pECH%0dI#(A+(#SA-D`M$C+H'l$-'N!#B8GE*Gi5G)ABdVR#lE(+ &[[`S$'X2qIpp,i2p&3*i9ZIT$l2ii4QSHBcImKcC`M5%XXXFSET9V(XP#1BN(B" 3$Hc4(VabcXlXCac`R+(GMKXKDKMTXd1+(cX3(-*R#GpkdGRLBXhP9bf@D1IRjiI 2kId"$dE0JM2'NC`MN!#eXm1f3Na4AITe@#VBD[5e+NJki+V'&r#iRF-pSG[((K2 C$H+%ab&e8H#c@Q%`eidV#S2q'm'-Qm2)9K'84'L*"$B+,8',@$'P85[0JY2R8bP &QV54A8(Dp5flP45Q@,[FKCLZ1CD#Iq3!8UYfbh0PdieV$fCCHd4M1@9RaXdIMMM -@4KP(#XVGXTcp+eMqK%NY#4Bd9G%#)d%5phVE21-DU`%`lpTd'CN2@NSpSdD#"i lF*L(Z-ZA+8*bTJ1T!4&QrKec`Zr#c3fh&5%,hIrHa5(aq9QK,E+bfIH@JXZ6e#G DT@NJirX$Mr&TJ[-%BpVC4pD3!&pdJmBAa&l0RVXq3NMAVp#Z)5M2e(5Hr`5e!Pk @5BlEhH8+DCGqU(l@#U[j+6qP",e`qk(i+'2(TAd&j2b490Sf(*!!mXZm!`aSGcS HBD2#K[hmeHARj1C4rpYY[ZkIKl,EHD&Y[jG2Z!9UjSIeeDRTNpdCSZQfZm1[KP) #Qr,QA*'Sh4rDc4KIS3Be35mB%T6'$'22c#plbhH96GC4lkEbYA2jLBrChbZiCUb VCdPKbblq8mB$Xk0abf@&q'F-TCm"p(da'('RrXaYiM1PbDrM$r(8#)iSKkS%Cp- -,p+#(Np5Mq#bha[8rh4'QM*kiiCl9k(')(qSN!"1BQGaK$j1Bk2VIaI$(2#r#iF $L-Gq06ia)i2+UF`"1-XK8EDcaiM23m$DHZ0hEfBm+$8k1rH0I&)3lCK$`+&Vi8Z fMhCM`(VJGqh3K4dZ9e)Qq*S-HPXZFS,UF-PYjIEe2ZGUUpQ)23Nf8[`S1c"4C3V iUiB9KX`V[R(`1P)[+aF%AhB$0bS[1M&kD2,lhBl*Fb'$'Qdb&,mCPM`pL"!"#f+ iZ2ii5i*bDZ,RK`)1LAZ'D3Ki#E@R4j050#aAI&$I`Y$mYia`cGmLpLq3!0`ZIa+ j`N-Jr%2q[SdG4Zr!V`a+'kQB&9X!rLk#0Y58D4mLrYprhL1!'fdMZNr%Ylih'1k l4GiIk,G$rBU`HGamN8QHQJ$Sc`rp+hhp(pfGaP,5FTEe`+IC`[2Gfe(DT2k$mj8 PNDLV`V[P5TP!IS)cZ!IF*N%l8ajcSUK`eYrlSLi1dqF(@KC`YY2hi0VpUH2dZDX dE5GikhFa[AJ%`H!6qTmC0lhmQc%HRTHLi*XIJr)U$-3ilDbR*er*VTUrK1GZq1H eU5E2,+Qc#q`!!)"'ChL(KhJ!!!"`#(J!!)#!3!!!F(L'B)#(F)#!!!#!#!J)"`# (#)KiJ!Ki!'!!!!J&"@4RK(GQ9A"99h!(J!!!L)!!!(J!!!K`!)!!!!!!!!!!!!" J!!!!!!!!!!#!J!!!!!!!#!J!!!!!#!!)!!!!!!!)#)!!!!#!!!!!!!J!L!N!!60 &8%!!!&8$%M!`K#mJ6m!9!RHKl[I(6UVZRNjHe66I#HpYiYlaq$aH38Gb(Y%(4I* DZIQfHl#(9rN)AqS%%+G$lqVTrfl[rRDlF0%(p,2mIpqXr`aGR2cDqY$@fqFZ0#& l8YPCb6TPJ`I1'MjXXYq&lCJh!3krSBJMiF'#16MUTZRA9E(BcFXC9FRBK$Jh+Th 6SbaXPb6Y$Z'1DLG@APMEG49MSXaaZpFkYqf15b[0(dlZjLMaCH1f0YHD8I,45kI f&YCdd,4BBfjC5iX-A*qIXN9VhXq[rrHVp!9eSE8)8m-mB-e&k@PpV[PTqHb[JP6 GAB!!!!"#!!#DUCDJ"J!!!!!!!!!!!%J*!)KQKhGhGjUB!!#AL)S)TjH+T`#(L)T iL3S!#3J'"@C8CQ5S9N4B999fPTN*!+K`)!!#-c4%9PD)CiGhKi!*N!!!N!#3!*! !!!!!#3!!!!!!!!!!"b-c0%499QCQ9QChCiGfKiHBPiLBJ*H)TiLS#3!!LCU!#J! !N!$QmZ@(Pq[KrS!B!1(afaKI(#&0F0H-p@%U6[KTMC6I#`"HU'E69UqHbQ-kmm+ VEE*DUL%X,DAi3)KAm*kYYe*da[K5k&6B3R6#@YBbh4[[Uf4[KK5'!1q0mEZ8L&m (!b)VbRX!YU#*`feB',&KGDNKA3%N&q&dF-ET`aRK+`LD3ZH$[#9m+jAff9F)e`U R@a#%&pdVl`8CB'NHbEiBIG5Z2'qd3Kr[!`KI3"!!J#JL+i2(daML$V+DQkFU!`k )Ra`0N!$J)fBU2&R0)&+9U6`@KNEfYNEYUQ$D)r8c2AhaRJX+jZq94%KLf[XM'h0 RKA(A+B68E,ilpXEJ@D"Nl*6qQ-VpTNVUprk3!09*iA8XK[fbX0R6))FNe!h-5Al SN!$6($I'-hp90YdE`UfQJ)RHU'Z8E+i6hGdGI8"X,AhBPIm0qBf4h%3"%iGQZ'X @L+N%ZBDNTq3Qq3R)iLaDN!$R$)+8EJM+PD5J38%5qL'RJ,cG90eS[A1I0-43U,4 $A2$D+"k5EXU@4V1B,--qE,Pj[+(%eIlM9A'km@9kV-D`F!'r[NJ0Kjlm,K$[,Yp ,N!#PG9ck#NU%%mZA*pI$lZEQKe1bLbhi"[p8,DVp99N1qNUiHkHKTLmhYlHk1Vh iA"aXqAq-Z3JKZThac!)G),(p3@%#6kYqZL(`'4@ZkQiN*rB#`h15FrN9#'A*'cN p,*RqL(34CrS"EfeAI0p&GFN""L32PrPTSlSeB4%MTah[)f@f6'B!Td+$QBA&KAk YY9b9Nf'fIem-J,AUXXS#@0%VDY3`c5`YT'UYc56b23Tq!b6)(cqf1m!I0I,pide S&mm1+#JKm-,[`mhQcjqP(8qRXP2jJImk`KmH&X3%*lL"+JV2FEcY#DHlX$%N*j@ -#I`,XQ8&&5h"Y,CH,PkP-jA#k@cD'0ei#SaAe,(`BN-0M1q@`XP%H22Qc+")D9M #)bJSk$'Z0@6L[Y")Ff4-86*rNa'A))*RUYi--BXa8LXr'8Qq2m20q*24eB8pi&M K&V%jNGA!10R6$kq(rb!L`3S%Ch&2[qe$)Bq&ac-f5'P,H2qi45@2pkaLTK`&-c' "#)QA%U@&m1qU`E"b[!KcV'JcGk"SfS(&fIl`GbN9KYTMXf`dihm#0fbkV9)YBiM @N!!B!j!!E&MQJ89`dLTU'EJ0pf-jPN`Zk%m6#,@J@e[hLP8"rGKQ+fRa#2B%r"l c##EFQ6$ZA*N6K$dFj#PSH[J9G"%GU'IK)(rJ(EMUqF*Da@"H6JDK@)UParQP,"h `),0%YHK!qUVMTHXQqk92q)H[eHciGF2bKmHlp1YY'IQ130"h6UiE[R*Jhh,P)"' c*KrRc89baGDY,4a6mPq6kq(X!(#&q`q-k6aLV[M#0YM1XJUmEJbimPSS1-LEU%' `Ihrf)GBDqbZeBf!l@5[`28b'Aldl`NlM0"9HKjPY1e"*Klp@K*mZPJNCMH2"e4' eh4!RXTKSR4+e[d,CddDj@@4V-CAS-&b(kac(*K(%K19IRLNZa5KM9V'`E*!!T`a YG8bLK5HU95ejRT,qRd0[',SS183@PrfUV8b0fN,NEJ&YhrN'`'HkK#k1h&a!0%P 1,LGiDI+62Y!V1GDG+4%JapN1LE8qYpA!Pfr*8,[VGARpb"FLaY(2K*'EMpp@4pa PlHmkT)V(,(-MZY`i1h*MC($344c&JNUYQ`@ZQZ"Ma1Z2l+F0kTFV2"NMQZ3T-I# $95(GY21jJ%M54a$PZiXj(fJP*j!!FqGD03(m6FS@SG5KKL-B%0a+cm4(%VF1ZFq VM&,mIPaFSihH29b`@2MmEd(I1q,)$q`JGaNY##6V38pTclZ0j14YVHSpm`k3!*8 a[TZLe[Y5bKeYc@19LIE8(XErbH(B4*ie1m4%2SJ3d2Ni`UXj,UdT(c&['Erl@ae &mR*Z-K82dBKD8NQFP,Kei))m&jQemF*FXH9DkpICkrFJQFbf6YX62jr*E-j1L%I 3e'1FY5R&d45mGG`BN!",[4DT-mkarEh(l`$kVTAMC%Z(iq(M9Kk[m0!p-0"IGjf pG"j0F[,bN`8)C1qV3@U)I,B,c`%6&'R(AVMGq[pqIR&dVde#Km(Q&XC$m[28G8H R*N,DGf6(P9j#$(NArqHN%Jr%-8DAee)-Gp9dUY0N4iqcfBE6ia&6dKkbm8IN)"r -KN&E9HKL+V2bG(1AKF56[Y(VVJX0)PH-L@JJ4T'TR)&M[GErfP4B-1VU2lHhX%& $U@FU"XqR6VZZ,"d#9imb6`4!FHF+8`22Ibr2lUh0"lQ1pc(HjM[FahZBlrc(5[I LAcV1U5[jD0NKHbBrITrfZKIp2`,3F%j0Xi)2m+qKe)+rM2fM9mD(TBeXG)B201A '@aTChD[qB&B%!!!!!!%!!!!"I`!!!(m!!!!mFJ!5#3%!!!&J!!)!!!!#aq`!"%a %48B!!!N3f`!1(cJ*GQejC@jf,Q0M!J!!!&4&@&4,38K-!3!!R!#"JJK849K85d& )6!%!!*`!JB)8U)J`S`!!!NJ!!!'l"JLSIUL6U*iNDk3J5U"T(`$)a5USScBZ"@m !!,)X%P8k,K`q,"'HE!QHDa`J8dG96lXr"6m$U)Dq9fad)942)&8G%#J!4MJ!#-" CRMbSL$!$93#4acK!#*l!)NmJ4Y$&"c!$S#ir!aG96cm(5'm45'm"*cj#JJbmU,9 86dSi#khH-!!!!(Z3!%Fj36rP-M!!"!#"JJLSMrpGU)P@hkL)*KB!&N@3!!!"!!3 !!3TcCA*fD@0P+bZk!!42E'9R!!%a!!PfEAPPERBZBf-!(P0PFRCTBf8J3bXV)'C eEQ0dD@pZFb!SEANJC@jf+3!!%%PZDA4TB@`JFQ9fDA0TEfi!!!!"!!!!!Am!!!" r!!!!2!$*rqJ5[!!!!"`!-J!!BfYTC!!!!!S!J!#"JJI,G*!!#9"bEfTPBh4[FN) !!!Q3!!F!"3!!!!!!!!!!!$"B#!KRGi"R#)!!!!!)!!!("`#3!*H!H)!!"i!!!!# !"J5'9&CN!&99B&9'C`H*#3!(J!i!!60%8'!!B!!!!!!!3!-58dAZl,)l2EqIk"Z VfrRpGmDdajB6LqJ&VaP@1Np+AdRUa&rIR26T6I12$YlB[jjEkdcbeK$X%!V,ARb jCk9(mieV,+k@Pd6bk8dcbaRP@,mp)aQ01kbch8bhiFlTaEMkL6EaYXXkCdZM'9- YRACreR9ij8V5@&2h2GpZr`fGIdXkXCkkbi6f@rMM6@!()N9*lGZfe%@XklTkDCk EYFqH9fbhmm[,2dMr1Fm&31JSp+9iJqkPpmp%pJX%rEHEfBepGDcaMp6RbMAMRc` #D,iP`-#VA,1Y,rACEpd%8hb6Xippe[aq6Mf!IqEirZ+lGk5TACEj5eVZ8XeDY)c @E,IVce2mja@H'%HXSmIKM(#GDdbi4RcV'GmF6+YkErl!!!!!d5T(5`!%!!KYH@9 ZGLjMB`%!!!!)9%9B9%Y"5%bSL#F#U04GZ!%!RlHRHJ!'!!!#%J!!'#X!!!(m!!! (b!GYH@9ZGLjS!3!!#Fa849K85d&)6+ESe`LSL#aZ!3"ki#jS!!B!!!)6!!!-33! !!Ai!!!6k#@j[G'PQH5jMB`%!!""%9%9B9%Y"5%bSL$%fU)PB+J%!&XSh&!!'!!! #&3!!&r!!!!&l!!!(GJPfEAPPERBZBf-"!!!C094&@&4,38K-U)J`SkL*9Ym"!'N Tm#S!"!!!!EX!!!*)!!!"S!!!!A6"Y!!!: