prerex-6.5.3/0000755000123700002140000000000012226374265011201 5ustar rdtrdtprerex-6.5.3/chart.pdf0000644000123700002140000013501312226246604012773 0ustar rdtrdt%PDF-1.5 % 24 0 obj << /Length 5654 /Filter /FlateDecode >> stream x\[oKr~ŞH̜_)ؔ-ٜ'.6B|շ&ljcg޿ +h`vꍘt v@ˁC#9tU@Y7 )MQ6`&Rvrz3( |ѓVaw&cnxs_$$cT9HI| $br06~+Qo5 t@~$ZO#ZDF9ikBK]6Zmۀֻn+R톿_f%&S i~b |3T@R:Fc%l'LÚt~{\n Ԭ?7IB/,u~-Rw{'a,򓇊K8#nbNB 0`"GA'z9 !t<X%ՉB~+_y;4GK8h< &rڀM#tUa&qj- I6u\(|܎B$UM,^8uKHENBbAu'w0)$ pYGݞ‚rtۖZLi;䝵`8 6DWxgjSB-VO/NS@O!4-?_yw" gKK#@ n G)EA'B4>|8YEźV>)U=bT"EcALw;7ClWzee$ Xv(D#Vwr5HzRf?x|b.I _ljv BJFqN1i-Rm@*:)$H*kS"IB F. iu@teQ\IDsR},t~5Bi樳 4}B8BeJedm5,rzrVS!Ŧ*J~+KUIC}rо]b;r eAHHBA 5~  ׬aX ,-^TѴ_)N&PE@N'Zc j?eȮ&`Nj V#"S P艛ٮ,u-jR7+ #T䚨(TH!i#XW LtjwYsSґqH˅#9τ/u}=5 &?` ̢aPttikk}2:Af.ul#H4ϳ8jd@ <- 4g2^)=XT4T~ppr.At y:,tJ6wffXo0RBykdNa#tF+mXf66ԒTQ:ÈBeN1&`~(%6 !+ڸwhLcƂ<iV U|B~89*-S-~߮? OR)aO၎̰JJ_ ݀ޱSAYٌl:zk2JM: HkB9gT˜ SNP!4J29i ^ r17J x1[1D lhU0،6nZgU)ˬ,eRњN_)R^)5XKWtg\z<Љ~͡j^6"'}LNcnϫV2[6ner`ύKIRn[Tꃵ%(u@G(QSFJǠnN!iI75m{ KvsJ mIΰ.n\{Mib8Pdn?PI[ 9Tl1mIuYn2"Ea%"0r`Sq0XQ#um`$!$jfD05Hӻld2>sټ/l!Scc2OʜOL|w"F)8#GS=U1zFK#J0*-ZQ9|W -vmĂjڽ{&BjRQiЎsR0.X2Ld*7CYr,<Щj| djd5+n5_R.8Wq1iܓ-ԓ*VTLV4]P^0(QJ% M nɊj!: Bf|GbEN= 3VQqӠ缡|zY[ܤ+8whb#2 Xekmbehqg s4hV-G+SWي3" i$l-}+ B]mcܼg ?eOrɧHU'l ق8*ŗFAb%kXq3HjpʛTT I!Z\R7oIT4jM׻{D?VPҋ3uH ZZh} 5(DHx p݌RMxkzx13.X}u_Ȏ1;Μ<=jǃ9%ǰl6 CX7GhCn"fDZʋбwOϣ%Ιۛ}6V0=kis&![˳DZ*M#gctB~vƤ)R2.X:$j5PZ(gz A*C*8Vtߡw06fGqH[~zS?OF $EMg@v4?O#UIU18zDfKb,>ZK'.D|(߽xmRR-˨s-i6Nг endstream endobj 46 0 obj << /Length1 1676 /Length2 17028 /Length3 0 /Length 18046 /Filter /FlateDecode >> stream xڄtmuXmulۨضmwaǶm;N$_{s~ϽwQcԨߚs>̹(2"e:Ac;C1;[g:&zFn2։NDKFblm_1X25G' ;[g ;?DΟb9;WD;Gn9 jhhK&lghaf 0p0:F(cK nggfms=,@> =u(fhf?& !ӿBN& TEmllLl`FC3 [XTW 5}ƌ?`d0ѿN ӿ>Z⯰? >S?iog [giGӼ?svv?3}s~V=lh?9ӡ?9?Sio&_Q?ϟ[o6&&&F+vFvKi3k~N8{~唌FrTH_Xy8#1WF;0< }ΐ(牕-\\,R,[U$.EQ=1%"P&eպ?#ty235\з>s[8Lf[ٿ{2ߑdpN@# +zeǥs}ʡ%'vyK$XQ^o^ZPO4ޣץ6yuUlHS=D[ s6ā>}'=\4>gNI{;lY7^{mOv^SyU5p1P=-=RbNJ7swW-J@9y0U@J.-Zb$m^nؠV 3&fTIfЖ6PuDt[qW$@-m5ogܸkUn`kzEbBTX"Ԟ6D ["ʢ.>Ȯ>y1Q&k> csʇ7vby5v&ML c)3U/Ő գ56rYzoEP\Ѵ~!_"ن,;BϹMHJ͹s h "N k{wؼAPɢI}JݧTTךbd%Y̺W.'7{GR/9_ Zd&Rxr5Б\^.%޾&WCaMA ss+~M42P^BF.B!n:.;WM)fAYג>u'dWQқ-s)7<IPΝ,3wZ \"f$O#iPvd(9N*\L>TfZmT-̘iO#gbiLcsF-?G Oqf;ecTG ԎޔdFJҠ~ogC,؉A|ڞkr^:wx)${0.boMf'7"'Xx `#~>nIMe'ֱ[;V17C6< Y<-C?OeNJңBf/_IVe,ݞkmlQ|F_.gQڭa`)!|SӄDޞE*#~d'AU[lQqцޞ,d .!]g,/Q}h>EհkԀgh2u I'nvLG9DĊ4CBXٝU*dj4?P=*acyhd%O |> xާ^sP5-"K!,S)'JNtV\96&[ fp?NT cTΤ,xtFmi[1f;9`_-m%#}\@) s@~:;{p-x'NӞH ↌D$nV3Fީ$vU-wD={[{A(#TehkyG" |Tم,@MՄF8Wv'dcu1CZ[Fcء(`PRBھ[Fs=tў yr6裓5:SmGte`V!uA1t՝rER^B;BhlA>Nk.iwn'uj2u`UxxYnės3_I'hPpyK[Y)ߴҕ^f;; 5DwzG[&躃Cz7nE|7a/p!%]%nHL5/˅#fm;VB8U3ЭRʀVi4"۫t\ڏ.vBOoEKħ&w VY~f#>Q{M̊m?y ])l5]h&Ɔ,KQ_:!ۦl-Md$*xINJ=TJnGQޠN7@G!ƿfrJn{w+:zeO3sY}DI~+*"SxK;Eg9x UkR\sV+ͳqg)bix9r<2͉e`1BoXL˗4F 3.V79>1r{kMcE?b;18*#%&Տ0F^@_y q('̏T oOΦ"5~H $:,!f*:46RI338Hj_mpU;pP56[m~W4 |\ou_ ,Cӟ(!_Om(>=уP+;ދ_{hr{)#i@2L1$AVq$Rj-b-B jWٺ,TQ^UO!U0DNƝ440ɒ/i6wP"hTȓ6 ^Md\0#М4"/ ¤Ȋ: t$~lDec0Z6WJ&7%3 ;pr&R/4T-,~ #^"L@>f0z|kIel`ׇ%xte\ W2[H,F6[);yO"*A6΋/4ewT_Zhr3Ϯi޶_̤tcYOM}^ޛܛBsX DOy>" ^DV.җn{BV1UK "8mj(*6@GdK-!I4F{q{Jvejƒƾh :d,ٶ lYi fB^SKWs(~2Rs{{%Ha7QN~[ɴt"#Z_Ow+F_m6 S rtxUuV,Uo#fV&ie=Q9ٍ&B?X۫`09!1L:ݏ9 FVS-`g{auO o#SqޣZv>WRoũxCQbCWA!oY ewo-˚ j>u["Y9DIh>}Y/nc.ѷ\.G!'Qb‡F㣞) i[n+8YeY]0J.elUhQQ~0]s ώ&4}|)fOҋ|ր/︒5lV0uj۬H]Z#;lR} xXQ܂4*~eb&K,xv-k""YbZ ̺1\=i ,n&V UYC6H+!2[>cwhp$0ȉַ㪽9k-\Դi'./NS7& 9 e#d3i9r+9{N]KX^|j6.1Um9~.69G>\SpbI^bIG{\c=%e/榦R]r傒 Q2 G5#~@13ef$2/ƞ}nls5w2ni/N*bwJ]ks"8 MG<%]K|nrf'@2W)OFG.`\Il崿nzD Z1ly3Bp T3ZZ1Lv+4F, vY4^ѱ|6r.&MQ6(&3m_y3jlZ`,>?q[ʱ' \8=cƳn|cQ( `C8;sx( 5oRK3r0 ̹bal($  OTjBpl$OVx^y`6:>e2#Cq[Ju_SyrK7NOe?.udXX法4.}j+%|;3SYLpqqUsTC:MToh9GT57qBe -gP;Ҁ o>f0%TNԎMw` cUߨ]QX#ҎQ.~٘B̷+ȉ ܰbt݂T'%kO cI}*;H5.F?$F _u48Hi_]GJ8 ,Q*؂ΚK̀k[68 ѲK1EG+ 9 _,z^7}Y!EԖ؝dd`Kdr ЕEQGefLuߗ1]6-Mq!;|5wL9f:)*#dSf2FBm^vI ]:(`J eڋe[$sAJk,y(m>*J|`:W%cDM~8?*PegS;i{' DW5w޼ybk毎.zCB7fq/c= UfՈi| sTD;G+ kOT}C2\֪~{ft lγa/{T} zu#PDD`nn5x{H,v[$A.|0NNEw0|2}=z9я DEÃeugƳw뢸>9(bRl0$xӵ>)FƅCжz.&:t`@$vԫf8L=XjR+׌lz2|N{֦ ;bq3"o% wθMj`X0-A\foYdEr oq@ 0Lhؔ93H[7M.nW4zX<NzG2-o$hZ7_45*bQih7 4Ԏ|J&ϰDظ!( rBa|">"׿J$|Ȟ~g^K&.#v?= 캚2&[.7ŝxU AŶvYy׵.J}CD^. ;]\eQ$(Q2рt켰|VЍD7'߯I3阕 﫵vg=U np0wi6X 7H1)A\ﴥ(` tuv,^ [׽k%!\/j*'@v#erzӸB:1 1x!gf#o&BjulŚG˽3 uMSY]=j1It9Tؘ8$h`kI;0g-qZdkh u@V'JYiX*51ם $ǤUNn, wυJ!Br>yq|;bV|J q7TD_`&()PLUNGܶ,x-wiȏ6V1hI& }5W,= S!Xs1Mh[2{N,S8()חmNEbX)խMM~hDSQRu&Y#A!&JGkω ׊9 ;>.F.鼏: 7w[VƊ˴@F׮8BgYhw溕kIOv\\D f/ӆӧzD-|HRWLv18@]1l9()@UHMaR4Ei~O>$,]PwڿK:XkM9h8˺BǠNfaB",¶NWyADvHqM;.ӽtYH+i-E(]bE2>51c Zd,↶[gl飯qB 7U=@B Ja:MbX`ɆfI7Wn_Cz{ظ DZy$Z$j$O$&%wr\+yp4w`C KTן,NGui Miym&k2ߺaxK/ưܥT@hYW"l9\a? GJpؖVt&E<_ȀwR.րv~`{iMy(txJ] a' &S1P`A)v3.{#JH {#K;Px#Xn@Z #q_}P]~FU]K-|M&=b 1V>Fi% h9<ņ,IE~NƕlC2$Y*;m_%ANWJ!f݂07m$;{ ="xr؃!T:Qk~kiBX1h ^I]os(V fH .}nlR I(i3%o:bg"M{׶Oб̛ )<2}3+&\{Ez?jθ7 TW@HZ>O֫ &ۯ`-7^n-?_UH=w* e({V5C Y (/G۹%<W[Vx~!$$PlSI6>2'k Xg5NYkQ_wPu8[LxxcǏEl.dt`3Oܴ\ K^jc:+k"]:uu?cHw& ͠NtƊu6w;aWؐJ!%npAm޹jH"IcXj לּT+2?՜rU劢(HҴAalQm2/|I' L Mʨ_,,4`JCN= ~.fAQQZl?naBؖ_3B,eθōs͇x't8%}OʷK8Qb[k){B7; "*=B6NW,37Hr?=0CHRVgx :etp+EIvciJHM\{`IrQVlK PWXyNj:lxoLQ̞Y&TKqb_>y[,[lT:)5Oe1r%}Ik5:*=bV1 Օ=aea|r6,7FIo;馠+nFrn|'&0EL 5UaS_0-,2[^ vcZI jI_>@zqMvWa KZ/cDuy@*f_bk&:AD0u,c+aD* Eyۛ"bJx0uU^B]mMr*\Gfj$dK fiÊOQ֍R[ƃMab?.,M3WSoZ,젎0+=jҹWuXv_ꡤ.ɿ 6>NrȔLO2 'Q2uK_p0gEWruŎQ}xIN1 㜊ey ˋWaz@K߂ PZM5i7 r.Em{*mO?N̕}E<5!B PV2mxgdVg‹coP!@374bK[#}%eOx]A=AHe}ʞN^*Nʤ~!M޲AZ5I EۙM ?LqńK e}_ /*C CiZcJ\[{bI_tꈗsڂQ~,v|+=o'ŶM~[&s˒RJ"㬂LY\ ߭n$4,o;H@Wm)~$?tv*ړ&52~3Y:wuX7@HrӒ Agi٥.I Lg-)\ x2-Wݝq#}qAdžV:4 ڴ:b+NxN$i'*͆, L r_z6;Yn#p$KW#joFe~W`S:ku5.J|B&S4tޫu ^w>pB |(U6;_v!׳{wߞ2A<]s7Nܰ VN>߭lf:3 @JMq1Su[#q5oy莼P.JnX71IXńLVl}5T  XAVӛ\UrFo9ޕF`.߉701ַuPg<4}SA*3Lrpޯu5!MSnriK0Un">rFعE5^SJwKO cjɿrr}3=FqF'gVkU*FUAzy.6ycIX`@/)9"75e*#L7כ|}Z0Uj)J7; =."C ~6vLn گ`F0g:M}=y:˶dU6OVT0 <$_Kǡ [ڷ'%R{z|‚+\meUwD1u8*խ6m3)egZ Hi@a_|oژOHT y9lӂ.ђ)v]UF/(oms,ܥ@ǦH-癶AQB{Șs o2fD|_0C~JbKAI0s}.{W +Ŭyς!Qݔ@UN"FoNr1 g RzzUlѰIP78xgnS!ni^\`ά=Crox.JZnx4,ZI"`LDqK-z}q (AKL%Df\ BC3cV2G*-&ĖeqrY 1#)gC QDfDt}HgOm~#,:c<)2"+:c#C<9H+:MZbc`2O}~ZEْ[KExbDѝ!΁Tξ>ОsTA @t>Cr qr)6UHG~<,BޅW{4f 1I?OcuQ9~fj`7j.KyE/(f'f\0H<*Nv:|=_CK[{?%YW¥Po^8ϒH`(v5@$7:W_3#z~=|ӠgzxjxDl 79ɕÖj!&:JV(lz W )hU7٫5ƻ_&uTMI0*תRh&:&jp )Z0+/ȡfVO>3<6X-VWv)uKE9Sj@%" .;Ϲ[6\Y[v߳1f;dR.bm5,ϟG10!d{״_¤N~K&2o1B4˞,$V4ÖUR,v8Ă3 >d9i| 0|7 N^ <9-bcw"^I*؜7gLB.P$vE󔜚Lu]gT]+Z6pf_qzR=Bz7>ÏAo헚Vb>YNQ g5S_hExR&Tz!4~G*j~}x?·o6++>z~C2ɖHWR nϨرk9}+uՌQiF7Y(\໛C L uif6:D2nbu_{6Fy ^RƩD/ɺ~ff({"mIy(G!:XA hpI7ϧ"I*pMNzL߱OLKyx~/ω\)`i$-T&XW5#4ko"#sVZo$&!e}wKL҅lu'F8jqCc^.+Sw 'yZ$67[wҕwuڣ Pi&ؿ^'R7es^~ N8p"&ˌ\&cbkX šeB->+vIFUXP%ܧe&T~;Ϻ b&!fstE%'AAw+8פ"LVyDL\w^H챐:UCs=Kk̚+%ʻ$1A던>8-@ *B3)lgMkmxg#"^i=\,@ź7߳xwYɓYCOW{;R{}HF2CuyTt}g 9$+lfe',l ӡקnD{{|Jd=?8DkVzUd$z@]mp=B.@ c;R2 endstream endobj 48 0 obj << /Length1 1791 /Length2 12525 /Length3 0 /Length 13574 /Filter /FlateDecode >> stream xڍP[֮q[pk\;5Xиk {pw&g濷VWuQ(  ['zf&V֑^hca60303SPZ8Y/vx uȖ_@C1C   `fagab013M? ,)DAvfN<1 3 ' wC'C,jc$H@f@(=_3S$wz4r%R`G ɎdєH^(h00v,lJn0LdyC' 7 3޻jPwFQ i)O{<陙9\v.V 3?*ZOL¥mMA)1q@iIda P?gdpfR khca{L*h?IXZGn@% 'cs#j&@k [/Azf&[[;*5Xؚύ``~XTn 7d5.v_K$#b(od0J!Vz"ozTC* 4Mdk1Cm k?Le ?8SڿΆ a0 ybj}o^wuVw ]|_ıھߋ {v @?z٘g?;oc~i7|7|Z/ o+IߟtҼoo{W [{W uYޣ{z?C=CNxֽ}݀+ c ˺a|W)E^&QF[a!\)otsg?>7)o]eoBm/w83(<}Ezx FCDّbRs:鸧2.D&vTƖ K[wvؾ!Eo4` ¡ ]cT%]7n1oISH#Ϡ +Ԧ<{aJxH"OԧHxw4%#h1!M{Po>I;=vx} z8>WD Lg%Ssv0f%ey?)ɝ_J8X[W*;5o|dKkZvY<Pi?aD$>pXӯ_X O{)Rw6(68ϷHxccq̚dVYǁ>Y8hb᧑P˼^UQFӈ1Jx慹ۆJ:Fڞ@hu`o{V p=r{|/2d8sx Z,῞;=`i_ ] q w.]N}[{:_zg3ۗ" Qt/U P,9ўIm6HZ/s1 dQR͇@T4)yN P{y';_qsHh#fJ̯-͎ G^ܯlewTԙ&+ n.ytHR3S$?V|:a`p>ۻ`y$Jy8\yn+YA kdoyYٓxZMAC98 _;$Z[3஫<J]ӡ-n> ۽QD}٫5:~Imr{ۉdQnj>+ՅH>@ŸE蕚n.8{e H*PTx$jO  TzEej8/il{!BcyNPCLϟjLTx9YDW9:tpQ{h|5aF|.ʡFBX*id_WNs )BS+ ^@8pm!b&KV`"L#+ZԞh-GXS@d"w%\+>VeM۰)GF`xpE |p- p`7y!M"_;t@V3k=٪!}R FMPQ&-"7!joK߃FbA<ڐ36$$/y?vKǤfɈZ$ndFx1ujBvRGE!HHI\'gVQįw|2?#\CH ~kGj!o[䗎0Qd>\k/>\wG:$곋e]A\N ibͅ(9wP b2@#+oLn^PDB^{f|"6*(8$3́CzD*L^mTB:#8[?B3t3X#k[b[~lc(A VjP}rPw}o.#9< a5A>+XT8߹fo]5$pj88}MH %_ KGv| =E5߅ksC ՙ"6 pJ"!'U{B&.,g:L[)] <>Sֽ:DYG]ks8pDz#y rReHK<޳^Rޡ2/IRb?JyNjBESnU)mG3\FE!:̑j2աHĐhگ/0*3f5D'7c獁:Nf[JqIHso VɖC8@mw#S_ z3B,]r?)D|0yw:?<ѯ{+X+r涉^;Kzxbl)#SNˌn/ㇿo(Vs~<$,- k]K?P{Z7ʻFn"GŦA9^т,˱Rfog9;Kgj{G]cU23VӦҪD#10?I%zoGM1Z>T ĕy ۻÏQ=ͱd m!ө됎}@T%3|Kxj>߁z'{eU0 bm,6IMn:ihzӐo9 u7k&h%I$Im1=q&)*YZ\mD71`#.lǹ䇄Rl6t`mGߛxpJۂ5G23Mz#澈7[A0}aF[NIF1Wu K6u0Pm@,;V5R*2܉ޟ;RGHfoߦZfhsT|9&X> t{vdF%T9p~O|%r\3^0LPRwIRkݺ-wEIu$[n09"k. {$q)*u:Kl f4QDrDܵΤ @)4(.ɐG?䛮\OaCB锞EW%EM7wXSqUInhi DoGpQxC BA$ݲXM#)n:[x=?JT~7hBXh  sBUtu}At7m͹1scxiqY91[ KOk55!ùS>~eĐe a7:wp e<1/}Ɓ;PUx#i7_*ΰЗ5I2}XQpw u0&'VV[11eay Ti9y{eem[/Z6fyi S_.- -/(j9dԹ?&8$2 ^>P}(`=w  Q"Lpp cmibM71{@5ET)FNk3Ȧ95wse`G0t3^~}SA; H0_d`_ #L6Kk &rOAl34'uZrBNn2cky6B߇ڀKX̻[{=ؾ$bY)[{v`7O=lbes;~ &;4<,ZEH$$5 $SX}eUey~xT(GXT4,)+ט6 aM*~4vE{tvjCLDܕS<|TaU#[XQ7k5Oe}6y.-=MelvƘ|E%FgI" b\󧝤h+oz}MB;h}?BB-1ȍl#~.C4q3Md˾lYO Ϋ5/SٴMϞ=u޹|d-h n<dq :gzLFC^m6vmojQnj4)DIL(ΐwSi,>qEkMpeFBHwAy_:ۄdTa Am 0F%\YT2UYuV$&Slj-o/Ћ¡" ׺v?с0"7dz-$ gLwqDHSzMfI{xCm IIn}.wCַәJݩQ Fy}GɁyUPTd|JH&x.ylXEˆlWkG3=F&뇻.[7B B&,_1[∹^.ŰЕ f'n8EPWJH#ۛ_"X`y@4~LQFƩ1>g %ڪ9 :RZodK- @Q"3CD/٣ᄡ0$RL HTLyHY7*\zQӚݒ4;mUB 0ao00a:hAbiB;Uň~_P[#<up<жsvXr4fJ *)vm LRr-CέÛ|!LRh=(lIʅZNWV8BP‘5^[>N]8Hݙ]0e}r=+ 0fƿׇJKɁm?~DI2, щD,ޖ<NGiW҅틦voxݲ $ޛ  jks!*G) ]x).ﲔ6eS/]SQkCNHq6R: y( \MvpI?E$䴔"!1!tesq9Am&z((XV?ɡZv6{HNh$v|0] ZNKhW4ܳ]uXͱ%ԩz_u(.ܟ6D'tLev`ʵok߁#@L:l~h"_\&ZG&{ޔp,))j*r. ;h4ayކD-^~@ +c)._:JzMu/¶zA3j IX6{5(zyҷ%^б2iQ9gWɯg nl8v24ٌdT[ #sr'3~ەVtj1Uﻕ#X ;26H= ݤ[53:`o(.lV乮^7^cBj/i@azm2q"(w;@g-W90<|9SVbuL$_MKX~ iHq%&v̍'x8ҡ W@ X|k~F s;k*qEۗ,,4N=/,mjjOƕ e[DuF6vZӚ33:t|\NmJk5BVk: ]=y̔FV 3R 0BLz>+V!1?|/aHfY =w?fl.r-[(y/m(䜫XPRݮF3K5!/D}{׫cir3gGՇ+?R| }>,ζ-l(i<)p񳫯ZH?eB`L G .4E!b>o9jEi!i^n/K)3BETFBQ >ȥvn^G70aèȖ$VoF<*!G֛J%u|vk3c>,8"k%7p][qo1gdj*335g#ȃn(FY_4&Hx3.c{53!O%P4C݀!v7E0{2!K۽%phGc`]@Bd v_AƦojqn/9P]c$dz5д[.x&\Ðdҏ)~ȡ4nٿ!; X1ҋvOhgvN7vA>尲lʎY##/Fu%z-xqr2b.pi0B?+ytmSVzd;Fj)BU4TLbՙDC WIeX~>ι2F*0\uQ=g6ӡ:!ff[Q7QAm& Bja-HZ~(6|ZSC~ѫq/0aaF~H>KE[2QdGe[.ҙrv+hlC<*7=cRHB)$EC9*|@u #쁦|}ɪoa6@䨱>8oxT#+HD a&3%&Oǩx^!LH fWעO]לԪU76U *4!rs Z2ҧSoa& 9.84Z1ꅼEU)ȝt'V}7Agtt4zߒ:e}y'} ]^Քhqqe[dψ3l!4^v)TT"*/3cs5`{O5Xxyrr]S; WS P#O=rH>Qs ECKq8>~Ƅ۱ V#tcڅ᤮Ѩ?4?s̑SFE\I=0;1urŗc~;IH ]%3tUH\8w~{9tʳbs Hziq߮LJkƮ^3ꗾvJ_D-[x~GUHi R5F&̵G0STua;!YD,"_1S74JA(2n QGfza.Ixxm"F1ָk'WrDb [xAUZ&$$朶p>u:ݬP5b)`,Šs\ #($yMۘ|DX@f[$*Yȋ%I{<Z{>۵j+YK[  Pc_j-IRo- np8hs*2,H2ɹTXBUO{fg51|MHy]+,:cn;*>ѫO>`dul:`d& ṣC\*PA˺C\確u/w޿蓍jO^a7Đ xH;ȣ=q&áwYvP mKz>NGvbН;NK_7=xyrxXx&cZ$fa_h[̈́C<4Q[k|,zN˃n|o0)clelnbѿdSx*~lUW3r;8 ħL>@a&2-e;E佷hj@Fd-//u6_kx߅Pv8סi/SD)}aTX[, 4U3KjL +Ef0+\uz͸;"+v%&畨w^rEyaaM!5ae^OK5W5`/Ay[S[>]BXZd< 3blxBU.[U"_׵d88RmFF:zrw3W`gDB[c3/ \\Z~HwRSF$yGgvcN4M3N=K2hzNg" o8~T[ 9A槒դCDVZFj<F3|֐$K]_^82ly;X7 Bi pbjHRYR|BEur 6/P`B_~[Cr>LK߂8{ϭZpYkFcB9x:ɓN)|l^}?J AøCd&L(Mڜ{R銀1E\GbxQnMx) ֯>$UgFm)Cii^?K d(d۹Y>/^&3,B<Olnx{3h曡Sl{ںoOQճ%}bIlwU*-v&BQTau| endstream endobj 50 0 obj << /Length1 1407 /Length2 6046 /Length3 0 /Length 6997 /Filter /FlateDecode >> stream xڍtT]6 - R#9Ct0J030 9 !%!]4"%t7R %"(k}ߚ\\}TX"4(0H(P3A@(.rsXqR{^!Kt )9e1ru0QRn5/脽+J ."0H0`a)D`}тO uz1Bo$ `@`p/C+5Rn W`ˀ @y\x r:TG`@ s8_TjD.`hW7r8 ]#M}VA!.z^~oT\2Aa=D<.8jsy(zڟ:]˽B{p(/pO7ѻ('BG2D# 2b;s5 _r4H)`1&"p$ "(w #Z_?^Rap4W,jdjif"򿒪hNX ,&.HJ_;j AA9Q$&\ 1t~a4 %q yV<@%߾ OV}5qDCҝS3ѕF# ]y[*Ul$`U7r{P?=,8>rg\Jpq\ &N"05o>Tc4 ۱/q b'Jb-\̖Ll4<8T])\a~g@~N_uh.iY*`vrS{7J-)&AooMFu=$AW/nuqʾ־֗a+>+%%Z9tD?VeZ3*pnc>>J4zRdP]{F7aVš\GboզFEiKZ,+XVvFt&3h ɉ!kX8 ٟt93ӯQ3Z<3q`XxF7=K!Y-ws[Kֲ7l79\Zo5vl61z^OW͎s;%lOӚYf&2z50VfKSF?DW<LB6GAjE2} m)>ܔԄF97- ѭ{cώŃ:6YQur>S8LnF'l:8ns7* w9xqEq%禫L^Q*ᡖCͲ ՉBXlCZ+[ӾZgmM_ėSF5C3zO%]U{sMH̄1pD0ًۂ)IHyn~ܺY`shbYRmO[?T, *unqvo*'V Fvj3 c) Ƞ+TB\*mX8)QgǫK)%r8a#[U̦X063XEkP*KYg/( e0  ~Ђ%{%R\=0m`}Yُ'DtCo.O+So!ʙߴ Dvz7&_]!]i_p%j#tJPڏ.<~7=Ǟf`r98=`j[9OwJ~QBm`Rn{mV\(^6rPOyv0גٸ${J\tYԓ K.~蜻P(L"!вCk* {mwŤA2AӏVӍq(!1w4 MT}:R4U6_Nƈ2YMu,Q禥Y\7+0t;;SCH(Z^`z^1w-/d5'ǵ^-z&H(.أݛEClP,ƙg9rL*x8hA5DO2B-$/U׫:\st<w/yҠ"b[׭7waoKxk "PuT#C'kfJΉ /͒z ^PIHSGjQ񍶝SSDq-QKa~yk-T8暎!/>+,P5E!^bY6.Whce-W⤱ri#65g%p7.LD_ڧ&p$39vhW'fɡW>D1B{eݖ5mOT'uM𥬄_$nfŎZ#$+VπXVCBӁ50ܼ'ѤC{̦PL?h3O  *ÃԤ Țo ф@|wy.).ڀ`3y rIZj'WDuu`HEk(yg]/7w{7Foٴ(\ ~>A cFw5 &)g) :Bɜ=JOC=gS2}۱o&'Eu-"}8̇r@7SW3`o/0(q׏8F6#d#}Ni''aB;B<╡I;I>հ9{GL+&MsL"` )< aymeLSrW6Pې،h}&'GںS*3BƝ\C!TvGhg8d.I_Ն|*j'g~ORGܗmd|jU# m7\ͣє4''XsL5|C?؛'!Z?=C6Ţ%4Q6P?aJuq O|Iۺན$Hz|BZT0B8ɵg؋g>U)2S=c&Eq}sV,5?7[#¤۬'0pC]Ὄ9eK+ɪ597j~fU qcbģ`^Z4Qzb]{2-֟D[ %Z%ZLhVJ֝zXX6]9˃؝Ir+6[pRȼ ;b mYMѽXte- #,l,c$ >}7۠7ڈrxŋpluyWϧCRF"`h%D'vQWe!f0ccȫHIIQM{lL_ofw9Oҫ1$ 7jnIc.-c|&M.i0@Ğ1,kc}5K2ibJ:)>;tU+C{S\& p^y0 b92<@RpQ4ç1藮bJ{j_r# !ֳ 9j;TI11 6T84$S,lGb" q@0 ;wJayU`rŗso3Փ!D+`[ ecxSqZkW$]fC$CDvIpQ*OKIwyuH 33.XX'q%s)9J<O4^\?]!dj6%N%RY巻"rzW"ξ{Q=LoP*[FN&8@ҝ `EMG91OX<2L^n{G~j5~:npS8ZR?59DWl F e_)M_vkC!C[Di(jFT@6!&$, \+{;;EPP KT[{aj[ bdeci>[mmڋғټKr0b1R9q5xy}^ =U*J# cL=8ƨ7<(ϧL/%>f߳Xyn,ă6ENvFqK2g&D( Ó}b ̂`dsnOؘ2MW|1 $|FaXk&fەel48d X4clli Z1 J9~rmaZ5SNGUS>oO&dI&zd=WlkTinl ve1E| ݢ\Beט|"\Q ]z,KuתYZUۏG-NɴЯ-s?ТWă$Fqzq~JkA6Ņ`x)5D/Iz3FMqNjb+!;<5w,\é/{ywGNE7"#f%V'TvvJFfUZqv4C_tj˾CQc&ĝoR`X7+ [6VH'OI|tDQB}`t - vi:E]^uh:I\Y䑁P"#N >!+YV4 ઞY_{Ho2=,yAY+[NbI+x`隂_\!w=*H&n Ľ-<SvkײXu/ endstream endobj 55 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.13)/Keywords() /CreationDate (D:20120718151019-04'00') /ModDate (D:20120718151019-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012) kpathsea version 6.1.0) >> endobj 5 0 obj << /Type /ObjStm /N 49 /First 368 /Length 2097 /Filter /FlateDecode >> stream xڽYN}Wc]Q4I9x0v1nn2|]eccH.޵j0$Ӓ)H昏3 h"A1)WIɂWI5N2ip+,3c:FTבɀ?%2%0LIÔpk*-SNhs+`"̠i"ʹ0/G׀]0EF10F٣ xfE ]A500g=҂a7 ŜIVԉ9%uƻkNXρ3^/ˋ~ۦ}zNw韓2u~3nӸLOҬҌ5iX[pg 0EOZ@n;7O !+E)d)T)t)L)l)dCAdEQTEQ:At^3i+{~{8hYOP)Xỵ]镪\uo[?7y;hf̻ד#^]ԣ)k1@Vꌫ={u$.8dBtyJ7,(҉ dV7"t؛>/D5]̼yC!b)6RBȘPCȼhsiqk: N/e.IqgCOY ,<7orĤd_K:ҕ|YoEgR?WWkv09D` }[3-xD*^ | |=P{7x>ʐq:pE/cf#ȓ{H;弤5r8){dY 2;"О. lK`aK .>Hʹ_ה-~>MҸvG3^w$9EdеـŨa'~T_+^c>lj7c)WӔxGowJuY!,O)?<{]RMӴJMYl^%MX _޹u'>ūxs~s"w i<Ϯxvs ÿ?1}DM0seg6K~GqKY7G}rE Ap-wxGR j}>Vcża=lEݦ£ 3퐓Fl v!^ yd#ٌ M--Ƈ] Gb&OARAv+;wi%pgϢBak^?prCG XC{mZ:c~I_a{?'}|HX @eP9#k:+%,dm N,?͑iNWIjIqOx[p\c F>>; f¬l)@|u vVM J}^Mн]kh m#nI\v o zw u>ݴ#(=@+(3%} endstream endobj 56 0 obj << /Type /XRef /Index [0 57] /Size 57 /W [1 2 1] /Root 54 0 R /Info 55 0 R /ID [<9CF99F199DE5F6F0A6ACA8AEE49E0EA5> <9CF99F199DE5F6F0A6ACA8AEE49E0EA5>] /Length 127 /Filter /FlateDecode >> stream xI` 1c 9A.R+Y;/]Ky ry(ʨh @-A}S^=`N8=X" 1DFcb}vO\g~\=߲,K" endstream endobj startxref 47250 %%EOF prerex-6.5.3/prerex-6.5.2/0000755000123700002140000000000012226372017013145 5ustar rdtrdtprerex-6.5.3/prerex-6.5.2/INSTALL0000644000123700002140000002243211411153264014175 0ustar rdtrdtInstallation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Here is a another example: /bin/bash ./configure CONFIG_SHELL=/bin/bash Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent configuration-related scripts to be executed by `/bin/bash'. `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. prerex-6.5.3/prerex-6.5.2/compile0000755000123700002140000000717311411155012014520 0ustar rdtrdt#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2005-05-14.22 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand `-c -o'. Remove `-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file `INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; esac ofile= cfile= eat= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we strip `-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` # Create the lock directory. # Note: use `[/.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: prerex-6.5.3/prerex-6.5.2/config.h.in0000644000123700002140000000506412226136253015175 0ustar rdtrdt/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_EDITLINE_READLINE_H /* Define to 1 if you have the header file. */ #undef HAVE_HISTEDIT_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `edit' library (-ledit). */ #undef HAVE_LIBEDIT /* Define to 1 if you have the `readline' library (-lreadline). */ #undef HAVE_LIBREADLINE /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_HISTORY_H /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_READLINE_H /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `unsigned int' if does not define. */ #undef size_t prerex-6.5.3/prerex-6.5.2/NEWS0000644000123700002140000000037611757424000013650 0ustar rdtrdtVersion 6.5.1, 2012-05-24 Use editline if available; readline otherwise. (editline emulation of readline is broken) Version 6.5.0, 2012-05-13 Revert to readline (available in gnuwin32 repository). Remove references to chmod and /dev/null. prerex-6.5.3/prerex-6.5.2/ChangeLog0000644000123700002140000002135512226135651014726 0ustar rdtrdtVersion 6.5.2, 2013-10-11 Correct a bug in undoing a mini or text edit. Replaced trailing pointers by pointers-to-pointers. Version 6.5.1, 2012-05-24 Use editline if available; readline otherwise. (editline emulation of readline is broken) Version 6.5.0, 2012-05-13 Revert to readline (available in gnuwin32 repository). Remove references to chmod and /dev/null. Version 6.4.2, 2012-04-18 Revert to editline using native libedit.so. Version 6.4.1, 2012-04-17 Revert to readline (libedit doesn't build on Cygwin). Version 6.4.0, 2012-04-12 Switch from (system) readline to (embedded) editline (libedit). Version 6.3.2, 2012-03-28 Support coordinate ranges for delete, shift, raise commands. Multiple-step commands undone atomically. Version 6.3.1, 2012-03-26 Support xchange command. Display new coordinates of shifted/raised nodes for subsequent raise/shift. Version 6.3, 2012-03-21 Support opt course boxes. Version 6.2.1, 2012-03-18 Allow multiple coordinate pairs in cut command. Version 6.2, 2011-09-08 Replace undelete command by a general multi-level undo command. Default for undoing paste command is to re-insert at the original coordinates. Version 6.1.1, 2011-08-20 Fixed missing else which resulted in re-reading ...coursec commands. Better prompt for background color of a course box. Better error message if more than one node at a point. Version 6.1.0, 2011-08-18 Deal with commands \halfcoursec etc. that allow background-color specification. Version 6.0.4, 2011-07-27 Deleted prerex_LDFLAGS from src/Makefile.am. Version 6.0.3, 2010-07-04 Use only one of ncurses/termcap. Version 6.0.2, 2010-06-29 Deleted reference to stdbool.h. Modified configuration scripts to allow for readline using ncurses/termcap. Version 6.0.1, 2010-06-28 Modified configuration scripts to allow building on OpenSUSE (and Ubuntu?) Version 6.0, 2010-06-25 Allow long options --help and --version. Using autoconf/automake. Version 5.8, 2010-04-10 Suppress ".tex" in the prompt. Version 5.7, 2010-04-05 Delete command can now delete more than one element/arrow. Turning off all pdflatex output. Version 5.6.1, 2010-03-26 Open tex_file for writing before restoring from backup. Version 5.6, 2010-03-25 Modified chmod system calls to be compatible with cygwin on Windows fat32. Closing the tex_file before processing it (needed for Windows). Simplified the log-output generation if processing fails. Always use pdflatex because of automatic rotation in ps2pdf. Version 5.5, 2010-03-16 Added sleep(1) between initial generations of the pdf file. Removed all interactions before initial generation of pdf file. Removed the option of opening another tex file. Removed the automatic start-up of PDFVIEWER. Added PRIVATE (i.e., static) specifiers where appropriate. Version 5.4, 2009-11-12 Must re-open tex_file to regenerate it (!) Version 5.3, 2009-10-30 Use ps2pdf without attempting rotation correction when using latex, but, to allow for a script that tests for "Orientation: Landscape" in the ps file, if the environment variable PS2PDF is defined, its value is used in lieu of ps2pdf. Offer to quit if the user won't provide a file name. Allow for PAGER == most. Code clean-up, especially localizing many globals. Version 5.2, 2009-10-19 Corrected coding for new file name in open_tex_file. Version 5.1, 2009-10-01 Final processing no longer automatically uses LaTeX. Version 5.0, 2009-09-15 Replaced filename by basefilename and chartfilename to allow more than one document to share an included chart file and allow more than one chart to be included in a document. The *file* command has been removed. Version 4.3, 2009-09-06 Replaced strlcpy and strlcpy by append (with offset). Introduced triv_type to avoid a "pedantic" error. Corrected an incorrect sizeof argument in open_tex_file. Call regenerate_and_process after a partial raise. Version 4.2, 2008-07-17 Use the /Orientation directive to gs (ghostscript) to ensure proper orientation when slanted fonts are used. Version 4.1, 2008-05-16 Implement shift/raise of specified diagram elements. Eliminate unnecessary dependence on libtermcap. Version 4.0.1, 2008-02-28 Corrected txt field of struct text to have size LINE_LEN+1 Version 4.0, 2008-02-13 Test for curvatures > 100. Implement \text command. Version 3.8.1, 2007-03-17 Sleep for KILL_WAIT seconds before terminating the pdf viewer. Version I.8, 2007-02-08 Semicolon appended to most user commands suppresses regeneration and reprocessing. ^C saves to file.tex. Use quit; to exit without saving. Final processing uses latex -> dvips -> ps2pdf to produce a smaller final pdf. Attempts to display the pdf during editing using value of environment variable PDFVIEWER. Version 3.7, 2006-12-27 latex->dvips->ps2pdf processing restored as an option. Warns about quitting with unpasted cuts. Version 3.6, 2006-11-29 Corrects two minor logical errors in code for arrow deletion and box editing. Generates progress messages when analyzing/saving/processing. Re-loads after every shell escape, so we can discard the Edit command. Applies shift/raise to cut and deleted nodes. Processes tex files using pdflatex instead of latex -> dvips -> ps2pdf. Version 3.5, 2006-11-20 simpler and more flexible implementation of cut/paste, delete/undelete generate undelete messages automatic re-generation and processing after editing operation Version 3.4, 2006-11-15 deal with files that are (initially) read-only deal with attempts to cut arrows Version 3.3, 2006-11-07 preserve comment lines within the chart environment correct option-handling bug introduced in 3.0 Version 3.2, 2006-11-03 Version 3.1, 2006-10-29 introduce Edit command restore write-access to TeX file during Edit or shell-command execution try to display error message in log file if LaTeX processing fails Version 3.0, 2006-10-19 replaced calls to make file.pdf by successive calls to latex, dvips, ps2pdf removed all references to pdf viewer, user must start one him/herself replaced strncpy/cat by strlcpy/cat (my implementation of the OpenBSD functions) produce warning message for truncated course code, timetable, title Version 2.4, 2006-04-12 added undelete command no warnings using -Wall -Wextra allow for cut/paste of minis that are targets of arrow test for non-existence of source/target box/mini for new arrow handle more signals than SIGINT (such as SIGSEGV) Version 2.3, 2006-03-23 remove "which" checking of pdfviewer to allow, e.g., xpdf -remote label use geometry.sty for new blank TeX file declarations of optarg, optind moved to prerex.h Version 2.2.2, 2006-03-08 Free linked structures and readline strings. Turn grid off initially before restoring a backup. Version 2.2.1, 2006-02-18 Don't try to remove/restore access to an empty filename. Version 2.2, 2006-02-15 Inputs and outputs \begin{chart} ... \end{chart} instead of \chart{ ... } Version 2.1.1, 2006-02-13 Add designation PRIVATE ( = static) to definitions of functions and variables. Version 2.1, 2006-02-09 Trap SIGINT in order to restore write-access after ^C. Add Backup command. Version 2.0.3, 2006-02-07 New arrow should have default curvature. Version 2.0.1, 2006-02-06 Free list structures before Restoring. Version 2.0, 2006-02-03 Partition into separate modules prerex.c, inout.c, edit.c Version 1.2.2, 2006-02-02 Cleanup curvature code. Use %s to output % in regenerate_tex_file. Version 1.2.1, 2006-02-02 Allow for curved recommended and co-requisite arrows. Version 1.2.0, 2006-02-01 Restore command. Version 1.1.2, 2006-01-31 Create backup of Tex file before editing. Re-open TeX file for writing before regenerating. Version 1.1.1, 2006-01-30 TeX file read-only during editing (except when re-generating it). Version 1.1.0, 2006-01-29 Corrected use of cut stacks. Eliminated cut arrow command. Introduced delete box/mini and delete arrow. Checked for duplicate boxes, minis or arrows (e.g., when pasting). Version 1.0.5, 2006-01-28 Keep stacks of cut boxes, minis, and arrows. Version 1.0.4, 2006-01-27 Add option -p. Version 1.0.3, 2006-01-26 Replace system calls to "xpdf" by calls to pdfviewer (if defined). Version 1.0.2, 2006-01-25 Replace system call to "pdflatex filename" by call to "make filename.pdf" to provide more flexibility (e.g., LaTeX vs pdfLaTeX). Version 1.0.1, 2006-01-24 Error message for pdflatex failure now refers to filename.log. Inserted checks for lp or cp increasing too far in read_textfield and read_bracketed_textfield. Process TeX file before analyzing it (as a syntax sanity pre-check). Defer arrow output if source box not previously output. prerex-6.5.3/prerex-6.5.2/prerex.50000644000123700002140000001224111732415141014535 0ustar rdtrdt.TH PREREX 5 2012-03-21 "prerex_format" "" .SH NAME prerex_format -- a format for prerequisite-chart descriptions .SH DESCRIPTION This manual describes the format of prerequisite-chart descriptions that can be processed by .B [pdf]latex (normally using a suitable .BR prerex.sty (7) style file) and edited using the .BR prerex (1) interactive editor (or by any conventional text editor). .SH TERMINOLOGY A prerequisite chart consists of a number of .I course boxes, linked by .I arrows. Courses are either .I half or .I full, and may be .I required or .I optional (or neither). Each course box can contain a course .I code (upper left corner), a course .I title (lower half), and .I timetable information (upper right corner). An arrow can be either a .I prerequisite (solid), a .I corequisite (dotted), or .I recommended (dashed). When a conventional arrow would be inappropriate, a .I mini course just above a target box can be used. .SH STRUCTURE The file should contain exactly one instance of a LaTeX environment .P .BI \ebegin{chart} " instruction ... " \eend{chart} .P with at most one .I instruction per line. Note that a program such as .BR prerex (1) analyzes prerex-format files .I without using TeX; for example, macro definitions will be ignored and macro calls will not be expanded. .PP Instructions may be preceded by white space. Lines that start with % are treated as comments and ignored. The order of instructions is not significant except that the instruction for the source and target box o an arrow should .I precede the instruction for the arrow. The instruction formats are described in the following sections. .SH COURSE BOXES The instructions producing course boxes have the following forms: .HP .BI \ehalfcourse " x,y" :{ code }{ title }{ timetable } .HP .BI \efullcourse " x,y" :{ code }{ title }{ timetable } .HP .BI \ereqhalfcourse " x,y" :{ code }{ title }{ timetable } .HP .BI \ereqfullcourse " x,y" :{ code }{ title }{ timetable } .HP .BI \eopthalfcourse " x,y" :{ code }{ title }{ timetable } .HP .BI \eoptfullcourse " x,y" :{ code }{ title }{ timetable } .LP where .I x,y are the coordinates of the .I centerpoint of the box, relative to the origin of the coordinate system at the lower-left corner of the diagram. The .I code, .I title, and .I timetable arguments are arbitrary (well-bracketed) text, possibly with LaTeX markup. The following are similar but take an additional argument to specify the (non-default) background color of the course box: .IP .BI \ehalfcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \efullcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \ereqhalfcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \ereqfullcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \eopthalfcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \eoptfullcoursec " x,y" :{ code }{ title }{ timetable }{ color } .LP .SH MINI COURSE BOXES AND TEXT A mini course is produced by an instruction of the form .HP .BI \emini " x,y" :{ code } .HP A text line is inserted into the chart by an instruction of the form .HP .BI \etext " x,y" :{ line-of-text } .HP The maximum allowed length of a course-code may be smaller that the maximum allowed for a line of text. .SH ARROWS Arrows between course boxes (or from a mini to a course box) are produced by instructions of the form .HP .BI \eprereq " x0,y0,x1,y1" : .HP .BI \ecoreq " x0,y0,x1,y1" : .HP .BI \erecomm " x0,y0,x1,y1" : .LP These produce, respectively, solid, dotted, and dashed arrows from the course box (or mini) centered at coordinates .I x0,y0 to the course box centered at coordinates .I x1,y1. .PP In some implementations, certain arrows by default have a non-zero curvature. It is possible to override the default curvature for a particular arrow by using the instructions .HP .BI \eprereqc " x0,y0,x1,y1;c" : .HP .BI \ecoreqc " x0,y0,x1,y1;c" : .HP .BI \erecommc " x0,y0,x1,y1;c" : .LP where .I c is an integer in the range 0-100 specifying the desired curvature; for example, .IR c= 0 will produce a .I straight arrow. To change the default curvature, the user program may redefine the .B \eDefaultCurvature command. .SH COORDINATE GRID The following instruction produces a coordinate grid, which is useful for editing a diagram: .HP .B \egrid .LP This is normally placed before all the other instructions so that grid lines are in the background, covered by course boxes, minis, and arrows. .SH WEB LINKS Course boxes may be linked to web addresses. The URL for course boxes may be set by the user by redefining the .B \eCourseURL command; when called for a course box, it is supplied with three arguments, the .I x and .I y coordinates of the box, mini, or textline, and the .I code argument of the course box. For example, .HP .B \erenewcommand{\eCourseURL}[3]{http://www.cs.queensu.ca/undergraduate/courses/#3.html} .LP is appropriate for courses at the School of Computing, Queen's University. The first two arguments can be used to display the coordinates of a box, mini, or textline in some PDF viewers while the mouse hovers over it when the source file is being edited. .SH AUTHOR R. D. Tennent (rdt@cs.queensu.ca) .SH SEE ALSO .BR prerex (1), .BR prerex.sty (7). prerex-6.5.3/prerex-6.5.2/acinclude.m40000644000123700002140000000547511741565153015357 0ustar rdtrdt dnl dnl read lib version from file (and trim trailing newline) dnl define([EL_RELEASE], [patsubst(esyscmd([. src/shlib_version; echo $major.$minor]), [ ])]) dnl dnl read cvsexport timestamp from file (and trim trailing newline) dnl define([EL_TIMESTAMP], [patsubst(esyscmd([date +"%Y%m%d"]), [ ])]) dnl dnl NetBSD use the -mdoc macro package for manpages, but e.g. dnl AIX and Solaris only support the -man package. dnl AC_DEFUN([EL_MANTYPE], [ MANTYPE= TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb" AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath) if ${NROFF} -mdoc ${srcdir}/doc/editrc.5.roff >/dev/null 2>&1; then MANTYPE=mdoc fi AC_SUBST(MANTYPE) ]) dnl dnl Check if getpwnam_r and getpwuid_r are POSIX.1 compatible dnl POSIX draft version returns 'struct passwd *' (used on Solaris) dnl NOTE: getpwent_r is not POSIX so we always use getpwent dnl AC_DEFUN([EL_GETPW_R_POSIX], [ AC_MSG_CHECKING([whether getpwnam_r and getpwuid_r are posix like]) # The prototype for the POSIX version is: # int getpwnam_r(char *, struct passwd *, char *, size_t, struct passwd **) # int getpwuid_r(uid_t, struct passwd *, char *, size_t, struct passwd **); AC_TRY_LINK([#include #include #include ], [getpwnam_r(NULL, NULL, NULL, (size_t)0, NULL); getpwuid_r((uid_t)0, NULL, NULL, (size_t)0, NULL);], [AC_DEFINE([HAVE_GETPW_R_POSIX], 1, [Define to 1 if you have getpwnam_r and getpwuid_r that are POSIX.1 compatible.]) AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)]) ]) AC_DEFUN([EL_GETPW_R_DRAFT], [ AC_MSG_CHECKING([whether getpwnam_r and getpwuid_r are posix _draft_ like]) # The prototype for the POSIX draft version is: # struct passwd *getpwuid_r(uid_t, struct passwd *, char *, int); # struct passwd *getpwnam_r(char *, struct passwd *, char *, int); AC_TRY_LINK([#include #include #include ], [getpwnam_r(NULL, NULL, NULL, (size_t)0); getpwuid_r((uid_t)0, NULL, NULL, (size_t)0);], [AC_DEFINE([HAVE_GETPW_R_DRAFT], 1, [Define to 1 if you have getpwnam_r and getpwuid_r that are draft POSIX.1 versions.]) AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)]) ]) dnl dnl use option --enable-widec to turn on use of wide-character support dnl AC_DEFUN([EL_ENABLE_WIDEC], [ AC_MSG_CHECKING(if you want wide-character code) AC_ARG_ENABLE(widec, [ --enable-widec compile with wide-char/UTF-8 code], [with_widec=$enableval], [with_widec=no]) AC_MSG_RESULT($with_widec) if test "$with_widec" = yes ; then AC_DEFINE(WIDECHAR, 1, [Define to 1 if you want wide-character code]) fi AM_CONDITIONAL([WIDECHAR], [test "$with_widec" = yes]) ]) prerex-6.5.3/prerex-6.5.2/Makefile.in0000644000123700002140000007776712226136247015245 0ustar rdtrdt# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = prerex$(EXEEXT) subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ compile depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(man5dir)" PROGRAMS = $(bin_PROGRAMS) am_prerex_OBJECTS = prerex-prerex.$(OBJEXT) prerex-inout.$(OBJEXT) \ prerex-edit.$(OBJEXT) prerex-utils.$(OBJEXT) prerex_OBJECTS = $(am_prerex_OBJECTS) prerex_LDADD = $(LDADD) prerex_LINK = $(CCLD) $(prerex_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(prerex_SOURCES) DIST_SOURCES = $(prerex_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 man5dir = $(mandir)/man5 NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ prerex_SOURCES = prerex.h prerex.c inout.c edit.c utils.c prerex_CFLAGS = -O4 -Wall -Wextra -pedantic-errors man_MANS = prerex.1 prerex.5 EXTRA_DIST = $(man_MANS) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) prerex$(EXEEXT): $(prerex_OBJECTS) $(prerex_DEPENDENCIES) @rm -f prerex$(EXEEXT) $(AM_V_CCLD)$(prerex_LINK) $(prerex_OBJECTS) $(prerex_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prerex-edit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prerex-inout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prerex-prerex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prerex-utils.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` prerex-prerex.o: prerex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -MT prerex-prerex.o -MD -MP -MF $(DEPDIR)/prerex-prerex.Tpo -c -o prerex-prerex.o `test -f 'prerex.c' || echo '$(srcdir)/'`prerex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/prerex-prerex.Tpo $(DEPDIR)/prerex-prerex.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='prerex.c' object='prerex-prerex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -c -o prerex-prerex.o `test -f 'prerex.c' || echo '$(srcdir)/'`prerex.c prerex-prerex.obj: prerex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -MT prerex-prerex.obj -MD -MP -MF $(DEPDIR)/prerex-prerex.Tpo -c -o prerex-prerex.obj `if test -f 'prerex.c'; then $(CYGPATH_W) 'prerex.c'; else $(CYGPATH_W) '$(srcdir)/prerex.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/prerex-prerex.Tpo $(DEPDIR)/prerex-prerex.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='prerex.c' object='prerex-prerex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -c -o prerex-prerex.obj `if test -f 'prerex.c'; then $(CYGPATH_W) 'prerex.c'; else $(CYGPATH_W) '$(srcdir)/prerex.c'; fi` prerex-inout.o: inout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -MT prerex-inout.o -MD -MP -MF $(DEPDIR)/prerex-inout.Tpo -c -o prerex-inout.o `test -f 'inout.c' || echo '$(srcdir)/'`inout.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/prerex-inout.Tpo $(DEPDIR)/prerex-inout.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inout.c' object='prerex-inout.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -c -o prerex-inout.o `test -f 'inout.c' || echo '$(srcdir)/'`inout.c prerex-inout.obj: inout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -MT prerex-inout.obj -MD -MP -MF $(DEPDIR)/prerex-inout.Tpo -c -o prerex-inout.obj `if test -f 'inout.c'; then $(CYGPATH_W) 'inout.c'; else $(CYGPATH_W) '$(srcdir)/inout.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/prerex-inout.Tpo $(DEPDIR)/prerex-inout.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inout.c' object='prerex-inout.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -c -o prerex-inout.obj `if test -f 'inout.c'; then $(CYGPATH_W) 'inout.c'; else $(CYGPATH_W) '$(srcdir)/inout.c'; fi` prerex-edit.o: edit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -MT prerex-edit.o -MD -MP -MF $(DEPDIR)/prerex-edit.Tpo -c -o prerex-edit.o `test -f 'edit.c' || echo '$(srcdir)/'`edit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/prerex-edit.Tpo $(DEPDIR)/prerex-edit.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='edit.c' object='prerex-edit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -c -o prerex-edit.o `test -f 'edit.c' || echo '$(srcdir)/'`edit.c prerex-edit.obj: edit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -MT prerex-edit.obj -MD -MP -MF $(DEPDIR)/prerex-edit.Tpo -c -o prerex-edit.obj `if test -f 'edit.c'; then $(CYGPATH_W) 'edit.c'; else $(CYGPATH_W) '$(srcdir)/edit.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/prerex-edit.Tpo $(DEPDIR)/prerex-edit.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='edit.c' object='prerex-edit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -c -o prerex-edit.obj `if test -f 'edit.c'; then $(CYGPATH_W) 'edit.c'; else $(CYGPATH_W) '$(srcdir)/edit.c'; fi` prerex-utils.o: utils.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -MT prerex-utils.o -MD -MP -MF $(DEPDIR)/prerex-utils.Tpo -c -o prerex-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/prerex-utils.Tpo $(DEPDIR)/prerex-utils.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='utils.c' object='prerex-utils.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -c -o prerex-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c prerex-utils.obj: utils.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -MT prerex-utils.obj -MD -MP -MF $(DEPDIR)/prerex-utils.Tpo -c -o prerex-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/prerex-utils.Tpo $(DEPDIR)/prerex-utils.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='utils.c' object='prerex-utils.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(prerex_CFLAGS) $(CFLAGS) -c -o prerex-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi` install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } install-man5: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" @list=''; test -n "$(man5dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man5dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man5dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) config.h installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-man5 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 uninstall-man5 .MAKE: all install-am install-strip .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-man5 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-man uninstall-man1 uninstall-man5 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: prerex-6.5.3/prerex-6.5.2/prerex.10000644000123700002140000002526712015313246014543 0ustar rdtrdt.TH PREREX 1 2012-04-24 "prerex-6.5.1" "" .SH NAME prerex \- interactive editor of prerequisite-chart descriptions .SH SYNOPSIS .BR prerex [ .IR options ] [ .IR basefile [ .tex ] [ .IR chartfile [ .tex ] ] ] .SH DESCRIPTION .B prerex is an interactive program for editing prerequisite-chart descriptions in the .BR prerex (5) format. The user does not normally have to be familiar with details of the format. The editor supports add, remove, cut-and-paste, and edit operations on diagram elements, and vertical or horizontal shifts of a list of specified elements, all the elements in a rectangular region, or the entire diagram. The edited diagram may be saved, re-processed, and viewed in a PDF viewer, without exiting the editor. Alternatively, .BR vprerex (1) will open a .BR prerex (1) window and display the corresponding PDF file alongside. .SH TERMINOLOGY A prerequisite chart consists of several .I course boxes, linked by .I arrows. Courses are either .I half or .I full, and may be .I required or .I optional (or neither). Each course box contains a course .I code (upper left corner), a course .I title (lower half), and .I timetable information (upper right corner). An arrow is either a .I prerequisite (solid), a .I corequisite (dotted), or .I recommended (dashed). When a conventional arrow would be inappropriate, a .I mini course just above a target box may be used. A line of text may have been placed anywhere in the chart. .PP In some implementations of the .BR prerex (5) format, (some) arrows may be curved and by default have non-zero curvature. The curvature of individual arrows may be edited using the .BR prerex (1) editor. To modify the default curvature (or set it to zero), see .BR prerex.sty (7). .SH COORDINATE SYSTEM A conventional two-dimensional coordinate system is used to specify the locations of diagram elements; the origin (where .I x = 0 and .IR "y = 0" ) is at the lower-left corner of the diagram. For convenience, a coordinate grid is normally displayed in the background while a diagram is being edited. .PP The coordinates of a .I box, .I mini, or .I text-line are those of its centre point. An .I arrow is described by the coordinates of the centre points of its source and target boxes/minis/text-lines. The notation .IB "x0,y0" : "x1,y1" denotes all the nodes (course boxes, minis, texts) in the rectangle whose northwest and southeast corners are at coordinates .IR "x0,y0 " and " x1,y1." .SH USAGE If .B prerex is invoked on one existing file, a back-up copy is made of it, the .I x,y coordinate grid is turned on, the file is processed by using a system call to .BR pdflatex (1), and then the user gets a command summary and an interactive prompt of the form .IP .I file.tex> .LP If no file argument is given on the command line, the user is prompted to supply a file name. In either case, if the file name provided does not have a .I .tex extension, .I .tex is appended to it. .PP If the .I file.tex file named does .I not already exist, a new "empty" chart file with that name is created, and then it is processed as above. .PP If a .I second filename is provided, the first filename is treated as the base file of a LaTeX document and the second as an included file that contains the .I chart environment to be edited. This allows more than one document to share an included chart file and allows more than one chart to be included in a single document. .PP The user may enter commands at the interactive command prompt as follows: .TP 18 .BI box " x,y" edit a course box at .I x,y, if necessary, creating a new course box there .TP .BI mini " x,y" edit a mini at .I x,y, if necessary, creating a new mini there .TP .BI text " x,y" edit a text-line at .I x,y, if necessary, creating a new text-line there .TP .BI arrow " x0,y0,x1,y1" edit an arrow from .I x0,y0 to .I x1,y1, if necessary, creating a new such arrow .TP .BI cut " xi,yi ... " (temporarily) remove the box, mini, or text at .I xi,yi (including arrows into/out of the box/mini/text) .TP .BI "paste [" x,y "]" re-insert most recently cut but not yet pasted box, mini, or text at .I x,y (including arrows into/out of the box/mini/text), or at the original coordinates if .I " x,y" omitted .TP .BI xchange " x0,y0 x1,y1" exchange the box, mini or text at .I x0,y0 with that at .I x1,y1. This is implemented as a sequence of two cuts followed by two pastes to the same points. .TP .BI "delete [ " x,y " | " x0,y0,x1,y1 " | " x0,y0 : x1,y1 " ] " ... remove the specified boxes, minis, texts, or arrows (including automatically all arrows into/out of each box/mini/text) .TP .B undo undo the most recent editing command (not already undone) .TP .BI "shift [\-]" s " [ " x,y " | " x0,y0 : x1,y1 " ] " ... move specified diagram elements .I x units right [left]; if no elements are specified, the whole diagram is shifted .TP .BI "raise [\-]" r " [ " x,y " | " x0,y0 : x1,y1 " ] " ... move specified diagram elements .I y units up [down]; if no elements are specified, the whole diagram is raised .TP .B "write, !" save to the current .I chartfile.tex and process the chart by calling .BR pdflatex (1) on the base file. .TP .B "quit, exit, x, ^D" turn off the coordinate grid, restore write-access, save to the current .I chartfile.tex, process the base file and exit. .TP .BI ! cmd restore write access to .I chartfile.tex, execute shell command .I cmd, re-load and re-process the base file (in case the command changed anything), and remove write-access. .TP .B "Backup" copy the current .I chartfile.tex to the back-up file .IR .chartfile.tex; equivalent to .BI !cp " chartfile.tex .chartfile.tex" .TP .B "Restore" delete the current .I chartfile.tex and editing buffer, and replace them using the current back-up in .I .chartfile.tex. .TP .BR grid " [y/n]" turn on/off coordinate-grid background .TP .BR "help, ?" print a command summary .LP After most editing commands, the editing buffer is automatically saved to .I chartfile.tex and the basefile is processed; the .B cut and .B paste commands are exceptions: saving and processing take place only when all outstanding cuts have been pasted. Saving and processing can be .I forced by using the .B write (or .BR ! ) command, or .I suppressed for all commands (except .BR write and .BR ! ) by appending a ";" to the command immediately prior to entering it. To exit the editor .I without saving to the current .IR chartfile.tex , use .B quit; (.i.e., .B quit followed by a semi-colon) or a similar combination. Starting in Version 3.8, .B ^C and other interrupts result in the editing buffer being saved to .I chartfile.tex before the editor is exited. .SH OPTIONS .TP 8 .BR -v output program name and version number, and quit .TP .BR -h output usage summary and quit .SH NOTES The main difference between .B mini and .B text is in the maximum lengths for the text displayed; the latter allows a full line of text, not merely a course code. Also a text-line does not have an associated URI (when the grid is off). The text "line" may actually be displayed as a paragraph by using a LaTeX \\parbox. .PP To save the current state of .I chartfile.tex, use .B Backup or a comparable shell command. A history list of interpreted commands is maintained and is accessible using the up-arrow key. .PP If processing of the chart fails, .B prerex will attempt to display the LaTeX error message from the log file. The chart file can be fixed using a conventional text editor or LaTeX-oriented editor. LaTeX processing should fail only if there is an initial problem or if ill-formed LaTeX markup has been inserted into a text field. .PP Any (non-empty) prefix of a command suffices; for example, .BR q , .BR qu , or .B qui may be used instead of .BR quit . Some of the commands will begin a dialogue with the user in order to fill in or modify properties; the prompts should be self-explanatory. .PP Since version 5.5, .B prerex no longer automatically calls a PDF viewer (because it may be embedded in an instance of .BR vprerex (1) which already provides a PDF display). If .B prerex is being used by itself, a PDF viewer may be invoked using the .BI ! cmd shell-escape mechanism. Also, .B prerex no longer interacts with the user until a PDF file is available; this is for use with .BR vprerex (1). For example, if the .tex file is initially read-only, .B prerex aborts. .SH FILES A LaTeX style file .BR prerex.sty (7) that implements the macro calls defined by the .BR prerex (5) format must be available to .BR [pdf]latex (1) to process the chart file. Before any editing is allowed, .I chartfile.tex is copied to .I .chartfile.tex as a backup. .SH ENVIRONMENT .PP The most convenient viewing program to use with .B prerex is one like .BR gv (1), .BR gsview (1), .BR kghostview(1), .BR kpdf (1) or .BR okular (1) that may be configured to "watch" the pdf file and re-load the display automatically when the file changes. .BR evince (1) has a Reload button and .BR xpdf (1) supports re-loading using the keystroke "R", but re-loading is much less convenient with .BR acroread (1) and .BR gpdf (1), which may have to be re-started. .PP Recent versions of some PDF viewers show the URIs of hyperlinks in a tooltip or in the status bar; this mechanism is used by some implementations of .BR prerex.sty (7) to allow display of the coordinates of a box, mini, text-line, or arrow when the mouse hovers over it (while the coordinate grid is on and the relevant chart file is presumably being edited). .PP The .B prerex package at .B http://www.ctan.org/tex-archive/graphics/prerex/ has source code for .BR vprerex (1), a GUI front-end for .B prerex which is prerex-enabled. .SH BUGS .B prerex analyzes chart files without using TeX; thus, macro calls are .I not expanded, and anything in the chart file before or after the (first) .B "\ebegin{chart} ... \eend{chart}" environment is ignored (but preserved) by the editor. Lines that begin with "%" within the chart environment are preserved but other comments within the chart environment are .I not preserved and may interfere with command parsing. .PP From version 5.6, .B prerex no longer supports the latex -> dvips -> ps2pdf toolchain as an option. .SH AUTHOR R. D. Tennent (rdt@cs.queensu.ca) .SH DEPENDENCIES .B prerex uses the .BR editline (3) library if available and the GNU .BR readline (3) and .BR history (3) libraries otherwise. .SH SEE ALSO .BR acroread (1), .BR evince (1), .BR gpdf (1), .BR gsview (1), .BR gv (1), .BR kghostview (1), .BR kpdf (1), .BR okular (1), .BR pdflatex (1), .BR prerex (5), .BR prerex.sty (7), .BR previewer (1), .BR vprerex (1), .BR xpdf (1). prerex-6.5.3/prerex-6.5.2/edit.c0000644000123700002140000012106112226134074014236 0ustar rdtrdt/* edit.c -- editing module for an interactive editor of prerequisite-chart descriptions Copyright (c) 2005-12 R. D. Tennent School of Computing, Queen's University, rdt@cs.queensu.ca This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ # include "prerex.h" PRIVATE element *first_cut; /* stack of cut nodes */ PRIVATE done *first_done; /* stack of commands done */ char deftext[LINE_LEN]; /* buffer for default input */ # ifdef HAVE_LIBREADLINE int set_deftext (void) /* used by readline to output defaults */ { rl_insert_text (deftext); deftext[0] = '\0'; return 0; } # else PRIVATE char prompt[LINE_LEN]; PRIVATE char *prompt_n; char * prompt_f (void) /* used to output prompts */ { return prompt; } # endif char * Readline ( char * str ) /* Uses str as the prompt and deftext as the "default" */ { # ifdef HAVE_LIBREADLINE return readline (str); # else char *line; int line_n; prompt[0] = '\0'; prompt_n = prompt; append (prompt, &prompt_n, str, sizeof (prompt)); el_push (el, deftext); line = (char *) el_gets (el, &line_n); if (line == NULL) error("Readline fails."); line[line_n - 1] = '\0'; /* replace '\n' by '\0' */ deftext[0] = '\0'; return line; # endif } PRIVATE char *command_line; PRIVATE char *clp; PRIVATE void free_elements (element ** pb) { if (*pb != NULL) { element *pbb = *pb; free_elements (&(pbb->next)); free (pbb); *pb = NULL; } } PRIVATE void free_lists (void) { free_elements (&first_node); free_elements (&first_arrow); free_elements (&first_cut); } PRIVATE void skip_command (void) { while (isspace (*clp)) clp++; while (isalpha (*clp)) clp++; /* command */ while (isspace (*clp)) clp++; } PRIVATE void execute_shell_command (void) { fflush (tex_file); if (fclose (tex_file) == EOF) error (".tex file closure failed."); if (system (clp)) puts("System call failed."); tex_file = fopen (chartfilename, "r+"); if (tex_file == NULL) error ("Can't re-open the .tex file."); close_files(); free_lists(); analyze_tex_file (); regenerate_and_process (); } PRIVATE void shiftAllNodes ( element *pb, coord c ) { while (pb != NULL) { pb->u.n.at.x += c; pb = pb->next; } } PRIVATE void shift (void) { coord c; int n_shifts = 0; done *this; coord x; element *pb = NULL; if (sscanf (command_line, "%*s %i", &c) != 1) { puts ("Can't read shift amount."); return; } clp = command_line; skip_command (); if (*clp == '-' || *clp == '+') clp++; while (isdigit (*clp)) clp++; /* shift amount */ if (sscanf (clp, "%i", &x) != 1) { /* shift all nodes */ shiftAllNodes(first_node, c); /* arrows refer to source and target nodes and will be shifted automatically. */ this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = SHIFT_ALL; this->next = first_done; this->i = c; first_done = this; regenerate_and_process (); return; } printf("Nodes shifted to: "); while (true) /* process coordinate pairs/ranges */ { point p0, p1; if (sscanf (clp, "%i", &p0.x) != 1) { break; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',') { printf("\nCan't analyze coordinates."); break; } clp++; /* ',' */ if (sscanf (clp, "%i", &p0.y) != 1) { printf("\nCan't analyze coordinates."); break; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ':') { /* shift this node */ pb = node_at (p0); if (pb == NULL) { printf("\nNo node at coordinates %i,%i.\n", p0.x, p0.y); break; } this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = NODE_SHIFT; this->next = first_done; this->i = c; /* record shift amount and pointer to shifted node element */ this->e = pb; first_done = this; pb->u.n.at.x += c; printf(" %i,%i", p0.x + c, p0.y); n_shifts++; continue; } clp++; /* ':' */ if (sscanf (clp, "%i", &p1.x) != 1) { printf("\nCan't analyze coordinates."); break; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',') { printf("\nCan't analyze coordinates."); break; } clp++; /* ',' */ if (sscanf (clp, "%i", &p1.y) != 1) { printf("\nCan't analyze coordinates."); break; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; /* shift all nodes in box p0:p1 */ { pb = first_node; while (pb != NULL) { if (inrange(pb->u.n.at.x, p0.x, p1.x) && inrange(pb->u.n.at.y, p0.y, p1.y)) /* shift this node */ { pb->u.n.at.x += c; printf(" %i,%i", pb->u.n.at.x, pb->u.n.at.y); this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = NODE_SHIFT; this->next = first_done; this->i = c; /* record shift amount and pointer to shifted node element */ this->e = pb; first_done = this; n_shifts++; } pb = pb->next; } } } /* while */ if (n_shifts > 0) { puts(""); this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = COMPOSITE; this->next = first_done; this->i = n_shifts; /* record number of shifts to undo */ first_done = this; } regenerate_and_process (); } PRIVATE void raiseAllNodes ( element *pb, coord c ) { while (pb != NULL) { pb->u.n.at.y += c; pb = pb->next; } } PRIVATE void Raise (void) /* "Raise" to avoid conflicting with signal.h function raise */ { coord c; int n_raises = 0; done *this; coord x; element *pb = NULL; if (sscanf (command_line, "%*s %i", &c) != 1) { puts ("Can't read raise amount."); return; } clp = command_line; skip_command (); if (*clp == '-' || *clp == '+') clp++; while (isdigit (*clp)) clp++; /* raise amount */ if (sscanf (clp, "%i", &x) != 1) { /* raise all nodes */ raiseAllNodes(first_node, c); /* arrows refer to source and target nodes and will be raised automatically. */ this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = RAISE_ALL; this->next = first_done; this->i = c; first_done = this; regenerate_and_process (); return; } printf("Nodes raised to: "); while (true) /* process coordinate pairs */ { point p0, p1; if (sscanf (clp, "%i", &p0.x) != 1) break; while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',') { printf("\nCan't analyze coordinates."); break; } clp++; /* ',' */ if (sscanf (clp, "%i", &p0.y) != 1) { printf("\nCan't analyze coordinates."); break; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ':') { /* raise this node */ pb = node_at (p0); if (pb == NULL) { printf("No node at coordinates %i,%i.\n", p0.x, p0.y); break; } this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = NODE_RAISE; this->next = first_done; this->i = c; /* record raise amount and pointer to raised node element */ this->e = pb; first_done = this; pb->u.n.at.y += c; printf(" %i,%i", p0.x, p0.y + c); n_raises++; continue; } clp++; /* ':' */ if (sscanf (clp, "%i", &p1.x) != 1) { printf("\nCan't analyze coordinates."); break; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',') { printf("\nCan't analyze coordinates."); break; } clp++; /* ',' */ if (sscanf (clp, "%i", &p1.y) != 1) { printf("\nCan't analyze coordinates."); break; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; /* raise all nodes in box p0:p1 */ { done *this; pb = first_node; while (pb != NULL) { if (inrange(pb->u.n.at.x, p0.x, p1.x) && inrange(pb->u.n.at.y, p0.y, p1.y)) /* raise this node */ { pb->u.n.at.y += c; printf(" %i,%i", pb->u.n.at.x, pb->u.n.at.y); this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = NODE_RAISE; this->next = first_done; this->i = c; /* record raise amount and pointer to shifted node element */ this->e = pb; first_done = this; n_raises++; } pb = pb->next; } } } /* while */ if (n_raises > 0) { puts(""); this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = COMPOSITE; this->next = first_done; this->i = n_raises; /* record the number of raises to undo */ first_done = this; } regenerate_and_process (); } PRIVATE void cut_node (point p) { element *pn, **ppn; done *this; ppn = &first_node; /* used if the first node is removed from the list */ pn = first_node; while (pn != NULL && !eq (p, pn->u.n.at)) { ppn = &(pn->next); pn = pn->next; } if (pn == NULL) { puts ("No course box, mini or text at this location."); return; } *ppn = pn->next; /* removes pn node from the list */ /* move node to cut list */ pn->next = first_cut; first_cut = pn; this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = CUT; this->next = first_done; first_done = this; } PRIVATE void delete_node (point p) { element *pn, **ppn; done *this; ppn = &first_node; pn = first_node; while (pn != NULL && !eq (p, pn->u.n.at)) { ppn = &(pn->next); pn = pn->next; } if (pn == NULL) { puts ("No course box, mini or text at this location."); return; } *ppn = pn->next; this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = NODE_DELETE; this->next = first_done; this->e = pn; first_done = this; printf("Node at %i,%i deleted.\n", p.x, p.y); } PRIVATE void delete_arrow (point p0, point p1) { done *this; element *n0 = node_at (p0); element *n1 = node_at (p1); element *pa; element **ppa; if (n0 == NULL) { puts ("No course box, mini or text at the source location."); return; } if (n1 == NULL) { puts ("No course box, mini or text at the target location."); return; } pa = first_arrow; ppa = &first_arrow; /* used if the first arrow is removed */ while (pa != NULL && (pa->u.a.source != n0 || pa->u.a.target != n1)) { ppa = &(pa->next); pa = pa->next; } if (pa == NULL) { puts ("No such arrow."); return; } *ppa = pa->next; /* removes pa arrow from the list */ this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = ARROW_DELETE; this->next = first_done; this->e = pa; first_done = this; printf("Arrow from %i,%i to %i,%i deleted.\n", p0.x, p0.y, p1.x, p1.y); } PRIVATE void analyze_cut_command (void) { clp = command_line; skip_command (); while (true) /* process coordinate pairs */ { point p; if (sscanf (clp, "%i", &p.x) != 1) break; while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',') { puts("Can't analyze coordinates."); return; } clp++; /* ',' */ if (sscanf (clp, "%i", &p.y) != 1) { puts("Can't analyze coordinates."); return; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; cut_node (p); } } PRIVATE void analyze_delete_command (void) { int n_deletions = 0; done *this; clp = command_line; skip_command (); while (true) /* process coordinate pairs/ranges/4-tuples */ { point p0, p1; bool colon; if (sscanf (clp, "%i", &p0.x) != 1) break; while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',') { puts("Can't analyze coordinates."); break; } clp++; /* ',' */ if (sscanf (clp, "%i", &p0.y) != 1) { puts("Can't analyze coordinates."); break; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',' && *clp != ':') { delete_node (p0); n_deletions++; continue; } colon = *clp == ':'; clp++; /* ',' or ':' */ if (sscanf (clp, "%i", &p1.x) != 1) { puts("Can't analyze coordinates."); break; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',') { puts("Can't analyze coordinates."); break; } clp++; /* ',' */ if (sscanf (clp, "%i", &p1.y) != 1) { puts("Can't analyze coordinates."); break; } if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; if (!colon) /* arrow from p0 to p1 */ { delete_arrow (p0, p1); n_deletions++; continue; } /* delete all nodes in box p0:p1 */ { element *pn, **ppn; ppn = &(first_node); pn = first_node; while (pn != NULL) { if (inrange(pn->u.n.at.x, p0.x, p1.x) && inrange(pn->u.n.at.y, p0.y, p1.y)) /* delete this node */ { *ppn = pn->next; printf("Node at %i,%i deleted.\n", pn->u.n.at.x, pn->u.n.at.y); this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = NODE_DELETE; this->next = first_done; this->e = pn; first_done = this; n_deletions++; } else ppn = &(pn->next); pn = pn->next; } } } /* while */ this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = COMPOSITE; this->next = first_done; this->i = n_deletions; /* record the number of deletions to undo */ first_done = this; regenerate_and_process (); } PRIVATE void undo (void) { done *this = first_done; if (this == NULL) { puts ("Nothing more to undo."); return; } first_done = this->next; if (this->tag == NODE_DELETE) { element *pn = this->e; if (insert_node (pn)) { puts ("There is now another course box, mini or text at that location."); return; } printf ("Course box, mini or text at %i,%i restored.\n", pn->u.n.at.x, pn->u.n.at.y); } else if (this->tag == ARROW_DELETE) { element *pn = this->e; if (insert_arrow (pn)) { puts ("Can't undelete arrow: source and/or target is/are now missing."); return; } printf ("Arrow from %i,%i to %i,%i restored.\n", pn->u.a.source->u.n.at.x, pn->u.a.source->u.n.at.y, pn->u.a.target->u.n.at.x, pn->u.a.target->u.n.at.y); } else if (this->tag == NODE_CREATE) { element *pn, **ppn; point p = this->p; ppn = &(first_node); pn = first_node; while (pn != NULL && !eq (p, pn->u.n.at)) { ppn = &(pn->next); pn = pn->next; } if (pn == NULL) { puts ("No course box, mini or text at this location."); return; } *ppn = pn->next; printf("Course box, mini or text at %i,%i deleted.\n", p.x, p.y); } else if (this->tag == ARROW_CREATE) { element *n0, *n1, *pa, **ppa; n0 = this->a.source; n1 = this->a.target; pa = first_arrow; ppa = &(first_arrow); while (pa != NULL && (pa->u.a.source != n0 || pa->u.a.target != n1)) { ppa = &(pa->next); pa = pa->next; } if (pa == NULL) { printf("There is no arrow from %i,%i to %i,%i.\n", n0->u.n.at.x, n0->u.n.at.y, n1->u.n.at.x, n1->u.n.at.y); return; } *ppa = pa->next; printf("Arrow from %i,%i to %i,%i deleted.\n", n0->u.n.at.x, n0->u.n.at.y, n1->u.n.at.x, n1->u.n.at.y); } else if (this->tag == NODE_EDIT) { element *pn = this->e; pn->u.n = this->n; /* restore old node */ printf("Course box, mini or text at %i,%i restored.\n", pn->u.n.at.x, pn->u.n.at.y); } else if (this->tag == ARROW_EDIT) { element *pa = this->e; pa->u.a = this->a; /* restore old arrow */ printf("Arrow from %i,%i to %i,%i restored.\n", pa->u.a.source->u.n.at.x, pa->u.a.source->u.n.at.y, pa->u.a.target->u.n.at.x, pa->u.a.target->u.n.at.y); } else if (this->tag == NODE_SHIFT) { element *pb = this->e; int c = this->i; pb->u.n.at.x -= c; printf("Course box, mini or text unshifted %i units to %i,%i.\n", c, pb->u.n.at.x, pb->u.n.at.y); } else if (this->tag == NODE_RAISE) { element *pb = this->e; int c = this->i; pb->u.n.at.y -= c; printf("Course box, mini or text unraised %i units to %i,%i.\n", c, pb->u.n.at.x, pb->u.n.at.y); } else if (this->tag == SHIFT_ALL) { int c = this->i; shiftAllNodes(first_node, -c); printf("All nodes unshifted %i units.\n", c); } else if (this->tag == RAISE_ALL) { int c = this->i; raiseAllNodes(first_node, -c); printf("All nodes unraised %i units.\n", c); } else if (this->tag == CUT) { element *pn = first_cut; first_cut = pn->next; insert_node (pn); printf ("Course box, mini or text restored at %i,%i.\n", pn->u.n.at.x, pn->u.n.at.y); } else if (this->tag == PASTE) { element *pn, **ppn; element *pe = this->e; ppn = &(first_node); pn = first_node; while (pn != NULL && pn != pe) { ppn = &(pn->next); pn = pn->next; } if (pn == NULL) { puts ("Unable to find pasted node."); return; } *ppn = pn->next; pn->next = first_cut; printf ("Course box, mini or text unpasted from %i,%i.\n", pn->u.n.at.x, pn->u.n.at.y); pn->u.n.at = this->p; first_cut = pn; } else if (this->tag == COMPOSITE) /* undo this->i steps */ { int j; for (j = 0; j < this->i; j++) undo(); } } PRIVATE void edit_mini (element * pm) { append (deftext, NULL, pm->u.n.code, sizeof (deftext)); command_line = Readline ("course code: "); pm->u.n.code[0] = '\0'; if (append (pm->u.n.code, NULL, command_line, sizeof (pm->u.n.code)) >= sizeof (pm->u.n.code)) puts ("Warning: course code too long, truncated."); } PRIVATE void edit_text (element * pm) { append (deftext, NULL, pm->u.n.u.t.txt, sizeof (deftext)); command_line = Readline ("text: "); pm->u.n.u.t.txt[0] = '\0'; if (append (pm->u.n.u.t.txt, NULL, command_line, sizeof (pm->u.n.u.t.txt)) >= sizeof (pm->u.n.u.t.txt)) puts ("Warning: text too long, truncated."); } PRIVATE void edit_box (element * pb) { char code[8]; append (deftext, NULL, pb->u.n.code, sizeof (deftext)); command_line = Readline ("course code: "); pb->u.n.code[0] = '\0'; if (append (pb->u.n.code, NULL, command_line, sizeof (pb->u.n.code)) >= sizeof (pb->u.n.code)) puts ("Warning: course code too long, truncated."); if (pb->u.n.u.b.half) append (deftext, NULL, "y", sizeof (deftext)); else append (deftext, NULL, "n", sizeof (deftext)); command_line = Readline ("half course (y/n)? "); sscanf (command_line, "%1s", code); if (code[0] == 'y') pb->u.n.u.b.half = true; else if (code[0] == 'n') pb->u.n.u.b.half = false; else { puts ("Response not recognized; 'y' assumed."); pb->u.n.u.b.half = true; } if (pb->u.n.u.b.req_opt == REQ) append (deftext, NULL, "r", sizeof (deftext)); else if (pb->u.n.u.b.req_opt == OPT) append (deftext, NULL, "o", sizeof (deftext)); else append (deftext, NULL, "n", sizeof (deftext)); command_line = Readline ("required (r) optional (o) or neither (n)? "); sscanf (command_line, "%7s", code); if (code[0] == 'r') pb->u.n.u.b.req_opt = REQ; else if (code[0] == 'o') pb->u.n.u.b.req_opt = OPT; else if (code[0] == 'n') pb->u.n.u.b.req_opt = NEITHER; else { puts ("Response not recognized; 'n' assumed."); pb->u.n.u.b.req_opt = NEITHER; } append (deftext, NULL, pb->u.n.u.b.title, sizeof (deftext)); command_line = Readline ("course title: "); pb->u.n.u.b.title[0] = '\0'; if (append (pb->u.n.u.b.title, NULL, command_line, sizeof (pb->u.n.u.b.title)) >= sizeof (pb->u.n.u.b.title)) puts ("Warning: course title too long, truncated."); append (deftext, NULL, pb->u.n.u.b.timetable, sizeof (deftext)); command_line = Readline ("course timetable: "); pb->u.n.u.b.timetable[0] = '\0'; if (append (pb->u.n.u.b.timetable, NULL, command_line, sizeof (pb->u.n.u.b.timetable)) >= sizeof (pb->u.n.u.b.timetable)) puts ("Warning: course timetable too long, truncated."); append (deftext, NULL, pb->u.n.u.b.color, sizeof (deftext)); command_line = Readline ("background color (empty string for default): "); pb->u.n.u.b.color[0] = '\0'; if (append (pb->u.n.u.b.color, NULL, command_line, sizeof (pb->u.n.u.b.color)) >= sizeof (pb->u.n.u.b.color)) puts ("Warning: color string too long, truncated."); if (pb->u.n.u.b.color[0] == '\n') pb->u.n.u.b.color[0] = '\0'; } PRIVATE void set_curvature (element * pa) { char code[16]; if (pa->u.a.curvature >= 0 && pa->u.a.curvature <= 100) { sprintf (deftext, "%i", pa->u.a.curvature); } else { append (deftext, NULL, "d", sizeof (deftext)); } command_line = Readline ("curvature, default (d) or int value? "); sscanf (command_line, "%15s", code); if (isdigit (code[0])) { sscanf (code, "%i", &(pa->u.a.curvature)); if (pa->u.a.curvature > 100) { puts ("Curvature too large; default value used."); pa->u.a.curvature = -1; } } else if (code[0] == 'd') pa->u.a.curvature = -1; /* negative value denotes default curvature */ else { puts ("Response not recognized; default assumed."); pa->u.a.curvature = -1; } } PRIVATE void edit_arrow (element * pa) { char code[16]; switch (pa->u.a.tag) { case PREREQ: append (deftext, NULL, "p", sizeof (deftext)); break; case COREQ: append (deftext, NULL, "c", sizeof (deftext)); break; case RECOMM: append (deftext, NULL, "r", sizeof (deftext)); break; default:; } command_line = Readline ("prerequisite (p), corequisite (c), or recommended (r)? "); sscanf (command_line, "%15s", code); switch (code[0]) { case 'p': pa->u.a.tag = PREREQ; break; case 'c': pa->u.a.tag = COREQ; break; case 'r': pa->u.a.tag = RECOMM; break; default: puts ("Response not recognized; prerequisite assumed."); pa->u.a.tag = PREREQ; } set_curvature (pa); } PRIVATE void paste_node (point p) { point oldp; element *pn = first_cut; done *this; if (pn == NULL) { puts ("No cut box, mini or text to paste."); return; } first_cut = pn->next; oldp = pn->u.n.at; pn->u.n.at = p; if (insert_node (pn)) { printf("There is a course box, mini or text already at %i,%i.\n", pn->u.n.at.x, pn->u.n.at.y); pn->next = first_cut; first_cut = pn; return; } if (first_cut == NULL) regenerate_and_process (); this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = PASTE; this->e = pn; this->p = oldp; this->next = first_done; first_done = this; } PRIVATE void analyze_paste_command (void) { point p; if (sscanf (command_line, "%*s %i,%i", &p.x, &p.y) != 2) { puts("Can't analyze coordinates."); return; } paste_node (p); } PRIVATE void analyze_xchange_command (void) { point p0, p1; done *this; clp = command_line; skip_command (); if (sscanf (clp, "%i", &p0.x) != 1) { puts("Can't analyze coordinates."); return; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',') { puts("Can't analyze coordinates."); return; } clp++; /* ',' */ if (sscanf (clp, "%i", &p0.y) != 1) { puts("Can't analyze coordinates."); return; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; cut_node (p0); if (sscanf (clp, "%i", &p1.x) != 1) { puts("Can't analyze coordinates."); return; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; while (isspace (*clp)) clp++; if (*clp != ',') { puts("Can't analyze coordinates."); return; } clp++; /* ',' */ if (sscanf (clp, "%i", &p1.y) != 1) { puts("Can't analyze coordinates."); return; } while (isspace (*clp)) clp++; if (*clp == '-' || *clp == '+') clp++; while (isdigit(*clp)) clp++; cut_node (p1); paste_node (p0); paste_node (p1); this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); this->tag = COMPOSITE; this->i = 4; /* four steps to undo */ this->next = first_done; first_done = this; } PRIVATE void analyze_box_command (void) { point p; element *pb; done *this; char code[8]; if (sscanf (command_line, "%*s %i,%i", &p.x, &p.y) != 2) { puts ("Can't analyze box command."); return; } this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); pb = node_at (p); if (pb != NULL) { this->tag = NODE_EDIT; this->next = first_done; this->n = pb->u.n; /* record the old node */ this->e = pb; first_done = this; edit_box (pb); regenerate_and_process (); return; } this->tag = NODE_CREATE; append (deftext, NULL, "y", sizeof (deftext)); command_line = Readline ("create new course box (y/n)? "); sscanf (command_line, "%7s", code); if (code[0] == 'y') { pb = (element *) malloc (sizeof (element)); if (pb == NULL) error ("Out of memory"); pb->tag = NODE; pb->u.n.tag = BOX; pb->u.n.at = p; pb->u.n.u.b.req_opt = NEITHER; pb->u.n.u.b.half = true; pb->u.n.code[0] = '\0'; pb->u.n.u.b.title[0] = '\0'; pb->u.n.u.b.timetable[0] = '\0'; if (insert_node (pb)) { puts ("There is already a course box, mini, or text at that location."); free (pb); free (this); return; } this->next = first_done; this->p = p; /* record coordinates of new node */ first_done = this; edit_box (pb); regenerate_and_process (); return; } else if (code[0] == 'n') { free (this); } else { puts ("Response not recognized; 'n' assumed."); free (this); } } PRIVATE void analyze_mini_command (void) { point p; element *pm; done *this; char code[8]; if (sscanf (command_line, "%*s %i,%i", &p.x, &p.y) != 2) { puts ("Can't analyze mini command."); return; } this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); pm = node_at (p); if (pm != NULL) { this->tag = NODE_EDIT; this->next = first_done; this->n = pm->u.n; /* record the old node */ this->e = pm; first_done = this; edit_mini (pm); regenerate_and_process (); return; } this->tag = NODE_CREATE; append (deftext, NULL, "y", sizeof (deftext)); command_line = Readline ("create new mini (y/n)? "); sscanf (command_line, "%7s", code); if (code[0] == 'y') { pm = (element *) malloc (sizeof (element)); if (pm == NULL) error ("Out of memory"); pm->tag = NODE; pm->u.n.tag = MINI; pm->u.n.at = p; pm->u.n.code[0] = '\0'; if (insert_node (pm)) { puts ("There is already a course box, mini, or text at that location."); free (pm); free (this); return; } this->next = first_done; this->p = p; /* record coordinates of new node */ first_done = this; edit_mini (pm); regenerate_and_process (); } else if (code[0] == 'n') { free (this); } else { puts ("Response not recognized; 'n' assumed."); free (this); } } PRIVATE void analyze_text_command (void) { point p; element *pm; done *this; char code[8]; if (sscanf (command_line, "%*s %i,%i", &p.x, &p.y) != 2) { puts ("Can't analyze text command."); return; } this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); pm = node_at (p); if (pm != NULL) { this->tag = NODE_EDIT; this->next = first_done; this->n = pm->u.n; /* record the old node */ this->e = pm; first_done = this; edit_text (pm); regenerate_and_process (); return; } this->tag = NODE_CREATE; append (deftext, NULL, "y", sizeof (deftext)); command_line = Readline ("create new text (y/n)? "); sscanf (command_line, "%7s", code); if (code[0] == 'y') { pm = (element *) malloc (sizeof (element)); if (pm == NULL) error ("Out of memory"); pm->tag = NODE; pm->u.n.tag = TEXT; pm->u.n.at = p; pm->u.n.code[0] = '\0'; if (insert_node (pm)) { puts ("There is already a course box, mini, or text at that location."); free (pm); free (this); return; } this->next = first_done; this->p = p; /* record coordinates of new node */ first_done = this; edit_text (pm); regenerate_and_process (); } else if (code[0] == 'n') { free (this); } else { puts ("Response not recognized; 'n' assumed."); free (this); } } PRIVATE void analyze_arrow_command (void) { point p0, p1; element *n0, *n1; element *pa; done *this; if (sscanf (command_line, "%*s %i,%i,%i,%i", &p0.x, &p0.y, &p1.x, &p1.y) != 4) { puts ("Can't analyze arrow command."); return; } n0 = node_at (p0); if (n0 == NULL) { puts ("There is no course box, mini, or text at the source location."); return; } n1 = node_at (p1); if (n1 == NULL) { puts ("There is no course box, mini, or text at the target location."); return; } this = (done *) malloc (sizeof (done)); if (this == NULL) error ("Out of memory"); pa = first_arrow; while (pa != NULL && !(pa->u.a.source == n0 && pa->u.a.target == n1)) pa = pa->next; if (pa != NULL) { this->tag = ARROW_EDIT; this->next = first_done; this->a = pa->u.a; /* record the old arrow */ this->e = pa; first_done = this; edit_arrow (pa); regenerate_and_process (); } else { char code[8]; this->tag = ARROW_CREATE; append (deftext, NULL, "y", sizeof (deftext)); command_line = Readline ("create new arrow (y/n)? "); sscanf (command_line, "%7s", code); if (code[0] == 'y') { pa = (element *) malloc (sizeof (element)); if (pa == NULL) error ("Out of memory"); pa->tag = ARROW; pa->u.a.source = n0; pa->u.a.target = n1; pa->u.a.tag = PREREQ; pa->u.a.curvature = -1; /* default curvature */ insert_arrow (pa); this->next = first_done; this->a = pa->u.a; /* record arrow */ first_done = this; edit_arrow (pa); regenerate_and_process (); } else if (code[0] == 'n') { free (this); } else { puts ("Response not recognized; 'n' assumed."); free (this); } } } PRIVATE void analyze_grid_command (void) { char code[8]; if (sscanf (command_line, "%*s %7s", code) != 1) { if (grid) append (deftext, NULL, "n", sizeof (deftext)); else append (deftext, NULL, "y", sizeof (deftext)); command_line = Readline ("grid (y/n)? "); sscanf (command_line, "%7s", code); } if (code[0] == 'y') grid = true; else if (code[0] == 'n') grid = false; else { puts ("Response not recognized; 'y' assumed."); grid = true; } regenerate_and_process (); } PRIVATE void analyze_file_command (void) { puts ("This command is no longer supported."); } PRIVATE void backup (void) { char code[8]; append (deftext, NULL, "y", sizeof (deftext)); command_line = Readline ("Overwrite current backup file (y/n)? "); sscanf (command_line, "%7s", code); if (code[0] != 'y') return; backup_tex_file = fopen (backup_filename, "w"); if (backup_tex_file == NULL) { puts ("Can't open backup file."); return; } copy (tex_file, backup_tex_file); fclose (backup_tex_file); printf ("Backed up to %s.\n", backup_filename); } PRIVATE void restore (void) { char code[8]; backup_tex_file = fopen (backup_filename, "r"); if (backup_tex_file == NULL) { puts ("Can't open backup file."); return; } append (deftext, NULL, "y", sizeof (deftext)); command_line = Readline ("Delete current TeX file and restore from backup (y/n)? "); sscanf (command_line, "%7s", code); if (code[0] != 'y') return; fclose (tex_file); tex_file = fopen (chartfilename, "w+"); rewind (tex_file); copy (backup_tex_file, tex_file); fflush (tex_file); fclose (backup_tex_file); close_files(); free_lists(); grid = false; analyze_tex_file (); regenerate_and_process (); } PRIVATE void quit (void) { char code[8]; if (first_cut) { append (deftext, NULL, "y", sizeof (deftext)); command_line = Readline ("Warning: there are unpasted cuts; continue (y/n)? "); sscanf (command_line, "%7s", code); if (code[0] != 'y') return; } # ifdef HAVE_LIBEDITLINE history_end (hist); el_end (el); # endif grid = false; puts("Turning off coordinate grid."); regenerate_and_process (); exit (0); } PRIVATE void help (void) { puts (""); puts (" command: effect:"); puts (""); puts (" file> box x,y [create and] edit course box at x,y"); puts (" file> mini x,y [create and] edit mini course at x,y"); puts (" file> text x,y [create and] edit text centered at x,y"); puts (" file> arrow x0,y0,x1,y1 [create and] edit arrow from x0,y0 to x1,y1"); puts (" file> cut x,y ... (temporarily) remove box, mini, or text at x,y"); puts (" file> paste x,y re-insert last cut box, mini, or text at x,y"); puts (" file> xchange x0,y0 x1,y1 exchange elements at x0,y0 and x1,y1"); puts (" file> delete [x,y | x0,y0:x1,y1 | x0,y0,x1,y1] ... remove specified elements/arrows"); puts (" file> undo undo most recent editing command"); puts (" file> shift [-]n x0,y0[:x1,y1] ... move [specified] elements n units right [left]"); puts (" file> raise [-]n x0,y0[:x1,y1] ... move [specified] elements n units up [down]"); puts (" file> ! | write save to file.tex and process (with pdflatex)"); puts (" file> quit | exit | x | ^D turn off grid, save, process, and exit"); puts (" file> !cmd execute shell command cmd, then re-load"); puts (" file> Backup copy file.tex to .file.tex"); puts (" file> Restore restore from .file.tex"); puts (" file> grid [y/n] turn on/off coordinate-grid background"); puts (" file> help | ? print this summary"); puts (""); puts ("Append \";\" to commands to suppress usual save-and-process."); puts(""); } PRIVATE void analyze_user_command (void) { char command[COMMAND_LEN + 1] = {'\0'}; sscanf (command_line, "%63s", command); if (prefix (command, "write")) { reprocess = true; regenerate_and_process (); } else if (prefix (command, "shift")) shift (); else if (prefix (command, "raise")) Raise (); else if (prefix (command, "cut")) analyze_cut_command (); else if (prefix (command, "delete")) analyze_delete_command (); else if (prefix (command, "undo")) { undo (); regenerate_and_process (); } else if (prefix (command, "paste")) analyze_paste_command (); else if (prefix (command, "xchange")) analyze_xchange_command (); else if (prefix (command, "box")) analyze_box_command (); else if (prefix (command, "mini")) analyze_mini_command (); else if (prefix (command, "text")) analyze_text_command (); else if (prefix (command, "arrow")) analyze_arrow_command (); else if (prefix (command, "quit") || prefix (command, "exit") || prefix (command, "x")) { quit (); } else if (prefix (command, "grid")) analyze_grid_command (); else if (prefix (command, "file")) analyze_file_command (); else if (command[0] == '!') { clp = command_line; while (isspace (*clp)) clp++; clp++; /* ! */ while (isspace (*clp)) clp++; if (*clp == '\0') { reprocess = true; regenerate_and_process (); } else { execute_shell_command (); } } else if (prefix (command, "Backup")) backup (); else if (prefix (command, "Restore")) restore (); else if (prefix (command, "help")) help (); else if (command[0] == '?') help (); else { puts ("Command not recognized."); help (); } } void process_commands(void) { # ifdef HAVE_LIBREADLINE char prompt[FILE_LEN + 8] = {'\0'}; char *prompt_n = prompt; rl_startup_hook = set_deftext; append (prompt, &prompt_n, chartfilename, sizeof (prompt)); prompt_n = prompt_n - 4; *prompt_n = '\0'; /* suppress ".tex" */ append (prompt, &prompt_n, "> ", sizeof (prompt)); # else el_set (el, EL_PROMPT, &prompt_f); deftext[0] = '\0'; # endif help (); do { # ifdef HAVE_LIBREADLINE command_line = Readline (prompt); # else int command_line_n; prompt[0] = '\0'; prompt_n = prompt; append (prompt, &prompt_n, chartfilename, sizeof (prompt)); prompt_n = prompt_n - 4; *prompt_n = '\0'; /* suppress ".tex" */ append (prompt, &prompt_n, "> ", sizeof (prompt)); command_line = (char *) el_gets (el, &command_line_n); # endif if (command_line == NULL) /* EOF */ { putchar ('\n'); quit(); } # ifdef HAVE_LIBREADLINE if (command_line[0] != '\0') # else if (command_line[0] != '\n') # endif { # ifdef HAVE_LIBREADLINE add_history (command_line); # else history(hist, &ev, H_ENTER, command_line); command_line_n--; command_line[command_line_n] = '\0'; # endif reprocess = true; if (suffix(";", command_line)) { /* suppress possible regeneration and processing after this command */ reprocess = false; # ifdef HAVE_LIBREADLINE command_line[strlen(command_line) - 1] = '\0'; # else command_line[command_line_n - 1] = '\0'; # endif } analyze_user_command (); } } while (true); /* exit via call to exit or error() */ } prerex-6.5.3/prerex-6.5.2/prerex.h0000644000123700002140000001602712226371666014642 0ustar rdtrdt/* prerex.h -- header file for an interactive editor of prerequisite-chart descriptions Copyright (c) 2005-13 R. D. Tennent School of Computing, Queen's University, rdt@cs.queensu.ca This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ # include "config.h" # include # include # include # include # include # include # ifdef HAVE_LIBREADLINE # include # include # else # include # include # endif # include # include # include # include # include # include # define bool _Bool # define true 1 # define false 0 # define LINE_LEN 1023 # define FILE_LEN 127 # define COMMAND_LEN 63 # define CODE_LEN 31 # define TITLE_LEN 127 # define TIMETABLE_LEN 31 # define COLOR_LEN 31 # define KILL_WAIT 4 /* number of seconds to wait before killing PDFVIEWER */ # define PRIVATE static typedef int coord; typedef struct point { coord x, y; } point; typedef enum req_opt_type { NEITHER, REQ, OPT} req_opt_type; typedef struct box { bool half; req_opt_type req_opt; char title[TITLE_LEN + 1]; char timetable[TIMETABLE_LEN + 1]; char color[COLOR_LEN +1]; /* null string for default color */ } box; typedef enum triv_type { TRIV } triv_type; typedef struct mini { triv_type t; } mini; typedef struct text { char txt[LINE_LEN+1]; } text; typedef char CourseCode[CODE_LEN + 1]; typedef enum node_type { BOX, MINI, TEXT } node_type; typedef struct node { point at; CourseCode code; node_type tag; union { box b; mini m; text t; } u; } node; typedef struct element *element_ptr; typedef enum arrow_type { PREREQ, COREQ, RECOMM } arrow_type; typedef struct arrow { element_ptr source, target; coord curvature; /* a negative value denotes the default curvature */ arrow_type tag; } arrow; typedef enum element_type { NODE, ARROW } element_type; typedef struct element { element_ptr next; /* to next element of linked list */ element_type tag; union { node n; arrow a; } u; } element; typedef struct done *done_ptr; /* declarations to support undo commands */ typedef enum done_type { NODE_CREATE, NODE_EDIT, NODE_DELETE, NODE_SHIFT, NODE_RAISE, ARROW_CREATE, ARROW_EDIT, ARROW_DELETE, SHIFT_ALL, RAISE_ALL, CUT, PASTE, COMPOSITE } done_type; typedef struct done { done_ptr next; done_type tag; int i; node n; arrow a; point p; element_ptr e; } done; /******************************************************************************************/ /* */ /* defined in utils.c: */ /* */ /******************************************************************************************/ extern size_t append (char *dst, char **offset, const char *src, size_t n); /* Copies src to *offset and updates *offset accordingly (if possible). * Assumes *offset is dst if offset == NULL. * The src string must be null-terminated. * Execution aborts unless **offset == '\0'. * Returns (original offset - dst) + strlen(src); if >= n, the string was truncated. */ extern bool prefix (const char *cs, const char *ct); /* is string cs[] a prefix of ct[]? */ extern bool suffix (const char *cs, const char *ct); /* is string cs[] a suffix of ct[]? */ extern void error (char msg[]); /* abort with stderr message msg */ extern void copy (FILE * f, FILE * g); extern bool inrange ( coord x, coord x0, coord x1); /* is coordinate x in the range x0:x1? */ /******************************************************************************************/ /* */ /* defined in prerex.c: */ /* */ /******************************************************************************************/ # ifdef HAVE_LIBEDIT extern EditLine *el; extern History *hist; extern HistEvent ev; # endif extern bool grid; /* should the background grid be enabled? */ extern bool reprocess; /* should the tex file be re-processed after the current command? */ extern char chartfilename[FILE_LEN]; extern char *chartfilename_n; extern char backup_filename[FILE_LEN + 1]; extern char *backup_filename_n; extern FILE *tex_file; extern FILE *backup_tex_file; extern void regenerate_and_process (void); /* internal rep. -> tex file -> pdf file */ /******************************************************************************************/ /* */ /* defined in inout.c: */ /* */ /******************************************************************************************/ extern element *first_node; extern bool insert_node (element * pc); extern element *first_arrow; extern bool insert_arrow (element * pa); extern bool eq (point p, point q); /* p == q ? */ extern element *node_at (point p); extern void analyze_tex_file (void); /* tex file -> internal representation */ extern void regenerate_tex_file (void); /* internal representation -> tex file */ extern void close_files (void); /******************************************************************************************/ /* */ /* defined in edit.c: */ /* */ /******************************************************************************************/ extern char deftext[LINE_LEN]; /* buffer for default input */ # ifdef HAVE_LIBREADLINE extern int set_deftext (void); /* used by readline to output defaults */ # else extern char * prompt_f (void); /* used to output prompts */ # endif extern char * Readline ( char * str ); extern void process_commands (void); /* command-processing loop */ prerex-6.5.3/prerex-6.5.2/README0000644000123700002140000000170012015312742014016 0ustar rdtrdtPrerex is an interactive program for editing prerequisite-chart descriptions in the prerex format. The user does not normally have to be familiar with details of the format. The editor supports add, remove, cut-and-paste, and edit operations on diagram elements, and horizontal or vertical shifts of a list of specified elements, all the elements in a rectangular region, or the entire diagram. The edited diagram may be saved, re-processed, and viewed in a PDF viewer, without exiting the editor. The effects of editing operations may be observed in any PDF viewer. The "vprerex" (visual prerex) application (not included here) is a graphical front-end and viewer for the prerex editor. It may be used just as a minimalist viewer of arbitrary PDF files but supports editing of charts generated using prerex.sty by allowing coordinates of course boxes, arrows, and background points to be conveyed over to the prerex editor command-line using the clipboard. prerex-6.5.3/prerex-6.5.2/AUTHORS0000644000123700002140000000012611411176540014212 0ustar rdtrdtBob Tennent School of Computing Queen's University Kingston, Canada rdt@cs.queensu.ca prerex-6.5.3/prerex-6.5.2/aclocal.m40000644000123700002140000010772012226136247015017 0ustar rdtrdt# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],, [m4_warning([this file was generated for autoconf 2.63. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([acinclude.m4]) prerex-6.5.3/prerex-6.5.2/install-sh0000755000123700002140000002202111411153264015142 0ustar rdtrdt#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: prerex-6.5.3/prerex-6.5.2/COPYING0000644000123700002140000004312211411153264014176 0ustar rdtrdt GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. prerex-6.5.3/prerex-6.5.2/utils.c0000644000123700002140000000627511757235347014477 0ustar rdtrdt /* utils.c -- utilities for interactive editor of prerequisite-chart descriptions Copyright (C) 2005 - 2012 R. D. Tennent School of Computing, Queen's University, rdt@cs.queensu.ca This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ # include "prerex.h" void error (char msg[]) /* abort with stderr message msg */ { fprintf (stderr, "Error: %s\n", msg); # ifdef HAVE_LIBEDIT history_end (hist); el_end (el); # endif exit (EXIT_FAILURE); } size_t append (char *dst, char **offset, const char *src, size_t n) /* Copies src to *offset and updates *offset accordingly (if possible). * Assumes *offset is dst if offset == NULL. * Execution aborts if **offset != '\0'. The src string must be null-terminated. * Returns (original offset - dst) + strlen(src); if >= n, the string was truncated. */ { const char *s = src; char *d; char *off_orig = ( offset != NULL ? *offset : dst ); d = off_orig; if (*d != '\0') { char msg[LINE_LEN + 24] = {'\0'}; char *msg_n = msg; append (msg, &msg_n, "\nNull character expected at offset specified for string ", sizeof (msg)); append (msg, &msg_n, src, sizeof (msg)); error (msg); } n = n - 1 - (off_orig - dst); /* number of available slots (leaving room for \0) */ while (n > 0 && *s != '\0') { *d = *s; /* copy non-null character */ d++; s++; n--; } *d = '\0'; /* null-terminate */ if (offset != NULL) *offset = d; /* update *offset (if possible) */ while (*s != '\0') /* traverse rest of src */ s++; return (off_orig - dst) + (s - src); /* length of the untruncated string */ } bool prefix (const char *cs, const char *ct) /* is string cs[] a prefix of ct[]? */ { char *pcs = (char *) cs; char *pct = (char *) ct; while (*pcs != '\0') { if (*pcs != *pct) return false; pcs++; pct++; } return true; } bool suffix (const char *cs, const char *ct) /* is string cs[] a suffix of ct[]? */ { char *pcs = (char *) cs; char *pct = (char *) ct + strlen (ct) - strlen (cs); while (*pcs != '\0') { if (*pct != *pcs) return false; pcs++; pct++; } return true; } void copy (FILE * f, FILE * g) { int c; fflush (f); rewind (f); c = getc (f); while (c != EOF) { putc (c, g); c = getc (f); } } bool inrange (coord x, coord x0, coord x1) /* is coordinate x in the range x0:x1? */ { # define min(x,y) (x < y ? x : y) # define max(x,y) (x < y ? y : x) return x >= min(x0, x1) && x <= max(x0, x1) ; } prerex-6.5.3/prerex-6.5.2/inout.c0000644000123700002140000005142212035672622014456 0ustar rdtrdt/* inout.c -- input/output module for interactive editor of prerequisite-chart descriptions Copyright (c) 2005-12 R. D. Tennent School of Computing, Queen's University, rdt@cs.queensu.ca This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ # include "prerex.h" element *first_node; element *first_arrow; PRIVATE char line[LINE_LEN]; PRIVATE char *lp; /* pointer into line */ PRIVATE char *cp; /* pointer into text fields */ PRIVATE FILE *pretext, /* whatever is in the tex_file before the chart */ *posttext, /* whatever is in the tex_file after the chart */ *comments; /* comment lines in the chart environment */ PRIVATE bool gt (point p, point q) /* ordering on boxes: top-to-bottom, left-to-right */ { return (p.y > q.y || (p.y == q.y && p.x < q.x)); } bool eq (point p, point q) { return (p.x == q.x && p.y == q.y); } bool insert_node (element * pn) { element *p; element **pp; /* ordered list */ p = first_node; pp = &(first_node); while ((p != NULL) && gt (p->u.n.at, pn->u.n.at)) { pp = &(p->next); p = p->next; } if ((p != NULL) && eq (p->u.n.at, pn->u.n.at)) { /* node at that point already */ return true; } *pp = pn; pn->next = p; return false; } /* insert_node */ element * node_at (point p) { element *pn = first_node; while (pn != NULL && !eq (p, pn->u.n.at)) pn = pn->next; return pn; } bool insert_arrow (element * pa) { element *p; if (pa->u.a.source == NULL) return true; if (pa->u.a.target == NULL) return true; /* is the arrow already in the list? */ p = first_arrow; while (p != NULL && (p->u.a.target != pa->u.a.target || p->u.a.source != pa->u.a.source)) { p = p->next; } if (p != NULL) return true; pa->next = first_arrow; first_arrow = pa; return false; } /*insert_arrow */ PRIVATE coord read_coord (void) { coord c; while (!isdigit (*lp) && *lp != '-') lp++; c = atoi (lp); if (*lp == '-') lp++; while (isdigit (*lp)) lp++; return c; } PRIVATE point read_point (void) { point pnt; pnt.x = read_coord (); pnt.y = read_coord (); return pnt; } PRIVATE void read_textfield (char *limit) { /* use recursion to allow for nested { ... } */ if (lp >= &line[LINE_LEN]) error ("Missing }."); while (*lp != '}') { *cp = *lp; if (*lp == '{') { /* nested {...} */ cp++; lp++; read_textfield (limit); *cp = *lp; /* '}' */ } cp++; lp++; if (lp >= &line[LINE_LEN]) error ("Missing }."); if (cp >= limit) { puts (line); error ("Text-field too long."); } } } PRIVATE void read_bracketed_textfield (char *limit) { while (*lp != '{') { lp++; if (lp >= &line[LINE_LEN]) error ("Missing {."); } lp++; /* '{' */ read_textfield (limit); lp++; /* '}' */ if (cp >= limit) { puts (line); error ("Text-field too long."); } *cp = '\0'; } PRIVATE void analyze_halfcourse (bool color) { element *c; c = (element *) malloc (sizeof (element)); if (c == NULL) error ("Out of memory."); c->tag = NODE; c->u.n.tag = BOX; lp = &line[10]; c->u.n.u.b.req_opt = NEITHER; c->u.n.u.b.half = true; c->u.n.at = read_point (); cp = &(c->u.n.code[0]); read_bracketed_textfield (&(c->u.n.code[CODE_LEN])); cp = &(c->u.n.u.b.title[0]); read_bracketed_textfield (&(c->u.n.u.b.title[TITLE_LEN])); cp = &(c->u.n.u.b.timetable[0]); read_bracketed_textfield (&(c->u.n.u.b.timetable[TIMETABLE_LEN])); cp = &(c->u.n.u.b.color[0]); if (color) { read_bracketed_textfield (&(c->u.n.u.b.color[COLOR_LEN])); } else *cp = '\0'; if (insert_node (c)) { printf ("More than one node at %i,%i; only the first will be used.\n", c->u.n.at.x, c->u.n.at.y); free (c); } } PRIVATE void analyze_reqhalfcourse (bool color) { element *c; c = (element *) malloc (sizeof (element)); if (c == NULL) error ("Out of memory."); c->tag = NODE; c->u.n.tag = BOX; lp = &line[13]; c->u.n.u.b.req_opt = REQ; c->u.n.u.b.half = true; c->u.n.at = read_point (); cp = &(c->u.n.code[0]); read_bracketed_textfield (&(c->u.n.code[CODE_LEN])); cp = &(c->u.n.u.b.title[0]); read_bracketed_textfield (&(c->u.n.u.b.title[TITLE_LEN])); cp = &(c->u.n.u.b.timetable[0]); read_bracketed_textfield (&(c->u.n.u.b.timetable[TIMETABLE_LEN])); cp = &(c->u.n.u.b.color[0]); if (color) { read_bracketed_textfield (&(c->u.n.u.b.color[COLOR_LEN])); } else *cp = '\0'; if (insert_node (c)) { printf ("More than one node at %i,%i; only the first will be used.\n", c->u.n.at.x, c->u.n.at.y); free (c); } } PRIVATE void analyze_opthalfcourse (bool color) { element *c; c = (element *) malloc (sizeof (element)); if (c == NULL) error ("Out of memory."); c->tag = NODE; c->u.n.tag = BOX; lp = &line[13]; c->u.n.u.b.req_opt = OPT; c->u.n.u.b.half = true; c->u.n.at = read_point (); cp = &(c->u.n.code[0]); read_bracketed_textfield (&(c->u.n.code[CODE_LEN])); cp = &(c->u.n.u.b.title[0]); read_bracketed_textfield (&(c->u.n.u.b.title[TITLE_LEN])); cp = &(c->u.n.u.b.timetable[0]); read_bracketed_textfield (&(c->u.n.u.b.timetable[TIMETABLE_LEN])); cp = &(c->u.n.u.b.color[0]); if (color) { read_bracketed_textfield (&(c->u.n.u.b.color[COLOR_LEN])); } else *cp = '\0'; if (insert_node (c)) { printf ("More than one node at %i,%i; only the first will be used.\n", c->u.n.at.x, c->u.n.at.y); free (c); } } PRIVATE void analyze_fullcourse (bool color) { element *c; c = (element *) malloc (sizeof (element)); if (c == NULL) error ("Out of memory."); c->tag = NODE; c->u.n.tag = BOX; lp = &line[10]; c->u.n.u.b.req_opt = NEITHER; c->u.n.u.b.half = false; c->u.n.at = read_point (); cp = &(c->u.n.code[0]); read_bracketed_textfield (&(c->u.n.code[CODE_LEN])); cp = &(c->u.n.u.b.title[0]); read_bracketed_textfield (&(c->u.n.u.b.title[TITLE_LEN])); cp = &(c->u.n.u.b.timetable[0]); read_bracketed_textfield (&(c->u.n.u.b.timetable[TIMETABLE_LEN])); cp = &(c->u.n.u.b.color[0]); if (color) { read_bracketed_textfield (&(c->u.n.u.b.color[COLOR_LEN])); } else *cp = '\0'; if (insert_node (c)) { printf ("More than one node at %i,%i; only the first will be used.\n", c->u.n.at.x, c->u.n.at.y); free (c); } } PRIVATE void analyze_reqfullcourse (bool color) { element *c; c = (element *) malloc (sizeof (element)); if (c == NULL) error ("Out of memory."); c->tag = NODE; c->u.n.tag = BOX; lp = &line[13]; c->u.n.u.b.req_opt = REQ; c->u.n.u.b.half = false; c->u.n.at = read_point (); cp = &(c->u.n.code[0]); read_bracketed_textfield (&(c->u.n.code[CODE_LEN])); cp = &(c->u.n.u.b.title[0]); read_bracketed_textfield (&(c->u.n.u.b.title[TITLE_LEN])); cp = &(c->u.n.u.b.timetable[0]); read_bracketed_textfield (&(c->u.n.u.b.timetable[TIMETABLE_LEN])); cp = &(c->u.n.u.b.color[0]); if (color) { read_bracketed_textfield (&(c->u.n.u.b.color[COLOR_LEN])); } else *cp = '\0'; if (insert_node (c)) { printf ("More than one node at %i,%i; only the first will be used.\n", c->u.n.at.x, c->u.n.at.y); free (c); } } PRIVATE void analyze_optfullcourse (bool color) { element *c; c = (element *) malloc (sizeof (element)); if (c == NULL) error ("Out of memory."); c->tag = NODE; c->u.n.tag = BOX; lp = &line[13]; c->u.n.u.b.req_opt = OPT; c->u.n.u.b.half = false; c->u.n.at = read_point (); cp = &(c->u.n.code[0]); read_bracketed_textfield (&(c->u.n.code[CODE_LEN])); cp = &(c->u.n.u.b.title[0]); read_bracketed_textfield (&(c->u.n.u.b.title[TITLE_LEN])); cp = &(c->u.n.u.b.timetable[0]); read_bracketed_textfield (&(c->u.n.u.b.timetable[TIMETABLE_LEN])); cp = &(c->u.n.u.b.color[0]); if (color) { read_bracketed_textfield (&(c->u.n.u.b.color[COLOR_LEN])); } else *cp = '\0'; if (insert_node (c)) { printf ("More than one node at %i,%i; only the first will be used.\n", c->u.n.at.x, c->u.n.at.y); free (c); } } PRIVATE void analyze_mini (void) { element *m; m = (element *) malloc (sizeof (element)); if (m == NULL) error ("Out of memory."); m->tag = NODE; m->u.n.tag = MINI; lp = &line[4]; m->u.n.at = read_point (); cp = &(m->u.n.code[0]); read_bracketed_textfield (&(m->u.n.code[CODE_LEN])); if (insert_node (m)) { printf ("More than one node at %i,%i; only the first will be used.\n", m->u.n.at.x, m->u.n.at.y); free (m); } } PRIVATE void analyze_text (void) { element *m; m = (element *) malloc (sizeof (element)); if (m == NULL) error ("Out of memory."); m->tag = NODE; m->u.n.tag = TEXT; lp = &line[4]; m->u.n.at = read_point (); m->u.n.code[0] = '\0'; cp = &(m->u.n.u.t.txt[0]); read_bracketed_textfield (&(m->u.n.u.t.txt[LINE_LEN])); if (insert_node (m)) { printf ("More than one node at %i,%i; only the first will be used.\n", m->u.n.at.x, m->u.n.at.y); free (m); } } PRIVATE void analyze_prereqc (void) { element *a; a = (element *) malloc (sizeof (element)); if (a == NULL) error ("Out of memory."); a->tag = ARROW; a->u.a.tag = PREREQ; lp = &line[7]; a->u.a.source = node_at (read_point ()); a->u.a.target = node_at (read_point ()); a->u.a.curvature = read_coord (); if (a->u.a.curvature > 100) a->u.a.curvature = -1; if (insert_arrow (a)) { puts ("Arrow source or target don't exist, or more than one arrow with the same source and target."); free (a); } } PRIVATE void analyze_prereq (void) { element *a; a = (element *) malloc (sizeof (element)); if (a == NULL) error ("Out of memory."); a->tag = ARROW; a->u.a.tag = PREREQ; a->u.a.curvature = -1; lp = &line[6]; a->u.a.source = node_at (read_point ()); a->u.a.target = node_at (read_point ()); if (insert_arrow (a)) { puts ("Arrow source or target don't exist, or more than one arrow with the same source and target."); free (a); } } PRIVATE void analyze_coreq (void) { element *a; a = (element *) malloc (sizeof (element)); if (a == NULL) error ("Out of memory."); a->tag = ARROW; a->u.a.tag = COREQ; a->u.a.curvature = -1; lp = &line[6]; a->u.a.source = node_at (read_point ()); a->u.a.target = node_at (read_point ()); if (insert_arrow (a)) { puts ("Arrow source or target don't exist, or more than one arrow with the same source and target."); free (a); } } PRIVATE void analyze_coreqc (void) { element *a; a = (element *) malloc (sizeof (element)); if (a == NULL) error ("Out of memory."); a->tag = ARROW; a->u.a.tag = COREQ; lp = &line[7]; a->u.a.source = node_at (read_point ()); a->u.a.target = node_at (read_point ()); a->u.a.curvature = read_coord (); if (a->u.a.curvature > 100) a->u.a.curvature = -1; if (insert_arrow (a)) { puts ("Arrow source or target don't exist, or more than one arrow with the same source and target."); free (a); } } PRIVATE void analyze_recomm (void) { element *a; a = (element *) malloc (sizeof (element)); if (a == NULL) error ("Out of memory."); a->tag = ARROW; a->u.a.tag = RECOMM; a->u.a.curvature = -1; lp = &line[6]; a->u.a.source = node_at (read_point ()); a->u.a.target = node_at (read_point ()); if (insert_arrow (a)) { puts ("Arrow source or target don't exist, or more than one arrow with the same source and target."); free (a); } } PRIVATE void analyze_recommc (void) { element *a; a = (element *) malloc (sizeof (element)); if (a == NULL) error ("Out of memory."); a->tag = ARROW; a->u.a.tag = RECOMM; lp = &line[7]; a->u.a.source = node_at (read_point ()); a->u.a.target = node_at (read_point ()); a->u.a.curvature = read_coord (); if (a->u.a.curvature > 100) a->u.a.curvature = -1; if (insert_arrow (a)) { puts ("Arrow source or target don't exist, or more than one arrow with the same source and target."); free (a); } } PRIVATE bool analyze_tex_command (void) { if (fgets (line, LINE_LEN, tex_file) == NULL) error ("Can't read LaTeX command."); if (prefix ("halfcoursec", line)) analyze_halfcourse (true); else if (prefix ("reqhalfcoursec", line)) analyze_reqhalfcourse (true); else if (prefix ("opthalfcoursec", line)) analyze_opthalfcourse (true); else if (prefix ("fullcoursec", line)) analyze_fullcourse (true); else if (prefix ("reqfullcoursec", line)) analyze_reqfullcourse (true); else if (prefix ("optfullcoursec", line)) analyze_optfullcourse (true); else if (prefix ("halfcourse", line)) analyze_halfcourse (false); else if (prefix ("reqhalfcourse", line)) analyze_reqhalfcourse (false); else if (prefix ("opthalfcourse", line)) analyze_opthalfcourse (false); else if (prefix ("fullcourse", line)) analyze_fullcourse (false); else if (prefix ("reqfullcourse", line)) analyze_reqfullcourse (false); else if (prefix ("optfullcourse", line)) analyze_optfullcourse (false); else if (prefix ("mini", line)) analyze_mini (); else if (prefix ("text", line)) analyze_text (); else if (prefix ("prereqc", line)) analyze_prereqc (); else if (prefix ("prereq", line)) analyze_prereq (); else if (prefix ("coreqc", line)) analyze_coreqc (); else if (prefix ("coreq", line)) analyze_coreq (); else if (prefix ("recommc", line)) analyze_recommc (); else if (prefix ("recomm", line)) analyze_recomm (); else if (prefix ("grid", line)) grid = true; else if (prefix ("end{chart}", line)) { return true; } else { char msg[LINE_LEN + 24] = {'\0'}; char *msg_n = msg; append (msg, &msg_n, "Illegal command:\n ", sizeof (msg)); append (msg, &msg_n, line, sizeof (msg)); error (msg); } return false; } void close_files (void) { fclose (pretext); fclose (posttext); fclose (comments); } void analyze_tex_file (void) /* tex file -> internal representation */ { int ch; bool flag; /* chart detected? */ pretext = tmpfile (); posttext = tmpfile (); comments = tmpfile (); first_node = NULL; first_arrow = NULL; fflush (tex_file); rewind (tex_file); printf ("Analyzing %s.\n", chartfilename); ch = getc (tex_file); while (ch != EOF) { if (ch == '\\') { fgets (line, LINE_LEN, tex_file); flag = prefix ("begin{chart}", line); putc ('\\', pretext); fputs (line, pretext); if (flag) { do { ch = getc (tex_file);} while (isspace (ch)); while (true) { if (ch == '\\') { if (analyze_tex_command ()) { fprintf (posttext, "%s\n", "\\end{chart}"); break; } } else if (ch == '%') { fgets (line, LINE_LEN, tex_file); putc ('%', comments); fputs (line, comments); } else error ("Unexpected 1st non-whitespace character in line."); do { ch = getc (tex_file);} while (isspace (ch)); } ch = getc (tex_file); while (ch != EOF) { putc (ch, posttext); ch = getc (tex_file); } } } else { putc (ch, pretext); } ch = getc (tex_file); } } /* analyze_tex_file */ PRIVATE void output_node (element * p) { if (p->u.n.tag == BOX) { putc ('\\', tex_file); if (p->u.n.u.b.req_opt == REQ) fprintf (tex_file, "req"); else if (p->u.n.u.b.req_opt == OPT) fprintf (tex_file, "opt"); if (p->u.n.u.b.half) { fprintf (tex_file, "halfcourse"); } else { fprintf (tex_file, "fullcourse"); } if (p->u.n.u.b.color[0] == '\0') fprintf (tex_file, " %i,%i:{%s}{%s}{%s}\n", p->u.n.at.x, p->u.n.at.y, p->u.n.code, p->u.n.u.b.title, p->u.n.u.b.timetable); else fprintf (tex_file, "c %i,%i:{%s}{%s}{%s}{%s}\n", p->u.n.at.x, p->u.n.at.y, p->u.n.code, p->u.n.u.b.title, p->u.n.u.b.timetable, p->u.n.u.b.color); } else if (p->u.n.tag == MINI) { fprintf (tex_file, "\\mini %i,%i:{%s}\n", p->u.n.at.x, p->u.n.at.y, p->u.n.code); } else if (p->u.n.tag == TEXT) { fprintf (tex_file, "\\text %i,%i:{%s}\n", p->u.n.at.x, p->u.n.at.y, p->u.n.u.t.txt); } else error ("Undefined node type."); } PRIVATE void output_arrow (element * p) { switch (p->u.a.tag) { case PREREQ: if (p->u.a.curvature < 0) { fprintf (tex_file, " \\prereq %i,%i,%i,%i:\n", p->u.a.source->u.n.at.x, p->u.a.source->u.n.at.y, p->u.a.target->u.n.at.x, p->u.a.target->u.n.at.y); } else { fprintf (tex_file, " \\prereqc %i,%i,%i,%i;%i:\n", p->u.a.source->u.n.at.x, p->u.a.source->u.n.at.y, p->u.a.target->u.n.at.x, p->u.a.target->u.n.at.y, p->u.a.curvature); } break; case COREQ: if (p->u.a.curvature < 0) { fprintf (tex_file, " \\coreq %i,%i,%i,%i:\n", p->u.a.source->u.n.at.x, p->u.a.source->u.n.at.y, p->u.a.target->u.n.at.x, p->u.a.target->u.n.at.y); } else { fprintf (tex_file, " \\coreqc %i,%i,%i,%i;%i:\n", p->u.a.source->u.n.at.x, p->u.a.source->u.n.at.y, p->u.a.target->u.n.at.x, p->u.a.target->u.n.at.y, p->u.a.curvature); } break; case RECOMM: if (p->u.a.curvature < 0) { fprintf (tex_file, " \\recomm %i,%i,%i,%i:\n", p->u.a.source->u.n.at.x, p->u.a.source->u.n.at.y, p->u.a.target->u.n.at.x, p->u.a.target->u.n.at.y); } else { fprintf (tex_file, " \\recommc %i,%i,%i,%i;%i:\n", p->u.a.source->u.n.at.x, p->u.a.source->u.n.at.y, p->u.a.target->u.n.at.x, p->u.a.target->u.n.at.y, p->u.a.curvature); } break; default: error ("Undefined arrow kind."); } } PRIVATE void merge_lists (void) { /* Output nodes in order (top-to-bottom, left-to-right). For each node, search for and output every arrow that targets that node, provided its source node has already been output. After output of an arrow, remove it from the arrow list and save it on the save_arrow list; the remaining arrows haven't yet been output. After output of all the nodes as above, process the remaining arrows, verifying that their sources/targets haven't been cut or deleted. Then restore the saved arrows. */ element *fn = first_node; element *fa, **ffa; element *save_arrow = NULL; /* arrows already output */ while (fn != NULL) { output_node (fn); ffa = &first_arrow; fa = first_arrow; while (fa != NULL) { if (fa->u.a.target == fn) { element *ffn = first_node; /* verify that a source node has already been output: */ while (ffn != fn && ffn != fa->u.a.source) { ffn = ffn->next; } if (ffn == fn) { /* source node not yet output; defer arrow output */ ffa = &(fa->next); fa = fa->next; break; } output_arrow (fa); /* move arrow to save_arrow list: */ *ffa = fa->next; fa->next = save_arrow; save_arrow = fa; fa = *ffa; } else { ffa = &(fa->next); fa = fa->next; } } fn = fn->next; } /* now output any remaining arrows (with source and target): */ fa = first_arrow; while (fa != NULL) { /* verify that there is a source node: */ element *ffn = first_node; while (ffn != NULL && ffn != fa->u.a.source) { ffn = ffn->next; } if (ffn == NULL) { fa = fa->next; continue; } /* verify that there is a target node: */ ffn = first_node; while (ffn != NULL && ffn != fa->u.a.target) { ffn = ffn->next; } if (ffn == NULL) { fa = fa->next; continue; } output_arrow (fa); fa = fa->next; } /* restore saved arrows: */ fa = save_arrow; while (fa != NULL) { save_arrow = fa->next; fa->next = first_arrow; first_arrow = fa; fa = save_arrow; } } void regenerate_tex_file (void) /* internal representation -> tex file */ { printf ("Saving to %s.\n", chartfilename); fclose (tex_file); tex_file = fopen (chartfilename, "w+"); copy (pretext, tex_file); if (grid) fprintf (tex_file, "\\grid\n"); merge_lists (); copy (comments, tex_file); copy (posttext, tex_file); fflush(tex_file); rewind (tex_file); } prerex-6.5.3/prerex-6.5.2/depcomp0000755000123700002140000003710011411153264014517 0ustar rdtrdt#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: prerex-6.5.3/prerex-6.5.2/configure0000755000123700002140000061431512226136250015063 0ustar rdtrdt#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.63 for prerex 6.5.2. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell bug-autoconf@gnu.org about your system, echo including any error possibly output before this message. echo This can help us improve future autoconf versions. echo Configuration will now proceed without shell functions. } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='prerex' PACKAGE_TARNAME='prerex' PACKAGE_VERSION='6.5.2' PACKAGE_STRING='prerex 6.5.2' PACKAGE_BUGREPORT='rdt@cs.queensu.ca' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { $as_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { $as_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 { (exit 1); exit 1; }; } ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { $as_echo "$as_me: error: working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures prerex 6.5.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/prerex] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of prerex 6.5.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF prerex configure 6.5.2 generated by GNU Autoconf 2.63 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by prerex $as_me 6.5.2, which was generated by GNU Autoconf 2.63. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 $as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in . "$srcdir"/.; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in . \"$srcdir\"/." >&5 $as_echo "$as_me: error: cannot find install-sh or install.sh in . \"$srcdir\"/." >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 $as_echo "$as_me: error: unsafe absolute working directory name" >&2;} { (exit 1); exit 1; }; };; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 $as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} { (exit 1); exit 1; }; };; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 $as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 $as_echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:$LINENO: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 $as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='prerex' VERSION='6.5.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac AM_BACKSLASH='\' # Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 $as_echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { $as_echo "$as_me:$LINENO: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 $as_echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi fi fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } { $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest$ac_cv_exeext { $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:$LINENO: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$CC" != xcc; then { $as_echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -f conftest2.$ac_objext && { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } cat >>confdefs.h <<\_ACEOF #define NO_MINUS_C_MINUS_O 1 _ACEOF fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi # Checks for libraries. { $as_echo "$as_me:$LINENO: checking for el_push in -ledit" >&5 $as_echo_n "checking for el_push in -ledit... " >&6; } if test "${ac_cv_lib_edit_el_push+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ledit $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char el_push (); int main () { return el_push (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_edit_el_push=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_edit_el_push=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_edit_el_push" >&5 $as_echo "$ac_cv_lib_edit_el_push" >&6; } if test "x$ac_cv_lib_edit_el_push" = x""yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBEDIT 1 _ACEOF LIBS="-ledit $LIBS" else { $as_echo "$as_me:$LINENO: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } if test "${ac_cv_lib_readline_readline+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char readline (); int main () { return readline (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_readline_readline=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_readline_readline=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } if test "x$ac_cv_lib_readline_readline" = x""yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBREADLINE 1 _ACEOF LIBS="-lreadline $LIBS" else { { $as_echo "$as_me:$LINENO: error: libreadline or libedit is required!" >&5 $as_echo "$as_me: error: libreadline or libedit is required!" >&2;} { (exit 1); exit 1; }; } fi fi # Checks for header files. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:$LINENO: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 $as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:$LINENO: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in limits.h stdlib.h string.h unistd.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## -------------------------------- ## ## Report this to rdt@cs.queensu.ca ## ## -------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in readline/readline.h readline/history.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## -------------------------------- ## ## Report this to rdt@cs.queensu.ca ## ## -------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in editline/readline.h histedit.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## -------------------------------- ## ## Report this to rdt@cs.queensu.ca ## ## -------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if test "${ac_cv_header_stdbool_h+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; bool e = &s; char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; # if defined __xlc__ || defined __GNUC__ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 reported by James Lemley on 2005-10-05; see http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html This test is not quite right, since xlc is allowed to reject this program, as the initializer for xlcbug is not one of the forms that C requires support for. However, doing the test right would require a runtime test, and that would make cross-compilation harder. Let us hope that IBM fixes the xlc bug, and also adds support for this kind of constant expression. In the meantime, this test will reject xlc, which is OK, since our stdbool.h substitute should suffice. We also test this with GCC, where it should work, to detect more quickly whether someone messes up the test in the future. */ char digs[] = "0123456789"; int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); # endif /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdbool_h=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } { $as_echo "$as_me:$LINENO: checking for _Bool" >&5 $as_echo_n "checking for _Bool... " >&6; } if test "${ac_cv_type__Bool+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_type__Bool=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if (sizeof (_Bool)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if (sizeof ((_Bool))) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type__Bool=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5 $as_echo "$ac_cv_type__Bool" >&6; } if test "x$ac_cv_type__Bool" = x""yes; then cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_STDBOOL_H 1 _ACEOF fi { $as_echo "$as_me:$LINENO: checking for size_t" >&5 $as_echo_n "checking for size_t... " >&6; } if test "${ac_cv_type_size_t+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_type_size_t=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if (sizeof ((size_t))) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 $as_echo "$ac_cv_type_size_t" >&6; } if test "x$ac_cv_type_size_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # Checks for library functions. for ac_func in strstr do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:$LINENO: checking for error_at_line" >&5 $as_echo_n "checking for error_at_line... " >&6; } if test "${ac_cv_lib_error_at_line+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_lib_error_at_line=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_error_at_line=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_error_at_line" >&5 $as_echo "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then case " $LIBOBJS " in *" error.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS error.$ac_objext" ;; esac fi for ac_header in stdlib.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## -------------------------------- ## ## Report this to rdt@cs.queensu.ca ## ## -------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then ac_cv_func_malloc_0_nonnull=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_malloc_0_nonnull=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_malloc_0_nonnull=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_MALLOC 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define HAVE_MALLOC 0 _ACEOF case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac cat >>confdefs.h <<\_ACEOF #define malloc rpl_malloc _ACEOF fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by prerex $as_me 6.5.2, which was generated by GNU Autoconf 2.63. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTION]... [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ prerex config.status 6.5.2 configured by $0, generated by GNU Autoconf 2.63, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { $as_echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { $as_echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 $as_echo "$as_me: error: could not setup config files machinery" >&2;} { (exit 1); exit 1; }; } _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 $as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 $as_echo "$as_me: error: could not setup config headers machinery" >&2;} { (exit 1); exit 1; }; } fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 $as_echo "$as_me: error: invalid tag $ac_tag" >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ac_file_inputs="$ac_file_inputs '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 $as_echo "$as_me: error: could not create -" >&2;} { (exit 1); exit 1; }; } fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 $as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi prerex-6.5.3/prerex-6.5.2/configure.ac0000644000123700002140000000167712226136224015444 0ustar rdtrdt# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.63) AC_INIT([prerex],[6.5.2],[rdt@cs.queensu.ca]) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE AC_CONFIG_HEADERS([config.h]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # Checks for programs. AC_PROG_CC AM_PROG_CC_C_O # Checks for libraries. AC_CHECK_LIB([edit], [el_push], [], AC_CHECK_LIB([readline], [readline], [], [AC_MSG_ERROR([libreadline or libedit is required!])])) # Checks for header files. AC_CHECK_HEADERS([limits.h stdlib.h string.h unistd.h]) AC_CHECK_HEADERS([readline/readline.h readline/history.h]) AC_CHECK_HEADERS([editline/readline.h histedit.h]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_TYPE_SIZE_T # Checks for library functions. AC_CHECK_FUNCS([strstr]) AC_FUNC_ERROR_AT_LINE AC_FUNC_MALLOC AC_CONFIG_FILES([Makefile]) AC_OUTPUT prerex-6.5.3/prerex-6.5.2/prerex.c0000644000123700002140000002111212226371740014615 0ustar rdtrdt/* prerex.c -- interactive editor of prerequisite-chart descriptions Copyright (C) 2005 - 2013 R. D. Tennent School of Computing, Queen's University, rdt@cs.queensu.ca This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* The key functions in this program are as follows: analyze_tex_file(): reads a TeX file and builds an internal representation of the boxes and arrows for the chart in linked lists accessed through global pointer variables first_box and first_arrow, respectively. Non-chart elements of the TeX file are preserved in temporary files pretext, posttext, and comments. regenerate_tex_file(): re-constructs a TeX file from the temporary files pretext, posttext and comments, and the linked lists of nodes and arrows; merge_lists() implements the output-ordering strategy. process_tex_file(): uses system calls to process the TeX file using pdflatex. analyze_user_command(): processes editing and other commands entered at the interactive prompt. The libedit (editline) library is used to generate prompts with default responses and allow editing of the responses. The current stack of "cuts" is accessed through pointer variable first_cut. A stack of "done" records to support subsequent undo commands is accessed through pointer variable first_done. The bool variables grid and reprocess record whether a background coordinate grid should be displayed, and whether the tex file should be reprocessed after an editing operation. */ # include "prerex.h" extern int optind; /* defined in unistd.h */ bool grid; /* true if coordinate grid should be shown in background */ bool reprocess = true; /* false if regenerate_and_process should do nothing */ # ifdef HAVE_LIBEDIT EditLine *el; History *hist; HistEvent ev; # endif PRIVATE char *command_line; PRIVATE char basefilename[FILE_LEN]; PRIVATE char *basefilename_n = basefilename; char chartfilename[FILE_LEN]; char *chartfilename_n = chartfilename; char backup_filename[FILE_LEN + 1]; char *backup_filename_n = backup_filename; FILE *tex_file, *backup_tex_file; PRIVATE void usage (void) { puts ("Usage: prerex [-v | --version | -h | --help] [basefile[.tex] [chartfile[.tex]]]"); } PRIVATE void sigproc (int i) /* signal handler */ { # ifdef HAVE_LIBEDIT history_end (hist); el_end (el); # endif i++; /* to avoid spurious compiler warning */ grid = false; puts("Turning off coordinate grid."); regenerate_tex_file(); fclose(tex_file); exit (0); } PRIVATE void create_blank_tex_file (void) { tex_file = fopen (chartfilename, "w+"); if (tex_file == NULL) { error ("Opening new file fails."); } fprintf (tex_file, "%s\n", "\\documentclass{article}"); fprintf (tex_file, "%s\n", "\\usepackage{geometry}"); fprintf (tex_file, "%s\n", "\\geometry{noheadfoot, margin=0.5in}"); fprintf (tex_file, "%s\n", "\\usepackage{prerex}"); fprintf (tex_file, "%s\n", "\\begin{document}"); fprintf (tex_file, "%s\n", "\\thispagestyle{empty}"); fprintf (tex_file, "%s\n", "\\begin{chart}"); fprintf (tex_file, "%s\n", "\\end{chart}"); fprintf (tex_file, "%s\n", "\\end{document}"); fflush (tex_file); rewind (tex_file); } PRIVATE void open_tex_file (void) /* initial opening */ { tex_file = fopen (chartfilename, "r+"); if (tex_file == NULL) { printf ("Creating new prerex chart file %s.\n", chartfilename); create_blank_tex_file (); } printf ("Chart file %s opened.\n", chartfilename); } PRIVATE void reopen_tex_file (void) { tex_file = fopen (chartfilename, "r+"); if (tex_file == NULL) error ("Can't re-open the chart file."); } PRIVATE void create_backup (void) { backup_filename[0] = '\0'; backup_filename_n = backup_filename; append (backup_filename, &backup_filename_n, ".", sizeof (backup_filename)); append (backup_filename, &backup_filename_n, chartfilename, sizeof (backup_filename)); backup_tex_file = fopen (backup_filename, "w+"); if (backup_tex_file == NULL) { puts ("Can't open backup file."); return; } copy (tex_file, backup_tex_file); fclose (backup_tex_file); } PRIVATE bool process_tex_file (void) { /* generates system calls to make file.pdf */ /* returns true if processing fails */ char *p; char command[LINE_LEN] = {'\0'}; char *command_n = command; char filename_root[FILE_LEN + 3] = {'\0'}; char *filename_root_n = filename_root; append (filename_root, &filename_root_n, basefilename, sizeof (filename_root)); p = strstr (filename_root, ".tex"); *p = '\0'; filename_root_n = p; printf ("Processing %s.\n", basefilename); append (command, &command_n, "pdflatex ", sizeof (command)); append (command, &command_n, "-halt-on-error -interaction batchmode ", sizeof (command)); append (command, &command_n, filename_root, sizeof (command)); if (fclose(tex_file) == EOF) error ("Chart file not closed."); if (system (command)) { printf ("Processing %s fails.\n", basefilename); return true; } reopen_tex_file (); return false; /* success */ } void regenerate_and_process (void) { if (!reprocess) return; regenerate_tex_file (); process_tex_file (); /* ignore failure; allows user to recover by editing the tex file */ } int main (int argc, char *argv[]) { int ch; const char version[] = "6.5.2, 2013-10-11"; # define NOPTS 3 struct option longopts[NOPTS] = { { "help", 0, NULL, 'h'}, { "version", 0, NULL, 'v'}, { NULL, 0, NULL, 0} }; printf ("This is prerex, version %s.\n", version); ch = getopt_long (argc, argv, "hv", longopts, NULL); while (ch != -1) { switch (ch) { case 'h': usage (); puts ( "Please report bugs to rdt@cs.queensu.ca." ); exit (0); case 'v': exit (0); case '?': exit (EXIT_FAILURE); default: printf ("Function getopt returned character code 0%o.\n", (unsigned int) ch); exit (EXIT_FAILURE); } ch = getopt_long (argc, argv, "hv", longopts, NULL); } puts ( "Copyright (C) 2005 - 2012 R. D. Tennent" ); puts ( "School of Computing, Queen's University, rdt@cs.queensu.ca" ); puts ( "License GNU GPL version 2 or later ." ); puts ( "There is NO WARRANTY, to the extent permitted by law." ); puts ( "" ); # ifdef HAVE_LIBEDIT el = el_init (argv[0], stdin, stdout, stderr); hist = history_init(); history(hist, &ev, H_SETSIZE, 800); el_set (el, EL_HIST, history, hist); el_set (el, EL_PROMPT, &prompt_f); el_set (el, EL_EDITOR, "emacs"); # endif basefilename[0] = '\0'; basefilename_n = basefilename; if (optind >= argc) { puts (""); do { deftext[0] = '\0'; command_line = Readline ("Please enter a file name: "); sscanf (command_line, "%127s", basefilename); while (*basefilename_n) basefilename_n++; } while (basefilename[0] == '\0'); } else append (basefilename, &basefilename_n, argv[optind], sizeof (basefilename)); if (!suffix (".tex", basefilename)) append (basefilename, &basefilename_n, ".tex", sizeof (basefilename)); optind++; chartfilename[0] = '\0'; chartfilename_n = chartfilename; if (optind < argc) /* user-provided chartfilename */ { append (chartfilename, &chartfilename_n, argv[optind], sizeof (chartfilename)); if (!suffix (".tex", chartfilename)) append (chartfilename, &chartfilename_n, ".tex", sizeof (chartfilename)); } else /* use basefile as chartfile */ append (chartfilename, &chartfilename_n, basefilename, sizeof (chartfilename)); open_tex_file (); if (process_tex_file ()) /* bail if initial processing fails */ { exit(EXIT_FAILURE); } analyze_tex_file (); /* catch signals in order to regenerate tex file, restore write access, etc. */ signal (SIGINT, &sigproc); signal (SIGILL, &sigproc); signal (SIGSEGV, &sigproc); signal (SIGTERM, &sigproc); grid = true; puts("Turning on coordinate grid."); regenerate_and_process (); create_backup (); process_commands(); return 0; } prerex-6.5.3/prerex-6.5.2/Makefile.am0000644000123700002140000000027312226136152015201 0ustar rdtrdtbin_PROGRAMS = prerex prerex_SOURCES = prerex.h prerex.c inout.c edit.c utils.c prerex_CFLAGS = -O4 -Wall -Wextra -pedantic-errors man_MANS = prerex.1 prerex.5 EXTRA_DIST = $(man_MANS) prerex-6.5.3/prerex-6.5.2/missing0000755000123700002140000002540611411153264014547 0ustar rdtrdt#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: prerex-6.5.3/chart.tex0000644000123700002140000000436312226246604013025 0ustar rdtrdt\documentclass{article} \usepackage[english]{babel} \usepackage{geometry} \geometry{noheadfoot, vmargin=1.0in, hmargin=0.5in} \usepackage[default,scale=0.95]{opensans} \renewcommand{\bfdefault}{b} \renewcommand{\seriesdefault}{sb} \usepackage{prerex} \begin{document}\sf \thispagestyle{empty} \setcounter{diagheight}{50} \begin{chart} \text 10,50:{\textbf{\Large Computer}} \text 10,47:{\textbf{\Large Science}} \reqfullcourse 50,45:{1083}{Comput.\,Sci.\\Concepts}{TTh 10:00} \reqhalfcourse 25,40:{1303}{Discrete\\Structures}{MWF 9:30} \reqhalfcourse 30,30:{2813}{Computer\\Organiz.\,I}{MWF 8:30} \prereq 50,45,30,30: \prereq 25,40,30,30: \reqhalfcourse 45,30:{2023}{Procedural\\Prog.\,Devel.}{MWF 2:30} \prereq 50,45,45,30: \reqhalfcourse 65,30:{2513}{Informat.\\Systems}{TTh 1:00} \coreq 50,45,65,30: \mini 10,26:{1083} \reqhalfcourse 10,20:{2333}{Computab.\,\&\\Formal\,Lang.}{TTh 11:30} \prereq 25,40,10,20: \prereq 10,26,10,20: \reqhalfcourse 45,20:{2013}{Software\\Engineer.\,I}{MWF 11:30} \prereq 45,30,45,20: \halfcourse 55,20:{2685}{\texttt{C++}\\Program.}{no} \prereq 45,30,55,20: \mini 21,16:{2013} \reqhalfcourse 15,10:{3323}{Data\\Structures}{MWF 10:30} \prereq 25,40,15,10: \prereq 21,16,15,10: \reqhalfcourse 25,10:{3813}{Comput.\\Organiz.\,II}{TTh 8:30} \prereq 30,30,25,10: \reqhalfcourse 35,10:{3413}{Operating\\Systems\,I}{MWF 9:30} \prereq 30,30,35,10: \recomm 45,20,35,10: \halfcourse 45,10:{3013}{Software\\Engineer.\,II}{MWF 11:30} \prereq 45,20,45,10: \halfcourse 58,10:{3513}{Database\\Mngt.\,Sys.\,I}{MWF 8:30 pm} \prereq 65,30,58,10: \prereq 45,20,58,10: \reqhalfcourse 70,10:{3503}{Sys.\,Anal.\\\&\,Design}{TTh 10:00} \prereq 65,30,70,10: \end{chart} \begin{center} \begin{minipage}{6.0in} \begin{itemize} \item A solid arrow \solidarrow\ indicates a required prerequisite, a dotted arrow \dottedarrow\ indicates a corequisite (to be taken before or concurrently), and a dashed arrow \dashedarrow\ indicates a recommended prerequisite. Core courses are in \boldbox\ boxes; other courses (i.e.,~options or prerequisites) are in \lightbox\ boxes. \item Timetabling abbreviations: M, T, W, Th, F=Mon, Tue, Wed, Thur, Fri, resp.; eve=7:00--9:50 pm; no=not offered. \end{itemize} \end{minipage} \end{center} \end{document} prerex-6.5.3/README0000644000123700002140000000723512226246444012065 0ustar rdtrdtprerex, version 6.5.3: Macros for prerequisite charts, with associated editor and viewer applications. This package consists of prerex.sty a LaTeX package for producing charts of course nodes linked by arrows representing pre- and co-requisites, prerex an interactive program for creating and editing chart descriptions, and vprerex ("visual prerex") a GUI and previewer for prerex. The implementation of prerex.sty is built on pgf, so that it may be used equally happily with latex or pdflatex; prerex is written in C and vprerex is written in C++ using the Qt-4 and poppler libraries. See chart.{pdf,html} for a small example of a prerequisite chart and real-life examples at http://www.cs.queensu.ca/students/undergraduate/prerequisites/ Prerequisite charts are useful to students selecting courses and planning their programs, and to faculty and staff advising students and managing curriculum development. Conventional sources of course, program and timetable information are rarely in a user-friendly format. Faculty and staff advisors, being already fairly familiar with their courses and programs, often do not appreciate how inconvenient it is for students to access all the information they need to make course choices. The crucial tool in the prerex suite is "prerex.sty", a macro package that defines a "chart" environment and commands to specify construction of course boxes and directed arrows between them. prerex.sty depends on pgf (and add-on tikz), version 1.18 or higher multido relsize calc ifthen zref-savepos hyperref The use of pgf means that Postscript processing is not required; either pdflatex or latex -> dvips [ -> ps2pdf ] may be used. Installation of prerex.sty: + copy prerex.sty to your-texmf-tree/tex/latex/misc + copy doc/prerex.{tex,pdf} to your-texmf-tree/doc/latex/misc + if necessary, refresh the TeX database (e.g., texhash) + copy doc/prerex.sty.7 to sub-directory man7 of a man directory on your MANPATH + test by doing man 7 prerex.sty pdflatex chart.tex See doc/prerex.pdf for detailed documentation. The prerex editor allows interactive editing of the chart environments of LaTeX source files. It supports add, remove, cut-and-paste, and edit operations on course boxes and arrows, and vertical or horizontal shifts of the whole diagram or selected sets of course boxes. When a course box is moved, the arrows into and out of it automatically follow. To install on most Unix-like platforms, including OS-X and Cygwin on Windows: tar zxvf prerex-6.5.2.tar.gz cd prerex-6.5.2 ./configure [--prefix=$HOME] make make install (as root if necessary) The prerex editor will also build on the MinGW platform on Windows if the readline package in the gnuwin32.sourceforge.net repository has been installed. The effects of editing operations may be observed in any PDF viewer. The vprerex (visual prerex) application included in the prerex suite is a GUI and viewer for the prerex editor. It may be used just as a minimalist viewer of arbitrary PDF files but supports editing of charts generated using prerex.sty by allowing coordinates of course boxes, arrows, and background points to be conveyed back to the prerex editor command-line using the clipboard. See the INSTALL in the tarball for installation instructions. See the file doc/intro.pdf for an overview of the prerex system. prerex.sty, README, prerex.1, prerex.5, prerex.sty.7, prerex.tex and chart.tex may be modified and distributed according to the terms of the LaTeX Project Public License. The source files for prerex and vprerex may be modified and distributed according to the terms of the GNU General Public Licence (version 2). prerex-6.5.3/doc/0000755000123700002140000000000012226246354011743 5ustar rdtrdtprerex-6.5.3/doc/prerex.tex0000644000123700002140000004527612226246354014010 0ustar rdtrdt\documentclass[10pt]{article} \usepackage[osf]{mathpazo} \usepackage[defaultsans,scale=0.82]{opensans} \usepackage{fullpage} \usepackage{prerex} %\def\LaTeX{\mbox{LaTeX}} \begin{document} \title{\textsf{prerex.sty}: Prerequisite Charts in \LaTeX\\{\large Version 6.3}} \author{R. D. Tennent\\\texttt{rdt@cs.queensu.ca}} \date{\today} \maketitle \thispagestyle{empty} \section{Description} \texttt{prerex.sty} defines macros that [pdf]\LaTeX\ can use to draw charts consisting of labelled course boxes linked by arrows that represent pre- and co-requisite requirements; see the example chart in Figure~\ref{chart} on page~\pageref{chart}. In addition to the usual [pdf]\LaTeX\ output, auxiliary files will be generated containing image-map data for the hyperlinked nodes in the diagram and a shell script for cropping a PNG image obtained from the [pdf]\LaTeX\ output. If the source file satisfies the constraints of the \textsf{prerex(5)} format, a chart description may be edited using the \textsf{prerex(1)} interactive editor (as well as any conventional text editor). \begin{figure} \renewcommand{\seriesdefault}{sb} \setcounter{diagheight}{40} \begin{chart}\sf \text 15,40:{\textsf{\textbf{\Large Computer Science}}} \reqfullcourse 50,35:{1083}{Comput.\,Sci.\\Concepts}{TTh 10:00} \reqhalfcourse 25,30:{1303}{Discrete\\Structures}{MWF 9:30} \reqhalfcourse 30,20:{2813}{Computer\\Organiz.\,I}{MWF 8:30} \prereq 50,35,30,20: \prereq 25,30,30,20: \reqhalfcourse 45,20:{2023}{Procedural\\Prog.\,Devel.}{MWF 2:30} \prereq 50,35,45,20: \reqhalfcourse 65,20:{2513}{Informat.\\Systems}{TTh 1:00} \coreq 50,35,65,20: \mini 10,16:{1083} \reqhalfcourse 10,10:{2333}{Computab.\,\&\\Formal\,Lang.}{TTh 11:30} \prereq 25,30,10,10: \prereq 10,16,10,10: \reqhalfcourse 45,10:{2013}{Software\\Engineer.\,I}{MWF 11:30} \prereq 45,20,45,10: \halfcourse 55,10:{2685}{\texttt{C++}\\Program.}{no} \prereq 45,20,55,10: \mini 21,6:{2013} \reqhalfcourse 15,0:{3323}{Data\\Structures}{MWF 10:30} \prereq 25,30,15,0: \prereq 21,6,15,0: \reqhalfcourse 25,0:{3813}{Comput.\\Organiz.\,II}{TTh 8:30} \prereq 30,20,25,0: \reqhalfcourse 35,0:{3413}{Operating\\Systems\,I}{MWF 9:30} \prereq 30,20,35,0: \recomm 45,10,35,0: \halfcourse 45,0:{3013}{Software\\Engineer.\,II}{MWF 11:30} \prereq 45,10,45,0: \halfcourse 58,0:{3513}{Database\\Mngt.\,Sys.\,I}{MWF 8:30 pm} \prereq 65,20,58,0: \prereq 45,10,58,0: \reqhalfcourse 70,0:{3503}{Sys.\,Anal.\\\&\,Design}{TTh 10:00} \prereq 65,20,70,0: \end{chart} \paragraph{Notes} \begin{itemize} \item A solid arrow \solidarrow\ indicates a required prerequisite, a dotted arrow \dottedarrow\ indicates a corequisite (to be taken before or concurrently), and a dashed arrow \dashedarrow\ indicates a recommended prerequisite. Core courses are in \boldbox\ boxes; other courses (i.e.,~options or prerequisites) are in \lightbox\ boxes. \item Timetable abbreviations: M, T, W, Th, F$=$Mon, Tue, Wed, Thur, Fri, resp.; no$=$not offered. \item \dots \end{itemize} \caption{A Prerequisite Chart} \label{chart} \end{figure} \section{Terminology} A prerequisite chart consists of a number of \emph{course boxes}, linked by \emph{arrows}. Courses are either \emph{half} or \emph{full}, and may be \emph{required} or \emph{optional} (or neither). Each course box can contain a course \emph{code} (upper left corner), a course \emph{title} (lower half), and \emph{timetable} information (upper right corner). An arrow can be either a \emph{prerequisite} (solid), a \emph{corequisite} (dotted), or \emph{recommended} (dashed). When a conventional arrow would be inappropriate, it is possible to use a \emph{mini} course ``box'' (consisting of just a course code) just above a target box. A line of text may be placed anywhere on the chart. \section{Coordinate System} A conventional two-dimensional Cartesian coordinate system is used to specify the locations of diagram elements. The origin (where $x = 0$ and $y = 0$) is at the lower-left corner of the diagram. The diagram height is configurable; the width is determined by the values of \verb|\textwidth| and an adjustable \verb|\unit| length, which defines the absolute value of a coordinate unit. It is possible to put a coordinate grid with labelled axes in the background of a chart. The coordinates of a \emph{box,} \emph{mini,} or \emph{text-line} are those of its centre point. An \emph{arrow} is described by the coordinates of the centre points of its source and target boxes/minis/text-lines. \section{Usage} The command \verb|\usepackage{prerex}| should appear in the document preamble. This will define a \LaTeX\ environment \begin{list}{}{} \item \verb|\begin{chart}|\quad$\cdots$\quad \verb|\end{chart}| \end{list} within which the commands described in the following sub-sections may be used to produce course boxes, minis, text-lines, and arrows. The order of commands is not significant except that the commands for the source and target boxes of an arrow should precede the command for the arrow, and the \verb|\grid| command, if present, should precede other chart commands. \subsection{Course Boxes} The commands producing course boxes have the following forms: \begin{list}{}{} \item \verb|\halfcourse | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \item \verb|\reqhalfcourse | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \item \verb|\opthalfcourse | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \item \verb|\fullcourse | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \item \verb|\reqfullcourse | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \item \verb|\optfullcourse | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \end{list} where $x,y$ are the coordinates of the centerpoint of the box, relative to the origin of the coordinate system at the lower-left corner of the diagram. The \emph{code}, \emph{title}, and \emph{timetable} arguments are arbitrary (well-bracketed) text, possibly with \LaTeX\ markup. The following are similar but take an additional argument to specify the (non-default) background color of the course box: \begin{list}{}{} \item \verb|\halfcoursec | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \verb|{| \emph{color} \verb|}| \item \verb|\reqhalfcoursec | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \verb|{| \emph{color} \verb|}| \item \verb|\opthalfcoursec | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \verb|{| \emph{color} \verb|}| \item \verb|\fullcoursec | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \verb|{| \emph{color} \verb|}| \item \verb|\reqfullcoursec | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \verb|{| \emph{color} \verb|}| \item \verb|\optfullcoursec | $x,y$ \verb|:{| \emph{code} \verb|}{| \emph{title} \verb|}{| \emph{timetable} \verb|}| \verb|{| \emph{color} \verb|}| \end{list} \subsection{Mini Course Boxes and Text-Lines} A mini course ``box'' is produced by a command of the form \begin{list}{}{} \item \verb|\mini| $x,y$ \verb|:{| \emph{code} \verb|}| \end{list} A text-line is produced by a command of the form \begin{list}{}{} \item \verb|\text| $x,y$ \verb|:{| \emph{line of text} \verb|}| \end{list} There are several differences between minis and text-lines. The maximum length allowed for a course-code may be less than that for a text-line. A sans-serif font and a reduced font size is used for a course-code. A course-code may be hyperlinked but a text-line is not (except when the coordinate grid is on). A \verb|\parbox| command may be used if more than one line is desired. \subsection{Arrows} Arrows between course boxes (or minis or text-lines) are produced by commands of the form \begin{list}{}{} \item \verb|\prereq| $ x_0,y_0,x_1,y_1$\verb|:| \item \verb|\coreq| $ x_0,y_0,x_1,y_1$\verb|:| \item \verb|\recomm| $ x_0,y_0,x_1,y_1$\verb|:| \end{list} These produce, respectively, solid, dotted, and dashed arrows from the course box (or mini or text-line) centered at coordinates $x_0,y_0$ to the entity centered at coordinates $x_1,y_1$. Arrows by default have a non-zero curvature (unless they are very short). It is possible to override the default curvature for a particular arrow by using the instructions \begin{list}{}{} \item \verb|\prereqc| $ x_0,y_0,x_1,y_1;c$\verb|:| \item \verb|\coreqc| $ x_0,y_0,x_1,y_1;c$\verb|:| \item \verb|\recommc| $ x_0,y_0,x_1,y_1;c$\verb|:| \end{list} where $c$ is an integer in the range $0$--$100$ specifying the desired curvature; for example, $c= 0$ will produce a straight arrow. To change the default curvature for all arrows, the user program may redefine the \verb|\DefaultCurvature| command. \subsection{Web Links} \label{WebLinks} Course boxes and minis may be hyperlinked. The default URL for course boxes is \emph{course-code}\verb|.html| where \emph{course-code} is the \emph{code} argument of the course box. The URL scheme may be changed by the user by re-defining the \verb|\CourseURL| command; see Section~\ref{Configuration}. \subsection{Coordinate Grid} The following command produces a coordinate grid with labelled axes, which is useful while editing a diagram: \begin{list}{}{} \item \verb|\grid| \end{list} This is normally placed before all the other chart commands so that grid lines are in the background, covered by course boxes, minis, text-lines, and arrows, as in Figure~\ref{grid} on page~\pageref{grid}. The \verb|\grid| command also redefines the \verb|CourseURL| command so that, in suitable PDF viewers, if the mouse cursor is placed over a box, mini, or midpoint of an arrow, the \emph{coordinates} of the box/mini/textline (or the coordinates of the source \emph{and} target of the arrow) will be displayed as follows: in the status bar in \texttt{xpdf} and \texttt{gpdf}, and in a ``tooltip'' in recent versions of \texttt{kpdf}/\texttt{okular}, \texttt{evince}, and the Acrobat Reader. This coordinate display make it easier to edit chart descriptions. When the grid is on, the mid-point of every arrow is highlighted by a ``bullet''. The \texttt{prerex} package at \url{http://www.ctan.org/tex-archive/graphics/prerex/} has a patch for \texttt{kpdf} (recently incorporated into \texttt{okular}) to allow capture coordinates of course boxes, arrows, and background points in the X selection clipboard (for pasting into a command being composed at the \texttt{prerex} prompt). There is also a GUI frontend \texttt{vprerex} to the \texttt{prerex} editor which incorporates a minimalistic prerex-enabled PDF viewer. \begin{figure} \setcounter{diagheight}{40} \renewcommand{\seriesdefault}{sb} \begin{chart}\sf \grid \text 15,40:{\textsf{\textbf{\Large Computer Science}}} \reqfullcourse 50,35:{1083}{Comput.\,Sci.\\Concepts}{TTh 10:00} \reqhalfcourse 25,30:{1303}{Discrete\\Structures}{MWF 9:30} \reqhalfcourse 30,20:{2813}{Computer\\Organiz.\,I}{MWF 8:30} \prereq 25,30,30,20: \prereq 50,35,30,20: \reqhalfcourse 45,20:{2023}{Procedural\\Prog.\,Devel.}{MWF 2:30} \prereq 50,35,45,20: \reqhalfcourse 65,20:{2513}{Informat.\\Systems}{TTh 1:00} \coreq 50,35,65,20: \mini 10,16:{1083} \reqhalfcourse 10,10:{2333}{Computab.\,\&\\Formal\,Lang.}{TTh 11:30} \prereq 10,16,10,10: \prereq 25,30,10,10: \reqhalfcourse 45,10:{2013}{Software\\Engineer.\,I}{MWF 11:30} \prereq 45,20,45,10: \halfcourse 55,10:{2685}{\texttt{C++}\\Program.}{no} \prereq 45,20,55,10: \mini 21,6:{2013} \reqhalfcourse 15,0:{3323}{Data\\Structures}{MWF 10:30} \prereq 21,6,15,0: \prereq 25,30,15,0: \reqhalfcourse 25,0:{3813}{Comput.\\Organiz.\,II}{TTh 8:30} \prereq 30,20,25,0: \reqhalfcourse 35,0:{3413}{Operating\\Systems\,I}{MWF 9:30} \recomm 45,10,35,0: \prereq 30,20,35,0: \halfcourse 45,0:{3013}{Software\\Engineer.\,II}{MWF 11:30} \prereq 45,10,45,0: \halfcourse 58,0:{3513}{Database\\Mngt.\,Sys.\,I}{MWF 8:30 pm} \prereq 45,10,58,0: \prereq 65,20,58,0: \reqhalfcourse 70,0:{3503}{Sys.\,Anal.\\\&\,Design}{TTh 10:00} \prereq 65,20,70,0: \end{chart} \vspace*{2ex} \caption{A Prerequisite Chart with a Coordinate Grid} \label{grid} \end{figure} \subsection{Stand-Alone Commands} The following commands may be used outside a \verb|chart| environment, such as in the explanatory notes for a chart: \begin{center} \begin{tabular}{lc} \verb|\solidarrow| & \solidarrow\\ \verb|\dottedarrow| & \dottedarrow \\ \verb|\dashedarrow| & \dashedarrow \\ \verb|\lightbox| & \lightbox \\ \verb|\boldbox| & \boldbox \\ \verb|\dottedbox| & \dottedbox \\ \end{tabular} \end{center} \section{Dependencies} This implementation of \verb|prerex.sty| uses \verb|pgf| (version~1.18 or later) with add-on package \verb|tikz|. The following additional packages are used: \verb|multido|, \verb|relsize|, \verb|calc|, \verb|ifthen|, \verb|textcomp|, \verb|zref-savepos|, and \verb|hyperref|. \emph{Either} \verb\pdflatex\ \emph{or} \verb\latex\ (followed by \verb\dvips\ and, possibly, \verb\ps2pdf\) may be used. \section{Conversion to Portable Network Graphic (PNG) Format} To convert a chart (in Postscript or PDF format) to a reasonably high-quality image, it is suggested to use the \verb|convert| tool of the \verb|ImageMagick| package as follows: \begin{verbatim} convert -density 125 chart.ps chart.png \end{verbatim} or \begin{verbatim} convert -density 125 chart.pdf chart.png \end{verbatim} The density parameter specifies the number of pixels per inch; if this is too small, the image is of poor quality, and if it is too large, the image file is too big. By default, the shell script generated by \texttt{prerex.sty} crops the image at the southeast corner. It is possible to use a PNG compression application such as \texttt{optipng} to reduce the file-size of the cropped image (without loss of quality). An auxiliary file containing image-map data for the hyperlinked nodes in the chart is also generated; consult a reference on the HTML language for an explanation of (client-side) image maps. \section{Installation} \begin{enumerate} \item install the most recent version of \verb\pgf\ from \url{http://sourceforge.net/projects/pgf/}. \item copy \verb|prerex.sty| to \emph{your-texmf-tree}\verb|/tex/latex/misc| \item copy \verb|doc/prerex.{tex,pdf}| to \emph{your-texmf-tree}\verb|/doc/latex/misc| \item if necessary, refresh the \TeX\ database (e.g., \verb|texhash|) \item copy \verb|man/prerex.sty.7| to sub-directory \verb|man7| of a \verb|man| directory on your \verb|MANPATH| \item test by doing \begin{verbatim} $ man 7 prerex.sty $ make chart.pdf \end{verbatim} \end{enumerate} \section{Configuration} \label{Configuration} The following are defined by the style file but may be re-defined by the user: \begin{list}{}{} \item \verb|\newcommand{\DefaultCurvature}{20}| \end{list} where the argument should be in the range $0$--$100$; $0$ means no curvature. \begin{list}{}{} \item \verb|\newcommand{\CourseURL}[3]{#3.html}| \end{list} where the arguments supplied at the call are the $x$ and $y$ coordinates of the box or mini and the course code. \begin{list}{}{} \item \verb|\newcommand{\background}{yellow!15}| \end{list} which specifies the default background color of course boxes. \begin{list}{}{} \item \verb|\setlength{\unit}{5.7816pt}| \end{list} which defines the absolute size of a coordinate unit; this yields 10 pixels per coordinate unit if the chart is converted to an image at 125 dpi. \begin{list}{}{} \item \verb|\newcommand{\dpi}{125}| \item \verb|\newcommand{\PixelsPerUnit}{10}| \end{list} These have to re-defined together if the image-map data are to be correct. \begin{list}{}{} \item \verb|\setcounter{diagheight}{75}| \end{list} which is the $y$-coordinate of the top of the diagram (reduced to $65$ in landscape mode); the nominal diagram width is \verb|\textwidth|~$\div$~\verb|\unit|~$+ 10$. The following define the thicknesses of the three kinds of arrows, and the thickness of bold boxes: \begin{list}{}{} \item \verb|\newcommand{\solidwidth}{0.5pt}| \item \verb|\newcommand{\dottedwidth}{0.8pt}| \item \verb|\newcommand{\dashedwidth}{0.5pt}| \item \verb|\newcommand{\boldwidth}{1.0pt}| \end{list} The following command is used to change to a smaller size for course codes, timetable information, and mini-course codes: \begin{list}{}{} \item \verb|\newcommand{\smallersize}{\relsize{-3}}| \end{list} The following command defines the baseline adjustment for the stand-alone arrows and boxes; this parameter is font-dependent. \begin{list}{}{} \item \verb|\newcommand{\baselineAdj}{-0.5ex}| \end{list} \section{Implementation Details} \subsection{Boxes} To improve the appearance, boxes are drawn with slightly rounded corners. The half-course boxes are assigned a minimum height to give a more uniform appearance to horizontal rows of such boxes. The mini and text boxes have white frames and their fill colour is white, which is assumed to be the background colour of the chart. A text box is not normally hyperlinked; however, if the coordinate grid is on, it is hyperlinked and its chart coordinates are encoded in the URI. \subsection{Arrows} Arrows with a small height and arrows whose source and target points have equal x or y coordinates are always draw straight (using a specialized and simpler macro) unless an explicit non-zero curvature argument is provided. If the coordinate grid is on, a hyperlink with the source and target coordinates is placed at the mid-point of the arrow. A wider background white edge is drawn below an arrow to improve the appearance of crossing arrows; the background also ensures visibility of the arrow when the coordinate grid is on. A thin white arrow (with a visible arrowhead) is drawn beneath the visible arrow to obtain a thin arrowhead. \subsection{Coordinate Grid and Associated Changes} When the coordinate grid is drawn, the \texttt{CourseURL} command is re-defined to pass node coordinates in URIs. Also, two ``anchor'' hyperlinks are inserted at the southwest and northeast corners of the diagram to allow prerex-enabled PDF viewers to compute chart coordinates. \subsection{Chart Images} \enlargethispage*{8ex} To support HTML versions of charts, \texttt{prerex.sty} generates a script to crop a chart image at the southeast corner, allowing descriptive notes below the chart to be treated as ordinary text. Also, it generates image-map data for use with an HTML image map. To obtain absolute page coordinates, the \texttt{zsavepos}, \texttt{zposx} and \texttt{zposy} commands are used; the page coordinates are converted into pixel coordinates for cropping and image-map use. \section{License} \verb|prerex.sty|, \verb|prerex.sty.7|, \verb|README.prerex| and this document may be distributed and/or modified under the conditions of the \LaTeX\ Project Public License. \end{document} prerex-6.5.3/doc/prerex.pdf0000644000123700002140000050544312226246354013756 0ustar rdtrdt%PDF-1.5 % 106 0 obj << /Length 2580 /Filter /FlateDecode >> stream xڽY[~Уhކ3Ӡ@]1l[PQᒜi-@e)^_rUzy@d#u8_Stٵ޹ RQ,Km?>DϢY'aDÚ12ipװBr!â]YiC'~5:Pk]Kߤ4Q9SӢ0 +O\ QTo`J'ֹc{{:ÇWu1a]7fw/o̦3H=5$ gL1 YRpM#OJB I~$ԵQI~)<3k[ .[Ԛpii7W 77q77uߝ%~屴 zxŅw1u]ۡjΖ.Oɞ YթX vxPήg¤`7Dqw{p^vGÁXDt>{Yh)]pK[O|y8*Гs04Afd  [붦ޅ;ڮlq[KpTԅzFNg =j0"E\ZюF&=YͩrR ;Do}%J> aO'NJ ZuJ(w[ۀ á7:`ϐ6,}7'"D1tU( ,5~H\xx*Xc`& wf "mKBkiO[?LyHjx(*ϧ|f>id}0J@GgV3) oRod6TFW69XHxc0M̘o{=g:k72Aq02 H6.*;#X9#ƐBQ+R0(~kwT߇AD4+!}Xl#[b\\ b m0-Iخn*:E Op-xuewI;/F38$&>'m4SR48r>r#Ggu2bXg8lLK؁X&G&HuMODz2 ̳\Ιuun%Ey,#sWbPDыW 8W^#l'lwu,Fq¤QK=kJ/vhKnr끌 ZNL"AcVcTeIA7R*H0_q$hݷ o&JOGKgQػnߘBbPԳ48 @`)=΃%w7'O C[ F-d Q %S,i/Ak|m_E"0.Pm(u&`OCoC}ᮌ8=W""8t#0Ff4Sv >4%-p t ~S|".9 ۾~M߿ak-y:aL >-rI7X=3^{ :Y^o*law)R'HxMHSؗóm4{Փp?֣(1pH.>NoG^@jsd2aRCfzbjS{lrdvY^pqz$\ endstream endobj 123 0 obj << /Length 5273 /Filter /FlateDecode >> stream x\[o\q~ׯ8,(8l/y(.EG"%rg'@(AVϜPNwWuu}u3bIL֧$'&âc|}?\L+j_&"JDA#h%(ŇWUXN!䤤Z+[\F_ 4-k4ӫʶQ'rg`8 Z)?dWꝾ.Ek-Ah XDfhk"F\ڶZkm5ʝe)8kY`=4Ϻ̆5\X(؈S:LB7/ga8X-XZɄg) :Y1nAX $GK?/~k- x&!:Tf4 K-: +v  [<,m4yz#2|fZ~i-h A.A0/xM&i6a 9abw^o#9bѝ!-6{|28g~x~O:zUI|kc}CnP)nH*2q1Zm΍y@<;H⭎/2\J}BBXlOv8 <L!,3%]ƹ;d1Koe4cAC=eYңtU 0ap:ʩ_#^/9B|90RTC "=.m RQB5Dp%sƠvv˩v+ 'Jc ϰ|¤N͌äjqj<&QlDP-lޙ'8F&[A@Qa:G׾!siNˀD:Rh_&HG-C¨@_rL 6ΣkbE#}UUtVG$FRi٤C}QJ0BjaQ%uC0`eU! u<8e0$ۇe !>ՙ*J H&nBCe@BjJrF,$JIyT30N bT"N4c"q p)ADT/F:fQ8ʹYi\͕<訞:%<9RQ%ECv/h&`)\};Z^Ds tLyv D1qzم، FSZDi"3-N bT"N4cc"q ph)e# vxisb"Fe 6ΧkdED|H[8)}:krKP c@Z+svJ!~T60_aj馕?oqi]8U=-ƃ"@?2Fاf6 m 4֋}V9m69m鲌1V}LTF(Ff}|j5% ʛ 1m҈H Ym(*D/LJPTidZ" @#Ztu;*MHih^N ?u'a@ q+Y."Hn}nW:_6dM椊ν u ݀Dr<4 S8"uD6LTհ ]b J 鴡$JwFrp0jC{e¶j٦vBTڧsO'iIg3JBd 0pP7;ͻ9*v?\]\^"RUAMU*l+YD[NQ^A#hmW S8huM@R84or0thta]oIGNFg$Na2΢*`Ww4}j>< h\LCfl4&wAJfcu6b㧸D:4O @8o{f3oUýX>խ@,IU`jǦfyciV[{}rNܦs&(wH00]Nt+Xp@J7+!BeE1OiĹQj]9̝Epg.!$4RU!]쥱4&f's1/l-f&Իɡxctmgnx3X`>j< =)3np9-4Xb8(c( <ҫ#!PD"جA-`M5 NT6̶@#8#8+7wsNemAN+fGp>|L#ۢn `kSw>9Rw%Y{p540Wb F)j Ft::mV=߼Ymi6#FT6 MF]FJї`]bo04&k'sQ|} #T'3$LS@ɇ<,1;,ه^HԏDw7m6Z9 ~}2t9>hϰbҟ&=%L;`)ͪY R5;$n:B Dg@T}@C=bOo(iLN2j_06;,bQOy;jc؋(qykp;!$A滫v#]Uq{yqvh^G|?ihUvH7<ւa释T9`D) ) 4F4۝oaluAA^|<ɻ^-H"4.){qZ%U1mCEFX/_!bѻ!YD5]&\@Y_jFh[yռ2+w.ȮmTL-PЉ%^z{yv9-?re,=ܜ'SWlb d2t-cNVN4 nf55h^[#)drGi#ε3LGބܱ?*ή?|8z[}r-#;|sO.v_M7:)h?&ttwi#h ryAF3P^ 8FA>'$8W@m+qb4ʗ.d;-՞Mfل"oYL)좣zK2U7ދRnǥQi}f56,ito/93\ J]_fͻfHNH/%HO?n.Js c፾MH/D=oXp F`6-̡,PF&eQڒ%jib'Y+Jֵ>ѫ:3vz #B ]'nIVvT> 8Pi+RP`{CiV[%+~ynk@cml"ޤXliOo[{ue-OR5fS7 N߼)W.OF2I'm"jմ z ,r.nt9j.&eR?fTX]-֋栜83J<ےj};h;|{^(] k#^[EbP^3wu?w(V<|~ӛfw]gzMlWݗʮ endstream endobj 133 0 obj << /Length 1691 /Filter /FlateDecode >> stream xZK6WbF|ITnI(қ=m+n9Vv6MOc8oHq EEoW/^"!IĢj"! yXe_iY2m1 ڽƶMUi5XtZgXŁ#mɔ;6ћTeE]k?t I UA7Ǻuu7~DJT0%KTvRcCiO YX+':T#ӵn;j˪(ḫ4a6ib//9۪gj@w+EĽ"PhS׾-֝aDwf_sm7:QL(x1R d$꽈GFrMe৞K/hj%:.ۗ+;zeAk,nidJ.p*fExXB(84bL#Ixg01I`OC@KJ06wӉå):_>ێxj]4@} 1ML^OީE`MwQ\ʎ AXu3H8px ޽?}L:ִ# Hd | ݦ|~ёK,L:!#vD4Qt%PWt[t5\8ա͢=u[VGѹ.y[Uѹ8J 8R9d=39G}1H+?^%c]$8S;B &TP< pf1x}(tU6=3X ; P"BLTyj{E_(iى.L7cL&#xGd?2ʼn'#ޭ^6D endstream endobj 177 0 obj << /Length 2634 /Filter /FlateDecode >> stream xZKܸW LsHJFollsH0j#_*lL3kANMb=*6_V| wzs1R+!X\]mW\3lϵ_W&̤XF0`c2dqsxKsŞױT!>:fq dȀEqڈh~VDkX_N>Rs:̽v<_⦦ GHo7eQ@KfTgnn>n­0wzwptR鳘pP IE"B]_c"s̴> |:K\g4w2 ~=}ٰC0D 1R(mc87鄩ZM'q10ih,=+5XD?+ ZEwHv@% $ o,Oejq8 3m$zLoc1On5"Tj#=ַI{0ZR7nj7y2fյ#7[r|&8)K{@50A]dTVpv8l 8tmˤ#wšBcSTUGp+j^3%mQ|3>w[skQNqgW ׃ɏ8E# }G&X@{,#r&wLKR8-:gwecwhNcוz(rk5}pNAvЀYٿ4!OcA'ac}"b2^ qh!JBUvXúǸ5<|^.Fkw5G%4]A~?࡟7a@>e!lT] fwJD8jy mx$E(9J}#: &s9BMT4M u/;e[ 2z#sKw ]u,Ėؐo?$mtmdhyjH"D\1/-Vm+!&[T?p>$jϾZ7vFV4t$.<\`@ݢІ/qhYhXNTy_0ú]_9ƼmfK@j ^tW·B^BSݎm&f(kǔ 8힢U\`a75pKaQ-ƽ[?d%!a O$27f.{:٫ ځC<1` S=xA[$Cv騑[9[\t{uy<\\,ޯo*gL3i4~JI$Y'xHE:_PDhN!ɉG.ZISڭqufI`s]ց)\qx"Y紐yҵ{ 9}iĚ< Լ#hXC/K7hP@ H7emuz*=ciT;3yq/,~6˧E>[ȭM!i-YS/?,;XXD>6K`+5 ]WNmAX:tSL%RFo[H$8 H1c(gh0tl&9o%*=^G0*<}7tILpm(2eDBr~evNk]3|\ha}x@c ,=&#*~ *> 5ܿ V/0Зǽb>abD[xkhG ʢ.b7LN ұn4% IاB Ǐ$ 8q3%ǵ~_D` endstream endobj 182 0 obj << /Length 8786 /Filter /FlateDecode >> stream x][s~8dwg2yeYі-l$)Q&[~vh3gPzj+6fF`tvNIG|HIVE;U!X/enUXuҩiNIG|/K7уV~pEt_Fv:J-΋$}4$hA)RFh}wNPY^ o*%pykhwwyϋ 9@4ݪh;*KI騐 dM4-z;/ѿ4;X ¶$T"X/b?/PӖEj$}xaxX,_o1%_]!Q"_-f;c˲|%>@,G^<`|5YFW2e˷ 쐏e0(X/zs]fQU _#X'r6C>,hYO^bR}$ƸYJ zl\ vPfP[N WnЃwI|Aayo9G A9Bo9I ^YB%jGj[ ׯM<YJoU\UC*tYP8̠ QaP'c7ci_VH8*4N Z#<.ԝF"lN|L:YMy]2MN~`d\Gӱ!S̷+u6(*NV)FS (a{-tyjhT@sN76łO .]y  o>x X`.2iQ| #T BG@{`+I2 LިSAiѽu7hJ񵟠IpB ! NC` o+ 'v W w z)WrgOE]>Ff{x9P_R%pXVQ%/}e:Sp$'eRE0Ui .sdr 8 uit(n>o#G5\C{F{X$mV=~Y;ԇ`Z՟$Xՠ:A+%+Ti^Ƌ\Ώia Xnc?6fb8?ʠB3,k0w|*mWPJ U>%ۤbhpLT6^vcw RoͺRR]n;3*4![l=ɤjQ&VV;'IEj]/:" L贎9puދvuzu=[4ti[C %C,k0C+ C>" UqC ״Yx!=`p f@M^"ذVkgTgFNA'tAvpcOiFa|*8 ( ܩ EuhV$z(EQ| A8*H^Qwmq S ḤlN o3ܪA 鹍F{pB,k0bx.0BG}a2UtI_h>9hfumC㟌b|)YGlmL,j0tWlC Zjbdz|"=bpB &BBSNU:N:yF+Crgqw_|ۯzcV:bYh9`9`cr}`kta2{pQ*@#+ c;'VĢVIFOZ|O2'ex7*,o3 fئP&j6Qmbg6 {m>jT¤QՄ') q0e8)n@Dm=6ý,`m1vf o13yo[A0Qc090'H݄7"̮X`Z׌~Aa2vJA8a<́Xָ|VFOM i&.P[jZ$MWҵY6E3o3- l܈gA8 ;t}Mexs}Mj5[k\Ȱ iX\0P@Ua8PwHe >$Ο{Q;J"BjO}R:nkiwVH)ʀu!Ҫd[kkxlU heiq I#aNDGF4.a-<{e#'J640X B,2"9|O |`I\P+1Dv5 _&\ G9VOAp2MF[MPNӣud*tƃ >KF"\xh$eLkBoZ)3Sog,Jqd ֱz?TZftb`یx䵛P5@Vh%{OG/+3LiSa)8*kOB֡F xrF"8˳'1 ԤkTF@\$a{k_xg,#*tiIh'T021S 'kI7"HeeឨuqV CB._"i4v{&rf&u҈baqpة48k-ԉ1Ҩ 4٣'YU.Uk\ӟ {xF?w SQH4&Y38q`x@#hC4[F_0XS!kqac8 NuZ8C"D:: >U8ai|!s1Bhm! s[miĤ|*Q)\' QJ-ZA5Pת|03'+) _IL9*}*Iێ"ڂ8hDI0TŲV$ΫK9$u}_Aes3ǓG<||g$;Z{^qǕf7QS6y{ DvcU)\m QJ$P~ჩM嘩M< ĉd+Pg$6ՆQp jjSE[RQbYj7 ?:"ͩэmq~:z4uc6a 8G6|?Rw3PJRfbڥA)ƴ5BaU*E]tshX_Wù42hr[gf'Q"ˁcUxv~1}m8 ODT0~~9%"@ /FeC\eSC^440*J:\C*>Epc9ZհZZ1&$kޭ'=J\v`lX+vǭ1đ )mUvɫöPRCKi,+Fn҂\^UqmJqZNSIj\ jX. Qoڼʗ8ܰZyU՞yVI!(ѬUxS>֧5Y=amg6;4)5)N A6u 6Nv*9onIԻ*wBmkT SPHFp7^N[ W$NcV2gQTf="1I $n| hF*kYF\-y0EǏ1 m>M蔧ǏHޠ8]"!>/grq󯏏sc>O|}_6Bǝ@G{mʬM 58KEj̈x!\A@ɻwgDo:= ocŃ19zuyqqʉWoO~?O7/3df] \D-7'W73I`*|~uOwo|jM:Qߥ'Nn.~Kw7g$U8\5Uy0oLpØח/O.#n5aT:kM ~dJ#>6c AQq 6=iL{`Thp<"ofp-h'HtP.O c*v['#65Z)ץ'z^^ܜ-//k3ٛlPM*G96-cY8ӭSX\֐VKBSWnSqU'zyKK+o]u ŀC8F;B*G<^44U0B9'K" F'{=WEaHCvitX>`싧_[`jswt[^/! x 7\!xw)mOg'I)9$ڊ/0>9|ha"<ٯo3uП$(< \7ev2gWhjɰzX1Sƕ /"QQ ~x Ɣ˫`'7gWH߼I|9P?9\M_J9_m_,މ864-v (9Ƿ|r3GnL9K8x9VuO7//gUvgP\]\NO.Nw5j)ysn1*?77gޜ^}?1R{sWg/܂r[SKG'^ ]]U X4Mh9|!9E/_:S\\,Y1n$+}a"Kqo3%,%2BCs}o\οT5t?5µvXgɴ`iyσl:p8QcɃwddc 7'g7\^.]s~.˫'7{{A*id/d|Uyp85]}}U\W*R(ko_~[smM}k7:%Fݼ6drtYJ4{6[˻~|s9TW,<oRÇ<`Z#QulgNo|5Wf:ƴ> stream xZ[O~D"=}Dh%6r"P]ƒc怵fjMÌ#aݮUe;DV$ڈV(ZcGa0h,xa!a fXZ?/juJX,K1i@hHK[A0+-`y''p0Fń!s6ySH(g@n#V:M"aĉ+АbY$  ŠcX#sk!4 ;2j uR7!XzI$d!p0_#NJr„emk 2΀$,Sm!%p3e!t`GX ڰ惟h%;t!0 .)YP4t: Ai@y(M4tO{3؂&B0;J8Sƙ %&"Ў7 &=S&fXl BuO{7 ,#*$FJ֬@XH4>NvwEq$ZͲɛr9k旼v-iżP鼚8lˋOߗӳ o+fYr y5wT|)ow̫dDOM`6#y}lCG-x]\`\/gZiNj6/!+XeĊhkqX7ۢuL|}sǯoA\L~Oղ..B@ڎ\tx^ieV)pVmgy{e=cT|8VgV.g)OEq0oOrwwR|~Y;O ȼ |k0\.=_|*.N&&շL!P'ſOŇcMҬǸdzATZ퉇rj D=Je$ˉA^ jǟ"pNEuX#1]ڰ\,l sFK!7p&#E]Ng=m˦g¤81v;l|k'H y©6Op;j'nEI+8:t; lM=;*t`?"ȍFR{N=4N3(% m]Ϭ2_ΛM}=eS)rV2TmHLCg8{˞پ@a|w}t"ivKU=u/l2[1q]EVPsw}ݹz~i+(lВ X,=04rAx gAq(^Vgq3roZ_}}Q\__Y;dݜmynY߃\Mٔ7Ń6S|>7dCwyuu>.C2=e>(Qg!>7r$eR#ȿnUNwnxvF! B$qc Eq# %aPsxN9205ЎUgX JB_K# > stream xڵXK6Wh^ Eݜ- $9mEUV&p'`Ó#lU$a%xaڕB4Y61כ5aۏBmy Oltx36h$g*v p=niGOLɖM&-A]d_%n3?-l$o|ٚ<. <Ѻ~ Y'zd ±jcNzZk0k`G2M in +7vlЄvW8[i1; zdii@8]sS%;оVsbumWȢ㭲#kXGs/֨p<ōm:vFR]/`T-E Gap4,ek)zRa!:*֠oEnKR}v+a{鎢v9jg^s];dh`l ؈9KJY5.5oi4 ~ͦ-6I͹5~ N#GE#!,tƛA_~vH@ ?[Xg6IQs(0j4wId}'WC%yY!9nM4^C08Xe#d7+l#hQ$`|Ҁؽx}l^4zHLp'!c(:rq  YxX g(>ؘ84p7'ojn!tcjڶJn #̡shZ'a]v)M ~ThI0NGfI>*r (v>6ʚ-H- ,' ġ=)Eu]OYr Eq< TY@ii O|FѧM :65 Yzg,P/ Cg 5BYDV#v.{*G5#zN Itv(HPTUSp2mQ҅|'oJ2Qi$ĞV_R$LGJS&USGYx8翾z xj쥘C{'m)mܛ@(%<1ʃiGjwޱjv,RW]-{Ύ}7y6Lj:L7g|ZA47!)u|znǞs!w_?Ta԰탹k=^^{\f~*6dHr1w3xCH:m\޸P8?Dd!ԩ~2aqaLvNe~@v$:xHry)ˢ@<"Q;T}3y(cl)\Vi( .`!g?tam^`r3nbg:qqQ_|yr8-g,YsTQoQU"歮q* 㮧NRԽb 3o'~cP:3Z^8K0hK2{8OLer'}9|4M5dD}Cǣ.]0Ńrd;)4C-lp@W^NYjquoÏ-PW=b\,82U1C|J4z-BaG*Uww|͍bubX" ۹hL6t }ÎvO{ endstream endobj 198 0 obj << /Length 2307 /Filter /FlateDecode >> stream xڽXKsﯘ㨲C|39vٔ]rɕC6f HO7LjGŕ ht_?p߄ބ͛Ŧ ,67w<" 8ԛm]vIn7]f"Heı"L=îjJZ9(Mah;L8Zvb#>iTگY&nm%;vlk_vH'%=e˲ ͢NLSwvb{p!ٟ=A\DD aU[b ! F~dE(&,ГуEe rBE &Y YDQ}޵MӞ':2 OqFY,@/8Zqg ~Mrm~Ѯ1cqi.kԹjG ?mڝ0HyU4Dq5*QԷ*zU:XhvsO:4#N-˦9'H/:}X9>VZhh?% |kMkX5ĚD.<$R5rc]:ejP>HQ"=:ˋ N9ZJL朑RQ 5 pF(ԍ8Z235'h`-((C$,),ʂ=hiWeŰ̓>vtH]DM0ˌsiE˳!YcEm04D''@@MUj ᡟn:Q'/skޠ(N0Dqbx:p;4ƌ{6#$±fa1,st2md)/'$zafLLϠG;2 B7CxZGj4N :Χѧ;Ä3;Ij ,U8'ADFXl.p o!9|T5&/ YCrVhqIsiqrf5Kƭm.=pjt4Wm}`"EۯW l*¶Qtt_5.@DpՕ>cPv)кKg0W59wXXj3z-R9I@#1\Z26gj%Nڡl*tdTeMEMld h,T=Q"gOq-fM=tjZ{RS/gr.D]ƼtYt 1ge$(|H:rw61G|A&kdE$ *}/Bdrk%yY,oxI^XG:n Ew& "("]h_oǠGSD/lCllK#e,^[}=<ҷ+(b&of~\p{0Ҭ5kEWdTǍMuOn% JStWaeF@ cQx =YLyϖ+)KpDxp?Ykk[H/?kW. Yiұ!HƆ qmSc~y- F.~.B蘆Wmi8mQb Y$l@} Av ug~P(?`AD2ebKSϪcgeNV $zo 4GaF Ǽ0ȗMチ> stream xڍ=O0@ DϱP$`hc%v u`rrzgFw3jUU[$)X2%#xVM!@hfj6L-<9 1Wg; RM28G'8@^PV۞C QzA'1P10L[{߯Ӹwn3xk"Ktk+&ۍMhk$$,F~7Z51λ XF%9p8KkY^8l\PLU]2h~ͧS{h8B `J \E?)e51v endstream endobj 224 0 obj << /Length1 1676 /Length2 17028 /Length3 0 /Length 18046 /Filter /FlateDecode >> stream xڄtmuXmulۨضmwaǶm;N$_{s~ϽwQcԨߚs>̹(2"e:Ac;C1;[g:&zFn2։NDKFblm_1X25G' ;[g ;?DΟb9;WD;Gn9 jhhK&lghaf 0p0:F(cK nggfms=,@> =u(fhf?& !ӿBN& TEmllLl`FC3 [XTW 5}ƌ?`d0ѿN ӿ>Z⯰? >S?iog [giGӼ?svv?3}s~V=lh?9ӡ?9?Sio&_Q?ϟ[o6&&&F+vFvKi3k~N8{~唌FrTH_Xy8#1WF;0< }ΐ(牕-\\,R,[U$.EQ=1%"P&eպ?#ty235\з>s[8Lf[ٿ{2ߑdpN@# +zeǥs}ʡ%'vyK$XQ^o^ZPO4ޣץ6yuUlHS=D[ s6ā>}'=\4>gNI{;lY7^{mOv^SyU5p1P=-=RbNJ7swW-J@9y0U@J.-Zb$m^nؠV 3&fTIfЖ6PuDt[qW$@-m5ogܸkUn`kzEbBTX"Ԟ6D ["ʢ.>Ȯ>y1Q&k> csʇ7vby5v&ML c)3U/Ő գ56rYzoEP\Ѵ~!_"ن,;BϹMHJ͹s h "N k{wؼAPɢI}JݧTTךbd%Y̺W.'7{GR/9_ Zd&Rxr5Б\^.%޾&WCaMA ss+~M42P^BF.B!n:.;WM)fAYג>u'dWQқ-s)7<IPΝ,3wZ \"f$O#iPvd(9N*\L>TfZmT-̘iO#gbiLcsF-?G Oqf;ecTG ԎޔdFJҠ~ogC,؉A|ڞkr^:wx)${0.boMf'7"'Xx `#~>nIMe'ֱ[;V17C6< Y<-C?OeNJңBf/_IVe,ݞkmlQ|F_.gQڭa`)!|SӄDޞE*#~d'AU[lQqцޞ,d .!]g,/Q}h>EհkԀgh2u I'nvLG9DĊ4CBXٝU*dj4?P=*acyhd%O |> xާ^sP5-"K!,S)'JNtV\96&[ fp?NT cTΤ,xtFmi[1f;9`_-m%#}\@) s@~:;{p-x'NӞH ↌D$nV3Fީ$vU-wD={[{A(#TehkyG" |Tم,@MՄF8Wv'dcu1CZ[Fcء(`PRBھ[Fs=tў yr6裓5:SmGte`V!uA1t՝rER^B;BhlA>Nk.iwn'uj2u`UxxYnės3_I'hPpyK[Y)ߴҕ^f;; 5DwzG[&躃Cz7nE|7a/p!%]%nHL5/˅#fm;VB8U3ЭRʀVi4"۫t\ڏ.vBOoEKħ&w VY~f#>Q{M̊m?y ])l5]h&Ɔ,KQ_:!ۦl-Md$*xINJ=TJnGQޠN7@G!ƿfrJn{w+:zeO3sY}DI~+*"SxK;Eg9x UkR\sV+ͳqg)bix9r<2͉e`1BoXL˗4F 3.V79>1r{kMcE?b;18*#%&Տ0F^@_y q('̏T oOΦ"5~H $:,!f*:46RI338Hj_mpU;pP56[m~W4 |\ou_ ,Cӟ(!_Om(>=уP+;ދ_{hr{)#i@2L1$AVq$Rj-b-B jWٺ,TQ^UO!U0DNƝ440ɒ/i6wP"hTȓ6 ^Md\0#М4"/ ¤Ȋ: t$~lDec0Z6WJ&7%3 ;pr&R/4T-,~ #^"L@>f0z|kIel`ׇ%xte\ W2[H,F6[);yO"*A6΋/4ewT_Zhr3Ϯi޶_̤tcYOM}^ޛܛBsX DOy>" ^DV.җn{BV1UK "8mj(*6@GdK-!I4F{q{Jvejƒƾh :d,ٶ lYi fB^SKWs(~2Rs{{%Ha7QN~[ɴt"#Z_Ow+F_m6 S rtxUuV,Uo#fV&ie=Q9ٍ&B?X۫`09!1L:ݏ9 FVS-`g{auO o#SqޣZv>WRoũxCQbCWA!oY ewo-˚ j>u["Y9DIh>}Y/nc.ѷ\.G!'Qb‡F㣞) i[n+8YeY]0J.elUhQQ~0]s ώ&4}|)fOҋ|ր/︒5lV0uj۬H]Z#;lR} xXQ܂4*~eb&K,xv-k""YbZ ̺1\=i ,n&V UYC6H+!2[>cwhp$0ȉַ㪽9k-\Դi'./NS7& 9 e#d3i9r+9{N]KX^|j6.1Um9~.69G>\SpbI^bIG{\c=%e/榦R]r傒 Q2 G5#~@13ef$2/ƞ}nls5w2ni/N*bwJ]ks"8 MG<%]K|nrf'@2W)OFG.`\Il崿nzD Z1ly3Bp T3ZZ1Lv+4F, vY4^ѱ|6r.&MQ6(&3m_y3jlZ`,>?q[ʱ' \8=cƳn|cQ( `C8;sx( 5oRK3r0 ̹bal($  OTjBpl$OVx^y`6:>e2#Cq[Ju_SyrK7NOe?.udXX法4.}j+%|;3SYLpqqUsTC:MToh9GT57qBe -gP;Ҁ o>f0%TNԎMw` cUߨ]QX#ҎQ.~٘B̷+ȉ ܰbt݂T'%kO cI}*;H5.F?$F _u48Hi_]GJ8 ,Q*؂ΚK̀k[68 ѲK1EG+ 9 _,z^7}Y!EԖ؝dd`Kdr ЕEQGefLuߗ1]6-Mq!;|5wL9f:)*#dSf2FBm^vI ]:(`J eڋe[$sAJk,y(m>*J|`:W%cDM~8?*PegS;i{' DW5w޼ybk毎.zCB7fq/c= UfՈi| sTD;G+ kOT}C2\֪~{ft lγa/{T} zu#PDD`nn5x{H,v[$A.|0NNEw0|2}=z9я DEÃeugƳw뢸>9(bRl0$xӵ>)FƅCжz.&:t`@$vԫf8L=XjR+׌lz2|N{֦ ;bq3"o% wθMj`X0-A\foYdEr oq@ 0Lhؔ93H[7M.nW4zX<NzG2-o$hZ7_45*bQih7 4Ԏ|J&ϰDظ!( rBa|">"׿J$|Ȟ~g^K&.#v?= 캚2&[.7ŝxU AŶvYy׵.J}CD^. ;]\eQ$(Q2рt켰|VЍD7'߯I3阕 﫵vg=U np0wi6X 7H1)A\ﴥ(` tuv,^ [׽k%!\/j*'@v#erzӸB:1 1x!gf#o&BjulŚG˽3 uMSY]=j1It9Tؘ8$h`kI;0g-qZdkh u@V'JYiX*51ם $ǤUNn, wυJ!Br>yq|;bV|J q7TD_`&()PLUNGܶ,x-wiȏ6V1hI& }5W,= S!Xs1Mh[2{N,S8()חmNEbX)խMM~hDSQRu&Y#A!&JGkω ׊9 ;>.F.鼏: 7w[VƊ˴@F׮8BgYhw溕kIOv\\D f/ӆӧzD-|HRWLv18@]1l9()@UHMaR4Ei~O>$,]PwڿK:XkM9h8˺BǠNfaB",¶NWyADvHqM;.ӽtYH+i-E(]bE2>51c Zd,↶[gl飯qB 7U=@B Ja:MbX`ɆfI7Wn_Cz{ظ DZy$Z$j$O$&%wr\+yp4w`C KTן,NGui Miym&k2ߺaxK/ưܥT@hYW"l9\a? GJpؖVt&E<_ȀwR.րv~`{iMy(txJ] a' &S1P`A)v3.{#JH {#K;Px#Xn@Z #q_}P]~FU]K-|M&=b 1V>Fi% h9<ņ,IE~NƕlC2$Y*;m_%ANWJ!f݂07m$;{ ="xr؃!T:Qk~kiBX1h ^I]os(V fH .}nlR I(i3%o:bg"M{׶Oб̛ )<2}3+&\{Ez?jθ7 TW@HZ>O֫ &ۯ`-7^n-?_UH=w* e({V5C Y (/G۹%<W[Vx~!$$PlSI6>2'k Xg5NYkQ_wPu8[LxxcǏEl.dt`3Oܴ\ K^jc:+k"]:uu?cHw& ͠NtƊu6w;aWؐJ!%npAm޹jH"IcXj לּT+2?՜rU劢(HҴAalQm2/|I' L Mʨ_,,4`JCN= ~.fAQQZl?naBؖ_3B,eθōs͇x't8%}OʷK8Qb[k){B7; "*=B6NW,37Hr?=0CHRVgx :etp+EIvciJHM\{`IrQVlK PWXyNj:lxoLQ̞Y&TKqb_>y[,[lT:)5Oe1r%}Ik5:*=bV1 Օ=aea|r6,7FIo;馠+nFrn|'&0EL 5UaS_0-,2[^ vcZI jI_>@zqMvWa KZ/cDuy@*f_bk&:AD0u,c+aD* Eyۛ"bJx0uU^B]mMr*\Gfj$dK fiÊOQ֍R[ƃMab?.,M3WSoZ,젎0+=jҹWuXv_ꡤ.ɿ 6>NrȔLO2 'Q2uK_p0gEWruŎQ}xIN1 㜊ey ˋWaz@K߂ PZM5i7 r.Em{*mO?N̕}E<5!B PV2mxgdVg‹coP!@374bK[#}%eOx]A=AHe}ʞN^*Nʤ~!M޲AZ5I EۙM ?LqńK e}_ /*C CiZcJ\[{bI_tꈗsڂQ~,v|+=o'ŶM~[&s˒RJ"㬂LY\ ߭n$4,o;H@Wm)~$?tv*ړ&52~3Y:wuX7@HrӒ Agi٥.I Lg-)\ x2-Wݝq#}qAdžV:4 ڴ:b+NxN$i'*͆, L r_z6;Yn#p$KW#joFe~W`S:ku5.J|B&S4tޫu ^w>pB |(U6;_v!׳{wߞ2A<]s7Nܰ VN>߭lf:3 @JMq1Su[#q5oy莼P.JnX71IXńLVl}5T  XAVӛ\UrFo9ޕF`.߉701ַuPg<4}SA*3Lrpޯu5!MSnriK0Un">rFعE5^SJwKO cjɿrr}3=FqF'gVkU*FUAzy.6ycIX`@/)9"75e*#L7כ|}Z0Uj)J7; =."C ~6vLn گ`F0g:M}=y:˶dU6OVT0 <$_Kǡ [ڷ'%R{z|‚+\meUwD1u8*խ6m3)egZ Hi@a_|oژOHT y9lӂ.ђ)v]UF/(oms,ܥ@ǦH-癶AQB{Șs o2fD|_0C~JbKAI0s}.{W +Ŭyς!Qݔ@UN"FoNr1 g RzzUlѰIP78xgnS!ni^\`ά=Crox.JZnx4,ZI"`LDqK-z}q (AKL%Df\ BC3cV2G*-&ĖeqrY 1#)gC QDfDt}HgOm~#,:c<)2"+:c#C<9H+:MZbc`2O}~ZEْ[KExbDѝ!΁Tξ>ОsTA @t>Cr qr)6UHG~<,BޅW{4f 1I?OcuQ9~fj`7j.KyE/(f'f\0H<*Nv:|=_CK[{?%YW¥Po^8ϒH`(v5@$7:W_3#z~=|ӠgzxjxDl 79ɕÖj!&:JV(lz W )hU7٫5ƻ_&uTMI0*תRh&:&jp )Z0+/ȡfVO>3<6X-VWv)uKE9Sj@%" .;Ϲ[6\Y[v߳1f;dR.bm5,ϟG10!d{״_¤N~K&2o1B4˞,$V4ÖUR,v8Ă3 >d9i| 0|7 N^ <9-bcw"^I*؜7gLB.P$vE󔜚Lu]gT]+Z6pf_qzR=Bz7>ÏAo헚Vb>YNQ g5S_hExR&Tz!4~G*j~}x?·o6++>z~C2ɖHWR nϨرk9}+uՌQiF7Y(\໛C L uif6:D2nbu_{6Fy ^RƩD/ɺ~ff({"mIy(G!:XA hpI7ϧ"I*pMNzL߱OLKyx~/ω\)`i$-T&XW5#4ko"#sVZo$&!e}wKL҅lu'F8jqCc^.+Sw 'yZ$67[wҕwuڣ Pi&ؿ^'R7es^~ N8p"&ˌ\&cbkX šeB->+vIFUXP%ܧe&T~;Ϻ b&!fstE%'AAw+8פ"LVyDL\w^H챐:UCs=Kk̚+%ʻ$1A던>8-@ *B3)lgMkmxg#"^i=\,@ź7߳xwYɓYCOW{;R{}HF2CuyTt}g 9$+lfe',l ӡקnD{{|Jd=?8DkVzUd$z@]mp=B.@ c;R2 endstream endobj 226 0 obj << /Length1 1244 /Length2 4821 /Length3 0 /Length 5628 /Filter /FlateDecode >> stream xڅSTSF}AbADrIa  ahdHI"%) !-JHR +~sq.EU0(@ ` >>$e3E!1h\6XAK"}XC b\=]"|"8 >5 UԑH,қag{A)XQ`P@ B9 Fh""dӾW"# .nOpٟAN s.u;$ "h S* v? X`>·a(ܯT}qM } * @$dQiii@BJFH~IA% +]mn&<\ x{Է\զPpzdK %2!Kdϙ(͛Zzk%#UQDr!k~,&Fu)w w̏/ 7XݙdkwEw 1fJ$^:o+O^WCM۳Zhꬴ9r45)oH["~{U:A fQ37!#M L=Q$Y|m"^%d@ӧxⱾyrB0Y7qyљi@:jm?Ϡ/Qi'e!\-+6d\_ x+Ur&S~^mr:.(mL%TlUu"5Ehod!rvĦI}@)djZdgh}b~\͢c~ msy!aݹkxWGTݜoNo}VTv7++G+(gTB;D4'\6t@!Z]]ׂ9BHo^cb*XےI~'(+Y~} %eV{IjesϪv% ~ا:kѓJC$D ijut/x[EQ8Uudy4c3Yc,?4w];@cUj ?OF݃B}v5:`'"XKHJ 6Pm}:R|'XwE7O>Q˳s?> *#3뀵\NY%3Mبd-6w3Wq L\.7K}*m''6J01m^lW. 5"[Uyי bŸX}7F i`?E򅗚X)Vǜ'1YX_Ps5׬Glʏ7h.\D!B\^乭Y5+eTm_&5kD FJQ.af+"Usʫp&FʞA"PHj5ʛKI:][{ /coTi=;+9el`ZI$%[N1>_fZye5y>Uz`ql;#LmܻCG_&G\WW}ſǃ#kQF|SLfHTYh{*0P+Ts-497?VyK08,DG7(?tU2szk5WCE}brh$Fz)BOF^gg`55m#6Ȼ]1`ron,Nƒ׎Q/G3}#igHNz.ɑ\mƂXwwP)9 =^ty{A$bMQyr؀ $'6o#'n'#˛sYf!@ރ Q\9ٱSdO{f:b4}-dOhόqŬ6xw)Ϗ6{U3[Z}Qж9;]>gM(v+=6ļX)3|>":pe 57xKg@S=ԭ/ll~G^6AdJN8>s{rnJȅ ܱ"[#lzr|\Fs~P=J3d8S2b5ZX~g#aERR( &|BT܄a-\[tNwK3 4Z;;A٢t}ģ s|R)g71LēcSKq;nj}4jN||g3/{qߓg_xwh'l?ԠIMf˷m df|{{gf 1;n-앲T.UE7"]qjSo>%[rXFg&˖ОC힨o%.U3|f2 d"_m+2zhw9v5)##`]8m9m -kW'~+F0Ez_Ȳ4zLOcg9F #Mj`ޢZtP&>;:l61&D+uWEG}f|5҄prz-pNoeh1QYRc}E'Ie%8:-\%`s+o>K%_ع?dc\}Џ4{O9'Vτ\b+Kbm؇xmv\͏"|~|2`nS/Z/$iyMht3juL 36!o4L\ׄDA'ݚnp SO2\ȹk<<C=FitⒾ/zWk}vJi}pPCӕ69NHŃ)+T/.3VP.E[ |ܙ1p]r+%C ȋtxԣ(HgcQ|,ųcFN)BMPao VD`- Ҟ7CƓzG_n:ӕnM7s6\ĪZlBnCfn߄#w~Q~&[|277,Oɾ(Nh,gKY /2r7nM͋Iξ4қ >U0xuWޫ#@`*j@>8z12$YXאָ3=>&op굅zqXNXcG $tڼ &SW4^Q2~q1Et$>Yxa H/'ab$5"s[Oz섩r/ZGCCN.-p:KjhZr^=j4,7I'jPO*rJ:7|13Nl*b^YLksͲy&vvRDߩ0o˅.ޛ)St%F.C~>,!GaSPi6^>ϖW`џz:2uɼ?#Z_A7t1>"E (.\y nnF:en=4_۵ n4Wi$L37rһ.d&eNKj }6eX Q6Pm~)Еz/ [}=Gخ[#㓜 > stream xڍeP]֮qww'kpw@#4@܃Cp 5w?3LޙS]^׽ֳw=?BUY (vefga8`f =ΆDC r_H4@gX_@S׷)S׷g@`g`pY`mjH۽t65z!H:8z9]R ++`/ ?1dIgǷ mςDohK!lzkWWGVV7_&K0Е[y` I{{  `2w@`$ֿRiz9 ?Y 0`caccc/6zSm+!'o? O3;;? `gVUST'\l 7q ?3);́ ٸ߾ߓ2nvvLX_jR|MAv^:>RoI 'ɹځ?=Ȁ< Wsk Z`  Tup%_6Mk-a؀`@l`[͍`lqps|T,`׷Dk\<VIV?`CV/UXe'UT7ũ7O?`Coq:&72CoMo6sk{?loeX F-A7[ ÷olo oac Jw# 2?XGSg hG:h68Ak,᛬f)o_>@wVޒrҼmKnpp[[os9ޢ[z?BCNvց@O9✃`MMH]8wCW$i=\[aEh>w]O5뜴03ҭ[,LJ#7 ѪҶ5&E6l4yQIve:{!Z/Aͦ?RQc6EHPF2%:qy‚A=[3\ZQ{ݬ#:?Yx^ZޖQ/ AfhaOgV@3fwMFe[KCe\uE ǟ9;iYPgo* 1}&c1ʣBτTwS"D?9H"*gAnٽp=M LL6/f6܏֓\:ߍtL~l$fn }> nËDiϪ+7{,Z}?zu|g H',DB%'3`;ib]9#-,!e8ej}0Ee91DmZVOڷ7*@&c|{ q""1dELՆPt%>|#},KB=ћw~?d?EmП~#}- IfhjjWҜ4DG A޼'SYHJej u2eMh lo> 7S?)>)qJaH?OX1ĞcJF-I*|^_ӕr. D4Ij[$'ݪ%jDWH?O#1>WvˣipY~tXkBcp0Z~/H8j b>3AlZϞ4Ѥup-K=i\Q :P;B;3ӈ$GiXy{c,w{ zX@2V͔ xեU c[z%IG("AUQ*nӇRט/bOsygH}E =ߗyǮ kL߮9 z`ī+8"IC3/ƃ< &H)_ؗ$DG,kGXt|_<7|WqM`}A?-yIjw6XP#L|b}BeД0,۟w#+x }Ic7 nak2I(]O'8>5Eu2s@ \a w*E|କZݺm֡ad(7sYoWϗeQwRL& w7hJ̘8f-/ hOd ˸ZsvChf_26Z%ﳯ!F̎: ,Wx'r 0&amlru2kIfƄPi!bQ c y*{ ~ZiGq=Ą<$K97и^1M~NcD~yF1%##3>D(ALJ{lzG#ؓc%YSVq\R^Fs AaѦ7_A|\8eqyT/tDSrJU^ !&w/8Y5Pq|/%y(2rRn_k9DֺH5+]5؅fEP &KAtu U[Sk<XnZH92'+GGB"']1`0[WJ:I!bhJ6*%ِJ_lÁw~3zRoSL/+d=juYmKxZfvߚ|ox!y#"~#GFXAr^YmD^7MlN R+o\8cm|zHmi5%wd4_;{BէB$/SҏD M\kوki/C6uπԖaF0|֔W^5N'5g>#=.de"LcƖO͈Hږ`aKGy]@vN >NeJR4%"\<.PkJlw"eP*9$YjNE?#|~ܜ56#!^]­_U@r$@!O̟Ә1#`p; qL- PG @F5|MzlB߻\92yK!aHO<j-n}2 -Vz](p$XqbS-K JF=*OXl^?5Kޫ{hP̫]#/h$~L~=Q9ڼu:q: |BVm+  e帓@U< , ̼߫&|ֳ z̚zԤ2:>~==[Ԡ;*hrrVA^svkpv1,+ig-9Q!7](;4f3b01,Kl/~F.C{ VGY񂕍O YS~b.GrحLEI̘A<[޸sW߼{ǸGuBo].I0pMXQPRD|srث =K=iH.,"arR]k#P:Y{cĮKr<}pNLqp:ؠD1oGٓILdd>]6KβL˥,`7|c4n`6mԽU=7w:s]]‰9T?M2?AWn7J2=v$80돀]~o:2F k|X'4Gu^H8x ZZa,FY]9I|OB1YT&T>T+È4{cږږ η΃S +RnFF%6#zMd]B.?ˉ?m}F05?d^8Bͪɨ8>Kk<9GXퟛ,CM;/()^p-&*<`([%zTHBn.2t$TVkDDhō H_t .z]Fe)#!*ChqI]4$gkB:o3i-F-bx$|# hzO{ƶ%KΫEy ZNP♢O'ذ+9 QCдِڀ|^4][]ۤn:c3G=]vvLO$83jLktbsYRD;2jwIZl#>yݹ,S/uk6f5]agDO<xKnslNjuvb՟qd>%=3AݏbH&~бcEjg4/1""E9 `DO|\13ِ?S +~|5:+8#ޅpM&5^e63P%ucDžn#;\ʗF6f[k&k^N1c@ll%Jѹ?CȺ9Һ0N i:쩆 y%R4inZ#';MQRCW6SfG k-hϧuwMY*1$SW6+ /\5 l7-zv8ɐ|DדpmЂ[ifmmd7"1r# ϩ}hȳ]d; g[p(^oC]T{ՒGR\ens!<9Mma>!KOw#ʽZiT!e-Եxn(6,ڝW ufsDq;Q/(1])mvH"\#>KmzBQ4$?+FkKo`|7q_S=1ό\Mt4[(5m.JJIRL>qS{aP*lHQ#joQ?!_fTL.neBLۤYQNoUeBG@η:q? t+28(žfLJcR s+Mٞ&2%R' ܆x5ap}L֐:揦WW@G>9jF0Q w^2k`b{Z߯0W4xm"u^p}:m5zPm.~ϥsl=9J(|B̑爛E8] ŧ.wAҕCӅ >a̮0Mz|$M'2Mq#-el+ 첤 NnwqA@,ib ɝX;K<#nC(BG 1*n!9^QgTl֕M$]Bj͝SPσ2hwY/@c=, +(qI8B+_~U m..ɪTE#XȖfDi[>}@&! u{M f7 SO2wlj1CBWrA3/k ?~@GxbUT& [Ѹ{=

d::z9@͓Aa0操JD$&{K5Fm1'i)]cba riߋ wo(޼~yb> l X/9TU6T]4V&AwS|`Ƶ_Hes Ob[4Bֆ"H{O f a_κ^.nh(hsKV拻^2J :G=~0PpM@D%xO1_~?m#g>g-uOsOl/vl˩:VaI"ǯt9L)efB% WdHʌ4y)R5󵝤/%T*x>qzVQ>ful 2A(,j%Ñ_L j;~'9[`xIU跲z]E$MS-Am"S1&{s G 8QS(p;N=uLefk@*k3P%!\ *3@a'J1a &JkbLީzidOgTh%/z4 gq>c25le0|_[u{``U (zb+Rdy 77 1?N*[pl5w,M=1d q渷Ge ^w!2]4GNxyC!T7==\`U]a<ɔ' 94y}mQ_3O6ClȪêc; BGjm}[YZ}P32tBrk)'*L NL: %ԹFfb΂qMa0rfX|BHґ q+?PEs#Z0yÕe+G]T@4 7=&S}iGg@}c#z}.`M~$~\ >yn(ON@-]nSNR"fC{.s/?RTS (I;'ҕ̚.ɭ{i/ 3% R*IZ0\qJvKY\K3Ɛҡ]&NI#0w6 &VPvk\5[,N{7{)M|!ڲaǥchjm<DVsuҖ,jgvG/ႛɆZ3-{GIt XQx*b ,/'_4NW_ΆX?bSLE@myQ p&9QiwYi PLq-6d\ANz({InTBPeT;C}mw.`Z2r#]sTI)q9'Jxp )(CU ×U/x_PٳN4 y_/54:a;YEO,b^ZmDY϶O@vjRuw mgGi)cGp$J$+ts;y'֙W6Sg*P/l-k:-*a&LؓܘuY",G੸ͪYuRֽِ4nye ki *po<" %I oLG \~ s>wd9䜿tӸ"*{qA%CV{ZWlY|[r^[3ם. xگ'DG-;88qV$";DLpk`Dr/d>YKk!{/g\~IV9]%rI!#86B&JyS}5mP]c}zg/y[EqX6`εC=|pVt"cgSR:Zo=e\P]_ގNr9_n7g|w$A%&S&o:*EPKȞM=7;G];^Og9,9#N}6;A+t$u, Cs^2]UZ/b3. ye"ȹSC@R'1']۟ :]9lEX? ]ZW[Wn6~N۫sILLv'M.Nxp&_\QF(ܘw87$/a!>qD n{ײ ? > :;Qg~r[X!"SzYWVBuXg6*GSKN<注|7zrWtȾS,, "3<^:!^Na xJϩw|C-|\̲0,6K:]xIh—"NZ;aӺ5/vV+>`HRX Xr|ֆ2q=]{&|92B*lR>u{(1C|A~Φl0C'! |/"#IS]c4,Q^mĜҩ3rs ^k4!98Q|5_>π `_~{sΰˊBO M\"-yDhe;Bkdk3^i6A sdNukt5H1֢F ٣)DG+ Ł?G Tsg0쎕A8Ǒ=m~ՍplݬGR`(f`V=<8u7)9d-s;*+)a!KRZB"Ng\B$okɀ1$8c3/Zrb(P duL\{ $<)A{tOWf;Yp9Vp҉8I f7 h]YœqG`eh .قBn`4Kr^dFGZ &TMp lts82jssfq(8@~<!e~IrAO/% l ދ5fRf9rA#~at8dB!̕?\JpX\*~Ίvh]2!hϷ>)d\ݧ5nI씠;ykBj+x0 t3 #|P ub48+ixUs]5Z̉[曶D_o+c1v\f߂ݜbv)Sȥ'2D@&Д`׮7G&Acjw{:zsPZrf*!8E* -n紨aw soЀ qjFV"(˳i!Ϟ(B_E.^K)Q/TPXFG-gQɸ*aGٰ+Qh)|A3,L/y_?cK]ܨ*sgW8 )ٙmQbVBkl`\Ky(KS/4Ñ˵ڒmfDT bìfMAo(_|ZW_3}Ҍͷu|/zꨒ<GtOO*:HXh<7Y>㐊aV!ZF74B; kCY5tB:xyl;}D;r I|uXCOx ~C1F!PS*2wb<זUEQe/´D2"^X[\/K]e9?EoN|g\r+ ?#_lzN ]lE9#DOeVAl)f٤gA];'ciR@ZΟf6 t<]Μp7JB0#/s!<WJ YtQ&K.yO1 v=b*Ne1$aě. endstream endobj 230 0 obj << /Length1 1406 /Length2 6013 /Length3 0 /Length 6966 /Filter /FlateDecode >> stream xڍtTT64(ARrfnf`f|AEBPJFZIAR=5kϝu׵ MQ0  z`@DDLHDDe "` .sG!e#@ b65(B^,%eR""߁(,;zB6 ÀTQ~hW׉H Jah An0w|G'(0A9aXwb=d}||!UOcc9?PwodB . m7A`}h7 N0$t|sDK0! UOBpd#]8@tXtE`P|7:~ @(x'4?! ,:YCb1SaN ]$G:!l{zM\aX@BDDDJF y0_'7M<`f<  `^tgp‘WǛa.ᾀ{`@_oxz9گ1D o򩨠|Aq@PTB$%e5B..(@7$> eoۈH8~xF Pw8O^X,Pxq ;[z0g{P<}aΆpo|y 3Da??6 ~a . ?[#P?'*! @hzI Em@XS< ܨ$yz7//?z9yxb")9GPNrw*"_)_\5ȵdO0`u|#{}G-Wy&Nj+/Eץmq=Q#KFe:'Ofm^q8f3r`YHoRoRR?xΦ Z='hTtxg;@e5Ua4 c̷V>)Bep8dukw[b# zbJya5=À>[.vƲEea߼c Oρ! +К;vW_hxخf;5)"KdӢ*0H"4R>7k<[ {7%=*;7D5 ??w|x{;ML!#7']# XP8Nx{^HЏM7y^b['gFhiw=;G2B%fFqUa]*m2ΫEE*vt_PG%>1*>JE8Y MC9p+ SovJ [ M/N|pZj\ʕC *7.5*ky<3#)Yw3jnbl*fh#n4YrΪ)Ƙ}%_>|쓯FXEx,(CuS !|]"-:Rő,vU$~31Sa-⡚;WMY&tqBU@#n "I,3ooZ'\ dՇ"0I g`yHo19CLVHa iڹ|꣱nْ/UU^+v39(Jѓd_~vWP^<̲{ P`BN2&"㩙*ESJMlI`о#Y+ͬVM]ݲ7uVW[N:⮉̲i=)Ie|8bs yv?cu@0Дnf:*Y VI+:t,>aJB1x%eGI|ZE{ E̻YŶ\N|>|v}-V,\x$OcrgjMz^߄G| Q_UiOv]O Qk`s]*ʿo$7[87:CJ t|,jµZn(VsT7!$ U+cΤ]~&fEA.RdLJPpmUYaW[]<ɋ= Z'nǕ#'`b]oawM]z_۔-JJܧDƟ\ytR[Nl^k&P]4G\DEWxYG)ASRΝ=Dȕ|h"Q7fy !I #xB!` Dӌ >=cNj[[= -.k$;*hV(]3WIPaZ1K0e5 g yeLM_CX$5f 6^=޺ơc½iHpjϸS\F"$ U;:dKky{G|B<^:Z#_ nz.1=?y9f]kQIw+k?# XgOc^%sMD};¼M}5F7fiv4v"9~)<_&jy ݴzij 53T_ByY/#i6S^B^ ǻ r!ݕ\ T}l/q=.&j 0Y=)ojj 0;,QIicBh85V%6,YA4A]8WكrM_Rac^/>; L.z2{!VEΣv1酌|FCnsm\tF)}|acUx'.c@LPfTfv]W~]T{nht%!4]i8:3~ Dz(!R3 (RRBƖ.rZ yxf,:ˡxfd6]K'r#Wh8TK,~ִ,&9m8I<DUNw0ěo\y \*XKh`kdٌ9el%icJUL_[ر@|_gZeVH,09I{A} ew"s؃fnq[0vG,k9I4g_P`JBƭ)!ЩW#ZH),`/ R S+^tM ΢Hw`}տQ=- k{.@qݐ_xj2OwV|Ddɝ*~!yI M l`^k߅(5,~rbݾz_]fS>\(L*Yq \b0; :ٯj#ɮv+@󜴻ћ8芾y+aS7@p$[7ߖZiמ~S5]$t:T"xxnd*fi݄M,]e}W>Qm|qzr2|G@tnKA![o.^J[BFc<A޼p x7{8 6A[: CeWCwb;n&Ӎ\?v&" A?Ҍ`k/tAW%${ MoWOt|u\\RԶ%Q@iѝv0TER |yi,e)/jQ¢SG?hY~Ov- ?xfԫ]B_?7rԞ44aZFʼzq$ qUE1jI'o,qJzW\3$cs񾗛+yZB #+b9;B n)nGb.?[SR'o氨p><3ln\M{8q]%eKUtlCir* )ѓ䇆Arc9to%fW_۬\;=J!fFL.FPiG5$yn~'HQF6]6YGIv%a9,h&_W$ |[ϚlCGWWr!rW xh6FZ;CٚMe7 [ +L,E,FH]j!jn BcML.F"}Ncnר~/; "7okdz38;, Om'6 LꌎP4*EnÖ2p"mn[aM- *1:-1 o^ =ق|1ҔN3}J]ib?y9߹_[6Evɳ+m(=cna $$۩|&11$(zjFެR½IE'}r ) ׄ,֑׮_ -II&y+nr}HWb,D곣KZЏ唝T;DŽ6;=:n2N[,*4xۦ^Q4jf(cݰZG4H̹??Q{KMC"nk= 4wBڈXD!lӵD5\.8dYy jҶuEou% 'z mpX˔ia%U}b仕7mCo@] ~/O`G͜Ydչ8Ig>^3|uN뭥>#{VO4U3)$b>RQ 9 V{$wb)wJjދŪ~~ ZtsvH*̚.*wPE 밿 UxDXh,B?ѩmX02 |@K-k^Hf:rl{޵m:3aEgk ӕʣdiC:YIbD]ʡ~\|5K6 endstream endobj 232 0 obj << /Length1 1428 /Length2 6093 /Length3 0 /Length 7062 /Filter /FlateDecode >> stream xڍxT}?%%)4@Zc6CKC@.)QVUwz{?s?9{vؘu eJ @@( BQ0zB6c'K')ڡЎZ8@  @" Q  (yCZu$dS@yBQ:?8\(p P7tE `C!(|BK۹!N\(AB{л@o]M -V5zGNh"](  "_: /zoY#~Ώ$ w~81 E_c_@=z@7E^hovO@|!`X2EDUzOl`0}i&^ʬC-XReB I_W( Mc Z)ѬM)z 8i& ב}B;? wn 2L:T\Ac3fuԨ%YOl/C5Kx~9߿:)\0:LCފ`PHf)ub_Ŷ]>W<ԙ2,줭z['xū! UзzBogU-5֙>Ub4sسSkQ^qi%/8\4mBn H*C &6ᙼ.} -6˺}^gjS4nѾc'd܃V57J"ED WRA\~ang4Ki!F6Dܣ92 O ֈ? k{ ^>T;L"kؼu籀 Fam6:A2 zWl6XtaPQ EEecυr1ِMg C/92v|U]S؏H Dª[;QY iv{;}%Y\J> umC^pc)R\hVxQq"b08?c LF-U8o*):ԇإab߽u}0y'm|ceAՎc`4,i~TWXFpFvm{%B5#tw>GoM`'⛉6~RIQN{wlO*Mr,}gsF/eSA<0b++@YJ'~<"q:_1&C^aTk_Ѫ-j ˹ej#KpɌq#FjHHOfu]EGޯ,ڿ/1i䨆Gyˑll%;ew٨\K@f=͝{!BԛdԊ.B&[*l},k(+oh"}e#$P!*q/ zښ\í“ o/  ~6Zഢ415bH;Q-`Hx}Pzz+֛nQ|l̸Z'v,a֋ۧ'VbVd;{D+ k\fGvħX5שB X$v31 b OrDW+99I S],3V|!A13C#sr\Fd5%dvOˮW晻C[KD~Tͪ~#4#Pı~U<{@R݆ R}]֏?pt'*_-uko!z-!@7`KXd5@&˳i2VM\jwg-\x<+`3F<c:JAH SJ pȁKWmfGKw3\W8OY .o":1'I`nሹׇh;(k#P%f'8q ]2v@j)ZдiEE$^aU3H^tzέv/kq*500 G:6GRUX8Ej8{3> klY7lUdzGutGknTnx=?:RVznaR09UL*s,q}Mx ůH$Lc2,m7޹#64[*07!mc:G(Mi祗: cVCP)Q GYCSj.uFG.EW<_`̱B/[tnfkCI|hh<,/%+*iN1s\i=(E% j9OpYS/<;h 4 >{ʍ.n؊!?KmrgsV(}ˋDQ<a@~]drĠ4nB'wG]FDR?g5g-ѓ (Wэ3QqX,>"gZ^GO![ n'ԣM ?mfC7(zςYŕ;][wܪ!,U4|Vޡ\EnScLk/Wg41F$O=u~CPsʻ`0X(rugIEW޶'; TaYHQ?T>y{<޻剜tp}CnJu+G{LcU;>bˏsmݲjnYI2vˀ|Qd5VPݽz"|ʭ~W^vx݃eCPM10dmrjV\HCZ ?4\7ӆ%$ͳWp['2 p\e1H7[GMd]0\œ&}(؏0h/Tܝ٦\GvJ[$X/]OLՋeIi_EbvÉ<ٛqJ,q>pBl]a<:U#NRh*yDMLy4@)rO2z9?+3-*ߕՕA%1ر[YIw'YL0izsbq+(O1Oy(ψ#OPY즑/p7d*:>Et 7Ս#CL !|L WؔY{QF}:[Utd]z@vo|5OͼJk-P3ot4~c}!uCb̾J6d~[+H6g@RzOnz]BerZp$qq`΅Su#߆)a[^im-b!oKm!mMsdW@ cJ1ߓ"Y FW,QQ<]f=Q `5g>ԁ.WION35xO;U%?]7Se5ot[Ґ>eUx|bL+~7~WwMY3oxH>bHEcI׹1Xɢ Gmf?!#ùPLoe%Ђ:G{V }\0!7]N^BOBN{B4VLVd*NJH%fJ$˾e!y+B) ܔ"_w]MRٰ$Iu}ad<TR2$xEP͢Ct7n1:ʨI)X^D8 IȢr~ɜAqf8P(6ko8ċ ZĻ?=􅬠s1ԁ֛VY&;^sҀQeԀ.I-K+4'˺$t*ӄrj wb ,}CȔr6,ORO`t[@fl}3&#١U\q/^~;Ù!C}_UT~C zяJ6=bTY7nxԼ%mL2(P$ڶcfPe+ljLRȥ*?٧ 98BD;\KaQWʵiBTS-1xk|'ϐuHߣRՂ[K&oLSGb8I"Thz磽V%z#o3cXcޞC4)"cȟ窂d\rx} d^lJzy:5|_@NR{7A2&R׻L1zg>N)]77y,U< l5yK[c=+\Zeqe / edGcQBvV_VP 6{f+ARx'wϳ?轠=;7)t$y`>fԾ[syIǻ 1%Һ6P"1Kk,8&=Y|Bګg4\|&~p۩ 8ڌzEԁt3ꜦrQ5 |ub+;$6{ESܒWέm{1w j mF'uqՋsb̑/EQac)LM:%\95oy/[,c?W}q^ ְx|d%K|7Nk#༼+zK~U%uʞRW ϗ#U~Uoe7xd6-`9Q.i\4m^~:?2@h_HK˲# &b7p?>);× _F,zr3{P`}8:|7+\%R(4.Y |(BKH lbـ7k RV˚L<Z]}F"& @8AW endstream endobj 234 0 obj << /Length1 2369 /Length2 16372 /Length3 0 /Length 17768 /Filter /FlateDecode >> stream xڌP [qw(ww]kqww(Nq;špXk9$-s&dʪ"v@I;[gFV&>+ R l RBh&7r~3TȺXX\||,,69č\A&- RdnvhLh Dl #[D#k ?4|nnnLF6NLv悴 7@ttJhd'5&J? U;3g7#G M` 2:ؚoTeJ@ǀOqLog#;{#[9 d (I39;3lM24v{7r5Y@R-s2q;;19ʑ/2KؚmO4y?͵s/2ٚ=-(#͛ daaag@w PdK=-  d 8;}T/B`eL@s-o71? w.XzMmLl=~bfq1 qYERW)*jb08ٹ\\e7TOlؚx[?sAEih~ ':7"Ik41ـ=xfP{k :+MA.6W+l!"$ r*M,d TsuYYXmLfm(akbgqr<X拍@Gdkx`fWK8"bۤFf7Y7b0F\fS7zT7N߈ũ/}487c#+'k#'lo!;f9gP%a ?[uLEoY5$66̦BY[9a7}[rZo7 3+*qUhś | ?[].Mf!Q=VP%h[[~W-C{k?\$2[9B@?*fvE.ַ(~cvpѺĝpxp3|wpoL@?7C/ ML[!tcܝLeZvpyDM pIE[ݑ^!uR֚cn4TH1</o+.Y\|{~) ˾1ƨGQg83a\bL#İzl}z\PcsƧ#=H]*)Xfe ";ӕev\icCU5?FYģ7ssWj.7 w7UpUZ>;>5ۆG^m]Ct]`QJQg9ub?1X.q悂[YM9Sɡ_f C;"r4o\'G͍:qH$T%-!;`aLw*6 eyOk#tŒR4"o"9Wvuj  q%& u&rcd{9n$Y[5+VfR>^UK ɕGL*6wV ܔm%,}:3ۣ1>\]V3I%?{AѰ:-D3~ofɘܕ1i҆5۽AؑYY:wy=qUd&]̊8{3/no.ìG՝SL*"P#_ m2o V4WqֆH/~HgէţIr q*<))D2-=J ժ~S>kr@[Fbѥ P8QHUsi.p鴹y d7펾,v]o#+_3,"3^薉!(L #)!H!|h䁹JgKpa1 LSzs*229'~6YrP_Sp1igԘ W%kZX%5 #}4PJfJʺ-r 5${c5wg`.if.h6i3g@{6upge'v<̂ A+Rq~XfdGs-ߧf yGQ GEO%f']yOKR%j1=U`5 vdɝd|lLk)TPOʙNQ +uR\e( ׌djDVp{εea\Qϵ/3LpH Pr]~9׿SQ(+2Zt^hHbuHs-_1&d؋T>qФym?j(Ud>dye۲c ! X=MR,5M#15,2`zĦ"W* 0^ΦżV ?I&>;mœ'@e*ubtdͿm ;}K4t  湵%BFSnZ"ʔJG4wL|tחkv.!@*fmٻ-U(a>QzVC4:! c;MwK0bnKH:ɍϫܨs~piv#I3A\~a-V°["b0'sS4uEp2XڒdOLAOp^}w[VA'ijvb>M:_q{u^y%r椪\9xW7 :' |QܷcUC3xI+.\Eͤ%4?1t[Y5x?3[zSCQ62GqAnQ[o +̶Yu:m5:}Hs}dUc4Uu=C fec$;stNcw h^pZæ{.Pܾ $vvwYnġZh5r /#j!r ]{^QI襞% ڔG$HK`.O8a x{w *}"d#XؕpȬG`xg!73x|Б8g]I*Ӓ2UjV pL4|=DL)]eׂ8~ +^'L3쪚BZn+V~M-O;lp;*ʒ6DM]ʕETJ X٣O;*kDіݧ&ل-ָ?fcNVGS~X| øxC ygIlc}G5"oyJ*lpgL1{@yz0:N#u>bpn,\/vիfPzz7ΚX)-!MxV#5GQ20lPIԥ =+ep,3dn´ 7ZK1 tMYݞ{b¡)_B s[6l\B'|%Ԍt[|?GjןrN7]l څʦ|nԡy> 6U7j_ZK JBG?Cqmɫ(:c1ʨCx\ɖ{y @b.=K+ l'4sԏ zdJUPp".g=]dpjhP0+05>8jyjF9Sfs9Ems/ZEYhEP6JwLƗx*}+MQ]T5#ݷV<]5ƴ +łpp8P GIJ^˦O`uv>% "T~۶ee-Z<iR.*D1Gh>nZR|aW/4Ruʇ0rs=ڏ!c ͉XBfM$)+>-~?gRoӫo|sy%;?/&\SA;p`ğCx\@&{N?dLt{)ĆugH@ ow`O ؽE=%9n5aTGSei}_(3uЕ.c稸m ITr~"?_%uAgy pA֍@Vk6%ZB-Á3؛3!S77OH@NA֜35!eD}W}| I+8%y 8ōC븂QQ&U[rd<GV nHp]]䚂U&Xtˈۯ $ MrCMd(6R-1,$Ez F$U'Q9+eAC)J5w%;،ݎ4W `%Ga8.U\nk~(7JaWL:?*c:SƤX@7Q'ݹ9~2"V 2/82g`a21dyϨdb!C?m4еӗTbJjښ*Lh+C6V}4WԱ[ATS,7wTWpyx"!-"ujDBI25g(\ur Y<Oì/^hLȑkg^9X],* L 6IaɾGM9CL$#LWSC]t] wC]E r)F^vr2{3v̈́nW{cU:/ʩKQUd4ȧbt?n4|< %YP]BㆪN K/9J <[v^귕`T~Ja ] 0i Oc;JW )1\{*nP<44VR ?f;7m \nU LcYfɠmbn L[O#H`C 0FxWKJB&ߋ ˀQkItZ0ilR@D0* [6.hrڏMP\O%z\ AK= S= .@XVy(_/?F@:zθx?cfRț\}s2]!arAMH+l6vÆ*J^s5OTTW,K0Z㱆{df6 $ T&/xE>M65軵(ӑf /OM8 ޓe~ݱ>?*-?YF ӿbM* 9qe]~˶CbX]GƯ(O2FHP잉 ZxlYI @K YŌOslm1ơ7Z{?ܸ$3 &rlJ_ڏ=Q_1 }x6MyУG5+ mg$Ec*޶y,xBcdaIP$', ETZr?hr k=֐~^=:,B"UpA 2Uy9]cK[1*F mک E0Tl\ZXb=R7JS|aAlc}&[L#dWs(B BkQ(nS{?IF{C+t7;(.ER exyQ0~Yd!d_Z(KF'w!AT5cr4 Nߩױ.2d*0qZ: Jz9EgN u@z=qƅa͈o9{t j[.8/PX.d<$NL0Fcm(BkC[PF0b"?Q (I]_DdOe#2X{f*p˿/ؚ:͂kd GuOh%Il)K]MF Bp.*dp6Gf[[ٔ`\W{|5pTUMHDѣa~TJm?xOHVBQϯ骵 |6(QDD7Hw6(rl\tl OgkJ_L͓WkȏbLUCHEќ Ԓ$2p9v *ҷ8`|EY>Vͫx CdV9g$_,mO/z(9n>D pGO;` ʯ3&~\P8.A4=D6L5QY'ij M!-Lʒ&h-`8Щlr(>3A"s%SDzǯ={\2GG[ǝAI_neH- M-~ZVcq5qܻ (Zc?U7l'>C {*{qsy>y W,`Okʕ=|m=FBk v 5dIMivieFyZ#xqO a6s{iV"on׀gx$(/t -$TAqf& AC .9 g G|hqZ^ )ZG bK 0IJ*-XB^v¢Ib@K(:3xSWkp|F?|m񒬎T;8 䳋r3 x(kIZw):~-r%:tS^E)EMĢtԛ a*R Z3ϷXqHI/#e]Z9Y^pɈqמּoay1u'8߾IL3,u[vi{nPME2OMp[pyzp&~oDJ5YAzCՍo~)ٗmLI"$DCD<ٌKy{,^2)ϕa2Oh⺶xuKJՠFpwc)+vi=DÜ_1]LCCY??!|Pg(d!yrXcLVǏ|THfkiӋg qAc2ɍz3opV⻺Q͚*4voȮ$PCoZjZœ,c&e릂Zuq!`.0%Q8\q0&hŞn7x< U[tZ?j"}A\wX[ TWJm"_Gfe &'zK̀=_NYCP<95iyX<c⺣Nvv="0o9b)\4k2~Y0gHhvc2}Cr}EeԢr>ёD5>ϩljR6dncR$s =QPZG Y?#L<9ܟf-?s4F{^tav; ͒Oڂ6 wɃjXzɰqj_>OUPW,)yxBA04]ކ9>A9@iE2kr Wd*p5k?!N`%nll*~im?_HC_4==Cz#p/QKjt;tLO{.<Õ)1u3sMW]MgLg$iM^r]hlWK:FMAN lTݴ lA|?j!P  ziⳡ(P5}|4d rZEpUe]u\yTa@+Ks][<[> H7B_] iZ ̮T#ڞKc Z'E푉5z!@&5ۊB[itN~ Mw 2C^q0хp2ؐ 悂e!YHu:7z( a4ϾRtgTU+Tٯ'"k4reU5'qąZ&E= `}螦_߆2slJCNSlR"N n~ߟ>QxS CpX9j`?o<Ǹ2Ps]qcO1k&ѵC3BJTDfҀ}Y2]UTP ϜfX'f cWz%aeG,ϜKJUa9 {{ 67]CK3Wvzɸ2:IHc}K횗i/ώWՀ]9HX1E9OY3S(I k[&؁wK{iu^/i5#Vw8rK'͇O&C=y/Mbgkln;X̓ۖ|81~s|D<`=;);J߯z. /Pu=h+ñTpZH]l5a4 %v=r娂 Ƙ:$)D_3!V+@U0GP֩T٘a*W{Re]S/z/^л%{`&^CH 4Bfe,{-ۡφvG[HrO], 7~q(-e{xtX,w-7:FE'EO[;z0BZ&TǼ#l2Ua9r`e=Z=@(叟ӄls26~'ܽLլ"g)s-c#pMWzD0ﯢ_XbZ"ն+0Tl۱+$M4o#i(ϢTv}>$(#/ ᮸u{ݝхg8c0FXmc{p0DعB>׋H;hG臸C;yS$QUi9JP GP'S Ľ N zXVz< @\*C}lS#6<>MIo>G=bQS tlEi_WddE.9#!ג:)o+ro9W-׍4jrPd޼;$mxMfkRpa _ئ?eYCac}axl~E%0]tŃQpkwA kmBp#][GSsc!%x@m&+]l[d:Qx\0bg#FN㷋ӻd&>Rڧ3KS"< D"#uf1RXyI4q}\dXc9O` V@/bIA]\,8@%['6e&ׁrϏsJ7Kp2u@PU /np%& Y$ ӏc;^i%Hsk9 /јǙ.?d_׹'oZJ97ºʂ@aSI<\xj"0rn &y˱#z_n[/~ )z Bcxoqp&̻ob#]pb M5r]EK.!ڮWgN2`sL%Vp|J4)a$TVYM5K_׮, R7ǿf2f;RE}F:Qor>YFl|ɒϘXS$ T?I@6 '}gҰ}^<y2^ Lp7KACwQ`ء$V-5 w8kHͯ )w 3{{"b@rcNZ0q].qAȡ鮣NZC MdR:]Mg"m:%ؠ#x==:ʣ/{ԊaQW*.lCQš\T6>(e#[; nR"~Ն}O"a.!~.WSJ}3'&Gv`;/].LNN𕲴r~!ctu USt0~c)i_F1E*8M̳;CP|ǿ(Ӑ wegƪC95|ѣ~;Xo;bN6}3 `+C rUC%\.쏍yG0]qUI";Ӣɗu~@TI"B,w /}x~JN"gl.h*/(.mdZ9.)Wz?Eނwԓfihcw&NjR#'=nѕ!%@,IֽK/*ĕRcSȁ1~vdde`Q)] J^ Z2IvȽ%gwF lnҠV1fyںn݃,-xVdrIUFLq l9"~u0ďL87VSʉEk7gsTlr LHMQAsu-)z7z{wC]Iz ׂ,*hZӌH)CleB/\g& WDb7+GD`+Cd4.wbQY6. x&bj*^,=ސTv v;&ů}x)_nDfx>0-;]oSMţ):WH *-ڳÜ'2~@ 0x(Eo8eQfPH=N?ou3 %.3J=hũzrO Sۆq}WO TȚy^F,‡Ugwn6wY֧44/\6r csgW h},[|.Y8ZaH O"luɮi%V[hDf_{ Yn]{U99j7ZPEF}OeLV?nXI2ߟ|rs {3娟4Q[2h! tt0Nnemi{F;k\[7Q3aa$= c$E}qvl?RH^LqpV+N_k;g=G'dsmɢ,B p+qjv5*S 6΍](2u8qQ 4"n@NRa }UZUfzO3Aj;$ѵ/BX#VcjjrHN1f }Zs/WC1Ck  2YR>Wn#){\Ukd U1vԥ5(S͓KfISVd%CRV ^1JF02CZ.6E:[#ȃѳ9.3k<)8nLtVj]QحctSbۜťjHʎ ߗLp"Q>បȪNiuKG6C}Pa9=l0~%jO;~"#w&]cr8DQ4=bpLSt07HwSHxdb%â+|%t"ZA`={K>jnh;`qADu+mHKY&ǂ1eV]nh276QU H ZrBV;&\DceF>I҉|r{!HV::+/xi:ɅOrE%i+#GlqTpfUeqgT~ 99kN/ZQ?M=cYQvYs9>p6i?]MԚ&2~;A9qs'v8}0%"9J Y/w:ͺ2e":G1ٶ]Qe@ܸ 'lȓiҖ=X~-\~܋]rhld_.pdz9T /T!Uj@GpW&cp$p' չ\yU"e^U:کHh\ȒV\V!"ϽwHr #hw9']ه[%Tߥ\ "S). Gs7x i$*d&W\~i&9sb<.u9#Q +ɕD~dr:͖HOsb2Kwf3 DU稚h 2^5SMҁMBxƐ`pVQ R]*ЅQDlRfndKWš}_u>bDwݞioW\ pj w<"k?)otm.+t!(Ph@ӓ@_st* RDeúzNԗ Ɵ14J-,V៞`_AV_߳9^rZ_7AdI0MçGĖ0nlLDRX)Ψ<)pd d38i$8pidR8j;ifoILij",7k[X# =7j+]_KwKSe_: 8yD4ࣔķu768k㚬X +25cs6 qld 7|I΁WfZ)d4ϘslUV>Lo[:O؆fHOkOŠZ"'"uTIWht?1%(K 1&͕mح2YAi}ƛnAUw^CB5q]"E\;pK&^O X)CSFQ;1z`S/7 e{gZC2;TP̭?n$M{ !A3"g&=P/;u;J[=/7ii[ԞjrNX+.:mن)PxE4$%0ɏ'JpM@4M("#8BL[wMaojm yqz(i`Vt8sTFz!<Fq-hIKKyO;~&[0W2glR%\=-*Md]0뮏5j~t!'S7S ;cTXkvV [)KOl7/&_g:悒="EW~F,w 6ySx~4# p.at,'#q_Pl?ky5p$j~v2uOV3R8E|8'csc B d/K%t*;`g@-oTir(tCpg&V4i> stream xڍT 4T}en3cd_!̝q3Y ٗH$e)Y QROZReU{IgΙw|K]4,"Fз* NQBIJB,*CLf ,Df@`!40cS,cc0aHcX(f4d$it?D`!y~2#z H B2 TF@!5=X,:p ^LEWF@,d ,Rej(Ib~W, Aa쀍9pߍͿ؟ᖽA3Hy S2DF,_<@I*|,NtpȀ,".rD/Ali^^ b3 zy0@d&it yASeD%,@p Db[?:.t #4@ "?(&X 6ObDd Q#b#g@! ~XodH4|ihC=s[;e?zz4__ ((%e@'ܗh6̯x0S@z^H/ g4dA@;cT0D ?Q"#6n/ll3\ ߦl ׿,r!0I豴1?ƀDB0hIcB `CN艼)LdXK*?3DiTTACaRRQȍ@ߥЊ0@LcG % OhOXh"Z'TVtd7D1~*D~H%}"@^ Ez/=C Qm4F3ϔy&OL;k(g9;xnu󇓳o|+t،t H=# 574g+}w&Q6Y?L4lxߒ6`)U%Ê<:VDM dz*R72_HT9l_FTսΕ_ uM M鿧*ϭhg(2Z:l""Tڝ%e1d%&)О!K9^޺J%N[JWh:*F5Q~ˑsmZ_5HB*#-QѬBɹWstt3%=8qNS0dd sfj 1zuXm)ryzv8[+yTqiFkG1kMeyˏIɪ~|=*H^黊<Ŋ7VEq0(KWxΡ@,[/xtoaܹTw1n颧Fdf; XĄ@C)H-%%\Gxre*rʶr5@./0(lz;$R mǮ]Hˈ?׎C=ܯ - :TF`V >8ժSpy{Q}Mi9Z7i F!K-MNe)*Qa~e8o赐If`RϫVRP/.-ު(aajx}[~x4{a>wbN k)\LjqCO LqRRzN1dc:W.mR# oj4[%ddѮgL9~`^a-h#8̸'lXَB%I#KsF+߈X!wFƓδ? vl)ܚa8}1B1bUӃmsSKpq)6f)0{*kytTzuط`ϭu/,6՟o,d͝\=9!4οB DXa]UTwwMxگqJ]Nj u& ƞ\OqXfe+n7Чz+x̒3:骪S T;UmOӿb7+a-vAiOCJc:'.cn◃7Ėh~#JwW9> nV+9V]!k<4*yXѳC/$c6&x|*vtC\1wzMcxUyO5+^Uekv]#ԇ:JZabod`ʌ3%if{Kv-,_=`%G;VmG3%aUF\#c,~{HJbJ><8cp,\v;]A_ژyܣ 6_y>ֺrpWcnmZ.Ի&TEKyz3C߬H͎8Pvïhۤ~.p;ϩ]kX'O(-OCy5:7kx꫗3zDt(?^FsUzC>Or `T- ]BNZIδJW/0GRL8s0_M޽@;1jObgOϠpc֖پ&BlKNi陒jZM7>I\scD+f5h;k]30t1ȬbB99q4n~Z4V`LReoȖO\y;{Xf1ODdh]N NbF6P] {sI1njvB[ޅ(]W)|A)(U.jkr[!sK/ǵ1= wTN endstream endobj 238 0 obj << /Length1 1860 /Length2 3020 /Length3 0 /Length 3974 /Filter /FlateDecode >> stream xڝTy8J(K%il0fy13fa$BB(|Hh+$KIB2ʒd^?]s59>#'D)HЈD)t@ 4"Y(8kU HX7Hd2q D`A*pg#k1@)TDDO4ƮBщT:BM P5~&(MpP4:RId !_Q={~hjjBx"  $2ghBcPWZ7 @ @W`CзF:Z V1NF$CTP-" xY%qG* ХhJd`A2'A7D( @TOAi n @D,Pd,_Bbz#lX$Jb) @8|; pي_1"RȠqzbV *qd ġ Щ@h R{o=ߊhR/8yA4*HpGxNGsވD W 4w/;'È m"{ 8}7ʯgCD(;28ǻ%F3*\HnzNF{ՅRH @YECPVc#j8hi+Qk ֔N4?aB@aلJ$+1.lؾaVYoB"N6ߛ W&[cb#: ~.`pfQ4hFN  ̣c1S_'Yj1@a=w4==Rd_ Gz9ZiD- X&:t -ڲ[ص?ߗ/ ,vWWOyIU]vCq!P}Ikѯt>D f/z9l{;UTӯtY]ÇNՈ8Oe~S:[| k˗ݞiݮQwSl:*uS*o붶=0N4I &?y;Giԗ,b ͧRX>V0? T͝W QPQ}  Q|KΧΒ"S_|tz^m1PtݭH»p+ cZ[ۊByav d6)V|lu&s" *.e|X>Zrs#t7GAli=UڽDNK8ni[oJ'9[[CwM~]}[=YN'.4 e{TuΛѿr 67n*\uOT8Nxo$$Q|Lhͤ7ϟ}DN)sp)SElii?t76vaFH,rɨ8sG'/>ޡ+X&aHΗ OWҖO߈,.aѦ3^\ F@ UI:i0ѫ*4v/3X[Xӓ3kנd)@ɍi[|./Lo L@2,ۛI[z w׏|0粘\t6sZۙ(5{ɪPL#=^hOGP[Pj4ً@M\uiLUY<46/u,>ˈ:=g#D]7p#5*Yo\oж+Ј=gDOU'zMl]Sζ7W4lwqH[W/C_2]R6TskU.zH콇ؘa""_9k:I֫0ezqa Ǿ*XH :[#iQZ#r5ԼY[Etȍp↗KmϿJr&??#Ae8Pa1{/d=LJ M؛5cmP+7J>@bDBreK}x0EFƟІUx k sUyR'K&ZGHP^ ۆ5r-}ކ;K{PP@n=l&|7_k.rܯN;ZhpL@o(@uilmizŋ]u &%/\X}W}}YOR}wJx8䘴=^S>Y̱Ţ;; E.58'|2LWʧ:wؾ0^z p|w역 هc7.NиJƍ&r` @iLu7:2֏Ka>v<;Ք(ׅӨQhs'hdJ;[gyMp;K9W9^X\)rZ\ub/u\'yJU6zku)*Buk ϭmZb8Q1u0AA05p0-Wjvݛ &csnJ+?̕C ̊=:ѓm>߲S%9+`gkSbMt5K~G\^auY*pRiǁ{ yV<9Ǚ0pgYB>v@HTֲ W0yUSd+igE1#=o/䒼;ONZJT{9&܆ mVv}T3^<#*ڪ{UvXT I*6Cq6+ga}eik/|쒠5i^y q+]\;J_]g25=5~  M+OEb8d~c{%73& ߶1G*Oϕ ߵBKytP)w9|,$[#ft6lwfƝNT5q'oWIj8MuԅS [`;oeʅL󆻤Rkz  DS$tnnuDvﯲ-tbuܓ+Owo;,vCz9SU~_uCYў>fc)st%F_5gٌK5O֒W""/~RDgkG<̍[2N:v5dEKC#;5E:> x50jnWKwzO) m%ֶ`a5,+#ӱ0"ng:Ww+ E:Y0S7mo7 >[JІWxo endstream endobj 240 0 obj << /Length1 1850 /Length2 3018 /Length3 0 /Length 3981 /Filter /FlateDecode >> stream xڝTy<}(kKdB,0fc̘SD섴XjBHlFD⑞zgV~>s{sLQD_ЊHԡ3(,N`B5-HZH:H$<D9")Y{KŃ $SDOls22O,TfX `ZpM@ H$<p| _ޜH?>8*:`1@a$UUI@KuƆT?pC6] 3hx,"ATbJG_6 % E0BX&I*@X KIK0d 6PP,̜ADfn3„u R$KL&V7!,>,3 U%P*BeRHxDZXMF0Xd e`"}Ȫ Kx:gudVD2\$T  ~T*I_CE S\7KʜBà̋ a~ 30#dl e5 ~?27E$"@@Iw23#`::j=-8с9mh"8FA>ȺHTa i?FZ8l?2ȟhxA{X<p `>9Cxs8tDO73]dGb{І`^Ĕ\^, TFw\?w!@2KXPAŜH%H@Ғ$X9QS0F&3[ A0D ˣonVlxnTç V>b6?]y)2  ͌6TQύW 1\4'45y (̶j&JL \z@doWouX^ɽ{Q JL4|4Man%BUvӂ󗦍2Hܳ95_uKyd}`و&O)Ġ"㊑LQZ`jg -3;ɖ`i/+!p`ߴ0+X; ܑ0_첏T-ԇqͤOveBs)-5+9j|!wq M N[6!֚n;s"E>rA.'Lu͗qʸvԌ.;jb0^yJgyҽhIyy'-!،|cjmʻ6'tP⻕u.߼vD\}DXpG$-)o w;J$h{)f|zD|O˒G›0[(ʝCh"|f1ksHD rwP 6/@z`ʅuO*?qT(rs 1!g")@fdnRgɯ$aoBs<՝lxi¦ø 8 ׍)wmJQMC'su3S(h%ǂG냘2TQ9/Z硒#u]&|P[>!uk'?&R*cN5rd&SW TrgkO [e6lhk_U*eK )~Ƶn^ L;߷0<(와sw^qe~<&wpu\:rbCK]%~;+,M$n@by=-3b[㓺Mڶх8D8pM+)k?)Sxj]RQ,siuzOwE"Oaܔ%C} ]M+ nǬe|ۤW?RZ{(+Fd*NsnB:{䍲ޔ76>m[wŮ)C\ne@tدxĦ:2Ʊ!SU\=ͥ|b﫝M2fXcJJM'[? azF }1]!3oyՋ#s+E9=s"HmFV,Îhc?y-QEhWa 3f;˽R4'&d#s+K^r͇Țz^goK=u]#ok  ۅD87~̎6t^,*FM|z @5P&OA#/b.x>F@&:eVpi[WiǤ_Qf򏯸tӒk-]KuTl{`dNs|hN譅2^) >jcՇñH}1}7GE[d+n$gތh,hS$.zf-\Nh#Z9 U(\PaXk,-SqZ'(*9{c Rq&:]lRHy>p겻Y}{1;Aa/{AJ዗[d2zoFV!Dž>]1b&OZI:MT Qz=.\Գ0d}.; BvD^G'H&#Gq āΕc=$^-aA" {p)Jks0>6W/9ʙ9 :ӿD7:6w3fEgx],ynSi9. \zoMJ^Up@ endstream endobj 242 0 obj << /Length1 1614 /Length2 16235 /Length3 0 /Length 17072 /Filter /FlateDecode >> stream xڬctf]%vخضmyb[m۶S1*NW{q?g/5ך{q~ %Ua3Gs GWFf௙BA՜in37X(N^.֖V4tte'`@kKws;G'{s׿׉W+s9@TQI[ZA@-4w0w1(YM4 G,fd% N=M͝q]쭁k \vnfkp`J@W+oU%1jeOm_7o?- jl{S`f t3[/4܀ŀbnibfgtOҽ׿َFO֮@s; F8ֿ5M]ֶvcgH;X8Xn>wsDϞK `fnǤ$New"?O'9pS077 w @%{p?H_1h 47Sv5Xҿvu3s;kj;H 3YY:3vp;w8~WyW5/G'fs'/]]=Ow0u4g;^寪Mߍnnin kє7&#;ӵ;odJLw|$̩Q Ʊ7 #r6ik XUoe>Me''a0A)bw%fý)ew(™N6'@2@ G'$x.&³s䓧Gёt?a)xSHR\\M?!_a< UCNNh xpm?X o\"DMG×x0L͏AxIS\w7HpҒfS&}c\a6{$% 3/w3JDzQY͟b]b; Q /j}%@₨2Wo0p<9CBꞗ1SUP]]dBu,׷?3{\az {sv%)T9e]Ģv LXN ɪEҥ- GױP0t ы nJh +Ң=>KAY dwkK)9eϸP!A~0!TkC-v@D.):ǮI! >Eic@%I?@JN+>CP7dsJ L=l*OjC(8ː'HQtQ+O:EzQqM{Ab{(;] _ol$II ֊d:%+V}Mh_ξhD@œ)ܸ\XY&5&4Y&9O=$ H죭lC5 HWS3sxX:|jg.zcƄ 7#SSN.ڀq`NN7s=:!XK`Ǽ )BJl M/2rulGFw\E"AK3()Fg,k֙ skx'QO0(H4@tJ}GJ«ǘs0/8 ~2)2< u kEm \N.7fN*ᇷcyh:r")suky&"!9RDA9Ti~&ѝ"R~=ڸ?Fݡد8D4XOΨq|oa0BYY;E-t9JgX|ƫzlL4v1a'XQ( ONi pj=zõXzDE8{e6JW|w,:ԋ_غN̂ l: PӡQ%ddȩqTi moٰ7YfhxZɍa2: YÏRmѼvc!Pďr*GYXj<>lK""͟bo:˙$b)"Sw*YEO{pLo?+C6$Md5q.gDxla)E.{j?\D3ۆ5b\x(v9J6"&Wg ԸDeUbc3 dvIie:މ8<ፊh Io#pꁿ ?ky"j)nzvdk+b8r H'߰vĻxأ= ԝJ9^T߬g1ilfX&H|F}udy i. |xCqFZ|j'!x`[aeeiwwۇ$у`(aL_M|)cwv wd~91Ι*۠6 h#luCpT/>[ ZK/d.\>AQ3A@m1A:~C峟2GBTڪk #4th{ꈒw,?O%'cԼ<`+/4 Сju||&t%J^ ڗ̅b [KǪ!azxGHކ@E5/ J7p`X7#T}hmD? 0\mZ~Fސ=Zt qmn.Q*['0G ! r@wiܣBf se;kcw˛o[ܪSO8tg*è߭r@!&tD&Ӿn;/g.UEYz ,6J2ZulU:ՕV@V:ۋ;:9RW*#:~${Z ,"(xX.=5߿`,g.>6yyUW)k h!`LJw"F!YKsfo=IW뮡c49>rf: /mWDD6V"@gg@=v0&z̖m.dYRD۠3ŕoV3B~DQ[{ L:ⴀIޞ9]o篨>"Lkӻ^BvRB9fO,&I4l;8(FRG?2ၸDZ4B} Dޤ<ȶ06lϹw%-Qd k)=R[ `;2Rll 񪋊fc26?D~&-&)(ЈKLإg'y ]EPqqVbGS?/Q) =/3j lj^j`gV۷)tX,sP<5 /xSzBBkDuoˮًZ* 8`3;>/c~x PW#S>F*PP Η,b@tM|F3ճgrys!NE{aR1?{2CQ/-{f0ڽJ[#C.ec'NŔךqH - C! FNJ@**jo_Y y:7z+CL䍝FIV\OAA&.# 0p 7ڼB2zDIhƵxU/M,K;>i_lRH=)̹0t&pU۬[fY5ǽSNbz)_F#;4cC;j.aZ̑!Yrr>W@`9Y.z9Ai2|y7C2]zMgfk"tQ 3$'"~Pu(PQH* lUzr{ ⚦ K EIDAo✔dpbӔgR 2?dh_n/Hp1FP r7MWSexJ$zOu5hm19+M zA<<~q1ySSyNW?O/hM jīX ]ԻI0 s2[l:ISSJk7YFuXXV7٭K2t*! [3 T%Y1E0>g _:}>2k]hl Hahp {qp#ڎl0ѓeLZ sGք^ Vܝh_~F0ju_"M#TD+h8{ER^~'tkH ` HHxpF& yE sUݯ٦; ݠ="_{%Jz;q r[q櫼~% \ځa?t) o&F".:4?uƚ5KK90x{8V_ 6i|*}l$#7eaDp{wjAvqidgr8{8 QH`=eZ~ (4j1GHWI*ݲ&<4*0?`ъbwa|{=<,PVmc!LntHbTMo~tHNBZh1JW'pq *o"tN\\&K;DQ؄ `R~4"F.ieZ6H"7/[ݚYjNp<ࡴ߈S S1B ~᠂ o%\ ٣¯T`#-'һ 0,<'ZN#òۻ<`6 Lӳ_Tj/{UL8[:=ђЙ_mP-*MmϱVɳWˮA@ݣcc*|sbQ `ٺԷB ,[Ne1)X|#N3R]nQ2 <>k!W нVU/4y2oćln[-=E\pJHq9v|Zӆ[65cb_&M:C`Hi#K>K!"o%0b~o6h#([[jؾ.m:S_ ƈj:}Zu!BC΢1ϋ#y2=XZ8d2VL!T-5-;Gzq2|$ c7*u9gAIpZ0ķV>N@:vkN{i V;.#dv |P j.M2qmpX\Ot ]k\&U8RnnH6~kCm^<׳\~?{?*?(4e#E# * n҈'p{៑fRPz^ڶZ׺yC'O7ARpVv[Č!9шo~WV)Wg@qZ.L>1īIlU(jJ:f;FAx{@{F>>A64T?l;;E60y)kNˬyw ɤ[eD6V<1ق: l}~7$u1~=ٰ='=ƋZ^@ZR׌j5jp@Zv<0F {I%`|ZY07Ee3MƓ"FYR"dE8[;T!hTzA,(>9ۀoLgTYk/>\gM M'>!~VºOOpW\s_}F T C(lQuÞstVB}B7H4Ջ; GH4HWOv򮎾tY>%3'fzT^`Cϛbk/5fQ=k~éGz2 fKuA0@cH;M ]Pi)jDBH,r̵uB >V$`oF3vۗ: $t ѝ1Uׇkiɖn@7f؃Dv?eguQ>˼Lq`ˣ}wO}.`t.j<]o 魏MqaT,ltOaHnQDN|͵P쉈њ B1$IGVs{^!ͭ>=Glӥ "VP .j:#tQk{ (ئ .V# D܉ڰz˒ O:H]KgU_W-r.=b}Cո 6f5FxýV#8'F.IS̈څgi9'b}gz !,EU|6[-t9S5 NU5V %}#oV/rW{7-[r鵒8N`[͌dͭ ۨfE0f;TB\tzL(vkL;{ϣKEj_'>>ɷH&-:*͔rRm]#kˉDFf,0~VT:D%qJdr<]Xꏋj룒AEl(PX,L#Z /\YDFݪqNp#\nbhҷc1geθ&3E5vUs\[+Dd[N؝Lyd=g˒u-`YCi^&/pρ,]Ww4'ڂCd"-6>]T \u  1Vvv1ܐP+yylg[/.]KB{[MsEC8?D2u?gnժq /1Fe~)~-b07}_@dqf闚o#1'H2/9 y5]c6;ܔ,#Ki=f3"TJAޞhV>(iWX|QP[1pۇMnP o>U5BO<(ks.SAEҀ A&gR ŐFi/!/:^; hl>8{uj=}xJ↘5֫!Jq +rѾ2 Dq14;)ʹx//Vz u PM6z /dNM})Nk)C]pKpɉW66Li{`9\(U&1 tu)x,(xB:_kVRoO\r Ik\ɘhtz+i6ba% yd$/޷4tln7e(WIhA *ȰpNy[{,"|VB8{ECoR]Q?a_2jX24MTmi={R9ޤ> 3[#H KHc8ҭn$. 5Z‰c{'m&łN XD {wܛ=uK{Bm zA7@=ww"˧(,cn_C80x@q=xsmMԃJ5 OLw=϶e+Coo+XAF!H%JfHc\8 +6.~(8raDdïf- CW8_:)NQӅ!N-T_i3`TăXνz;2,'R3h1Y{P1eb伌f;4CA/XZ3JǶH7|S0z+%KGDJ#I 6O"?E/oP ɃrNt &[2I=ͩZIgxUԮ;<RZ)d+v]PiiK~7V0ee{`l!B§A捆6@;@y=mbJ.)СR"Q:A1#|oCM%so0 AzXH G!Y+[iNp)I ⶻ%u#˸1JlWɔSHGϢۚATѰ.X4·1F1URqT^EsbDi6 gӺt7L)65_Y 53&^dKME|lsjͣ("kµEqC6'`C!mzEi, 8LJR0#iCt]Bc8B1p ?V hdA=av!z*+ Ӟl]ڸcr?z[Ш aUi3j9,sPK{Nl;ib=Umi3B35У[~~}㹎|pW ]1|)/l,y.i8I Zf^7P< $56K Q%vƉ_9מrQ8Go脲K<4&#t띄1XxQ 2A^xFVfpDĐXg?ց#vEbZmAHmUVeV{J()1s9X[{l½yA.ͣqkRGҞ?u5qVI8CS^Fބ3FClb%rH&Ad_E7|k~PNZ?@,JOWiޜ&IҊWJ3!3,}i26gIR?Q^[FANjMxӹY?MU2P†[UCmPdWguap3%s$@H k)hǦ*Oy>OOQ2ލ&2x^N)v3=9ٵb^>aDf.g;`UOڳY m# v߀OCM>f[+?H>jgpD-(*V܁{}@M! y  /0kldmd YE$mԣ8F3m!aX2K*)~(2/y)T I7(Pwd^prgg>0_/5c?׎(4j"I,ÛZ0tnS]V("_as^:ufH 3%?682) ׶o[~aX>nKc{,uZiBS$<NJ uB "XbYtt4 o kPgIYb5vR0c]fkLO1( K}{j^EdR76 XA*}ϩ1۹ɐMډ74W+muRTd#w Pp6ۅĸ5+ͭ;Vǰѳ'chG=B/]{6g*==e~+xŕRt9X$caMkԍ7GWRRJ&wIC3*s ,L]XIv0,P9@RO+Q$}nbe[uTv#F6l?pRz8}37@R7^H6e2v-Īms[t2s%0ܚD԰h8evhѮ [F<;;rJ2 '=e] FH2i>>˃ l&fĬtߣ?BlnCEVHy>@=Tayb} <_$>pWŻfbW:L榭 Qb!JnqRg5eȦ'4j=Zi,p#̩2k\D*lI۔ޯP >k|GQw8guoDj{ Z~41/K-L [_xq~d@7I!v/\G3ݒf<SCz}40l2Q5w k#5=]q9%yxZɳ("0e}`"X6&ƒMAi/;,']#ytɩsg*'w3LX-#$S-=NF 6ZDywv+7gˆHdߢ5so]M솵1g U ݽ8Xڒ&푢JԂ.yⵅ)|Hŷ-Kdʞʾ!|LWcdiW`|rˋ&ӑlG f43#H\a$(/w]-+O3Zkf$R[y $m<;Uxb" ֤N>;҇=rHuFUN.#G'GB>!:?ʎ-Z| 22:ԫ:sAKZhQ3y Hp)Z6aОjɑ@ܸBlءfρ4cvA "#֌mYs,nkDU c6M9I[%!sSܼ<' KV&o$YDRm@e*m4G[hcAaٽ>ǽ&?KitsD+?C/yfF֪.X{ iKG2 oESIuCaD̼? 18'j--. 9]7( F y >2 òV8=fV-սܨHΠ6^1togU??{7 ``ς^,b!1Q!) m}{RO {K+Q ):Y2L$$C=QJQ>⇢: C wvm2=}n.g/"YoU<HېԵa9n|9ŽL=mqΡ<:8z}Luo(*O.7Kyo7/Bc"KtZ|o]G5ChMN@HpJo+nXֱ#I7󂊗2B& |OM}"ⱿO+۲.s`poP;6agh2u8*`v,QXъ(BaV]OM1oX30܃}6l06GG ۇI8|kO|@9UG\P#2V (@K{T9O͌^%4=yX%' Jƙ-pTLg9c!?(/*/}fں氀W{e<^n.W+NL OC?;A$(eWci=fQ3p3~  tzm΋ڰ;s% xyHZ^Ζq\!N=u3:9V9d;,H}M67# 2$Qm7$uYP}iK24DU㳞҆Yw82C 7Oo{+xVAM0tb9̇V@oLG"l ޛcE'g(<9l5Pu(kl1g#k**daC2F Ǻg0 endstream endobj 244 0 obj << /Length1 1616 /Length2 20400 /Length3 0 /Length 21234 /Filter /FlateDecode >> stream xڬeTM%spw ppw.ݝAC~y;w;ktU]Ȕ՘DLLl̬| U-e[[s< ௙ Jh r7qqˋ@sprYZhb100ztYm!7W+ d ))(Jh5R@{-@d]t g,fJsa%08@=̀@g;`lb?-%7/37t2q' `7ퟒu5ٻ\2A.&^sstKdo_ @Kgs[_t/՛8:zߨ`F`conK=?"co`c܁6K `@`Qtp@2;HD'kCK*; 璱ߢM@^GW++3A. O2 `abO5́ζ {_=m%ԭ@f64?\@{D2gTPҐ`j(E.Au0qsy89v6/'!@lV0quyo7s0gZ\M46ssvgowԁ@O/3P댬Lzܼiq~60Dz&Z*㷺03Y~[4E@!&u`2sEm(]nViU7.gG@ @,Gxnf0sቱёkBxx*~\3W/c&w'DnLF m_ ȝ)-5znU,E|=fiME/@/i/R3YTzY #$}5(Y7s4 6b e/&Saƀ9^wo3h1= pNg&g!z ۠U-'ܾk2%WR%!x~b[oy5yD=. UvqoCS4o +H\LfmM}mN?2FWuAvrH =3!@3xW| 0dBW؍1>xTknI5Icf>oPG[5"r,{̽q:[_0]]6I)`*ޥc~{RAj0p;ld1.Yqڜ8jLj-ǒDaTaePj(n*E Eޗ:FdrBeKOEaBGqf}ę`ՃT6QGAц[5e*tZH_{Lc3|B\XMWU= d(TQ/'nl2JHތvj"fȜJ/|KϽ[2LYy 7P D't-GP)0eL~+ܾEWݸSnS{0^w^'5+)esFox4^y;6B|H؞wp}bժ-nb mk]be#(˖Bf.IQ7Hac>1S/)TY܋dbxfЫ;Inlč—-b0sf15a'vC؉h4؆1{R)d$ÈgH;_7z s*#ĝ uZ|z^;Oc_(8(y^<V )F^)P/;;O 9gV 6.O_^Ȍf3AB}ɲE'qGL=D}Jy$Ė&ndED떇rLp$R's kjp<@¤0ѡvL6ku3Wi}Xa5fTNF9c֛q9QDq͍%J_amœR|HVx[ ʀ+3 C?*b">3G]in5.HsXxxvfq/f%qÿZ7=mX'#b5ѐE/v)JdMZvb^LW@h[ccA56U(ϥCB 7a'eyi/#g~@g'T&L2׀}(Q$KHU K3Sa"a!r (XfV߁ Dq ȫfpI\7hَeR}mJS0%Gt|ݠ `[QeCcFal(jyzDD2ty񎜺~W2-(\ 'xG&ioMF$~,YCg*L`8#!.TJXF[k%QYrRGuA-̵ p9Rsb$߇W_Ah&O"7.qf}Z,l?}f4ßTZE); j07Szp, vykR:ngBcepF6@ΟgzLWl<<B͏n ^t]o`x))&Mӗst+yv$SfQư, f.P*zp: CLoY bk̃G5 |1]nq5@zr~1F @k%L~X>Z8AoPuۧ<ՂJXR1O VX~9v4X !OhkleEȨsP8ë́Ҫ``Rq>b%q,Ԓ\GO$d&80WiB zU 96dOdwt|߂=~׵Ejڪ1PNߓ뙨.=S+a3*ЙEkuq -C˒TKO5̈[Rje꿜؅-HX.]fDy'Oew@ܜW*tuϒixhډO ]i,s9b)ENՇ%\:7#f''xbfu@!Ih_ oc5trZRu&VTS)IuEGN* I˕?8/P"xXyaR+e`,0mγ'yZ$+])%'DZJ><]=PKsI/cpns'*9I%X#zv|&y˰ +l1499RnGOoDO"/z{C>\.8we!We޴Yt2$彴0WbfNZzim\*ء+])Eȣؼ=q2NHF W`g ҊܝRkZ]3~nKjGoC9j'E|%VbqԖ.is♬n:M2/6,~y(o/ 4uhd f~]!?f$ױ$$@lw쪨_ك䃰qDMGe]~1s_aPtQ~ʌb:ᙛ(5rZ[$HZu,3ܯa~A 4_F-%Z8yݻhݹDjR@h7s!x3C2ޔ|<9cyQa+7VFOu+˧2z*:}S:o!oOL-7͈<5keM$\㒒VɑSu3BNStuo07Xݥ% @ eR08 aSCAC]gU;]$Hg7eW2A~}/q骼x"R:ĝC/4+93҂+[5Է})rN㭢'z}Ç]3}fktlQu/P@V ˇ3̹٘.r~{d S$dp$Lx!H?vB .*Lh)]-h*[|o,9=}>@"Gz\%2;Ed2lѥZ@v(fc1S6d=FeEv}+ՖŹH[yxCDwp̃8}mWI9F߸|kc|Jce?Rٟ`lWL4nmW/!vxnmźe*Sl87~5H)Ǖ C; 3x<"iw+zceP֌bt#&_rDhTT'~VjV S>Q{T+B>E5sKq SBc3F)8I >;2(l7_Xy9t&XZ9\:ɜ壌 nUVϾn JDdε`M֞A_[:WS}>㞵)$"qT~@Q*C < q`%PUxA`@V]  w!ʕ"{emb!+Z65 =%M9"Y{mLGJ0ה[#o>'iZ4GB^)VAz倧eQvRA&5#ڛa bn>w `ҝ50~**F6&D/ A[*1] X΃HUt=m 2&٨~WAo~Aگn<:;}-ol~$#+7SzQsw9-|ØJOxᇠ!5s~A1}U6)IT7_v?Մ}v`j Ŋw o ]TM~h=σb1:EKobCI;^B..YEӪje>?VRe9F҆/)Tn`\Y@biC׮;.'zo濬0'iD焋SL~;ys=LW"_dLi`GL3uBX:F\:&uMŭs͔ $݄?) 2%R5xl"tR t@D]4d-V;<ͩ>Ӻ/u)H^&Ϭe]7{)d@vr $->M\Š;2"~G|./oj؂WC@3~ɖO Pq}v04F-sbգkNW&cݢ#`[g56`YkІ4Ř)OO&rHpwlǒ7a  8ϩ C-?Pg?s vèPVƆu!".`A=N%$ڏrirT{_:DځQ5l_brqX}w!.\,G:Zk 3Q0ʼ Na Fypo)E++;_6ۙQƃ;hDK']Ca$H*oJыC'U.(sQt&"G,fR8T 9|nu1#UA[8˾ahIϢc6(J ևRM_|$O4ZL1>1xyaNhSRh,¬ƠIJn+:ں`ij[BqP`iroq :}|/Uz%eHsbm7 Ű^:N۶!9l^3 ‰CV8%ɾmHyAޔ3H5t(yƃ$lMh}I<^2-9!Q3ؒ㙍uV2SmٙzL<(Ag|h\%/Dt̄ D&N0tcIԁ3B_<86ţz'^lwDArxU#:.֪CV${nZsA"`loɌ}6f((~<%#DZo- Zkjh xT|n4$딺0t~z庝jp9݀s.7{|H~2/#X2NeU2%R(Fjp.AQ.ۡ.Γ֦BXO4r{ҒgP 6.dg%O q\?)Q0xgUCk|YmumiraX4ME}f1XzaZo_%J3{MTb{Î7XA3 Ӭ |TQҦ|v e)#l|@R<DQ[4T;Q][MG`fһLt]W9!Qa{]4q]ʝT9U[gLJ7$ WK@ѬE o^|CAMB5c gQ(YKs=+B δhunbdE-+khڞ)\q'bR(r<~,vj=҇RnۻfJ^c0CB'؋UQR[$HНRc,F\])>΋f%.E'8%4lΉptgd e*~HO|L"?.Dn,1^tlyf*,°쪒%્H`U<ѽjyj-Oظ}z$֘DBf߶uN0/ޓv%#)qMX)Qz䌹,hY(N wAw#'\3l7R zo2RQR&dc@vbʂ$M(r^!XP{GU4ފL$wA'c.,jc]$(p4(1j{e&!o.Bғ76y'mzu/Zɞ/JccJ9EQfv2 dm3> }#ƒ퍬)YNk@#:WSYpޯњֱˣkPl(E7o܌l46B2#"vvp+V!XvE*{D\4 HJl*dK3SfdE?4/q ϩ2 4&F'r]^q<'iD@O"ekpqvOhq ˯aO~~!LIS/IIP!ll {H(eսL1Ҍ;)Ok 2jqN9SrF;91DV*sNҭѵCo7Ԩb_܆BymU4=G X?;!;uVoԦ5_JVʖ)>x,}j 'n3q %fςpz=>h y`-6.YbO2.T@hk8ynّډ s~I ׺KrtNCҕ9TlZDo*B 8Q4'HaعW>0:E# n=0 \Qp\r \Lyڦ];)vBwq;lO+$ڢ,q3u'b)Yxh4/eS$/(JSƻѥ7` ^n {G+k =TG.eWp=adPgo 5G^;SC^H_ ԣdiEzFɴxTCt965 !D&f~M +;vۣaah9qDNh.nnx?Zs9 p4,͠P;?Y^s7g^2isdNw.,!'ExE:lShNLJlX>ճݦL$Hmjg>]p0(r_Tv ¨>{sXeۯzA՛"SYBUX;n8R)hq{\[1ٟ ?6"gzir--kT%~k"s2ܩſCMݡf 9^[K2qK.7(Hgv,Kӣx|OFbRv39(&,2.2|,NRС*kãw /PzMY[Qktܭi"zJ/I,Jth p?,/p٩.q -ΥV'p+lY7AKPB!gX,]=Z?_rQ~)~xБk+/l ޒϦ32;7No>!ԑjBhN&تZ~]ӒRw]h(\=Wu: RUbvzd]<9F2,>zBdˮaz>#I%6'm~J)=J~͐秣p,zd"@8޸j%8oum&>_i3!(St'T'<E%V}-ڬ_z8ijUڢS l7ǐ}-~ r:-9Փ9Ȑ8&D5z2[b|*ƝF5oYܙr͋B< eF{gXD.fcZi@y !I_zE]/&Y_FN z2;U2^fŘ4 tG۠'PÙ $|:)c g@r $3q ׄ?usد_y,=.\n.ݻ ;-D *(S\h'A㺡\H#lsɭί!|>#ȘۨO(Nj,afP`s| ЛY]C]l MFmĒgL6G]˘nD^?o$WXǧ8'ozHb~CVTsA=І5ڠ*SEJ.'"_ĢJi%+nT+(J ‘c!"sʟZhn6e#fC*ne7%|6Y@i)KO(1| D!tcnkۨ)~gs"3KdMɷ:I qFә>[N ܮ,5̠ڽs`1e~v޲tƊzg班=]CWܧTϏw_!v88 ;ܦpD\y}xk4م7lJ4-DŽ S؏ZPJn~ :WdK35GLٛyCX$eCIJ\etyl5lCcQ.c;ӯ`fIǾjcD)zjN+.Ch- Ӛj{ m,RSZbBv=Ry'̵\N<^yl{3q'dVlF}/ג* A<_~ΦbU}q0SP MLbCmQ{<=1l ǦtHc. N| 2%PbWYJgeT`BmFOmΘ#N~&WԸw+KF"0_W1$[s3`xK);} gˈ7>&.Z V\G溸 3EA¢Їy"hQ5 _0M!xlu4Ua uFF2'EG~_GB=P@^  C l|yKl4T~5n[8@epp!2G HY;׋j1; ]D0"3E[ۊMnq -eW6Su~|wqK`a{}G6u9oٕ1BsS IJ7R}OuMkN+YQ$t.ˏG}X>zWMw- o|g4f.zx6[ T)#2u5?Xh0 +'qP" iFEk ENK3t%N*U./G0Ќj9*nLgxxoTE&`sB~oEQ`fòL|G_ =_ `bIC}uN= 8ii`pDmKA)(,}fc)UͥmѨqֲo )P*KVxP% `? NKX5AD9؟b P˜#wwv)>E|M]ld&Ihgzw ۡ:Ze;Mwĩ~w1~a1k\_0RjzAH-5֬H|93(RwL@sijlAtIDSLxxљW#bx#ny%tm  zznmCb5[T(<- 9ąp4L:൸-mט+=DaSRM!r `b$;T."&9YX.ci+ZqNr8Ԃd?҅*9k Qd؀e":b?T"(XMd^0{0 YyJs_U6C}/JKO7me9NT!'BpͶlD; jĝe\sh,.kIlx ѯiƹ[:^(5'!/fL 8NGRT^օ$-|JZ{091S{R"χ\-{Jx@&мy6EߐC`sg ȪWxqԾ4YtJVyEi? ?=|7Fd_f/nCڒQKcVḪezy?s !RJ`1F{6@y6g59&ūRd[_/@rX7Gs q bE\C22W\Afn=c8}E>uґȓ|J+/&^?Ȗs9-A+mŭeLH!p-YzN]BgW:_|V0 Wat\cU֌$,o%v62契*ܑ3#&f"_ +?n& jkЕX'5qz"oϹ 8X;7x(#~2 BtcL@e&$PTcWᠩ/[>Ϧ L@CI`+d[QK+ t~6*_p%S yR`L W`g2j+oAoGagWg剤Ye bu @Ǯ-% f;;*+ՠ=ukh.C)UݘjTe50}A]QsL˺5K^7oxϓNU ,Cntȓs WU- h,]:t08N'kn␨=t0eg4oIpFWY;E9AtɎynn'ιkAl`Kl|qǐR _+Ԏ,:k|sZ+w{ أqj/)Q/IFxV AaN6|+,.Ai3(}uOqc!#~nA^MM;EzWNڵ&L:"A-`Mbȩ[$tH!.5Sv 9ii^;~~@چ9:J{jȠ/&ƌFeC aB<6̒)y&`[Ҍ^Ly9^1Yoҳ ޕ2Պ=;\5&w q&9VQv?Ô vtqc)n07g-,1}mXdaXwR 9(@$g6q =ޘ@5wD睚4!!^5?vC |ֈ[h,v/6VŦrR xEEe8>8ݦsO$lKĨ~,sE!@v%[!W,glMzh3}X(T6mWLv|;-0,֨!,,<ΣP)FI;BtnҬ( ĐW#1dJ^#.1O8c:z0OxB܎ҒC,Ф){X-T…Vwg~Jgt $} гiwHx ȓm}ZQl4jX袧u!yc,5!([xv2^B?ߪ;9PF< sU;s#MEFv4~!w`ztͪ~/x1v(C#~rms(UI N:S$3B fYݗ._0҆[U'H+<Tm^ll}g2&$ rNwMx@s 5љyʑu :☱'ۨcm &]s< 2'BS~&~ %:J|uP mL9T?j#.s.r;>b9I$-pm_e1o?DިNFݠ`hg E3F`-^´] A D1(?ˊƛ6 rO|5Ns2DϺ(gcf| J)$PEl6ΛT E5DMos0U#V-*݂ed:܏j)t "lδ1xu)mSxЯXkPX[QGJح<ᎁ+NBy̲O"7dVgyk>;:Av/R4Pmo]JóXA&1&Ȕc0q\8V琡Qok)y(4-vX*;$*Y?h8V[UdY'es-feLgN0k6{5рKRfi{Nw "0lر dӿ[_K]+s| yv"蚋dtbc"NUN.,mu˛i.k%AXA瞓6B6,Ec5|Pؕ,w`B6 o Bbt5g NARjMjB+%8> mjY` qd%DsmޚPW endstream endobj 246 0 obj << /Length1 1620 /Length2 10248 /Length3 0 /Length 11082 /Filter /FlateDecode >> stream xڭweT\ۖ5 !X%^PHAp@pww@.ݥ{xݿ95ךK{CC"nfg @Y8XZ&66&f`O,&63*  H@A-@ pr8Pivn` K(_\nD^"ˇ3P@ 0ۀu>*e4  e'S0 AA s;? Wk/\=~ AA{-vX8@/3_.{!Ss:PKVe) 4_{{{PG9+*KN %V1pndO3 /EAlf sT6%;KJLe;$?D:2N66J&c]2`q7۸wG 'A/xQEV d -&6/ۮ19؀!M'0uK0y f^L&_տ_􇪻ك?,bsxpXy^o2M񯵢  cgegkeo4_;F j1{da :98hi뿷; RDRzݝA5پv>_WJ*XkGܦ7~vu$ȼqh[ 0R" kn ? p90R9gS_cz Zkp+shvoz:6I2y'SC݌.kO|_F&[~}/Us'?S[ifU9Ol k=>{M7ޟ5S5X~Q:<Ҩ8'lR(\7."[|Hݩc#(TiX{3LHb`X~V4@[Aއ#'iN@D.{D*D#dq`oMw"Һ|yh*;RApJ^tCNs,m͖vׂT&G(\va:|y&il 'BA0Es;I*[S+hy5];DlR͛Y𾹣_H0$r)XgvlQ=|:ӫ`Q(`%5L1#L-Uwݮes8,ǎôݒ37fؔہcʙKD,=mE8.\Qu}6tC-Nf/Qk20W!|w&U.]n 5!(sѣJxFbWg=6`1՜.^p|9 yA{Btn#3UG^g\K )ՙz{IJuKCm}2<뒩kyDm@$1a- YUaܢv"fB.\T "+\fhg - P5W(\Kd 7?>b3fj)xлc"YVDXi|pg+k#$ Nxx=rE΍ILo]¯`1f8r6 tETr+vű]k|9~J|Zܧw˚U nŢ(kZVPf`P 1ں^X%yYU{=`> $MbSR@],%OPץeWJnq=df#Ls~H\*䰹7$SM&] 8}<@j2Xg!"*t!< Ϭ;_FIv Gl'W"GҁϽɐGCubr3 m nG MOaUV=Qvel'IDcxdR`S@e|0Y3<* UJBo SIRC]gP+iz88^^Jq}+ǠF'\W亮0e 昚NN\}lZYcFd 'Gy+%UrXQ#*ص- Dq>MXP\s*Oi-+i/6|oWC;X6]'ŵadW9ΐg0%t at20aytGػ! Jsf@%Q誓k)^~C EK-am{ N/ُSjDWaKS+ nz8Bӂ_0092Z ͕t>yGm2 (IYSK" $eÏܑm఑7%)(K| ꄜGJѨnvnEEhJC+ S@v Μ_j>׭#Rq2gwhxUv tRkԁa*vKL{mVg&B TYu-Oٶiaoh,1J;(U+y.y̭cm'gU!,W8Z;Qr$GlײPԣwyvyu,J(>X4s$W^W>EVf/T֏8f {=ܪ\`7elp ~ڞȳ^3=0'UVВ9 zvYrv9/F|V}袚F.UɃ /zIئW&m~6uKj27Bɖ9ߩ~>%f7VXzjF~W,{f_4Z+CʕJ/xT"S-uktYVܜ(?ԙD$^GCՕ6fs"ۢ7,*Ohb_YmGq $n=cO%rG'G|,HH2B(JĢGST]9!&?\ rT`y^g<€Zd&]T(0ndI|6ƾ^8eGYZaW)E ]p8?+ҖtnOFLX_aD4nA-'%D#П:Dw~,_'<$zax~VNNe?05UR W\fgJ낲QǬ=Өhd2 ]lPDLF|ZTA#(4?}G.IgjƘbg-z9&֑ \.jcЖħ Nim@4l7oeߦ ɴy9ESq_=)Cw0`^ھ΄g7@9]bQ&L`<~’Y}+Xc /_E1^a7'?߿74ı<"IZQ|Q n^fڟتR<:5s5ts~P`jJ)ŵ;U*U n!oN.<ۙ=S:WxPHvڐC[\J?oŽ(sOC_k-t ǯGwSҩiop*b_jb#c6mo2Q'3n >VAɴG d&+ , Wu0Iia9Ex{ᕖ =D`\y73ay_Tۡtd?{[;Ál5Vv+Z GznS[YBu].#jbvgpgd}j^v=mש%Or=%8"DEHj\@#O.;^$ou[.&SK0Nbe.,xo9PbQM̽Ҳˋ^㬷߳ڌV,ήXQS=P!b{&ߍ$܃V}zD,l>杖X$jgX/CSPLƋ/x1*vC~ 3وd7}jzD R^mtjaљoŤEwf ./!`G^Ur8 Βн~JfTXUT|Ws9^I[G ͓(CtumĬGTD9ٚe H9P dņ|$M ki[|%3Uuw>,@YBۍ5i͡-HYJCPTXH!@Tp=pbiy(f7x7a ~}~MJX4s34<+lnW^|pݧjz3\'ErH:0OLA_KM5"E8!ӳ|@m3 *&qߖn8$)[G8ΞɝU2 Ch9cBAZI".IA$jHfar'J|dѺhғt~M?_Mz4] `cClׂ$u |dcѪ6r֠fU-p IS \[~jd~bDK2xOB:-mq\k:a-K[q0x,qQ/1d9>3aE诘aw1$PojCVTւ1q>$?(ZG*(欜V GDQMlv1EPsݱJ/VaA3nbNIiA讇<&|(Gg6vf:p-S~fD/7w֋ݟ4-ʦm:wHć e۴~G+![|3=皕#} 21ae&<;|{k!}Gm2n셅6mLǕ}" ꙟmQR[!F#?$!>Gy&'3{ `r_UEUӲ@'Ơ}H WߙBKu/K:GqpWwU(>%iMGru;0]f~` 5k4ߩDO8pJ`([q<ŌE+GeR2Gv!1bBfd*#kE $O{ЪUfW>/8m5cR_9ύeݲx&!ρ:, oeb[pUb( u3jgaiޝ.˞[3AHR$$|IFuzH;JԱ̺7QӮD|P<<EZej,%뀩x|jF?0 }by ,DV'+/sSHCK tY1НS_λl}waӵپTHoMkV .q&+81\ʓbzfK$lgTp0^jYDӞa3}czW١"]18NJg'/ XAvŗ)k< ja٭s4hąlpŚ'7os:UXY}NA+a@0i/fGhI|3Aդ,o#1/mq cւU Mz)PRmgo3Q]Gu|w*uM\oO~ ÓG;-Qa*\)K *r?>@S0̍3~yzg:nOhZ2$O~jPjT2}$ld 7,<I}&Vg7h؁qnqSA'?f|o;S|f?WLv[2^Y+5ti榒\]|* U`%f7< "3T0׮fCoؕU}?^MнoX]ע}sc㺁>ѫB{_U#mvlPh%EF8.6kǛȴv)aW;?4˒Sj\ˉ'Ʋ]]lj)5[,QV(k'Z vוD{ϊeeO4wYJXiJHDRL?+Ĕ`}x(cz\b.ebP MrB+kmTgDK$]Wrm]THwo˺gzc~'Wɦ30 Vdߔ8'C ij`7mog-Q|d͖WRTwo=SrA$lyd MD]Q'f^Ђn;]nun=}HMSYͱ~vWLr8"U C@ a^ж;? Ns_L/,'_2c=t܈&#KbS3#E5E>N6tP} xmQ̘:o˻TG+r쬵gër VB+?"M]Cu")Qo<ˀu i3Ĭ@!GtpOr7uڈ4b!<_%sntS>h1FK?Fh!CC{|@90s%5 ֬k ޖvi5x)ϟaw9xdt+~-BzNW ,#EAI TNߥ% tl 2]WT *>ghϢ@>Z'{W _߶ G6 A@ |_f0j9vWwrȓ'b^Xoh-<,k@W> :$O#ed4 Gz<% -ә`-&$V@i0ǙoۖI:e݈LX,% HG4+㹔ೱ68մ"5%O_>-Z+.zՖ 0;tC̸śPj)>%xקGQRc7 FHv=mFսBP$wh0C[߶]ͽhhmP`!T7nM9!ot G*iume gW%b>Ɂ*.taNF_&URզ̢ŌQՈO>p#w!l]5onڔפZ[O/I}@zqi7Q䇃9{6mLWMreg 0Z?W9nV'u.%ۼ{͹)w֡bWHo)R%aE: 8^۝[OGWG]u(QK Ⱦ)n@ЙGidMa 9C3>H.Npd vU MKʱ<.CkjfPE3yJfもAZI"sBm4[Ms2cfOvfie"E!ZIޱۉ?\!j yت/7D#iO$"C 2.ZQM{ӨSy;D4с𴧶ĸz @zIp=Uцoռژ=j8K ޔ'I G_=qa9CL1gij W͓3#n ¾"1bKz xdF,'fҪ g^7(t}wNzLg֊q]F ު6"$rA*5\/c#/HeFt%pxmƻ{? u",SןL ؙm ~n#pZ'&Ty *pUT!qDG]gG /I6ьFc(qG; OiFS,ۨȱ:#Sĸv=HD{7Χi5Y܇jNЗ0cD;Vc9C JCk(Edpg1rSv=dU^C M9;fȫ7INF L@g3){4<#0Qb 3R3&y-3ءv\B чVs=<#s(e5.b_!o"bh`p!L6<$,H-ӨCzqpDhPlVqc;ƢeEY 393}Nqvf'H9239xѮxD{'1@`塯hmB=dwi!"^ض1G]`JqPGɅzoh9_.j7*8ޙ;;Jۣ n`4văOS*H]?= endstream endobj 184 0 obj << /Type /ObjStm /N 100 /First 899 /Length 4011 /Filter /FlateDecode >> stream x[[s}ׯcRka+U--EA2w)RKRw}ċ b0>=,r Ps*Ӆ ଋ,ζHʢtxȢhelSlO@?V ɠ12D\Fc mm#i k? qG{?% Sgx tx'N @K jKkK2 J/Mhwz{>Be8x8 ڣN'N8Z X&a+ u;If& .$I`3f6pBR5H](3ԛͯp~s!v a@3=O< 搔{w\7揜깈@o=m}fs\,rb+Q&+x^4@rp%G[;.=7 38$kbŖʖ|閖USڒc9Hƨ-YKFKW"SK2BӒEKwd^jg"k2 2B=~ w|1>L&F윙 6[R^Y rB $i39,S4ǯU\pȓ 6w,yb RNg& saO]sT"(΁&PR#Ѭcs`ng.,BU%ojx98%Ȝt1iu`kз HX`Kg8|Kuc9sO;cq#1欑2W{Z ۃͨ?s׭k?}z}oni7?w/pۺnx}A}&Q6Ҥͳsx>ju;U騺lD |i E'8x)^78j0l.Ĺh6݈֞KqZKJ|ע'z^%: 1C1/ŭ*%?A;50͛O;_ω38vM8k 8 Oen*tQ]d&oo?cFs`g]"n`a`F5~muMv87%#7O^|”NY5'8九GsWv2++WsQ̞Au1?A>9z5&JAg\۱RX֛lb+Ʈ5򾶖Va5"v9K5YMQo,Em VV}kw[gN#IG:9VUoѱ`SCW- #[63?:Zezwl^}r̭TH"L՛w;#q;?ɍO]m _pxŔ#"47~Kצ10[j?NP1;Wamd`ۍ:ɇy<@, γ@̂qVOivXCneM=<yW'ͣxҿnǢh`QPnEb 2uDk05`]'޻_׵H~U`rQY^o7r>~?5HWh>(`V5}=d@-%i*g*<s}e٧ ]cy8$\^"g }"FScHzrkV MT2?}[vy^,w1&mx[D=O"&s[@9?7a%&flgkgnW\ =P;j8(J5Px\SpN|BZa IٚMDlٔuV]9+? #Z\ek\fs12r[N$uOHr嫩`jI`2EbCfi=gaQd 1QD~I4_U{PlabA !Ω/n4,nh nc^X{ڍck Km>PB3I步I%F-$x%MqMVKo- endstream endobj 263 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.13)/Keywords() /CreationDate (D:20120718155839-04'00') /ModDate (D:20120718155839-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012) kpathsea version 6.1.0) >> endobj 248 0 obj << /Type /ObjStm /N 39 /First 317 /Length 1109 /Filter /FlateDecode >> stream xڭW]o6}ׯc"5/ 4Cm4Hסj+aLI֢Ps) %pjpD(AD*NDq LR 'm -@,G y҈ˁ8<a-`qdgQ#R1ф4g4K&k@IQr-goD(sP/ L%+J()L/^\dX02a{ ={Ӗiz"M18hmfJr[{&!sMl Ү4`NqFA꾭O5;L&3GρÆ1g!C=O3 aB&ģ9*Qq4H[kdW\dGźYeO N3U%.2qL ZgNe؅.FƐVh)u}Rn #?,De$$ـ,?.uNՇxw`Nd?7p[WoUUjsqW_N)V endstream endobj 264 0 obj << /Type /XRef /Index [0 265] /Size 265 /W [1 3 1] /Root 262 0 R /Info 263 0 R /ID [<974E1EF7E8A41B08A9B699E5CF5E574E> <974E1EF7E8A41B08A9B699E5CF5E574E>] /Length 628 /Filter /FlateDecode >> stream xRTQEyPYvDpBiD3˲24ьOt~Ellbbht3Uw9RJt g(S:Dއ Psx{QkZЃ׎*:poj=xQA ۅ6N @v6fSE?D:Rnu_)xn*%3p3AF QPw~× "Ft%@hĵQGGGGޯw5+Я VÑVZ#VV?"/[G,լ&"T&#V"[MG1jՈ'df7ag.lfqf_{fifJSV endstream endobj startxref 165807 %%EOF prerex-6.5.3/doc/introchart2.tex0000644000123700002140000000317012226246354014725 0ustar rdtrdt\begin{figure} \small \renewcommand{\bfdefault}{sb} \renewcommand{\mddefault}{mb} \setcounter{diagheight}{50} \textwidth6.25in \begin{chart} \grid \text 20,52:{\textsf{\textsc{\Large Computer Science}}} \reqfullcourse 50,45:{1083}{Comput.\,Sci.\\Concepts}{TTh 10:00} \reqhalfcourse 25,40:{1303}{Discrete\\Structures}{MWF 9:30} \reqhalfcourse 30,30:{2813}{Computer\\Organiz.\,I}{MWF 8:30} \prereq 25,40,30,30: \prereq 50,45,30,30: \reqhalfcourse 45,30:{2023}{Procedural\\Prog.\,Devel.}{MWF 2:30} \prereq 50,45,45,30: \reqhalfcourse 65,30:{2513}{Informat.\\Systems}{TTh 1:00} \coreq 50,45,65,30: \mini 10,26:{1083} \reqhalfcourse 10,20:{2333}{Computab.\,\&\\Formal\,Lang.}{TTh 11:30} \prereq 10,26,10,20: \prereq 25,40,10,20: \reqhalfcourse 45,20:{2013}{Software\\Engineer.\,I}{MWF 11:30} \prereq 45,30,45,20: \halfcourse 55,20:{2685}{\texttt{C++}\\Program.}{no} \prereq 45,30,55,20: \mini 21,16:{2013} \reqhalfcourse 15,10:{3323}{Data\\Structures}{MWF 10:30} \prereq 21,16,15,10: \prereq 25,40,15,10: \reqhalfcourse 25,10:{3813}{Comput.\\Organiz.\,II}{TTh 8:30} \prereq 30,30,25,10: \reqhalfcourse 35,10:{3413}{Operating\\Systems\,I}{MWF 9:30} \recomm 45,20,35,10: \prereq 30,30,35,10: \halfcourse 45,10:{3013}{Software\\Engineer.\,II}{MWF 11:30} \prereq 45,20,45,10: \halfcourse 58,10:{3513}{Database\\Mngt.\,Sys.\,I}{MWF 8:30 pm} \prereq 45,20,58,10: \prereq 65,30,58,10: \reqhalfcourse 70,10:{3503}{Sys.\,Anal.\\\&\,Design}{TTh 10:00} \prereq 65,30,70,10: \end{chart} \vspace*{6ex} \renewcommand{\bfdefault}{b} \renewcommand{\mddefault}{m} \caption{A Prerequisite Chart with a Coordinate Grid} \label{grid} \end{figure} prerex-6.5.3/doc/introchart1.tex0000644000123700002140000000421612226246354014726 0ustar rdtrdt\begin{figure} \small \renewcommand{\bfdefault}{sb} \renewcommand{\mddefault}{mb} \setcounter{diagheight}{50} \textwidth6.25in \begin{chart} \text 20,52:{\textsf{\textsc{\Large Computer Science}}} \reqfullcourse 50,45:{1083}{Comput.\,Sci.\\Concepts}{TTh 10:00} \reqhalfcourse 25,40:{1303}{Discrete\\Structures}{MWF 9:30} \reqhalfcourse 30,30:{2813}{Computer\\Organiz.\,I}{MWF 8:30} \prereq 25,40,30,30: \prereq 50,45,30,30: \reqhalfcourse 45,30:{2023}{Procedural\\Prog.\,Devel.}{MWF 2:30} \prereq 50,45,45,30: \reqhalfcourse 65,30:{2513}{Informat.\\Systems}{TTh 1:00} \coreq 50,45,65,30: \mini 10,26:{1083} \reqhalfcourse 10,20:{2333}{Computab.\,\&\\Formal\,Lang.}{TTh 11:30} \prereq 10,26,10,20: \prereq 25,40,10,20: \reqhalfcourse 45,20:{2013}{Software\\Engineer.\,I}{MWF 11:30} \prereq 45,30,45,20: \halfcourse 55,20:{2685}{\texttt{C++}\\Program.}{no} \prereq 45,30,55,20: \mini 21,16:{2013} \reqhalfcourse 15,10:{3323}{Data\\Structures}{MWF 10:30} \prereq 21,16,15,10: \prereq 25,40,15,10: \reqhalfcourse 25,10:{3813}{Comput.\\Organiz.\,II}{TTh 8:30} \prereq 30,30,25,10: \reqhalfcourse 35,10:{3413}{Operating\\Systems\,I}{MWF 9:30} \recomm 45,20,35,10: \prereq 30,30,35,10: \halfcourse 45,10:{3013}{Software\\Engineer.\,II}{MWF 11:30} \prereq 45,20,45,10: \halfcourse 58,10:{3513}{Database\\Mngt.\,Sys.\,I}{MWF 8:30 pm} \prereq 45,20,58,10: \prereq 65,30,58,10: \reqhalfcourse 70,10:{3503}{Sys.\,Anal.\\\&\,Design}{TTh 10:00} \prereq 65,30,70,10: \end{chart} \begin{center} \begin{minipage}{6.0in} \begin{itemize}\sf \item A solid arrow \solidarrow\ indicates a required prerequisite, a dotted arrow \dottedarrow\ indicates a corequisite (to be taken before or concurrently), and a dashed arrow \dashedarrow\ indicates a recommended prerequisite. Core courses are in \boldbox\ boxes; other courses (i.e.,~options or prerequisites) are in \lightbox\ boxes. \item Timetabling abbreviations: M, T, W, Th, F=Mon, Tue, Wed, Thur, Fri, resp.; eve=7:00--9:50 pm; no=not offered. \end{itemize} \end{minipage} \end{center} \renewcommand{\bfdefault}{b} \renewcommand{\mddefault}{m} \caption{A Prerex-Formatted Prerequisite Chart} \label{chart} \end{figure} prerex-6.5.3/doc/prerex.sty.70000644000123700002140000003032512226246354014161 0ustar rdtrdt.TH PREREX.STY 7 2012-03-21 "prerex.sty-6.3" "" .SH NAME prerex.sty \- a LaTeX document style for prerequisite charts .SH DESCRIPTION .B prerex.sty defines macros that .B [pdf]latex can use to draw charts consisting of labelled course boxes linked by arrows that represent pre- and co-requisite requirements. In addition to the usual .B [pdf]latex output, auxiliary files will be generated containing image-map data for the hyperlinked nodes in the diagram and a shell script to crop a PNG image generated from a Postscript or PDF chart. .P If the source file satisfies the constraints of the .BR prerex (5) format, a chart description may be edited using the .BR prerex (1) interactive editor (as well as any conventional text editor). .SH TERMINOLOGY A prerequisite chart consists of several .I course boxes, linked by .I arrows. Courses are either .I half or .I full, and may be .I required or .I optional (or neither). Each course box can contain a course .I code (upper left corner), a course .I title (lower half), and .I timetable information (upper right corner). An arrow can be either a .I prerequisite (solid), a .I corequisite (dotted), or .I recommended (dashed). When a conventional arrow would be inappropriate, it is possible to use a .I mini course "box" (consisting of just a course code) just above a target box. An arbitrary line of text may be placed anywhere on the chart. .SH COORDINATE SYSTEM A conventional two-dimensional Cartesian coordinate system is used to specify the locations of diagram elements. The origin (where .I x = 0 and .IR "y = 0" ) is at the lower-left corner of the diagram. The diagram height is configurable; the width is determined by the values of .I \etextwidth and an adjustable .I \eunit length, which defines the absolute value of a coordinate unit. It is possible to put a coordinate grid with labelled axes in the background of a chart. The coordinates of a .I box, .I mini, or .I text-line are those of its centre point. An .I arrow is described by the coordinates of the centre points of its source and target boxes/minis/text-lines. .SH USAGE The command .B \eusepackage{prerex} should appear in the document preamble. This will define a LaTeX environment .IP .BI \ebegin{chart} " ... " \eend{chart} .LP within which the following commands may be used to produce course boxes, minis, text-lines, and arrows. The order of commands is not significant except that the commands for the source and target boxes of an arrow should .I precede the command for the arrow. .SH COURSE BOXES The commands producing course boxes have the following forms: .IP .BI \ehalfcourse " x,y" :{ code }{ title }{ timetable } .IP .BI \efullcourse " x,y" :{ code }{ title }{ timetable } .IP .BI \ereqhalfcourse " x,y" :{ code }{ title }{ timetable } .IP .BI \ereqfullcourse " x,y" :{ code }{ title }{ timetable } .IP .BI \eopthalfcourse " x,y" :{ code }{ title }{ timetable } .IP .BI \eoptfullcourse " x,y" :{ code }{ title }{ timetable } .LP where .I x,y are the coordinates of the .I centerpoint of the box, relative to the origin of the coordinate system at the lower-left corner of the diagram. The .I code, .I title, and .I timetable arguments are arbitrary (well-bracketed) text, possibly with LaTeX markup. The following are similar but take an additional argument to specify the (non-default) background color of the course box: .IP .BI \ehalfcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \efullcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \ereqhalfcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \ereqfullcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \eopthalfcoursec " x,y" :{ code }{ title }{ timetable }{ color } .IP .BI \eoptfullcoursec " x,y" :{ code }{ title }{ timetable }{ color } .LP .SH MINI COURSE BOXES AND TEXT LINES A mini course "box" is produced by a command of the form .IP .BI \emini " x,y" :{ code } .LP The following instruction places a line of text centered at the coordinates: .IP .BI \etext " x,y" :{ text-line } .LP There are several differences between minis and text-lines. The maximum length allowed for a course-code may be less than that for a text-line. A sans-serif font and a reduced font size is used for a course-code. A course-code may be hyperlinked but a text-line is not (except when the coordinate grid is on). A .B \eparbox command may be used in the .I text-line argument if more than one line is desired. .SH ARROWS Arrows between course boxes (or from a mini or text-line to a course box) are produced by commands of the form .IP .BI \eprereq " x0,y0,x1,y1" : .IP .BI \ecoreq " x0,y0,x1,y1" : .IP .BI \erecomm " x0,y0,x1,y1" : .LP These produce, respectively, solid, dotted, and dashed arrows from the course box (or mini or text-line) centered at coordinates .I x0,y0 to the course box centered at coordinates .I x1,y1. .PP Arrows by default have a non-zero curvature (unless they are very short). It is possible to override the default curvature for a particular arrow by using the instructions .IP .BI \eprereqc " x0,y0,x1,y1;c" : .IP .BI \ecoreqc " x0,y0,x1,y1;c" : .IP .BI \erecommc " x0,y0,x1,y1;c" : .LP where .I c is an integer in the range 0-100 specifying the desired curvature; for example, .IR c= 0 will produce a .I straight arrow. To change the default curvature, the user program may redefine the .B \eDefaultCurvature command. .SH WEB LINKS Course boxes (including minis) may be hyperlinked. The default URL for course boxes is .IR course-code .html where .I course-code is the .I code argument of the course box. The URL scheme may be changed by the user by re-defining the .B \eCourseURL command. .SH COORDINATE GRID The following command produces a coordinate grid, which is useful for editing a diagram: .IP .B \egrid .LP The grid lines will be covered by course boxes and arrows. The .B \egrid command also redefines the .B \eCourseURL command so that, if the mouse cursor is placed over a box or mini in (some) PDF viewers, the .I coordinates of the box, mini, or text-line will be displayed as follows: in the status bar in .BR xpdf and .BR gpdf , and in a "tooltip" in recent versions of .BR kpdf " (now re-named" .BR okular ), .BR evince , and the Adobe Reader. Similarly, the coordinates of the source and target boxes of arrows are displayed if the mouse hovers over the mid-point of an arrow, Such coordinate displays make it easier to edit chart descriptions. When the grid is on, the mid-point of every arrow is highlighted by a "bullet". .PP The .B prerex package at .B http://www.ctan.org/tex-archive/graphics/prerex/ has a patch for .BR kpdf / okular (1) to make it display URIs in tooltips and also capture coordinates of course boxes, arrows and background points in the X selection clipboard (for pasting into a command being composed at the .BR prerex (1) prompt). There is also a GUI frontend .BR vprerex (1) to the .BR prerex (1) editor which incorporates a minimalistic prerex-enabled PDF viewer. .SH STAND-ALONE COMMANDS The following commands may be used outside a .B chart environment, such as in the explanatory notes for a chart: .IP .B \esolidarrow .IP .B \edottedarrow .IP .B \edashedarrow .IP .B \elightbox .IP .B \eboldbox .IP .B \edashedbox .LP .SH CONFIGURATION The following are defined by the style file but may be re-defined by the user: .IP .BI \enewcommand{\eDefaultCurvature}{ 20 } .LP where the argument should be in the range 0-100; 0 means no curvature. .IP .BI \enewcommand{\eCourseURL}[3]{ #3.html } .LP where the arguments supplied at the call are the .I x and .I y coordinates of the box or mini and the course code. .IP .BI \enewcommand{\ebackground}{ LightYellow } .LP where .I LightYellow is defined by .IP .BI \edefinecolor{LightYellow}{ rgb }{ "1.0, 1.0, 0.878431" } .IP .BI \esetlength{\eunit}{ 5.7816pt } .LP which defines the absolute size of a coordinate unit; this yields 10 pixels per coordinate unit if the chart is converted to an image at 125 dpi. .IP .BI \enewcommand{\edpi}{ 125 } .IP .BI \enewcommand{\ePixelsPerUnit}{ 10 } .LP These must be re-defined together if the image-map data are to be correct. .IP .BI \esetcounter{diagheight}{ 75 } .LP which is the .IR y -coordinate of the top of the diagram (reduced to 65 in landscape mode); the nominal diagram width is .IR \etextwidth " / " \eunit " + " 10. .P The following define the thicknesses of the three kinds of arrows, and the thickness of bold boxes: .IP .BI \enewcommand{\esolidwidth}{ 0.5pt } .IP .BI \enewcommand{\edottedwidth}{ 0.8pt } .IP .BI \enewcommand{\edashedwidth}{ 0.5pt } .IP .BI \enewcommand{\eboldwidth}{ 1.0pt } .LP .P The following command is used to change to a smaller size for course codes, timetable information, and mini-course codes: .IP .BI \enewcommand{\esmallersize}{\erelsize{-3}} .LP .P The following command defines the baseline adjustment for the stand-alone arrows and boxes; this parameter is font-dependent. .IP .BI \enewcommand{\ebaselineAdj}{ -0.5ex } .LP .SH DEPEDENCIES This implementation of .B prerex.sty uses .B pgf (version 1.18 or later) with add-on package .B tikz. The following additional packages are used: .B relsize, .B calc, .B ifthen, .B multido, .B textcomp, .B zref-savepos and .B hyperref. .I Either .BR pdflatex (1) .I or .BR latex (1) followed by .BR dvips (1) (and possibly .BR ps2pdf (1)) may be used. .P To convert a chart to a compact but reasonably high-quality image, it is suggested to use the .BR convert (1) tool of .BR ImageMagick (1) as follows: .IP .B convert .I -density 125 chart.ps chart.png .LP or .IP .B convert .I -density 125 chart.pdf chart.png .LP The density parameter specifies the number of pixels per inch; if this is too small, the image is of poor quality, and if it is too large, the image file is too big. By default, the shell script generated by .B prerex.sty crops the image at the southeast corner. It is possible to use a PNG compression application such as .BR optipng (1) to reduce the file-size of the cropped image (without loss of quality). .SH IMPLEMENTATION DETAILS .P To improve the appearance, boxes are drawn with slightly rounded corners. The half-course boxes are assigned a minimum height to give a more uniform appearance to horizontal rows of such boxes. The mini and text boxes have white frames and their fill colour is white, which is assumed to be the background colour of the chart. A text box is not normally hyperlinked; however, if the coordinate grid is on, it is hyperlinked and its chart coordinates are encoded in the URI. .P Arrows with a small height and arrows whose source and target points have equal x or y coordinates are always draw straight (using a specialized and simpler macro) unless an explicit non-zero curvature argument is provided. If the coordinate grid is on, a hyperlink with the source and target coordinates is placed at the mid-point of the arrow. A wider background white edge is drawn below an arrow to improve the appearance of crossing arrows; the background also ensures visibility of the arrow when the coordinate grid is on. A thin white arrow (with a visible arrowhead) is drawn beneath the visible arrow to obtain a thin arrowhead. .P When the coordinate grid is drawn, the .B CourseURL command is re-defined to pass node coordinates in URIs. Also, two "anchor" hyperlinks are inserted at the southwest and northeast corners of the diagram to allow prerex-enabled PDF viewers to compute chart coordinates. .P To support HTML versions of charts, .B prerex.sty generates a script to crop a chart image at the southeast corner, allowing descriptive notes below the chart to be treated as ordinary text. Also, it generates image-map data for use with an HTML image map. To obtain absolute page coordinates, the .B zsavepos, .B zposx and .B zposy commands are used; the page coordinates are converted into pixel coordinates for cropping and image-map use. .SH LICENSE .B prerex.sty and this document may be distributed and/or modified under the conditions of the LaTeX Project Public License. .SH AUTHOR R. D. Tennent (rdt@cs.queensu.ca) .SH SEE ALSO .BR ImageMagick (1), .BR convert (1). .BR dvips (1), .BR evince (1), .BR gpdf (1), .BR kpdf (1), .BR latex (1), .BR okular (1), .BR optipng (1), .BR pdflatex (1), .BR prerex (1), .BR prerex (5), .BR ps2pdf (1), .BR tikz (1), .BR tgf (1), .BR vprerex (1), and .BR xpdf (1). prerex-6.5.3/doc/introFonts.png0000644000123700002140000001601512226246354014621 0ustar rdtrdtPNG  IHDRuQ2ȾgAMA a8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2).IIDATx{p\Wyu!Dۙ8 -I@c߸ h05 ěDΆGd!vR"M$dZ)aR;,aeH0!Ukj|߹ݗ-rVus=]@+vŮbW]+vŮbW슽K;cMnj>;};cy`l9]>nWBo0Ά;.2=qq#`gn>>9XىpV .'.쑘5zo\w9xLa-Wee,bOX7c>f 2? sQi(*$ǂXlߘ1I;wC0}gˮ}o}E+vŮbW]+vް ]wkߋĈS|KF^=cIuכǚql)%]˺ձc%;%3Rma/hrFjpk5l֙t,Lpis -VroaƴOS!gTMkƭy}bxN|8Wl_SG% Z~74?-۞..p `=;/+O7٩~K]o[맭ߐ$W(w> 8Y/i|&$O}4inhߴ8wo^7}#bW]+vŮbW}쥿m yFנI|y /lNvkoee{6+Ǣv[8'7~nH? {.va?0{OJ7>k%AZ^QmԷl-'{0Q1$ĽlP7ʞ_c?Ŗ|/oP=suv.x}`rˆͰ?q s( Unk|ćc#aƭo_0P%[Zw34qb[;sz`( S osU<5WobO 1ۋ5gw9Pg_PD#$z:v;B_C}? ӹ M+ s7\@|0?A qR>iYV d?_x8'8}|y;VY'3{sY?f$#E><>fjOuoҕϥkߚ~=]ty$amAA:X5Ӝ-~ˬvam9w:b,.-<_L/a'[j]ն ~^lu0"~J3t U~V!\ cXY& "l!ԚXR9z 8쓡:geFwx?%e^q)BVg 5촥=Kߝk^}lgB *eߠZ0*ãh 2c]"4GK4.ZiZ4c_hdH Lw?l\3X!vQ`}B(7STնu٦KU `? |!fgop<@M*{nʾ VeyȮe[kɎnRv}wd?㶿С&&wΑ3KW +TArE3B?^yYH|=;  c)gY$2(֖k"J83E =Q+XdyeWk jcO4_o^[=ujчӏf|8Ee2x)žCoRXėm.K3+S#7m=;߇YrE|={1hYcapm vn>3OF\qJufC^S]+veP]+vŮإa_Gkì;eu*{~s;* Èv9 _8옰FЬ>od@ hW$>G嫰S/}c.Al[1m<ڐY)@>??=2r۸Wɔ4Y3M[?~V|%@ тCH M2%Vq| 6"=p0W'a1淚 ɇ,#Y͞v & bzY0fDP6cd"ǺI𼾗ư[\; (ZA*{G])={~}WE>GqhsMf5c?2_Ewq^`v> 2Q\x o] {(;rW[k'eL2o`N!ۃ2%ѷ<$;; vh]iKAFעI+pFv1Nm"w#7rxϞ;^\ľ&¡M7NYQD?g~Ƌ/zE&}y\ _d~:q |f=_C{\8pb5;CࢌM>cToyk{XD}HŮbW]+vŮfa15S?0<\PuG;h+)IXoq%!){ҷa{|_;OfoY.P|} z7^tb O]X)w QՅ-e j+-E;' 6.ޛ*.!_WB'N|UmeMsHp i^}UBs],e=ewMeV˾VZF{7gg? h2zw K<k>Vդd!l6G vI@CT&zQl=KC9}r Kb?;{i/rN [S"B/;KU]+vŮbW]+vŮUX_b'GQXn}|{aXS&f//2&ڪ54^ΔۥtZ;}HYI5o 2gbsvFm<++Tl|eJa?ceݿ؉_ɢ0Aˎq7\1&vl6;o 2V?˞݌=cmY+1%)LdBB#N*lhlu* B# @{1L/GExӾV!t,R[Wq؉q܇lcuXEX6]w#dBN_5IZ2{vOynv,5lzvv]ܞ\RyN#h{/¶I7;+(f'{rZgXaԲ 9t7aGlm ol+vN6B3l2 A.R0(i6/v8ֲx;n>{E'csROc[Z >lȻy҄IB'd擙Z?c$eϺWt;=;4eϱ%hv^tv'H>y .k1E?c.rw7fz[ED9վzˏg`ɽ(vŮ;}$a~Q]+v{^v;=ogU~k/nkao!Ů{G0'+"mPyGBax5$@V~Drv3Jgon6.v ~̣i>ffؑZDͮt;eޠ -)MfH͎5ReGG9=I,HlTf#KI'(M'ةob1IY2"MG6kI͙r2.~I126;GaG8(Z^^uu]e/j,U+vŮbW]+vcCtD'W>Vo38Y)ќV4+ղېާzyõq} D'S#Ҳ'x:S|愤%Kf/D=}}23Y?'x㞌qw!rװ0>Q]0BLn9O[N8[A]dΎZӯz ݌D z!x@9;놟!F6=@7w7oZ9)}=3sH-{[M+9 "M-3B ;ib_S^|)I؅7 yV}Shl .6[L]){J*d6|9iy!ߜ=V"ߵN 6gøEo}9)5WZ[%eϊ]e`ߕJIW0@;_ʙQً>N(U box x,y \ & [create and] edit course box at $x,y$\\ \verb\file> mini x,y \ & [create and] edit mini course at $x,y$\\ \verb\file> text x,y \ & [create and] edit text centered at $x,y$\\ \verb\file> arrow x0,y0,x1,y1\ & [create and] edit arrow from $x0,y0$ to $x1,y1$\\ \verb\file> cut x,y ... \ & (temporarily) remove box, mini, or text at $x,y$\\ \verb\file> paste x,y \ & re-insert removed box, mini, or text at $x,y$\\ \verb\file> delete [x,y | x0,y0,x1,y1 | x0,y0:x1,y1] ...\ & remove specified elements/arrows\\ \verb\file> shift [-]x x0,y0[:x1,y1] ...\ & move [specified] elements $x$ units right [left]\\ \verb\file> raise [-]y x0,y0[:x1,y1] ...\ & move [specified] elements $y$ units up [down]\\ \verb\file> undo \ & undo the effect of the previous editing command\\ \verb\file> write | ! \ & save to \verb\file\ and process (with \verb\pdflatex)\\\ \verb\file> quit | exit | x | ^D\& turn off grid, save to \verb\file\, process, and exit\\ \verb\file> !cmd \ & execute shell command \verb\cmd\, then reload\\ \verb\file> Backup \ & copy \verb\file\ to \verb\.file\\\ \verb\file> Restore \ & restore from \verb\.file\\\ \verb\file> grid [y/n] \ & turn on/off coordinate grid background\\ \verb\file> help | ? \ & print this summary\\ \hline \end{tabular} \end{center} \caption{\texttt{prerex} Command Summary (version 6.3)} \label{help} \end{table} The effects of editing operations may be observed in a PDF viewer. See the manual page \texttt{prerex(1)} for more information. The \texttt{prerex} package at CTAN also has the source files for \texttt{vprerex} (visual \texttt{prerex}), a graphical ``wrapper'' for \texttt{prerex} which incorporates a prerex-enabled PDF viewer. For initial creation of a prerex-formatted chart or making substantial changes to the boxes and arrows of an existing prerex-formatted chart, it is more convenient to use one of these programs than to edit the source file directly; however, the chart editor has no access to other elements of a source file, such as preamble declarations, headings, notes, logos, and so on. A conventional text editor or \LaTeX\ development environment should be used for these. \section{Source Files} \label{source} \subsection{Overall Structure} A \texttt{.tex} file is essentially text with interspersed \LaTeX\ commands, much as a web-page description has text with Hypertext Mark-up Language (HTML) tags interspersed. Commands for \LaTeX\ can be recognized by the initial backslash character~``\verb|\|''. The first several lines make up the ``preamble'' of the source file for a chart: \begin{verbatim} \documentclass{article} \usepackage{prerex} : \end{verbatim} This describes the kind of document to be processed (\texttt{article}, as opposed to \texttt{book} or \texttt{report}) and indicates a file of definitions to be used (\texttt{prerex.sty}). The remaining lines of the preamble specify such things as the page layout and the fonts to be used. The structure \begin{verbatim} \begin{document} : \end{document} \end{verbatim} contains the content of the document. Typically, the first element of the content is a heading, contained within a formatting structure of the form \begin{verbatim} \begin{center} : \end{center} \end{verbatim} which specifies that each line of the material contained should be centered on the page. The double-backslash command \verb|\\| indicates a line break. After the heading comes the description of the chart itself: \begin{verbatim} \begin{chart} : \end{chart} \end{verbatim} Finally, there will typically be some notes to explain the abbreviations and conventions used in the chart. \subsection{Chart Instructions} Table~\ref{instructions} %on page~\pageref{instructions} summarizes the formats of the instructions defined by \texttt{prerex.sty}. \begin{table} \begin{center} \renewcommand{\arraystretch}{1.3333} \begin{tabular}{|l|} \hline \multicolumn{1}{|c|}{\textbf{Course Boxes and Text-Lines}} \\ \hline \verb|\halfcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\ \verb|\fullcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\ \verb|\reqhalfcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\ \verb|\opthalfcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\ \verb|\reqfullcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\ \verb|\optfullcourse |$x,y$:\verb|{|\emph{course code}\verb|}{|\emph{course title}\verb|}{|\emph{timetable code}\verb|}| \\ \verb|\halfcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\ \verb|\reqhalfcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\ \verb|\opthalfcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\ \verb|\fullcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\ \verb|\reqfullcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\ \verb|\optfullcoursec | $x,y$ \verb|:{| \emph{course code} \verb|}{| \emph{course title} \verb|}{| \emph{timetable code} \verb|}| \verb|{| \emph{color} \verb|}| \\ \verb|\mini |$x,y:$\verb|{|\emph{course code}\verb|}| \\ \verb|\text |$x,y:$\verb|{|\emph{line of text}\verb|}| \\ \hline \multicolumn{1}{|c|}{\textbf{Arrows}} \\ \hline \verb|\prereq |$x_0, y_0, x_1, y_1$: \hfil \verb|\prereqc |$x_0, y_0, x_1, y_1$; \emph{c}: \\ \verb|\coreq |$x_0, y_0, x_1, y_1$: \hfil \verb|\coreqc |$x_0, y_0, x_1, y_1$; \emph{c}: \\ \verb|\recomm |$x_0, y_0, x_1, y_1$: \hfil \verb|\recommc |$x_0, y_0, x_1, y_1$; \emph{c}: \\ \hline \multicolumn{1}{|c|}{\textbf{Coordinate Grid}} \\ \hline \verb|\grid| \\ \hline \multicolumn{1}{|c|}{\textbf{In-Line Instructions}} \\ \hline \verb|\solidarrow| \\ \verb|\dottedarrow| \\ \verb|\dashedarrow| \\ \verb|\lightbox| \\ \verb|\boldbox| \\ \verb|\dottedbox| \\ \hline \end{tabular} \renewcommand{\arraystretch}{1.0} \end{center} \caption{Instructions for \texttt{prerex}-Formatted Prerequisite Charts} \label{instructions} \end{table} The \verb\grid\ command creates a light gray ``coordinate grid'' in the background of the chart. Figure~\ref{grid} on page~\pageref{grid} shows the example chart of Figure~\ref{chart} with the coordinate grid enabled. \input{introchart2} Note that the ``origin'' of the coordinate system (the point with $x$-coordinate $0$ and $y$-coordinate $0$) is at the lower-left corner of the chart. The arrows produced by \verb\prereq\, \verb\coreq\, and \verb\recomm\ instructions by default are slightly curved (except very short ones). It is possible to increase or decrease the degree of curvature of a particular arrow by using instructions \verb\prereqc\, \verb\coreqc\, or \verb\recommc\; the additional argument specifies the degree of curvature: $0$ means no curvature, i.e.,~straight, and to increase the curvature, use a larger number (up to $100$). To change the default curvature for \emph{all} arrows, see Section~\ref{config} on page~\pageref{config} below. The ``in-line'' instructions create small examples of course boxes and arrows for use in explanatory notes outside of the \verb\chart\ environment: \begin{list}{}{}\item \renewcommand{\arraystretch}{1.25} \begin{tabular}{lc} \verb|\solidarrow| & \solidarrow \\ \verb|\dottedarrow| & \dottedarrow \\ \verb|\dashedarrow| & \dashedarrow \\ \verb|\lightbox| & \fontseries{sb}\selectfont\lightbox \\ \verb|\boldbox| & \boldbox \\ \verb|\dottedbox| & \fontseries{sb}\selectfont\dottedbox \end{tabular} \renewcommand{\arraystretch}{1.0} \end{list} See the manual pages \texttt{prerex(5)} and \texttt{prerex.sty(7)} and the documentation for \texttt{prerex.sty} for more information. \subsection{\LaTeX\ Input Conventions} The following are some of the input conventions for \LaTeX\ that you might want to know about while editing the source file for a prerex-formatted prerequisite chart. \begin{itemize} \item The characters \verb|# $ % & _ { } ~ ^ \ | are interpreted in special ways by \LaTeX; to produce any of the first seven of these characters, you will have to ``escape'' them with a backslash, as in, for example, \verb|\&|. The \verb|\\| combination produces a line break; to produce a backslash, use \verb|\backslash|. The remaining two special characters, \verb|~| and \verb|^|, may also be escaped with a backslash but produce accents; for example, \verb|\^{u}| produces~\^{u}. \item To produce a space where \LaTeX\ would normally not do so, use \verb|\ |. For example, \LaTeX\ normally interprets a period immediately after a word as the end of a sentence and leaves a larger-than-usual space; to prevent the larger-than-usual space after an abbreviation that finishes with a period, use \verb|\ | instead of a space, as in \verb|Diff.\ Equations|. \item An unescaped \verb\%\ character signals the beginning of a comment; any characters following the \verb\%\ to the end of that line are ignored by \LaTeX. \item To prevent a line break between two words, use a \verb\~\ instead of a space between them, as in \verb\MATH~223\. \item To leave a smaller-than-usual space between two words, use \verb|\,| instead of a space between them, as in \verb|MATH\,223|. \item To prevent hyphenation of some word, use the word as the argument to an \verb|\mbox| command, as in \verb|\mbox{Robert}|. \end{itemize} \subsection{Configuration} \label{config} The following \LaTeX\ definitions are made in \verb|prerex.sty| but may be re-defined by the user in the chart source file: \begin{list}{}{} \item \verb|\newcommand{\DefaultCurvature}{20}| \end{list} where the argument should be in the range $0$--$100$; $0$ means no curvature. \begin{list}{}{} \item \verb|\newcommand{\CourseURL}[3]{#3.html}| \end{list} where the arguments supplied at the call are the $x$ and $y$ coordinates of the box or mini, and the course code. \begin{list}{}{} \item \verb|\newcommand{\background}{yellow!15}| \end{list} which defines the default background color for course nodes. \begin{list}{}{} \item \verb|\setlength{\unit}{5.7816pt}| \end{list} which defines the absolute size of a coordinate unit; this results in exactly 10 pixels per coordinate unit if the chart is converted to an image at 125 dpi. \begin{list}{}{} \item \verb|\newcommand{\dpi}{125}| \item \verb|\newcommand{\PixelsPerUnit}{10}| \end{list} These three commands have to re-defined together if the image-map data are to be correct. \begin{list}{}{} \item \verb|\setcounter{diagheight}{75}| \end{list} which is the $y$-coordinate of the top of the diagram (reduced to $65$ in landscape mode); the nominal diagram width is \verb|\textwidth|~$\div$~\verb|\unit|~$+ 10$. The following define the thicknesses of the three kinds of arrows and the thickness of bold boxes: \begin{list}{}{} \item \verb|\newcommand{\solidwidth}{0.5pt}| \item \verb|\newcommand{\dottedwidth}{0.8pt}| \item \verb|\newcommand{\dashedwidth}{0.8pt}| \item \verb|\newcommand{\boldwidth}{1.0pt}| \end{list} The following command is used to change to a smaller size for course codes, timetable information, and mini-course codes: \begin{list}{}{} \item \verb|\newcommand{\smallersize}{\relsize{-3}}| \end{list} The following command defines the baseline adjustment for the stand-alone arrows and boxes; this parameter is font-dependent. \begin{list}{}{} \item \verb|\newcommand{\baselineAdj}{-0.5ex}| \end{list} \newpage \section*{Bibliography} \addcontentsline{toc}{section}{Bibliography} \label{bibliography} The following \nocite{Kopka,Lamport,Mittelbach} are three recommended books on \LaTeX\@. Many other books and tutorial materials are available; check out the web sites referenced in Section~\ref{installing}. \renewcommand{\refname}{} \vspace*{-6ex} \bibliography{manual} \bibliographystyle{plain} \end{document} prerex-6.5.3/doc/intro.pdf0000644000123700002140000107656012226246354013610 0ustar rdtrdt%PDF-1.5 % 98 0 obj << /Length 980 /Filter /FlateDecode >> stream xXKs8 WV{Cmtgmw3[q4ɔ/$JbJ4~>7w~֓g{$D̛\{DPD`K(d2c"6@4Om9Mr0Dc$A8t+BʖSj'Hr^ "P#/ZoJ:q\z-^NZ"@a"N]_/" ~aR>BÃVXEOiP &;"LP6nY-&Т\cJLzLLO)Ybv)﹍$ө{; 2J޹en>ȏgqIAT<8}%wIoTms4L9~uq q8[+$ajEtN)9R75c(N~ Ur -!PjnK]i4KgAؚH W=>v$ވJR3 > ٯ2~_}OcA0̂W~}1Q)|O a 4Cʻ mz4JK8g;\z>` WLY.J?WY>aKYO>&~ endstream endobj 128 0 obj << /Length 2134 /Filter /FlateDecode >> stream xڥMo~ouXշ,x]4-졯Z-"3,)J_^p87.p˗??S~Eiy{>xWes=@Ή(ȢX8_{;z=Qg. 2,#>0!΂$*hs! }YX[ײ46 h@ЭaN]fvΠ^ +ib+QᬇNX Ƈ( K,hQoF <¤L].K0k_mޥzcE I}M[F#.3m<+.e5HQwrRiIl!M K;я}8el@T4'I+ݱujeB.Td1%iߴotWGiH=AQPfYv"ޝŵ8-^qP'hGTex r; sy,qz lw iׇCr<~ɱ$NDtQhiĊPo|e 7fl X̬8xtn8wj[h݊H7t(D"f 44EDOoʡ3Ca|b0Ug].+}Xkb n#?nqF#MxswǂU(}RD'uI&l[r XN?-gq4vVB(baqBVc}?@PA ɝ7sMΚgQesNVљ+\E/bTqq;Ui-7~4!KAAGorkK`/%/ɿ?nBR=FSpVTU3p ¿XGbek5dwՁgTGsMF Aj#E\%OW)+Bl! d|\iGYN $v AŸrKެlБkKrfw7A*aGC㙺d|Όs-6ҳW6m:Vp ]C{/=q\&JÕ8̿̾]p5s-b줅uZehII;Z2 {+{Ha8K''l zIn4Vdk$b/iyl(ۢjAS[׵Oޤo`[8h3f}bʼ3oAJ U&3g]y"W 곐O4D˹Sk0#N^g߸ewW?w.DS}~,#7=? .pi&lobeqv i'X!OAR|mEs$YXbPc̈́^b$0yyk4t**8W Ei3 ;1p*W]'kQ?r__10pwJqґ;W`Mye|$1}D-;Ue?ƞ"2q]Q#IIR.:w%^DXoD xɐ.-}߫HN8Owqdӟt֭, دHעғ endstream endobj 137 0 obj << /Length 5722 /Filter /FlateDecode >> stream x\IsǕWVs_cc 7-{VYjdC0b_˷gf ?= m䤽vO~OCjDL:;<,rFr2Қ)()ܠ\t;9IerQA:3 icdJidE9zZ&*I}b}B~'+|GKuQ9ALԤ 3NJ39a⠝§~9qB5VMᅠq!VF'D-r[j/ĝL :!\i3 etz'*k e$Ec'qbak<{b!Q":'xsRx_O:RFn8…ĭ-"ViB:؃f0<+G R.^kӘݯ[)[ OMULfba.=:NjO"5`҅G_hKd!$ljp/bRj,0V[MQGF8aH;'FClOV?~EԎ\X8:F0Q  D!ߐvA<!M?41zLdclOVz?2+'94L3Z;yJeADK!y05>p-A֧)1ĉOiEq$pƐÕΏFxR J\|# 8J X5"9x+H䓪xF- AN88PlOֺljgW[Ñ_|m{3dA>]V}vi5SYv@Sh[1CǬP5B+]B ڀH"pCݝƏ0g6/2V?E'YRьCdB|9N@>4H $1[)Q@}L 1^;LbAw3?Xx_zM G/1)"g%GBZ@{SDmjZxy)#,l6Tx =YX$K-f/?uRL 1Ő!#ePܑrj0aq)1>ďB=}FO 1HXW>ŖJ!c2GBvOO(_3Fu{2: v'7Oe"?]mRlvs5nmGޛ绋o/m10ճB8FyXHiiIsqO&@ t#ܢPePae21U/;0RcHTEu8sP62Ѧ`)-+M7A*p(JZaf 5lVdz2CU'WH#5ǫ $;BDyLGpS޹u)>g/UuqVg QgX)Z8̻qf顣a~ȥA昆.7:ǫ| \¼꠬^Eod"gPlfƣzΩM JDäv X"Fk23ZCmq)cK`#M6kX(l=cRn}`L/PAR'[9+:ooW/Αm/TӉuuWtb )!^L!0;3XE ;(T@p(0B苦u`H@n&&߆R c9͋jYcGTDvP6=R׍߸ǢuU%ռ˨E;hNB$\):k7g5@l)v"_t]qn{F}ʤ2Cxvy  "3. nPhwvt GlІ~$ΓT>aѐΪBV@E "uwe uBpX7=r\~ۃq l_wN]-xi!6jó^ǫWȑo^Yg%@.iLqJ4Ɠw 9;WJךZ ?:{7tQw18~xF\W3y1BrO.W=|qsJn^qonjoQo$E ݒh%Es[7A a%5!yg]7LQɸQms4.zSu{r)?FJfztWYQɿ8.Ɨ_aܜ]=ǫo+Ԗx[ .smWwV(1|9"G ,]=ġLβDU]KUT2Lʒ .*P,޽}6? @P0/):vg.!x8eNWC1 R))@ꥉu$;0o6>3p:3mHf]oT?xZCڎZUOީ/Uvκʍ\C^ˀ2cL"+:6hn9ȗ4ԛ׽B.o^o^ˢjfx_#bWՋ {ؤ7ۍ7fӛ[o𗊹߇TFo]_emGk { ˸dr} Չ<ĐBt #sBxk̿yʃsm`U\M{nk'l(7fηn=!yz7gn~w{@J#q,%ê` endstream endobj 166 0 obj << /Length 2333 /Filter /FlateDecode >> stream xڵYsO-=sHC'u#9e<0 Il(Gֹ}w Eʲ*;  `߰Ϲz_o,߇{,R߹Y91wb/e^r瓛FVUXshTW/sp=LݮWն+YTHm"%[+f0ݿO\GNzkGⷛP _0HnWF?d܋?pNizSTgsUܫVÅ[}W-1e6}Y.*Z\5Ӯ|ED=Kc60I҈gC- d/1y>'tBU:S ?BQ3}$NtZ+UXؼA9Pֳ' <)gi;)+ `"WpvƳC;[(G*ݵ}ue40HFUDhglyR?d>I^[>4Ӏ8ivY*m:'̓>[s>#14irk 8@b\4| GR,MFguZunAU~ rITϛzPĒ45eLZVvW3Ȍ /t\қ͘hCmD+3 w'Д e LJĕm_v"/tV4eQu+,'_C"vڵCWG,܇?tZlfv, xݳL.*W-pfE}J,yŚ%Tr&ɶo>99Cq9;Ca\:t&QjH0b vfdOU8lh =րrXq[IaaGV^iZuܽS $\f丟uɻRuc*5KB4WFEÝ "]^ߩoA$ta3Lx493&:"Y@7L#O(-v*( Wt*^B]ԑ2E})_B0HH1Xk^.a A1(6zu]iqӄ ЀQ.2,sD %L clJ 5chVsF-`` =PHs'1w95F )uM#-.Q2d6LOfTݮnV6LfWր)uâqV,ȉwJ1%vkݩ; kW \ǫ`4g% jUVK&O pf`rX{;5vMydKa'b6O}F° ɓ]ZYŶ)- *L2'iIԐ-shРi"Ř?\)0i[pXa(z {2*99F rH{kc^jRr.b+SE??KcEFL":KA>H35thgCE= -&J+JR`1pU]n UGq͢ su.[ocZfakg_N~}I:59zU_҆|_kL̋BAwjK!!׷GQ𜺒Kmt=4nB6ۃx' g36 ~Z&A$ c`a,/ {B R1)> stream xڽZn7}ࣽy%9cyu0ioO˗SMJliF#ixX7"MʨQY+TĿ^YC_}<ԨխFӅ-NP;~kl*FTbx#fͫ[ռ Vy8k^Qk/NjzmC}973WW^&s&S[W_* &&@NEJ.Rr\"%)Hy3լ9<{;?/Vf#iۏ 2ov|  P%i5PƻetWS(t¦.5(t(R{7b C 4&dBcXS`Fs7e{76ZOǤx $6Qs=2̤MQ(\Bml<6GkaPѠHQ'"qr.C@H :D"5zMReyz 9HJ.鲃mHfzhL-AfN ڤ&i[SbI`g$L`~szsqiFčЋTh(yݺHdm$1\0  AጺVg四ɑ&]v9ʄBTQl+Ucp"Y#5Ըs[9:@Vo ͋;:lBL@5/÷ -˾n[aLH}B2?ᡚB%B2s7:Y\EAW/q;/ɩmj>]VUucI  mδ] p R|FWBR5|.<5l)CخT[mmmI[bRK[*Uys! ?c Y1ޔ!p"òghT6|\",^No@9P ~A T`Ylv}8 7$!)pˑ?* s,)!sl$RqCi/܎_@薳hNm S(6l&S_xxCO略GK2)tWRLR%T-WR˕rǵ~PJgk?߹c8MZFx 9?> stream xڭ˒>_5U+ ڬ=\.g='DB2% iO7Ix݋6h U?ބ_n,BQU<,qXEX0H|}, gvl8fiӦ--$opp[3/BQ}Y1zM"]'D1P7ٮ6tTl#Q C]mӛy"`wҊ:ٶlU&f5/*Ay<,EMp)L`K&v,(c͖cƭI-ՓxM;y("p͒ζ[UkzZ(AʛLkmEE[ nw3EOvHlGUM H:mkvgg F wfתz#qga{-۟ad6S(4Ί._4T%X ]`Rd2Zz[5ݭX2ΏVo {xux;hm6Ձ2ej&{~ r*nU_(i@9cZ$7k8#,Ofz> |Cj,Z5i$?*Ǖr6ƫNEmveąyQ4^ |=5ֽR TN KRRvpaFJTqT@DFϹiwK95kR<SfyLyS'굄%?3 4 Q)6z-"Ѹ Ev! ߿iU")\d@^]V=5 3 kr_A I=(}&H6[s( qm} 0C=D9؀lՏ 2f$}$0it^I|⼆,UU8 "QZ 9!_ͮrr͟`9e(K͘fdyB/ vrIcFJ=cؐ|Уn[ȯY(v1t8Z]ijײV/9d]\R2#S0k9 ]Zܢ~5ZѩZ]> ID KӃgR?TN+5kyֶj?;;ƙ5N=ACA61dw4ʈ 9 mkE$ _BEPq: 2cYGcq4nI7wh%տA^ڗid;#VŐzm<Pu: #Vd݅nFf쳤τ_c?mJrRͥau /V5t+Xih#+MJj&gDZz=?$nI$*@D> hiyCɂW+7X5DZKщ?Dv$-HuZyQ>ӍĆF K7DGA8nV9>f]-v \k}{Q`7j?J,MF4T(UPֲ3ALg1dr.J`wrzz%١M|V7{S-p{(+&ʂzs0h ) iDe!yzC ;$Q]MT$-oH_1VM 8nۻ j(Ww0Y`TpP`[fhK/]vƉ/ Հ'6 endstream endobj 198 0 obj << /Length 2532 /Filter /FlateDecode >> stream xڥYKsWPE{H9&ۻ!0 E1>!HTNl<1_wf,~ ~>I* W"[aZb/0Lni2 ugnQm]ZozT;| @w7Pb"?s֨. ~eoU~0%G˜+BF[=2_3~<]̋~Ls dڎD6Ͻ^`?Ɏ\ewcm;WKg0u 0ؠW1]g/l8_( MnE4+2zn-d Kuʣ@G ۶+0g,mBvP"4J<ī7\P2&Vbw`tY@VUx0{z[TW&Mm$o[^'xa_lec4vcB 3wMyumP+=ǝ雺{!nȝLtiQ(0y*!jjv{vߔ\0& 徨5({ ]Σj9X˯^7B1"-,WrY6>Nzӻk2@VXĂQ>  >) <'< #C,ݴv[~us 1Nw|3*oصnnqiv6L!:3<АtgmlYo[lLp@/G]S?T8YqMa=GYmh']M.#dx׊CD9ȓ.3ox0F3e/8r9\֝$#sKy"{ \`dz9`AX.H3~]A_dy$)X# ᜢiR&ysb @҅@StI0n"!Aɗn>`;l^b/8={ 8 % SR<jb&Os=!bgU@&*(_kD:aLI6!DFS~435_0 !4A ej#$&2Z6t*e|tǡ6 LŗA Jzwa26wzPG1ؗ(3SI{'jIp½<;?+g [F6~~5W2#-A!>~`}Ku0ҲZU;ӹ]M ;gФő@& ؜9Ą[x)? X̍'pq UO@/Z>BbN}> stream xڵZs6_Gz&$S:=4&DQkP!пvDʴb;]oağ\W0p%~'ˉ'̗k14"K7C.̞oat Rm6~"ej]VY 5_ lj똫 {x\v jSP&^6Yu1 ҵ.Wy_yC?/MEqG+6m}`EH S;+"_nl;BɜYyĒ  ~h +O,um gMjXw햼]yF~PcH&oeqku`bj)[-f_Jxꔆ)\򲽥a} o@@YMio\י[˳}Kr;GHgmj5+%ʷA!qOD.N0\>n<2PH=c;ԑ \LC_yhDe݀n #RxeUҝ$ibIpgڊHB7ӱRDL;vLoGܑ*qD&`Z',)DFu"m[[3K:{CyKKvFoObtѢyz-P)TCv )H8uI2Nýi:k5 ݣI r8iMMb:{.291E^n}VUVeѳ _}Nh"=,T/+0@)K*:̄aT70%8J-iKӱXd?I0H3fwx[! F1pɔ:"$ nfۅnEgJ)y.s5[YUM=\Yc&Z 9' Zxhk#Լ;` 2p,²P˵ȡv.iY]ݠ!S 3&!$]߹(MzwׁPJB>V3{{\NYcU=% $`P1Y,iGXdEpE>?:OiN_Dwm3Dَ~궟k /9FGt1fuN4GJ/l1[rFef6rw1cW#x3GtT>9 K}pPg\^͞nִͶuD]}2tu}kB*H5 ˶ b}~. WZmt`^3譋Vfg(guָ }ddXwSS/a%/MQ=m ?ٜՎf=G[CV9 4kneg;R_3vnG(+7ѿPG}3Tb 'a?;< }ld࿲Ϛz=J泥J(LU[`+ҡ~!>I 0#5p+I \b~ CϿX@[s54,>2p G Y`{7SUBq{6/,i/8}#`D^;`t' ǿ݈tdtW$do6(Ќ[UL>CRp:CX hH t]Y7lYZ}^,[āO(C#$ANp@9L:KtlTwo5#Jw3p얭3 X%!{cU#S$50x-xBoXmNMM#qn9~)b|U'/g4l֖b+^^-Bl{F ʋMI E> p.n4f3?27ϰ@$mi:g &L&I h;oETgh'IY_> stream xڭZ[wܶ~>tu f?$7Vy#\_ x%99y}+z/UYƳ`u[%*~mW??lfO{C϶{^鳟/;l|`9E .΂ XRMMOx~DНdV3 ٯh;*>Xp!cg+ { dǫTV7Kmҋ'+%I1۲K\K΀v+Y&c~G0ѦMn#UF7",H˶4YSm*ęS̛ ̑h%.K1@7ŘeY8xDbzF?Qmh0 }YT.EbN5S:>ʐ'נ֨ tiƧ-{<#|^X{υLC<1Ǘ_Lt6nV30$MF%8ŕKI6x8&nqXLa^XcwDX0kШ$׹x@"ؖ65aOU'w-v4:C#plOnuGnPatx%X$ 2bPR[ g裹7q:X:c>7MoAv2UR"rzG5-ځV7P[x:gaM@S8h =g ך~51N2~9&qnTynY<.y:Gz~<{BLdE~Mir&צ2( !dʏjQĐ0f,I{$34|"U-&,j{\oiKY.71^W /4hQvqFyxD#Xh_BiZȇ4'=,y޲Du GqW*Dtc᠑_'Ifa]ʕ>(Юdw ԫ y~e $;\Bg77K$:%/H^_| t 8,eH&fӼ ,Rv@H[B쓯z+}Ks gޜxTPB/.N¾[7ʲ}ePGB]zu*r_.P zꀰG+`.T @,&xm"c()507mM~?JK)]`j`[T l.'HC]!Y)CiG},4/i%qsm-/oݷfyi:pPq}ӲC@cԭ{c ^ԻcYєjgp*ZA-l-=Tٌ $} ~45dz<`uɀeC+r@z( &*+RQa6^R)`,0Db%{-X̶wnBcI;55.rrtλ&N^֗ 4KU2&I-dwSJA.ebd5Ei$t5aՠ(&{89XtqTb7`s6 W6X.{{m^P&Qi$@em-ɤL?)wCb +ۄ DF&HI | U]q'0NY$9 vh04ŝ1#3,I0D?B/خQ{ƦDaQa+,zjǢ[> stream xڽY[6~_VFcZ"XAE2EM@˴-,<=Hė3|g,^p>ސDsү} eb.Ϭ}^}gٜbP$W3M2ir洗.tٰxkUL~v$zPx;^w]3I\e46eg>3^UO~9Pg*`0NJ73er)l%a|% 2bw(dh G &Šo|yTf30+QՅ'ӽI"Xq)u_::ޘm z -t~B[ 8]nAGJ%hJ?rrŭSrIl"?xgR$B# B)jPت'0"LoJoA\ҙrgmf8ZpR.juX5f*é B nV'+=51/S ~]jb@,gI@GL1a 1)X/dt^eZ;V;ڊc0ۊg+ J)0*o&_*[4s&XQq@&FG,7WȑT/ɘ"P V}uQ&tg#[ωv`-jn|Iu9@=HP2kS,u#)XQ{m[M74|K%Ϛ\"~ UXfŰ5XO50fmΘ@ <6̦+/bH~ g4?gPҺXX(;\pcRdr{ bBIc ou^0Y?t z(Gr0.E=vObT qY2:ɋjoKUJh<_AYsʝq0f.)4Pcؚjmn"AcהL ׎vtY$'|)y;;يse|w[5(MfV718OH-x_/ v6aȿ3>BÆI'ud\cbxU }6:ؗ2*]QGiGk8I<孥ЧV9JRCjR ~Rd/m~寐Lm4f}J$.7 X)oMvi ʪ2ᵇ_xe0q[`x+vUeqΖ>P5)ĠQxT[)$!yQ?[4aVŇIy !kjaHOXӋ[! >Q5IBQi4 ɖWp !+%KDzNnvF6A@ŵY-d9M7CqspJ>]~zH=W`%ԧ-#tfܥo8Xxh#q1J=tǝǏC8(6I$;vң\aJ쇋n⋢bLw+sm|) 0(E"=՗zo_ kJǑxmq{b6X`Ρ>4RJ~s~y7B;nLH" /=?#HT"4NcNr> stream xڽZ]o7}ׯc`y i޺v7h,5f߾Rt;5 b\%F{$Cz"6rJ*#+3!qA@"JңW* -P1x|*XAFT*Nt$WO0xƤ0 90uLD b ^į0b|hX*-O&#7 =?IF PJMEp1NSz(0* O)'GDŽqD* ϣ^h#|G7_OA8fMYcNjsrJÓ5!/AGBP eQ 1byDty>!xcPE%B;cǪKF<;_$bhycը$Lae"A}ˆEʼnA(HIx0Z)3TCeYfu(wb(WXaUXbP!2PBE/[QXaV}m捂aK4CogOm37AKɈ!d[oц݀ՋsՋfXvaGU]]]ɦmvoeSW5,6|[mui7oe_ "1ܸ4OPHRcFR[L["^Eu"ﺟ;Q}+<31 ̖U`8R8 U" $2*v ^KدI']*]rm5viɰ_nrտ髗N?׵S]Qjy9?{Az]4ڱftl0ͪxnUm7=Ԝ1|X=}NK/i\AZ`͹l۪ny{lO_mY9 zdD6ȴ#RCW`c1UޮS$zCQZ5ئc#1nV.~g쌶_,&XzlnlG}$8cE^x.\/^u&0 jg炓Ivq&Y)l]/,׋y/i.C6sv3{T/ַU'Q?#k]>(#˱sK{@S%}r=bĂ j##DьuFFD-I(QzQ;s/ݪۜ\M+k;a:?Ue9ڿvk42i0,x^knZ9ZTo椅ǷEs{=-^3ϺzXt9 ʏΗ7ݵ9SHVkwrٸ{|3yٮR'aOXl">qt]Kf͗HlwPmC{IwG4YX{BpWq;97j{=L&p/D{1v?s/T`R PޣΥ֥,r"9eKK*%"9)9SI2mJN'PCƄ=&$6"#GQ٫'-PXΊRusղo.'7"z(9$7̣5=}4%B^#OX^i*ċò/s-TČ(ET Etp#ٍp2.םr^]伭\}_->T}9l~-~~g}9?λv!љlZzwX_ކx::8Z&q.nz8dPB޵;l0an},G Ohqwn|j>x̴|`yv^ޓd1Im9>sqKn85i(HN4JT#+;#> Ij\)θ^-H+H59ssw|3AnY:JmK޴KM%ҶvғDK⋁ 4XGi @|%|K;ɄI4[3o]8E>mKh MD|! Sggv&N߀0|T'aéˤߕ;vfzűt"TkJK74Vm5٥G_x/y v`罨^9tzEVOM> stream xڭZY6~#Ϥޤ7TR灢 kTxF#ՍF׍~^? lݳWqXvD P߽揻aP8$ !/^7̄\.ߔ\7uA{ wL8V" Hxm)e+0ewfbZ.inD+/4W6dns,:W;Sj˕Sc8M>zǭBQ1Qyq }!"41AAbom-5Jk:C5KM?Z %I/ȲocSVZܛBSs25vSok`Z, ܦ R%$iz 47SN1EE utA3ǾT"յ %HḀOq3ĂU_qhz`l~L,,Vb^A4Pa)/>Z~aec@#\[.wuY6c4ۃ݊x.u$#oՅl}^A2>6F1;:PxY8>ۓ.̇ |йYUܸQt8<+@ "kMghl{M38"t@g,0V C3hP€оvqx X+#8H8)"5#UD|v狐Q<,rjtZ a^Wj'n&oP*dVI@UEsw-$_~]5[PT 3-S] &)drGLwTV_󯻟,OW~6faʻ!AkrEQpl`X3`- B$l$CAJ֌吵'_ϹnFEcNx-a"|psh,Ҷ?J9J!h|3*jU ,S̨E/7c7ŶHs\8d0U6(` Tr r%MB 3ueNhU'+eJ̵L06FKT*Q`cC)Ȃ9^^îYXJD'N1 a)Z~ T+EOESe>/L,Ѭl#Crl?X@&do4/čBCOuP~Z(Iɺ Bze` u8t~‥1+b Fa-J#p$ ]?/i<~"QטQ&xw"2 Ov˱-ƾ \QWqg"llf Z!D?OIqN)mSROj2JvQWe3kIHI ޯ]Q1z^ڎ d Rsݗ(N{j 8 \(4Ds!E(钎eK0GiE ,úވ <qCt% X:rv>M}ogn] {L:=qхhvV3p^[w!WuAXZNJ JhY$ N5Plբ:B9F6~Leb fC0E<J(AY*ez"\`}1[ lJGajt\pX鼃f \* }~ ZQdzf\+Xtsa}^A'ԴM~ J]bkio F%4Ŗf!W"^&;5Y)gF60-"|0l9D@VtΤMd g!+M^t^M UA$1mNm%  2S C1P-^/◲3 li}B DN!ħ!͟!~/7p5i?~YJ uP,A vQq/W;XRM_{L\ b+0J[Je6՗0 *?w)Lߕca }7j[נ0ꕩI BI?NՔwob͟-ݳ?-W_E8>`Wtu1ǕH|*W>xA~ Jdiϯ Ia38Ni;}s{{>}Jjѯի5^tk6 nذL I0Mox\f/ʷ{A{WDJ_S"2o_*2ſW">_ٲ ()-18T+۶@1(dJwer8ߔ22x0%4<]L endstream endobj 312 0 obj << /Length 3317 /Filter /FlateDecode >> stream xZ[~_y1GZ Mfd hlVcK$m?"Q6F>̈")~N p3A1MHxy & >Qso1Km9 hrF,.9| />>p('9 Hm Vh\G g>^ 9'\ "uegs 9m^{1=tnA@bl]zu "tON;{렻^ '8M\|hCMxw]L]GjW<ִלMXiKbf#uE Ŭ6`ܣg*N`sE^l\S)Z{4q6B\ ˱ Kof(شk&$[n3 gH"AxѸ?yXn:wB#+.ͺ*Z5D/*=)IX$e heMIc^"nxy<7WEӥ@n%6d3BtEKCV4$QJs]ѢNCYH]E@}0.W;2f$5h 6W$v%?P3 NtAF=' /R.Zqs!{1 sOb'yP {iDȣ"̵\G_=5.5,hȚ^Ui֧bNjP0zpGzqNpA^\zVU^kynBz ^:^ ֱ %,O*bDyzO0{BR ~y}ѐ| 3vU%+c6cPٜrUɪG31;K4rN[!ڸ}G+!>A̙cr<,b^VeI8 Ƣ%ïͦJSFMƈ01b H`ufp( yN!yda <{*h te3I@xہc+ȥqLs bb)561[$,J&q9#c+78k f^ @|8pXU'T?9pwO^&YJx:[)0햫e*$:r"ݘ!B b6c\7¯lr˲c jtő':+gpg6|L OZP1j#ڙ'򌭹*W)]W`pg'MC $گ4nAS'u]؟`U(}-zn!P o 3w;J|w '];K;DH ze SunI j41i=uw:vr/3t)lԪ2n2wӵua7M 2ݏ* [4'-_ZR{=/R]WcoȰ)gw^ًpBjizym@Z1e,q`N7E!vz,SֲR57%0|Qr:]Dq2 "Í% ºumr:΍|ڨ *SqL0T,c y#JDP/(V/ ׿D͋ X/ B0 8łC9IR׈ouX;I8Ax"Du$E%l j||Eg.? Gڧ1.&g%&lyA?-V2`gPb{܏*[ C+1>2xB DLhݧI X^*ݵ~)vs4k.OTT{1{1qrxRaK)ym/G)`TqPR sҩj̲,ȇ6B옹t(!VDF6U6R^Z+u{[_X4FJ ن2Y" #Pוa])w8`(G;kU,99v+i@˖ D!>$%`RUT@e嬴&wASܐkdqem{ifiۧ> t"&pr"(7OYt\/l1H LgtV'  `:L%5(@,:πl1_ UEF<'Xpn)Mz1vW6E ;lfo>7zܬ+3 $6@,f[hSBf|.]I'(TL46C&_OƟQس'"ekKJ3p52Uf# Wjdj!pOV!gB+37+Хiľw@_7sV>R쁗O`jKnǧ?x.f-jME*^/ ci\x K? L endstream endobj 359 0 obj << /Length 2143 /Filter /FlateDecode >> stream xڭXK ϯ]%Jn*=![&ZmU˒GO;SiySI >7毟<~aHDn^oO[65OvoY?xkX]ٞX(/67)Lsdj/<>KOO5XxE"_dHnp(? (*7;P%+i饱-64<7.D/d sm *mӾ >7 EO)(mUiweśo]?&(51GR~Bƒy5'd)fI|oY$[^f4r4 V[z6h/^GM;rϰNU.r꬝KoS|BR7\KUkJQ0Ju႞8#K ɘid}seg1w) q3]M{]^-| bT tiAu+;5n[YF- 8lP0~)6P; (p = 4`=Ih~\ /%j֩""_ KJHΝ"m_$!%  [n8 =n5+U[Up^5 x LWd3\iWN~HSC#m} I͓7GJmijoBȈч7GjpA+x/\)%Bvr'l8DV w)L1h͈Ϯ XF`,J'KYEXHݻ #vMU߿]`ޝݎݎ!-n<Vz֪ܱ/U9s (|tmJ)Ps&LWg♏ok+Ĕ_0) Io9CvMҥ` 9toVzP\VV > stream xo6W1=ZÆc;je0Ye١df&KlWGbm’v% "hmH#b#Kp6R6]$Z0yOmc jmi1j4 2pa2IHd%iuvfCU0[U_ietI.\~8z?mP1| 9PrB2*DP) u5Twͤ2 Nuz(/x(llkC| pjcd?G5LKߧ3Qŀ9,A*[or9p{.fz~g͉ڝO0 c'4 ͇E >$Yhʷn)ʗ>?'OA>MS &1}IP*)T}*z^&|x3%}"OIߑ[oOs/}ʂѤO rOz^(|xt&}Rdo;1+wtUKd1ZåAOK;M X&vϳ?ql)pĒ0زH#Ǒ Y.1 ̓,3́em33cfh{A!(ۇ싂(&n$Zm^`{ ze*b!== bCi+&h4];bMz)TcSV'ޟ`{R\ҏ:xYMlb< 4O М{EK< dMY&Iͪ̓_2=Y'>!1$G7gx Ҋd(h, Zmo nJ 84|u9^PnZ Z ̀rEn7|:?Ktn w㼨Gm0<$U>Ly2Ş { endstream endobj 370 0 obj << /Length 7545 /Filter /FlateDecode >> stream x]K$qW1.M/*¢dFróKj@U]=[mHܞ+Df 8>ӧI:ia?B,:{ 0~YT  Bo?߅*O7x'gp\Ҍ2/*%'4 %Hb9pJUYfUE Ps)aVYnD* \nn*F4TӋv"UQfE*'R Ǜ%ZUXŽ2-FH9ժ"Lb9~JA+=Fj5b4j1\]#QfKt҆WsW0ZL~_+/,H?ׯ3fB~H*\ 3ZRU%UyN^h0I[kW:(Iv@*\ 3/RZ5B2+ҿAI!\yWٹ X$$rUjeԤϴ W vA3f2*εpuŲ2fr鰞mAg$r7h Zw0&53ʊZ0!%f]) C+K k7׮•GC` BX`a.ׁSr!#2b\Hu]fX.V>]fb_-v,ªGV1L*_N˅Tj ~YlB#2cY.Sf)Qy,3r10Yf^&c`U̼ L<6˕ȫfyyl'Jc`,fylGV5Lc\y cQ5<U`\iȪfixl+W2*00Q78l+W2*0,W#2b\i jWW2*0]}Xlb`c`EMhċ:c`@Q~5ydɄ6CрHM yJ*64`eZ*0ȋ`hċ̦s*0ٴ"Siϓ2f/0 4'/2v[>ah#/+7`YRgFHaIm 4MlЀH:F4mxG~l0vydZ4`yRg|YF2/4`Plh#OYL0 ѵQ_ C@$3 om馛'un4qZ`xx[(v[s[xq|zw+ur;p͜h0no;yL gvJ+ڤߏoOF-' TfV|/G2!$7ߝ p;qoSK9TW._c7$Q CnE)4őLQsuS>(S2V/idM2quwrDŽRB Ŭ^(}!Ě*ս."Da ])P e.YP\i{r E_)P5 e/XP{B!fQP &z܅Pk#DŽTh{Rr<\2PyL,BHUHPB4 Tz]3p )Xp6) gzj c('\J%j)j& g܎I\sꟻ%%z!C^>8%HqpLXܕhcGP9Zrq1ؼ# ZB=#S:g|9E=q%:ZT<gQY䆮e`bN}u0~yxԢ^E:OGVo ,4,)j|AwEFav=2bE@DN?/+W6*jJHpLU*bҮ̪RD8w2쪊4PqiΏݼ;u(l=4U-#Q2ƪ}=9xCiwh czYXZOb@D_۔pO6CŮRF1 Ґ>bҮspEs'îԌFiȵ5y{d2gp^׊rf}QkgcEX?܃%y1,Ybn/WŲNnIb)(4: ì`I؋,8^֬aK}Vh'c!=t◗~6q?Q)I*_keb<0T Ȅ (,&+tEs' A4'[K($c6`̈́gYƻEW*qm^cF{aHz iض$Up'Ť}o|`ƋN.2M⸀M&/"5صMQ_{"I| )e=rCVrV/lzDEҨ3::VژdUf");Kpn"ELOr|"ƔZ0' r"ZVL˖eaòrgcX>у ' 'P֎YɤۭȟJlJ RsIgL9L?we? [y}3ggn~jlL¹y:̧_"EEe}ȇQ`1%! v>Rp)<̚ԦѧJQC[vvi-Aʴy-Zg1+U_ѡ*b'usӝ;%^Uc*ļF0r yd4+*AGɔ5al\2  M=w>8L;Qw.V=T48*Ƚr(cr:tݨøN(U¶;Flլ#\56xTGbu!au#["&?ݓYGx%{:ǶqwO_}HFL7 ~ kϏ~M`Q:I)lG!+Vcnbh: ɢ%{?HK!g#肪hFE-'v.4Woa=NK%ֺTqx+ m"GNF=UkpF5.۲hE봪$iʤރ:AiI>KyiwT%Ea]'١7A.B.&J{woؗ?nNZgI:AmvB(%I%vH .c>7*iH/jP@R =*dnS>H˅2^"no5bq=h-ތӮiaJ{Iq}d\kF ZS53IYK9 n*R 4b"rmٿjM)ԺRBZed)C%CPiEr(p?Ӳa!7&7q 1w9r>j3w0v`>LG0-.%bާPW8RBtDKߨRR?hޤJkf*N/dFҩ*cE*P)J,ۑ!X>~/_4g;ߑ*R Ir?}xvӵbQ6mU11a(┢FHmfa5 >|)ڧ688!SagCq4K\hjax|NMpll C~{#!-B:d)88+;(PXSf-с=#REY\IÈ F:6Oo^oZZh<11۵q ôAf =:C*\PLEXKՠ5 kE] f|<$RjM*պ!F؎ zPa.-`VM6lCGB[O ]ɤFSVc-pԇӿwqo>ts'{ͻWΩxT[ZQZpC-+.b'G OTFC68CUvX DLU؈ZPsvU6o&`PZSV</`zv#qIS\~C"J? Kו_[aftڬjBo[uј ohq&Hi!&x?`13c΍LSL҇AXaKRS*3tf?HGq3Sv@>Ip,4f!l˲N\̂ʛ 'A@=vagB3Ԋ 淐H*hqD<=.z`r: CM Ә.Y7 Z<hZh@R7R>*'lR :? (Q`ꬍ$a(s"6M<hfq< h:#źE&Z@KACO>vH 2,#6;F;JSX(okES  ae oQF ,?e)cXVMc|t9ZFj3^!xR2Xߗ HYihӀp|aURՉ* 8e[%::lNG$N/ILMq{),I^LpF"rУxANhp \$lU$ 54zڍk]: h4 -:0+KV~u^:WP`4ٮi GKh e|Q|jpZ~TWibvͻe!J}mrg+˳TZqYHO1@y˸^e!-u),zA>SS60Se gke:6ԂB;Sv Ѵ%AcSTdY|sQwJ'b+H9Rn^\8kRǾ}ʙ㒪˱ZYTI2DFkWo V볺ERZ0))-"ikV$?)5VQ9<,{jUi- ʻ5^:+3qE }1`UҰG`~[|;L/HTd05y!xCCI(k|ŧMpjHcpx\ =ծhz4&Q 5IqmPbEk͟El7vlâ#M@Ϊ{ %1w뎔1X@*ĊߍS2~~hR~ċΎG"Ж>ЇECIW Vd>[)kMo^c d/V.!^ JfX] 6ddƯ9ɻ_SSGy\p?͇W~Co>|z(C7ot+rʚ endstream endobj 292 0 obj << /Type /ObjStm /N 100 /First 901 /Length 2946 /Filter /FlateDecode >> stream xڽ[k_OEn8$+pR8IHQ7N?ZFZh_s ~<3`y^8 gBrK1KjeqL&eqZMxWN^DOdccyŝ.ƈ xė* 2E(MM ;jB%rLe70Zcx! ܕf#1d~R)|GM;p?IQu8B7Lĩ܈4ƲLʼn%'@Z8Zxebb VTT!$v_̘&^Mr·<Aʼn㗈TѤcS qe$T0/yF?U Ӛjp4 + 䂦) Z`LE99@[2߃KESU^bLVP lj*hs# c̟w^9vYh>)3Xl(WEBzϡ zWm9D"Β"C"lf}{XG>})ZE-~Mxݳvzˢj{~vTg.ݏjo~6oMARZGLtnښw6/7I6kSj7jPPVӀ"z:4 LxΟ,dkDrχJ;'[~o !ۂ(.ZkD) ԗ$χlL68بzy*,2:g&<ðPzԿٛ>ty/ȡ#:f[n^~}c%}2?]ЖA5z cp̷u8x(Zq%AuBF`q3r P)]'ӵD2#Uq_GԪMz@zIQ'_MgXYZB7>gEfQZ]PWAMaT"[ woeMʺ Vk#ի꺻 Yp5uxDZoכF f 2TT V!ewYwdc9\%*wd#!W"ZNrQZ$Qf åE}Jq^-\3fYʲލͲ@>;cd 4u\9E]RQ2;~re~N-e?|\@wLX>0 L rMaVov}lGv}dfUU<Ҫجڧᘇa7$O ypQ+#y~DfTz#rJВ̈"FYܢH5(6"xsNH, \pV]Yν-_߼@nu" `@ՍiH.pxߌaC9{lK00F=%=MXoӑ_<~Dq➊*5Z>JsxC.CCp8 7,Ƞ ~=9rA>q0C0g6?8dANq>6ϣ| >\)a(ztKsY>SY`b1t*R΂U:)x\q.7'%~0G3Gͣ?󰮈+yZ i'q}M2` endstream endobj 375 0 obj << /Length 2850 /Filter /FlateDecode >> stream xZ6^ /^CC=49hmڨ,m-9b7ÇLY7 JÙ< 3pE<~sR˲;xULSCT*{ ٵfUv?b f,cYLME^?dn+J5*;dHyyId6@.ή~u,0[D2a ܊8f9LFX +h&T-d-ǏEށ0fi'q<fͣ]İ1Z3`~HZL#Ki4wWTAf a 2vRjOsØD&@J:{f !۶^]»dDPYM7% ?&T05*RBg'Z(??.HD1aĘF/ 9"waE$-p99'kWăKŤ B~n A}J;cdBBOs|\Ԝ RH˙&Jid !Ay#qv\ VjD2Q7?69>e['aɾOm#fXhǙQJ0f5fM幒"C檽 $fNOk=(|T%Z؅) f7!ιZT<4]-}Y{a}ա3ATzYjW*S*(I$0lVr94ŒDh թVr7mwv%A >Q`n\bnj dhPt-[lᅙE6 l + VGa Hj/&A1+\'Dd.1uG˶y Y V[p7hxæO(=pk᭽}2Y>yNme=v(ַ~yR޶{աRg֛:8Zmz؂ݻ]-o8c@B~StAr]z> &s5z+J?T.j7ԦS/s /|u 'x`M 1\P( P.FZvr ?co=efmsbh DjBCx/K)5з]0vh@rxJ;lڳ˷ajրPu79æ_-z[.[âE&hAGDJ>Ջ$*=j֓4Z9Ab̳Q / UDzT#`9@tGRc+8aT|7fqEalԄk!B%]xŷY;)f}jsX"ųr#k[>z=˺k=ͅV mkˡi}zr' 5p?~)1N ;l6$ҷrUl5f0V? 26GAi*C@/$-E.k3nXq ~?>2Rqcwɘ>l41)it1ٗء, 6 df/ >pO(x’CIO؎= THk oSgZ0⦠qC5Bq)|s@0:7fb7QΙӺI[:S$ FK:Y Lp|ԽKAlsb+`1sD)a1UzԠ2q&rr߿sIeW--|aOʽ S`In,lEI6ЃO'g#trn8SDT%Yͅ 0qq^M jƜ5S,֏j8 Pra &cs>6#dQ5FCtFafЦOSn-7'p Ɠ:%V > stream xڭˎ6_4RHQԣ9@SSZ-eeJةCʒkgwXp/vA<m Jœt,h<$1@塒;- ʣ-n;wþZ E,DӸk|H@ FAOfaB6#y쩾fh[^Y+3\nV{UL[Q1P8`Q824ch!̜4R<Y=R+y( Ӷo<ɦi?Q~e|0}BJHHԻ7bhPj;t ~AF{UC4i[Zb=^KDo30y#aWH%0ZIdtʒ4< u^1zcUJnU_e n+#ۉ{ qH΢ioZv 'HSӸߨ`y>M\}.,l2R4\U׆0A`8WW⫝̸{c RWD`':WB KXx]]hJTb[z[׷8f6<gy>Wp]ʆv/Pmw ԋZ/Lx,i<,PmL 9FքSh!旡FaYŪƐh\<8ԥƂẸD eiy4JCh:M(} ;;6i*r;؀m7 ndnd,Yz'X7VlL ]n5^;:Hc"zv~A$qO`1qʧZ De?h7_Yw ,ѴI[X=WhP'J=JÔ*A_/SE-E(2Wd endstream endobj 391 0 obj << /Length 1030 /Filter /FlateDecode >> stream xڽWMo8W(5(vOMvE7-@[%DRCQ,͇wѓy͐2vϳhz"b>P,PT* %mx\Vfnw )DS n= &L/vǔb:HJ?mr ¿fˑ`~5M9t?gMz\{죻|$DP6^Y~{ bDUQU@/&#M21Q(cJ$j]F֏(m]#&p w8>EDpM4 &SQ?Jw~\1 1?SB1"AUL41]!̙BzWjCzs~PbOG6i벝֍]M@ $Wg$#wI(B{5)~i LZᗬil>7P8>//˲mQw>)+UƬ,3dԝC"> stream xڕSy8T}FBٗ "Z[c`40&B7KT(+kB)4-% w:׹~=(9j)k(=$A2`cOAD'?g\@*DspTOgGLt6Չ6@t0:zhmBc)T= 8Bt>?J| *kUh3{)?LSI ((A _Xx `NA߸G@*CFd2ΣTRA"O B -6om!f7`e:_bRHL!"> $*kBA AO7{}h|`oH!?6x?@X\~r;ؘ ihb :h`' ԏZ ȋ|Ldc@ycV6:?rGaQ 3k{/ޏD;a?bǟfAǓI#ț=DANd5 A*vi4RN>$рS Dm)DI7jx*6@ ;`0{4QA?o(ߚ;uZhQ(I m@`P웽~Aa/{  Q|ˣjʌ$4;T_? iDnw|H6b܋kS6:酸F’bI,:UUG?D?4&`,,>j)Jyh:ghK;N ;2)g$\6{fϫMW_ J*Ϸ 5,+޽QԮWvʴ\P-H Z:lQ$_Y KvÍIjIwd6/uGg.`XB;F98דRM?.m Hq^4Į<Z*NzS% |uAF=@r>Rem*6\LI#7?8Mw ^eк0P$d𥙂g jwhg<7j ҆^{ؗg¹-M9G PwѼبKbM꣠ kqF>Be'p>LW~:sro_]JR ] TKH.vU\|H$k[dWXz姅,u#,b,6e>!*mT3ŭvx$c_ٟf &Z`iy`l 1|XYUK$4ͧbo6񩹒߰؂1y Y׿p8d{"LVOIj̈=1drmc˲ί:2d K$*QYjM=\}WSiCG3Q'*[Cvٵ*ȕs2E3dˍ5=?۴^Zw<61މWńeryP9D \bhW+??/;]P=^8g<)TfN^mNjh3kC!D!OO<8XjS6ݼ7ñ'#ȼV N:Ăwt,,XRGaCbL? ]f2*'齝s:zF?oOESS+xHs:)ـTVp#s1nEzT\*_$u+2oo_A2I4sԣ>@ [>%:RRNm5_][bjQq%Rʈnȃ7|mQFHLg.2w˭> d^)n\¾i/ >_g. ( V$\a{cehxT8'b澶YGRpC BG+/#'8!)2#7E} gx4yG:iׄnbC|*5JĄM\ͩdnu1\lZhJY S)<4=pEpq9芕fNZDX*Y[g9 3{]zi"+oÒK4nu#㇋ܞzε*|!mER~mUzMG ,YuaE;O V9~+I {PR'FHO 7J:ϝ1ޙ&5nubi\LfA<~a\<|?IKP6B2T>qkvd%>o8V2R̢8LVnk>0&>(LO|Hժ endstream endobj 432 0 obj << /Length1 1718 /Length2 6048 /Length3 0 /Length 7026 /Filter /FlateDecode >> stream xڕuT{)AZ@xSJS`). nNPPP;w?f={?㦮=B%%- ɧy EPGa ŸPHQJ(kQc =6`I8 Da$E-`E"Hwb%strl}]-#8^^^hBuGha]b]8~@s0P7(jOBP }_~ EqՁ  ђX/?.uiB b܈A=b u {߬q A@'+QHϟpm (hkKCQހ(@ Q1@B 4]?UG:@ӹ[2Q0;(ga"v?cmUw*p_k2ߓ_Q s!LtGšC0;#  iaH. |"2tٹ nn\PտCÐXD`0b쒱$$o--DcS{}O-TTPe$&!O7 3MX!q@IvIC A6/ z@ßBXyB/ >vN>h'(BXy.bu@^?G`Sؽ^cG]@l?`  :cn6bP uaV T X]nz6E_1Pϋa _@& ĞXE+l/8y`z a?^3(jG0 w~ZV_<puM[9{<&~W-k?5--:mg!n3 Rm*4Cju5إxq>.| WlN}7|~i%{ _jKk7*\J=R>p9'tHZuo3!7tF+߆"M$=Yбh펧3vV3RϕZS\%mxYHVVp}b 69A}p"3Zc1 {iWl lEʮ 86mz7BGY"ε9.'rMio;ZEz _MRg]}k?ƋU#܉{6*m-%eBk+C>Z|'VavESbT㱟,[Jn9W]Pf^UNIx=f)鲦N%4.6gDD&$:~ekD4v(Y7G[VgR /)bδg6Z9IVG Wax)L*<=UkxO L3y{3 #\Xo 99Wnq \6\Ѯ:{vd*Ha@)u"dhx-ejE[ V KQelM;GwuRj Lgh;/69:]贘^Ld땥"xWk[w͝|/ *[I&yHЌ9R$z}@GXIl"fauu 1J3nj4@/2x| mFϨTGceܣO@QE܁8z;t>VcE:P\!xTU4@Hs;$JwKB ^ 74Jih'$[+u[ޜfJ[H̕$BiFtҘYּāQT^Dݜ|Ԋvن5Qשg|n'3™G`愹<+4ˮ J3$j姾`I\@VHDlù)S)ߍqAti c6H>7֛]3 bHn%kwكu]T~(m4KR\5{.Qmk0F{b= p.{fL "Cjy\}TzXoBV?W7vǻz{ 8Պ"ꆏ1̬7ߪig;Tf ȺXs!K?}=o$02Tqh8 3`FGpLL!lP'cl1UWɗslDlJC}"w^%k֐,gG^ |.P],p0mS7QؤQL,tb+MS]\iL{^/J|Q;sVeB} YnǸq"|-KawA_d. .9 5boPKH|+.~bq xI7)gw6ڕm^~z*W_|H1~Rx~GEW %d=So PHQHk=mh7+WSIxH6HQtNkgJI%|_T UqU7kHw[RnI -Ɵ |k4BPFVgE&w4K24 ?t wt JV{ZrR0mKΥ|4QTu*>c$x'5Qxb *E? 7q>hAu(ϰT~>*awCBcsAǫ٧kTsUEC_c*Ah9-A"]I}Έ$jm;yY銜KO6=P \ꮇ\ Zŵs0>`,,"G@R/܏#kV}/A,ROv_d|٘~$Kh)/z  .Krk~i7EU:OW§P8-Mx>Pų׿%i(e¦Us̗Px/9WVc]d= knxm븗ZXAMֺ0:?BT 9G?YdZk*1tKE.)سIS)9aNx,1 ]x D`Ya1vsQr^)Ӫ(yUdB̢6kc-[ilꛛ7=馿JifI4vL+Z GsGJΈVey"DŽ>;oუ;)=ܥ ZyoPB<*mN cZiV4"#bS,,*ݨg AkEBgeZ[i >٤m}wVgqR}|Urn(CBoeV֨-0xDK cLanr%kgo_Or>dc}j}HlJxtl̽ks=uO0&1`Bvy8Ne*lzwcQgbKg'Jb)S.9N8簹/vDQu|:IeN-絹?.MѼgdxfK}NRVKG%yVa{O:ɩacC+򋚌erY]4)d{ ʙ$2  2D*̳W:cGEYOy TE&dYJ/9k/}8i1y6@@ܖEn`@:-Sg1wʚY?}_ؘj7ꙶ_N<[@O(n'ӕ b+P\fTV1 U)~NVw)Q"O.l"|fQC{{V9? J7 мT=Z%A?3ZO>ฺkn](KؐࡥX+1xjlK٘.5ɉļV'+A,vt̆7`j m,^a>ѬFb6Ƈ%)^WsOaA3 )k>)Fϥ(ACHtzVTrDq$I6WnpO$}/9яݪ|]|:fid]9!gçkOCs?-nQQ}W@r.˲0cG?^ҘFj(tg^W3c`N˭H|R -[E dˎ]>VD8mN#ISQal+!̪ _Ggmf\Wַ:B76McRvCVfEwQ5Wԛ&j7i(zM>r޺HB}eϋ{ʭ>FM]9| lZ*בڅ3aב]g-> Ww`}C4[qz&|ұvg%TH$*NjlEw?KKW*0)čnO1e2l,y!$/G釫Tdz'=D1b?%U3!|A+CNLLr ~I'K>XG\B,lI5&D[SZl5s ͠1o5켏+1e 6ydoh;H/)0 ?Q8N"5|cW3` 'ޘ(-x:벉@ilj[Xzl0TEͫa|Ooa7"MqiQI؅|yAqoG˄+2hEuH[IGX]kysΜחFc,uA1ECkɠ➐> stream xڕTuXk>JI4^naY`qEXD:.=wugyMni+%T@qyxY K[j p&^A<] /'c &@-r(4[ #]>aWDO@LMD:2HK@@@(<Y#'a,M K8PwxWWW?We ]O<@9P' ԊP"hV?l^>>>r..'kbGKa%G  X (VJ +_Xsx?|;dD-HP]O_s##t<7 / BiZ#W2 -o.`sS#Q0`51c^A^VCClOkfaFo>A"O=SFYai I҄  ]auPM y˥k ₵z-Ia&GRasnkq[vssCr\y#pbj6B4pE ߒ^*NzG2Λz{q d(p9Jv߻$08Lq6^'x)>̀rʮ{Yy|@a{1uDA32 |*g\v;߭4?HܥnxAij䗊~]aL깟}\P .gGy~ y2ׇS՜nay=s-cRe01VBccQ*[θu/췽xr#1|\'QyI9ջ쐺Eg/ na3z"BlĎRH{',wGn Wҩ9G0mF3g>}nUƭ l7=MW~鈫 vاύ<߄X5"n%-';N ۝g0C065cx;" t*8F?C0MqIdS3b3}Ͻiƶg./|ض #HM{e +=AzMv"]x}ұ;t#w܈0=%܉Dlmltr6 / c *(f/ȶag ˮvV_FKB{إ}?|p8ݳXVK[kMPYx>Z|ɱTkL݅UW0#T;wg>~ݶ۫ӄ嚚w[H3,Mi'oeƲDq|q"o>mCL^*8'x?[ xNG'^L>P<xNt7$C+,r`[s=iĩ⇧,_ QTz׊Jޢy4Zl' aOM7KTx߮eF&MO3$L Bڀj)$XMU2xEpו"@%|ᄔxHB\Y.8W.͕0UMtJќWc"JӦDЇ_HQ@=gȃ JxfSQPLrI  4gSOQbfP4"rnCe7P;oWQyB~2/# WF'd6U1Z;S[ș3 Q;4Gw]fil7)ʸ[YyR/7V&Ɛ@SBm=:#.^Qdj=ktkݏsRŋF*D" zIx_-QZH #g[HWZ.>nqU%w>IJuwwg̥䭾µv*<BxH{*GKD=dTu&.j4bd1FM7bx6]jY{8feUotQo;͎ϕS˕ wU!i2&on9jm=6ȅa%u5@">:U] i(ީi.-L`6 o}6Yu<`n)gNѿl~ij#T[d{NM% iV# FingF:f,t^|Յ-Q}{ ٙHd'>/yM+.c69Ո4iF ~f1YKn lC٣_阝){vWv`f a*?)Rnؘ]rqXJcrtWA,PZd0&Vad~-'|Q⇏\ :E20̔pwBQ䵪^OQk9O=XHYfg1}aÔ+ Ia{Y|!8y_=VNC킧"9>&*'5w͖"<8)Q/o} Y$fύ?=ӷ<ʏd]9қhD޶7my+c[\Ŗd`R8Aw]FdrՏL{SlSz9lΕA im䍟[C2s 2XT>ɳUC"Jt4 Q|O}b呞>gGL`>bɀk3J ZߥѱŝI,<5˫=s˺zR4U­cli| ;V%9襛&9I~{ؓՎby)T0vu1Fwb YPKlfcxe}iZ3둣'jc[՚z*%9)*CMֻ ؎}>N9o$Ns\;%W X*(.e8k,oUﳺ֦B[JVGX/}j=foy KoG˫T XQ !%K+]f+g`Y'Ŏ]"$Polۭ%XBn}< mҺ)5V}/& kڻ=:~ګQ7i@ dϴbu9xkbyR#m khK϶:<}CDOa\/-tYJ".ТXT=B F_ c"(U XYi6e cYjJJ!2 ^r!M_cҴ\},?֚.R4:n}a2?ŎdTރ0 ̨3oy#j[Gc%'2|K:V֔3U{&>f,-8E]t,ȻE=Kr3o OWdpx?wI옳cL[.~m^drҞ`sYbщNdl-zh|Ǩ3֌.|A+=["&=ޜ0_HAb?GRBz*Wk8זK`&mQ+EbK4~tͯ3_Tp&n덐lWD&mO@b?q( v$)H"dejjDr^꽁C|Lhk -ZASHܣv'#swh͜R^9j dYm׬M;"gXrc?|rns2V PX2> hٹk=QkNqL`4O!cv)lwt\qIj#4q)[r|sEOKkٞB&f_؎^Wh@E,lw`WSHGQG"U@.}+>!5Ҷ.D^W&RX賡MK??ܫwV)_J\T;pP!G@k0dLxC)j7vyӝݲT+)>H'+Sd 4"pm0Y]*_7z!Scpƃg ɡ]Ǖ.9$ZdIq}9?.HZȲRLr4+k$wٽԍGQeLաv+eVW3Kd::טo*2V흳<62+O GK%!dsЎG s?0ո!;']C34AyR|,1CeTWyircgH - ݤҋA-r Ւ?6eJQu>\qY"-̝~f'Y %Џ8%BUns6)ת!G,kAs8$P]INJӃwa*0Q6z Dr8iWKXʼ(7H *ݶ|C N~IdvyLW*h;ȷ%%3ȶD}4Q|Zxɯ,Kvڇ9FWlWE0)]=miM8Ѫ˅= e{~Ѕu+*UzYEZk݈[ ;qr-!Gei# 40/0Eg c)ָOU* {qsWmO>Uq`d,TN5mBTZXc΃~֎$ٕ0J96k6K^PrM+ qblܱg3i<} xEHRQ8 u`0,8x\!Q-]<_;Za9( \_l_-{H0H5d`{!eXձ ;ՏFɸkUH&hC+mw?]ʠ aFʍA"u9*mj|/ [;c͵Xpy2FVO47y%XUk SW#,A,_4 ҥ{-vl=b3rSPկ6o_\g !4q:evZ'3WIʘ\91d:O?kǷ.{H}*~;RN[5!xXΩoIE0.θr7mĝuQE})FXt#mAFWxڴuzܯ ~kUH!-Ndy<~(ȫoy!Ҷ|=iT\x%x ĮkfITC .swR; Q|SptȒ gʭ?̆(y!} h[ӪEUoYF(?,O&}Mj)I%m~7I%50yqȍLƯr=1>h83i(:h2ii:euN|6RjP)\pc| Z<=l]mim;4>CkCo-ľD:~,ҩMŮK!7'h*Z+E^ySU:T<6[/ڋ|߷OzAkmÅOɠ<[]%Oyu:׹/b0>df4Đoṿ'EI9$fK=(ɾ;Uy +S IGJG< Żxva,pB%]zo ² Ԟ%@ֆH/8ޜJi!s6 FQe Ag'6z>hdw ܘy2sQOz-b/{U2c endstream endobj 436 0 obj << /Length1 1759 /Length2 7081 /Length3 0 /Length 8081 /Filter /FlateDecode >> stream xڕuT[n@`nn`!fPPPZB@Na.)޹W}wZ~|f  yprr`+(K ;k A<]俭x,7w(&O @ȃ= ' @|:p+.E|Z`+'8@vrIT08@iq qrpCܼ 6x,% ↔o~5Ff[pEl2qr <Ȳ`6rpggd1x `A+  `7l/דC6pow 3#_$+ s A^^a@TPmv =gvҀ{@!A/oNNwoNx䟃'Lul j-suW@l[;u= hݡ LPkG&WYm0;CI^An { C.IkB!aoA$ QECģ<*I92/AfM,:IY ~(; $ٞ_>U߄!?5 WxAH)6 /Y?gR-돈pO?.v (!I^S@IC:rt s.*F&v kywAgg Oʢ!j1bq%u~_{ qUMu2͸ߠ^b|  J456)5HBer0v2kӓ)fagUu>oD <6==gKŎ=-iaJg &Dr@fcaW9Ž'_9n_kX ȑaZNrRsx@by-=1 #|E,q۝{TfTj+!X$NoO惶zsKaf/.I rTm(%16{<48^VSq:Xq5{58UV[ɛd}GٲgaMzDF~aAEvp_E9#z[FOO4a]swfE!427תSx;WWsvW^182TwIPAnMGɋɼ*;3-V; >cdy )O>zأ[}. bQDћ'0ZH:Q)b/mf&B=݊4ڣ2Gyk>nR\#֔zz';O6ZG•ȘI\z֑$p0i器;XTrMO\{-4]:CW,ӤHv::.tt1e4C)ϴx~Ǿ37aVь%B'qa]G,$b".?Ul~ԬXÈ3 @ by :MpŒ .߷¥\LYEEOF c/7 J4\P9 O0U|3"f<1_5(B.{@S,n- '5Yb1ob˲ RL B k7ٙ.Q |Q(?t~i*K[\n,xK1:ę< >EGwkɭFB<m6hUW@Ӳr7C y[ :xwIinu=jEhfh~/K^審ONGt&{(>أ4Gޅ'Y>D6&}SiNc ۟ b|_br#pzoAUs9!Vju!h||]ŢUt[bB]F/qZxN7s7ŲP"?ĔbZ2X{͆prz).ޥ% $R@2;Op US(_II-W]]+v,g^YKUSHU0;2l$E-:u:G>mr~Re|D܁cXG>>Fh I<2@5. 8k`4A1ˍ,#å{#o5Zr(Ԟ,\h[ 5*}F=9WlX>KIu/wq&8:Ui1HUC;h@rA碚v,/zggiZl,hT7t)!Dd7&[%Z(BQvՖw,cGsɩ|$XYC?KoZ_N:DUyy֬ BxX#ҭ,ν҇0M0mjJGD\{H[w{[Or} F?hř^.5pF\{|jNrDs95{kN#TPY}MԯٷVC^ &we#|>nm5* '&e1S)\eӽ_{Tf`Ov8F8*ާraPz͚2o".:UaX}/~].g["9nyiAh&jfGy"VL/?v{.B]AWjٹϘ"6RR*;Ҍ|q`ӒܻA$zuX5ίZF_Éõ T3b0xvȄ5ӧV.7|B V-8 xU1驟JLq]}ݎCsJ{CaTW蒰m*krL#G> 84ѕxUJ9@gGGQLgZÆ7 @6##|@V3 4KmKc"VIloS/]M43/ fF }m%/(IA.R;ku|bA7[Qja^nh;$-bY 12GBOj*7-nv|}:D.tJB6~<4S67?8cm1H/3O΁7à顗:k&_/tWj(k z~8|6JXG]{cu;(Y]Knx |*CÆ7c!ɀ/M}-D?x%I WSElgJ$VX?͇׿F)(&%X٪2GԩP6EG`dr*_A;BfML,h+sxMrq519vU1>WSz _9ZM2P4117S^98%डt2osKS0u*!I CkO| ywikDRhﴔsI3mY\|POi{m&dࣁѥvfgH _}YS]fzO}΁ :昕a^{uFlشu߻NjdGR u{~-)D~7|H@D]!;o϶pg*;Pspc/زV=V(*ؑH/pf?;O:j^cç#[ >_$<0"@URB:3~DMKҳ5EZ2Ju'>HW!V5nTܨtpZA#ϓ1 mL~ܬMO LbB{3ZL ~k-2ח>chظug#2ù̂iMߏK% z#>Z1qw}%*P<9-~3ä٫psu0a|^6*ֽ,|%z [Ro/`}HoVZvDyNX⟄ZmR\wn>[=r3wܛ`po`=ۻ7cT/2%{2bt"[OR!tamvjdxJ'Xi7s"p*߈0 =l^5\{ݘ8s$<:t Yc0Ld򰚤e\bJRml;gKT8׫e)fR/=)8Ji|e: 3ddTj+Sq'8f(f9@AnWOGWq"6fWdȻ$>s%4] %uqJOڛZj>-1זR43NdB̩"_Ћy[;B m*WNg8hUM$cf@o/~іl?PX(yL^y%ɽcDmĔǔ™`yO%QS%>\&a/U|ǮanQA(2[9PĸVq7~c^lϤ]>FC|vNw1''ޒ"hW Ყ jg-& KS'>]W,~|EUVPTQ8BT:R'Z|6-/-O:)^ė{Xg2(J}_p<`ا02Z}XW@ 8`i‰v৩f{T8&_=g.)4=1Y%,. Zppj؏1[N_Y}1n&Ed~'~ lB(!4>} (I`۶ɿWɯ\{v.X0zR߆-f%w|'C,P]V :Ac=$`ӗx..Ȇs䳀 2P$_>Kz-W0NM=gr }v"*aimEfY5\0v^gb 9&K\ q64/2_bkIkFߒ VL~ǜLXv\b뤛&)iQh6@Pv`ކ<:܊1g0 v1Ueپ$؂am#)!4>Af[ 9a/'}%w.d:w0Dt< -.M&r?2 ,( \, a>b'QJ$bٱ+#yٸAOwԞqScpP{=!}PZ(&$ u +NzUGByjbTNSӟgyT}=`]f7<'# *Hg=c8z{8(p]%M6H/4ՔhXy+~4 ۱ @aO6URc ^IxS}ӈYg|}.Tg$eǻ%IDyƠ|P3Ao7T1& ;W[8x6MDL ~+mk+ ,\3Omcnv,:=(Kd5y#4*up\֋ EprfqPmq:g銼{ʼW.w@ pln7uplqlbONnMFc$ހ^\15}b/&-'MVZ:|D$nX".MHiuL?H7y8]_9ϲ2DQ-1SkL;VkTґsP Tybo/qh)t0% wgvء|=ϱfl) zȘۼ*͙E[ D*CM*'c@ulw D*яnԹo'#:dSZ.3e ;n@x k>I l 8(o+些{YW /e̷?g*=?X,SJ5ۓ}*30z`ѢGWbJmzXQE8͌`f7&̠tG] ƪ yjuÂX=éڛpRlPeȎ s&L-«cVindF*8׌ByjsE r|(т <9d"+MvBʬO.zl"[0'\^O>'"'H앬 nF J$ `a3p&y&m9o}@%RԅomxGQr3lr 92vDQ=ZG`ϫ))&,QׅZ[x2kxʤ)c!W {ž>jڹ` 0SE^,Lҍu_:bnibA ynHij?ayuͣV'0xI'֘tщyƛYmO}i5oqnR`{lq ] Q;,XZl#AX\ !$d_DNE?A5AQdH^5)Ȅȓ:":润MʯN[{&}_*hQS`\6/OCIq 5O 6š;`CRA-s4:"NXooDbfD'_fd߳TѣkZm^a0o&A7%z\`c cg~ "_!ITʨvoQBݳK工eP:I 1fe8v i@t#Um\(3ia{sV/r vl7ΏB>Ǥ`쳮hl #+VMicڷ=,g~y~:"˖a^/Ġ~- }k`| uMb lQu xkϔ wd7nwIG 1s,ZP; +K{. G[;[l '<>QQ^eلiFL(lDfBP1F&4zóYtm]iz?( endstream endobj 438 0 obj << /Length1 895 /Length2 33543 /Length3 0 /Length 34049 /Filter /FlateDecode >> stream xڌspo5۶wl۶mضm۶wd'9;w{Fݣ{k՜bE:!S{c =#7*=='  1Py#[61Lf3'?LSWNΖvDJME027Q@D7ߩ\,DƞD6DD660 ;*ڙTNDfDfvDNo:3FBQHR`p2!Rt54[o'c6Y}cc\Ľ&kLe|42V@iW>\NTmW,f[ϧq e-KE+g|n6_o=&h<Fu\Clv-j\/~g%pX u_F 26HA'>rh;a͢ v?mO3x;Rk7lBlwMb$Wsmgq ECr 4L heey n}GUpT::۷`b.C:n`nף3pr|7c(Ft9 +/sCF*͓]xQk&UIZy81A!"~T6@tD=2S`I!>bGG#c2L-|"ӔĐĺ YҠb-NݽS5s BRqqF>9vxXb5 Hz(uśF/^-fd `k{q)nSSau/tA(1+bb? ?1^*?| Oj SV:c_" V櫍JEo;[ wCGj+7 ۑ,K&u956x2>?PyG IIψ"c>G eaQg>8whu(hJ_:Vm/0>}%Ҍ2T:llVt8r*lRх[tS0^ݳKVX{o/Z\R6jdߜ]5y[1;UOɔg0\C]y}Hx>H֋ m.ir}^EЩEf`P83QI~5bI,>#!&RBS դ븪j'ɏLHs(07/CZ̟+_|$*c?EUfKr}dv2~YVa_==ӅM@^fM-`Ѣ- HOl[y(y,*O^ϐ}a6K.PBhW2ɥ@N>+s{\,?^A41o R.[8E@0U+Sx&T1dbଶNgrSlس `ydKPT a^ԦoG|)C"sG>wfh;g'. Q޽WOPMdDCl{m+0;@Y٩JVNƣpx1-7|P |(/|Q$#z0s@NL؊QҠ\5 ˌh BW kiO*ecTmd{ҷf⦔w{ 7:`Fdf9 nN?څ.0'—Y.&{}6״)*5K]pmZ|O?ܛD76r -]>Шd=Qdی}tVPyVXayŔ*Գ4'64 *c;+DqO\R@k$~(yEBWZGE"g<2iW+54Yb웢^MVKTŘҨi/=\n]4 Q%{ގUySpΨgzf̰e$*U%Dc P;I!$^+\=6OOW!ǣ>r!|G rɆÚ9 pҎlܙ Z-u3>͍CTdry@ 0$K>v2!;nqz%shԜG[ YJ6Y}~k.F[26) SYʯYdJlQ71 XC4p3PęDG2V(eR:BR?[?ljs/&Ml҅2J^y5~V&Y;Ysmh>ĦUߗM1%`,g ( PDO|& z*DuO>;!ٚ/sj,ڰk%wղ,]ўp )/^38,񊎂OuG6~sdUF0@aZ#dք@Q,Qy 溟Y| Um$V@ZΙ4.*-x^TW1m)dc8XF^xc4J6$36;?-S,D ;3,xJM#E bmE{]Z /9/!yv,]=sv:?5Jo$_q NQPLM,lo3N(S:|JkYqNMJG[~`"nXšr<2'eGqy6JZOQMcy"":i#H//PȚJf|~$e>(l}YQ6k_زyA+RO.4?O׳9um̀1:@wd]&0,&*Wƒg`RONnCt)'|zlodBʺʥX8ghZ'rc)f~/؀_ryTro7a4~rL/#6}xOq3B-&;5BqA(cyQ+a~i՚ifPEp͏ ʥ'ŴOp 2DrY=2t-ҴO}I+u!b.f"`從<Ҁut<"Odwn^:8 9ڧA.ߝ@myKt>ؔ9OdK5PS4kG۵%8?}0omyKIك+$'=ˉxM6o'jOK!!e B!ApeY?1Scn[`xAc\-]t[~a ݔWGӌPY#ex5e/GtjZA懺Wl]rƏjD{]~TLn,N팋s2HR DEPXs)!.qW&]!m f7aV h|%Ks/$W x9.Acz km+)K&[ͭmcxp60ɯ])'&~ŜƁ&Ԑ20#Gw%gJaơwsWL(v Y /ڬk}.l fҚBs6v5 %j?Cu+r x7-R{Ryn\!t. fhN+z@n}Q̙¾y\ đ5:9Zb a͝xfme1#l>~;'{\ÖsHY=h}|su{}A_hBv=CEu}}ŪϴXuikxTZX0ЮL鮂-V ѡ!.? NdbUdLQjL&ծ=ikdysHmr8zLVbWA}GՏAvpNjp]Gcjy}ʕ53Rg݉FHhʯI~/K"-2]wHeJu ?0Ƭ|I*=:q\"5l:qH11׏ӽf K=R.NȽc5a#M@8 Ϣb $B,DzL8VbYpH?bni̖-?DtU-0^xZ܀GtI~v'*n"Ϊ~$Qg$j XuLEigv,K`t~7%ҫVg;ή(5{rD.{Q,)U,z(GGuk{r.r]y&Ty=Ǖ \;(7cXpRw@2GU"P+\-Ұ$k|4&wƴZ`kj>Qzz6:}&]*(O ;N+ _JL'$ouXKf 3£=UutSrv%9,UߝDpyJ[ucN?` ߓ_H점O 2wﴃ#ϭ1;vHL{ׅ=%E3dʺ㥈&d*n0GwsN|5E M޴l#438aQ;Ҡɀ(V(X66oe`6g~Mw1#6.S16r9 .ijb ėwil6̯^Y懺L :;h #Ȏ6$ #7Q(zj:Mwq@}T>Br c ;ůeoJ}#a<~#<>.U0+vI/UU7s-s-;h+%Y ̑ufR+(vkrr)q)O(qOuN$7a!Fe];B0An .tfk=Am:u CoL[~1 ǮE1tԝ&9 ʒ ]nc A(cp+XkE='= 9z;o%!-]-Zxi\47XzzEafIy@i?y"S:>WbL_w4M(Y$}߻q[H1d$6w*?kx_0wÅ`f&< *FOY;b1Uk8̋V&-{` dʁ`kEP*j͡tW%Ǎ ]R/||+j&5GՇH  u6`>5 i-F/A6-wHj%QEa"O} :B;󥱒uv51\r"&I(8)o1AƯUlKE:e,Ae<-ntf # k!O+/H9wOtJ$G'B!Fvɋ`Am ipSso]I]V'ljpK_sXc6||֡rjXZowKFÃ7Ry(2,mޢrڌEp*8n6at~Lf:,GzGpk9=tK3:5K-G6Y |FWI?tbE{ F/F86aTQO (ߖ-jU3w DДƉ4nS5[BTfV4.0ze{:+] "W-vy#\d,m+ bSHʵ]} :N$<~"wtif7msTH?{0& XTY0"ŰW/SYD 5+O4\ޝyL ӽh@/7[KUx #<7y8xZfV 4." nI@ 4q.wN:+ =y#`2Wَ>Zmc~D3ZV4;j.~aJ(w~ ;{QmI*kC~:%"1 MHŵ3}_yWׂY3˄PG\ +|C7xdo/[(>J3 -!MpRTV.$Xs@JE'ςZ\8W7@bdi- ʨ{uOaOyHyXd;VQ%"zDyi# m3K%%ix٫:a<'C';0 =#x( ?5.Ro9Eʘ;~%wu3^rG*@| ?UU(FSLhToPQ<¤! KCMP%ɂ|rM X&Z9qCmFjP&tδ G@UA3z]4'1I:JFj8[X]Ghq9ٔ@3$iK_OeLϔW"N!5xOK<l}Tp(Vl[s)Rb/}n\DRos V:kzdvoeywcB<D prىSo }QAһuȼW|Hzep$o< Ӏq@ʀǐ!rjWX!j'|0ŭ "aagϱ14,}#J^JUHܸFvy .V~yE]JY]f&h֨R8Ǣ ,D h"X!TM ()H.{tI ҹ cKG+Ѓ)A0>g5w처7\&`{9Z܌ӏEo;r9@F~h9m)=: 03JKᰄ$V_G y9&}"+N\l93Ђl*_2ņ »rh焬:ŰS۳Kwv<\hg2krs ì$=ch!+jqY+x]5O`E}v,G}YP PlaU'U8W?xi#o?u|8_jF_?VG$fY&d{jb8ʈ,c_R.L܏n|*`J@;3NLs\Fn>mlf ч0[,Ǻtp"+Mt%D6VZz{_ŹGPE[Ki7ls3<=PO^3LνLa.gv [UalYυQ vDXs}dȝk)3xtN/S.(oCˍ+zPO4~tROLj֒?r ̰!rOkVnoA. 7k@kB[#',W·<3bҼO@ [@mnbp8S_L.g $;!)dC4p#Wfb%axnn4we)IJN]=1˜ g|gC/.UTUAhdFLHϼfF;rj7xn$! Ghg5~{H(ݤ{Cdi8qq]G&[1$\#Gxǩ4σAJvL6] ܵRb7>U:IڞTB=TpIyJ?1PUj ;g1^5s<b= gbHpFd :k=)r4ދ+&ʇ&x_I6=I͠4aŸ:ql]ޣNWͨgA}m7}aSXzD=TA3vX%Ec\tU6Ĕ%j*ieb,%+@ph|Ω {NlXD+La L,uٵ-!@75ͫ5ʻrkWӲ7BFH/"SM G` ~GhA3iv͗DN /4+>]W.*Qx%IwA:XBXEgµo( [ܫpJ@%,ռr:; Vb -J((Si,C_oT)ȺGY֌VS'{<}>sP3840:N}Ҹ^~ugvpH˝ۮ YZmWpSUnmG4){~ L"Q;]͂cdTF-/v0;̪B ^֟j<~w4IЁ:*ͼИ5sH!ɂk#oi? g2ki1a͋@ 3RO[- {'^~re\o[p]sf|b;Jy.O&5aj=)7\_excu{#)θzK8ZKkP;-Ve}5OS894W;Pz ]ܱ{;7P S- VNukNS6[{*0ndzbv$aQ(<"ՖvFLq/hnj1VrX^ŷ* OCsu"obg_һ;"Ā/2Ɨ_i-`ca'WM21E~) t_FDO RE~!>vm&#`,8"%HRxIkOw%D Ys{NCɻZ\&ty˯preفHcql%LgHI4araBi[rOi+,o%$ٮ!wC);CϻƔh}]r+Bbޗ%ڼPꌈ{ħx"gv}v8iS#mI=H*J," Hlh-k* ^5f-`V$jtjY7POw)Y^dN1i`~cEL31Dtח~Z4f}ܷYH*v&4ݶ]c¸L5 Airp1FRW 4@]l wљ ɻ +9𲼌Z4pUQ'8ҧ(37_3 L`G :eB9ć.zc$V *x|:V]@^Ls/ZzN krt"|&W\mwaýl}exd*@`T6fq+-r72%m.0$p1GSFjŽͪH vYo1犓HOE;vH7HK=BEk"$+pGly)A 3Go[YLfm{n6p" FAw5E$ ;O5Bǯ 5Ƌ]Y bcf̃*Pp4 ƾ;GAn+@xͧDd|9Bwow@o!. C7J.pSLl~{#c=G (w(-yb)$ܠMajʌrI"7DonYްMP3Eh_藊aCZ 5-5ISMF)Qm@^>+"2yԦ`I =FޞkZ+zvBQ hZkqt_~ӓv<NoQrjb)ZgyqB$FFo4cz_# <)f;ZEQ1FNoH*='ZۼE<Mπ=k iu Z h>z?g5}mJ$cIPې W]0Tfr* j*nI#T0.8gPT2oj W:έ0z׽r`o+ >\YYx3 [)߇"#0J\DęGE(N7[盯zJݮطgɡjj8`jwy=ASeOVS 0y}:2W$;V%Mpn t6_} I,wp1.SnDT=be8x+Hl^w``wԊFQ%u+#[tNX4ɗ>Nqu>|/:& Xfd53 !dMK:Q݂z 7+cٓks|ufJnPڌr:9hTMccc&d[o<27ZVTٺG=߶`W ;C=EHQi"|e%Qt5}X)qxuS!?CzF9'}Gmӯ5,X~oC.҃PÅY-)߄٘\H$/V1B%9kИ nT"d5i<%ƟM1r J"։Q>92\,C< )R9mIZpewZJN* y= |9j,r+Z ˖+_W \X^ O ^.4h N0GL 7ju. j9$6))Qd}ACA\$;.NwX' ɻ;" R6֟Sú!`Qp3icz| Z#=љ-(΃;#c >g_Sӓ7|4vDg 4wW{}4!Jk+K NevǾM-zbB-(> _֍Sg ǼhϴdZ}p5~o(@ ٗlQC(@b/# ^ jNxʧ>.TW'ԑDC%]LQXz}7Ϣ{5mK?pe)aL%KXR  .dk>T-}M:`؜v+sʀy!ЀBSWǿžeHmAD~LXfXJ b 3gIA{'Y/w`,!yP5h*AU< Qى&L˜!|~SqlaWO%nPNLVu):AB?MU'յ`:2ԿIPk$qDXq|w_qGhfEЉ zcB?^T>D^†iC? U.hLRw;p)I"g)6OJSy2E1Z߽SbE(N_(jõ9am۶m۶m۶m۶m۶{Id5d婼Ue," ja 368^waa#Z9pJGZWS;Ơ ]xPx|4A T3p/D JJb/ )@E>G فc(66XU6qy?Z q @寝t2GT,"ᖇy`X0y鉼U{o9hwoG B_<ŠT}[y(gNH"?hoKϺt fu]%\I4>hp-|@v@q<&v̊? (,,M:a xva=5HhRe R3pz*ZJ5RQ2@ͭ6v3CrQ{ЂH05fasC~;f sMK"{?!zgg<P]zfv%Z6V䙔bӦe< %'М3.łsOoaz`EC\dBC6ғ*iS~sԠL{%-ٞ.z@yJ="з"jOW^ eeC' uU; V 6B!_^ux۠ v,N1mpWGR1Uoj){K_eм4`wRH-H6![EqR>Hhk[գlEL?p fW y+>TH`BL< jTKz)Ԝݝ4>fjQW2d8/$źp !F$yrXVV5ݸ~+a 9.5Z*`!N ~A! /)7Sp{awX\)=TLK3rvEr(^FD}(O9NܝQ Bkx_d0\}irl!3劣RXy[VR2x@l#^yoM0NmhdCvqQĆ}5MR8Lw&].y"WX)o\cP}vO$&.^qLḧ́av\ wVÁLA4{`m69 w<>0böR*{TRN}|Yjϋ@r-%-iD#-,iUi:Q>_rƚ~GJ u"+KjSO !D}ȗᦝ)#dsP^!  %Quh8ut7I-3 ̕&]`]ru HRIKs)!wNmidI@?=ޮӪd|>@ꟃ62YND*UqχAY.o_n*ZQDuSw2!/Vyp3D#Whxg 7F$PekjLa ɂH=1+wiw]mwTЍjt$Mvo!D@9ԁԒJ]yBq17U&(4`_Zca]k5(jMfhU<9/)A>[uo8b86\j%e3= 0#-Ұ֩pg]8 KIk鐧^i/$+T{]4eUSIA~u*GAmPIcEA: 2װ; =k٭/灐+:[ @6&iOT5Zx=FDxŸ2`fu3`"FG׏XR_Pb|@ZBR'tb xU*`& rWqZ6~=2FmH*4[s w[G;tRHXy\/L#CV'vUS4ZJBe| D$?en*[Jljftrlvi !ȏ7G (_V&ej%â$ 9;͜Paάw_ w!̞g7mC4Ml7AB M8ymKbɺV?;nZ߷ЙZ'8=`pg|9xWcC +@?bR Fb( M7z"VIJA{ AqoR!Cte53AR]/gY<&UBYu[}fc=YXQ+-+aJ3APzZjjS{quIk:FI\1ŗITʩ3GksUƌu:?"Ԝٯ>jwc!öJ_{0j8+ S=MߕX !."CΌbs?j>&EtuRƭlՀI;vؗv ri(N&Gܽ?d 9K?/WR!PY{L[[oʪ9zeNnpK.^$x(_Le,xxGwR22n|%7oR=dCr !z6rH薃t`\!vMČC{qN2 ˧)zGkf?ȻY)۪h5bUWsO'դ҂u-izc82гDc eJrC FRRJ~:kO>p{P_ȖdiS,J{N<@ղ"fWEl<G踦iQn+;&ZF`h6Xѽ6lJ[qu"ֶ7&0дsdR&=sCݍ|QtݷSFa*RbycR>r4m&(Val dQc$S3՛&^̟G>+bHKB2҄6 ѣ= Ew]X LjT=g,  !ug D6. o2"nR}:04@K;t6lpedҰwh9śoH7F-wG6- %`K렐،h5pEOjUݟFqbwم*lrCC,Y͆ 3vvh"9-!{>tB',2ie0ϩzLݶJFu 4HKA"l̀Rb9'D Néࢸ5,ts'b?ɡJM.K>#W!jFlV-]d_+;:UTmU/y~)b2ZpMz0b@X]A3w dMqTl%1Z[29-> jOD\CI/G#?,-A$*1eOsL= ɧx-Q ?lES.0M'Ŋ'%8MKkI]/ה~^xBȚAZ#lUS**:(@f: |v׽fA@lb|qQԌ?lIROBj{jDK' ²$6oENǭG6^>1'N@FJH2w2.@\C pc\m5T=O'8o*3}FGάxAvEVgӟAb?Okc)wy!3H]S{K1:ڝ}DW.Ai[i>܋dhׇF:/!˖"L՜1%"kjeyhN -GCeI3imEhšB*V|ʨ&B%hfehswZ*4A5i 7 5%+\RjcT&A%V@28c*R]1Xu&z>nYΘHGP^1j3 ;P$B=vkDot`{/815La2M{AH5*>>3"{<ɼz&o>׉ұzLq_=Y~*`n0>7$PϋX7N,>ӗ)Gݳ9ǦwC&?%A#\\uit~mAq/27.}t ~ĵ]&y6E~ôlEƍj)aȧ387gtP.2G삗(nj}|"9qY+ܳ]Ҕh;Ww(շq3FΩ߾>hޑ=%bsXu 4Ur?E"jn۱oOo7qxP( QRt=lY2@gj>AFÛև /Z'=쵔fg\hr1'3xсGѰXb//pP5Fh eΙ~Qai1{ J`+ b/$Ca. 1}(f_jO.ʵ9<+YǵȐGj. J "ƈlM[RZ0goƽާJX9䊫tBCo]ͺ nz30;lW0K H?q@dd:Y0;iiN&QGA١D`-v5/esc Sx TnyA:CM=ž޸zG96r$}ܼxs 5WY"3%@UЋ-m9I)gܔƒMM:f.J^K[2kby9:];r gsA(~0otͪIоu/jtڼPcj3_rfUs3~~ϼ|3wBc5t;eN[eI%h8+]jq7jmqW<kA3>FY P*Up_W_, Jq%,6"}Q(T&􇑜 bro58F&H&v7b;UZ+ƏՄUa+D!&7G4 .4({v4g& wh4XDٕB?zr>B&3GHTL39R2-+~6DIU eS-յ033qwߴ$\6j*TijO+{t/ΞVijGPw౾_9v}ydqC9mdbSB Wu !רe -fiDs]3'80T!e@n8 3yG_M` N3NBn8*rS2e cB0dGV %0h`lӢ9PcKf}45.u;pN63E,0YNGhՔ$AUp8z\sI+=0}Gmt.[h_̲[q, ^BԾEeɿ  \E5MfϠzH)_LnykAq {*O4?p.gEBlV0ڽFWf`+q /)1+!FtQ?uf|g'̷ʒihGVľSn|ȪHۃEe#lɈv)hG$l(Px/ͧR49*KLArN~Mo[V; aܳHϜJ1Inas '%Н}\GQO-h!Ard$skHU0'cR[q`(C8`weuC>S JƘ!+nvjHmxڴ{a7YM}MD,@x|oze*ɒ:Lؘ: 00ױT{/d+qf'=,Dp5a$]tR=4DL iÛEh3"7:Z5ޡGAz~R~uTݰ3dӐ ^m<$ԗ=VW %C%8?׊.ށ&^W#B6%8os?Wl{p?|as gk E\l C$,"}3/|aUKߨNG-?ѕ>h7u]I$4IE gt>`!ogZ[]l+tbbz]L۽Uj E>Wp _PPJ e;2?_o^e\\1.{ZG1@٨u|?.ʿ-[?;4~ Q<(;.)kjlpNc/څX%bထZ60c]) iF(c%0\/Yz* `?4U8o f|q$INTLrH{2{sΝqșۂ&v<'NՓ ;fY3b_rTk1x|qW&[gĥaLJi7;Um"=Yd~7εLeM`⬙20O>{dCzO Jn=qSw"d"YЉT&R:-9F)WMy *)/]-4 29 %X$%R^p8B:UĉE)5kOmi޼|$ qNpRbxzx",|$ַw,@JhV^Q ڛg! @ p*9đ}d;m >=ϞA%;.4s历{`"DqIm.=]`d,4|x|fffsb%Uu% VSVoH\! ,xz~uʝSp>+zV҅j߁^/Θ Ez"˟z0?6QOZluQ64`ڰdKZ6voOe>H J{4(7k {3*+wd)/ؑVtdhqW j" K( 󨭘@SI|ޘs>|oP@x V.Z!HZ4ЏRVŤ&II^7JZp'IHL:D#.|_Hڣeob\:r r<|`B ~׷f}ڏtEyfSWc9zSHasd|EXdw5u%^Z_Cb>J7Hb>,Ⱥ-P(nK1A4pźDhڥsMJրI͢\= AJ=e8=;AGY S҇Z|6VJ+$˴0>Ά/3uO*_`2ն6 E?jV泴%S/IJ<we,:='("R{<Y(T݆>Cvh a6,Zn/A' N@Za3=JOR'q/ǡU⫒ ޘal7-N5TZFbr|j`6of D#;aTz\!H%MZ؀ V3v%X4q4L0-: S3x!<3Wñv F'@2eU$._&7@lUXvbWAcH2];웦td2$va;oN<'bL6#R f Dvi3v68V1I((b]8 MWgĈ`\j3/,-A+ 'zi񸝤 32|ޡC!ya)#ƈ ʒh:(jA¾mqHht{,O#BUA_lұDisk4V)Wrcs1}P(CT2N ߮ @)~IO©^ ˩Gݳ6يKa5ya͐cʦOgИ0VXy!Կ+wz?!k'*]'7HAG߄(w;Ǻuݺ$919qܙ2uk^6FN@ eEM)80RPX}#kךLGX0.;6^ 1*h~Břط@K&ʲ sd9ZkeH&<4K ј i2THj ,f!3}6!Uo"]_fxf͵K벀ڵUenKq BaiyVůTK~_^0$9X$D"o ._^L '$~GI&qMolntk=-33 cz,=v:A:0]=5Bi $i QZ _t9n@>KFU˪fnM;_Y&W.+Ϳ`>&Yeo-y[ p=Kg2tǦۮ5>w]I%=&ż%HfO9ݣkQ3Rl:c?1fl8߰b8LTQZtܖtBU&;@Ζe3v/Hк7(pbi9r6%AvtX[k!ި4ǯ/"TȴBBMHroό1e~ש~<Giij8f9W]#RGHBilBDR6Up}ճ|c* oew>]`sVrH,. Gsk5S'`sp>u{#98jKˆl'FȌԈ,1?$d yb%)i[ogN0~;GRҏr|]zzZU 0 h˺ۆsU{@=jEA6 dhy9XW{*`Ӳ ɀe[~>Guj77Aolݩ=5 >e?%鱺#K"|hBp'jײyN.D0C3H0]BѧLeSkZNF;=%1@ϠM.`cqBɖ]m?^Q"Y{3Yǀ&؀8W}qF {3T)k6bsN-dž#܌6#7ks!?G?؁ aMPL`$^sC2]'e/>pxgVI]g[t<PHvޫ@g=Dd 9bWթS |Dk˔6?wݑ!+xT\æl\{9`I g0e1ԑc-EFMSUqUm EGR^愴Ћ90D|PĹ>Dc|(2; Zh,/v=z@K%D2iU^ _L-,Ӌ~/I8.vVɖaHGӗ  ]prrU+h((y-8Q1b:M9iD kQQ_}?{0{zTK3ں6*eP/Z{N;C+ipְ FU<^W)1T"Dur;yHq|辐{:Xa&{3[gI0twz;Bퟃ.iIp$Pmd$U 4 Ɵkv:WtrpPL,\LBzj,Bб'%$b&'" z5 4bxL H/EIn*౳t"xcTGPZtH~H;ַߢRoN"kX&uj+('Yb|?D+ 4Ie3do[E%6[b}~T]kDӟwd!X:$'@GPS:O(.inSZ]Ӳ+IPS\V{.?մ4بBbE{7e 5qm˾bM~w݈z0VKhÁ<6E ̰4ǜ-HOA?hlgWǝ΄1ʏ7 #A 'XKKh|~dɰ@$ڗcog)@hnxڇDޭ5@h'=>e3z[`$&m! $D* gjgO?,YYژ'8@akڗ8R{r }(ǔ}\D+awwfwg ~TG8u !k) Dr.{h|mv2zwVP=&fTO@U2Mȩ]/Ԛ (x_\(AWAAc̈A*YPJ,9DYۤ.p7ׂ7{iw=Ϳ* N|p;UiUc. 'ׯ+ ٶ ]]r80#k`#|bxx@FrN" ;5O/G+Qb }irl2<ƬLxHc~@z8**֒!&5=^B{Ldīx7Yu;.?+! ) uUԎh>&>u<~خ^vB q{'fjd>xӀ=mt+9T|äӑOewͽ{Ng9qH5mG qᘬ?AC3U\g8աEvRui@fQd->B=*n.vʧ`,RuT`g@˚{N\JfƎc"PJ&~U< S=&DGHёBQbyK·Ή0|'4۾`!}<f${vZ8ٝaclۮG5ODzzf驫@p2ԦЍPqR9,d{-Zyޭ&۸8ȡ,*;@sN̹7M P 6[5#l֋/tL 厮Hi'0&\.k{0͜7GbQ!M3ct0 hc zPT{*Ue=;i%C6kdwougO'Ͱ,KiM7d(+29~b8^")(J^O#jw{tp&5toE]xRTu/&(B_D=^n뭡Bn~oüPw|y@FIXJ\]MIOW! tK>R.'Atv;ʓ@5[vY@؎Y5~#֗Yxj/ɕppEdwFs®]*|տdzF䔠BtmDuI~󯖨Ԯkq[xooz_&kP [sH,,dLz|5@tKܪj~疠N֟ǟQ1X}t ']-9[&˞kx.98y1ieA(#FtdHICCoF%DwW<Չ*Tdp@`հT-'^lՇypY2 x Ly*S V *ߊ rRo0S)ʻ8 eE2 RqL vB$,}ULA+0(vs7IhI3CzRz ΫO ̺xyVEMIHA1`с#[gFu5Y5ZK`Uӫt7ch+F$`G!nc7'3GE@UY*;փdn~MA#͊I{C@È7þo4Jf/={IZ58BO3) Fh+oB΍Ο*&_Ќ$񮂣"qkFYヘ!pҦ1&Gf ;3bw6-rG_ El;l'k>nPyG/؎bzUMnhMždq.( SGNlbaCA5យۿ؊cN/f$I ~Vj endstream endobj 440 0 obj << /Length1 1054 /Length2 3502 /Length3 0 /Length 4225 /Filter /FlateDecode >> stream xڅS 4 Fl%3{6dEc0 %R/!K>$+;IQG~|9gs5u#&lb.w ct x V1xs `f11$+,f!zxZD D hH:]"0" VBUr]H 'qQ8݇st"8G Kp@PwDKe=h# f1@P8K :b~N$,@XCh;h0x'3 8$3Q!}1p`(Gl 0, G?uuV#+ ̬9?Ӛ2')2P(SPT LP Վc o^Mcy򤀿3H84 )?z+yd8r_%(7(qABp穋#cLp$Ezb_;`8<Ƅ;@!ph<ƓYP(;CMp9""Q>`ʱQp*2!S\'(- цTY/,ȚTYԟ eϲr@( M.ڋHx802~V s k^ >>qا uF6"gxgW82g7] Q#\7?C5ϱNrtR7x)=[dn2w6q.>d2hCz xiTkcߔ ؕ6Vb|WQeFP.gSjK%a$ci|cH؂ן1{u̱.(ЗX;wlq+V}*y'!QjRjS[lGm Pn3ɴK-Iw}~E˪~"xmf I_yJbД ӿD+q(`rG&ЭQ'1K^>& lyH;޿V\d^t0Z{9.-S^VcC 0k̦=x.IulBlidɬAѽ^!Yqaȫ+ mWn-Ű*Ctѳ.}jבs#* b6o‘X% \ebLC' ځz:bѥ[ #{ ^Y;5F'dO;[tp\l橂V"vǪ"΋oF;$w )YϬqZDۣ˒)t)O-ReZq>6炱X_zgP۬zZYkGXzęm3ܓu.4\P<^gH443ˇ\Ca+H';A$';{8gm[-# D&,=ez7-N%RѺ *!X`<Y'!lMV轠&.N;1OB6' ZxTlMOzlX w,zJ\UNňm(\Os&'>Ð=qEe. yZ9 #~vM7 zLdQZx)erIB]5 [+!:SEiSy$_~PpI2^;OT`*0Zqq/Ń,ɔke){e?m5zm@:1BWNm[ꙡɃdOܝ):r+oGTтYGs6[;hJT_&o[=7]-f ®Kbrb (\r"-4 ~)mZ8s:g+]kZ%(QoIi6:욂' <"G}w"T;n%!zzS^Z&~NM>HwԅvM"lŅU[J!bŲviYι==-!//ۭSιKVT Z?8 |WӞ:S}ƇU~Fkd |KwΙYzd"rwM3P6Y#G:sr=DK tJ;MպVrLG4U &D8"Et*1eҞf*g=GHŻ)!紃Q1'U]#D53`n%mt'Pt _GN̟`"#`7-ܹ_Y+*LL~u3Զ%)cf?V0C}tnq3kkmMqkl3H8_Sp\c~g>'u&fD+X` /ͻn Jm3{>|iaU eLĝΜ Uyx-[WŤ~]CJlXn,֞ZDNEvlj_ym>-=} фYY>w-6e?K/kԤMhh]RTHe븽:vAΔ'zǷO z^ܛtY.BFq+]X3^Yj#HEL !?=7䄲}nR$@+3%7y̢ۧ,OOUm9Kt+#]WmPrᅜt$TIre%ʹV8AYC-ވ/:hPWlqDY t?2R3=rlXꎻq! ii{iY^oqճ،'aq>ކ0mjvb.UqV*ܤkeL,uS ?c({ qQ*5B Mf -aR\>7(&G-I K,h:APaOhLR6[J Dinfu ]5\ޒ~;i> stream xڍeP]ݶ-ׅ;ap Npw $8o}޽缺uk[Qs֤$UVc1w4tt101TL@ G3 +`4L-_EW4|UU8X:js7([4\,L]Yh\V >>-lbjw23qyxx0} [ٛӧe@%G_?r.H^/G-Q sҲ2'oZZ[eKW+鿻#fgphIֲ44=tzZ+AfK;We@&v@3+; C.v@ eGW _Cfdo)uk+_[G 3Gs@ d@ V6:ԽX1d, [;ZhNQu0Y9,,W~{)Ol 늅ڲ_MzV'odJ\L9a죆^J`Vld8d(}8z\r嬑Պj6ylec D2^U-?y`cGrS!uN`4E{ZF kK݃)I'13ɻ'F9 (uj \!l)"AB>P٠Azo#'G`4BV KL2|H&KhW'ebVTJ@@a.Sٜh7ڶ6:ViH_ܝҧRp $Wu5,WCq#"SLD!OEXB'X2t:BnT>^ق.m[AESXg`e䯸 ?T|`5a@QρTS0,M/9j|.ZT['? u8kZaOMVe >O>om'k:巒֢_[R:/ e1#vI6#*vjpIuI V M[ Է >(cueO9K8ka ֛;+߹&2<IF>6OYFDҲ'=1EM[榨4VBp3j.%x<$wֆs8AEM9&D`-sQJP @L((GV̇UuG?=Oo|ǥ6>9ϰDs ñcHU֜ Ө\Bl{xS".0uNϳvJj'N XIqF! 2NJ =qòW𦸲Ҵ4? rBTTKRJmM}ρǔmo8^fj.]v5 ͅ2W%9dq2\ػ eikdW݃WJ:!2CrimQPe *H+m"7>sl5E;[S\)KĵڛǨ&q}7K PJ1Eei$ho}X58yg2m&ft\I;[x(`Azw?bv&-T\ S΁ןͻ9[`qdhoipO1wo h^}7#рf}gZ ((q\ _WGQg6[iG?'ձQ|Fv˻F.r[Enj"T#$nt?;'ΐv/k,DpC11ws! 0¢u$^ӰJJIC-0i g"\9POXfv..8A[# #Ao07`L_(Nwѻ}%vY.A?R;dCF6c$O9ЁG }̿AhCfǑMZ0ud5,%Ev^;wF?Gt8qZS8ԥ{_9, RMרʨ3yA3N1JH<6w6LjxY/ w׽1q`3fjrɰs!ċF h'~~4\ J]b ltb!<btoi(VQa0?F(i1gCY/QNoP@lwZ{.7){T4/5&c W B/DaiSf*tfRv^5ɖZ+jDmGXݢ ~J=m4lqc %0DM u}dF)|/uCyzZglibF|ȧ_7#uBO,諀b~;slW[Ǧ7cQ$cYkW+ߏY]AZ'V-QPL[ a͈tUr9*60lPlE/5 w8v=uifQA C׮F|A# U&0 |f2G`h"VAvN9kΛBft'7u?Q\|{B{+XJ$nBýY?-#8ճ _oq/X°ɉ.!Y@͑c1!G %P&Vn r#8O8eanOؤE ߏsVr,/ NۯUs-ٮ$쵨 ,~r̓sSW h,qGyQ j^W('~dxy+F}fA.| *wDL(\}Jע֤)G8OtN``KrrM/W n;<;zt=7E$02.')IBg-! YJUVVX"{CD eN Q.4|7AUPK8][En mexx"y0w)c&nFGa5^Ό Е n e(xPAHqH߿ıBc]BjU'Qm æ=iGJjs%nbmr$TJ9I4o}SEs`3jlߗbNNaf. .Bc7hEMoX`sNP<'OM\ߟYY d5-;UQrֵB'pnRqovoXz9KLDLd6)J\Cʳw9E3ϟ֋,I"pRܺzJ8XڇLŮl=AҨOM( l1>M1h^<~%05ޥԹ-M`BX6ⷃ+LX{%y}ZpЍLpKkhRlY!m0r8t-/II>\8<99];q+ߊB#=S5,'0UfI^^|]&U8gϤY!6R\+gfN`gm.x;Cİ%}kad5'V@\'8;z$j._VvHF'|kG8}0"m4ٚX,8{vr;={uE{:2dI)7[f ð1Mh1=} &HޝRm+29w8 Ynaz3T=nxvٴjŴv Dx찫[?fvOF8t3ȕ2kᘺq:KPrd2.gٝ Y!82t Fs&.-Y?U~MKV_*;cl)nŪSc2uaJɁkc.TC ώyMYa ) ;&(zSZ+5LS;W7G &?Y.W!(]7@\f@cGj %͡0wOFDX`XZ n3+#hRnͳGqBپ C>@QnF>_K> >?L÷rFA iGgJmtf[nT1<\"Q6ўVtð!%CsD0oшэ?+[h99JNТp~P|\Vv{;Ú9mDw W^.PL8b劢I 0T 0!G1Jv<5ЬRH},0)on'0 O+(M'ʣX=5@:c=Vv8yx d('i]ډFfT2}L щf$jlZV͡c@ B]N.C_DEU*^G0B̳dHnY]҅.N˱~\k:YHs/znҤ.ܰ?1i#=nJs>i7=T8 ;?4 d_P!&"t蟻|*Ta#ay> ?dP__I[|P~DZ& ^+VZGa%613hpϻ^ئ-t]VIT2A6tt>bqW|`X*a&ă'3Wr)|+X4[wGf;TXMw|qk˃|/qӓ(?Tٌv"@YOj*<*9-x=Q~G7/R{[ ݶa&VQDu&K%̴\U稉OpXf$41&C N W$X0rX(/λ9m8(jMØ_9r8~Ovh6~7 #tŚ1K{ jVv@c`%Od<`P o&)Q2<" nJ~p+ |W9GmN2 "e?9/mǚ-pMKC:AbaftlVRL(AwI Ry-?BpE1VQY7vBnBkE 6"}:V"$8&% NbW>gzhF#'ܭ<*G ɲeVNn p*Hho^O/%v92<lO>+ tl-q J3v?!$v4Fz#Drp8ouYJQ5&\!١.Z~D5_FK2ZA0SP7٬Eݲi+v-~J]OB8X0s_q0?b5jྠU(= #23Q#b_˕ >/nV7cΚVT'Y^\R :ڴKFk"B0kQc~uG ]T_"*9<' ]f>% G἟kNkӍ &]#$>]F+mT I(Wc ĥǰ7 ^j!Ƞ5-ǭ0s'dX/0Y AF3PwK6WV&8(8*)ve0,2^åCf3A!5,<(0E\Üd{3S*OXFwɢoa/š614coߨ*,F E~n ܐu&q51+=DwM7JI!|4ԅVH"ȹԌ,ڠ07 L3L˱p&SF܅@ iLO(4t0O0=o?m#"#qKA7?Fkem_lk,oyCpQt&jN@A]lCӓݦnP˕;t$3:e2R* 7%L+_W h7B%`5 u ~ɭBZR'Yb{,Ʈ=M fY S,Ч >&s[p6Q_o =d|dc'NRTp~Fdr5IGR!r"htbųHI_E!XK*D(ɥjݗذ4Pן$@Q JU%؇Y >QdJ74wB\WQ,*گ`7Mu=b\x9"WzgƔ%lP;/d4 ,I4TQ bFĢ H L#Y!L#vH`Fʈc>c>x)STd =:|<; F =;{Gܛ)m+uₘ?e"3_/\cRFB.E8B~||+#n`|!7)72xGXVŊi\HwIq`KۥrZo;3S!ъ!%aj:\vǠ8}ErIҼ oD{5ArG ,|uKIV&:M 9jںu}Ӕ!RSC7*MFd5ֽo w~X.Y& T)/2 oߏ||xʮHm l}cDGZQ%f"nTNOuuW6eW\pѴn[`r%HU%<ZAa=ܲG@HD}͋ڮ 7юbiӀbaDFL[a܍?/Vfqڻf < 3 ΃SG*40*0U?%0l0hBrv,j.P0XsT]mv ij> 4 Xq9 ^q\]P5Biƕw:n:- 5K1}ѷPG3o=Ѧ.DOm+whde-%sQB~Ƴ!씖h ScʠbBp[3Ȗ sÎcq4-]ejVE.fi'27UywE 3؞[n<_AZH3s$v{An+Y^'œ T.m;x5~ ;%,,wn+$~cN%1@B*C--k@"SN)gWvg ڮ$Ue]'(3MʎōEo\rwئDMŤR< }{^j{iu%3bصE8YrDžYNCvol`nBK`qzeJ8Z6aUx&PaRJ#=_lvpGj#hX/ l-10pѾz}%y|z XL jၡ>Ŏcy/d8k+|٥#NZflJ;jk|ʣʉ l3lwԯT0e:{[M=Us'v?16;?Wwو6u+w- uF 6W2N4{9@SLQrǔu;^ḣӆb9tXU _yUe{(k*F֢`C?7r'Uud"9}FM (ks-Kr1{Csފ o夵E(Vu49)i/ˢw,`;m0$. 596Et01mւ,WMA//ei#%LՑlbx/iPbLUp>c :|jw$i hK8 pTN endstream endobj 444 0 obj << /Length1 1406 /Length2 6013 /Length3 0 /Length 6966 /Filter /FlateDecode >> stream xڍtTT64(ARrfnf`f|AEBPJFZIAR=5kϝu׵ MQ0  z`@DDLHDDe "` .sG!e#@ b65(B^,%eR""߁(,;zB6 ÀTQ~hW׉H Jah An0w|G'(0A9aXwb=d}||!UOcc9?PwodB . m7A`}h7 N0$t|sDK0! UOBpd#]8@tXtE`P|7:~ @(x'4?! ,:YCb1SaN ]$G:!l{zM\aX@BDDDJF y0_'7M<`f<  `^tgp‘WǛa.ᾀ{`@_oxz9گ1D o򩨠|Aq@PTB$%e5B..(@7$> eoۈH8~xF Pw8O^X,Pxq ;[z0g{P<}aΆpo|y 3Da??6 ~a . ?[#P?'*! @hzI Em@XS< ܨ$yz7//?z9yxb")9GPNrw*"_)_\5ȵdO0`u|#{}G-Wy&Nj+/Eץmq=Q#KFe:'Ofm^q8f3r`YHoRoRR?xΦ Z='hTtxg;@e5Ua4 c̷V>)Bep8dukw[b# zbJya5=À>[.vƲEea߼c Oρ! +К;vW_hxخf;5)"KdӢ*0H"4R>7k<[ {7%=*;7D5 ??w|x{;ML!#7']# XP8Nx{^HЏM7y^b['gFhiw=;G2B%fFqUa]*m2ΫEE*vt_PG%>1*>JE8Y MC9p+ SovJ [ M/N|pZj\ʕC *7.5*ky<3#)Yw3jnbl*fh#n4YrΪ)Ƙ}%_>|쓯FXEx,(CuS !|]"-:Rő,vU$~31Sa-⡚;WMY&tqBU@#n "I,3ooZ'\ dՇ"0I g`yHo19CLVHa iڹ|꣱nْ/UU^+v39(Jѓd_~vWP^<̲{ P`BN2&"㩙*ESJMlI`о#Y+ͬVM]ݲ7uVW[N:⮉̲i=)Ie|8bs yv?cu@0Дnf:*Y VI+:t,>aJB1x%eGI|ZE{ E̻YŶ\N|>|v}-V,\x$OcrgjMz^߄G| Q_UiOv]O Qk`s]*ʿo$7[87:CJ t|,jµZn(VsT7!$ U+cΤ]~&fEA.RdLJPpmUYaW[]<ɋ= Z'nǕ#'`b]oawM]z_۔-JJܧDƟ\ytR[Nl^k&P]4G\DEWxYG)ASRΝ=Dȕ|h"Q7fy !I #xB!` Dӌ >=cNj[[= -.k$;*hV(]3WIPaZ1K0e5 g yeLM_CX$5f 6^=޺ơc½iHpjϸS\F"$ U;:dKky{G|B<^:Z#_ nz.1=?y9f]kQIw+k?# XgOc^%sMD};¼M}5F7fiv4v"9~)<_&jy ݴzij 53T_ByY/#i6S^B^ ǻ r!ݕ\ T}l/q=.&j 0Y=)ojj 0;,QIicBh85V%6,YA4A]8WكrM_Rac^/>; L.z2{!VEΣv1酌|FCnsm\tF)}|acUx'.c@LPfTfv]W~]T{nht%!4]i8:3~ Dz(!R3 (RRBƖ.rZ yxf,:ˡxfd6]K'r#Wh8TK,~ִ,&9m8I<DUNw0ěo\y \*XKh`kdٌ9el%icJUL_[ر@|_gZeVH,09I{A} ew"s؃fnq[0vG,k9I4g_P`JBƭ)!ЩW#ZH),`/ R S+^tM ΢Hw`}տQ=- k{.@qݐ_xj2OwV|Ddɝ*~!yI M l`^k߅(5,~rbݾz_]fS>\(L*Yq \b0; :ٯj#ɮv+@󜴻ћ8芾y+aS7@p$[7ߖZiמ~S5]$t:T"xxnd*fi݄M,]e}W>Qm|qzr2|G@tnKA![o.^J[BFc<A޼p x7{8 6A[: CeWCwb;n&Ӎ\?v&" A?Ҍ`k/tAW%${ MoWOt|u\\RԶ%Q@iѝv0TER |yi,e)/jQ¢SG?hY~Ov- ?xfԫ]B_?7rԞ44aZFʼzq$ qUE1jI'o,qJzW\3$cs񾗛+yZB #+b9;B n)nGb.?[SR'o氨p><3ln\M{8q]%eKUtlCir* )ѓ䇆Arc9to%fW_۬\;=J!fFL.FPiG5$yn~'HQF6]6YGIv%a9,h&_W$ |[ϚlCGWWr!rW xh6FZ;CٚMe7 [ +L,E,FH]j!jn BcML.F"}Ncnר~/; "7okdz38;, Om'6 LꌎP4*EnÖ2p"mn[aM- *1:-1 o^ =ق|1ҔN3}J]ib?y9߹_[6Evɳ+m(=cna $$۩|&11$(zjFެR½IE'}r ) ׄ,֑׮_ -II&y+nr}HWb,D곣KZЏ唝T;DŽ6;=:n2N[,*4xۦ^Q4jf(cݰZG4H̹??Q{KMC"nk= 4wBڈXD!lӵD5\.8dYy jҶuEou% 'z mpX˔ia%U}b仕7mCo@] ~/O`G͜Ydչ8Ig>^3|uN뭥>#{VO4U3)$b>RQ 9 V{$wb)wJjދŪ~~ ZtsvH*̚.*wPE 밿 UxDXh,B?ѩmX02 |@K-k^Hf:rl{޵m:3aEgk ӕʣdiC:YIbD]ʡ~\|5K6 endstream endobj 446 0 obj << /Length1 1584 /Length2 7410 /Length3 0 /Length 8438 /Filter /FlateDecode >> stream xڍT5,%RҹtHwwKwò* ,H HH7 Hw74R/g;sg3pt+}m``G C{py/an^!K+K Vsof F`'d|  2>P @8}/@A5O{3g;~xܿ>30?W̥O;eea/a7@O t|%U p$Tq"ho_:^9,n +4` 3fܠ/7_Ojo:@=d܏+~5a TC:W_G[ uQmS=ܧ:`._/|Kzqo~[R|3~x^<[jv=.NG>p/9cSA!/o$tF|.ݿȽ7uV.A_P'; ޓa. ?_P/(B ޟ7O[@oѽ_A3S0畯/e(86.4w 3ГƝdlJHMyS_ /&(#(trd]قm`#BkopLQM J7sn]LDv3< DLZ.r1- /4UOE9u.Avfa7+8YG`I2BOUڴ2.d䊌lN?M=C Ml5(6{Px"ĥJPfл"HW +BqIT^R-Nvާjew'Qv]^1׽ߍ/3#gczXuY4^Q+XpőM(6ސGwSEzTNۮ׆^C&e&1wQ<էB Bd. V2v\ʜ?36v|t!"MZn`]PJ, ;yPZ8j QLl!  v?wi qLz^ B FO7 zҷsgۥY[a;ߌ[%0K ;:.Xȿhox9yqӕg"'hHPs6ԹkB*\H+kIPBhk%κ[*nμ!E{䔍F&Q?/!JVn @P쵏j˥l_3;.`}Nό$P;D7ܕTB8wZd ?+aQzz@zyjmz.mvʕodP[*#Ar~bw^ Z~dlBZ iou `̡.viƆrqS.L]yxV4=ֵo>5id?M&>,絔h}0giڈ͏Y|d8 Vpq,1*FOlB\nL)N1D6 v[eZ7/SScFLw $/=S Z%v5J]s)tO17|Y.=)rpåڭ4<'X_L&QJ&yUM#[v۟87ϋQإFTa<ۄU>0`ڹ==Ifz2Ηƚ-2gXlV1޲i/CTq>[}dmu# |wv:6# @'?P߰#ZrE'ȿ&`Cl*Q6FimɈ}=5="(0'4lQًܒւBᒽ8Fh{ǺƸw&a./5zg@-8aHh ,HM$Bȶy<˹fF@ƍi;Śs~H2a~&ܶƭ͌,R,L9uFYWЛ]92YTJ\,$ ~uq9+E3*l YRk핀gPLXEЫY>6_6"mt"S\'69q?KOQ4fJFJ !GvvƐGf!=twF桮<i5d|e*h@$#Np­7lY҈ Ab_aF"?;$~jӊ' ߶}a_V)s߄jPZs熚+Ru/:$a84Sxc}( |L^z&xR=WDql9,qwTw(;Ch=fMm`qo2+c=mSyjI ӏlvg.vnqw(-KB"?E18 j ͌a{-cKNs{ bx߯~YW c6 0tr {Bl,U^dϯ}Jm~ةMjEZT,?H] )eI87\+CW*%k:CbQ9mS⫮]9/B+@ +G}gM=CMߕi6Zqߒ Dq Ge>* lEP5gzYh17Mڨ1+\ rlv@cM/RQfG $s)2lBI`GMFZ]F /R♘Q8Fid(H{Ɯ"9gY02ci3cQG2aPj>^HOo">boåvŽs;QނWTrdur/2%cfcw★B+5c]4٤<o>x-G uZzwm%/8251Q`Fe(ueV3d?amr'YH٩:WQ_˨~;#n? $.jSl.9fڨ4ȎXټB2k8Mc{Yit- lY ۞R{݀B/ .B`dӷ2YT4ρ`ǧI2A^7xjj蹉"|@.]Qi\xoHC(`-r릅=U%WodUwp kA>wLoi_&8|V89@6a8}MC=u3ϋEԧ2O4tɿRo ͥ!ƤN2Y!;tjR}tk^X]ӠB?#,0'!/z^ll*ZlQy򔁞6*ά=w8eV&e6 R줅 !SJroÜrBu%5I\8ELtBAvdc~ɻt>pS֯dikDD9Sj:ПȯK|}dU"1q0[ SSrfjC$Ð3Pm_zjGRHTQ3DA&+L%OS e}zU1 {Ϩ /LY0Kns7: T(z֣+bD6(:ޮ72Āv%WɂPHg!hZ51XI^E6켱gB6KŲENB)i!þ>ʢ3 Ij=p.ʇw2&9[@Kq.U\A뎓@[U'OB|軜~?a7?Է6%DśOϭ>(T \ZJW ڀlofUsyU4jl'찑ATI/ Jl 0XGRCDHkoF5f)3}2QJz׭;WpQ8XvETHi46A_],<)L~{%!ԙuha}#ej]Bq-z7mA||m GRP"XP\@}v^,6,呂a dH]6qU Bb섚x_G a2olDm6"juVyg.E_&*}#`fUxOyR 4@F-Yx {P{[:ݯ{m߄e̒G. QS߆Ip]rWi#fCqceHIWG n~`kk7e࿲F-ITҕKuMu{B(l\W q$hܸЮu6}֣p&L)@f-5[qWufe1 <^jG%ׇhQbѥOB {/#vG0}Y(ݲc]J"Q7mj%|n[>GSNwRjkQQ&s !J*]Z:=ф!7|m oYM$6$^ Υ)p>sZlPJeLtd1vQ=I{Cbq#%]tP|vAr܁RQ I%ry=Ԃ4P$W2yz)7&L]4+y#u}8 MMq@e@ o?GkՉIj#4;f(O$ m:!J--v-!'EEf= nD.$1d]\E+ޣM/DS~nbͦ>@SZ(XdHؕrXH{e`ZGalK)y7cGd,)q6qHrUsd~~ܻm {.ѫ)Dn}HT0їt3e^#ؑI_|0϶'.zd@ccU_)B=4ce,!:ў}5nju]=Od+3Mltឪ(%ǧ262 FJV"][U d>.IG|:DERo6K hTo (%~D:8qX KK56TRWHLE?\E{&y !.(x19< ?1=[)rlCoS1HٹN1-x_g0GgC,#tCp|O",Ws,ZYڽ5KG''O(ҳ*q槵#&6 af.mPg~| o*oMkN8$'ZϢ~ORZkb|1搵tEQeU }&5FͤoVf^ZRhޝh=V S슺q:k yiʢN\Kw'oIgPϷ1ևs!1Fd4y oI/=U!a:IUS% k ʧdi7+jkWwJvhblK,2m-;ly*"1D\q4Zl05qBky'!>tVۈ*L&ҏ29@(9W.乴a%Ge1s(h M׈jii;4~fJ,?2 endstream endobj 448 0 obj << /Length1 1425 /Length2 6168 /Length3 0 /Length 7135 /Filter /FlateDecode >> stream xڍxT6Ҥ#H' { JA]ҥ+HHWA{oe3g3;Yaa5GAp$_e` ౰B0v<c'DAHP {@APX("(-^:cQ@y@:?p+ Z U  `(NH8/Փ( "O72@ C`ap@< C/=0PA5p W?ѿAῃA`0 PɋEr@p_@y0 { b'~quJp{+?E:w??u#|p{_4Pw/ ʄo#  /؉WC?7oo3CP  :@Px o O?Wx@  F P8޿֨{@}(^zB)|z:Z*\()/xĄ@ P ""g[uA?jp@/e?+h#Pz-K~!~0 !?w W(g/$j6 7@kA^UCP3"wD_v2b E@ՀA]'׽/j.ղ.jYW FA!a䇇Rj%f[>^8 8x+(CE!|jgEnߖT{yx4P{@|!`yX"edu8zO\`uY&vʌ}-Xbe| LB$ O׳׎z{HV&=:"[ L 4(>Jn{<-&X0:LE*/tPDUͺa+}x3eXЫQ[!NFмTA)VW>ʶ8',fy:{u~L zVcOYDyŕ&rKvp)k')@ )º0z1 5 6CnދjS4nۛѾ1LXiw~J;cN%ad׆# i6DSGE\Vlq)XȐdPs-[L Y 4p<:Z\I< sm]^@JĶ%&Y*kHp!JJj99md4),œ4~Sq;@@˧>( W+#?9Doq;bV;V٣6bŦJ'6j+x3TGz;חLsOˎrړfϿofRXh;_+}) ⊁(\[JWq"i\ZG AW0Z0j,qu~'*-wH*DF{ /g_~ߡ'a5}%{Kam9=gzA m FFϙ/f v 2UDvCqxuBcDc֊wGaL_c:Dz~{iȡK-z+d,b):Qp SuRRěpԊ.3hS(MD;UD0#pQԡ#@WѮDP/2i0 7R[s3)kE[99cA^ -x 8)n }!kMkSEP}{EGяjy#@j{]\pcX,3b^}kXܝDt[/0&lZ2Z=Y##_%olXs2nk)º $v3n NsHV+989I ]LQWdV|X/Ƚ#s0Va5oܑ2}Ay%019\gtqI\ˍ5~e_-YC0E8:f2^  E8f|)A$fX)TI3Pwd|@G{xx-T4iPG|N5a8||Ӊ|M7?o] @V,yl;+m^BiC^]&ҏbc{ F$aΌذQXR]6CHu1 A u֤P,E>A@s^هqiK"* OusS欮hX3k?+!pଣ94ّ_դs@B/ Ju ZKu3C_1na_2?{+Ǵ ?8gؕNҟ9F~tZZqkQv")}@F12b}2V%4RGK-Q28Q#/]]\ԑcڊw*`dʞ}|zӫ{)'nN3Z4iQLsr$2w?]5X%$z \O7-"o')a㤸u7 5?EJ%T RqM:eo_=d߬eY!.gңg\m?wؑ檙xYirzQGso/S _ȗٷs[ VQgΡpjSH(?_Ͼ;MU|[LBM Cf]m(Xfvq`r\bȷa%)hcoW|OK1}țnJam[PEܳP+ ³cZ1"Y F׺L\]3f=2jK= Mf kRv35틋c 9OrS8M/Ӛ7:U|"ͦs1+WTU\:5q;jʢ,7<$utYdц6jsbH:〻+9pv[Y 8u6H({9IJ"dC[štR|Bt꽾{b5*(R꫸ }o(컦w#RqMɒxu$d  KbZ=)1.^DJMw**>#T )'U͹flMЍh(\eܜݱI +{BAi4_2lb\J" '[X89 V Ob }!.\H$/zleyFvØ4TDYA99K$qZ˔1M>iq⹄^Ne^N{^N 5!6:X_ن nk5BB d_7ߡ'>t°/;Žܯ$>DU[L7Rԑ-aJQ _#@5/zcEDYRmNj+ rQ0v lO] "cZv9WE27}:?N+ Ռw*DO4#%oXDH{j];xY{TZ Axwȩ^e+괓9i!Ƅ:%[kըT{ XxКVOT<ƪ`WGb JCnLR?F y.*Gs ca:_ؒ┻fU ?PԸUz;z4ϋR(|}p?E)e%fRJl$rͰ\ghqDzAgR2v~VK2О)khEXG6aMaӗ Ľ:Tce}ʌs,C_證kp7tgh[x6l[6ƿ˼;y~s̘`͊˜Pܡ-`l@]?ޓ-o)u;~B08 DONqrW2 "̕n}KqOL!Wl^ǣ+?7:^ЈWC7Yx4-Gl^Q(csoBfH 8󄩃?P- LIcޤ1t<йNyĩv N6cY{8It/u BnFtyd[N>/s6>g ۤZ;0:Fx00+䵢Scm; Džy]Zmd')|1b|trf2~(cW{UТ1Dyu.wvx|O,0~֫꾼kX^`0}`)L>O3בMp^ީk5N%D:feOw)zKQ*?0*yG2 q2.c6/py[s SwϧeHg : bp%&6{{ Qpq1d?@ޢ=7,C4(pߴփvSkt W3a:j!EDsXu0Zft'&g~RBwQSL}\=ݱJ@tp~.|f+hM%(Q`W"¥ˣt>+H2ؔ`e;Bf[ [Q0 id ~ާY`V> p3.Y廿=tlJ0Tok)%qAlK 3}ڮ6k}1r'{U3tH endstream endobj 450 0 obj << /Length1 2603 /Length2 17832 /Length3 0 /Length 19348 /Filter /FlateDecode >> stream xڌP c;A2[pww%$@p`!8!9ܓ+`Vwղ{Td*Lf ){W&6fV~+Jj J vBd IB rn67??++ᅥ Sw9@ `rAwpr[ZB#H`a8@ M]@v@S[ r ZA+WWG~fS;fgwt@ rvJdj'5fd*? u WSg"A.#n g;@]V /?"}ts4[, +#/CS[ySwSMRSHt;0mʑ/H%@.'v!ubrm<},aȢivrJc!Y\\ bˁ#o%_bH~> H ?puv_0]f K=ovd g'@~lֿ~d0s{[_1&?)s0q98\<n>ns[b '?d-|IRO_34tfwr!?Gu_,#r[O H7B&C2TqVV2!"]Vwn 87&6VS\ (it0kعΦ^ȬbAfwkX\!G])7E/7E7F߈"/aF©A8E¢qX4~#H">鿈#+Z8@Λ` f+bAb13ڸؚXq/HfΦ@-1?lۀ\Ǟ_9)3_ ` J89._M dlm]X~ i8KY A2B*dbavH,sB-z0Awq9!5raX6Bcx!73UfCfq[ t!߅ \^m l~3p@ԕ byuu t:$߁B673菶ƅ B)c!Bz!3g'ݜ!wق,⿿@ ʢP Ժ>](ޤ՞vϊs=B*]MNOԑ^Io|6"D%?>'#/O N~m A"f}r msrES}/0Pm<|qOu[c,SfAPP$as A!~ty?+Ae2U,et[ ̓͘[8R._G!"ͼZd]zB1Ǹ<’Ppz"LZӵnpetYG $CINMRɾ<\ N`hc_C'82zU#+l)_`5(>PY$tS?NܗbXK17ף59\[Q7M-4wMմ׶ @G˯3iofњi2.ۦ58A99zO}tw'{ؕ>ݾ"G Yj:|JDGjarlRkǬ 6xv^A1BG,^x⃲ Z4@Zb(8\_8:7Knop ;~KR{,qTdBd/p^韠zve}Euzvd4kAlcՏg@d"hJJJXvype]|`X |_Mw%yB9\_>YP}mccBDi@M;E\:MleKq m^$:)^HM8Cꇫb'PXz6K|N.mZo3lGtQ̛A14m\R!{NE aJ!GYaDNtWK=.b~qLeC Uc 2)-OYBGų:(Wrlh}j{ߏV*Pla.-.'L8Īp4he>ӭl᠇)B;ajh"L Fx:q4o𘝬2^^=z(Uk:NTUR䫃5Ƒ5 NG41U% k<¯DfhO6y9,,C5ٴ2EH~1*/kNPFϥ5M)c\.[ϊ<ͮRWT&'>' yO]2Lے\{ y+mY?>orј91d('l!))K_Bpr m[TLcp4o ÌpOߑ։>qkBf;s@:M;}3Cb" D4GuUj4+[{"㲨u"u un t:|CxM {G n=D*d[A{0@@4Մ!}x8 50d9ʔz@u",Ss$)=+lY`[]`ͻP%!M <|ʮ9|.Ya[y6R3$:${.J˽x4tQF@e.+Nn' aGC" l(8cjQacmڌrdj8>qk{qiw{,]rKnāЩs%ps;-A=7ǂRp%۰#CXc7~|##oY4aSyʟQ$]ߝh&>#T@4Dط(OgNfkV<#he(3|EF}@- B&FsP5N={4])bZL#2N 2v~uQl)h ǧ$u,W#LhQI垼0S  017/T:)7pf#|;RFYbrjLd9q3^P&4MOkNG+TD)-5-cA:%:%6,eW<Ce3ŰLtѬ(8 AM-f>xA66'5TZ׮.H$JiwG&Xj^?ńP\Ocu4]Aw=>2 gHc&;59Mzڹ@ <=r$8\ImsUSTMeWW]o734"h,L).hЕe]l"]j]e6t57q'O7_l9˥kPwj =Q@ُ1W+ uҎ 7M"YONJO(8Oumͧ$k*c+ja 9׮+\44֡~]%b4 R/..nC3PH RM'9k~.&0뛀dUqaozrom]D3f nd}W`*T W𬧋:QLW#+|FiddpdnnenqN1k [>;"F0d6/[^u,]}ImϜ큭)rHDG@ ,1Gq],F7۟/id>o `;Y_f!Ϛg9_khdv{7t8ߢ+>zk_TWrϟi+,zk'-xދ?"_O@] OA;ï4~͠:._:j.ο+XayVP}6=`vc@ G mm{u\L~líz ՄI҈g`qõa)t[Czޚ<J۽Kq=15B Bux/ae*ݞ-ԲXY/ Bcy~,wp3^*?VcIa]1ۼg>Vqິ^P:3df=EЅmQ(hΣ($U5X l _NHL!D^83]v,J9YM1\G'N?3l,*}QKQOd@3 18̚؎Wm .ߐ8bN)>?Hwۼ̌s8 DRͱ]0%TZ?'k}U&d81qJ_)~)QNX֎ (\#}DBkrM%Mt(\zAuF2Q;kIfaNkkg#'tl*ͧ6^{k4sla0lܞP|(mےy5{n\u{ 9^MPnV+*\ݹhɃP$wx%>Ѱ3^\tcMF;]]RUEef@O]"|U*b:F3-j)A_],^=tŜ!XA(\_F"Y,}qEeX 2qpSB0VieЏθ^%ď֛=w%JT(:GDbxdMQJ8STtɓus\tӹ#_4~vq?#%#nZ~Tt=&A1+D7?}1cGY,+ ^>6!Qò 2tO [u "㴎DJ&-edI ׇ gd8Jp]7~qB`1!_Dqy<#×eS%7sX]*.5FI%d-%[Uձ3$@e4 4xeOutqW~s\c\AS}0kQxk<%`XМS8\N]Pu;Wɲ^S/E|N؈(xs.F^oeXvA/`K{I? Svc(DYdѡe$^w6e PQ`Iw/f6u2e_,\,}bܷ̆hf` XGbq~ü?Ɲ &BԊ`1EŠ>W\XҥWb8ꗗn_w%s9$&^kve+v^Jñp,2d07R 7BU+™c^r;sYX;?&ks~0ÌKiw9AṠJ9_¤*)S=IkN[cWd$ƎwDĜɢCBN[k]69" 7PdK;t)8=q/thLs^ѠGm+ytI|BX\)>Es>Q͕:/+:r>fG2/r&y9X>"QSv{跈T("V&!~z1/@X]k I ]ӄ.Y.D۳>2 _4qU3M:+7q,iرCM{M֕y܎tX˞q7J7'}5&q+׊kv8:N΃㭱U%f$,dzHST(K%kWB>rwF=n4p[4b%]Wklb>W#n_%ғT0[FY0ĜJ|}m:1yຸjk{d dqK$t-f)}C=M-bv"E텑U%>&L?`U,kTυqYR u,ȮlQFi(at:vFӓL=]׽&+ BO{h@ nwMjdSEoU` gȱ"|:2OdYbζTNW#:'lűR[&=꧲? 7ZUÚɬ pW;IuM 1r~ejg 1!tRMRZC!XaXFQlZ8H2?>0z ʰ gBom-5MkDTth1CХp=mqߨ:s@g :8G~P&rŵz)cp7O|]ѭ!{a#m*:7 ]fv9rL;ĴcGn(*Vvi}G֭QV\+CXxWcF/CW%O]@w%5el`"dE iNaL3? DLW<&إȯw3\& sl4 SajݍSy9SYet˛JqJ}`^֩tEoDԞ2V`|T Ӂ;8SqQz,T*AonC )_UUL;.l0Au_ק,UZZWd:ԬN=B0#pGNkaN PLCglaox:ӭ9}ӯUjލgԸcf+&C\ξs )ݒ2 x鰑m|Rdڈ7YF$1юC.~QlHtxeKhjYCfѴ"m@e+`~}bn߭KNz͗4&p4/>e51ygcDݦIe }{Llo8^8qBW>H:|+ANp$ƹSy I eTDBi tl9\7MTU\?lV .PtL ^>ҬٔB\ ۈi^$)`fNVN[G@sY2(Y |}ʽ3+IV]JʸGJrsN3*hFiSl1Vp8ݢ0darfyqupY˼Xh>Fꫛht5s]_}u(|`.Kcq3on??l<ԋa/˥6\nJjs$!'0 ]1%hYTUFVL-%ː%ގ_TK ک#ܡn,{'Ӿpe~VHBU`%uG{Z_Vme92ˣ>OlN[= gxtUoݺ[eF-jOUTŠW2}-*/w!;{ D1˛6Z39XS?uq1)I>^ޯ7?DUWՃuT7\At?VoU$ iuReT?=C~b$x[toH_֜lo g?.)CNP 57'+71iIt:?VE(Z\?C5FS>rϠ/p] z^ `r^xߐڬHObbˑm/dUkp9{YzaGlnqY,j) e'`mB2<;8Xت"u?F,]vc]VB3/֩53^<.㹀ls덨X}c)UGL!2b"wmW2z$Ӫ?*DB kGer# [Gcgc=ABlڸo≋4BCoXcͥI)llUZ|br!HGIQ~K]QrbC8`s)V4=a2D ?5OHNLUQg|BK~{9%_}eT# ^x@lbP$r?CwԾw5Wtb7 u[$[&{6ܾnRV} WdI@A.!\*7g} °l>BI>Rwmz.|TCq6'jɷ-vfpr$[&/G'#ݤ5XeTĢuD? 8fA;#-<֟i`lIsnnf .,lxP9w#BCᄏ0n%KĮ?TeyN}_M|2S[sVh]t]1۠4'wZtsǭ.J]8QTƠ[VӋO#-{|-=iB_tݸljy"X3IƜ 7Fh㈯kƟΐ Dks7z'/FcEV (hË[IaYMDƒ粏 PA]~y8׬7?>$(\>ݕ)@̯HʾN4X x?mͮ e Ng`Y{v#K0 dKH8Z¼Z ݾZߐ?Ʒ`cɻ] 41(IQn[~M1ZNhA}-'7H)گM>ʬ&!qQ9 %b.Ó5:Z\FLgt{,bqҡM_;C(L) Qt SkA ^%KZW]c"8<ٺd̽taR\Cab21p]XH W-Ta"@,[+@槩T 'y)TP}x^ՋA1`O+pLT[B3O1$yWGo`2w|rg$¹Uf- _ =*ʰl&mأ`Ooqs6>YW*,|}rWQȄ}?NEuOim@Y߶zՕK<ռ(K!p:P0TQY@ԞG&kM]F'үܩ9 .¬ɛ<#A <-[̄ܘpCu*'M-rij(ǪxE˚WW^+/ WJZ =q'a/]i\-|c'Mo^?VՃf<'%ה\|bHb9\ޥhpqs4Sܬ6QXBnF43ײ\JĎ!`*+#/90[(lkQO ݔ!ܵ[Մ';+öm)oWe(!5uqA&'dF nHIs30{`sBUA2>OP]@@|O!Qiһ*:킆%|sbB8Y97UYgܫt`RU{y26`0EƳ 6km FӃ6D`:ԺVB!< ,BEp:dz.6 E!gڢ%hE U(JN"e%z bC:J7S },ƨ'b†/$%[GTmexvB:ҡVhd+3 #(}Mܔ maxG,ea, X\p'ףJ|<12Kj']m6hko p JIJV7Vj{F(=bS kLZ„<%@keր p-m3=HA\ɖ^dY`ty~1LZ33 ^(P$81gˊqBF_]lb5tA7]RwCq7Q5mIW{ \z)X9w2a`Ow'=~% E<$(,ce<"2]2s3Ky|o`cQ~vQ>g -4djYzY$m4g͏7=itgL+IyHLf@P-պq0c}40S?U9FuN`Hz/++ε0yQLv%f_W?\ 雗5Q%R?EtT\}r|إt~ojچ@mp׏y26S;{BaGbF:(FǃH#{E}% jƃSu& m=m$FqTfEt\׷\(;u?SЗ0i<[}w#M#IZ}L5uV2xg΂MЯ_,tHr(| ^q˽`Y}2*Ĥ抻Ud8!4D+P  |1fZɣxnib9z؉?A}wcƃUN13 m O/rSQT 9T"+>7\67=yj2 Omo~cByS! ג3mGфX~zց"NqyKqNIit{(ƌ3As2(s)ϤOZM&C1-on*R_wbX+ľW 9bKS*iL~3(ș|B.Zq{E3@E@QcrizCozFE$k%rۣڂU 8SeyS4w#+;z gwyGj͸Sn7Y:b)yԌ>>Pʊ[%s3vyOXk G g &a͌mr/BiI E.>jauX*"6' zџ_L'M{=/h{l7m uu(,4m;a2^փc&Bҏ;gG~G)+o#<0?n\ ˧O׸X!=u uټ&lI^-&mcb~lqBI:bD[%ոj_C 3cNrd7+\nP}U3d/FR&qj-ZA s2b&0 Dt,i8,n4(tOSݨ ;RZqmy-Ez1-H]&(+k׊'+_/נ&j| OkF9 IaG7%Kkq~I=ʌ2y;oT+g!L 53έPA*."gȻ+Z|sn[}٧ѢͥNL8cbr{e;\R{: UKΫ-ӛ&Ya%;9jz3d2+6^YR h1N.u ZLkgÌ:6UF5l({LS a@WcbGAo~ ҩlNĮqb]7Ůy'?5 vG1uk C ĨkQwY~|m1Z/=BqX0dEh*RϬkvs}p?d>S1x{X]#rĶcGPPaKe=$7[Ԝ儉ғHMіMhYYpJN^^+(L \D2ݩįMډ̾.WXd? &b= OɌU2t2 C}U _x*K-v0~t4z]x~cu7G}:'m}'A7#ws j)4Mь/f׎alIXr@Ga;3MmJVM*._CcyAPiQ<95[4$nHYHJ & ORa/Df 1OhHf!~h+&puN-ثd}h6+kpLҦ#YAЄ? Cusd$t 2FǷ/GbIto$r Z6.;ǐU򻿨Cq~Pa>¶e;*wJz9sƋЋV+Ȇ5">F7:YQSP_^]6+X-U4Z`˙c2!xU| _˰%E !ECnIlZ(>4T5) 1+C 6pнr^sV-E[-蓎V9j#dUh5;xxIz~ AQ5K ,H60 _̚Z8WSݶ)$l|{qdwZS>,;53֋LUEm0"6c"ۊkSj0XEӛȇ,̕Ƞ5H$„5#4kթгؼ+aC1 9c< 򖠘h,H6A$0 )lDg"쿤RFKX  sr1V(V)pG꥿S}#&8Qu2lC2 }H3byМ$ 'ht[a>NQrPߔW4G!Qb29c_ڨe N4i0+FMI5q3i-$3kȽBS&*{R}>x<9pr}('uRagnDZTI|1!OP~ښni 跇PpC6ֹze{Xa%T=$i6%'?- DAָB oJ8YCDňs.\u545O@ ay!Q5}:Y ɡ<vFf즇1+s49)竘H,XVY.~0<.#H?ESXmEM] se&ző`ѹ`Rs)ߤU!!aTT~NxI) Vv^yįFWɞHG(n&P6} 3JbRSA]jcQ"""ˉő2ˉu۽rqnp3Eۧ$]: <\KlKĝxa5QԻ&~اTԏ s7ۇYOZy&0̴ DHxqU֓r6LЂljߛFN3wRk=SlCy1?i\S IqXC2lĽ%5d=axú-h &}1+YEWB[a[qBYȻe]5vS.FDi2잣5_עa:H)RTV7G_# 8 L< @!:5Ҙ^-6s@)ۈ60>ȣB#^Gd KDẠ̊ 59 ӑ}3@wr&.`ڏ}QybؿNE*U|-ɣor.hfX^@;} ] PHfBqltY/|ͻJS/;ҹ!*B\p RHpZ`cf+Bb|*S1 T*kMBGP!@X} Y4IϗD( ЖM#N1ɋgpssr>KnnWmtuaҎN:i=dxύ>iXG^WW7}* ֢+Wa*0-H/CTl" ՋE[YĩN ߏɶCaY}7gh&&"i1):UU"@l--Ra,gDй|[)dD`Z[)< {jCG,{߾kG?WJ[4)r/ympKs`"n `m /пxaT"iX2N><$C endstream endobj 452 0 obj << /Length1 1558 /Length2 2884 /Length3 0 /Length 3858 /Filter /FlateDecode >> stream xڍT 4T}en3cd_!̝q3Y ٗH$e)Y QROZReU{IgΙw|K]4,"Fз* NQBIJB,*CLf ,Df@`!40cS,cc0aHcX(f4d$it?D`!y~2#z H B2 TF@!5=X,:p ^LEWF@,d ,Rej(Ib~W, Aa쀍9pߍͿ؟ᖽA3Hy S2DF,_<@I*|,NtpȀ,".rD/Ali^^ b3 zy0@d&it yASeD%,@p Db[?:.t #4@ "?(&X 6ObDd Q#b#g@! ~XodH4|ihC=s[;e?zz4__ ((%e@'ܗh6̯x0S@z^H/ g4dA@;cT0D ?Q"#6n/ll3\ ߦl ׿,r!0I豴1?ƀDB0hIcB `CN艼)LdXK*?3DiTTACaRRQȍ@ߥЊ0@LcG % OhOXh"Z'TVtd7D1~*D~H%}"@^ Ez/=C Qm4F3ϔy&OL;k(g9;xnu󇓳o|+t،t H=# 574g+}w&Q6Y?L4lxߒ6`)U%Ê<:VDM dz*R72_HT9l_FTսΕ_ uM M鿧*ϭhg(2Z:l""Tڝ%e1d%&)О!K9^޺J%N[JWh:*F5Q~ˑsmZ_5HB*#-QѬBɹWstt3%=8qNS0dd sfj 1zuXm)ryzv8[+yTqiFkG1kMeyˏIɪ~|=*H^黊<Ŋ7VEq0(KWxΡ@,[/xtoaܹTw1n颧Fdf; XĄ@C)H-%%\Gxre*rʶr5@./0(lz;$R mǮ]Hˈ?׎C=ܯ - :TF`V >8ժSpy{Q}Mi9Z7i F!K-MNe)*Qa~e8o赐If`RϫVRP/.-ު(aajx}[~x4{a>wbN k)\LjqCO LqRRzN1dc:W.mR# oj4[%ddѮgL9~`^a-h#8̸'lXَB%I#KsF+߈X!wFƓδ? vl)ܚa8}1B1bUӃmsSKpq)6f)0{*kytTzuط`ϭu/,6՟o,d͝\=9!4οB DXa]UTwwMxگqJ]Nj u& ƞ\OqXfe+n7Чz+x̒3:骪S T;UmOӿb7+a-vAiOCJc:'.cn◃7Ėh~#JwW9> nV+9V]!k<4*yXѳC/$c6&x|*vtC\1wzMcxUyO5+^Uekv]#ԇ:JZabod`ʌ3%if{Kv-,_=`%G;VmG3%aUF\#c,~{HJbJ><8cp,\v;]A_ژyܣ 6_y>ֺrpWcnmZ.Ի&TEKyz3C߬H͎8Pvïhۤ~.p;ϩ]kX'O(-OCy5:7kx꫗3zDt(?^FsUzC>Or `T- ]BNZIδJW/0GRL8s0_M޽@;1jObgOϠpc֖پ&BlKNi陒jZM7>I\scD+f5h;k]30t1ȬbB99q4n~Z4V`LReoȖO\y;{Xf1ODdh]N NbF6P] {sI1njvB[ޅ(]W)|A)(U.jkr[!sK/ǵ1= wTN endstream endobj 454 0 obj << /Length1 2247 /Length2 13716 /Length3 0 /Length 15060 /Filter /FlateDecode >> stream xڍP š@Kpwww;bBqw".];)̽$gkDIA(ic `ffcdffEP9Z#F;ly0:e↎`6Y'K _C{^3 kc t@u;+ژE;@ h26|0t4Z3ZTmA@G Aohhhhco&HCp9T@{g /C+?)j 6.@X` 2Z;=Mpr<@h?oxd ` %]&Z:؀ AF`+7H( Cd"_a]6Z;: U8h n?'?dmb '[&ukPF?&`oLWs[ fakc 0zLDCg " d0G`ۃ\c0xLl-~}Lr2*t0W'*j `08Y< /R[dOi̿XxanY8g(04͠`d d`6]M_Q$dio d ;9 x5&E49Y_!x9D,m#A 4Q9=.=ptK5PM``af?:&[/f61kX98nbx\m.0;/=_`K0F<1q1$#NoTq-~#o`RE<"6n0O_7,Ć p,M}FXglc nQf#(x٘~7SۅdL CLBv0os7[s%e? ? 7`Jkvz0ŀmG f[ .| bstr,ݮmnwpI4, .!&Gs{ N矃uY޹hON+x~t@c9c@wU". cI4 mNp4i7"CoW%=BZ)>z>}QmE\;#D `P| !Kečy+ZW<652 DG0l>KMғmIz:;6NER}hV]S19t69PuqOcÙ0N,%q$z1&aOsKh&+5Le޴#'t09lҤY%=/ygnbr˚ =98}_#Q|p){f$ny 8jXv e蒐TߎvT+%i}pێS;N-€ú\o-b!st-"♅EU|yVԏ-^܅{`L\ݴV)+&P{w>pNN.c+J~?Oд-۶!f3*"VWb8v?Zʇ [Q6RAey&4/6tqq/@UZJ;q%2|ųiYTՕw/||U;=Y&embVkѭW%2=;&.\ 'yZ8kMdezϙO.d9^n`9$֧X(0 FdVF@ }u _@jX o ƽLzn3|wP:%DR{2E>wbi^5}x-Qz"R T0E"ꁗA8PfJ V.︱>c=-D HvCay~Fe;O#JIt[.͎q!U$꿑Ÿ:]NzHio2ͯggY:=V :/^Olܫ Z+.xDaC2zPU znOƧW8>+dRƇ7D6^"Icӛp#4Gfw*&f-$ߦxb:mQa0~OPrX磋f=qb4 $psWITxG#<*2YR,#s?W?𖖣!S/͐  f[<k miEa[\6L,UԸϮ!Iz!uyh̾^ׁ|WX$ O c`S$6NJ^xN^:j{U8M.m蔮Zg:H?#$H\bPii8B4g^_}mwr?}֒GHFDQmaBb?%gyPL(\aA?2{"d=(^x!ˍ29NJX./JsDrũ 7;\V ;w[A\TrV&\¸RڄT l)%3I9؃WAw &زzDgѳ;F$AA)s|YYri{#nC|,9DdZ5Mf;@wHWhV J"[Iy"Psfc'TDZN 'ŞV,9d*+HmaɼRq٬9޾xD;v2ܪ3|`7^&Ƽ%G`La:~s;\7=(CmrF %<𺞘~>xh$dy )I+r!!kBi}ߗ&W"=^W C-ԩ$clajQ*}뾑 ߟp9 v&CN A8vCq`!k}^E% @dzHS-S jͱS w:;2 `p3|q]^ZTAJV7^Y? IJ$mC5yya=^ƅKbE}fߵKy#b.R/qR [a5t=JS~7g2^dYn !7zjK^]y$>>]yߒw'o/ uqsU`JB0_'ΔpfX QdY^rVLU^t)ǖLIO3+Ǩm K@ttg}k/~1ؘΓ^3lV )LEeu.;&L!Kb9(x^jۑH7ZuүBPw)DL gLko+ Zo8%;&T<թ>ٙb^A 3GdI s(#vy4"_QkJMyMفaUϹa2K;s\/ʐ3_G>Ӊ0 Nn& xjbJ- r.R 3o4b.|f,z?u"Fḛ:lER6=ӈI;F9sP9n*`7?34[d~& U.לdc K,>B! ߛS7bL؟cL PIW?S-!۔']-K,ô<Ӊz%wvຼ*`ncH2LӰ {XG;֖OIf RrV-MO Kl "Y>9u)芢 ]r19E ?g}|bTxw95reٗ!nCFZLo9K] _|XUw^).Ka4~‹|btݭR%E?0835s~gVe9p(xq(:^-*Ɔ3fCY4LKlMW"xʤ ٢Nw 1g34 C:ɺLdvIxEdCTۺ_(X9,*֒$D(,}K qJwC#lR!}{@Q $i?b `2 /T+˼9Q7Ϣz vAnpG6^-q1'l`@݀*צS_@T4%c^2 P;pHeJOcFvxq%u, B|%t?\pM2 mU/l*%U'QS,riF4Zf+| 3 ~Hj֎HF nG2[9f|J޳6 GJiE[)f{3zT}a99G,#0ױ)bew yye~}IɎ@\AIbOꦛBR4L1]KgQj˔'U(kOS\lHRMNxe8ö۩`> MvtP}W"l2 ,]}(DBtbxIjk,Q썹RJL2C{`E3ޗV!dYԉװ۝"f9jcP򆁣N)2-.Oe1J97N3)o9@ksZffcÃҟdJ hjVUp6ia͆*!R4'bIK(>}-&*?GҜ߽XӪ3pM;;z-|'gy%˘6ַ:;)<6Qx]8a,: eha=fJrczI*8~-u }>1fv6JPyFxޛPIK\$y0h=I?}?v'D7/@vq̶LwG~KE=0ٙj^F%Wl3Uj^f;Z1>]d20!yhqS;:wٗs%x u(eE_uR>L/;2hTêNG&ޅc΄\.3BoLIu ]c챕Hiߙ8hqY*2\NJ6BD? 3Uu㙫oh/~?ֽhOnG熟yG4HSN gG9Fϐ-x?Co~n'i<%fAáuRY~f` A; i/O=th՝#cY_ ~uoÚҩPS {X@y4(,1,GvdGj; w @fbDǙ`8x!՜u' bѳ6&+b]}n~q$3J"hmN߼r w_H/y;З(HzZCmaEwpd0#ԯvKR.Eg)mWUt"?Ƨo,}N/i|Vi^i{*]ͣ1B{/V> WOͩK;V-uGG<6oo@nq}쌄;LǔxVB2B3,at`1b|zQYb=(^5\Kc%j̐mK m53 ckTpg>;7w7Y:j+j&NQìmBɊ=G9"1ƅL>/7ՆQ% $>ha&D~V(@c-up+xMTWU٩i_ B92{%cS0Ma>3(Y[P(V=k(ѥM/rЍBN}87zWmXuh4_C[{glQÎt <i"cHǷc{ 5濼R[Yİ{7{\=2ohb4'.=g! C'W>I &Za;B$&}MZS.qbF$fpoj&5yӱX)N) 7wC'x)KqM:92$7I< )b,cSeyhfEP簉f֙pvnh"`~*]O#$[P82sBHrBy<ë9 S)آhނZee ;9x )GX!$S6 ]E[\Xd};-7a]*qaWy*PǾ)^Ȫ6L_u_M\͠1W6ѥ@t:,}>\x(vz֐S+k?pM`#柺 ,{PΑOȵt]"ttI9oܕ-C;'pbK@ W ~D*H/ݖ[.XcgVt4,ޖF/Mxs?[xT7 [F6GQ4~. au$miZn:WL+#9?C\$Y4}Նu@2 C ^${8phRiݲ]]FdDySğǃij񋘟ߠ?ćS5Et@4OߡΊyWأQLk]鋓' #Uц|V Ȃb6z3{bh d:OL:7W['F[z'Rbm@c"oMif[ ʳZ K^xͤQ~:U#E%AqK<=>iEFhSD+/??v sUJ[YH ]8 EDu$+L>+-gŶ UjZ(!g?{t]^A3_ؘW?'}\֒ŹZ&Z.RߌAeo-:#qedOYBLW+{?ʌQOboFV9b:J+)r~4tBsD"|)~I%EurC|m@E⵬xUnR X⽥bGZ]Ʒ$Ro9p ۏ|#~a7Hx'8^fR50x|lz2.F.QY[OD䰀mR۝XHc83UNPNό4FuLUG >`Oč$n{ֆR'}7 P nOc1ijbr>wB>dh:T> ;PŒahPtREW|2gER˱x Ӆ;..@VGٕ%DGd;M(]'"2[IBYa'vɥ&S6zz,0yxGr#(bD͹'n֧شzDPƄv$r[G0W)mˆ9z%1DI , [Zp|S.9/兑nE|h:_L0%yCbFsXs`!i1_"O !+[V},Xxj&u/6X!x4A Zڬ!` '6@1g2Ë+*0ƟzfUԤ"vaf\ui>. 7%0}lKa+/ƛ'T[^̼["/Iwi]jjժ%f WRI:ȭD56F 7/CǯVËoYr}cҠYPa=5hmJ95E3zQτ6 o 3)U2=5,wF!u]"KIVJͧUͩj L ag_T[%#B][ǥhpz2J<-qfPhȹ׆uef0UEbdO)aZś4EH-kLƛX59ݒiiퟁCi&)w'9djoe8 ~Fv};5ā-܇7gl9vͯ$BXoIpuh';OYnb aGJ l-*RF|USC}{IUl$ ɾ E}H>4,½cvx*҂P!0ت1:gmT+p!Ӣ'~*fv]\#sH F[qgP+ "$v8&c5zdt?7y,h8r"VtP;#pbL*y#/wo]V7}4o0_ :BXٴD9mbz Α"*"H55==~pd`œf}0AK3ӿ&ؽ " $%%4h$.V\aX7o4cQr6 ~ym39*pn4醻.v'mPd_(i woE(hԕ8mFnz5ÞNnt+h_Jk FEJ VE4ʜZ}>ƷO+$?W|*qxt2(ݕT]lxk fIX%2S .-,ſ|]Ϙ"k~{tn_*Iڮؖ4-#6{| ե0'zX [ zw'2eA3 *eʁuIA P5:a7Z/Tj(_AQ)Z[gHyULL)[fK3? ̍JvwT{ xh %cŢl qĺx {6ÜXue~ۚYjBF|F #-pgFOj^_mћ)kLǦA=v0g5%V|j} M?P 4-3-muOMN&-)qF;!Gv#B 'R#5霷gjZ75^3'NN5|/5m; 9T2V$i%'m5z(} 1ĪCН"> dkA8 2 N\BeLy_`Ђ| iQlϛjap>>a ؑ/L5]c~(eJX ?0ڻ#k&[Rk]I N ]$> dvXvIz(HS~&%C&@TڿDB}DZkF- ²͚E`۹^kHT6p#;:։K|sYϡCh+II_&'7zW,P`Qfع_Vt1qף # H4H R8o%WBQ:.W]DAQ\+P,1^ vfΎo|Jytu>fE}.z ,{Ɔ1zZFhjƾTA^{XQ:Ҡ†k%wbKcnh_ #gP$KRc 5s+$0`ff=SiV I#9` #9 k ;4)P4&_]ƿcˁ) 2IP Xފd4s1 Ȗ,ۏl~-}ro]mo+YhGc>%m=~kAuaE|Dţ&C\=1}r369X4oa.=KE`O^ -tdB/oq# -}1ۭI]_05? (4]]䟴,;3/ bdjRȁ`,pJ(Iߟ ҰCL"f ʺe_=b|/g#IP~5r9WGY{|J5ڈ"Ό-Y%Rb_ֳGp:cXɜU/J )sتg_3t|Q2]2t[i#bFiI;|s=,p%Of>`m{r׏u?}ςpDScYD ƒ9'iAyW(}69Z B%v/GaͧpQW:$;gl?$.iRbU2`f<:lB(R*h-E]L=DiE9+ݱC]/}&lkt)&*6mw1Uu$]4-jH<ܱ%ѓzO|1VP +,3GG̉ĻE "G+xIz$Cǝ_]H~h!= |H4Ȉq H:2 ]L>aIyw"?o@96 tcJZ%Z!᝼Ѥ|r/\X3uHsjrϵ1jBHn9łF$ _[}8zjzkx܌Ѳ#.YZȟarAK@='R7cD-%(ML\NMm>ê-Ia``a Aw+PʽjU>/Qe\e9w&\~x;uIݙ3.@Og ?/"KWPRs',*Re>F]sJNMA/IQ uiAX<(g^)S2 5V > stream xڝTy8J(K%il0fy13fa$BB(|Hh+$KIB2ʒd^?]s59>#'D)HЈD)t@ 4"Y(8kU HX7Hd2q D`A*pg#k1@)TDDO4ƮBщT:BM P5~&(MpP4:RId !_Q={~hjjBx"  $2ghBcPWZ7 @ @W`CзF:Z V1NF$CTP-" xY%qG* ХhJd`A2'A7D( @TOAi n @D,Pd,_Bbz#lX$Jb) @8|; pي_1"RȠqzbV *qd ġ Щ@h R{o=ߊhR/8yA4*HpGxNGsވD W 4w/;'È m"{ 8}7ʯgCD(;28ǻ%F3*\HnzNF{ՅRH @YECPVc#j8hi+Qk ֔N4?aB@aلJ$+1.lؾaVYoB"N6ߛ W&[cb#: ~.`pfQ4hFN  ̣c1S_'Yj1@a=w4==Rd_ Gz9ZiD- X&:t -ڲ[ص?ߗ/ ,vWWOyIU]vCq!P}Ikѯt>D f/z9l{;UTӯtY]ÇNՈ8Oe~S:[| k˗ݞiݮQwSl:*uS*o붶=0N4I &?y;Giԗ,b ͧRX>V0? T͝W QPQ}  Q|KΧΒ"S_|tz^m1PtݭH»p+ cZ[ۊByav d6)V|lu&s" *.e|X>Zrs#t7GAli=UڽDNK8ni[oJ'9[[CwM~]}[=YN'.4 e{TuΛѿr 67n*\uOT8Nxo$$Q|Lhͤ7ϟ}DN)sp)SElii?t76vaFH,rɨ8sG'/>ޡ+X&aHΗ OWҖO߈,.aѦ3^\ F@ UI:i0ѫ*4v/3X[Xӓ3kנd)@ɍi[|./Lo L@2,ۛI[z w׏|0粘\t6sZۙ(5{ɪPL#=^hOGP[Pj4ً@M\uiLUY<46/u,>ˈ:=g#D]7p#5*Yo\oж+Ј=gDOU'zMl]Sζ7W4lwqH[W/C_2]R6TskU.zH콇ؘa""_9k:I֫0ezqa Ǿ*XH :[#iQZ#r5ԼY[Etȍp↗KmϿJr&??#Ae8Pa1{/d=LJ M؛5cmP+7J>@bDBreK}x0EFƟІUx k sUyR'K&ZGHP^ ۆ5r-}ކ;K{PP@n=l&|7_k.rܯN;ZhpL@o(@uilmizŋ]u &%/\X}W}}YOR}wJx8䘴=^S>Y̱Ţ;; E.58'|2LWʧ:wؾ0^z p|w역 هc7.NиJƍ&r` @iLu7:2֏Ka>v<;Ք(ׅӨQhs'hdJ;[gyMp;K9W9^X\)rZ\ub/u\'yJU6zku)*Buk ϭmZb8Q1u0AA05p0-Wjvݛ &csnJ+?̕C ̊=:ѓm>߲S%9+`gkSbMt5K~G\^auY*pRiǁ{ yV<9Ǚ0pgYB>v@HTֲ W0yUSd+igE1#=o/䒼;ONZJT{9&܆ mVv}T3^<#*ڪ{UvXT I*6Cq6+ga}eik/|쒠5i^y q+]\;J_]g25=5~  M+OEb8d~c{%73& ߶1G*Oϕ ߵBKytP)w9|,$[#ft6lwfƝNT5q'oWIj8MuԅS [`;oeʅL󆻤Rkz  DS$tnnuDvﯲ-tbuܓ+Owo;,vCz9SU~_uCYў>fc)st%F_5gٌK5O֒W""/~RDgkG<̍[2N:v5dEKC#;5E:> x50jnWKwzO) m%ֶ`a5,+#ӱ0"ng:Ww+ E:Y0S7mo7 >[JІWxo endstream endobj 458 0 obj << /Length1 1850 /Length2 6215 /Length3 0 /Length 7211 /Filter /FlateDecode >> stream xڝWg8kו袗hI6C`H >=yPDή8Bh=BQH5%\BC%Kꂂ!a˻@0@V0 $$!*"! @&"]$]0CcP"vy -pq}"$..Xy(- @ #..[o~@ v0l`p( @XUKT2`8ì 5r]Hx .%A( ְ 52 8A]aK% u#Po(h$CX1K9䂼u\j#Qh \0VPw;0 v m. مbh0 PweO 0\pr]0(oV CQzSѿV _/e߼`hnO/;^ r˕._ vh% ?ʆE p]""tDD ^\}q9[HJ ` 0Xk!@דBZ`G( dO%'t ݹD!A ." <Qb0Xa 8I D_ p.ĺŗ5olo}.]&fWF爕0p;4=Njg@섺8b8WTb\v=?3&"U"l-/ sBahk; s!%'$(q)!(򏖊k$R0=4˰5B_״Pw58^}y`YF7~IֳyEz%ym찏-ag$OV6Xz RJ40EfKaZn.Z^ͅʒ%v?oW_ç{Wj[Է%re#Ml-J:@:^^}Mb\Y!qRI]~vAraoS;i BדRp.%OFqJ(Ywo<ꭓ"uf1+CvFd+v(gvM $-xoB3 xoe;sk> p#^5Pפ 1 .HwG!E c~8bvpnuMg-6.^{~.$Xʏݚ6 lӜYefugۂu.Ҡ#;G|'ɛ] c]-uBcܝ؍yu JT!O_a{"u2ƒIW}E>WOS4a *;c۝ |4D@k}MgܯjĊ [mDoLTW0>>(z!UBnzK#7Bq \BA@Btͧm*!W]⎱|ҞvV0#éG֡'{P# q"$?k u؆͝bPdŴ~b[(~bS1KledV 4۝E2nL0SUnԞ%W5qoR{*Kl.yKfJjsR' >`2BU9l%}΍PyKq1Yo.| ܛ\L&u /oierO^22 %7T]af]veZoN*{B[_U>1:rνlp?IjUbIv'u/)Y}PƋwjɭA4ѳ+عϏ9 @6{Xk?5F<tT‘euɶqKy?mH9mŋWW_-['C4c呫\_2X#f eZ=SXJ0nY%cɮ}bdؑ-amm9CQ/Ֆ1C8 ɫU`hΏuS%d; ;gzi:,s*3ІjPGE~ $d->"U_iV`Pd&CJSZ6r^[8H m%*Tqvctʝ+ޯT^W<9絊W?jV\" ǃI z_poʔl+yqk>)# ;b*OER'GxDWEUMV@+|S$3ǘ*>EoGɿYRN`.Hxuܷd,s:l}op;yfvV㱱}mS\S;ڒ|ᆰI\zmX:Ik[#< kM;{t374!bkcX $5݀'|kKѦw\w~$݅)Wx Y/3^iH]xCwJn Z !J9+ $$db/`]ISVrUkg>^3ᄝ_z:},'^К1\Y{ :J'5{XJ֨U6B΅Kq;PZ\2bk]j.M/f&V檜Aё%_WaA!b8|!^I}Fk&G/-[ Uvbcx22z\kv8!|oRemB0_#g+׿q0:k]u[>^YCL ן>?Wy}r/#~0{Ľ&Y>5Q1|mr1{m|uODҘ|_Y{tzxC-1ubrEO~}AWgW~:^!uЧy׵ceǐRj/#ʘHmkG%=S<̼sH02?7`mĢY+??:T0!anA:]&ܸbu'55a͔BA:L?Th,a2 .g[OHvHռ7;Dʖ)p*+ɤN!:{H7!,QI-f#sO;.L<\Z]gmG:<h(Ig "lLw#hbc$LYTeYbEoԃ׎]b *Opo<Ln@"O s>+X桥tO+ j_ג|؈V$|A)r}TYIx]1K #:N6m\J :V-:`{UgE)F\cn{DǍ)/V浗AvgrwL5eƙv%$/EJ]}&u瑪 f.鴯Fi' YWvPA[:et&B>S z_fyWԞ;g%Frx" FG['P/hgXN"mV+s\x$exe9Oъ+WR2It3:OUijv>³ mI_>DRcn)h=y:GmCxMP~n~jzk$@a\t.EPݝ`)8 wFb_ԑ緍dd_yL=r_,21,SaJT用m~hRq5z<5EBrڪpeDY1hE2xyzh7Eakܟ9;T<=XuifD zSL|v#,Y]G%(D"]Blef}, b4=<$[}[NvJ^4>*|Fid! $sjj]LڭG|myg8oyJE%yp[GUZ-lo;Ƅq32/u}Ŏ*EȘ1^#SRhx\ifgc0@KꐲRrF]I`-롘& 8Xm  01yC ~#_HfI"{^s-3Pd.tK_a⦗tSKi#Jo^U7Q,tH9YaP.OEf]6?8ۋFf9˟D{=\[F [9UK6J 4K&E͟٬%P6`x,|{3$2T7iO4C nY& ߪksG3HY DWTKthaݴ؃*5g}NC?GE |> #%W~ѐaۂFqB]r2i8qk#hگ5r?V[HQtAHѤJP (gϛA7eYfj5bv<7*FdwYdz*HQ V2ILcj?qm=80NJ," MQ~Hm]w;8/RW݈(Wp3T ʜjoi+Fϋ6)uL;汕|mi,}K!6L@`7N 3o@F,&VyXLkjafcյXs5лqVg5?ڍ=/ <$7-u,}ۉgl;FNʮ_"r {UX3A Vӕ?%{OL MâmY 5cuD$N>~rs=~q6Z}+rqӡ8Q&P{s]k a?yTv=c${2c?? 2k 95;$[zEa*Z*<~ 6^2,[>*5NhG.NгBޯ\8+9cԣ:#tD~ê$_ZJ Vzl)㊙&ۤ7b~:抾*omEv%OA|qU+ h|:(/FP|Ȍek-ZzўhH&H#o9?lRU-S ̓9?h=z4Z!caBc B6S:"g5`yy4s'8@uSeCjYdUګ)ENG֡v*Jvg k0J2a[V?3LVz!XBXσOu_ [ftCl0:Nbȿx!#1X'[NS|&AŠYO8(t$k}'YͷbU|87SW**b-Mv!ԆbO>=MVY 4hVhEP/XGxkC,+l44oOA< -wS~!f}zk2J:Sn=ADiPo#u239#_d8u|' ͸kߨk+έ53h.m{prz#R4f~x|w&&d6|7Sۀ5;ZD:$NZn6r)iSUɺ_W-[ey7;pXT ̕R7yn$յUƜCP`WD:A+jifx$V)(kivBNv/qm?&-w`VYDͺGF%i%i i? J b5sNHoS*C)o+}v6Z q:rE2T#$2L˾ME|׭J42ERȠ > p8s7BZH'HF[RD4HHV3)<̅YND""n?$,٠~1ݧ[|r% y&*KNzޡv+NidwwƒjnpDEZƄܽ4W*s4cFSڮy}쨯sOq["DMHK4v f,̾aUt>\^`u%ټt3_%BFGP؂L endstream endobj 460 0 obj << /Length1 1166 /Length2 2587 /Length3 0 /Length 3326 /Filter /FlateDecode >> stream xuSyR\ôHJ$  $&eAF3A݅A T4HCXfg )TOnJ**?8B3H#HsɔJ 2:bQ1θOS, db4: k(1=L˜w ;Y 9TƯX u$ F"d fB:0M '0)JEœ)E XPA @285΄A췽N%0u v ŐIП@аp4sQuQffdfJ56t 3#BG׌?WE_)IX26S#Tӛ' h1o "*orL=h-EG8*@ z䱦) G!!8h7|Wda%jp/+ 4.R K$4C :ӕ(*CT*S<}%0 " +M%T뱮6CV@dRb/P(Qjc޸ԛ͎BY:y]V1 푼︠}a%.Nj_5gfxSؼGY$BzkfLn!%sKV3NHF xlm(xT/|*ij5ۣ1pB|'Ylio8bڬ8u/xeq^>qH@Q4dֆgN^5S_Y\DXafq-5ݚ] #d*x|tp}MFPx?[f8&$A.K=dD~{ѝ4]ˤ:mir!49#KmL 쪎kS"ȶ9m+a{P][BX]Lh-ѯ;qXnW\;!yKd<.PXZR+OYIE嘸C"G> k|+ndmXqSE8oK$$_US_K<&nSci—k|b;4J9CND]4ϊ*:\ c1㊙10ch6DʆTWĆҺjrz׉t2DVLU!Rf3/޿6=eN}VTUpI% C GoS&פSյgJw?)L,?LjpGl0jI2wy7zFE{V>8{5ld$@*{”ց2 `q-67 >#}z,f>w:5눼k;:Ylm$v^[s]y˒!]axlm?0 Ъ_9Ę֔|_nI''2X^O%lryh0i3Qb^~iXB\@zb[1S]}_iK^)xXʩ _ ~yHEz4yZAhK27:~Ht&f#ݰ03N4YP"{>cM]Pm+GL^rJR.t;Z0^[9!$r_O!Y?9ٲLtMXvQ{zԴgI)вT:dw*ޖOsݰsd]˗o6G)8BL,5xRԉ_:7[y-ㆃ\Um g& _s Yo}v4z.fgQێ w`nuߑؓqJx!.e!K" r>s?Ν]/IT@oW?gRK1S09ؗ o١Yg& ~aY>"$'JrB<'R!Zyҋ4#d-#Θ0F~!5 ãa4=6_FYFYLKV{N7)W'5ԡ[n"!3BYWۛo8^.y=l±aۍ臩[ ,'ء w St[]3%PwRb%yB|>Wlyr*@8_vud_co9JqO"XS^@ EFnPp$~ZPVLV|F2eNV t^;DwNY|Ugl~C@Lm==6C9pj@4\HM><<s]p[&=Ak=ꦰf姷ޓ\9=qFٶ~^niŵ"z痔wf ;ں\nXL{,-S5!̈ޛYE䘨!{ O_ꛜ_^@cM*L`;&ユ`,u$mZ3^Ewb4hP~mȕb%.Q fbͥIbto½\0S=4=i˴/ymquGB H7.#_`gkGBm P{Odܵv8H'j\!6)X3{2 tϿ4q'W䪪']WuRp`\L~M+a_AK^ì(ۜI9\uz3l'Y[{)ճa{O˚}fCmzY'],c峻1vW]LW> stream xڥRUTڒ=hqw 4HCpw AK; .A7ɻoyڻjUH!mbVpzp9EzN ww 6`du< .P9X <|YW_7+?)+19; `;:$@ bA\0 ux`'VG6.P'_ Kb w4VtrR9*תVro gK{ /* '4 'qWm4![;5]!88]{#E6o&jKWKP[W&uؿdd\|<n_@ዿj߀< >?>D2[<x6 7A[{Y_Gݿb[ȟ!>`kyk̜,:Ҽ19@HײF̘_UM"msO[*81O (Y{ W:ٶø˰ Ϊ! poii>PMt𺡝ް{1\Yg4$w52\3 #nQ&3HhS=|-.ߎՈP֘\w9PZ&6XB6p! :A7boX%nMMI_EId,&q{J^rʪw[VMTDPp.V' =Y8Hfdp7؋Ӫ" Nc?&rTjv>jX ϵGq+~ |1쌵E/pwr{NekVdþlt)1)&-ĵoFq=W8?-AxY3m9\0\Q-6,en ?GHHM8c' [ÇVDkPG|^T^wҨl; i F>)N[ǐ T*BX hU[|%d$S7j< U.Wx\ܷL&_AFw}w؉b%P@0 9ّږWUDRJl.p(]9B2ҮDspnBĮp5#-Eڡ]?EcD+Ek`j'S{grX~OWyEI&ތYkBqXhCߗV܍o.eڭKϼGhpPvbd l ۦe 9#(vlL4~}8^6tnytZ\w "w_\q;X׸c/4l)rh[r._VNw9vu܆^v[2ּԒMSel띈m#uS\TK=ʼKCw߿Yq^,TgAvYjߙ]TF^N/:J)m!Q5NT6I/q绯L qǷ(c^{̈́EVx0iCsdojj?Jdp؈74tN&%\Յ6<+~<y\VU0Ki jb,.c8\5ɞWngym(--kRoU\;VsԴyg) 1I5%~# uYbTRY}u~! V0Vw;/6&n8F;fh#&uOIBQCiJf AHO^KH~VT_9(#Ԫ4D.?8D"*vW*L0J Ao  _DS%sbFim۵3&4-~mp _3ˤd ho՘pjs #hWnJ vˤoԅslF.4_aPp]ĩGٵTQVqȂ$W4\j>jM-s(*a7`PNfɚ+)əf\OLN<73cNȌpfa8'61+u=U3/ RTh߄qx*Jx uh"w=T[}>B$>l޻#A8qXtBjp!$_ݸ;UŅ8=f*+j6:s=/J}m4v{@i .7Lgv\47=mn >ޤeY+Cye oww }Mqۭ]BeZ&1pI]a=C2w,m+TyںVڝ| whN>jE\50w}-.U.Ӥ5'Kd0XHO5":ƨ].iؘeiA'])[#wMŒ5aV#hDbkҍС j1eV/fO$:uk#>܎Ok ÷o▵agJs.C"5I樦jsnnbձT BJ@Y1|PZdM韽-esOJ{4Vo+7r۫o~F2d5٫ja?4; qIE&Z[W`)E/O9Jcrh0]؋} O>T( EK2V٨zz?KZ)uBh/Z관`$ո%௢"{?tIFe3cvG'9Yz͔fd\Ydp1[C}3߮Sl_߿M0<\[gCG#nt/yWfVxLHP9O3˾$ЉCՒvžJVij==`1o is сp6(J+~+y8Z=lv18Fc2Ft&Tx(m<h)a)'pr8LGma׸[\!,K˹6f)~17Usih;N`v[oÃ=uН^m5 ֎&~ M1Enwzs)ks%OyMkU0CS`沼#UMunvBV 1#3DatYī[j^.ȿBw8lVү~LNٽ+\'5 .LY. Jcʀ/ₜRs+P$®G%[Y K[ z9jZ? ^0:ܯ_90/g {1&D`f&\03"G -7o1W? 6 zFpj7k;lY-sdmA #ƥlcoq1 wɋԌPZ^UlZXb^'O>Z cܨs*7b{,;Uo9L)@El#D:dd1WezqkcҟI |12&\E*pٲB^n\2+“Q;!kdyu#F cW赌lEaEnq>ρ  }Sc"9׎:fjJzP<{3i< T,饜Qg*/6 \EcO֢QP>T$~8\aSu5kϋ.'hVV|iti1^":̃<.j!/c |CJɻX2F^;{B^fB +lCA@n᷅&4ڋ&l›LEy̯Ps9)d ղT8ռPO <ɞ@5 7ڪHe)Hy춚K t(d['.nbah]nagWQ o5>kLT0DWXkR>H12^lRکMLS!IUЇ7ei7Uɽ;YF_zk#ʹT9NvV+ Q@A41ރhϲ=M Z|L"*lr[/ePĄ8$l63hRλܬA]^rtl,.tc#@ u3\RRD,ӳ5s'˄dFKͽ}՜!}VA)Uhid[%`/4%bUD*[UYAqWGWῌ/ ?rT>v]5C,KN䂲jTf^ oW۔x*A2#%Up\'6 ?Ƿw>H$݌*xx (XK2x0 ~zoZ6xfK)78飵 !s5@5mR"büxvxſxcIQrex>ߓG\xgKuP6 Ռ*`!g_^vD=7PgO`;"c~wɫ=;\{>be+ҢCR]]5¸Yۍ+csE؎l}rX9 m Ӳ-&NiH$QJ\^(Gf9d)1:e`śMEosQ?*o^?&zs$[ |̒T?$YeňS?r]b+]Mı;RO>Ǣ\1Yߔ&D1awcw " x>, %?%k;7mـ#^ ZӻDء–`nUȜQݤk- Az ăߊVڹh8*)$a|lk  =F+6p,]z{[uXǷswCfӾN1Jr,C@+vr׷hb!՛c1IDG2V"Ғui}a[xβn ۬A%;B&ҏo"¯3lWj/}eo0"T&ߐ#^=0~<BsĎǁW) h feo^W,d u1js~Qm$LAb#&9eTA, MDgϠw+4?]ٵ,NUXy"W׽g6䋰#0|v #_Up& /8͖׉1'T@#y,GO- NrJ 98QBW?Eh'VX;;3:*֭X5 _I=xT)&FWSq5@u]X6 c+HbݩI|Bw_;YelTlLg*5YQ&CFV6:3339QVWzf̛flU>-:mi:%r_B K) I7` 1=H9p?TFBׄٔ'ٲS _vWMc(>rjUw?^k,S3)$렉O/ɷtgA֠(t[P݈~ik1>BԠ,ngJ^aIb/[ޝb<N=Ѣ#ߠ˻= J˿b;iz$cnsIa/lN[[oU̼{v4j- ҄;U>S+ű䆪Q:07w46Mb 34A[gV'KOGJ q&;-ĕG`~L endstream endobj 464 0 obj << /Length1 1614 /Length2 19099 /Length3 0 /Length 19933 /Filter /FlateDecode >> stream xڬctem%Tl;9mVl۶Ym۶YIŶmW{q?Yk5׳8Jv&vδt \E5ykkc ;iZA;kc_3+4) @ lb`b0rrrB-̝1(iO?=3,ld~Xۘ:NT218L-MBrb 1Y5@ madbdB 0sX`dgklOkNt'{#i&nF&h&6NNN3G[3pXYC_Bv#l99;9Z;Vvؙ43r}az ,l&n24[8[_.Nfŀhbfhlm/?>Kf?9X8;XA32i-4?"akj`d~8; v/ c;[kw)4ߒ;߉@'?]ZZ$cҀ^2[)GAؚ?Nn&FSS׮bklhmakW ed`o>es #+.[N@אVQWߨUY/щ<"(hede230pp2z* _ggG 7߶fI+Jq8:U<&&n&FЫKvFAiuCZ}=CE~5vݾia;tMS\_?$GzЭɻSLq){ 6:ةuKբ<h1N((|Mu0;B^?S*C%y1JmE\WxvNxD>0:<4} {C Em|Fh5J czKQ.0B4D G'a I9NoG/>!ǧ7#_A]c(8r~й\#J*7QuB,i٤1XH HuX?n=i1tmaV52CO8Aw9S_t3tp:D_= I {YǠmݏvT&6퍫tQmɖ1w*EZ5oKZUgmÏ2voQK?.+ IB P p>U+)Nܔּ.$ަ܂ MG8"uѝ/v9Qiw]g(W8E'|؊$;Évu pO~CWC񧊟!1v+.oQ!?=AC­utB[ ˸@,Q:aIPȑ$}8*PkĨG+(Ҁi$㏨մ'՛+o.U&1T_|6#u il(@4/LPr`pq\㾿Ւl!V9k? ).Lq1QD_L֊DjyD LƐ ڲObĻz]%nm-rI$F VcAΟ{6dXenEЕW$6ܻ'pvy[QrN)uȖN<]qn-k[;HreT8q^H v͚=Z)qL_&lݑVdݍZC5iƉۑ̊+@e3q{1Ϊm-8lE+?~&$fԡV'<2 ߵQw5Zkd2l B=6&,`n5Ga}1*VW"Qk@N$K`BX7v$@F\;"JB)T`h8)XY jt4'~fQ y<"m"݀(e{U*9)7? (#$?i0Lг;Vd*̣(WT ˜rT+{;'_Q5Fiybf_K 7puOX%t]:F|Gh%JMn]ղ60YlkZKEA;2&3ߧd]&u!*W6x&t ໪WMp{ÃX%dԎǒk)~9>63{T_/Clz;niٖ-NgRtl 2a:'OP-j1+bnֳ6sodIq}XU}5FfI /R0Uq$%f~/C׃zjg|B0.exu>u@bm-Z_kQ#7dGn!;&06QU@W?$<$xSTjǎ_'8_ ܄A6\f{+Kv'dJNM A;ykHr'Xp2Uxv|qޠΡfrgx|s y>`8xBl_*Lߣ;dz}?Ct)îY$sH2Lv'F;3BcI.%p0fYpz;t"ałNF-N䏨x@X*=|uG4jNx5әjnaU6 'YXPu?ɳ]H7N>TױQ+gI5Xw @eW!6hڤ Kks/C;]ypJ?^nJ^llv:ycLYg۬0 y٬z*Sqf"l Ұ3OdAfEUrw+tQyxܫxًşP{pPqd3%Jo* (օ.UYCzq-(Gx̞DE[vDؤ]iٷq!W;L~&9O4JɎ>a#C )A5&.u&íǯ@ u|{NSx އy)rq[۰ z/N['`Z<[O [bAv"whOᨘ3Yn'iTfw,D&#ض9$^f͘Ԏ&By!OkDY Qw5FZf=3KuXoH+TWx}Jl6n>ڱ;ELkfyՌ@ nxx\ ?/WJd1f;򏇯xBBX_u*wg4] U|Z%,g (&$P\W)68=V4M\/6]Cb e6,!?n 6i0:%7SoXqt R)1 +XE8Onpղ=?՝̪=ulV -<fi+@́#7<EA:NKY'tU9//N/#I"QӸQ#}RUDOO͏C -g^B]Q0!&JeM#Va0:F(|6$y$׆3VgBq9&s4tA5&a,hU!vݙM t =IH'.Duu'|h<+ӓl`'>uB,6ڲ*hP|`)j$Uf ߛU~}Ä ?.Nf{yZ:gmi$3\a!0b:zex=/^LH Y q+)|Kݢp xq*;35ǦV5r@ x+IK݁rY\a^"qs0&Ztw#٦;)"'V ^sE[M݇ #WEWw´ #gvzZ[fA[yk|[s_gu,7Q|<bTG짾:#gu㖽V dxgOpzc V'4j-(Z#j,Ē'>i3..*h$#Il垧ԩ=(x II;I6rWNd=[#Ihej ]e}:'6KXԤsSu =7D!ª!ːv\ /)Ȭ.4)!ET ZjrG%V9&$]ƸQ? LW@Q$G뤪sSqp9xKlr04F~S[?FzӑȮap*ET~\b8 ٸq0HRi DPmQ!/DΛ1N|OePL hO/yL0cȢ\M>Ȋ''y{\F12yWĘ}#ɚq(AR(`3SqvjBRL UJ{CHbi B#u.hq}-E IhӲ3 + B~ %0ʒƁ ~z:҂M,gjm\qW}GH3|l2A])^r&"j5*/{OL9uخ/aJ/vþoVcfEItقRJaOrE%IR & NM_>\`Ig8Q" uVX-Dmx};CFtz][z:l;P `0[>$sA9dlɾ16Xv4 vHf^w]ANژOuCQTWj˼h2yJ̯sN(?ҤqBKtL:պs# Ttr's*3]ީrcPlX7Ͻ&'C8d"@_%rrﰵŠ>̲)uay 3ܨ'p-NCG`DU*2 )ț@:/BJ9E~y=xpkN:ch@J`1uopZe<"\#yo#&I/}T iG[-YQgVou@ft|Pj`Rcb9pNT>j^R³B:6>'X+'4i '!IK;6M@,^{B傇mkK?<`w.I3Π%HtKء⬂0h x{8ק7T}&y.t#nY'Α/HzEn> >oGOm@q/~n@HUm1HHg>4ɳԛOX_" x?Tʟ c_Z7G,"c>s~];qM x-r$f +-r-ѓzx/̫9+.&{tF:% ڤfs)E+≎vN0 E `k]1ыq3, CtWٛx?<Պw ϗ2(~t@۫`Æ5v V&+>pi!ଞՊ?#Fv(A[V|]LNHn \u3䖰Wg<6 f9h+t&&yL)(YsQx|k< W$H0TAA<0=‘ n0N׬l<3^Ahq4Y\ '" 62d7jX= >G`bĎxvT2#ߗ̷~Jf}#@PvPK@gefRa?z_. %R{tZ#'ӭ9R$sCb`q_40zZ+aHYXXɱg>ZT:F.@PvoumEnKHgf^x;;&WI>f1m N&aw 9O珓y΅9T"[mĢuURR7Lg xJO _D>J" _eqr},\1e!~w,8sN[ g\W#'յ'+}rT/kߌYn=o=%KB*ӵ4) Wq,Wa*3{}<&%:gKs9Ctyk5~Eܤ-wzj`#,`RḆWb#o@YȐ=,8N62Lܾ([ #OlW¨Vb$%u$UjLiBNNˬR MrǥT\tKGOsq,25&g] J VNsۄA"zCÎCI]!$Mڜ8hhEf=YPYi>˳-J~8- v`?8K #MSZ]^E7bX7 += [O-mۣY=& ksj}*I;KO&f!`^`q;l,xMM;NF [9wJ:^ΌBԨԑy3;O؅!q\rBcVԿ̵(3 }30{q[]FT&}xDa>I1+ 2's;.ؼ7"[}F5q҃zIOspc)w+|`E/ADrEyE fdϾf:9g^ORk+]k(\3=~.}.kHab:Ejm#׀O+O8GV˶IG~jdMEՎpiZ/=J#ʞfRM'&/'͚0D\"@He Y*m6Ӥp@CA'{|PRqڽVv\Y}D 7g۸f˜FmBu. u䳦A{Vnތcs{R1X:…4A5\ʼn!~(ŏm]"i)+wLF⁓'I };|vӟV¿i.c+]<~9ÙfH$2c߹yIwC**mU!m+2V0ADK@a1ʈ:uM~VhKHv`~#]8;ASpE2I[K/W_vJT3i^^fca'.TȎ`T ϰ] jCOo\| a.4U|mdVUIm(l~e>H\?KPΤWк9rM .3:uUqb1NC8:GR iAqH ;ϡsVI4v j:z~r|O`:J@I(\y--N9%t{PbZco/Şt 10L$8i*W g3X~aY/#y!8"R{9+LIDv Dpka~#b>sśT[yϳcsSؕ'=<抻Gw)X=1tͶY8㚘8$L12_ #D om.0A (GڸؼC25x1!Vq&f-k0ܬ ?KuAм@wo z: U\HӔXՕf=RTZ-(B6񤯎Y4S50!d݄պZǾ)Bg܎c7U9nlG@>0&/y:m[{YT:u({NU9tL]2,[~5*F[Iu،8JC* e+\kePp6,CȚoVMXÚ+q`Gw{!>7 .wvYM^z%բ;y`zlJ WjjU*#;ɕ^ BH[`Wbo?#ġyH@uwXk =k0«8k( Fu7ę d]^@R*(!r 1jzA#7/1-x^ R>{͡aʇ_CjY%+xkv+ǃ1Sn:J9! Dd10;XUeGs{cn`=l=cq Z)DC^@.CH*txDO0겼?\SKMu?yvRu5=[q $Y bAK*>m4. fK _Co\|(e<#McQe_P6e( - ? &ús/#\5FUmB?sT/ƀ VGN,~ M_ب4 I0W桝O9 8…t$B[gL76=-zKkLbk<DY7@=Up)\c^ %uw'PZ*Gj5WsZdu#Z#[{NO;>'3|O-s^rRo/;^޻1`Cf[ttg.+2#}1S 7~y5coE% 0(=QGEWOl;v;Xv#ݜbCaJ΃6WAdZnͦkcI.*GPif:7Ǒl4 YNw NE3*mŧ[LLE ,TEt6z#wJfrmm,kt '7QWm(uUCo(ѮE=+4bJԎ\!hd;.Gϔ`6P [R󻄰cb| .B$s6GŶK=QgW_wlZ{=dtHKg5 ;P?<pSq査0 ~RVuS ^-9&\fT!PkC'$ mӤHO;Jьې\DG$CNFP,<1lgV7ذiF-ߚ r;yN;lZ81xzk'VE8IX `J#VGϳe۞vKxOs(wΡވ 4Q܏pQ"Kb:Zϧ?A5U,i?1Cv,g i1N9s30@D\5g MK Ϋi7|28+qc`U= -ǩFhU֕ ?vMo\Yj]%Irru[%{R 3.iTRΎ਄/^u3}~XX|Pᙞ`%[W:U]*f%u·>O|W{|=b5Mp4b{wTK!ܻfsg#e Ay*0{Dj̇"7tR v{R2э1%Ȅ${cA@, '4&{32T3H2$yԧie :Ð)ĖhQjt8c8י_$H?y)f?1v?JDX!J^X"UUfҠQlCAbd𒝅O ުG;!j=xYxj%7Q᎐PLB G9n!SͻZ0=)bv#-/$i$&o# qg9pkAIMju|o۝'ABׇe R/Gf->"}_vO-VfV"4)wm0ժ^խpV=({;˫[kgg*N]sWvdq7<ǒǹ&L&ocȩ Wmߧ_f4AT~q04U@­LǤqoGl0y8H].#bJ[ R0lxTnEAJOޏ;cIG)fQTZ(>Nɍ;Ȥ&zB%f$+i EZk%@K[™^n ~\-|+TUKˎobK{_!1?!2cKEjzMĩ*j!o1.uSa1m I.>m8_EO'\yM]6O%YK Ã悔M'(Wec;GƕM_CսSM(^/Ҹe_ҚjCEuilWH ]'PmN89\q[X2 q KnZ9W+|1qZ)Ϸ. UwឧD(+(\zD2\I4%BCB@ŘF%Ahw >A"niF3n|Q Or#v7ڊ{>QOy28`^Ӏ9E"H ;{sJTfqhatΠ",S. hק)pMLLiϬ9fC ܲ}^dicb6s8_`rXCr # :VfۀG"ˬtAL1{ܐ6) sq{o-yD̲N{_cf.eE, 5}GnW@,? ~J](ϚHK'uUyz1"7P:5) x^iM^B6LJZIIK%!#6!'vmɞ\Z`}ƶ~ D/iDuީ HBHhk[2OzKUd0/VX;Vo ƟkMm\l+˲;ZsËilG"\ /uaƕ3 0PVvJ浭w͢ݒt63xNʵh;XƎ{z> _c3g|)pf,y!G=eoݤpp;S}vK9(Qff#?񿞲a仏LE']<>HEbPEfeT:jekSۥ:{a臨!} ykpDmW1wjn'-9J2TTEW_C-jޝ e 'Gn떪eTx}et(%y&ƠFOաz~ U:3IլSㅷ:)K'(e6Ūܕ_M*61⸑KPw)U54WvwwK8~P !*X=Dj' KB-:]rXL$ֿeB 0xج]?a1TY8ѽp/5s A>l3B uuP.:wuayoz9gغpqUjw,r&8?Tn=dJ7WԢQ#4nOE(Ek9*PN't‰ݻ^(>/ۄ%7BaP^ñg"(ca#g $pVsr,?\ |]+ ;Bڹō# 1l TṠFk%'F ^ú\7e;/l3{ٙ¯|TḏZq\T=%~| d$13:I=JbK9m+|PxS*&~\].C/Lut]s\Gl_YzӬV1d60HSt of+T!%\'QnunZw)Xq 5",BDσN핎%UͳfPA⤓ePܓ(d6E nd{ @ix~04Yjrdy#g,#aov us B*6[6p9 )x]G^7 EPQOmt[tPtSE0?Q'tY^-A)A0GI5Ũ@s'G=hb܎*tHs1ӵ7[%+4 zV9t7#,3HPN-X]zSVYPXγ2;P%$宩#q22>N͵@@d,r")',Ã#rwT4OTC 6GٶrWr"k̫/JE>έgӤ-{w&nuB%.([h*j12xFz)]# "i:D?J3)X_.JP8֭331!mF Ӡ[PZ[q i$ qF3"]9`I$)NȻ/b* ]{8m# ;hV>?_ e.*B.; 63Vq&TZD_ cgV($T24 ;6_Mkz>yGcl)cXSd 2$!/l~E0Ki> AoWٛP=tjo!P%tr mB=&Y[suY40iXub.Э S[ u0 ho UCŝ9k|o7tWTePuB_bekP[6z SثSʭ. 2 ~ImmݍAi\ݔԅ(Ә.n?@̞d P;'wX5MӃ\e·VK\G&hA;hKI",te,ױ !{cSjSВe/^O߅Zk!%u#K@{74=<$&_ǯ kVP2` ZY9 " &m"o G 1XPA>JoZ3{ 9֊`>P)whZWq+SGȴs{P*ߩ>9+ l iF& 7_Jo = <3҆qVR|N@Mۻ%~"7IY #>EM7 !CHƽ۽bk|y&a+gxLTȑ`ԣi ."8 endstream endobj 466 0 obj << /Length1 1616 /Length2 22852 /Length3 0 /Length 23691 /Filter /FlateDecode >> stream xڬctn]%:qvNl۶mĶmNNNl۶۷_cUUk֬P^VD֙ &o`mm`la'Mhgckf!%r41p6p6MLLFNNNR3/%55Y zN' 3[Wk;{[LL&S kBLV fbkh` w10H[:PL[S_,'6w#\4{G ' '8,l]!nj/!{G6}휜- Ogsr;YuLFSҿ0Ngwr- < fh/ ' [b@p413p46qr Wz{{kw?9X8;X02i7- ?"akj`d\Mm?3C^oJtD Or-bm-k`c&1i?m`caj&A#lf`c9o8Z[ؚVhOƳs+ѿU;8;+{?J3P^llZ&G/e -Zf`J3-Jq8:3\;&&&F0KvF?,2ӝ~Mk 1ۗ6*pV5Mq}{,HRaX\S ouS§Ey]/Hoi1N((|@Mu2;B]?S<#6Ģw!5%C⃱y <B ?q6~C}X\,hBNIE8uafpQC+Lz֬36hBWwPUUAݾ /&m6 ')bOF6? jsQɽ RӭooxcZ3!߹C* V=[6xv ٯ,{UY(xE^a{L->@K \ ۘT XYJu+کۭ} ) dr-I|ؼMob;p}aKQ9ŧdO\PTw{p[&j>#mQƟdP،(bmaN[mYsHG;VG(9WO'<4MApQOV{HHi⇳c$"LA*F#5T<&>zͤHXk$^Lt K(_L+aG,g{e'tm#)oȆ3YLWHJ:-ϟlh|GG#NO@~dB21cbEW?'9kk6;,f;88v;`-3S\w %e"Yu^v0pN1C]W/?۫><<+aCR6Uu8emߓC\aᤡΓZ@`k|+Ղ`l,: ܀bv" dݫzJvPmQ{{nĭ}ODQ]']f5 R5t*|X#x`ցb-0W*[&f2Nuɡщb5h^5RuREn`t"HQ_S4ےU2D8DLsUIQ{8ó1Rݜg,/pÐWBbff(e5|? h7Gfv u*:R;zf%zFhRi8e~|?wE߾G7I즴F47HPM;q-Sǔ+8ڕ(Ox"?)-[HnBEEXw7Ǝ!`ڧ$ydǏ^}#QTr7 Dp~_9_Vg>L%Oqd7~"ɱ1-A*pm8|b%_7?fLI,P`IGU ?*!ӗ(_9,cu^]C9^ȖtgK ӫrBcJƀJd6@cu-:(1:o[]^naj}Mh_WEb'˷6W2-vS?3JM mtC,*)";UiCFO9y1@┈ } #}_|X 㹗}xR g JK|B$7HFfOBZL*$T;,S`rPU+#Ft&s_= e1<d8TaQr[hŇ#c,I4W0lלcs-d\P1ȩP06%˫؈D/WSh/fF|B*)p];`^}ZlɕlQzaU3t[jhMO{~wX,OJlv^JS3 =O5_xqp{>'w%l2%PTNs q"|KL!+L|gwßp >㶄[hY^_J'2t2+-~f䷤E=ugZ,+׌kq=T^= 5z V_涺YCgk+0(cDBܳT|vi4#F6gE c׌rh"!JXYltqdԯu ugiDF;gx qhOp) nhWBD,𵴱 3JDǟVÐqo5VrxQFAѐ@WgMU^GCK5qP2b-%U\߲TFTa ktDbQ--foS13;_j5L稯c %_4G%W@ LQqu~sxV_k=i gޚ]5CX~X9(+oLI7ge)seo0?Loce^"<˼ Hn.qnwh% 3 yAX*IBجg/6I6 z Lw.l9I Dz!h:%-"엎@1([su6:bRjFY>(2ҩ|ldj:^soYޥ0~@̕LN^Ib>\~#*ZP=6tiU#suG>)!z+yl^;ZD;#S# 7?0ި bTia~w간tɧF nE;\zeYR4d&K[gXc$'%w)IdtcD%w~G*N [Ĕ~m}PC?'x{8ؤ Eǁk"UWNt3[?%s#pOkW>/L6p = B/KJVv!y@V\ל$=C끲eGS5bU'"=5Tbvb]P|L(][3 a-=-:F60}*7YA;M_4Ip3'~4ΥIWVuڴW/*[zj*;n8G?m'TD6xs\TM4YbЄ07DP-Vؐ;&BZڎ[si6c9gN=@c@gL}sS^*#Adˡ6>*-' f 誘+17U ?ڈcqLYjgL/Fn/""%q]~BTZ^i[o],֨{ ~b`}t-߄w\/H~ձα^8`?dcT.]l^w` x>9k-t3Z6 `ݨɺN_ l9 .c?>k+2 a5vbL#3EhPx3ވv,KZT:ʡ\47pzƁ,c* RŲ~')#ñ^\Ԡ0_%rH'SveʣľJ|cL^ %eQ;Q-h!K^|J +5.415 ]sL3="@0l^Xyǿ0$0 2['J$L?V .ڝ>5-;ZNaut&3Rͬ.iSˮw8vGDoͶ8ptEk}`c=?;]TnяB9)NDѮW6 kg'# kmVX3 ,@HBs\3}b%c;YۑX\ohzRP)r尴\['D# _m|>,^@z<H8MqTvŒbB@X;??>Bmt !6qK1wBhQNI Or OQZE1Ya+8 F~nA\8̯!$_Hs z"vEBpȇra+ssW<7? WiqQJ5z[:K]˵07"0Hxc8?i[JjXG'*?=6ey枰?{K5\>?DJkc8)K$[Wf*WK5ct3\<Z7 xy"@9ݜD,SpvM y8<%C8Q2OZ٦JU*8ô-)bu*sʗCP';u(R$jN*hI;5d-t\f)*`R7,[_ :6[\;p}PA},*mwϛzք2{X5+Ua}pO|ͧ, 1ݽgd`F!.e[8o@:M7SZpvG=\3mD'mR"mNWf"HLFt/yB!R6/:rD?neφkfCeEy0iL;vgA/_ٟWg* ,N]ϘaI.KasּvL+Zلsb=i| MAA:M8`?G.6^\ǯ&d13*cjLu[z]* |˛~F8~[4r'xZؤifh4܍FzWo`؞dX/́TR ['B07tɸ`WQ`w1/!>p&rws=ܽ:_ЄE:F79m7N=!|F/RBjэ(=L&᷌5 J1T  *x~M\_AfHVGi7qćBE3\ 쳸&h%m^Zčy&j1p{mԬn=.gfk ǼF焄%5S2oA|~0>Uf9k(I5y 䳃Li%QA:8\`MFzojL+E̅/zE. ^ϓOKxK{CPq[Gq3?G/bHcW~ByscYs,Dڢ='q˒L\RVs^Bxd ȥ(p!r A5åhGԚ3B `ϸ(|ǫ54601K}G#se^PNLنeo:8.]6\׆0!/҄@1X!Ǖ:FVOK$]f*[6Cozѽ!hG5{S%!"kZOlf$k\~>%ġ&&UH[ қ(bu5K+]ͱ%|jMV%vm`A1Heyut 2XuFR_l3t@^en;-8H_AIFW6E#Rh<1F64/T!y9 A@i??B 3IǍ#ge"C!b*ǣfMu+RSH4%_l(BzYl!OEi+Ƒ-VIXdbsACQ W^%zD"DhYjvg) 1j=GTJRMV$P>\fD!PNJQ\{i@C ")}5,uVS* 7TV޹!Wժu֞RǐRnsʺk˂`ˣF405[5 t xE%i='g=jBlJn6ǣ~BUKmjS(pU/fjas/%Jv5rKц$蝄BE[XNgrfeAf_מ$^ ݹ>f;|>q*"9,ESUnn, 횾}r@ U@B[0&*B1:)S>4ԟN2I!.N;۱Ji1 BMad Zx&ȓݚ`c :*P2 ㍎ JSnH%>b "Ƈ'm}.=ٲza} h`S|E,? 8y3 ^O H29,D6k*/hf;W?~Ztվ&SixQi|&ບ&Ĺ~cgo6.KyhqC{nf}d0G3ah|Ŷ?.b1@7:3碴NeW~)160]G'ӡusiՆZ1,mj$ɪY(]$,IWԨ'Io}O_ƼvU·hˋqSibB/~)0U$j&䱰=Y{:/bJT1!GLe6H+r}s:m(F2m&ɲ [E -vrhݒ,;K@;r,/4ݫ30v%Mۂ6豛/UoYx|4I_+_3~@|Xw_$W-HŠq 쓟?d`X MY|ZW.R9>V[zeN/"ី9 .tPJ̛!%-* 2Ԫ\%eOat׳h UX[]/ؒ 2 _O#ȉnj*f)=-hiWUےu=ⵒ"\6Ɍ 4)A$M)n<ŭrmuP0EM`=jw4ӨÀqr £?сٿxHV#\S<1׽!7gcM{dI"1@_^ N (xOsaibDž-YT%u}4y:7~WdW)c^h@Yc8wC9(͞Q d*̲{^;1xTZK->P OxʖY`c82g _@HO(dFx5n>j ġFLh\̸JXmمֻN˵׹JN&ew=.m]8:Cb| oCZbj|eLƴFȎc*-νhu2ŔUh^P/oP&r#n)ge2-[xDڰ#:B- m~v/+,/ QRW|m{4˾V6xrg:Z)}DJgz8 ZQ7 k-4mXbg`bLˀ1cE* c]F3\+] PAp "&R1Ɂ f}ru1;w}VpS tCz71ë6C[S耇1E"э'->W* oUN]Pd>oOj-Y[,^=`=)@KBm!.uWm|ʂuv ^j: t o > sv.ءŀu1~p樃z(Fh~aXS{=y!}?{=2 ļoPƝs X! '|V6_%zMxK/7քqWX,In^e@D( ĶVswNebȞ\Q9Kugb^"yU.3B =U7@2Ou{&$iK+_'7a0-7 9<34L0nZ_ rLs;.+y R`TJ\~L /S V{2rJ&y Sya1u . "z?I FÌnmTH;3]q9DEqq\ut\oϸawlKJb&?985d%"5ʕH"a5u\4S?DtcG}v&jJ.uk1Ư+vI/RJ$=4 uwS12Bd.эy%tһWr /M ; kKpbE7 7*K}(/߮ORf7KFȟLhkz2:i<8OS،NxGMmI2$\2OoWօI]\h A?#h[ш&gӶsX 'u?eVD]`\҄-TmǎXrzmQ3bG!|վhGg@(҄t^ ߫_:rXi& ҕS?I>\*NpNȻf9~mu$XY)0ab!6l]M.daFJ0R~ _'?B;>ᥛ%Z2F~UR8ױՐ1QP(GA@B33 b:H"Т\DSaeͯTgcwdg^?wzTZ[o0,P 6ћi^^OB&&X뛰dQ񘄭{tF. sKAF/T6$шt 2vI$R泌?Qξn2ǦN#72r8pl~:hH+ 77rOtd7iY&2R'-O6Ec+Yǿ9?C߀:z:tS떎i+Ln=+7p 0ᝈPxZ7M_l!lo͸ߣ0k JYTt-d%g0:+x&jRI Dܢ߂F¥T0v"}~Hi%hbʊ=Zrz'{% [Z;e}Jc99 ÑOׅN8ͅl.GU3 vvc 0`)Dlp Tɘ&Bt,‚,^5ӌޓ[EG@oa#9(EhW.(dcwOy0 RA)v} Nάe!Zi:/[xV沈p}*E/!Rgx ̧N},>- ˧*?ʼnYҴ ͫ8~>jC*(g@M7L45]f~p,QЧ94 S|KO WQdi!0 &n=;5˜҉ϰO?|vLܱkM_krgW楩Fa|MA f5y rΈj_}MUU{%v&u{'e/4K}7Gg~NaR9fO5^lƈP Me\Vժ$@Y-S4\uQTᵐZhn X:H(e^׼ J/6 .88g"(- yN&SaìKir=M%)9SH&SGXEοR^8/?SQ6TD`*Ҙ )ݛ{f#}uuS^uS5D)gR:k ^.~F([#t}|^c߂IV҆ϥ&XTgO E;W :X]‹b5֣45R -׉IO|Ξh΋Ҕ{ |ъ6cGʂb=Mكdrpe}1 .$y<۵> nXq! g?IjX{پ7L#|ja .u){ϋ)ϖ$cK`EJs f`Xw]Q|ctHPgh!54LU@Y"~7&!!baAiW74dVen"hnkXRֽoVh('R|8 ޅV]z4k*sO@.P.;K twaT_7 -a^DS:h -V|ddq44,,NIԫ*TDK8E: vf|G ;$Ҷ x;8m V<Qu au})n^\o}nG=5gʵcSIbsK8ʷDdK jSMp^eMvƆ4Yr~#Գy#U?vOI+6F*olޕ1rX~)3I.-̎f1l|0a[_Wk1d¢=pI? B>X렢| ƥ;Bk^n`~'RBhL`ciM"_!b_4Z?JL2.DE̽Xaq9G @nްF= 5LZSTʻ@0;gb=,]cܩ*^8שN80G|*;9TsX7,ܘ* )P|ULXGJ OJ 3eaPt6;᳝#HjM=a%h.Z$oV#E/;b?G*fӵj%}[i; 32ƼɸF S +Ѡ%t,em![oV׵\DgR'> u!WXZp5Z ޡM{ɠ#N}Meg_ɒRq{Q!Ƚd1g(V"ߌܜe,)ޱ-YsE!%ֶkk]@+Tб]jT?_yk!kTH&ŇqPLVNI*] ݙ[=Hql>Lf<ǠHd#V&2aLm s/;Qg}0DM~?)=\K.ۛEخ_u+r\T:NI[χլjFRP%? ITz-@s_`8Ob~z=侲OK$w\i6; t7㔫 fd}T:ʇ^k8;:FYqLQ&^`qs6s֢W/fX'qp^y&Roeu ǮUm^kN?n{k_lXhNhp O(I4,b̤n='%j: YӒ~@65"Š,O

]eqč Q#jjo7wz:2t] 9iF@G?K".-%8U}Rui gI<: 0mss*.s%;~F7z2T }^*l5x#zGfȭь{QbX?Ɲ4L;ua}1aYˑuМ?֒z֣YTOeH':gnd&6h=>DM<&++h5 vt䔪tu0ErR~ةu]kZ_ब{D $DVy.,P{sɭ/?X넚 pի]]X6xq`V_XSĖnK~[UK F#)a8lw5;1c=藏O'mLyyr2,)y9eit+W LgjFI~57/_Q]'G EG (E}ɬE؅HWB FzmN)V'ex!S}%-!nUYp#2kord՚ӿ55c+?ud|_ GU8MG (Juv`YR>zy MH29RA{Y'trgG=j$MIc'I'kjNCtɨbRBpsL__y"-ژ]oݱveRh>ޱ]XMD'ԒŨ% jCLp NT&tILN${E0YX^|I͟8KUJ ۉ$N178)̰P#*!s(2vbrlұ:27IF+wr$!y,(*@] kȕ&FۓL`Xb[beҰ6Nn$op ̴H,-O!NWS&d/a:YښRS{_XE|p _epV(PTh`>T|K1a64u'*YCNCB{5dב-$.Vf#_/QvDOz4/i&p/iӇ <_vHðI[>EOj wxr! t dљ0^c}YzJޔZ %%[e``縩 W-8483;o_(q&bj9ƛG@[Ysxb}!x: 2LAX<5(|S4nm#їߦRi1!5K( nEͯf^4r{5A5Q"a5"8P:ip9-W)⳰+XMrx4.F*piiM)K5 G+a|sҔ "P"G}4F/بtbvLQtN/?QI;o q2T,}$5 $џ>p;Y3nH q?6V $s{[v(>)YlHP <9L>^r'vf\~"L%@J@*QDvS걾rww2^n?qoS v 9i7)T! :[uw(Nj `xægrKF^Aj@%6/ :f'V2x4-ڼAc' 嬍Gw[@ qH.'0 '!8خ3BRV]lXtz$U5t7a V9F38c, hԇ&UOqAve ʍ@a[DbQO$4L%&/dċPF(=wz"Σ-rB:<\8Ù[ ` 1L o]DZ'Bs#0ЏA)j~gEf|XrA2g'J>q'qN{(x\hdL0nD;d̆t>oӥcxZ,bY> G%rO,ev'<4?wN#޸ R>D6YW} ۂ.BBʳO⇴W(&a5Zn3'>=/n;v)Zp#9()Y%$vveh[6E'9b1jS xt"J2ƪx4RdAieR^FUyžDʻq2ߡ6@: .YgJ1-J|Tצ~׊&?a&e y֟4j㸸O=x/+6ȩ{Lozupr]o$l8U*WC{(9 Zx@̂k4vU &Ejm'^ ⥼ia?&q"$_KUG1=OvMV(}V5m:LoiɂP"nQ~#+|E0 e~~q釐mU5:`k &!3qH'H]"a%QQ{0(38Y)|'HBJk,..,.nn{3v,N ^DWDŽ]hKBd6opWe5Q?#0 M-&-Soǜ6{a̶A$[s~nEiZV$ta[a:;*0=URuhK_ >(9CF6^ƒ8LvޖyS%"C(6]2k[_S=t>c˩{Oҍ~B !'Hد xtB9Ԙ-9aܒaH0;ؙᬓ!UJ>B^4vH[8lh܏~2 pEhݜ=Z` ]?'_WشC ۽{!W ,_\f3ׇ]v"]JhM/@u&9y ,l]w9rQW8LeXR֜ Y!a}9hceAdu65CQ30ҞyM6F!NRvz R -;QvڟoF% C)|?| 7}Kx٧i^CmO%򡩮Sas^Or㿥tp/IVK>)P#?_hdB[n $S?8J:xF%52fz4 K4ΰeq>5b'Y7 _|[2Dl mݨ%8KÇ 'X^]n|Uw&|謎I*@jÆˌ״P(K [\x=⩇-Ǩ|XX' qfA6d{ͭ;rs*}y!o/Vs ndXh3׾m)g?o3{}%-Nlu v/ff< i\4R59Tј+jcɉj> endstream endobj 468 0 obj << /Length1 1620 /Length2 13335 /Length3 0 /Length 14174 /Filter /FlateDecode >> stream xڭweX\ۖ- 8 ^Cpww];Cp9ݾ_k9ǔ֪dD t&vF@1;[=#7@UI]NNdh 0 ; Av" 7@hL\\\pda;{wG 3s򃃊_\FD>",l.@k;{- @@5 ,))'SmM(8Y[d,N@*# _9p : N@c01/`tprxX8 mA3,lM*njwAv6Ȫ ":A憠r;Y|;O;cZ@AN W.# #e8;YؚZ#At'?uohoow^Q hmJᯭ"ikj`b Qg>04vM@)3D?DywFoS9[[d,T4s6twfqѳj$f4QL ?f]hma q S10kl&^L #%!*A_տ>?,bsx1q0X>beo2M! H_+53k( mM>6?4t-YfrD{ T *:}S6 ^'ۿJQ uaZSt&sIP8hNԣi3m)*BO8~x#qC'G1NhGR|BppO7<8yսK KctLr7p30 ;<5\Xko(}XQrGDIi&4EyΨO(\t@rtn'U$- >rS0/!gH?PuZq~x"+; .,2Dnn*ݭbsf[U]uoa3ٳ5 OWq/%DO`W먅,:+p`wBJ˺Fw9Tj" ~ M`umhtXjA0akDaXU+F8Q 1k *!{r he+ojY{siav׌媈^(PT &k=rf=aOpӾGϛ->2.(jiT1`v. dq][OX'3[`)%6˜Ti3ࡅYt V0+6%~?Sm\O>ѐjǧa BÍ}Y{I7v]q5 h?phj6})څ8Isϊ5*5_NQ)-6 ,=6= m}]^Q'3a:2gHi܎8fwSCfq7 H;y#wpI %V|ȏW Zxo,2?3^0ְ]g1}& *W9]]yI̾QJ[,$=eE 8oRy(zh3Z{15[JDD9~c6Vߍjnϣn aD((_&l*N!'@urϳє6"?E h^W~_E"F̬\Hx4d8$LLk> wUXJ6i"`)\:Jk7*}ݯ0E 3v'Bk* x=laQ @mQ.Bvj K1Oeڄc%vP'r42vqU,[&vM˕hff.7M e3Xȑzul RW`YR) TX;sFá8ߪ.x-swgJuH%gDyZO_f>!nY?>ns)kZcV຋0ݑ|pS׋/|z S&' {0S\RQxMOo z 2sT .#3lI@+R촳x&o#xݸB03cpo=UBqZ&oNr(US?\#,Ean?`3dH3e @Q92A6n̴zDM|$x6bF+¢C6ӐT#|vA]9t8dyjhH{VS][ AVBs14F}>Es-:0TuMc疁Vg6t%xA=,[s ,/MÉcTVGWEo_EYVxUl|T& _ۄԡ3lw#ǡщyTB24IϷ<WOM50א_]e@8mUb~0v(+kϋ$KLCF:CUaDXwф[Dn )H;Ֆ^'J>+Psf*R(E `څh,RNUᖢS?R / o~(ӡ꾧_ÔϧZ@hŐ6KG/6s{c9HUuBA&IJFifr vb|*J lp 4; YObLPdnn1.@b[Hm'e5wlRmve\BKyK!Kdd ms$DuB a}z̤եMY ٔ,s:+L(fݚ_/ ndfgjginzm,t wg&G(ßK-R&2Ce'u)hqD="87H;ZՆG}d{6:2^\Ch7Σ=K)RqJ ]jA(M_yĤ꟒Yǵ\/FxNvN #uO7=#yY}sv7bwMWhMpT͡Lw8# @!ɌpEg2j+XjOZ@'"fxN˽db_ z"(B9U(t)6rñ۶|X7%-@%d<:AA8Mm ='}AdB<   =9*W^= -x-G$ DG3 =n#zP;x!"~u/fw䰠Ci- '-ȞG{%ҽRF7;! %"Y,ƫEP}Hz *F-pJjXƺBKĝg7onKwۘױXuس%65 n?G+]ɡoMaOR Ø;ŭcN /A=2OtS|Sw7" /}}5M}1gh_,ָ`6=^ YBXϪ:UqF}Y)'3/Ťsg6(Zac urv˼4គΛ!>GM]Q53[!Ka};ik@s^ʇ(X >y{yP- {B4ٷm3zp> "v6#H0ƸnZLݓڤ)&惪* F M$d:< "T:-[_gI3o~ny,$18] +>D7)S59xW/l;Ю Wy#OX9yijs0.glC lC֗̃* "mÇӃ"J: 4(cU$ {'5m1(Jt7Qg7MNUƽp R ѳ{*q2ĩ?^#TV٦h@jDP_NY{6Lbq)VIEQ[UV-q#5@gΒ k?]*e ]mt/Pt-w&#\&*0%+A"g![6ҠUh,S| yYl5n o]`oh_r=%[B'9-26\LdxB9\#ȓW5L^X yVOᔵ֯nSRqX'ݫױ&>e@΁^5t4FU %k>1V&S6DoԫFqPix]' ~V6j_G<AߗF3?2.Nw3沒w5wIaYLTSE4 aM<*EX=|c ev2گp.e0v8;=Is ee-LJ0ߘI;ǻ&/NW>s8MF Dzsŗ6/^m: ߇I2oX9LԺ a(_ϋ}2)Z|M.:ъ%0~BC4L'2ݘCjћ\)!׷l$EXinv!T%DqcloGV?碃 j7G+>Mhil39W,0B~NWM4^f,FŔj~hOʔXEXf2U)9}ӹضy k"ӲpfCm˦^ Dd-3wWTݸ2xZcZF`v"->=V ͒~Mi;CxM nq V*vέ^dIM,ureIP-tPXxɥgg.?" Z563oQ0]uawCP#CvՊ/:0`^y؇Kx5F*Pd:Z"Up<m 2YwFJ_Z(~I\7#S y{_ au4Rh/킵[ϋE/sy^Qd'ͥ(q'E5๎ȩi "q7WdAa|gYWž)Kiܴ[mج;ϽZһ\b9݉ͼ9玬q/Z|1^HHAjdYI۴AhIC򌮽F'߈Dҟ|kXbOxlKvЮc5n\g<(<'f@StH}r5_Qj! *r2Ϲ X5{>4:+ѲdUo~;!ԉ2zm#xnL9Iк S;m9]zƯKؐ\(RI~4^ۤ3ꭿ7wjތ]ăJˏ3aV"609rAP{դf}̘H*+eot׷/kߔ xyx9oj XRfqK!& 0~V,: -$7.5Ἧچ:j!)ijme/+*%_Ơ`ЕcػN @'%ȥ"P6a%p$23bLDhqKzRc/A$±j_p© @ e kc91H[:Rj{fr3*>cVa*LЪ̙*ǘŻ)IUOXT%";Y+(s]x`s T3s"~Įd T^mÅn_~±.h.pzV@H ' /& xd|QA|p*[ĈX"SPV0(Ygv] 10f)i=@Gsf^߹ʼ H]eQW i-|nX,:[8骸|=Ԋ^8(j͖ 1GGrcvC= bi+'oҙɴI~\QtrbqQRϐ?fO՜cc$8` _)&Ilw߄-S}eNKO'@iE#&'{),EWr;JO=ů jH{7C#pe+uR5͓ɓ6 'M:zs݋ oeO c%zY+9I:jO~}|;D7'9=l-3kĿ_ִѬKC\]5:.|<+&ic_=.iz[UN pB#T _䑃3+x /?5wG{.(˲j e?m?)Aj& KաU E3AƾZz旭2yf5h{& P0uNذǒkQ̶z $5]_0!kYZo%=c& K3#ӯ_2z2e%_gp 4ݦtag?-_EdVYÑI\G(*@% 8 <УË8oD6DLVt9 yu+-~YXo<8Jneڍd6lZ|\ iK8jܪ.J?*iƧo)u"CNҎv"vш#{ b|5C%n?7-tI)~ [#&* l)!Aſ/NZchF,!Ege{ilz9$ۮJn&k-*C OKH:ibu㶬~><]5?`OI^G, 9uߛ'PP/V9 $Fwʽ6 8,0x#m!ztji'.nL3 ث lDHLq-Kɐ/eA~-8Zv%M+"cJbwb`UUdi-)iJM)54:[׎OrU[kϻ-n5MU՗+ 8UucUB/5e#4v4*yG(fQm.JAs+[ bJg9ktKuUYϳGs:ߡ$S\H>I=}iߢĪB R`^b%5p—h z`/??Kmyꀧdwɲ0&Cu7S}̲4Y: УgOy>x8'qr{3̯0|rI54 r7uj6jG~><Y(EVIBF_" 2j]bYs*iA̝|>Nz^v} Ę$Yoaw,ʜ- m`Mȗ?؟ L$ x[|'4qM{2 9M/&F=acfdyop.,-7Bq4=t9 "V./nEN yS$F7ʽxc{зjdnȄog&ofh%ſ.djV%~_EdBZw0 چ &ka$݃r1=8*teZs,930 H=P ʤjaxQ ,}$<omɋmzڙ}J6A!9{Q]9I;dUSԆdf)Bw$B8=#6jDk\6`hۚY5U!99R `MœqDZAgCf~fN4$&f``cZ((zv8BcGmmrg6H # R)EupE~x%nf5){h1 [=z|VbnL31}nkhe {MNRˑiN&͹_-¶ܒ:US䌘Qkx.s+cO^~OomU*\d0j$I㌄-S)O6-"+^̿Rb^݅0ǃv(]%ão&%:HA6Hc`;3U~OSIyݏ`SqT& zȖzM{@ Bq S `H28 ̸U0쎸\w{mvu>m"rwkES߀=D&]!G<tjSYf=ʯVxN*&շTGjߏ'P-G޻|׺- oQ cg+e|-}یt<ofE]PА??eNYƤ p߮':ohG {{@}4k\r$;{t- }l@M -e+nng϶%jf9Teߑ:P5 ZM-iv]H_ݻ^bsyU./koߣERk{{rgw*ӵLwP{c~?_GUa!^ZAh}"+MwYY- a3ڲ)y!! zms @ޤ3zN$sBO8!"1*9ᭁtQ{,sZ/05_)ř>KU.S "aui+-k`"I`"A?❄>]~&OC>. IQgX-jr+  /ye&-)\x0LH.ǏAl˖az/ObJf؉X5ѡŃg hUFF)` dkqVhL (õL_TJօDUq֛![u̝['兕so3lPZY4ҨtUʴ":{e/Cgsmp1L|r]:QZEs }  15sZzar-ߦ<6wSѸ?g0έt':eiOu/sS$ָ_e&Ac50AJ'`Ub.q׳MQ_HƬ[H-z-?vE4uu#$t3e,PO$l޼?oW[7ak`1I2=} F`,H ޶ 禁T?G^i[n:ʭj]m:Q-IXv(Θ(vhwbKy"vR} .VaU+Yk/|>ߔcW~nٍlGJGޓR`%8#={mXv:|GUZÛD\ #nZi{54sd#cW kH]_W I\l Ԏx~SOa4o)gQ &m9/ş}. `JL5WDv%fnv6Ht >Ͳ%Noǰ^׾WY;Fgͩ2oZ U|60Zɕ#LӴc!ؘscܲl1+)[[s J O?20>cⓐ:YωG]aʃXh v<AwGC8Օ*R{{m c 4 K>X@-Pk;rE,ATlTQڇV/9Nj>^GW\& ?vRŬrH@XALlptoFW!&uBz9 _+m@pV:d96c'x8$BbY xfp$,e>+e-(CS_Mxlv!*-Ba P*Jۜ$u+aû>6N99K8e~^f#e-?{:wwBv7o6SoEAv6ʯC/(LWu6MZ=R> NzvRǨxU.=%o[<A $ pюS!w'y.eʏATyG3?WjILUL/> X*7M58APUUa/ zŤeD8]<5wF+DJkwwgw3^,e{th?v3)MB^X](|.u գ9]7J][Zt(5V+KřY7΢>S 9oՖ~brVoto-Or˫)`a=W;O*vGkҿE +2jCK5Wmn 3Iw#6^c"h!`3P}}9yTTh^p"'_v~~/J4/^+V-1R*Һ|Xlm!6 >&BYu.=AȇBËϤױz凓z(c x/0_KXq1N;}{_ o zq huqsV>dK#g4I!Fo-K|]}ɕy'reS]$nf2AMnMsۣv>}Qƽ& SdN3BB$̖wdq[rX-_ endstream endobj 470 0 obj << /Length1 1630 /Length2 6206 /Length3 0 /Length 7028 /Filter /FlateDecode >> stream xڭTuX&A[CCEP$vs^{x}~~~c]}yyx%0'kWI!ţu`"YXP+PI1P ,E'fkspqqK` &X1?nPG@P 9B:ڪvUmC*E֎00@ QP  pKpwk(^ < `& :6qH' P[$`GW0zğƆE(0`*U'Ø'vcE`p @e @`(gG'&7 S+ W$8BQ( t'trvv`hц &'m +p@/=67(π w@6hLJe-[w#C::j0 ׍` q![ EW :<C ?/_JJ`; 3?zC8tn#7 M_&(0tOGMML8u16t5# ]C30d%;\RoPPO _(mnvZ\tdL2qt]`mZgYBc{JkLh}y䩞e-V!$G[~}Sg2?mw(j wX7N wwreH'=k 71TtfqDCw/_\Ob }zd{#/:V}/,8F0^q@òΌ:dCƌD [C'TBw2B!jFwҞEɌ >eQE %-E[}t`Uf pyGHəڇr<%+]~@P6j_110O ~]soE&ڂSK>?-:;RE^NZo4h/zu|zIN6۹"oh6|TN٢)$E8\au5KyO@6_C1}ϖqKʄ jEmnS3/R 'zf_rt@?NR|ns+*[t\nNGW]T9ק9ϏʜK+vWa3?mԠ-q0pztb1~)Y a*7W+RqyG-ΩG}|]!y,]c;J?d)ÆQ?^y*w ms=a9F)R(vmE}Z<՝ Vbi[doiҥɶOFC}2\<aW6v?`|/EHK'_95jh?W W9z,[_)W3d)&8Y5P$~n=J PY0&ef}h~ G=:*\Kr^ ogsH[rEIE.2<JK t)qC,x@Y1Y+3 <Ekk?XkqQ Ijct`,Àuዔ !ģwXGٜ 5Ԛ<! Oq(Lx?]ig%R%\f0CNCwqCBCU=:F"d^=ذ7 "Ѹc{AnGl-x}KWxQY3;HQ.~"&$l|Zn"UBv'[ސVsxǩђ~ ,.9*,ۢ &a_ۅvkeFZ(fhOQFd͐ T*Q`_f0e7ʤk.=c4|7w"^P 7u?aXhk/;|~\/Rb Mw $K~KT'OݘhRakdK(gK3ȿ)@"4=+.NpO $^-||/5ӌ!KS 4D?6U*,{:&c-L3zt9\WŞZEGhnpDؠ{?^6Ys",s9E»h[OIF V$b٧'&ݝQL_2شכvs._jQr>1tFc\&aEP+ʟ|uo0g(u+z=Sϐ&&/w%U BdX[w>7#:r|PY9+8dx8|[i0 MX.&mُ+rTƩ8X*Y@B_bJ֪˅y2: [N , ?Ʒq/΁$v(R9) dfsc/_LC?7IN_vY]ZOֹg=z6?4r9~BPty5˰uv >x]%to_[StPn :g#Ix̄X(=,CŻ12qXe .Fm7eNxQO8en:b=w))8sxc 9,5v#'\({JYR|Y-<)r)Tr:_Q&]F+Y,o;+)u#Rw}O=xJiuhoh< #?5OcZ+,gyIѾ:J`T 110jm7} /aS9W2iS\]bS)\T MN]GI q/tAqFNaQ`&gY},vU.(u@nZe4bl tTrj'Ue\5ӵU}bed1x~gzӡ=m[Pws`rC~;jy}9Е_a-$H  bۊc`Iw(geC4=k+\`]gpcHaN}-h  NaijgM(0 2@~6Z3QH7Ԯԋ/N'FN5FU@W]%>*NnnadN!ܭy ZssGm=(5 rpL.m^Y4}ԯ(g~=v?:_Pgچ@*Bz݁MUr1u:\۩dD4"D,s>Au:EtFY*.Q,M%Dzϰkn{?}n:UީRXR>p5h[D.\fJU;iEl,v''2XV.$$CNZrPn#!ƮgrsFFRAu~SΉRKdyNH.s$JǪV$hZڽwT\2&I{xꫠ ʸf^h9GDdf&QkoJ HW63]H%{>t~_E׍̺{f˼휶ў}=faw?DAE#8FKUFZSD6ُo?i9nTW&6o^GZt%_n+DbhV,;|= bKMH8`SOZ{R:ۯ-М :H4vt.;S=]cpXzQ{~?pSXMSۇ*]f|:qfØ4,WY>eRY zi<'_+/~ꆜo2~ybqi"^}6hDr:ڠ=ɱ"}& #^W/ V_V+V 5au%1qp`R+)1-O*.r!Sξ?ҡRzel;TBoBS6F)To56,g8IJsL瓊tㇳ&!Ti_6pz%_Tm|3;[tST{w(rNfp=*0>zI$ I LnOn7L㍍ǔ8qk);8K\(&R|ȺsqCMuHS>W_ֳ֥E֢mslc,:)Gy ]# fjs4lk8MB73Zuh I,-iAnl*s&q.nӉq/V6clehr?pg!q֎b,l$wPQC|)7营"N"N9S.. ζАjJatCPvѪ-K )ےOu29>/҇e9CVӌT( .w\ɣ„A % u^qi;as[RhD D:~XRyql LKqȝ.ș b((4xc՚jFC;6J`έ\<<. ۙ5j q[84S͛Xq$>-;w酐۸>|v;#G$1 ,[I|4d>jJX|{\ H?qX`.n#Ɠ`{_d)v2yNbK&1z|EX#"Q@7MY^۟ߙ ޞ.{,jd,^4HhK%Θpϩ,N)-Qyqቁf?!H"ĺ'ز,K ssO56HWpR;Վkz#]h|e$WrTkn8W\Yq|7ma᧰qnr Cj髴CA ި&> stream x\r8}Wr"w`*5UI;qb;EM˒[|Y $%R[rgj)lVͳyՙw~GEk2d&sE@# Lw4o61Ϥ:+'%6Ud&S[e -4BZHe#:SNlj# ѣc9MD#pH&$zIchM.lrpI|%sG-#{erYfxՀ&+!G#f̜G2Th0D"j PYj Ah93haB0B 3& H%w1 @<[!5h4oHkPcҹ1S dcVd; DԎ[Ax -(4bnp Zf`l-s0,.TnJ-*~M}X9$_\rA+ZTQ=TR1q3#mhx̖qqUh#vGbDHQۼBFRɶ:G;<Ŝ?]<| POyaoEPEԼr[R](yG7T#ώ3 x;kx=|Z7i$oh0\u{jm:E1]{$98wwG߳$<'壂4^vx7W7bqkʬso(OBmVW1Z ?O"!_HDnW`[sJ۔_1 ܄m,WWQ+~ndsKlq+6n*KH;aIyWwS]uO]ԄcV.KnamK[wxԑ.aI&NGQˤH޳c~8;:9Ӷ2wN:.dFS,WtOv49c(;(in"}xogBc:L63M\Xق mD ( Ҭ05SJf2enBG5H@認oK5(?Ӭ=h"泇90JKy78Wjú^W5^yj0@C6Ou;SUX\ cyOYӚu4p w?{4z.q{m:t!I { q2r1T3|:÷WCsC*n;94pB`[e?ՕI`zz1vsЦ5ٗETR:q$=p;1潖F-Zx~}r<Ҍe[>eޘj64}ʖ<r+QnٵY*%FcUT15 2 și¬1͑ٽGT_ < f´n.|Y^rofiʋ PXb+E,ڥخ“O$?ϰL^8א3ӽSl'33NW Nܞk 1I/(b|tt h<Z Y teK؎e@\Fੑ *#mRtJ ZdRY.{ AMҹS*W~`*xcӝ'p{b~藲6]IޢkpLO]mC&!Hm%[b%M2-BtpU"yZ(K`ihEHWy}2i[rD,`YO#=YhX B:#?Gɗݲ$0OxYE*%X<xSCY*TdvdWxs+?`ұ q}Ody0M|2F[mHK~ʒ6]LԒ+&1>Vy/OY-tE.r*ydG ʼSO1xd*8X_ GTIB wKI Q3W C~& uՉL\Ԩ爦FY _Έ .RpWJ(Rq Umr໹YZ9eɁ>EͧCzd4XD]2t#o&%btW}k&2cYg6k?RJthE.ytUӻU{cQE7˝\ׂΕrckk=@VIfw|:M19Pʔ=78Xnp,VV{9wԫ.:Zo덮48=D3# =!HTt@4d,GT |GW뗢hze?ƈ5op1,?*&qj:K|lo{u?wG3|9^L2SMg(ݧ,ΦI'1׽:(_}t{"wɴ|w;(;fIYZkFS6ãg'զx}}f[Kݖl[r- =/SVt׃A1= FC|^^vBó(Ĺ8-ą"yC1 1W⊇|Z\^\L!b"&e\gR|$Sq-oS/0[m/^=}\\\lrD.JB-%{IO<c6S9o/qď%o8G)iJi%"')b]r񽣫bxNlO"Zg sxi\cʶƺ5S[{;~tCwڗӿ}vzwuw:Hhhh2Ŧ:Vx{iJu~x{o. >'p|w.BS5%\]ccwZ6wWƦrf_"*t֍v"; f14{oн㹋qѝ&]_~XȲ:B .&ϣX^;^ϰNo4.pp9ڭ|wZ5jaR-EjaR@geiBEö[ǿ>~z6WU?b=zs%u# }O4j_m[E>?wZ{مٝG)==FC@`iۼ\2n J7DہD3[W#E1h[Ś7_9q gL%5NS?X66Zd,*B=zɽÔago6=XV$:4ܒU-T~*򶧯N{}v7A=2e5D.&7;T{݆$+1moo+?woyb۩r`ܡmꇍ{9œ v|qJ ~W < ;tfNѴ'c1..<gOӖV嫷ے8]vor0ޒҶLޔDPL0`[+*kݼJ@`Yz8 AX?c[ro0 .{|Ж>ŴΗٰC#uZɅ&4TӓVM:oKgns3`\ =GVvbo>n=2 ۞˶tDc[i< "<Fg!ɣ9<ː2gJ;jRsd,* T^*-4^Hvt;N$P+ȜyGN DZ!Ҫ& |W _dݕ) p6+glb/ Zd19M7sT:G#.S4|ٺ:5'3673E Pҕl(%Z<ͼd>RWixR!&TBP*N&8gga_\fA2+!bl + xU1νM6'HRR*K"/?d'nwR_> endobj 472 0 obj << /Type /ObjStm /N 53 /First 449 /Length 1724 /Filter /FlateDecode >> stream xڭXn6}߯c"9A؎) ۊ#t2vH%%-pr KO pL&G@%B0!93F3a,sl-%e30}Jhbh%.Y08S!!8q30LpP!$G'C'H) vEirvghf1@>¡$3ɉE =rLjNb`.1`B䉪RdC+YzL5L%ӌ)!0:R!0SpN8PC d3´u"`foW/wv7֡f`K EzjGN^_e7]jg2}v`zK;p+Eg&SI@ͽ'] h&5"df^oovELܠÍ'E zvxx?XSS!U@NW7$2l򻂨 &:6`v>dbxF<]gjQ~a`ԣX7 c< A|}DcߋbH z1iK盛]5aOP%\.j917,ڕy̘]kh=_gѕ^*9Kq7Jmەjb't]2Znu4 r3&i4^)㕪OMD%WWځ^VnpUC+4S~b@1d[ 9U ÓiuS:Pg9huS:Pg9huS:0/1hu]Lx,+|@Kj9%eM}<|xvWG9v=M3l2]s?T^~-rU|Nv"4#W```I8>)+EP6C,#w9u'$s$ U$ UlM2HfA2[$żg>EЂЂЂvЂvLW}:$>e%QVRΫ}u.vS~*Mޢ@EWFjB#(U,w[t'Su竻ϔҁ2[ަwk;WtZ=&XNG?b_S˪Y&JT0LZ֪uXp// `{ôQ)Sy=J?=(7r^I%;{LCݎrg4~cKtYͷFUop߾줸כl)[b/OX endstream endobj 498 0 obj << /Type /XRef /Index [0 499] /Size 499 /W [1 3 1] /Root 496 0 R /Info 497 0 R /ID [ ] /Length 1184 /Filter /FlateDecode >> stream x%IlWUPJJ eejRҁ@2h dq;Mԍ ƅcbXwnU+4ntʅ~?7_=}y/^ԗR&K'\Nd * Ln?QlDԑkcԐ&6PKn\+*;Nr5&ȭkb \r{Y2FCtnB,,}Α0 cUm%ՐcVrzQp 'I @78N3,8΃ .>p ZJj%eH 2Pt: F,`, p6+`RG`LiVV]5c= HNQ7c" lrR{m̿<4/^,YeeVxTZzMN&;u:i7 ~N?4n׻\o={)sB8w_ SgG-_{dz~K(0+h,hlsEf?)1QѨ*RWq+-|貕hJ_hJ߼hJ+rX+hʫ݊]EVC2h*O *ePЀ4Ї1 % % Version 5.0 % % also generates \jobname.html with image-map data for all node URLs % new configuration commands \dpi and \PixelsPerUnit % default \unit length adjusted to give 10 pixels per coordinate unit at 125 dpi % % Version 4.4 % % increase ysep parameter to 1.8pt to separate course-code or text and arrow tails for minis % and text boxes % % Version 4.3 % % introduce \smallersize configuration command % % Version 4.2 % % using tinting with xcolor package to ease background-color changes % % Version 4.1 % % Version 4.0 % % Implement the \text command to place a line of text (centered at the coordinates) in a chart % % Version 3.8.1: % % adjust arraystretch factors to work with long-ascender fonts such as Futura % adjust inner sep parameters to work with oblique/italic fonts % remove workaround for pgf-1.10 bug described at % http://sourceforge.net/forum/forum.php?thread_id=1621660&forum_id=477363 % require version 1.18 (or later) of pgf % % Version 3.8: % % require version 1.10 (or later) of pgf % % Version 3.7: % % anchor nodes must be non-null for latex/dvips % % Version 3.6: % % first pgf-based version % % Version 3.5: % Version 3.4: % % introduce arrow borders to improve the appearance of crossing arrows % change default widths to artifacts created when arrow borders % occlude box boundaries % % Version 3.3: % % arrows (as well as course boxes and minis) are hyperlinked with coordinate URIs % % Version 3.2: % % Version 3.1: % % Version 3.0: % % "anchor" hyperlinks are added to coordinate grid to allow computation of % chart coordinates at mouse clicks % % Version 2.0: % % CourseURL now takes 3 arguments % box/mini coordinates displayed in (some) PDF viewers when grid on % % Version 1.0.2: % % using \relsize{-3} rather than \scriptsize % using \textsf in \lightbox and \boldbox % % Version 1.0.1: % % using \RequirePackage rather than \usepackage (suggested by Herbert Voss) % \newlength{\unit} \setlength{\unit}{5.7816pt} % 10 pixels per unit at 125dpi; 1pt = (1/72.27) in. \newcommand{\PixelsPerUnit}{10} \newcommand{\dpi}{125} \RequirePackage{relsize} \RequirePackage{calc} \RequirePackage{pgf}[2007/06/12] \RequirePackage{tikz}\usetikzlibrary{arrows} \RequirePackage{ifthen} \RequirePackage{textcomp} \RequirePackage{zref-savepos} \PassOptionsToPackage{urlcolor=black,colorlinks,raiselinks}{hyperref} \RequirePackage{hyperref} \RequirePackage{xcolor} \definecolor{light}{gray}{0.5} \definecolor{somewhatlight}{gray}{0.7} \definecolor{verylight}{gray}{0.85} \definecolor{white}{rgb}{1.0,1.0,1.0} % not transparent, hides grid \newcommand{\DefaultCurvature}{20} % 0 for no curvature \newcommand{\CourseURL}[3]{file:#3.html} \newcommand{\background}{yellow!15} \newcommand{\solidwidth}{0.5pt} \newcommand{\boldwidth}{1.0pt} \newcommand{\dottedwidth}{0.8pt} \newcommand{\dashedwidth}{0.5pt} \newcommand{\smallersize}{\relsize{-2}} \newcommand{\baselineAdj}{-0.5ex} \newcounter{@myangle} \newcounter{@inangle} \newcounter{@dx} \newcounter{@dy} \newif\ifgridon \gridonfalse \newcounter{@gridwidth} \newcounter{@gridright} \newcounter{@gridheight} \newcounter{@gridtop} \newcounter{@diagwidth} \newcounter{diagheight} \setcounter{diagheight}{75} \ifdim\paperwidth>\paperheight \setcounter{diagheight}{65} \fi \newcounter{chart} % in case there is more than one chart in the document \newcounter{xNW}\newcounter{yNW} % coordinates of NW corner of a node \newcounter{xSE}\newcounter{ySE} % coordinates of SE corner of a node \def\@unitmult{\unit * 5} % used for the grid and as the minimum height of half-course boxes \def\@outputImapData#1,#2:#3#4#5{% % #1,#2 coordinates % #3 URL % #4 horizontal delta % #5 vertical delta % \setcounter{xNW}{\dpi * \ratio{\zposx{gridOrigin_\thechart}sp}{1in}}% # of pixels from left edge to origin \addtocounter{xNW}{(#1-#4)*\PixelsPerUnit}% add # pixels from origin to node (-#4 units) \setcounter{xSE}{\dpi * \ratio{\zposx{gridOrigin_\thechart}sp}{1in}}% \addtocounter{xSE}{(#1+#4)*\PixelsPerUnit}% add # pixels from origin to node (+#4 units) \setcounter{yNW}{ \dpi * \ratio{\paperheight}{1in}} % # of pixels for the whole page \addtocounter{yNW}{ 0 - \dpi * \ratio{\zposy{gridOrigin_\thechart}sp}{1in}} % subtract # pixels from bottom edge to origin \addtocounter{yNW}{0 - (#2 - #5) * \PixelsPerUnit } % subtract # of pixels from origin to node (-#5) \setcounter{ySE}{ \dpi * \ratio{\paperheight}{1in}} \addtocounter{ySE}{0 - \dpi * \ratio{\zposy{gridOrigin_\thechart}sp}{1in}} \addtocounter{ySE}{0 - (#2 + #5) * \PixelsPerUnit } % subtract # of pixels from origin to node (+#5) \immediate\write\@imapfile{#3}% } \pgfsetlayers{} \def\solidarrow{% \tikz[x=\unit,y=\unit,baseline=\baselineAdj] \draw[-latex',line width =\solidwidth] (0,0) -- (4,0); } \def\dottedarrow{% \tikz[x=\unit,y=\unit,baseline=\baselineAdj] \draw[loosely dotted,line width=\dottedwidth,-latex'] (0,0) -- (4,0); } \def\dashedarrow{% \tikz[x=\unit,y=\unit,baseline=\baselineAdj] \draw[dashed,line width=\dashedwidth,-latex'] (0,0) -- (4,0); } \def\lightbox{% \tikz[thin,baseline=\baselineAdj]\node[draw,rounded corners=2pt,inner xsep=1.8pt] {\rule[-2pt]{0pt}{4pt}light}; } \def\boldbox{% \tikz[baseline=\baselineAdj]\node[draw,line width=\boldwidth,rounded corners=2pt,inner xsep=1.8pt] {\rule[-2pt]{0pt}{4pt}\bfseries bold}; } \def\dottedbox{% \tikz[baseline=\baselineAdj]\node[draw,dotted,line width=\boldwidth,rounded corners=2pt,inner xsep=1.8pt] {\rule[-2pt]{0pt}{4pt}dotted}; } \pgfdeclarelayer{arrows} \pgfdeclarelayer{courses} \pgfdeclarelayer{grid} \pgfsetlayers{grid,arrows,courses,main} \def\@halfcourse#1,#2:#3#4#5{% \begin{pgfonlayer}{courses}% \node[draw,thin,fill=\background,rounded corners=2pt,inner ysep=0.5pt,minimum height=\@unitmult](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{0.8}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize#3}% \,\hfill\,% {\smallersize\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{2}% \end{pgfonlayer}% } \def\@halfcoursec#1,#2:#3#4#5#6{% \begin{pgfonlayer}{courses}% \node[draw,thin,fill=#6,rounded corners=2pt,inner ysep=0.5pt,minimum height=\@unitmult](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{0.8}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize\selectfont{#3}}% \,\hfill\,% {\smallersize{\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{2}% \end{pgfonlayer}% } \def\@reqhalfcourse#1,#2:#3#4#5{% \begin{pgfonlayer}{courses}% \node[draw,line width=\boldwidth,fill=\background,rounded corners=2pt,inner ysep=0.5pt,minimum height=\@unitmult](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{0.8}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize\bfseries#3}% \,\hfill\,% {\smallersize\bfseries\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}% }};% \@outputImapData#1,#2:{#3}{4}{2}% \end{pgfonlayer}% } \def\@reqhalfcoursec#1,#2:#3#4#5#6{% \begin{pgfonlayer}{courses}% \node[draw,line width=\boldwidth,fill=#6,rounded corners=2pt,inner ysep=0.5pt,minimum height=\@unitmult](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{0.8}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize\bfseries#3}% \,\hfill\,% {\smallersize\bfseries\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}% }};% \@outputImapData#1,#2:{#3}{4}{2}% \end{pgfonlayer}% } \def\@opthalfcourse#1,#2:#3#4#5{% \begin{pgfonlayer}{courses}% \node[draw,dotted,line width=\boldwidth,fill=\background,rounded corners=2pt,inner ysep=0.5pt,minimum height=\@unitmult](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{0.8}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize#3}% \,\hfill\,% {\smallersize\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{2}% \end{pgfonlayer}% } \def\@opthalfcoursec#1,#2:#3#4#5#6{% \begin{pgfonlayer}{courses}% \node[draw,dotted,line width=\boldwidth,fill=#6,rounded corners=2pt,inner ysep=0.5pt,minimum height=\@unitmult](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{0.8}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize#3}% \,\hfill\,% {\smallersize\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{2}% \end{pgfonlayer}% } \def\@fullcourse#1,#2:#3#4#5{% \begin{pgfonlayer}{courses}% \node[draw,thin,fill=\background,rounded corners=2pt,inner ysep=0.5pt](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{1.7}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize#3}% \,\hfill\,% {\smallersize\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{5}% \end{pgfonlayer}% } \def\@fullcoursec#1,#2:#3#4#5#6{% \begin{pgfonlayer}{courses}% \node[draw,thin,fill=#6,rounded corners=2pt,inner ysep=0.5pt](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{1.7}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize#3}% \,\hfill\,% {\smallersize\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \end{pgfonlayer}% \@outputImapData#1,#2:{#3}{4}{5}% } \def\@reqfullcourse#1,#2:#3#4#5{% \begin{pgfonlayer}{courses}% \node[draw,line width=\boldwidth,fill=\background,rounded corners=2pt,inner ysep=0.5pt](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{1.7}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize\bfseries#3}% \,\hfill\,% {\smallersize\bfseries\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{5}% \end{pgfonlayer}% } \def\@reqfullcoursec#1,#2:#3#4#5#6{% \begin{pgfonlayer}{courses}% \node[draw,line width=\boldwidth,fill=#6,rounded corners=2pt,inner ysep=0.5pt](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{1.7}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize\bfseries#3}% \,\hfill\,% {\smallersize\bfseries\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{5}% \end{pgfonlayer}% } \def\@fullcoursec#1,#2:#3#4#5#6{% \begin{pgfonlayer}{courses}% \node[draw,thin,fill=#6,rounded corners=2pt,inner ysep=0.5pt](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{1.7}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize#3}% \,\hfill\,% {\smallersize\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{5}% \end{pgfonlayer}% } \def\@optfullcourse#1,#2:#3#4#5{% \begin{pgfonlayer}{courses}% \node[draw,dotted,line width=\boldwidth,fill=\background,rounded corners=2pt,inner ysep=0.5pt](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{1.7}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize#3}% \,\hfill\,% {\smallersize\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{5}% \end{pgfonlayer}% } \def\@optfullcoursec#1,#2:#3#4#5#6{% \begin{pgfonlayer}{courses}% \node[draw,dotted,line width=\boldwidth,fill=#6,rounded corners=2pt,inner ysep=0.5pt](x#1y#2) at (#1,#2)% { \renewcommand{\arraystretch}{1.7}% \href{\CourseURL{#1}{#2}{#3}}{\begin{tabular}{@{\hspace{1pt}}c@{\hspace{1pt}}}% {\smallersize#3}% \,\hfill\,% {\smallersize\renewcommand{\arraystretch}{0.5}\begin{tabular}[t]{@{}r@{}}#5\end{tabular}}% \\ #4% \end{tabular}}% };% \@outputImapData#1,#2:{#3}{4}{5}% \end{pgfonlayer}% } \def\@mini#1,#2:#3{% \begin{pgfonlayer}{courses}% \ifgridon \node[fill=white,draw=white,inner ysep=1.8pt](x#1y#2) at (#1,#2)% { \href{\CourseURL{#1}{#2}{#3}}{% {\smallersize\mdseries#3}}};% \else \node[fill=none,draw=none,inner ysep=1.8pt](x#1y#2) at (#1,#2)% { \href{\CourseURL{#1}{#2}{#3}}{% {\smallersize\mdseries#3}}};% \fi \@outputImapData#1,#2:{#3}{2}{1}% \end{pgfonlayer}% } \def\@text#1,#2:#3{% % include coordinates if grid on, but don't hyperlink if grid off \begin{pgfonlayer}{courses}% \ifgridon \node[fill=white,draw=white,inner ysep=1.8pt](x#1y#2) at (#1,#2)% {\href{coord: #1,#2}{\mbox{\sffamily\mdseries#3}}};% \else \node[fill=none,draw=none,inner ysep=1.8pt](x#1y#2) at (#1,#2){\mbox{\sffamily\mdseries#3}};% \fi \end{pgfonlayer}% } \def\@prereq#1,#2,#3,#4:{% \setcounter{@dy}{#2-#4} \ifnum\the@dy<10 \@straight#1,#2,#3,#4: \else\ifnum#1=#3 \@straight#1,#2,#3,#4: \else\ifnum#2=#4 \@straight#1,#2,#3,#4: \else \@prereqc#1,#2,#3,#4;\DefaultCurvature: \fi\fi\fi } \def\@prereqc#1,#2,#3,#4;#5:{% \ifnum#5=0 \@straight#1,#2,#3,#4: \else \@curved#1,#2,#3,#4;#5: \fi } \def\@recomm#1,#2,#3,#4:{% \setcounter{@dy}{#2-#4} \ifnum\the@dy<10 \@straightDashed#1,#2,#3,#4: \else\ifnum#1=#3 \@straightDashed#1,#2,#3,#4: \else\ifnum#2=#4 \@straightDashed#1,#2,#3,#4: \else \@recommc#1,#2,#3,#4;\DefaultCurvature: \fi\fi\fi } \def\@recommc#1,#2,#3,#4;#5:{% \ifnum#5=0 \@straightDashed#1,#2,#3,#4: \else \@curvedDashed#1,#2,#3,#4;#5: \fi } \def\@coreq#1,#2,#3,#4:{% \setcounter{@dy}{#2-#4} \ifnum\the@dy<10 \@straightDotted#1,#2,#3,#4: \else\ifnum#1=#3 \@straightDotted#1,#2,#3,#4: \else\ifnum#2=#4 \@straightDotted#1,#2,#3,#4: \else \@coreqc#1,#2,#3,#4;\DefaultCurvature: \fi\fi\fi } \def\@coreqc#1,#2,#3,#4;#5:{% \ifnum#5=0 \@straightDotted#1,#2,#3,#4: \else \@curvedDotted#1,#2,#3,#4;#5: \fi } \def\@straight#1,#2,#3,#4:{% \begin{pgfonlayer}{arrows} \draw[draw=white,line width=1.5pt](x#1y#2) -- (x#3y#4) ; \draw[-latex',draw=white,very thin](x#1y#2) -- (x#3y#4) ; \ifgridon \draw[line width=\solidwidth](x#1y#2) -- node[anchor=mid] {\href{coord: #1,#2,#3,#4}{\textbullet}} (x#3y#4); \else \draw[line width=\solidwidth](x#1y#2) -- (x#3y#4) ; \fi \end{pgfonlayer} } \def\@curved#1,#2,#3,#4;#5:{ \setcounter{@dy}{#2-#4} \ifnum#3<#1 \setcounter{@dx}{#1-#3} \setcounter{@myangle}{(-#5) * \the@dx * \the@dy * 2} \else \setcounter{@dx}{#3-#1} \setcounter{@myangle}{#5 * \the@dx * \the@dy * 2} \fi \setcounter{@myangle}{\the@myangle / ((\the@dx + \the@dy) * (\the@dx + \the@dy))} \setcounter{@inangle}{180 - \the@myangle} \begin{pgfonlayer}{arrows} \draw[draw=white,line width=1.5pt](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] (x#3y#4) ; \draw[-latex',draw=white,very thin](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] (x#3y#4) ; \ifgridon \draw[line width=\solidwidth](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] node[anchor=mid] {\href{coord: #1,#2,#3,#4}{\textbullet}} (x#3y#4) ; \else \draw[line width=\solidwidth](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] (x#3y#4) ; \fi \end{pgfonlayer} } \def\@straightDashed#1,#2,#3,#4:{% \begin{pgfonlayer}{arrows} \draw[draw=white,line width=1.5pt] (x#1y#2) -- (x#3y#4); \draw[-latex',draw=white,very thin] (x#1y#2) -- (x#3y#4); \ifgridon \draw[dashed,line width=\dashedwidth] (x#1y#2) -- node[anchor=mid] {\href{coord: #1,#2,#3,#4}{\textbullet}} (x#3y#4) ; \else \draw[dashed,line width=\dashedwidth] (x#1y#2) -- (x#3y#4); \fi \end{pgfonlayer} } \def\@curvedDashed#1,#2,#3,#4;#5:{ \setcounter{@dy}{#2-#4} \ifnum#3<#1 \setcounter{@dx}{#1-#3} \setcounter{@myangle}{(-#5) * \the@dx * \the@dy * 2} \else \setcounter{@dx}{#3-#1} \setcounter{@myangle}{#5 * \the@dx * \the@dy * 2} \fi \setcounter{@myangle}{\the@myangle / ((\the@dx + \the@dy) * (\the@dx + \the@dy))} \setcounter{@inangle}{180 - \the@myangle} \begin{pgfonlayer}{arrows} \draw[draw=white,line width=1.5pt](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] (x#3y#4) ; \draw[-latex',draw=white,very thin](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] (x#3y#4) ; \ifgridon \draw[dashed,line width=\dashedwidth](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] node[anchor=mid] {\href{coord: #1,#2,#3,#4}{\textbullet}} (x#3y#4); \else \draw[dashed,line width=\dashedwidth](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] (x#3y#4); \fi \end{pgfonlayer} } \def\@straightDotted#1,#2,#3,#4:{% \begin{pgfonlayer}{arrows} \draw[draw=white,line width=1.5pt] (x#1y#2) -- (x#3y#4); \draw[-latex',draw=white,very thin] (x#1y#2) -- (x#3y#4); \ifgridon \draw[loosely dotted,line width=\dottedwidth] (x#1y#2) -- node[anchor=mid] {\href{coord: #1,#2,#3,#4}{\textbullet}} (x#3y#4) ; \else \draw[loosely dotted,line width=\dottedwidth] (x#1y#2) -- (x#3y#4); \fi \end{pgfonlayer} } \def\@curvedDotted#1,#2,#3,#4;#5:{ \setcounter{@dy}{#2-#4} \ifnum#3<#1 \setcounter{@dx}{#1-#3} \setcounter{@myangle}{(-#5) * \the@dx * \the@dy * 2} \else \setcounter{@dx}{#3-#1} \setcounter{@myangle}{#5 * \the@dx * \the@dy * 2} \fi \setcounter{@myangle}{\the@myangle / ((\the@dx + \the@dy) * (\the@dx + \the@dy))} \setcounter{@inangle}{180 - \the@myangle} \begin{pgfonlayer}{arrows} \draw[draw=white,line width=1.5pt](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] (x#3y#4) ; \draw[-latex',draw=white,very thin](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] (x#3y#4) ; \ifgridon \draw[loosely dotted,line width=\dottedwidth](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] node[anchor=mid] {\href{coord: #1,#2,#3,#4}{\textbullet}} (x#3y#4) ; \else \draw[loosely dotted,line width=\dottedwidth](x#1y#2) to[out=\the@myangle,in=\the@inangle,relative] (x#3y#4) ; \fi \end{pgfonlayer} } \def\@grid{ \gridontrue \renewcommand{\CourseURL}[3]{coord: ##1,##2} % "coord:" makes it look like a URI \begin{pgfonlayer}{grid} \draw[line width=0.3pt,draw=verylight] (0,0) grid [step=1] (\value{@gridright},\value{@gridtop}); \draw[line width=0.4pt,draw=somewhatlight] (0,0) grid [step=5] (\value{@gridright},\value{@gridtop}); \foreach \i in {0,10,...,\value{@gridright}} \node at (\i,-4){\small \i}; \foreach \i in {0,10,...,\value{@gridtop}} \node at (-5,\i){\small \i}; \foreach \i in {0,10,...,\value{@gridright}} \node at (\i,\value{@gridtop}+4){\small \i}; \foreach \i in {0,10,...,\value{@gridtop}} \node at (\value{@gridright}+5,\i){\small \i}; % anchors are to allow computation of coordinates from mouse clicks in kpdf/okular: % latex/dvips requires non-null href box \node at (-5,-4) {\href{anchor: -5,-4}{\kern1sp}}; \setcounter{@gridtop}{\value{@gridtop} + 4} \setcounter{@gridright}{\value{@gridright} + 5} \node at (\the@gridright,\the@gridtop) {\href{anchor: \the@gridright,\the@gridtop}{\kern1sp}}; \end{pgfonlayer} } % % % \begin{chart} ... \end{chart} % % \newenvironment{chart} { \setcounter{@diagwidth}{10 + 1 * \ratio{\textwidth}{\unit}} \newwrite\@imapfile % image-map data \newwrite\@scriptfile % shell script to generate image file \ifthenelse{\value{chart} = 0} { \immediate\openout\@imapfile=\jobname.map \immediate\write\@imapfile{} } { \immediate\openout\@imapfile=\jobname_\thechart.map \immediate\write\@imapfile{} } \let\halfcourse=\@halfcourse \let\halfcoursec=\@halfcoursec \let\reqhalfcourse=\@reqhalfcourse \let\reqhalfcoursec=\@reqhalfcoursec \let\opthalfcourse=\@opthalfcourse \let\opthalfcoursec=\@opthalfcoursec \let\fullcourse=\@fullcourse \let\fullcoursec=\@fullcoursec \let\reqfullcourse=\@reqfullcourse \let\reqfullcoursec=\@reqfullcoursec \let\optfullcourse=\@optfullcourse \let\optfullcoursec=\@optfullcoursec \let\mini=\@mini \let\text=\@text \let\prereq=\@prereq \let\prereqc=\@prereqc \let\coreq=\@coreq \let\coreqc=\@coreqc \let\recomm=\@recomm \let\recommc=\@recommc \let\grid=\@grid \begin{tikzpicture}[x=\unit,y=\unit] \tikzstyle{every rectangle node}=[inner xsep=1.8pt] \setcounter{@gridwidth}{(\the@diagwidth-5) / 10} \setcounter{@gridright}{10 * \value{@gridwidth}} \setcounter{@gridheight}{\thediagheight / 10} \setcounter{@gridtop}{10 * \value{@gridheight} } \useasboundingbox (0,-2) rectangle (\value{@gridright},\value{@gridtop}); node at (0,0) {\kern1sp\zsavepos{gridOrigin_\thechart}}; % access absolute page coordinates of the origin using \zposx and \zposy } { \end{tikzpicture} \write\@imapfile{} \closeout\@imapfile \zsavepos{EndOfChart_\thechart} % determine cropping coordinates \ifdim\paperwidth<\paperheight % portrait mode \setcounter{xSE}{\dpi * \ratio{\zposx{EndOfChart_\thechart}sp}{1in}}% \setcounter{ySE}{ \dpi * \ratio{\paperheight}{1in}} \addtocounter{ySE}{0 - \dpi * \ratio{\zposy{EndOfChart_\thechart}sp}{1in}} \addtocounter{ySE}{0 + 2 * \PixelsPerUnit } % bottom margin \else % landscape mode \setcounter{xSE}{ \dpi * \ratio{\paperwidth}{1in}} \addtocounter{xSE}{0 - \dpi * \ratio{\zposx{EndOfChart_\thechart}sp}{1in}}% \addtocounter{xSE}{0 + 2 * \PixelsPerUnit } % bottom margin \setcounter{ySE}{ \dpi * \ratio{\paperheight}{1in}} \addtocounter{ySE}{ 0 - \dpi * \ratio{\zposy{EndOfChart_\thechart}sp}{1in}} \fi \edef\HasH{\expandafter\@gobble\string\#} \ifthenelse{\value{chart} = 0} { % generate a script to crop a chart image \immediate\openout\@scriptfile=\jobname.sh \immediate\write\@scriptfile{\HasH!/bin/sh} % defer remaining output till cropping coordinates are available \write\@scriptfile{mogrify -crop \thexSE x\theySE +0+0 \jobname.png} \write\@scriptfile{exit 0} \closeout\@scriptfile } { % more than one chart; unlikely a script would be usable } \stepcounter{chart} } prerex-6.5.3/chart.png0000644000123700002140000005637512226246471013025 0ustar rdtrdtPNG  IHDR pHYs}}O? vpAg'_/APLTE  """""""" """%%%&&&((()))+++...00022233,33-33.330333777>>>@@@AA u]׫tL?fExNVu=16{Wo0 0m^Z_Gy]MK}*Zbw^6U_c u]xhY @Ũul= _&GU*z[a o9Kkj@o4 k?Fh:4~>f[h[}u]a=|x}z= ( uk:i5-ٿcӟeCtL苆賺 r%t:BTNFLֳz1з'͗T>FD _gA <]qדO.$|kj7NAW;O꺮O2x*Û^6 =ǤYv땂+1Nl6 (k;l6n_f/d3]AWˬ~mx}[KAWG]I!$8Q0[M ˺C0Y( >M٭OXg -h+?upVU JAW)*]AWt]AFSԒ AW)*]uW+t]S@/e*!n%1HZ@7@иt]5$-݇]@d5d $H=YLЅL5KzEIڒ,‡ޢ hTtսAg @KDXQ2.)|$ %DFC4o* QAQb, I e$)SC4o* Up;X63 ~s` +p]t"t-<t]AW) RU JAW)*]t]+ JAWt+*]AWU JA&^4+ >?*AhWw JA&=/ JA象ctZ?-)rLNqSH0A iQHJy${iw +O Gya SBur cX:bmE2A"gg@OGLڬRyHX m-b yH k5B"ebo t~d^g{s]A9#)q\DoAȂl> ֒DAEȰ@_Fc8o`MpTTMWV΢D[ 2JlQI@#ߦH >Jd$ʊIoEzz+$%} #RLE$ #@L;crȢ S#qkӝ)h/&i[Lk bI17E`) z"OL*r=AI hA@A Tн+b3d6Ce4ut;QSOi~i 0 )0Χoet@ŪPU3ov m@/`iæ"n@waI}lym5VX\NK;k@ᮠ+zU yO?v^/ mv_&M4jAgnsmb c>ȸfI߅y8[}:5wTja{FUL dT;dH uTHz+mb ~k>L 8: > `$A&́XX94]AW{`>8@\E0O߀^F@|3qKTzs^T?]_נ,ۭЫ{+b T[qZ @ Y⤐Pb2Yy|tY{OJj][>0&&wp^|j6z;AnCg)B2ԅpXJSq*nBst+Y! &}Ku)C=Rƀ|/ۆ2Sιxozw{i>Tнw?m Ns)=:HAs]A__Ng(nzst} nHZHZзþPe}`-' u]5/{>XCLՀ.Qj R@$FZ7a) $/'ӏ: ~S z~:ԓ`=qVwl~8u]/FF&ү3b yzY/21lч& >@BR oE[35V療QWX6A2ktY ۃ^fC`!>u 73( A7ү˛:n8^o[iSozV0m۬sEGwXbI䤤mҷ!˥aW|DA1l۬sh$KB\L(gXHNHކgNŏ6A~do棇vAGuB6dޭ^U-.k|C ې zf{]g^5JNA),mwA; [ېzf{]wXD6ƠlDԦMHlC蝛u]-PA!eV |tn uB6d}޽~Et~:]pFv mz{"JAUܦuyD%u>: DaNnmB6dއ^"$s#i&uw^r27ېGf{}EVSo^[➋賑t}wzޓ=g)f\A[5R3/ q8ꥷrk3&+菭v;0:5^??/ѷg1oBڛ)}6y꺮6-q}MB^G}Ň`k~G?W7 JԜR}97o['㔜gQϋ_/SП"CW^Ke>N~y'yZ]A'zLg=r{pj눮߁թ}VkMSПz~r lzz`]߁z|q܇ì,NJZ|~U?dT q~^qM"Wk&ˑv= 8_h&}p$QПzzުk\.G7Z)Ԝ;DwĶ*,uK 3X sG. oyk 3Xt!7[?1痌ϝEܐNP|uI\hG+ҷ|) PAl8Ep:+i9zvp" p~e\H)Cճs>\tއV_p~85TApοJ^:^]ۺ9aիz8_\CU7|-%8??ukn3Ztb_iOv_5EAlο,t ?/M/܊.(菫%L7,.kꚂՕ]v/F+Nx(#5 z;_~ TԷ祜U|D׳t3&1Yg|{~POvQc܏z1&?^k;)zNN9ג cIWZ/j~P2j^k"~"o[' sX8gУ6] 㷕PO X.?@+c'|NG{bu7 ~{{?Qp8[''էMꄏ_~΅)-Ee?NXXO#O9>F0ү F#L*m9-;0\2 W>{5BS[7i&p" 0}sNznH{Cތ9O\[GpIdKn֚f(t59͗b .ÐFBZ$Riɶnp,-i#[D.u|hHZG4Ygf]2Cn z ֒)`4/i&9V`memYKo&?%+7qW\9(@X K>)2$-pd 0!wk+EoLwkQ2$YqLF \XKC"! ?‹}G,*>rMO~[!4.RDH2\CF ?#ԼצIDi(HزBp3C6Vf( Nq Nׁh/MJbgUx(2TD 9ria ҤhX&(!]Õ;8Z8q'ot~kST̛)RvFla#f+9|A%IKh@ق^ؓFݙ)P6HyW&r kA#z̵Q"?i4=uA ENIB  el-(GaR:DF" Msdc8|=M1GJn( @MO`[;|]M'lrj98PՆ,W%cɻ-mZ E\yk륟@`eddxD6.׺Tu߀P79ޏ36P.`ȸ@ȸ'МSYC`t}@:5Rt]AgT8M+ÙϨvVM-}nmw9~}=[,t}3fՄ܀^@uvs=Ln&$) L`ֶbYG6 ݦP>fIzq?* rZ 9SDOa<#U{2AH}}ٜ,<o%tqә:tS[i>v m|sY>$SHZ!~=s1,Qθ`@j peke@si qMp_C@pvJ}+]EKIMysٙu?0t@ڜiZ'mS4@g(՜@ض|OǛ@@ ?!`Nio%"𚜷xyr2ti&۠c,?nsU݂nֲn ts؈.$Kz Mי~ߚ]Ax󭝽S.0Ks.v-Œ}@ BK*ߛ@sۯ9 !nO §ֹn] zi(H$10$) $WЛ܅@q35=myt '=%aAJAJggCׁn6UA+߂CHy(ZWuW+!^G3$FS(,{]KVM6DDd3 J')RPbMP!R^`&"3nh2P3[ѹ!q[=[cF0&1ۅ(m)`7 PoSTx/^; k222`gI]hrLdJ] &/2m5@f;1Jl U1"@MozۛM% "a bQN2E.S DUYH`r\MG|ýw zNlc6PCM8d^mRe7l}u%ș v!u$8]H˙݉x١2e-'hנW&أ=nG2qlnG@_W`vu#UX]b^;}?+;r5$lz쵪O bt~"Hzc{MoؠpL?5K"֗Ou2EX'+U"by ͦtT 7ܧ}kvy;4}F ;g[=:Ȁ>,/xy_П.c#ezGx9@^44_ӿ'O? >{hugv~/ZAzYWuht/qϘ ؇tw>sYd^/ݙc2?GXtwrِ>֢Ou= =:SOB[uxnճ C*?>]Fxiڕ׷zD LAT]h _#'^L^2Q‚{+K=q};nz3= z2Y=Z*菩 ^9jf?>rf Cjy_[h9%uϾ+?gF]otU/1p^ڃ_ZrT(/?As db5~^SsOڿ{C ]!u6__Q]p =ǂ^|vc-Ngz5ux=I8-/z5 zLJO| wWA? h6~b?p>Wnן z]ޓS^zc۪z^zcߕRrwZիbQu叴%oF'~OOqM U=0_]^6w7ľo{~7w/̒𵠯&e;S DOʗ~-?h?$krRs?)nՠK0|gyHg,Oovz~øs&1fA&V G^nz?/ cfF]Z.*)<UN՞OGo]v\+Oh? Ws[^/G72=n=x/]~e7׋[{?*cpeGq?uK:=tgxm]vzyWl}z\ ruqP]t>.焖sm]vz9pulGѣ"Rgٺ"O/9ەM笵;[^~Q,un]v 5Eg 6b -g|݃~1¤'ۛWXLZ˻T3w=aޡb:{B'ۛmb~U~x}UW.jZ4i9R~ݶ?ݥ/tw;\7wWA?C{uyvl6{cD+=*gh]^ٮpն#!' ׿x=g.t8G>wzp] CASNӏL.˕.'O]OɭT`V28ғ(e=.|k DOE\/.ӟQS=%VbsY?UQ>Up@_"-e9~uoǦ+WCj5}Wokw1'DѠBz@t|_"['y^D ʙ: sG2o:,O ?:iɟ@/1w$iaHf@K <rl>xA}m@r~Г>)2$Lf(=Zs+ CLK.u)iNt5egqn׷4ӂG# ZTbmE6ok囧! gЭATe ĶՑsع 1‘8//@IA`]GC 9a{^\Y/ `([VH, ID>"i}=-+t(6v kݧO7(}D'%KҊ)x*Em̮}7d.҂ a{v^,|k zj}+,ܝt1,4)Ķc}Ӣy:"d8! 3! %O/@_L[{ 'm̭O=y$ldo@9 b@W[-9wAw62ef2i'ЃK}d$3Gb߂03Ir*7$ӶŦiu$v=<:|cl]Umyq;`dQZQ#E1?NȾ08%%>>NRSҗE-,pT)k]q" @,YiF>wՋls[aANтL O'Cf=MI&Ť p݀p< l`sR Fjy$0~[k]hF^^c1БOZ;|yeYiOMy>83I3=ǿ^h 뀙ˀ_m\VD%0G_::1fA?12+<]m#n0M뛂Tܳ_x8:/OZ#ÁMggUٔݬz~ ]z^mQ^eW QW 2W`2jW~]=^F r7A\SUᵋ],}^r, 47+?=Uנ[ Ko` n#F0#2"Ě-)0I*xk?J"OD%.6C ZXSm>45Q }'iYuֻ?)C@/L1TlOnq_u}G; Y޵珅X{UI-T~d;]cݮ:XDSqħ"y(D$q@T6DDDàhthcHNK“"IUz$-IcJNT$tXVYJֵUv q 86'⦞7 A_W @\+a@@\0 jYAt?t1)`HsXA ")c#f{rKO2<=߭;al^*jITBg'$T@I.zϸ#̋OstG X]БTU$s -=q: I%~d=\m(=4Ƴ6e`- ͝q[w"g=H:E!eVY.|f{K5kgA]ߧpSK s.0A Uz=ɰ'nai"]V΅pCJ2!,CASw³M4]'7'BjhQaaa{tf0\;8hGyޔrM@smoA[6{K0E6kn@f@?z?EB?esM܀nTa}S}B6U5m^Y]^;Ofϝs@s\5q;@Wa~|23DN|ɃtfKO+Yt嵑_Ml/ n7٘D.|s%EƢuئ|N@@i6>Uu߫;q`Dlg}S}bzHZ4{~80z zSC7$5,Й Ӧ(zz?df՝znq@TÌ=3t_{5衸;}9[nM<t2T@X$&ON _ vI-ĮS/7Ⱦ3;\_UR7(H ݔ eI-ί7*s{oqfyTu#h tȓ>u;ٞfIV8y_Ryxo^vdϷÙL|!i?bk1幠VqC}MZ*S0ۻ_ej"gor\""ɩ{*޸AT߲O{.:iu[/H{?=>7n/Hn%3Du-{S}ѕϴ7x)nͦ蝮_yIu'xJ{㞡N]WX,_<?z27qG=7}o񻙠.'.jqAӘf}>㕗#azn}tz t:F[?xSwщGi O>Ⲧ>zmP3޸Ra;xn/z:ĩ{Nݚ-?i,4>*+uz^׳^n yӹaG^/'꫞H?^ 5љ_^\4Y uB]0]j28|Nyp697Jл\XANIXz[-b5~ɴ켩6{W7٨n'Tq]Ϧ}6mf˻̛i^zww1z1UR'olZ׳I]׳i]׋>I^^ 뽗{'UѲ}zҮ=\w^]6W^t4森 -3;I.1ݛu}ҐtIjrYo7w)>](mX~`u@gŲ<l )-YnOunz~7ngGz71v~!7jyr׺]l7!(7%]:Փyo .r7wZ|Rп]1UOI} ArmvRп]yo ?Ũ@~3o87)Ws_q8n/G7s_46zyV26{-U8}t3p{ݪݟ/gzqċ~A?ԏ7O oi- ^n8~ΟM 觓~(/`E~C8?&O !#:7(~Z~-SM(!+W죟7_:\Z.P/oAw`-o8./Nj(q0cx^g/V_#)菢A"~Z\>pls)^f? |`] ;X*菢#ߚwEs:7$siogokgyʿ9GݎE&S^7l?~/q?a/~#;xұ͹QxkkMu_/9gN g۳/Y/g=qW}?y:ὍЏo zzAߚ{כ׺ ן WݭBf@,}(3 &OUfGjz8~an@.Os+Ǟӟf>_glA8L꺮|=Oz9^zzwA3VyD诫?cG6!z3$1_~? hecLA6#%e g$S_jmL-iI@X6|@o>.٧ "GyX2|tЫrZB/m_ w yzڟi[E@] %KieHf@K <r >L mZ>)r7_l^#kv4o{;=pOa$EA"]/ i{Q =駎2ڄ6<Y=I ؾ0x=p:X!"OHX(-Jq~[=YK$-b 2ljAnI i{ID7gmH b&CY w8jdM) 3l~J!13TbDOgi@lz‘(HK mE"bbicBl;ַ77@9ԥb2#][Z!mܰMN:Xft㲙u,3:4Y≰4i+"x[U"o^: *i[A׽p])k]xiMGd xƈzҜ9AZ>֥~z VIٴsg)y*nYLg o/ =z w@o>ny0&g 2 θ@7@T0LN gTbWLNYty֠R2,Қ#&-O7 #ئޜ†)Yۮ-{coaTggY0b 9 0Su0s{*2֠kdF]vȸ k+~+?tsUn ϭ-ޯG~\Y{CB=<q UvA7 zٹ1ow9-sCBzj{E9s_qhNzz& l;^mU=^M" ݑ>KDGF"b!ɓCHS\$\r'z2KR$gonbmgqHr,ʊdtVlF2%YZ*K$)1d%'Dlu-svvMn}!R^`&"M0`Й%}lf䔳A!bO1m߁^ I!/X"iIRRZɘ"3`?+mcj~97?4D2op f1(H1)`"c+AoLy*Uda^HBWZTĖ<| k2 =9PeڤH03kmG>BڲG_rO,%" aȘ(t){ba_T&)I l]Yqΰi4<%iӎM"EI,Ied"KdX"XXD#&b#dbD`*:<|?G2)b2ABAJn;E HQg AsYYWgҐ`-4gnA=L_* ˒L봤4%v^%@Tjj8;LUT9!IʜsjiIAI,2Z:A t@停)m}l>`{,Bܴz`KS#r w-Ma:d0.].>BV#wXGR̃ibBV #i5p!WN\=丵ߘvDN{cNtu6B7 RUuuWw>gDQz(JlGOKQZ;b=HWDQrRKn7^Z7ϝS!M5íHrͰ;+{m"Q_5llG :>XŢO="~y3E zqwg^d,<"<=ެZ[yRfS} tp\dNZ|{pJ׉)v3+W߳/)<׮JUoXEi=\֓垗ރ7~7߉_9Mw[tt=n3nQ䕢GXaj=S/$CN H>;8w2\Z)7qiyXt_QOzݺ9]9Cr(L>+T0ɘI&2+ 2ZrD7 Zla8}(ו&ADDš!$RD&SMяK#o..wDmIjcK,iY2P+2Eb ڑu}:Elָ?(Ga#X{%r /"MrEo%jCB׵$>;R o:m).61;tq7-Y-2VN \4Bk69}Wb3ǽCt-ރWALˎA:x3 7jቷ.3TrNvxzLGEZv/,XR!f:x$S]Wj:Wi7p)ǩED\ʧ/I&]]2\lü}~\eɒwݗ3 -;yW_JYDo9lC--qi}tֻp:kK]|9bH)uEn ]6zҎD1,)鏊ҿ5}e#r,]YE_l)g y/:G@ v}DB&C*>ǥmw.&ĻMc>Iˇfm@OD_ڑNfuH6iIIT.8tF,h]Zޭ fF`^EE/?pmYz+M6!hwFhW͂ߟ}]SBM #YYKITtJWArԮ,f QO}gu]EW3&tzփ(-YlC}sDv][\3ODoUlMяK#Ɵ$fֵ7Bi*ԾcD7o\TfC ʐűgKhb;y= 3<ߤ*z|ȦC  /N&vuU-(N3\ jquQU<0ے"+EH+Խܵ9 T/nѻҏRݡ^Ki:xQ[)JtY=Nʖi?闵[WU\IKx*z|x?#z;vh">Oez%%Q72jgҕ i0R/pTQGm<1f+vgI-t&%=pBuRQie# `%o$hbڲS+~$֬%]yp>ƶ^R٦ ø^K,{i/B !B !B NNNNE'PtBE'PtBE'PtBE'PtB(:NNNNPtBE'PtBE'PtBE'PtBE'B(:!B(:!B(:!B(:!B !B !B !B !NNNNPtBE'PtBE'PtBE'PtBE'B(:!B(:!B(:!B(:!B !B !B !B !NNNNPtBE'PtBE'PtBE'PtBE'PtB(:!B(:!B(:!B(:!_h܌%tEXtdate:create2012-07-18T15:12:14-04:00'DW%tEXtdate:modify2012-07-18T15:12:14-04:00ztEXtpdf:VersionPDF-1.5 \ 9IENDB`prerex-6.5.3/chart.html0000644000123700002140000000653212226246604013171 0ustar rdtrdt

chart.png

  • A solid arrow solid.png indicates a required prerequisite, a dotted arrow dotted.png indicates a corequisite (to be taken before or concurrently), and a dashed arrow dashed.png indicates a recommended prerequisite. Core courses are in boldbox.png boxes; other courses (i.e., options or prerequisites) are in lightbox.png boxes.
  • Timetabling abbreviations: M, T, W, Th, F=Mon, Tue, Wed, Thur, Fri, resp.; eve=7:00–9:50 pm; no=not offered.
1083 1303 2813 2023 2513 1083 2333 2013 2685 2013 3323 3813 3413 3013 3513 3503 prerex-6.5.3/vprerex-6.4.2/0000755000123700002140000000000012015174460013330 5ustar rdtrdtprerex-6.5.3/vprerex-6.4.2/INSTALL0000644000123700002140000000314211761442232014363 0ustar rdtrdtTo install: + You must have first installed the Qt-4 and poppler libraries, including the poppler-qt4 library. These may be available packaged for your platform or the sources can be obtained from: http://qt.nokia.com/downloads/downloads#qt-lib http://poppler.freedesktop.org/ + Edit vprerex.pro so INCLUDEPATH and LIBS point to the relevant directories. + qmake vprerex.pro (using the Qt-4 qmake) + make + install the vprerex binary in a suitable directory such as $HOME/bin or /usr/local/bin. If vprerex is applied to a LaTeX file, it calls xterm and the prerex editor. On Windows, the Qt-4 and poppler libraries are available for the Cygwin platform; then vprerex will build and run on the Cygwin X-server. It is also possible to build and use vprerex on the MinGW platform in Windows. Install the Qt-4 libraries for MinGW-4.4 from http://qt.nokia.com/downloads/windows-cpp and the poppler libraries from http://windows.kde.org/download.php The headers and libraries for the latter install under c:\ProgramData\KDE. so use INCLUDEPATH += /c/ProgramData/KDE/include/poppler/qt4 LIBS += -L/c/ProgramData/KDE/lib -lpoppler-qt4 in vprerex.pro. The resulting vprerex.exe will run but of course cannot open an xterm or start prerex; however, prerex can be started separately in a MinGW shell. To paste from the clipboard, enable QuickEdit mode in the shell: - Right-click in the title-bar, and then click Properties. - On the Options tab, click to select the QuickEdit Mode check box. - Click OK. Then right-clicking will paste the clipboard text into the prerex command line. prerex-6.5.3/vprerex-6.4.2/documentwidget.h0000644000123700002140000000466211760717756016554 0ustar rdtrdt /**************************************************************************** ** Adapted from PDFviewer, originally published in the QT Quarterly: ** http://doc.trolltech.com/qq/QtQuarterly27.pdf ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Modified for use with prerex: ** http://www.ctan.org/tex-archive/graphics/prerex ** Copyright (C) 2009-12 R. D. Tennent ** School of Computing, Queen's University, rdt@cs.queensu.ca ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU General Public License as published by the ** Free Software Foundation; either version 2 of the License, or (at your ** option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ** Public License for more details. ** ** You should have received a copy of the GNU General Public License along ** with this program; if not, write to the Free Software Foundation, Inc., ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef DOCUMENTWIDGET_H #define DOCUMENTWIDGET_H #include #include #include #include #include #include class DocumentWidget : public QLabel { Q_OBJECT public: DocumentWidget(QWidget *parent = 0); ~DocumentWidget(); Poppler::Document *document(); QMatrix matrix() const; qreal scale() const; bool setDocument(const QString &filePath); public slots: void reloadDocument1(); void reloadDocument2(); void setPage(int page = -1); void setScale(qreal scale); protected: void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); signals: void pageChanged(int currentPage); void documentReloaded(); private: void showPage(int page = -1); Poppler::Document *doc; int currentPage; qreal scaleFactor; QList pageLinks; bool mousePressed; QClipboard *cb; QString currentPath; QTimer *timer ; QFileInfo *fileInfo; int imageWidth; int imageHeight; int imageXoffset; int imageYoffset; }; #endif prerex-6.5.3/vprerex-6.4.2/ChangeLog0000644000123700002140000000441611761442232015111 0ustar rdtrdtVersion 6.4.2 2012-05-30 - allow for Windows (rather than X11) clipboard function Version 6.4.1 2012-05-25 - restore FileSystemWatch path after reloading pdf (needed for Windows) Version 6.4.0 2012-04-13 - references to undeclared sleep() replaced by references to QThread::sleep() (debian bug 667331). Version 6.3.2 2012-03-30 - bump up version number to match prerex.sty and prerex Version 6.3.1 2011-12-22 If a file opening dialogue is used and a tex file is opened, the Working Directory for the prerex process is set to the directory of the tex file. Version 6.3 2011-11-22 Right-clicking on a course box or arrow *appends* coordinates to the clipboard (to simplify multiple deletes/shifts). Version 6.2 2011-09-08 no longer embedding the prerex editing window because of continuing focus issues Version 6.1.1 2011-08-20 - using grabKeyboard to avoid keyboard-focus issues - bump up version number to match prerex.sty and prerex Version 6.0.1 2011-07-27 - modified FocusPolicy Version 6.0 2010-06-23 - files re-organized and distributed as a gzipped tarball Version 5.7 2010-04-06 - corrected coordinate calculations to use the image width/height rather than the widget width/height (and allow for image offsets) Version 5.6 2010-03-26 Version 5.5 2010-03-16 - re-named vprerex (visual prerex) - opens prerex source files by embedding a prerex command-line window - added Quit button to controls - removed docking features from the controls widget - removed resizing from the statusbar This is the first distributed version of vprerex; the version numbers are starting at 5.5 to be compatible with the current version of prerex. Derived from pdfviewer by - excising all UI widgets except the Page spinner and the Scale selector - adding URI tooltips and cursor-shape changes for links - assigning box, edge, and background-point coordinates to the X clipboard when the user clicks on a box, edge mid-point, or background point, resp. (for a prerex chart with the coordinate grid enabled) - adding a file watcher to re-load the PDF when the file changes - posting taskbar messages to identify the program version and the loaded file, and inform the user that the PDF has been re-loaded prerex-6.5.3/vprerex-6.4.2/Makefile0000644000123700002140000001732411761430101014771 0ustar rdtrdt############################################################################# # Makefile for building: vprerex # Generated by qmake (2.01a) (Qt 4.6.2) on: Wed May 30 10:35:45 2012 # Project: vprerex.pro # Template: app # Command: /usr/bin/qmake-qt4 -unix -o Makefile vprerex.pro ############################################################################# ####### Compiler, tools and options CC = gcc CXX = g++ DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED CFLAGS = -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -Wall -W -D_REENTRANT $(DEFINES) CXXFLAGS = -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -Wall -W -D_REENTRANT $(DEFINES) INCPATH = -I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I/usr/include/poppler/qt4 -I. -I. LINK = g++ LFLAGS = -Wl,-O1 LIBS = $(SUBLIBS) -L/usr/lib -lpoppler-qt4 -lQtGui -lQtCore -lpthread AR = ar cqs RANLIB = QMAKE = /usr/bin/qmake-qt4 TAR = tar -cf COMPRESS = gzip -9f COPY = cp -f SED = sed COPY_FILE = $(COPY) COPY_DIR = $(COPY) -r STRIP = INSTALL_FILE = install -m 644 -p INSTALL_DIR = $(COPY_DIR) INSTALL_PROGRAM = install -m 755 -p DEL_FILE = rm -f SYMLINK = ln -f -s DEL_DIR = rmdir MOVE = mv -f CHK_DIR_EXISTS= test -d MKDIR = mkdir -p ####### Output directory OBJECTS_DIR = ./ ####### Files SOURCES = documentwidget.cpp \ main.cpp \ window.cpp moc_documentwidget.cpp \ moc_window.cpp OBJECTS = documentwidget.o \ main.o \ window.o \ moc_documentwidget.o \ moc_window.o DIST = /usr/lib/qt4/mkspecs/common/g++-multilib.conf \ /usr/lib/qt4/mkspecs/common/unix.conf \ /usr/lib/qt4/mkspecs/common/linux.conf \ /usr/lib/qt4/mkspecs/qconfig.pri \ /usr/lib/qt4/mkspecs/features/qt_functions.prf \ /usr/lib/qt4/mkspecs/features/qt_config.prf \ /usr/lib/qt4/mkspecs/features/exclusive_builds.prf \ /usr/lib/qt4/mkspecs/features/default_pre.prf \ /usr/lib/qt4/mkspecs/features/release.prf \ /usr/lib/qt4/mkspecs/features/default_post.prf \ /usr/lib/qt4/mkspecs/features/warn_on.prf \ /usr/lib/qt4/mkspecs/features/qt.prf \ /usr/lib/qt4/mkspecs/features/unix/thread.prf \ /usr/lib/qt4/mkspecs/features/moc.prf \ /usr/lib/qt4/mkspecs/features/resources.prf \ /usr/lib/qt4/mkspecs/features/uic.prf \ /usr/lib/qt4/mkspecs/features/yacc.prf \ /usr/lib/qt4/mkspecs/features/lex.prf \ /usr/lib/qt4/mkspecs/features/include_source_dir.prf \ vprerex.pro QMAKE_TARGET = vprerex DESTDIR = TARGET = vprerex first: all ####### Implicit rules .SUFFIXES: .o .c .cpp .cc .cxx .C .cpp.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cc.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cxx.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .C.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .c.o: $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" ####### Build rules all: Makefile $(TARGET) $(TARGET): ui_window.h $(OBJECTS) $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) Makefile: vprerex.pro /usr/lib/qt4/mkspecs/linux-g++/qmake.conf /usr/lib/qt4/mkspecs/common/g++-multilib.conf \ /usr/lib/qt4/mkspecs/common/unix.conf \ /usr/lib/qt4/mkspecs/common/linux.conf \ /usr/lib/qt4/mkspecs/qconfig.pri \ /usr/lib/qt4/mkspecs/features/qt_functions.prf \ /usr/lib/qt4/mkspecs/features/qt_config.prf \ /usr/lib/qt4/mkspecs/features/exclusive_builds.prf \ /usr/lib/qt4/mkspecs/features/default_pre.prf \ /usr/lib/qt4/mkspecs/features/release.prf \ /usr/lib/qt4/mkspecs/features/default_post.prf \ /usr/lib/qt4/mkspecs/features/warn_on.prf \ /usr/lib/qt4/mkspecs/features/qt.prf \ /usr/lib/qt4/mkspecs/features/unix/thread.prf \ /usr/lib/qt4/mkspecs/features/moc.prf \ /usr/lib/qt4/mkspecs/features/resources.prf \ /usr/lib/qt4/mkspecs/features/uic.prf \ /usr/lib/qt4/mkspecs/features/yacc.prf \ /usr/lib/qt4/mkspecs/features/lex.prf \ /usr/lib/qt4/mkspecs/features/include_source_dir.prf \ /usr/lib/libQtGui.prl \ /usr/lib/libQtCore.prl $(QMAKE) -unix -o Makefile vprerex.pro /usr/lib/qt4/mkspecs/common/g++-multilib.conf: /usr/lib/qt4/mkspecs/common/unix.conf: /usr/lib/qt4/mkspecs/common/linux.conf: /usr/lib/qt4/mkspecs/qconfig.pri: /usr/lib/qt4/mkspecs/features/qt_functions.prf: /usr/lib/qt4/mkspecs/features/qt_config.prf: /usr/lib/qt4/mkspecs/features/exclusive_builds.prf: /usr/lib/qt4/mkspecs/features/default_pre.prf: /usr/lib/qt4/mkspecs/features/release.prf: /usr/lib/qt4/mkspecs/features/default_post.prf: /usr/lib/qt4/mkspecs/features/warn_on.prf: /usr/lib/qt4/mkspecs/features/qt.prf: /usr/lib/qt4/mkspecs/features/unix/thread.prf: /usr/lib/qt4/mkspecs/features/moc.prf: /usr/lib/qt4/mkspecs/features/resources.prf: /usr/lib/qt4/mkspecs/features/uic.prf: /usr/lib/qt4/mkspecs/features/yacc.prf: /usr/lib/qt4/mkspecs/features/lex.prf: /usr/lib/qt4/mkspecs/features/include_source_dir.prf: /usr/lib/libQtGui.prl: /usr/lib/libQtCore.prl: qmake: FORCE @$(QMAKE) -unix -o Makefile vprerex.pro dist: @$(CHK_DIR_EXISTS) .tmp/vprerex1.0.0 || $(MKDIR) .tmp/vprerex1.0.0 $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/vprerex1.0.0/ && $(COPY_FILE) --parents documentwidget.h window.h .tmp/vprerex1.0.0/ && $(COPY_FILE) --parents documentwidget.cpp main.cpp window.cpp .tmp/vprerex1.0.0/ && $(COPY_FILE) --parents window.ui .tmp/vprerex1.0.0/ && (cd `dirname .tmp/vprerex1.0.0` && $(TAR) vprerex1.0.0.tar vprerex1.0.0 && $(COMPRESS) vprerex1.0.0.tar) && $(MOVE) `dirname .tmp/vprerex1.0.0`/vprerex1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/vprerex1.0.0 clean:compiler_clean -$(DEL_FILE) $(OBJECTS) -$(DEL_FILE) *~ core *.core ####### Sub-libraries distclean: clean -$(DEL_FILE) $(TARGET) -$(DEL_FILE) Makefile mocclean: compiler_moc_header_clean compiler_moc_source_clean mocables: compiler_moc_header_make_all compiler_moc_source_make_all compiler_moc_header_make_all: moc_documentwidget.cpp moc_window.cpp compiler_moc_header_clean: -$(DEL_FILE) moc_documentwidget.cpp moc_window.cpp moc_documentwidget.cpp: documentwidget.h /usr/lib/qt4/bin/moc $(DEFINES) $(INCPATH) documentwidget.h -o moc_documentwidget.cpp moc_window.cpp: documentwidget.h \ ui_window.h \ window.h /usr/lib/qt4/bin/moc $(DEFINES) $(INCPATH) window.h -o moc_window.cpp compiler_rcc_make_all: compiler_rcc_clean: compiler_image_collection_make_all: qmake_image_collection.cpp compiler_image_collection_clean: -$(DEL_FILE) qmake_image_collection.cpp compiler_moc_source_make_all: compiler_moc_source_clean: compiler_uic_make_all: ui_window.h compiler_uic_clean: -$(DEL_FILE) ui_window.h ui_window.h: window.ui /usr/lib/qt4/bin/uic window.ui -o ui_window.h compiler_yacc_decl_make_all: compiler_yacc_decl_clean: compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: compiler_clean: compiler_moc_header_clean compiler_uic_clean ####### Compile documentwidget.o: documentwidget.cpp documentwidget.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o documentwidget.o documentwidget.cpp main.o: main.cpp window.h \ documentwidget.h \ ui_window.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp window.o: window.cpp window.h \ documentwidget.h \ ui_window.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o window.o window.cpp moc_documentwidget.o: moc_documentwidget.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_documentwidget.o moc_documentwidget.cpp moc_window.o: moc_window.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_window.o moc_window.cpp ####### Install install: FORCE uninstall: FORCE FORCE: prerex-6.5.3/vprerex-6.4.2/vprerex.10000644000123700002140000000551512015174310015105 0ustar rdtrdt.TH VPREREX 1 2012-05-30 "vprerex-6.4.2" "" .SH NAME .BR vprerex \- graphical front-end and viewer for the .BR prerex (1) prerequisite-chart editor .SH SYNOPSIS .BR vprerex .IR basefile [ .tex ] [ .IR chartfile [ .tex ] ] .PP .BR vprerex .IR file.pdf .PP .BR vprerex .SH DESCRIPTION .B vprerex (visual prerex) is a GUI front-end and viewer for the .BR prerex (1) interactive editor of prerequisite-chart descriptions in the .BR prerex (5) format. The viewer may be used just as a minimalist viewer of arbitrary PDF files but supports editing of charts generated using .BR prerex.sty (7) by allowing coordinates of course boxes, arrows, and background points to be conveyed back to the .BR prerex (1) command-line using the clipboard. .SH USAGE If .B vprerex is invoked on a PDF file, it simply displays that file. .PP If the (first) argument does .I not have the .pdf suffix, it is assumed to be the base file for a LaTeX document containing a prerequisite-chart description in .BR prerex (5) format, to be edited using .BR prerex (1). If a .I second argument is supplied, it is regarded as an included file containing the specific chart environment to be edited. .PP If .I no arguments are supplied, a file-opening dialog allows the user the specify the .BR prerex (1) base file to be edited (or the PDF file to be viewed); if a separate chartfile is needed, .BR vprerex (1) must be invoked wth two arguments on the command line. .PP If the mouse hovers over a hyperlink in the PDF viewing window, the cursor shape will change to a pointing finger and a tooltip will display the URI. If the PDF file displayed contains a chart generated using .BR prerex.sty (7) and the background coordinate grid has been enabled, left-clicking the mouse on a course box, arrow mid-point, or background point will load the relevant coordinates into the clipboard; right-clicking the mouse on a course box or arrow will .I append the relevant coordinates to the clipboard. The cursor shape changes to a plus-sign to indicate successful capture of the coordinates. Middle-clicking (or, in a Windows shell with "Quick Edit" mode enabled, right-clicking) the mouse at the .BR prerex (1) command-line will then paste those coordinates into a command being composed. If the chart file is regenerated, the updated document will be re-loaded. .SH DEPENDENCIES .B vprerex is based on the Qt-4 and poppler libraries. It calls .BR xterm (1) and .BR prerex (1) for the editing window and uses .BR poppler-qt4 for rendering PDF files. If an X server isn't running or there is no xterm application, the prerex editor can be started separately. .SH AUTHOR R. D. Tennent (rdt@cs.queensu.ca), adapted from David Boddie's PDFviewer, described in the QT Quarterly: .B http://doc.trolltech.com/qq/QtQuarterly27.pdf. .SH SEE ALSO .BR prerex (1), .BR prerex (5), .BR prerex.sty (7), and .BR xterm (1). prerex-6.5.3/vprerex-6.4.2/window.ui0000644000123700002140000001604511760011774015210 0ustar rdtrdt MainWindow 0 0 960 1000 vprerex Qt::LeftToRight QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks|QMainWindow::ForceTabbedDocks 0 0 Qt::RightToLeft Qt::NoFocus Qt::LeftToRight true Qt::AlignCenter 0 0 946 906 Qt::NoFocus Qt::LeftToRight false true false QDockWidget::NoDockWidgetFeatures Qt::BottomDockWidgetArea|Qt::TopDockWidgetArea 4 4 0 4 0 Qt::NoFocus Quit Qt::Horizontal 40 20 &Page: pageSpinBox false Qt::NoFocus Qt::Horizontal 20 20 &Scale document: scaleComboBox false Qt::NoFocus 1 100% 110% 125% 175% 250% 400% Qt::Horizontal 20 20 &Open... Ctrl+O E&xit Ctrl+Q &Increase Scale Ctrl++ &Decrease Scale Ctrl+- true true &Document Controls prerex-6.5.3/vprerex-6.4.2/window.cpp0000644000123700002140000001271611760717756015373 0ustar rdtrdt /**************************************************************************** ** Adapted from PDFviewer, originally published in the QT Quarterly: ** http://doc.trolltech.com/qq/QtQuarterly27.pdf ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Modified for use with prerex: ** http://www.ctan.org/tex-archive/graphics/prerex ** Copyright (C) 2009-12 R. D. Tennent ** School of Computing, Queen's University, rdt@cs.queensu.ca ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU General Public License as published by the ** Free Software Foundation; either version 2 of the License, or (at your ** option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ** Public License for more details. ** ** You should have received a copy of the GNU General Public License along ** with this program; if not, write to the Free Software Foundation, Inc., ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include #include "window.h" # include # include # include #include class mythread : public QThread { public: static void sleep(unsigned long secs) { QThread::sleep(secs); } }; Window::Window(QWidget *parent) : QMainWindow(parent) { setupUi(this); scaleFactors << 1. << 1.1 << 1.25 << 1.75 << 2.5 << 4.; documentWidget = new DocumentWidget(); scrollAreaWidget->setWidget(documentWidget); fsw = new QFileSystemWatcher(); sb = statusBar(); versionWidget = new QLabel(QString("This is vprerex, v.%1 ").arg(version), this); sb->addPermanentWidget(versionWidget); connect(documentControlsAction, SIGNAL(toggled(bool)), controlsDockWidget, SLOT(setVisible(bool))); connect(pageSpinBox, SIGNAL(valueChanged(int)), documentWidget, SLOT(setPage(int))); connect(documentWidget, SIGNAL(pageChanged(int)), pageSpinBox, SLOT(setValue(int))); connect(scaleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(scaleDocument(int))); connect(fsw, SIGNAL(fileChanged(QString)), documentWidget, SLOT(reloadDocument1())); connect(documentWidget, SIGNAL(documentReloaded()), this, SLOT(reloadMessage())); connect(quitButton, SIGNAL(clicked()), this, SLOT(quit())); } void Window::setFileNames(QString FileName, QString ChartFileName ) { fileName.append(FileName); fileInfo.setFile(FileName); chartFileName.append(ChartFileName); loadDocument(); } void Window::open() { QString fullFileName; fullFileName.append(QDir::cleanPath(QFileDialog::getOpenFileName(this, "Select a prerex file to edit or a pdf file to view.", QString(), "Prerex source files (*.tex);;Portable Document Format files (*.pdf)"))); if (fullFileName.isNull()) { QMessageBox::critical(this, "vprerex", "File selection failed."); close(); exit(1); } fileInfo.setFile(fullFileName); // user can specify a separate "chartFile" by using two command-line arguments fileName.append(fileInfo.baseName()); fileName.append("."); fileName.append(fileInfo.suffix()); loadDocument(); } void Window::loadDocument(void) { pdfFilePath.append(fileInfo.dir().path()); pdfFilePath.append("/"); pdfFilePath.append(fileInfo.baseName()); pdfFilePath.append(".pdf"); if (fileName.endsWith(".tex")) { QStringList arguments; process = new QProcess(centralwidget); process->setWorkingDirectory(fileInfo.dir().path()); if ( chartFileName.length() > 0 ) arguments << QString("-geometry") << QString("100x60") << QString("-fa") << QString("Monospace") << QString("-e") << QString("prerex") << fileName << chartFileName; else arguments << QString("-geometry") << QString("100x60") << QString("-fa") << QString("Monospace") << QString("-e") << QString("prerex") << fileName; process->start(QString("xterm"), arguments); } QFileInfo pdfFileInfo; pdfFileInfo.setFile(pdfFilePath); while ( pdfFileInfo.size() == 0 ) { // wait for the PDF file mythread::sleep (1); pdfFileInfo.refresh(); } mythread::sleep (1); sb->showMessage(pdfFilePath); fsw->addPath(pdfFilePath); while ( !(documentWidget->setDocument(pdfFilePath)) ) { // if at first you don't succeed, try, try again mythread::sleep (1); } scaleComboBox->setEnabled(true); pageSpinBox->setEnabled(true); pageSpinBox->setMinimum(1); pageSpinBox->setMaximum(documentWidget->document()->numPages()); pageSpinBox->setValue(1); } void Window::reloadMessage(void) { sb->showMessage(pdfFilePath + " reloaded.", 2000); QTimer::singleShot(2000, this, SLOT(pathMessage())); // On Windows, pdflatex removes the existing pdf file initially and // this removes the file path from the file-system watcher; the // following restores the path to the file-watch list if necessary: if (!fsw->files().contains(pdfFilePath)) fsw->addPath(pdfFilePath); } void Window::pathMessage(void) { sb->showMessage(pdfFilePath); } void Window::scaleDocument(int index) { documentWidget->setScale(scaleFactors[index]); } void Window::quit(void) { close(); } prerex-6.5.3/vprerex-6.4.2/README0000644000123700002140000000421112015174310014200 0ustar rdtrdtvprerex (visual prerex) is a GUI front-end and viewer for the prerex interactive editor of prerequisite-chart descriptions in the prerex format. The viewer may be used just as a minimalist viewer of arbitrary PDF files but supports editing of charts generated using prerex.sty by allowing coordinates of course boxes, arrows, and background points to be conveyed back to the prerex editor command-line using the X11 clipboard. To install: + You must have first installed the Qt-4 and poppler libraries, including the poppler-qt4 library. These may be available packaged for your platform or the sources can be obtained from: http://qt.nokia.com/downloads/downloads#qt-lib http://poppler.freedesktop.org/ + Edit vprerex.pro so INCLUDEPATH and LIBS point to the relevant directories. + qmake vprerex.pro (using the Qt-4 qmake) + make + install the vprerex binary in a suitable directory such as $HOME/bin or /usr/local/bin. If vprerex is applied to a LaTeX file, it calls xterm and the prerex editor. On Windows, the Qt-4 and poppler libraries are available for the Cygwin platform; then vprerex will build and run on the Cygwin X-server. It is also possible to build and use vprerex on the MinGW platform in Windows. Install the Qt-4 libraries for MinGW-4.4 from http://qt.nokia.com/downloads/windows-cpp and the poppler libraries from http://windows.kde.org/download.php The headers and libraries for the latter install under c:\ProgramData\KDE. so use INCLUDEPATH += /c/ProgramData/KDE/include/poppler/qt4 LIBS += -L/c/ProgramData/KDE/lib -lpoppler-qt4 in vprerex.pro. The resulting vprerex.exe will run but of course cannot open an xterm or start prerex; however, prerex can be started separately in a MinGW shell. To paste from the clipboard, enable QuickEdit mode in the shell: - Right-click in the title-bar, and then click Properties. - On the Options tab, click to select the QuickEdit Mode check box. - Click OK. Then right-clicking will paste the clipboard text into the prerex command line. Or install the following console application and configure it to paste on right-click: sourceforge.net/projects/console prerex-6.5.3/vprerex-6.4.2/window.h0000644000123700002140000000424711761424444015026 0ustar rdtrdt /**************************************************************************** ** Adapted from PDFviewer, originally published in the QT Quarterly: ** http://doc.trolltech.com/qq/QtQuarterly27.pdf ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Modified for use with prerex: ** http://www.ctan.org/tex-archive/graphics/prerex ** Copyright (C) 2009-12 R. D. Tennent ** School of Computing, Queen's University, rdt@cs.queensu.ca ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU General Public License as published by the ** Free Software Foundation; either version 2 of the License, or (at your ** option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ** Public License for more details. ** ** You should have received a copy of the GNU General Public License along ** with this program; if not, write to the Free Software Foundation, Inc., ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ** ****************************************************************************/ #ifndef WINDOW_H #define WINDOW_H # include # include "documentwidget.h" # include # include "ui_window.h" # include # include # include const char version[] = "6.4.2"; class QTextBrowser; class Window : public QMainWindow, public Ui_MainWindow { Q_OBJECT public: Window(QWidget *parent = 0); QFileSystemWatcher *fsw; QStatusBar *sb; void setFileNames(QString BaseFileName, QString ChartFileName); void loadDocument(void); void open(); private slots: void scaleDocument(int index); void reloadMessage(); void pathMessage(); void quit(); private: DocumentWidget *documentWidget; QString fileName; QFileInfo fileInfo; QString chartFileName; QString pdfFilePath; QVector scaleFactors; QLabel *versionWidget; QProcess *process; }; #endif prerex-6.5.3/vprerex-6.4.2/vprerex.pro0000644000123700002140000000061211761430071015544 0ustar rdtrdtFORMS = window.ui HEADERS = documentwidget.h \ window.h SOURCES = documentwidget.cpp \ main.cpp \ window.cpp # Modify these to refer to the directories on your system # that contain the poppler-qt4.h header file and [lib]poppler-qt4 library. INCLUDEPATH += /usr/include/poppler/qt4 LIBS += -L/usr/lib -lpoppler-qt4 prerex-6.5.3/vprerex-6.4.2/COPYING0000644000123700002140000004312212015416306014363 0ustar rdtrdt GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. prerex-6.5.3/vprerex-6.4.2/documentwidget.cpp0000644000123700002140000002226311761426535017075 0ustar rdtrdt /**************************************************************************** ** Adapted from PDFviewer, originally published in the QT Quarterly: ** http://doc.trolltech.com/qq/QtQuarterly27.pdf ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Modified for use with prerex: ** http://www.ctan.org/tex-archive/graphics/prerex ** Copyright (C) 2009-12 R. D. Tennent ** School of Computing, Queen's University, rdt@cs.queensu.ca ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU General Public License as published by the ** Free Software Foundation; either version 2 of the License, or (at your ** option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ** Public License for more details. ** ** You should have received a copy of the GNU General Public License along ** with this program; if not, write to the Free Software Foundation, Inc., ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ** ****************************************************************************/ #include #include #include "documentwidget.h" DocumentWidget::DocumentWidget(QWidget *parent) : QLabel(parent) { currentPage = -1; doc = NULL; scaleFactor = 1.1; setCursor(Qt::ArrowCursor); setAlignment(Qt::AlignTop | Qt::AlignCenter); mousePressed = false; setMouseTracking(true); cb = QApplication::clipboard(); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(reloadDocument2())); } DocumentWidget::~DocumentWidget() { delete doc; } Poppler::Document *DocumentWidget::document() { return doc; } void DocumentWidget::mousePressEvent(QMouseEvent *event) { Qt::MouseButton qtm = event->button(); if ( !(qtm == Qt::LeftButton || qtm == Qt::RightButton) ) return; int x1 = 0, y1 = 0, x2 = 0, y2 = 0; // pixel coordinates of anchors int xc1 = 0, yc1 = 0, xc2 = 0, yc2 = 0; // chart coordinates of anchors int n_anchors = 0; // number of anchors found imageXoffset = 0; imageYoffset = 0; // re-compute in case of window re-sizing if (imageWidth < width()) imageXoffset = (width() - imageWidth) / 2; if (imageHeight < height()) // possible after re-scaling despite AlignTop imageYoffset = (height() - imageHeight) / 2; int xmouse = event->pos().x() - imageXoffset; // mouse coordinates in pixels int ymouse = event->pos().y() - imageYoffset; QPointF mousePos // normalized position in [0..1] coordinates = QPointF((qreal)xmouse / (qreal)imageWidth, (qreal)ymouse / (qreal)imageHeight); // iterate through the Links: for (int i = 0; i < pageLinks.size(); ++i) { Poppler::LinkBrowse * link = static_cast(pageLinks[i]); if (link == NULL) continue; // not a Browse Link QString URI = link->url(); QRectF linkRect = pageLinks[i]->linkArea(); if ( linkRect.contains(mousePos) && URI.startsWith(QString("coord:")) ) { // clicked in a coord: x,y box or coord: x0,y0,x1,y1 bullet QString cbString; if ( qtm == Qt::RightButton ) { if (cb->supportsSelection()) cbString.append(cb->text(QClipboard::Selection)); else cbString.append(cb->text(QClipboard::Clipboard)); cbString.append(" "); } URI.remove("coord: "); cbString.append(URI); if (cb->supportsSelection()) cb->setText(cbString, QClipboard::Selection); else cb->setText(cbString, QClipboard::Clipboard); setCursor(Qt::CrossCursor); mousePressed = true; return; } if ( URI.startsWith(QString("anchor:")) ) { QPointF anchorCenter // in [0..1] coordinates = (pageLinks[i]->linkArea()).center(); URI.remove(0,7); // remove "anchor:" int comma = URI.indexOf(','); QString xs = URI.left(comma); // x-coordinate as a string QString ys = URI.remove(0, comma+1); // y-coordinate as a string if (n_anchors == 0) { xc1 = xs.toInt(); yc1 = ys.toInt(); x1 = (int)(imageWidth * anchorCenter.x()); y1 = (int)(imageHeight * anchorCenter.y()); n_anchors++; } else if (n_anchors == 1) { xc2 = xs.toInt(); yc2 = ys.toInt(); x2 = (int)(imageWidth * anchorCenter.x()); y2 = (int)(imageHeight * anchorCenter.y()); n_anchors++; } } } if (n_anchors == 0) return; // coordinate grid off? if (n_anchors == 1) { QMessageBox::warning(this, tr("vprerex"), tr("Only found one anchor")); return; } // clicked on background grid; must be LeftButton click if ( qtm == Qt::RightButton ) return; // determine chart coordinates of the click point: int xc = (int)( 0.25L + (xc1 + xc2)/2.0L - ((x1 + x2)/2.0L - xmouse) * (qreal)(xc2 - xc1) / (x2 - x1) ); int yc = (int)( 0.75L + (yc1 + yc2)/2.0L - ((y1 + y2)/2.0L - ymouse) * (qreal)(yc2 - yc1) / (y2 - y1) ); if (cb->supportsSelection()) cb->setText(QString("%1,%2").arg(xc).arg(yc), QClipboard::Selection); else cb->setText(QString("%1,%2").arg(xc).arg(yc), QClipboard::Clipboard); mousePressed = true; setCursor(Qt::CrossCursor); } void DocumentWidget::mouseMoveEvent(QMouseEvent *event) { imageXoffset = 0; imageYoffset = 0; // re-compute in case of window re-sizing if (imageWidth < width()) imageXoffset = (width() - imageWidth) / 2; if (imageHeight < height()) // possible after re-scaling despite AlignTop imageYoffset = (height() - imageHeight) / 2; int xmouse = event->pos().x() - imageXoffset; // mouse coordinates in pixels int ymouse = event->pos().y() - imageYoffset; QPointF mousePos // normalized click position in [0..1] coordinates = QPointF((qreal)xmouse / (qreal)imageWidth, (qreal)ymouse / (qreal)imageHeight); // iterate through the Links: for (int i = 0; i < pageLinks.size(); ++i) { Poppler::LinkBrowse * link = static_cast(pageLinks[i]); if (link == NULL) continue; // not a Browse Link QString URI = link->url(); QRectF linkRect = pageLinks[i]->linkArea(); if ( linkRect.contains(mousePos) ) { if ( mousePressed ) return; setCursor(Qt::PointingHandCursor); setToolTip(URI); return; } } if (mousePressed) return; setCursor(Qt::ArrowCursor); } void DocumentWidget::mouseReleaseEvent(QMouseEvent *) { mousePressed = false; setCursor(Qt::ArrowCursor); } qreal DocumentWidget::scale() const { return scaleFactor; } void DocumentWidget::showPage(int page) { if (page != -1 && page != currentPage + 1) { currentPage = page - 1; emit pageChanged(page); } QImage image = doc->page(currentPage)->renderToImage(scaleFactor * physicalDpiX(), scaleFactor * physicalDpiY()); setPixmap(QPixmap::fromImage(image)); imageWidth = image.width(); imageHeight = image.height(); pageLinks = doc -> page(currentPage) -> links(); setCursor(Qt::ArrowCursor); } bool DocumentWidget::setDocument(const QString &filePath) { doc = Poppler::Document::load(filePath); if (doc == NULL) { // temporarily ill-formed pdf? wait for another reload signal return( false ); } currentPath = filePath; fileInfo = new QFileInfo(currentPath); doc->setRenderHint(Poppler::Document::Antialiasing); doc->setRenderHint(Poppler::Document::TextAntialiasing); currentPage = -1; setPage(1); return( true ); } void DocumentWidget::reloadDocument1(void) { fileInfo->refresh(); if (fileInfo->size() == 0) return; // pdflatex clears file.pdf timer->setSingleShot(true); timer->start(2000); // wait for the file to stabilize // When the timer timesout, it calls reloadDocument2 } void DocumentWidget::reloadDocument2(void) { Poppler::Document *savedoc; fileInfo->refresh(); if (fileInfo->size() == 0) return; // pdflatex clears file.pdf savedoc = doc; doc = Poppler::Document::load(currentPath); if (doc == NULL) { // temporarily ill-formed pdf? wait for another reload signal doc = savedoc; return; } delete savedoc; doc->setRenderHint(Poppler::Document::Antialiasing); doc->setRenderHint(Poppler::Document::TextAntialiasing); showPage(currentPage+1); documentReloaded(); } void DocumentWidget::setPage(int page) { if (page != currentPage + 1) { showPage(page); } } void DocumentWidget::setScale(qreal scale) { if (scaleFactor != scale) { scaleFactor = scale; showPage(-1); } } prerex-6.5.3/vprerex-6.4.2/main.cpp0000644000123700002140000000571212015174310014757 0ustar rdtrdt/**************************************************************************** ** Adapted from PDFviewer, originally published in the QT Quarterly: ** http://doc.trolltech.com/qq/QtQuarterly27.pdf ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Modified for use with prerex: ** http://www.ctan.org/tex-archive/graphics/prerex ** Copyright (C) 2009-12 R. D. Tennent ** School of Computing, Queen's University, rdt@cs.queensu.ca ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU General Public License as published by the ** Free Software Foundation; either version 2 of the License, or (at your ** option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ** Public License for more details. ** ** You should have received a copy of the GNU General Public License along ** with this program; if not, write to the Free Software Foundation, Inc., ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ** ****************************************************************************/ /* ** vprerex (visual prerex) is a GUI front-end and viewer for the prerex ** interactive editor of prerequisite-chart descriptions in the prerex ** format. The viewer may be used just as a minimalist viewer of ** arbitrary PDF files but supports editing of charts generated using ** prerex.sty by allowing coordinates of course boxes, arrows, and ** background points to be conveyed back to the prerex editor command-line ** using the clipboard. */ #include #include "window.h" #include using namespace std; int main(int argc, char *argv[]) { QApplication app(argc, argv); Window window; QStringList Argv = app.arguments(); printf ("This is vprerex, version %s.\n", version); puts ("Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies)."); puts ("Qt Software Information (qt-info@nokia.com)"); puts ("Copyright (c) 2009-12 R. D. Tennent"); puts ("School of Computing, Queen's University, rdt@cs.queensu.ca"); puts ("This program comes with NO WARRANTY. You can redistribute vprerex and/or"); puts ("modify it under the terms of the GNU General Public License version 2."); puts (""); window.show(); if ( argc > 1 ) { QString fileName; QString chartFileName; fileName.append(Argv.at(1)); if (!fileName.endsWith(".tex") && !fileName.endsWith(".pdf")) fileName.append(".tex"); if ( argc > 2 ) { chartFileName.append(Argv.at(2)); if (!chartFileName.endsWith(".tex")) chartFileName.append(".tex"); } window.setFileNames(fileName, chartFileName); } else window.open(); return app.exec(); }