wsjt_9.3.r2792/0000775000175000017500000000000012104222012011356 5ustar jtnjtnwsjt_9.3.r2792/WSJT_User_600.pdf0000664000175000017500000166252311037457303014263 0ustar jtnjtn%PDF-1.4 % 1009 0 obj <> endobj xref 1009 22 0000000016 00000 n 0000002164 00000 n 0000002476 00000 n 0000002636 00000 n 0000002904 00000 n 0000003446 00000 n 0000004074 00000 n 0000004303 00000 n 0000004552 00000 n 0000004630 00000 n 0000005338 00000 n 0000005505 00000 n 0000005739 00000 n 0000005983 00000 n 0000006119 00000 n 0000006425 00000 n 0000042284 00000 n 0000049833 00000 n 0000050066 00000 n 0000050270 00000 n 0000001963 00000 n 0000000755 00000 n trailer <]>> startxref 0 %%EOF 1030 0 obj<>stream xڬUYPSWsss @a,"` PnYԋ *,ĕVqnt:ӗֶ3Ӈ{s?AZZo[u+ Oӭ 5r5﬘sN0{p-7푊 %ʕU&˨ж'|q.#,eRq (*~eOo@P A]+a;xNSy``c~r|}1&dYKW7WmH߽RTZXa[`LȈ=.km殝U+W6Y}(`Sua%1!)s|I29๳Ǐ>]q:Qxt'0R]&1KRQxO/j_`Ȥtb`.LD_RE`NVwcd$\{;og|$IrIAӴg Gk-[_?@ <-@ Ɋ$x?ճ=}8;n߼uĕkW'/^8yBho J^~xy1ccQuYk23vi1[ِBg;дC)'6!&;DTi,- + ݺd[Hq0k/M"` { endstream endobj 1029 0 obj<>/Size 1009/Type/XRef>>stream x10 ðs\C=ӓIR,W9<?O endstream endobj 1010 0 obj<>/Outlines 273 0 R/Metadata 336 0 R/PieceInfo<>>>/Pages 331 0 R/PageLayout/OneColumn/OCProperties<>/StructTreeRoot 338 0 R/Type/Catalog/LastModified(D:20080716083154)/PageLabels 329 0 R>> endobj 1011 0 obj<>/PageElement<>>>/Name(HeaderFooter)/Type/OCG>> endobj 1012 0 obj<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 1013 0 obj<> endobj 1014 0 obj<> endobj 1015 0 obj<> endobj 1016 0 obj<> endobj 1017 0 obj<> endobj 1018 0 obj<>stream HUQO0~ϯT؎*:U=thh@ jb~g&)/M};?Imӽ5ʀ:N(3Q ٍ:蕗-.wq!n@,;/T哴0]R,+$u%jݮ%KV{ r fh``)>꩜&fP#^i8?c?|q;0]3`,wr`r0Cz>sƲ}I|* bi^׻' q&DM89K<G[kmJM<[Og\F_wS#y?Y p=ypx${B!ٜ@krfip(G>(hj/{Bdu`, endstream endobj 1019 0 obj<> endobj 1020 0 obj<> endobj 1021 0 obj<> endobj 1022 0 obj<> endobj 1023 0 obj<>stream HTPMO +@hd]/=[0$Ȕlv& c{#ů8YcuQ$%ܹC2K nnAnJA|~%_C] #^ՌJ[@lop J#)7!U d.A:TQ+bO,1!Q QPHHvMd+Q_RBxeo$+%p endstream endobj 1024 0 obj<>stream HVyXSWY)K ;l !, ! $M( nU , Z,"cŪdQ)be`[YY9y`@&5A>^NoP(Z K#J,ym?;V0$!Rhڝʛ h^ =uC1z(}j a1[;/%gBVsG!#LY2 :NWT @*&q)82zzߒ;ЊAZYl7ilXeyc1"@`$ș0xHXI7DxBrl|\xx`_MўD+kv\xr`Ʀ'qbh8ceP ˩-aAO0ˏ#/yEHOÂL,&$sx$Ob3H +$ym3*ׇY@XCB&vg@%vКLWE-.?Q9F D+;8+dn!"%z?^b鹞Iو# ÿuhN SĦLc滰I/6g̣TDěۮ.es)oKBn^u(iY;v_`q(?95Ou~:55)ʷMTHulkߝO+R2tΧTL^TWuoꐻ,YWk\ؒj`R\&ԑ.S3GY5]3* P+a1XLg#7 RˌGAbBY1m~q)mfn^Bc9$ ]B299" 5 .ǒϣKd h$1ƩqPb@rX1;1ʹ3/hujXn|GI!ڻG7LeuO]d4Eaka C{ RC93c~sz[YaU)Mޒ@}S~m]ukhPZi_Ŧ÷Lh|4٪J$j3-x}\vcqNUW0J}r[q]^3O/'gYE:B@ɋN.ByJA'4 O0~!&PR&\qQ$K.L@Y(:jhFޘ) B?6Tx1+@&8(/a*8,_L *#y'C:u1;Tߕ4R4Y{(E/:hV;c \//KM᧮ץkkUb:17+geją٣es/r")q]n[S_$~~$S]w=.-ʠW&o<=I|CrΫ IUv>uRj(׈3G'ou( e Ki:fGI1Ktlw~})أnwf(-LEG_^(kBs#ٶ TC"ޕGɜ}y(̂3{+o6˜ЇumuHڎG MZ E'L~ ^T E2#nc뷩?w8?_?`'a|C/.b %Ll,u`WNЃ^7Ʀ^eCcr\ګJe@T̋mUjo#gQKo_aWc8F|֫1XN/z~C-p!)0򻫃=*1>gHg:;._ڒ*JX6{VՎZGT W4b)^΃%ݥThC .Qj{P_Po?ؗ)kԈ,sYN"3q+ HB$TRܴQʖBUΌ?g=|<kzXaX } 'MS 鮐 (o}Bˆ# ;dV1 Ƨ~m8Mhv s- 8A](05T&3d1hq.guZ}OnN$z1_v&<2)V MM.٩]oLLe)ckK+oKIP-_8)\\|4WYIL?K`YTۥdV(6h&ݓ~x;.8EұM^4١[}h6E)qܸMTFqxCB+#1KT>>WρI켏'g@o*e5.*^hcAN`)(y,-apJ,$ A f?3k ]SYm""z寻*T^FZo1|Q/SyI $bˮzZw`.?Qػ}-0qVތ݌: IFv|ß-QۓF;D^:SGzN'Uh}I;jrNr[oP peuTyZVo^SV&H9؈x_KXRZaL**{_jZ\dH&[ ViBcL;pP#ZԞ̣eVWNg Ls\M<^z bwo(f %6wU ;3rLхGx'[rHrKX4 .!+t_H_IP;-4@G6Wf /3>`]B|( @hm'gU[ K[[bBF?bz68WMSe}iOPnxE>7v?[0?@D #}5hW4`RalRr(!qwTdy7>d燀Բ|Zyxܹn 恚NPrN%Q}Ú $YvIGK&{|0_<>tSvM~x棾̗$0EGTCSQ>}$ؤ/5e=?KMtS1.3T4KX3Q Ƶ;C׽gzCcSޛN$ Now=Q=QZndSܭmvhWpyݐ_o;[o5`M/΍{`~jG\p3-Y׋n |@QiٱOa`#U-M!3?3ghrڛlpJ)Mr"*{!BB8Ls+&\ُ$t ނNZoahO aTF&e!P#d#4vB N%pc K&JhSY49X` ͦYL:A0DޅBAYZHcTy e>4jx@9Mޢl< Zz \pide4q(8q)2S@w򱀬VC"hc * OR>pr0T083W8:f*Jš,g ^'dKEL`˫f#V)֛dl:x4_-d d|/n=d0H,l} L5/KcSVvoBz2<ka?Į4bVX-x l<{R^ΏT\1GPV*+^3M_l&NV8Kp.L ' Kp- kq6Sx u,X4fFb?_yv>'<> *Z:W6+;ZeҮZ^Ow FyB TLLL6@0Pet,TɗwbãTbbQOe&Vֳ }nq y(#x/sBS~H/zh+b"Ⲹ+'T9uڤ;K%˒m)b9d9»ЃraK$;I<y&Ne-FKYeCq,Xl 8sa:aM&ޤ%Y|Q$Y^֦BL>?v~"v·˳ 6 x9. o X|x8K]4+Y5\{ ^b1 A"VeC2CSCoLxcLc/J7x x?MO+OzB3Y>93 4"t38 l3=fK70HjjtD P ύVfffϚŅ.>omx4WHqiҌ?fo^ ]d5Tѹycy.+ɥffbfՑ_4)IOK=t4V9 m V㰼VmưH=0=xr"$ׇt(l}p{H`HE3"IjC+(N9%$%=yHZF1H) bM}C 5 Я(E &jɃV#}ܰۍ8E,itco?0!~~Y!-T>Ȣ K^䀩1e:LlG_{&>'tYv@ݭj y BB B ,•@!HKxR#J&B:-LI&tXQNmӪv9rsj?/^k^{a$@ぐ F$-4?꯸ye%K#os zInXW&e)WS Uˠ\k,Bɠ9?[@Q4Zjv4T_:0-;:I/E׺yfFO-˼A-(DcԬ( kuNDtY4`*O0+O3cJ6H$;=5;RYTOO GȖ~:{SJM|&Zu^sX/+i %tM*_\~3mav#j? !Pgy ez~ Ig 6:op-39"glD^L:Pu8 '=g'XU,6yFLO`>ϑql5D=µ17D>"-U XaD%H!"4 Dnn*̷ZpPdbVyu%ew\F/_#L {3pWQg]*v8?|?o(ྮ\%O,T=\]+ǶoW%&X8lh`/dH|89H&FS. 9781#⃱auЇMŬ#j?ݜƒy&cJHҖfl)U|WHk:%b3LlP9Y6K> QM>8|H)0'<^L#dHbg1ބ^3o}7cZq=lջ:w9NO$p Щk:Nߥ75:o>=Z`v gAvWA:Fk'j/^;O?]T*uL U"sJ;UXtV1n0 y֞F+Y#{|<':1)$c )qLŅ 0fWW1Q ՟o/ǴZ'#̡@%B\2sدPlaQޏ_QNdixx "'9,/y6W>>9"&AH[0 Tz ׈X,,u8Kо VǓ9>;/z|1YΒ6rZnc?AKcECݨ,dCר3PJ~!Pyʑw_pqGX# egk)?D=9ЧA_z;MN#DNf5+ϡ.SsbsCrysy>QGKrT:rd$|w ~нrgx{˝:07CcXQ(cI yM<O¾H߂=idikw+\d$&odO6$&XEV'WVPJG3 PX %iyɔ%wf2l8I%9 KA{#2O(0F=4CtdlŸ7ޝY+;Y r1)Wy\ .k4r)TȿS7 &Ѱ l"lY{$H^T |SQ_Oi[ևҸ]D݈2/8%t<1'T~~>_Ěu4\\F-ևXy2hiF-|\.JҒų>]YM2oiYtѼH)"eue̤Uu߇dӝt,cI6lXe}Q !DiÐ8-O'C|CLgi 0`i2n3'dM#r;d޾NvgZDzlj:Zc"*22U%d2%`1J.(i5AMtUDuYjQeeAxȤ d\MT4MTI@IƀE=-V 4$"KF:jՎZ.g:1[Q(ȅ3><Ÿ㮰t3.Jw,XBQ;c*ŬZOIZ\l}\_s'S6j=~ZSs?pXZ;K9]zg+^z_O-R7iOB}{a/GM(z`w-6D7]U\]!HR_2gj}mͬ7MNKlHbQ?RSh]KJXRQ?eZ_dogD*ΖYٮeĖ[]WS@}.@y{PYmO8҉ @}t[[a;-,ftF*3fY)48 pKPʩ959 md 0`HvjDUxJy^U#LC4tf0&ӷiKwnosMIn^_f'vlij6!z2uyھmXrM_x;EA=;PtZ>v{% c'rA!F]8>TMx[V\.ˣձ}!^,dL7jbr{a]k #'%xvµ D! nn}Y(bx,36ʐ8~o {Q%A"iՋe8GpMKixQ-^Hf)F ?gqі:=uA\oe8~ؾK<*ܻ+`к#qlkz 'rͩwW<``ˉ;ȩ?oa`^:CUQD}&eŒ`²XH-3QOJs ewi5y-eAn7VIRјX.GRzN>,xRj{eH$2 8o*auN-+VO[X{{k{uKiI00O1_$.`nMlefvj-36A ]6 3߾m!^(S%Rdج[98jpcziҿJUNב?.Ҍ͂{`6I6fL\{hf<,٬b0*,!ɧ`MCVEˎ6vo_Nuy-d,'H[refS,r!1x#K!Jzط0U6<ݲgM?^ڹ2mKHqrźѶ&119|`e7{9*.Ӻm4Ut#gM)osxc;$- l<-dlE桂Ǣ# PeKY|_G^bKpu4Iګ`"P@|ڸ}mB{if R\ U2B,V3zZ3I:3\Cpr'}PcufG#Rm܆ؓ椏P6`I'' taf+* a\ufXIn$D!p!Pu9N1cJ6U} 3pa|ȋXf=K12ЙCwuA'soW Lu)Vf/(c1$# [ANh <{"Oy3I̜6y&Rb+HXekwE~!s3jaanf"a;"g/qgfwo{>g89ō\a95?7/BlwF9Rrʵлğ b[Zl%.dm]W<69xY` ]冫1%8}ScP6LZHjdpx5%?`Jx5|]Kċd[ujpk5))[O>o+5wJw6V{gy#Ǯ/ӢZfj_?MdH~;|;6@4F#h y?QSq/2\}5#jEdul)[DvoL*Ay}\W0Ӝkvd0]VS3_(ĹSqX!06Y_k6|zp1bu7;= 2 1RBk! ?%SD8T=t:fT4RWPlDL DoOG8?HVV&2 II<ђP-8MA_'<X5+Uշ%bE¸a`}4D EWaQJj4ŖX, 7%6%(Ih DP/XwZ?0'XEԬ;%9)2pU@`+mY9 D\ܮ0gz[^nuՁԢ/4{66^]pM/ug~l_7 h &rAf ԟ9N KN > >A0E?0rQ[ȀSez$i9sJlLqPNg-Ue‰ra:T_a1 4gX;;(/ Tw+df(Ly {ɹd&$IAϯWpS,WR\RI( c\mk ] \tvob>w+=Nޟq(}Hc8{Kع"h4RUݔ!/# 24d $p?0QlpȪϔʕ<r?R4мN=>@ˋX`OAxD:Ub^-k4Q8IB HjgD; &w,]jQGDku8@m+E…kmm+^}2w/B#[=Uo0ݠpOgUeXzo*m6 'OЪxhmZ*UUت"ӧ:MJFjqA  r rڭ.j!Y;"cSa:USSc?2RB\oo0c+[%ᄭ:[CƎQx;t9Aytsb?;2H& ,YAGq"r&MZ`]pip}P /ႽlĉI&=1x\`YĐ>v5j$n͠h ܠEDQ ;lʙ_?uWU[]5?t7.}ZљOU{]Ǐ, HJ~bU*?2da)CQT-Z`7R1`lcX1г]tcXԓ+lr|a/C3'yN EoGێ{ޤN ÐA'drK!y8Haz8дIMC5 &V'yQ$xr EY%ر|gێumruSw_ 65>m]rd&{YI;fSc HwKu0!f#1^Z9r\9 z`NB6Z2BJG\X,&y߳j];,[+y3zfHϙϡ ,B纳(]iQ Og jq'*^a.Ň^ +'AK(N4o4,xayQD(r-\dƿFcg)U+ZQD /RZG_T+^}S<ɹhrh C߾PW,+b X1Zibf|jiQ*b.i&&rU~E+i#BXK19:)hŝc:oGssyVdPёF$pgz;2â$@fMįK ' 't&fĔQ<ދw.z%-E9÷bwvQV'-.s~kVϦI܅zU9~1 7(yk \;U4[YEF2H1`m+h6$uGu0 ۞$dl6*.%M1 FKzGus}ڽfnLyVLhg:$T|i.HhwR^ qjĪXY,R&FJ*R4)aj"B@8Űʪ)*U>C|Ȋ'؏]PQ*9B&d=(ij'5Il+ <`\ut,iw>;_&]Ա?Z]'T`mbl7;զ8#uOf>fru ahrI`5JnNdGDx"dA@`!x=8kn#g6zwUIw.s8ggi5k^ bm3EXԎ okH3…\w,WOuU|[/r.՝S9Ǩ8wdI#e 8W3s&sOV9߆tFaut1UՔє>!XwT/ѻ0YK[z$h%oZcĺˆgcшFo?ϡ0uOcD@s.ܧ_#c`"f͚7Z~sƀGc@bgZ"cْh:@׎pVJ[p4¾m/Et8xo~4r/)|D|Vx#[P+Πa#DI2,J +-% PU$DU(ز,t[H.@8QP^Qwܿ;={.wKrK$P k#x24[ jB2R1bπjhG A[4Qu[!fߟf&uqg|?GO(ɷsiSԸfLV3_5z0yS%SAƬEÿ~咰L2%jpӚUxSC*Z !-h 5>=Xdސx!C$?-:P:Dwl4k=(k/ @TFF`GZCQkLLYtvMfGڣ;Nд/;JLQvK5Apc;$3 Nʒ2'2GqBjhCXu!̰%1PGT-C뱒.zF'|1Ec(~ |-AO^w?E"ElL@ QGox0-%tޕPIޛ[t?\$A _ u;96C3CcWSsrJ7WrJ:ooYOsF=gAvZ12m~ VS@N*C ((8j b>Ɣ7( mlW&tyme^n7/Q?I/S[-V(cT;etv{hrYaRR/ʔДXSISz2ۂd{Bv~pF۪| Kʄ v`Z*eJHb)[GXLv(6HxievGDH%rbZ-@˒HbW`'^^>\m)<ZJu9\a:prߊ,N%gC hC"Azcag?1!t~G-98j@k zw ꚮSh[ƫ7>RB|Ѹbƅ0|/A@~*E _Cd>qZ0vs!慤M2EV;Q_wE ŭ>W z%)d=ScSؒ Ǐ=/{Oz?|@$Eo@Eq*"9m>Qpؐ!ɑpB&#L&T%.jO"=l66=YЙ7kAibfXn !7CS$;U;HW@Z>?*zSi^+L}Ȩ@}JĉUfSBi ,ChZI lvId~M:!|Nś~ﶔMxtԴ>y{lf*QX٪ 5Q-SŢ :\ծAnбuu'].`&8@.''M"C_o;$8" `:VNpI%_rh>Bke^`MvFq]w;,kz ~.,0PBl  j@!T*j&j(c-QR+-T**%#h%{욇={s{y 0B*OЁ1&Y$r5iքTf9&9"8a:?)NfRg_Oāj%HKEC;7-JWg|9޹0]-߼dIi+v3g;+Jk|GţEz-YoUK:~߬W_ DH5DZˏZįx,TˀDIӃA5,&8@%hWp$u`PD™2MFF"QcD2qFk ![$VA!NuKΚe[^ 9=@rd>7 DLX[AlXCS+{P<[@*Y0Z,6@O/ ND>Ȭ+X~1 /Cvȧ h)Z_-߲⋟W3v%'D4t#(4mC;Nmfud+ ZupEVhKRJFOZBqOqIq}lᶋ;~}`;:w p@> ֻeC/ n\ׯ[sF~♪ M"T :U+*c G6㞎!0TDv1 fI"ЉXM(k1 ʹB!j d Ir(g$K5-aUe",! Z=#6tUOjl˗dV.j)zp3z+k&O3n~''f1[p -<}emr`QG*mEߒZYgF((HPeg9s. eahzM$j"EPy˨7ZSԙń+2z=5PУ=>7rRND; "eIK%]>ToIz7;T[[&XIjRaQZrn Z Osh$UEp)0@]M:l) Ā$J }\JX$r qJqAUT(Ez,Ex*=ɯ3iG!AC4<<ŧGj}\%I*|L(deL(~ެ}Y}:53(V1(VEUR_OM02O+&I06g]C}wØ0ФJ$e_}\@f{_~`43~Գ jfk7Y!vK,*t{UF׈RBg KH5ų'9cB8IDYNLdr(WpГ89Z  F:/|m@\ -_$Cp.h= .(Q0q5dwz& K"c$GF*W7Yl>#Nntz>AY$?r}ͫN l=dnC@TQ Na-SXE`̎3Er+|sEGBz ;fyL ? \aLSx H'(ϸK*hM=7p:xUS\{I1t7GҤE3i-ivnjVl3O5^O'㚝t9p#x_'RԈ{%u(%.!LȖ D_&aZ^]ɴܜ\}o]>zG5;ZuM 1LcMz~HS7g:~: ?H6 a"/ׅ`c#Ezb9 neY *M&FSxv> h0LQ%Pô&j('ƅLl7!mt,RK8c#0d# Q$T!*:aRoM2D[3g޴ie͉0)w&i[ /u0553MyVrؐqD(#U~|#M[Ɨ[oX'?6K;󧳧΀֍^dXo,c\K3-H!>W>\=y3NS+'e:%˙'m 5F*2{פʁ/C2 #\{Qj>>~XΟQ&s2qC/1eYd<^Ϡ+Kl ?9 s$L1 g,Njx/^S{fOBLv=%t vuF†@m3j<?JKK;n?~ sۊ]oxQ&Ä~d_GO?S]E%/"R\[rk2vwVo=>^#RV}}>y9xYfüLvIZFBi>-JJZ]*=,]]"7 q~QA"2 IŇ&E9EuԔڪ4iTJJU T*XŽ~q8JU 9)Px/ !9>R4"%V̉׍SZi~xA ؇%}GgMIY9z1q0茛=zÛ[<Ė};~g g*6p?=}1zǰ+9N K5zFa*H g-, |îTkv`~x0pZQxų%4f*Nd0ިs%) (,3]n j}W@/A=mЅNR [KXqKi$MwHD p~dBXfmb1w 'o#;)"E1)^xOL[4AoP!}6ߖUtċME[#׈v<[W=zp/7}OE; f##{kyyuEa+dNHN&,5h.%eb6]&Gq؎ggHO$ĖhAa{5q1nqvJ,;A2kiac. Ig4:-x0ư11nˀNdq4?C)G=!Ũ9@;ivR:i Z(*Pۻ7~e^ݴ>^,*[kAsFr߀"rIdE#ZXyl3;*NТ3 >J[/׉Cޛ!h]wEۣ|E^Y**rW筞F{]-V'hgi%Qr)2Yb+)s[̷|^=ļ̳Q H+ [.R[35ښsF*mPp$o{Yr-:9o$SofItS[ɂqv_?LxP?}@4AQ2 H"P 9}|o~qp듇y|ˡᅑVLx$|ݯjg˯Iv?} {w2 wFV}@m:**.EffP}ƹ #[n^*Nk B1 7NNu0;D (zޡ."T0}h.0BQCŁcPceޚq)t(ʒsAh^XC "-+3H NG_2@ d;&%tJZR=!ugO[ޭܼD/%>o/l-hr gP+ڄvC. ( {Ǧ.  c.<خ(;;3kߝ9Q&|q{<OpySDJME]ԈRIRUc!@?H+ mph(%T䆇lchؙ{}ߋDS)&ѽ}}tM~gQ7jJQ蘲QaŞQA"C!mܽu{BƲ7D_qu3 k3w´g #o:\s@:EY=FNƢc*2eAxLY YLUj+=)2Iͦ̚bՈ6& &fJ325$m$CŜFC6ogl!eL Ԏ_]ikپ*6\{UW*k'5Hi؁ [xax̣Ξ-ݴN+_,(_þws./z+,_+>ϿWtKE3:Xe/>l6O+2Á]4h *p pJ5?l,66+ϔ+\=IW)?g=͞-vk--0 (T\u ntMK<\4Ōcj% zr:6Iw L6ږ.0@fJS%9p j pnhj(ܮsK|F`)/ GQ~,zĝooW{hmu,1崲V);GrYnGV8IX̳Ty=m,(+JceD˨U}\<H9}TG`gv TH&TEv4Bϋ%3Sﭔ,!^ķZ)`J!44S#59#'` ({rl(["H_ΖT&HЮФ0"ib(j?'m_XqsgW;{ kSGLbs: PgV)FvY7Ffr<,^򵉮VsG-R5V[mv{tۗ8t9_ql 4ID4m3h=η_ *22)yK* b9cà 0po33z{}X%fHZ$\& q%D!ΡTcjLKLIv(#bA"WRSt7|EOZ+E:c dh' uk6^ܶlw6?Thc…?y;?Q7|GщSN`Br 0223˔1Qjl8[X뎱L0fc wQp|ywYlG~.p_ɓtVa͓g[K6SsJZU#*-3U/Q.ꭖR#/[ᣱ C|>HFgXH"bT ,:8f c%2T_<6댿7;{;;3X͎c{c L  `Sr Bb%@*"r6)ѢH j JPjjQz7|P|%ٮRSĒ=FFIuU lI2 8VhIU?qnߛŞ5Gm>ɳ>4%3pV=xݹ? }k3{Js b E \q^"PJ|AG^>*V  $\0I5&́0'6)0˰ywR7rHfnoO?e\̄se%(r*;8r*+\eMkT3SDo]e𱛰kYn–vl>}1P;].t|ֱ o0X)TVLQD" 7 ,Vy8`.gcgGJ+;zĎ+8s>-TI-W8®ȳd?/)OQ~l|Plotq EJz\ev`k 9n90hߔm cRa (vm\"zE4havRql/9mf z*'7@UR f ԃGN1DrJ KR2IN1*;b ULg9:wvڅ& 6KPd넦Aq-@YUB3O/֔w9XJ㨶;]v~5~uNF jkݞvYұ9YQ9}+66WgLf Uv6FXQAa8 J`>J]<++"t@9W(ȚaR"k|?0K)zIA4~ iVRYEcdR~G@ G27̶:Nb4If@b~v'N\{~ V6EQn{ܐ)VAÅ{F3Tp8 5ى(*w)`q2`q;'7'>q e5¬IL@ht<*F4O#'WM"2qA ew%9_MMl=gk&8||*`DD-|C̆ښ&^,рg1ŞbߗA{g38WM7G`⥯Z]@<:>&s=Z*c"k?޹1`l5vI(aP>,lOጯ\RUS@9X$tasЦDV/VOxХvmh+*lWt/z^R/ߡ:HϡS1z]ї[zݡ:442#5 ZpLN}ث#&+#ECY.g\βOIҼP!1*&4DEAadQUABa^ZBu]Ʊ/ D. .NxouHFF;`j8eFw@sv^  hE+jpc0lMo6bDZNWGoό=-fFwoشYa4tt +KqLr9Q{ $*DF\+}q~Я/ZYd4PCX@6|J3 RѠ(34_ү:CXLL`ũTX`2#wz&@ vHuMA2=U*Frئ$"Q_5u 5V/&e:?*"uwnX` ,1R֪o-ly\ kևBVE-~v*^&[w令+'_͉Q@4*jZ kikn3C)t_{5e521Kh3^6AEEVRaN.k;c}H"JU(T7 %dfy]Og4I ꪍ8>|;حmK%- A`G&HG 4.JA6"4?̇"AB@J *)JZKer6pywf>3d:Wk۝*83P"ig˲$Ա3M-k`^_MХnQOtEDh_iVbr \{m% q5Ǔ,1YVSrEy& riL+cGi=M?@O;@K}m((:olnjG/!ȴLg;p@J뵱wbЋ:VjuTϟx̠񇏏"t(M xbIGlL:%.%+V0@OIBsKǏk 5ݞǎzy ttQi֡Xr2UD*H8rV HO[doޖwb''œ'La~%j$& ?:{aC].(j[W?*[U{,47X\L1P*‹L@M\IVE%10fX jhn"Lΐ3 8cQ q'DmctU*[&*ݾ/[EAOfZU`W,VX׭kEӄ>c䀥p\}f|q ^)}o F$]+]5t}dhvTEtDW+ +ƆFwc 'vMwun2e#j7@/VEF@⼛$.e#;=7<Z|qME5l5-t0<<Г9xu(GC ^F`rshqsv0.£.ɊLS& LEVŏ6dqݤN'$T@46G* d ְ09aC5:FKU Q HKpqW&pTBoB~_-.k]8uDApɘ`޺A }^B/;8[ I0.|\0,eVI0v?3w_'ћ_I_9 ^.:t¡RCH{#8[vKWɫ\)wTu,t5 z 9ͯs-R$HpsШdr B+C@H "-yxy-:gCRPByNjjD]y OkncQg86uvl"%> ??@|˥ K^.9tҡ}Ozϡ;}Mz͡k}A~r{)kq?t86J@Jr&W{\ R!GZ LjC5h1&'Ǩ84> 8Ny!JT3}zs_vQQGv-J釃ֶtA ZVB)zmnw&&<HLBdj0 ۵i#>̙s9gfvvl\knAmSҚð'KVꎢsNd^qdɕ,WH@Oز)#^N`du+|ھ/NaEoX> 8^7Wh25!_)k\R_z/2?Ɓl/yȥ] 'HPyu?Ev)P| (IgxXz(\,PIjsVֿ 4'̣hsZ v8_ *su3'^?: u @ 37(cTkn[g#"<[]Mpld9`ZɂM,ki+3Vez059ks Eŏm,wUTVUoݼ屺hB]mO~us]7d+m?lG}!;(2㱷Ï ׭Ǡ.E@3{1Z-S-5awQj򿜩"@'߄1S6 u|*QnHպ#l}3T}I cLi=V- a(W޳*WUyk61k3tnȴ)U>R?:~E\AEJhF1Y E#b$-*/cTM&:QM,gUո)q%6VOYc,$zzs^cr@cC"\2SBqU)]+H  %W??^uдEGM>,}Qv:&Ym:yfpZNK筙]Ծץ\Ij{\ۛ2  endstream endobj 1025 0 obj<>stream HW TSg~YD&hǡ $f !s $D1 4yQZ+KqBVqZjݪ`u9g̙޻ A! ILbZ&Bq 9eӛ (zkF;Ǒk}CPεy&C<Ìm2 bhm o1 AAmQ-v!JG_!e5p0Yz݁x`3Xq: MN1hA0zozS^KpZ>'ÍY\LC09qlkՠhðR$V#FD 1􍂗}4̿^.iP]l#)T6Xpײ#kU4o?F=_pe!OѷL6O0X; -k:g>INڝӥCP?x=f3I"4o"ߒ@K– 0@cS(4R4La@P(3tdi ^^63f*FPxMb4"Re9sd!$yH,)U9C۞y,2tEݻ^cP۟;-?Y4?Ƭ,rڌozg= iȚR} ?s\ș-ߎ ܦ_5;`i\iug=ħc0Y0_I vg]g6Z^9lxS|GV}K/{BjQyxgNE]Ω1xPqd=V4Wv eX|?o#9Ƥ#VV.xO`C]ݡЕ59*p_o@4ڝ[znwFNNe5H0 n0jܶ*|8,i56̘tqIǷ?nn{\k9~*G.iթmMy$KZx[ɺ%W?lsIijzv3_IhԮUT#4,wb>~1t<{Ï.^]}ma:ɣc=jvt,[̺~4RN?h9N88u͕?&nM-ڄn.m-i]xy4Q ;g)blQw-`2}rmsvaaij2f„6ʩ>B//2BaZq0X֞C87ZҌ;Ih4J/R#"e1I4M3J(,,@CJLvk8v΢pE^tHhkI.h4Ϗ,%( IH i'!~z6P "|ԃ Zwo4ң6wnռмVɛں˧`oWwj`?9nb{(:"kӃsW5])sG<~YvorY|t& n||`94[S&l*+U|CmnJRnnj_ޕyDiuwXËnyKxgbN/7ˑo,;?gz]wܙ?/ܚ2I3y2;,dyִ`!otq..ι%`3Qӯl6ɩE*h.+EgWǼ㶸B!8FUL 3T_~_vYLRFBxl. sQ;zGAP=6tdlx(.־2Qg&H`C ނ 'q9p0زA 00Q"o(@E2^%i0QtC­#!Ih@^8Rln N,uYw~qb܇f8g竆0{|8nҕ&"kR_-2OKr6-lK? 3&UVŰdM+mV7EP{V mW黾LYvrΧ-9%V5ݎY:ȋ8t9vܵS_/Vd>٨Wt43L4dWɝӅjURxbp^vCٺ'O1޺TK੮;-9]'A©EM.Fv[gǃB{j|qjݐ 'Nr)&/0m+,wmr6#AFH_79=7V4U|!VsL|q3jtybPsH|u̦8*M<23E۞<$ ,c¨k^/d5MIsC4/Z |kSs~Y}<~=iO}[6'."~6-=E2'H%BGBoԹIN_ v7{8 ❷=]_eM+#ͥKX60Nqg+ >q8"A,0ΙU  `0D 0hMn'x9s9O`1vi pF[.~.XQ!Nmޙ&P j>%I{,V ?PBf(q"`D31]x刺Zψ@H8=txy6(NI-4\7PRn<o5d&DQ%pRr Рuy(^9JY ܂(-bQFơQl2ߓhHvc&gIyB'S{:MW$Z@+h%/h `#Vyv5qT\ m*ov ぷ@U:/]8VtMbx V;J4Z+QҐuh;Fj[W ݂fx/=>S2OYe!)d #Es%B9Cn"J" t MtAw =13/6%,mgOnVªVQn%pkn/w;5r7y9TU)Eb,1L(%RAAsP Usd>#c@PCzh =0h{*JpӒ(ṕ>(?%~K?ge%-Gw?(~z#&f gt6FzTT¦FJ#ئ+~{8_I&{<8&$|KC/͎m Q21FVQ:S"W&Pץv`rP_H4 UfZKℤC^{=wOó5GK"[s:%+ʤs J-gjEb ;no.|k Z_϶5; ya"Dž I˯l/0=_vMCѧS.,+rnŲp'_ r}Ct0.cZP\ƆIU[q8VܔGV;3!^BƦI2JCCjIYnuN ivzc.4 ^.6t(6+\ԉn_1ʸ%|*{CLuH a)-5hG-з|{"1?@smkE 0FKgPa:ڄC=mPM%Ћt*;D'p‡Њ`wTw8/ſcH"CiD?Q}Qn~/6_@i핈&g8'lA߂t!̵ #mq'p!,7@pg DfDlC/Ă|꤇_^v8j7x( c3lfdGmM%"^5? ~7GX^!t?׊hAtnN̈bWf݊@6@!} y6b]C+^Go5U<1(>пkAgaޖq//SАAї\Jqpt|h_2.md-8v縭20]SdsTksj\vTffkFʬ_Txv\eU((jmRR暔2_2=Rf*e|R#e6KMerleYA}WFD[8ֲo즭XN_J}YB&uRx꼋3@H%W:Ć0_T&P[ bCOt9lֶsD={O&؏/5Ĵ f ^ TNɵЍТ81%Q@&Sc&G m4BZDɆ<|CZ$ gChd: EdD^2\+f 92̆g{'q{YIqE $Эck\*RnDnUMPwq ~ו" 7 3OjI/,j;s=G0,wnnu_LBhJ<,j/z- t MTj`{*Ӡ g 8Z -ʝΛkI̗ʼnXRڢl)DY$MvZZ5S%ȑΒ'|Ip~HXXRKr'/e/o13" buIM?+Dmw]ۛܝ+ͽse -95 i* ߹5u:AwRZ5k8A阃A6m KFEdE>K=E a/7Hݻ;wܳ;g0]?elJcӹJ'R a3&xiOр9 zr<T8 FwaeK ~eCvNkl!Ǯ (YN' a V_1xBMK3l^R]OPvQA v]„ou[[̎c':yܴÓu4O( rⰺT72MLLՕ2]/RcYk&f d%è:6ycn~'/=Z?xNL6Vx+?.wBϠ|^-ӁU lF|W-@3y``j[!7 lfdb\4iXhʹD!-ghVoD!_KFGdiFct0qAhhDdQ1/fʼnHP$4)NR8gbP,0 Ǚ2t28 >r5@>{Pd$oC>3w:0+ĹT/J; ԡ!Ř$PУ/#' ~CC0 ^S)ӫĺw? k"RL6֙k}ӏKS,M?zR|TY`O endstream endobj 1026 0 obj<> endobj 1027 0 obj<>/DW 1000/Type/Font>> endobj 1028 0 obj<> endobj 1 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 2 0 obj[179 0 R 182 0 R 180 0 R 157 0 R 158 0 R 159 0 R 154 0 R 181 0 R 119 0 R 105 0 R 193 0 R 191 0 R 173 0 R 172 0 R 171 0 R 142 0 R 183 0 R 201 0 R 176 0 R 175 0 R 189 0 R 126 0 R 138 0 R 151 0 R 190 0 R 152 0 R 153 0 R 134 0 R 135 0 R 150 0 R 162 0 R 164 0 R 163 0 R 160 0 R 161 0 R 139 0 R 140 0 R 141 0 R 165 0 R 156 0 R 155 0 R 147 0 R 167 0 R 149 0 R 127 0 R 177 0 R 178 0 R 192 0 R] endobj 3 0 obj<>stream Hė]o6 ?RLRDEYbRYEЯe@?6(ɡu9=/%zxKa&Mw nb}Y/\Ĉ *_X~!>Q X}x8rb - !bO7ޤ{1~ݺQ*"Z$jQ!@Y(Ty> IHfhm!!^ۆƕ^HA-e*,]Wg l٤;vf\/qvb\|MG>XuSKfQ0 ~+ p'^$t2ތ%em rm .LT9&~I,v᫢zJ@' zy!﹞hE|ϼShpVzF<-ѹMAc0)$lRq%E^$Q4"=O@X*1$xn4KO&}5bX湣X66<&W~W;aÎ%9ScFUcqE.+Hfs%{G}<[x5;*h)RS y(Q=7LgQQjmI& u(?>5=|7TP\̆Vm4dmJܷsq. )U䎦"/RC="9v:VvԪЗf7ݫЀcr4ZY$耙٤Q#j/s6MZ'vt (ZϠH 1=bsw]C|P{Ylq O/rv<Hg0&zgcY^\oEz9:B8!gUV))G4vVy=G#T".@j..:FrAOc_WW{#a'GFd(1ZhԦsJg8F[0GQ ^{2/9lRd ќڂoԞg}ds|sG AH!ya[u'aƔl0]eGTzS@ D}{N-ݼkt\o>}|^ߟޠuyh| 6rHr-O4"ApBzg#ֳKcpRWO endstream endobj 4 0 obj<>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 5 0 obj[202 0 R 215 0 R 212 0 R 213 0 R] endobj 6 0 obj<>stream HW]o:} XH}X46Fkw@X(2E]>JQ3sfΙg|uɛ7.&Jb2s b3o66del"xcs $ԷlvKY'*)Ebj3Z6ZGS^N3}9<1#]EZ~`S}fC✄$P\L^}Sf4=d'$ $z=Oo}H((.˳;g^ Ԗ75#@ AMH0VBh `ȳ=qwd>{ig9֘ҟ{iSg=^]gD~ioHT\dz}Z>u}4k쫫jvSp`L4?yȭx̳ r>F(UĒ`2xqai.`VZ}&TX/E<~e_S5)5OPwzYE|)ȭ,%{8qŘma&AԸ,TS DGRbm۷Pe6݊#hqZ<bFr5LȗU̼dȘ/P?9{~g8;\vaiEӂ; S#>ϷQ-u>E`9`%XAFdHAXOe=9ߒ<Im䝡 LY;V'!u]fϢ)PߊJbeB?2fX^w\Xyzf M%LncA~݅|Hr\B,ZAKأx5L7)?[i;󻽊]Pw9 K-4z%, rH0Ixިk$ri-gͯd O^D4?i@V @~.w֥F{ YlQ"H/q֟yZM£;\6>2ș{(frU7ڈ^:0֊gzKۆG5=q3".} JcCkDy R%퉯C -mR٫<۟8*h}q]\±8*d׋كj'U 2W"|K.-'M{w{.h{ŷ<+*|I u>?Nx>|6`W5ҫMKTYoԝ'{YRYGq>A}w8Kxm%.agဵzN"] Yu /ܮ ' %zd Kdqx2 y½#t: "Q=uZQz嫻R<@B~w1-qa./3`8z5T'1a? &tqHC*(̫3&gOeʵl`; a/[&xR:ю(>y;u7.[@+W24uI8yx4x ;j969\WKD-{4B+];,(ˮkڨtd"WtqWq{:vnI(r%{+; 5`M9G2m3O0H mbeUi:V-`SG2yPv1 /Z63lJ~!ʺBctʶ`ԫ 3@ %Ff15#\?7=:kA+%1V{=8GWs 2U_ЂnvJt0sC`摌&C-Y֡@~!ʝ$G>|dp \wn:9vиu6@IUF`P$3JǝnJdEW"#qd ܺDjO))u=xI y4̍u~Vfhds bX5:9uU= R240eiwD*!kC/# %g x^v'?[r0D.E(Uy 0W endstream endobj 7 0 obj<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/Properties<>/ExtGState<>>>/Type/Page>> endobj 8 0 obj<>stream H]k0+e۱eA)4I7݅\i=K ;rbo :z'Ip-8<3%G6 , !5 xOzԢ',Zg>%H$c^1=JƢPJ8lǒMfM!紂|P2++X凢g,mwP}+bߙ}Jm ru1(JITs4{sX)eG,w0Q@F/jPh(ǥR2<.e^J9}(SBGܿQlkABmH jXO_I>H$L78KENtƶh CDCKH0T}uo+=zRʓ2Րݡ)wYDb dV7MM~Qn칬OHf'GRڅ%$ZБ**P8ȡcOӴ^b"Ee}>stream H{PTho'35*SP*BYVgYdy ,!, TƑIL2hXg2M4jMdI,S` ֽ Ξ^0s7|sƶ١l6 !N$<78?OpM mSl}t[NNf >j+x6б3H[d3ob"ȺPL7JԢd=9P%QI#$)2 "Z{.Gti1L(YFm]yj̲z_-(&&丐ʬ2Pf9'V8V󃀲0GzUSS܇aqa>9IP( e[ ]kb`H:wJZl6X~djs- {^8G*@b8 IG*H Byq˿O*dre+n JDqLI8J0c jV;9JA,qga> BPLF/&f0(Qz0q:`pBL7FI;PІob \Cϣ5ç@18^н(B26jA:F B)A>#*1;hiAAߺE6'zqP#L{P( QYw{6WZyA]^ݕuTzAv}} hBϸ֥;]q~IP(JBu)C1cnO~J7*w1v3c0kokE]쮖Zڙ)"S#`wHqO('WzC6c65@bb|^_lǖ'_98>oXXM|Qx`7) eFkP~dl6ۮ?9˗pY \[\J|aeJ&YgYMwhfȺ([ }gi1חj LƽYtCyUi>mzNqײ*vcP`J<9\;3E@,z̾?ojޣ#*SN~*\oܓf(SJ=ѺHmny@K׹O" zD!-( ׇ N2*^)El/X^S( 2-@ YsEcdA.J*Jfn& TY-io|:#E"zCI(GO5.25fawX/SJtm&mj&)+޿%һib\d] ~Ekы,/2>=q==BP~"ʏG8y aʘb&кl]o˳k_,z"5q {s3*~gN)Ӧjj! 8֭>_p!g/k(D߁b<=9;i1pke](,9އLnG@x+wl(3x:v_7魚BQ' FV'7O:~A.v/c7Nouu'Yüc9CE/.2"\|MӁ\aڔ `yuWG~UJ`CwC}mFU>关< >:|σC!~W7x~薚!2K_zmpW|a_nݧ…j BLj +g`Ag'~}UR&YW`eRͬbO;]|gCE/.2"z]fq,o4% i`MºQo]ywEJ/<. }U3De_wv(8[N`a_u,L ? '#?:#`;N|U;vUIQ@P(!N#Z.ZɆfCK"ƿ:ag3KlfҲ*CD,zt'(gE$7T*d V0&)pjRԳKF?Cjs!z;dܩlQ@Iт[_Dq<$Rnr8su-sSܱ߂On$IʳVoxU?GHnS~X ) 2=UU^*sC ZņW0_2+ev̱x<#j"НjlsūLaإЫ=16jv2Mti6Gx^ xfT wp%{ȄiQO|\u=(2~8k~{PS/`  %*,"*D 1!Ǣk;?ڙv:m;8v wvmUu ! .!ɽiBr|srsNϽWiS S3_cV/ep $*V oo,J|9冯: FQon -lMwP5\xJ%<ܓSBpa*}*VfU]A[FyPbW.0>ZV~1}f,QQΔWIdP7ZoyY*Y,]S&Jy A.(ԁ\>_Ӵ>euSUYCh#͝@<)_B-2J0ٚa绠٭™`8#aexAȻ /im7\?<X ݯ[`0o%긣T/t҇s8Bj(jWI{TPeG#tiDz5Do>ZC $%P/N?E^؟*H"K/_$A =z{Gy\\BB$D~y;%mCѧ덍OQVb$MM+ARp2{w[ 9Q;j0aJpkLg%˘V8 gd;sQQ7·mb_dy fPap,TGQ`T"88SGmPAG(Cw-;@WҮkeIћB8$UI$"9vX)Iădy LaBT rtKpNPFC5zӢ' A { ;5, <og>4&:WJgͰƐ^儾rϙcc .L zt k69NH҇ ~{\h ݃%pzÚcKS}jijڥS/Q,lDz5;FEQuThև@q>U qW/CƓe S/*kz]ќaKDHt_>)>"<:E%p=`AZBy0[cz-'aP? G΍BS4 Rh o\8nkjȼ'?/WZ3^jAO3Vۤ\tjT;<Վmd6`0Ggj}:F{XcZGiCZZ폫NeCzI6 Lȶ(A~ @ V BS^!,(D~SDF:< YRDθ>Y'89X&q[r/'(㛤UTX^`ֳ/:?gZ\H;2q(>*L=T%tmx1J>hay3;3o >_L~Gc?7M戕:r fN r0 8Z]3UEMZӢ=]qHZ폪Zn5+Mn8)^!D&:ڝߓ \in@/J{ l߾PO_>(~u=k>b-ۆOd`D))%t׫˶rV#} X4D)oeV7Sat4cb 0Q̼zޓܝ7na`0yy, _W7V4T5k4ԪW-ͭݪhr"N&א^$ ݳe8R_/De`2'PJ՛Mp椈\"Z_B!UHQ}H7Eɣ']v&^(b3% `0 Mc1a#{݃ז(ו*Jʆ+|yWq+TnejNڡPm9H%Ħ+0vNBsǠ8Vg}KZݕVN N NJ \v7Y GANjrB'z f#3G/-#&!\Ѐjd4b~ `0>.Ύ..NWvwxEvr'x$d."'t̒3E)U_֋~!D8^60~'-hhE#\ڷp7-/Y($͉bDo]0 j9jXz>kjW`0`ISv!NW\&y#uui>mxMXU "7J;?i~yg8}|:p5g99֯q ?z_z/޳:8{R{)ыg6JDeS鞡tdt:?0 fNaj_%Q0v!Xy4;LdDtG7y>gY>X" 'cUEII0Z")R=r2q* LG#Z2a:4A[j }j⓯>4Ę@ MӴKdfzzn9h럕oua_{iѿ.8$=K j?]<t:2e#wl?l"޵faվ~[&{%T<5/ڎW/^KB" D bPP{ɻJ.XӎYʿ홥-Ew9=d/W5}ύ6 j7\ j+- j?1/hk>ڧ@ η-E @ :1@ `Ġ@>F @ :1@ `Ġ@>F>2۬\mOaB;S Ƚc&ЭN Վ_6'Ƽ{ ܖ-Ti[heK֢%Bc3ienϢnasE(8UmP6 rO*o_Rh=+Pjj7%мyſ X9k7V3 ?Wچƺ}j"vE?z+SIWbIn7f{6ہ@ 0A_q7F`O [khW Ƥ)ӰKWcX-SU oRhEo mm+ --SR]6 o@h5&u+pI (bd}R.) b&юAW4Tsͯ ȭC=j\jaEc{$3Z5v^񒕊Zbc:T[Ѯ 'NޮBYibt+qRF EWTNQ@c. A0#z`S vObBDn&>@EĠ@>F @ :1@ `Ġ@>%@ `fff? HP =ҾrC=N_7]^sS?ǡ=g͞Y{m:cvOk̦Mlذ^g?6-U'ﴄۭf+l}{оӾמhk׎kC _S]mA=4:lCv6;fm ;g7Nخ)[3)}6usl}ZوZWv[Fln8.Γw^r{\Ip0mupuD'av{HA>jvN=yr~EG$I_'O-IqG!&?A__m3CPP%Rz%K^-'.@JAOeYM RX%ht9R2uWm[Lƥ p-&Hs]K+ +ҶSiO^v[z\ }4[}u L!ɦ?M[tmX7&菬lns G\ƻD́ !/e =i;gzmTc(,hL=afW|vŠniEt$r$v9]ڨ:uOX4*ӏx %5@ > +^R ]Džu^:l}V*FSeږJDLFI^a t)D(m/Ii>g?,($!ؓw>fn,!%}U&l-"z3W遌E!OTʎhKtVb28]y­XY6;)$-R!ݦ_ ^& E gSЭ 6A4tuTX)1dJr}BL=J J[VnA&qWzvL<_>|EP^[enZo|SOM6aæ3',.L_LwժV˩RF]}F^HMfWb0B(f-Uܯضy89 eWM1!a9=AW=Zco't~jlS]ٽۑ>:;7 Cߘ/LԸ'jW +LS.})y%M-鬽߉xtg_"RՕ/хũ+?؞6#bK1MuTfvjzƨA֡RBpgP 6왳u tt_~uu1,DÂ) #c!!9M͉ɤ*Hg{L\(*k(#Ӯ[k;˜W®/ތ!WBBv8' "zQJop8{<ϷaZ!Df d>)i[R0y$^.@ ;DK)W\<˪j0JDvi1ʄb%sPZȒCڊe쯜N2M?2|.$1B.,0:IOY^'TR18]ܡ* HUrrK I/lkof7^oHUU3 J d]F $S1k5AG(M}.-X*M J'hRGȀ (ieMas _djğOl/H0* 7,0I5p48 @(&=(5 vqOc*㖑?wMz=؟»'WUD:\;Y ޽>H{@ 5W>9{.(~Z; *IGzn![ (A2U i앢` _uIP/\my>4=1;tPa3   fC]qܪ#6=>]٢CShcj=AR1'xU1DĆe\tyjdo>b%E|؊\=jY5+Ƴ ,ihq";a'sP fTdŨZA0声r|H(ݪ6$2lj#V)}bo"MS *e @uEQEq e:B̶$Ȅ3P:ɲ )rBo2Lݣ[GD{(}=¿AzN_WtvƍD_6,Kgyd<~f?~3e-LL}ȅo9P k?2KShci>ұ#Έg MWM-[3q#%hMCPaT'^\ew5;=tжt_IsgXuĸ`h1,eq֟mp^B5yHT ۵,DJ3NU2X@U LzJĔaM ^/9*` Dzs'P Z9W4sUw;XoOBqrTӏ'Ja+G1GɏohbyDŽo5ojȜp_sbswr+Sߒ<%芛⣒"B,/Ҕc[#Z3jv295ZKi{!>*-֛YNV_FWs)n+ZmMY"3fŖ5^LBFTbdGZj'tԲ! ʠ7#Kͫ*bBGmH.&ɍR5fMѼDZ7sUO,23CcC"[%vwDr.*)j[K #,XF)ܷQ!UdC`-nCfU0 jRJ~W̉{M¼Hk:\?5Ap=(\sػ+GW~:%}>/Kbn==ӹN8xůKMJ7E*f4T4e)=f0G@oe(QRz3rL_ %F5<r_0# 6$K:g@"4ĩ1>ہ 1Wjv~sYhR6$/ #ay1+aJZVI M;Gl U1#s<P<;^$|tQt]E8 fY OpL"8o cZhk)d`}jB>s't=A6ʈ*g\\zZzw+캈 d@~._J:@+ p>Ǐŷ>kj}4%7"}0s%gr=O&Ah Hfet;NHSOIKnP!,Ѫ^c"ӪGDDW䡪"UT&܄G<qUJrAyr|IUm6!מDl˿쟂R>'Ag͞M)!'94r:ZH2[2甪>Of ƨJ-Dl(*.|~Zyvw&"?"MV)u;)Ś\yM%W2"!2Rn3OxO^4J/ 7PfV5.RFm'yz=s3}ҐFI U YYհg4"itU`dS__<-(*'Y !-m(V2);C@@+R 3&%)tG<)hd2*ah8-T'ԲJ"=xA.xNr ƋzrE5uP*BM]$]g م1 .ubB9ɞAY E!.WAq05fQ4*Tڦ+k5 =:}KݓN> Z؀ h!O޸r|3ij>@o%{TIOP pj(}3#0QH}34@ kAKPdS`"5 b쏑V[Ih=m%a#lNyPƿ T=n3r-hBA`-6PFn= Κ#%C,Zx0Ecld4`MƁ ^,z崐/h ~;V`Q]?IiX/r˻Ǵ$I璵#r$"-(_@HP1[]SzZX1m$k 6:_<\f!󵫁UQ*K4rk19#do^c;j*R-5s|ʈMbR) kf* ) evx%Q{}}~,ƧhHZՅ&)Nb۔W "b5&Q/m%Tj\ITLU̲%dRBQwU )[u.,ϐdS*[{Jb9 (4$Na~y>ąHrp`@ (J*{R&uԥ'8Q{)k`=1wJ̉~wBhϻte( 6gks&ED #P0*a$1󴫝5dOw{r)SXf~O;oMz]I 3{(7Hbi }(:^]m?5 *&CF+Lł<=#mtתT f X'Pj#땐=qhh@9)W, y[| J}B0~Tg鼞gC$GLHI S'EhC X}q={ Ժ,fل{v,8p! .e/YtS:¨ 0qЉ["%cY>VWx ,~,YT4 t>s :\jEƇ$YBTlJbUw٤EyQUr~#sH=V YR?6aEB̪9' yϷ/_~%=?߯|ziO1I![ zJ.xWĺ`/|˖i-p p: *9#ȱwGQ寐_pkPj`%K5I'YVYmq {*2sU= hP1fA^[X8rZG/x'„(d*j\EY֐D#%{~R ~7SL=Q^>jV[K7-_+P9eƯŜwGoώ,L׮OV\?],t虻gػflKsD M'.mKT scY 6c߶j&Mf͠^я6Q_јh?F,^<| !qjF;ZtIγN0f^ `d/Zrh [[ӵ5#qrc A[(#𦠴bFOĄXB4;ܝGCX(myӿVx)խze#;P7<jk,gG'g31A؏, e2{N]U+ -D9Yo$*t9*fck`iOϖ/}cn B_Wku(bW*5F`$V 'q>K=ܧvlsJfk`ϴy ZaCJk= ђveF|hU(WCA.J#o*~H6cL h>*[2is>pv`-bd') b5F-D{")ǥ9oZzo ~LcUsnÇD6@'dzv>|J89zh AD陀E>SS@pS1[itdۑ ;Ptm2sJ=R'eP#m9 ScMRXCȚɈaX HO vLd$$5&p33ږ*}kfؓnW4 QzP)$DQ׭]H(P ծ5r>:ȧF_!8D?`Xxe"b\PE5rF@`Wfg kRYԃ%DWtǭ&y] Brzh>SuMlAWd 9 Ki1^>|;Z]H$*jl +B=%wwkgg?\*AEx'oqI5BOؒo᫧IqbP`'yyZ&otdK'~$t030YXBnpTm+!6$B\Y9Tbg4^^z >`w񑪵;IR6t`^$`qhq=^߮$ScpF1Cn{RYՉ5] 5:B _ Ef:5?ām Ri>s+P?TAjJnHPpc7em\O1DG%z9*)'kRT޹);PY/| o><19 ˳eu_#ѭJ7b5Lp: 8^nF+vw4lOgJoG-6= $enkii=۪gJ% ŞT2!DrnU'-a'gjT|XMU zb+?8 E~)h|cr|cr1Zedr_hA0IT?T!tp=ptI1KB_A׵^h'dG1P: h*b>[aCIpd)8 5: a?~ ҰGܞ9`6c25;Cg£9sT/Q߆؍ } >ߙ^ (W|T3_}oq Eb85Ca6g5b(u<@J3"5[6]>=[9_hώii䝤 Qjb.!E`GrZb_nYF7|;¼zM+6dLbngC.,3%"eIYEm~iU+_<jc{3Wg qOzDه'm޳'_mwDwX]WT6`@nÇA_(@iv`/߻W-nq+JT&L Fgly4 j[EB4!nrtI.;Vt+ ATH) ,I@}Y9qp.`mmO؁Oh0Y,.=fLfk* m| -.J4`y/wcs!UvD]H{RtU]^QaL "HU5 dm*S%[-vyʄt>t^!RmB_Χk2|aEpvg9 ؏ITӷ }9":I XC45Gjb=+Ur;$kŁ1CقXMZQg&H+%T!9n9Ԍa{8V  qhht,k9c*JbKj#xw9ԓT]yX#\䐈'|N9 ;[I<-'_I#$nU`@͵H␳C0%/ٛ6UM[! ,}A5`$* ZN4> 23߰;0najR^k-^6I%#,*z{\V, ,5ia\\v!18QPYqSLp{}٘4,rSADVEI\8R> `CmȡԡcRmR[as)JˣW|+[ O\Tz@r%;߯ZV`m*g C 9J|s["օw^*( _$s # Ɂyu1<`NwKSlN;[q$Y/Utc&KLM+ϋLj0`7n?<8je+S(Zy E C״xA; >|K8]`V#n1-|41aƾ[;_Ll?!䲄mO^h,~P0'2p4Ab9Ripx>Ή;0 Hfi:-]8Ja(/K^.n,ᬋi|oRU&kzcE&n4w^ӑR<k0132\cbWRƟ1$鉵&B8ALD[D]1KdEY[Ϡ(DasߩǙ+aϒ&9]EU__T+8N>e(un4zdIϔ^*xfh-VYp41@4TzpG%lBpd^Ͱaʉfȡgda^Ԁ/ퟘ@T o7^iڤmEW EiHiާhAFR*:fQ&KgvUSFp<YBwm4=>_ lmC7/r&puቝ^T߇R"[J܍0~$>1uu/%zZaK e?_-ݍ ^>}ɷ˅BQ_.xw{t~{Jwrte xZ6GCP;z@aVve 1E&rڞA9Fk8 .I  PpL[%D޶6)K%( ]3vsBMäV=ƠB*C'{&H% H``IlHLpHBb$3}t0Hxt!<^'-cH$ymj+L%b& Jp#"t… 7.Ģ"TAW!?_޻s= $n:Sp>հIL¶e3V^>^D @8aPN!c@)y5#g'\s+B!y<ȅ/8 cpSW ΆqвD- .q2JٞJ2CUk ޻-9n N'dxj&*jV\4v۔rS(L(}K0>ڢa!'*6nRۺy0ӵTd6q|v]f8vo>J롥_[ +BGPQc|fك}Wt&??[m75\4 ʌBLT_. ڪY^DT聝Q=7`ϤWa$K+KUxŔ.bl GS-LtbzrfU] pm.;ơC}ñB7KL]'"`>VBAIq.r 1Omٿ#]3E^\6- w%_8qs¼ME;tn< v#L?A"E_{fC1ESCp4p aDDD%8F۽ޅ f1)apH33Hۈl7X$A{/8$  *^P` Y-H9qbCQc(cfL8!#cr)R!6ܮs!E%iq&Ji^ScMEqع앛[6{& N.hie-*!9 i1XHY;gˑբ3YsJ@bKӯUtB3"Dۊ+B!cl!v>d2CizQɲOyUdY Z^5ʩ$SkIL -j,u)ƕ{4gnxϾlwz$Z~j! CeMU!ðFsdfAdŶ)V !;5<"D>jq<~X!W^k%'"o쇗 D/>Fῴ!YO8\_~~y@0l.Z 3!VL*XqJpjKV4ԱmbM72/} ɌQNqXY,*|IQmO| ;տlܼ|'dYFƝlO[u/quf*|PH˳Y!!%m%g476 Op e|@a$b̙O Y5 #%L\œB;=B~Q|7 97 IS~??E}&N 7\[}5vC04gCp&MR<$j]LDYf⪂3h!SxX[U73zl/hp1qY%^I{5Y<;O>M$qρ'CE&r%<_ pq꩖ѴXXȭZ+%Ŝr#^VT2i'v~ljYGD0=D f J f͊h@?nAoy';k,w7C?Y6Νc_G?<`%ݯ1\cXP3\ ;p V##"LfhVCIӌٳ M'/ s؜Tɸ:LwL%M-2z0a p<PJmy AXc`[PIRySoYpѴa188Z8ϗx-c%+@zPc7 pLieAJ=+>%isR0k :KjJ\Z ueUrt~&8(㾒 q ,!Y^) _ 잹{68{?r ﲝTbd]IP-A>h;,KQrEZ;!" 7{\OI跶ʣXc<|6wj%"+=,rx{O /l:sÛE;m/gGwB mK JThŮM { ټ0vR)b;/rJ xnGy-t8ZEDlI=著KY.t–G&l]'lH[K-hؚG'$AvfftXb&bX^ńg Ae2fF7UBpb}Hx)d%0o8w4f }ygȘԑgpU72eQ5]=p0 3|aN'p/ aYf՗V0"؇zSPؤ,;}Ȇya fSQjd=o+%;`b|3l$٩4z?KFyW|>B]߻U4w#5 D9hirD\aKyryIb4;Z-18b 'І\"L ITgr:1Ccoh#P4Bqܶ 5NY#&7[&WB喩%8%:"p14D~q'=-gs ::!L:`ؿeT)~q<%s#GFLT f5r#;bs/^P 3r)?YcJZ+ío-VT6>(y暫Y[oM;P;k?^J/~wɋJ}H_ޖC鋹vTw?*JgDQU2!5m̰ckue- p T U\m:DMeIUz* D YIɏ&cžIـ Y1DynlBܕ&RDT[Iv"-NWHHG7.O\G@t&M$+Hpng@8S2EX㼒1F^}' ;yB]}&h•S'~RUϥN @X'XىL4b8> jHPymE=: 9m 0`.:m.g%s<&e7FG2ǥf^NވKny 8s.= 5c(:ACہiL=Gl/aeMC/Gfc&ݪ)a U>vt:u0P: NBW e@hR;OVLk1I&"3>ӱ5~̆FT漅aRgS{/?wS_Θݚ!&>)0!w)"˗ f*/έ~^(HhDҠb\S/˼>aP;5dGR>OE`C5<`b7˽[6:?(4K!1#xK[I. XBgwn%|$hk0Wd2`0|p)x|%vkB:7'4!2M~I4}6c--?dǫZDCG uGߵ┼R'#)d*UGc5Oh'8%7Y_ĻtތRTZbeh`HZu6X$Έ&n| ( zj}r.Ia5hdS4&66&uxJz=%'z\Nn05%M}2__Ҿ/p0A۾CuEł1>w-[R}Z{`I6<f ?勛~Ҍ0$ec㸏8Oцl6Հ/8%xVRD\A\ĞpyfhƝgX;bIX Y d:(ngvVAU(}=o јdiy.\L K r3XO "/xJm^OP"*c@04$ XیD@¡B&4ʹՌJ6.(&D@h<A(։R|e2@ PK|8-(7$n|'M( qCWFՕNNTmvCq_v*eB;#__P*dܼ"SttٻėҩU]doE&6TdqOH25nXHX'e?_hg_+ `XYlYКR8c#DŽ.&Kpl&Ύi2XQGgWZ\nu] a x#x" ⦢B|=i{W~AdsE셴P$K1_j"i k:v=-@st2ˆڕjjJv'WMTHأ#?-$($A< I̠ղsap I9O11ZInj$n9y0uxJP [(#kոLsQ{<(ї(_:qZ|(--E;ro3&DoΖ?,wR^A yHb_V)u#iXٕ3׭l8$4CQw\Cy#8 |SX.XMd7,oJ7*#^Jmn dH\](j:{ݹ`\a_/Trğ|- UDI8}QQbr{~RN`#a҉˓Jl8;\,ۛ1=@WX-D9|sG #sq\ 9~D w\,sxV p; &|,Z2n+AX6k4@f+ Gv)g1$Ś=O~bsލYcU)0xOu '&iKxw%P^VLd_'j\ͬkZ"M wE4,d ضe ĘKJ"d/[-\󴣃“[\Cgyéd"s!ԕ i$FD㽈:+$:_Na\RHxƭCB^:Z,#kaw^C0d"M`9:S`<[-?Sv='PȢn?ñjŜ~Q|Ra{gծ|Z-4gƜ-a!U3A>0!T`YB6̮7Pw7P?'d‚~sClgwO/;._v=ONgr(MtB_/'(zAȁ p Pv1vY$EnTT)m)8GiN%OВhg3@l6zuhH?slTEz &8-0cK3_1{|Ixd\>Opܩ O 4.` Y o7G]0^ %bUJ ~-RuBLxrw"2tXem37nzX._|_G2/ P*:/dq^#6+5޲S"[ 6UƐO6>s4U9v-)0pc+tHebK)E e_X=I #?dx #d}(@ FA4דgܡ w2:*'vqv26x1GЍ> 73azDS0Vt2Gd7OZU41V=gQojDy$2.L?Lσ=BبC=v6{r>CTJVۅs$+S^~ww#Vx ~N{쮵 ~١HɱiKǵ*H 0W4u/A`:Q^R|!(YVvR,K|Fs}3[ZH 7m)2 ?d /p5r:,qq1NycU k #hN {Iؒ@noa)1DkszE:W7O#zq0t [ ^R:=k)j<* ڛ3 Bsdoip` N|v. ,͓&g;O7' '&\=31R`)fe¯o7G-2grǼSl\j-KX3(e W@{CClp)ΒNk1{$:ʈai+ ;UvH],چg|C8~ 0`-5K]ڻԤrnZBZ4vpdujn@ A "7C6)"f.~ܴyrsS .,އ88 =}Kn@95#+K3"k\O7ɭ$GJ~CR~LnI߿ஶweMQҥ,Á?r6d0%CVy]$-rCaS"^T .qr Pj 5\O2 9z $! )cң规neRQB:ć%X`H|!0v԰4(V`S X٦qrIzH7O$QVϺ?uF)a*|p`4dxB] :?- B7 (1WnN|}G_೛B"*jßA1si޽OtYI?Դ=:@heB-@((W((|LH%&=O ^|Fm/ # 0S/.suP _:ZUS 67آ649yFHR1a0P7[EJB4-וֹxZUWiCrq)| )Tk4wUȤ1'yXuLԳ^h4`S^p&X C%1I|{j CIuPJ- 8ӇK w䙻ic-9$K%J *W$i#f6,PZ%J*a'6GTueK6J=!_ݟIij9CJӧtjy+hq)}Օ4u V=-_^U}S I%K.HH6~|e%33asqpOa0UorqhEpAe ;YxAGLnTek0'MUQQqr I5ӱHݧosw[V!Wg`:6P F}IBvY\Fړ\'+]$d}u8Nv9u䄴SuSqm-,[SM1 EOPVt"ի`~/]zx#"#r{?},Ρx!\ϹܟzRND0O<ђ\y+A|ț>* wg,UЗb1W>rf% yI*8 Wz'P.b0 E>GEcn TPHiokn ~E,qW=b~6EX# +2 sVIVOҮa!ԇ(1X~eIƼ; 6+\FXKEC#5Vx\X~M=!筫t9GmV*:Pt@\ek_ҵKN~r|fw lX*7JyBצ7[v-/I . wM?'DV)Ȗ:.Bh!Lh.u7]rA4ك{x&T`*+g@㭭ёxc9o[5"fYimv*"NGKݝr% Kn7kڲDDJTF&7&7TyMJo4Ê Y<3}^KO}{jn!s&d)͒֊N6<8CT2`i::ȝ#f_Ֆ^¡d8ق6ۮ*j$ǾW8# v2<;MMg;r$6,TH!f2KDTm}eܓpT =} k ,8jDu<(:e_ ɸ5"w{4Sc@4=, xJ˝R5eyݒjLd#+.oNW.@Ӹ\hc$9aaR8rDH*Vua\y]S'Y\"(QPjޟ} eL=ߕ)bCQy0ђO`~YNDii ф\`ԳCT;||`ȇ.rHN%jf>U~/]zr~"by(Rn#p htK sz3M1'瘚4˺oiNHnif`fנX`//GIup+4kSZgZB  X vlIsm)5McBj;ؘPf13eD -ڱS? YdىbV""Qq9ξҏ}ss9)ڋDJɛA|K6 0&0+%Xx֨n "O,uMG;x.u $31_ x?SCQ܁nI_.II""W/HnQjteɹ9;n4y+t0v0C>v<PkA%p~)p%T]vi=I $llH '8n.$ṘINָ2cqwǜ7G}S*xru q0lžj `-u08WsEz U*RV Y:!< :@kDUoW<)g5 g+Kę5=?m~zFCS%zj |~*g74#b ;/*n%oy>닂FxbրTwn*uҵi@"PfrZz0h"'8=>erBZNU0ܠRCmo+7wώr6aS.N3VО5"$q% U|HOz@-RZL(1= /Kt9GIk PySիg@eov\ 1)]q,)8L7qnpG)yݘX[:JLnG|JME}&S:8'd)uo X١kl6p-Gܦb1s˦dp ] kz&qkWW usj{eO2{w?ʌF?JkZ?9MbT0uBRmzBaL%Â>:ǹչME HkÁ {Tn֤Co ۡw@R,M7_SD<__Vn&a1! Dg;*l S=;)ӱ T8H%:~D9)Y,)x͖Od-ٴkb)#x8$,Բ]OI+ʃκԥ` e"xG/ %q*" #~wXo㞡,{TYðH‹če>AKw޲"/%PUM}9w$CDZIʠO|&BL Cbpp =/gCiq똺)ߠ[W/n}:ؿD9$0D3(X(je-gC]KǒJw!Dz͞K14 ŽKLL !+z̄*.r 'O$^% 3 yKOl~ߤ<ܺp'"l-)xz?ܴ"cAjv31R#[t,`MךONV Qrgu5O',>G6kTg ݪ@חEx ^9q8hnb>KnH!D[[Z}?_-P\QAgrF{.x}L <1V9"1CٞHUQ66c 5TS1oL v#5{YwD VĞYMY5[dIeGq2G}Un@d=i툞>(azQAX$lD$]K !ABLAAgęSqz__/t+x1}|'f3#|SZtAgo7d@ ̡[DUϋi+'ؑmr195ˎNvEGZkd<ʼW]pK#Г1Nd\ ؞B+*L?"/,D_ox>1 >Rg`dJúB5}yy Pg_Bh9ire/TBV/u=ܝZ7)][ki2о >d2?dC{9S۫9TUJ+zŋ9 ,ˊb!0Ֆ% òt!1M(]۵,c96v)lRn/DJv#oaytw?[-QbJc0iu ׀!]K+xRϋb#<*8V1ReIIq\pG۶_H57vGݳ>x/g_G ͈z%fpgCbB-{N,yW >E[TkԘ!Jq]PF×ڭ;B=.]qCIkEƢ&GMϏ )jڰpt.caEOkm N 泛8WE91 txVwϾ]xA^>|ZĻSS?I*(A !@NeZ;%s;K^Bǖ-*QΖlضT\ÿ2m+{Ffr9_8#u<<`T2ݔ,ɋ2cSW Nݣ;V Vޘ:ZBu ^=ݥ`̠$PYv0 9@|0#@1QtDlT5r%k0xSqg(:7d3a+D%I&: 26vN:8Yǚ#@w)jCj \xҐF4.>&%IJ^͐mgNQcċo_Vқی_vF1KEU>X[%_xZ{G-ZNH hTY*=ɠi: x#c6XibU|O&eOLc- Kd܆⭞oMAaXP7fl[GwlNRkw텦$F+Q'mn+ۮݫyr(f/2ۭ2{yh@b_dᆟhkaWDdtaKt6o.e?Kcp{J _}348)~r8 W^ gW'A//hIҹ@M"g#,]<3=Y[v!wnf&iOjx=]赧-?jTZ<$*'6DY3߫!$]QQB&ׯmGRާ)?I i_.uEp,Vyh s4_D#vڰn_!윕[;k-$^zk@6rD 磤s={j'qETH^ J,1i_,^!D@ 7 gT)bu'J FlW#(bh( Um|τwi;`spڱhZf_2ywPƔPӷA0ZDM wθnjw(H]߾ϽjYǞ^:NbY*)&Q`)2箉Z o| ĜhU-A+YX7| CaXJP92Rw@`{(@!V(@I' K%*!P Q 6ǂHQwgvwv>ysW+O.Kq'RP o=Fi-qBW/dW׃9" $ϥ-iHJٙY1巿WHG #$Ÿ>{h\3^ab-W%B.3+%oʅTdP&7bץ=}ЯHOe79E#oR s ߇&nuj0!hK?G7Du T6A$ ^:t[*G}zMP4uuՠhX:LbNz/B2NeŻ?"hv4>H9Jr2ᏥchAr$P3fAgnxF~!Da1H'7#ПB&G>? }KqY|}ٗSl2P~)o@#Pp7nMo06J+Wm_}(o_>VۈU+ݰ9pn ?yO[b{!qdsq;T|Wo8w$~E>}&@H~~,AC⃾2^Dq`NNv.ǻ}j=;4dKA/MsG{JIΞ C$nppE/Mၴӫ[lHrIaY\zr&)‹ܑQߖIta¯MN΃+q`z ;(Ƽ+5_wZLN ` Pb=l(S<13)/v~Chfl8=L錉4Px82}ob7th:HN().x%nu^tӽߗb9s9bBLqvUXš(Ot9P=e>/VnV&_:Nˁ9A<#\)y.#o蓡ɽ^1j 9n#E[:JQ }31\Ϸ׫Nj3p_2HH@h վ54@x~SuD[f$ wt^[큜.-~>A NP ُ9r䢄9ןIILr_9}:BaBP-fIK5Hy_\ ~2s%;;=> "D9 ["WBo B%(zB!#(Q"BIo B%(zB!#(Tt=!lE=!}KPBFP-Q_B![@ѷEO!dEQѿJBȉAѷW>SWLB BѷEO!dE=!}KT!κ !d;( i E=!<"s['Y: E^q"$̅7@=!BѓP iɀWi !&I}K g'*&ii"Cѷ@K Q,@KYD 'MA$Eo? djwVBH"=`Qѯ>9UY'd6}95D,; O8%cO )¾ɩ@ѓ<:$ s=T$^NNIȺT(o򀢯H:휰)z2䱜g]Oâtl T}>.C}uYMQ}1v z@X·> S"k>c.Z,Ebi%6dq: S#wS$6GHuDngwV+*]"ч̺hp}(zʢ]2Zg+3]P^p~Bt٢O'=;!.~vt%G{2%6 ¾ɩ@ѓ<ʊ**"+pS‚(zKq+‰a?#}Ъ<{W !$ EO((٧G$ze)~)zBRĠE2}]L+!##Gf_!V }zREOYBK~hןLk>50=ɆũPEOYHS]0H=ɦweGG]_0Z dӀ菾]ǟ|}U) 0(U!~Rѯ!'T(a'y|T&\^< u_Rky$(z͢5`ᯁקp~&y*'5(zMÖ? }tm'5IDPGU"cwPR%=ɦ臲D|pC RQMѓlJmHWGQlO 0#Sy( Q7 %U‚QЇ}A62WEDnq)ˆil&S<(5>=-?z6J~eroڝ~vs;)bn@γ)N}7Z,Exܯk'ئ/nWO,,x7-([⢢_ 7kbzreF>Mr?Ez. /F=-c85)L懕3OSrd:4NݒSN4Z%C Y9:a`=@}q($nLYYWm(9t'̸tI9t%d}(Hq2 +*%l={'%LGؕZ ,]3Y ~h}ժQFgxPl5)-~t? iN2)Sv~g¾\5Wt ᰕ|]:P/n+q6uY#jgUC FNxF:m3&:o<5WrԮ3=wbz2z^px+kti1x:l5/ gբHS8PƗ&kzTt}z g끪;X`‹E:W{R֯v}N C_ufX2*;s_jOYZ;W!߸|# xtKK:E[KHoM@W[ 1d؛eߐ}FCJC|;mX\$.h©qŮB^ĐK~k#.pSjffrҗ@ob..ʌviÍ'IJkz]D_򊢧OEo+>͈;P7SE?8R EOpDOꆢ_I5R3IK}B EO'%YC !P$tw/S''P$wkNB2I>>w.~㯛YJ'Cч~~ӳ5tsEBِ_EO|ŋ/^~8n\ξ}& 2,rid1ANPipZE(z>EKHC @r;u2/-$ГwAU!x$pY'CgKOZ'ÙT>.+jcs> Gz|O?N;;o޸o[9 /G?'n#/zi8]-l9cmܲ٬Wx+9 z }^*.CҚR_wZzCt6]zcС-KGG5t.&W﷩)/Vŗ^\o-ƿsW.uNZL}+߹EۗWg藯pߪnm OCزy9k:>;qOx:|^=4zxV;~iϭ:G/#$л = x$pY_z =$&ؾ>|߽U}3ߝ?~{>;snUwZnݡ߱οkxX\ :۟}ϞAu;tSx<|=_?}ePξ-$UgaǯvU-]dz歹UN%O:K?BwRޞ lﶄ>KVrEl}q;En BJ:W8_Q;ә?q&L|=oܸ.IڙklkzVCՍ!Cw96?\;S-~iZ]/{7Kpп5y[پ-{;{.c =BZpȜ'ik dFo;@bB pM߿??';B_6?y0ۏ_EBo߶<d^HLĄ>~~zoSCllyG_sΝ^!~w4}v#nN<}x^ oiӾqvgm?{C/>ҞngoMu7di8΋^0o[/߻u>Q k{;|ݡYu~:BW_'R>xI?ݸs~}r/g,~;mFg:O\5ZRpcY >>9@o_ : 뼦 }qзB{{'jw8~Mہ7[kSni ~vǯb㏜Ёv^CvG}Giyu^?#:4Cg%N@5l?>X݋o'xQ}NKj\yQy5|o={"d>߾"d>Oc=0/ V~q}W=Y}XPǟ =I|iCCNG+? B҇+_,҇>Zigzƕ>%^"d>Oc=0/ V~q}W=Y}X +}KE"}裕z`\C_/B@C43=J|zHh姱AWЗxK/oB@҇>Zigzƕ>%^"d>Oc=0/ V~q}W=Y}X +}KE"}裕z`\C_/B@C43=J|zHh姱AWЗxEG+? B҇+_,҇>Zigzƕ>%^"d>Oc=0/ V~q}W=Y}X +}KE"}裕z`\C_/B@C43=J|zHh姱AWЗxEG+? B҇+_,҇>Zigzƕ>%^"d>Oc=0/ V~q}W=Y}X +}KE"}裕z`\C_/B@C43=J|zHh姱AWЗxEG+? B҇+_,҇>Zigzƕ>%^"d>Oc=0/ V~q}W=Y}X +}KE"}裕z`\C_/B@C43=J|zHh姱AWЗxEG+? B҇+_,҇>Zigzƕ>%^"d>Oc=0/ V~q}W=Y}X +}KE"}裕z`\C_/B@C43=J|zM)6bv^zEɢ@|RUz "|(^?'@^G܋>]܋ȷ{ZO{? z^p/\˟ zvq/#D E+D~x!ϿKG= zc zc zc zc&D+O=w9=

2fѯ)85\5HGAgvXJb.|$# z3xxJda%N r1p >GF=g]<<%Vs Ȃ##.+YXS\\d}dADY|fO,ĩ\.G>hCݾ6 ~lfy$M#vlKAMhi =_?ϿI<,Y}H gAjG~\k,(zԘD ~ޤxR]nOKAMe %}uA7|TVD^>ӭ1Fsn˜Լ49ޒڊ>%e@vOp͋mXB Ert%/~5wƠE9(z}=-W15JM?m@TT+gt݋i[-_ꬤlfHF?aI}6YDK)heq: e~ ,GG[R.ЈFO-S9j(΂UxxDL\G`H~Eqwb#X2/(L\xKtS3 `YQkAFz^S(%5Y2:Qh5IFuF2`r`Yt"@I!qD/wsW@h.z裦*(ˊ>+ӏ#_}Mx' /ۖD;]=n-#\x&}^` !+;! "(VDN!zJtKeAAJf6`4>q]!e@{beӪF[Y==erწ od'V hZrS+NR;_,AK)Vå\$ҐUR`% +qj0)#Gu2jn *F>׊%/> 0r$>$~q  ^⊩Ѳ18[Z뉓0KmuD,+YXS\\d}dADY|fO,ĩ\.G>,>JV`.s#YYP|dsSb% +qj0k𑬏,(>29)85\5HGՈ/'xxJda%N r1p >GFerEY]42w`F{}&_Z AVff߶ ZY  W{MA@+ـe^WZY{6y*DؚS4iYfUуe['De DoOAގD>F['D/l{,R#5eV\7IEoR?y)Z4UA7)DߕsZ!U2s DWџ(<(eۓcD;=wSPS@8آ,5Zg׹\ŕW Ǖ cS 6 NB}Rxz@{{b޸A%J_ʈne=E=EO ^~<}oڊewu5/hЍo,sVnQvJ/ׯS9<ա OE4?bYV?D߉趙]gh7MRb \z؂"FO}}Yk2Xk~7ՠϺ:oG\8 %Z4Ui׺/h`qq oRmj97XC}ڼ%:\O@roD&TmTnŊ峷술[J7=P`^ka z9Md_Lz>jnM#ogVU.ni DOUvn;ֵb-DOۭVZ尗=G)z {b3ImQ^9>®7MhWD_@51`'`kϲ~i]-z@k=uDeZh/%z&_ y~'+v[Bb,3kۮP|J7mSЈuek:P)NS3KG#L}瑢=cEQ Wʢw * 1Z c꣉?iz>zӚ:Xi W z_D}off狚1Dھi}cfW@Tx zCNW= W@x$7ǹ ~ őTOAwS` b zPɹ3OdSlzg=ş9pV=cWH Dz݋{ L:%,Q_p.7MB: z q ,rO4EB dUуe[giI)7fon@Јk-s(R^Q4r 3ot#ZHiϫES& ['nErkygOXWGoG)*O򯷝~wɻ%G? zB]ț z0[SߪڣӋV' [ Ac>DV5SY?ɮ6yyB#{{Lյڷ~zR4_ޞ}j0iGB^TOw?~ Dz /=uOm]#}0n+R[@VQ6kEig^/jO>~G/_f^r|xr3yxjҢ5y _A; -]E/o눾6灢^X004}E)h3[Nw?R?/h?/cq$ +۹a`Ǿs4uuة08y3δ|MYR)R?RDRh :3߭~Ygk %Eka'P_;b#}dV?@}ߊ+${V3gف]7ȉ>CH"X~څkʢ|k>ȠA B1T}~"N-שXMD?oYC?4 q ۊ\ȠAJT6TD_E_E/܄֚}@3W/Mˢ׿E?~5~!zJc˱C=-0 D_4[~NE?~L5#D@uI [*C)*-zw5{@8V T!cܶ@5޹7䰢@dLV zm 8#~%bů 3) ̊^N+}#`@` ݋; z#=Š/)[}K}לEeTDbVN#\qI}DoWfz_=%Jj$^x$,l$vzJH^}bq#DVw3]DS~] MJit,h5>;\_`,6D=M#P M+0(W? }kd%.oryY47\l}RhNLl@[GN聾S/aWއ͉^D"!ѷFi[brW~$sJ/z;Y~sPoA ʹ76}+SGoH/ 'b)~s}} V~&RBݡ D>*zJdir ܂/OLiDsVXӠft f6YnڙU]2 >KEc;Azw'N`Cb;~hULיaAA'í REϾ>e˕_VoҢBуaE?~(^3gi_ WP}j87*4IZ'/Me*k݋VYm渂< Do3"5 S7kp*zy-S j8'Gq'O^g\)9ԡϧZw,ljSDϦ)-Kj<)Ib b}VZ~T<ʢ#/˷Ԣ~|?[MG)w DCn"A){b:K["(.0nz*O/lRNtG}R񀦀c.z5!9HVX|{͊<2ٱG!;<Rg9%W^>kS4( *wUc%nעHܻYG}?C!'1E8Ff/g>uDIq.recM [Vb-Ntm0{U=-Šo%Eז@{l(/ D?A-D?!]i#gF҇p' D%ӋF6=[,٠ +~v*!*($ 93K,Q+~=DX ه0Se>t,%?,ZE_V@I zeD@cVA_D5gQ~Y&USlWF/Ad\uD51[ `1Jj$^nm\D߽$>6S"RV.'3=8 }k}i{ؠ/$&cdJie?~, @=puuu|kk4}wd 軆>fy˨s=˞ݷ;=ؐ_l])ߺ;h EE?z##{T&l"ADZ/D"+;з=tȩm5&l%<у ogJo:Ϧή%} އgg@c@Yh gEOOA􀅊~~YM oF zP= ۂlv'p;,zwM. }ljB =K_/t=V刀>s zn45pgjj\ }Do3"5ND*#$+a326&Don/g{F}6z5 ?< //4]1lI6y9v1f?fȶK&!݈ݗ3&]3+zra?Cqu(E?g j)L1Ԝw$0]2]e3?tT-dv%K87rXN]lNY{w&zWZ)+Yw/ 6R`({ "nvGl(biEtN).pֶ<>~x%90/ ޮ=L7K(rOeߢaN(bɫm~ΊVP zJc.3j64Y[cykgY /ӵ%Y58]B:vؖQ2Ec@8췰Dqss'Km1 ڜ4餏U|F~<3|zGK["zsA6۽$ zÌۈ05Li܊BI9ѻ.ˏHpvS{a<DŽj.~LP\pdV/9bZ;M!Dww,6V6nٮ"~yy/X <;[^M5D︾Y~@7䰢O@KuS7E%nNs4 E?rsJ rȢY''8!j,k?ݗ94As*5"{^UAU}ktTE|_5 jl|#0&hN-17kUI6H0MMSUR*}9wDzFI)uochqv+ s%订`~MM-q{_tùt*X8 րo=d mg hris4.- FǴA V^AwD3brg$OED/X>pϟk]⯯]Mq[]r?]l-k2gͭD?Z-fe$;m +[e"l{jGM_!zM~€V3]엿n-;] ]Ѡs[@CuBTHCl )u^ 9GHGqk6mڔ W(Bt'NoY^xlYxpfmPPe\*zPEߺBsi]20Eo7ikh}ʺVR7`~~ D&W/nZt zPEz.`#ztD7Ќ}.CVG7G/SE 渢Y^1\'@Cݸp{QC^sTq@!>>@ =*z󷜈V > ś#etC7C=*z3z_wXZiы S!}5 臀U q=׽nCw+!zw?pӘ8 z(=S̠|ioA;ohCUDP@ߋqYdրwwtp,̉@4!{KjDbrQ٥+Zj99^j! a , ̸1E/jWo5% =Qp۫-ć #ziF25I^ss !sؤ]`/'q}RpCx=XV^G~xE/|ZW9fϢD=Kޥ蟟=)(OPd<rFdz)(ʲvkn/Nw~DOl3}5ڊ~ ʚI*4J2MYvW99y#)wkη:$jw DR W%JVժ 89y#KGs/DR A iCsKxi!x|%,Jp^sd@+!+o$ݏC5у %MĹ:39*MAt'^onoP C:g+Ll33ͺY.T`E_Bi,y -zӴ7Xh ǰMp+XWH+^ZыMIY^1\;ܻ9@`Q"zЖD?Kܛ=dkճ;Bi"5@`Q z!OgX7Hv>YAΰK^>wKJĮ2!zPp C轇t"[jn{@*+d>3*zZٜWk,5CmqE?]?,M~Dz4E?8ׇwo޳D?Wa 6cާ BW?L!M~XD;Zw  7~f͈;72D/,?| L'SݻH ѯ~cТf,#;'l7 zF z=\ z݊% D| حpD/D='}g" B-7GvpGX<яX J^`=*^תD<>gߝ@6r/R0k%}]3ѷ.XUz:A54+l&o^D_=`^f]`djh zPWяj}"}@m&D3P A) = fjh zP ~@=bk/z/ 3#5DouErfZf)ʞCݩ5LL=zV6t4"6[@tEo1Gʡs]@zf#h3&7!Uu-ysH;ѵW. guot5%K.4N޳IуRE_JKҢS ּf 3/+zk 3sB 2Ϋ{!S oȌ⭏9[B\*޻F -;C_΀oh"zx9 ACq"2_3¯{ɱƴ!kWb(Buv H1CĘjX$&уRL+z"17uϻ}ȿ7o ("zV&Wrnbt+>DoWxw 1P+Zdbj^{nbЇDwa3Mo/RA2kr'kN,OGC3 Z٢crzAK>$\kHaѧ艚]R_^{Fs|ifݼSͫۗx#z9Y1 bڵk:$h8?[]֣m=VE?V}XSs躹9H;ѵ, -I/(9g"Y3GCkh [R@>EW#"0 (ܳˋ~ТѢ6TCуREI  fjh zPDoʁ{j3A54=(Ew4>g6TCуR@{@;}vlթ i;@54=($(q"Hv [ש {^ Yvې.֏, D?W?/MCuդ??+'7y>YΊ'Qn7@UZ~6̹5u Ur^2*U&{/KBުLCVgnusNnvfFG BuZ7&m#??BCCCCCCdr endstream endobj 10 0 obj<>stream H{PT/+y(S@!P% S`Y` EѢAQ˔I3Gɴu21ؙ X0' {]PΞrYYiϙ\s w>(^qsBCI{4iG3i T M2H3f@x22#0#/8 EvN`鬈T4zl&Bibc.,-RĊFGqG)G DiDdc0͍D xF%!&<\q M <{RA7:Cyrxs^ТG#MI1"@ T.qFぢpǃU,*TxM*;J^*ǀFUwȔV;<#_\\XB+I W#a& ?쭰yye3TJsӭtU\d#TT IKmMEtS==N5a@1Hē?D CXr&J3PzD2"$=ک7CA-|uJ;] EuX؏}M @ &`F7%'qLcQmT-M0fu:ZN7] l1S& ̂4)\MNY8D {&;t "ԩgRnJuӀ=wa&$i 'aQpEVسsɿbufnf Dx9b] TvږdkgD9e9Vaڛm(O+t6]f]V]ֻ6#ФCH{~]-mko{"obu|D\r-#n{]H`Ƀ&3I2?@x6@1؛.r}ٮ+hr?Ⲏs8هlJ+9ne"w1AB&5ES- ]*s´Tk2Vgw JB+#{[WEHG\3duR1w'D1i:s)'Ndœ <&O-WF]b/= ėɏrlA6Rń~YBz&NRi_. H߉1T0=M{sUrcL_H+ty[zem~׽:P粛FQ%.fƥɫ!(aNNz5^7vIΏL0!.2=(-m!%Vm_#=JX Ҽyc}J/wd*d$}iъX]Vڌ8&X.>Vnts(V''Q'@ x^9R^ {1NIY^6`lU ;[p-X4{=P&' &c4%;Y nU2CVu;uYQ0l#}I- p)UCA]UNޏSԩhA?&熞m|xN sU5?pFtȉ9fLI dBJmŶE"fmV5 vYo&OT{1uba7No675)!|];ԹKPԅ Rjbқ)3p>ķ8ϖ*/dF%\nKa b'Hy3p;r:6ݲ(g6l(f,b  (^F:MN&cM .Xl#ƽZ#I-kv$5R'FnөNoyaG>Ёmx!_ˉ: aN}mgsIZ6fUɄ3!*bƯYY0uMU:& uo"W&XUJmFظ7+5"طGǸ5|U:׷ONF0 5ُ[tJ'ͅN*¦CVM7kyop϶v?K A?xԞA*kq@ mì('?qz6a0aL (cV0+"GY}s/pkiY&:ZG;JJn-7e2)]Xu u-ӊ}z{9quUP9#G7cNLNޞAW $R%\yy)liY& R,P`T0V ;DRLޤwUćAjk_BM"WĩSNxITҭ:0Šnx'_/ QmAa~_d_AMi?UⲰPYF P.(Hz[qN3L:Rg] r$ϛ1ÉH%{޼yI׈kCw  < 'If{t :|?B:LGC0z:Td\"zWqx׺Q'izoghU5V]Z Tee~҇⺉:ΠħNcuZڡNZTjX 2-C퐑P䳱x'VBsgZR;#0.AP"@^ZO=liw[Ny`wF:cG& c;o_6N8)Zk0ٴW:ߢ˛0f`Mn:ۯ߭dsQo"I*3sBpH9Hcx>Nʭ|m}_^c;.s\ɳrQtjrx l5d&Ņ /xrNO%({oo=#y[?fNatP$]:H'7F+Zuʵ0 SH{2T59 oV&5e\Mo=a~S:=9uBI9HZ7l9+=nB#{zO*Ўk^[ܹfb75S0)Ɩ˾$|q]OlZ?uZ{zv$ˮDA^4^]N|Ȱ}ucB5}-R{&FE6g2ӲF:Hǀ:w@*àKpuYrJzOzw,fP1aύ T޷6-$EK2L5Ux&B>{rެ{V5Tp3={zObe'C]a}ri$w_k.}CgZ-\ĝAW*E\x "+3q _0Ϋ1w= n LZ2EJ""~=y}%+7STIRuZMi@I`gx c2Q|kǗo :R˾'3A7F3QYu7ty^}ՌF]:qEЙI?z3<9qy>Uf׳cXf.+gk#Ұ#.<BQ}zA ;C!ÚCaza& :gV2z-*"K)-!M֝ݙ!=Q}ű ii"NU*֨Gi  C˩I/h[EҙOPgo9ur-'N'^cMfujnGS+ L7}X(l問WVkWhjj"k*wޫT1K})Eֵ}ͼ yy|eU^yx e2CL_սrbʬN֞+dIYijfIodLKxiND^^mAñ0EdSW+x[oHIO%%=EހJ_R]5X).TWrz)OA9_sbҺ*!Zɵͩ!iKZ_O ![* hMmKJŊ[cf]_!64>*O1֘K7Dyr[Vp; RkOߒo.z.ϑ]z3{eQU*bP΅٩öaz]( O9-,Zy"|1)ܳ)D/ lց:9uZi?fԌW~McE!] /S'"| >;"%loO=t4ftg:&x.ϼՏ`Kn3loV. W{\ewtyf있gw2=!?K6L)eu+=@x~pw9I腷S3'^N/J&l.ӽE5Ӵ'}mLq{RbcX>^bab2-OʳR)~$mBaT3̓y%2Ui><3R#N.Hr @*'JVٰ+Fד]si٭1~ՏhRfBq#(ώL`s}^ťUtUMnKH)en ǨΏ/NW'm BSJlizFqr%O8K8c%ܤed-- ˣ˥_PW2&mZYiiL'ǦLt|-ӰpZrթiXҵJKV^T Rd} ZSYn]<–8FFGƧsgҳ-$*:ҁBvɉ%*L 4OAfg:]Q]{5nY\+/KP'hŰ ߇ ;4vP'h ; :Π!P'vP'h &{x:PQm(U'u"i鉸tYEJg,u\FMӛ괏BLf䭓}DŽ:-=Wusu:e$y9=KJʍN':ND\_ YbꌎSV iAZ@~.Qs#@Pg=7Q2r,Ny+8yͽ[PgAO@ T'{\L*[_>ҁK|N(|Lt'P@W'Qڟ8*&UeOu~4RΨwz+2ίݍoڋ>K铺%d:qﳗ:0ʸ:}*oFϿaQ: 2WBNΩ03Y-քXflSOە鵊͢Ia糒:0]BB}0ʸ:^s8eo7u,m:2]BB}`1VQYJ ZoάpwRgTPuέ':ACbޒE:s',Mc:鄇/,u4:UmPM\{A1 \N'yƸJK.z,{htUi7#a[NgdA GgNHGa'l4v&t2Ѭy^Rgd.mnunلcWF-oaQ:s]gԙkkN}NOied\JȚ:\xe:0]au.3tQԹz\KHFP :s.![:Hg\Z8-᎜_>RKrP 0UW=[0Nqϳ:e7n\ꌶ1&sz:,?ΝiAZ@~|U?HzKt~џKQeS$ol!@ u3Va;MMT=$;JY:vV[)i*-쩬U:OS@:NA%bg Y_(Nn>,ǽ׃KDU[Sxsd(\}TB%E*}@}PqiٖTR~:>>XhoIu`%& uGP֐^T4`guc5v{;wu0/?Yngɗ:# Q)Vd?vL#]Du>-¯O"M;s]scQZvUꖕpOuՅ1\ԿtPAtAKlP Կt ua(@/1]BB}x _b:}`gPsND>@!3}:AC`gP`T?Nv:BF=x<: :tы=Կʦ8NuLZoeM٨̕5Y,|awMls KHFPg%<2ٰLPg+2J6yda5.!>LWe@lPgÞk0]BMuH}dx6,p·:+䑡Ά==zf6mMVuF-tm75 #t<#Pg%<2ٰ#amوNqr Zu~|~:ߛ g'] LuJ H/>K{ZC {:mB56iIg=l7S珱Z$)ge- >WXPgSdQ,ǬBIo|x\Wg/iAZ@g&%1I:+y (#'Fs~DʭΆ=ClLTiLePqiR찖Pg Pg%wu2 ;DP:[K-ٰ'0u_viS=FYz;A)[gT`O>ZU' ٰ+zГ6z$&{ݠN:#W-R-Q-eՉ^rgNwuVRcTqL:C {z̔Zt,* 40_ksFPg%u ZUA_Jcv@ٰLPǞ<;WauV鈪,/nр%IKo u6%d+u~-+2J6yda5.!>LWe@lPgÞk0]BB}xY& u6%$ه6䑡Ά=`tn?QR :t6ydaOpO 䑡Ά==:AC:<2ٰ''P'hC_li#u~|u*{x୳ PvPgN &@D>tV@[|#mQ.O8J"u0@(:RKf$k:P@꤯^S^PgDX>N%h·'i`ltLz$j=-v:gԓT/K]֩KTZΫY&:2:uzfLzfWo>g:=D XA=չ*D2ѱ~,S D81^=ˏy>ct~!f8Npu6\Fiߪ;:XԪP@lNtpP'('Pg6 qT:ӳ_k&*҅a>8@Mxl=ɶXNwuz %[V@!3\h:zP@ N?&q 0wf}>»f;hou ˈ@' H[tH)$t>!'3Hxt"Stng 9z IH'DC $N҉FH'lb[4c#8oz 36 (0G="xq|_w4Hget"elt4XwhٓzζtnnۅH'`tf9iWtŜPtolbO!etlyӬ{l:T@w2:i^2j`ڔt:GH獦}YwK:mr>A9B:o4 (0Gd:Go;i4t4L4T"(wL3:H' LQ/ΏKw:7:mΧQ|aZy0H'D]HqȉsZF,swc*+{w A:!HgΜ>C 3BN4z:cYT.%m%C9p+_ EΣ/yz: ^M:a!hh:$ A:(t hhA:QtB&5L3:6҉YbFfuƨYG:Xd3xEu5G=4X i0:2:Hg`t`euܕΣ5gOμd3_T)oা]t :nI\u]:bWiҹMQ! 6?_Vri/d__Rf#et 7GǦ3 _f:gV"(C/ 4ts> s0vthA:Q`z&#Fӌ҉Ӭdݤ#J:c*O 4FYtgX'mCQ,oᗹktl_埯 ?ulw&C:!:sVbsӔWN4ws>N43D A: F]g,TIMR1v G:!2 TNg:G2OwJ@3jH'lb):q:ߑ k~ &F:!HgeCtzOI'wQ<Dn}RNg<ܿNvhh!N҉FH'DC҉tQFD A:08'05G=5o~|LLҙL(|`yO4X i0:2:Hg`t`eutNrZSehN:~y1M:7i?Or7y9lV:2; 70ozIsnwk߄CiH:λ?N fzөN{(vBO(&IÙf^"߯ut6qyiFDi?ݕ]Z ?iA:Q`zJgpv'wktl__[k:Ȼ4f^=Hkr=\W|Σ҉"36ɓR/P#N:/_ܽ!u6NG\%2~)!Ec_}u?Sѱ}rN9܂c_qvFD:!nOg0gUɓ#5񲇼9{࿙ё~`tBs#]tBܞ^Co-}tf@Rt?7]ҹ t:Gt漍t*m}w9INH'Dt*PyN:cG/6{_{\󫏛]]t:?HH'Dt'd~vq98)O(959m:+_t ;zGc$s }ҹK?2=q*]s"v(=E:!2o3mWN'Isw>oNM:E:!tsM:mA:!H'etN tCt"(t`׉FH'DC#7N` tBN44xEu5Gd:X:1jA-  $Uٸ{,]Alr U%`|'+ofg!fxܥ:ۯpq:?WtyoWgc:\{Kw!%鬄N:J+1aJ/NxW{m gp4맫5OfIsRTgm4b4n2S-ӥn3m&#I1~x$~Rv L}; endstream endobj 11 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 12 0 obj[220 0 R 219 0 R 221 0 R] endobj 13 0 obj<>stream HWrF}W#X%BYʶ쬳Q2YQR>Db3({3DZ&ݧO>}͇#\\j%s= *'ILV'x$~~>|znHpD.Y5T0VFQ16.x%_ 21c ~ D*aa^9NEtm7n|ȁU yp$cXu#$"l_qu0ZBK $=RUG.@RP]-:3Uª j(6JQ~ADEX6NcU*NRۅG^ƱS񺏁vluȞ]V3l%|*?n[k5]T3%a j+zKQKnۊM2Ss GҐm_ŢJ (eһ?S^kGl@=b}&ɚ a/gћAQ2rJ6daąj!#Ųxr5 B(DDlؑ DIo -~M^{;/8^A!`Y0@M]C 0jOf)}1|V m!s;E[282AQu/kOy-GH͞-n:VOJG I/WQPjNr-QD#%=K R 8Նp|Y7;@y }5?lv4[2}d?yƩ}PJvr#!#0* /Ȯk_ed;PA}LKH%tqp'JcK!d QRy K&6  xfl[)=qtAOA*0yLao`e+ Zw'vrQ\eM[J()+R J1N.Fav¹^s7ӄLt%'s 327@%]ձѳ›J(;l[$G2Xpw3o9H)&oZXQrRVP+RB)Ե.jvP&OA9;ڤhrj’yQV|!AK0CBNɋu~z1$=7UR㢛pmz:C47'ye5n}-X!VK;(b92C5\T=Tz٦A4&bsB6XoԈ d)MHEƭbZ#of+F L"ߠJVט;NiOpV+D1l,/W; "cQ;eazdL9+<%S:zu(;nsɪ.-D8k0NTsQp0Kre5tZ dPbMȁ Pwͦs5!~4Z\v=kn'7+i-><>$ՆT}U>NS% =s<7;G)&;Dirʀ9%&xXtqKnʗV cqΫX^'$HIdH$Ulx\@Ϙˬ=a2`\yU[w4 !kL`7Q @ MS'pIyʵL X%S܎ޫ l8u~B[Z+^Ƿ&w(ϵ-*/A~LtO8~JKBJ\NC6"B ')&W uɘyS(v$>{qp3:w,X+A??ay| nqLW2Cٽ&Y-4ߥŢꢾ b F͜['zgF=>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 15 0 obj[223 0 R 224 0 R 222 0 R] endobj 16 0 obj<>stream HWkF޿>iv` EJ?f5&J#F3Uaqr3̯sfʗp{o߿{`!ᇻ{v g9뛻b200awl >-*`>۰y7K1q#x?nwEeULVxF?n7mospocm4QL9|釧l-Kr&5L庐ed{") kG?]\y6BKM^֪l+J4хv\`dKJ@XT'9&&_oX&ו}Qgu@btP+VD T]z?r :(`rURQZ[h Z( >7U pk\ &-%")T&S6GX!ɭBA𕲩y_[U!זt,`jPOТڮsޭC~"C+j--f[_E@t'3ه^dCLoi#auԮASLXFIQYiH올v,H*b *vYi0Xp,ip+)g{$l@MJgKt_PeJ@ws&--%}E%߰ r@?1Ak⼣pXI IB֕;s8x &IG2CHEJIi.@ 3$7QLYMUU+F*#S .<%3%l hb;`a){W>ʙQ0ldje׶dmg|e\U^tLm i+\NXC,9 n2!a1mYXg$`{gF>Ǿ=,FӉ&dgL\+svZ9',=WkЈ !*t&^VT5-HY@ ǒfGܣmi}le`dqm 9!+UC\.U^ijiDIHIýhZ&N~jA EX!H͟y'ځOCu1E90DƘwAǧ >b"!7QO@;*q<qtsb%?z.4mBxV??OG:xQ/#.wN8 :ǝGq`_\u'C^fj?e aD߆< *4[2>ìC .5C£=*$)ӈp#uK$id;\N.qcR\gYbm{;Ȣ@ I2FmY!W]#Lǭ&%skb)*;|z(U&AJ 0^8`h"% Mm($~xv-Hلy6v@|AK?2t2RM=䇦%O_w*7tۤG*RjRz6@Ќ UsHB&ZLkh\6j+%$xh6/Gz};tc!43/aewԩebr VbW"xE K[e#>͙Яd vp&CIyW vO.ۋp01vD@`[BZ"'M˃3煉R(*F8V;tVUlpH`1˔:UF@s%uAk䡰Az g8Ww&8|LaSXP9 ׯYB endstream endobj 17 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 18 0 obj<>stream HWr}WUa&$ @$[%Y-۲KnG@@Qr\U/O>ݛ+氟~z:sYNlfMzO' fkcqxd]"X)r>%e[TD&df?2uA7è*USVm^T2^@Ɂ|}'ڮkقwlB,68lJN%\"Zn0Hx WI 6ϑi[SNałʵ13*7=fk[ ̤ OI GQwт#C #^ famh\o{cM= :JO4@ QԠJt.ׁoVdsEY$x4ʤ{%Զf=ꅜLQUJZ!ovp< IЍڸexܱ :35JMiFh-a|}aeVYyJ"/O|KW{ %A!Lj"\PXţa6]O:"*ֶ?di~QUD6#P7  }aVl"#h QPҫVY^0?uKⅥbY ͦ(*hXrC"YA&T@5)u h3GRhXrEĻIbY]G$ɣmWrgnc>S)0Je3l(IN(ZdR@ JUx"8Z`xm~%z(Q!`0\U}r{l -1cHG @ꈺ2j1a.@~?}E=$vwZADǯs;=p_.$QƩi%DCs!Mi 9! 8Mқ..–Xݠe*H`5GL"*VXr)pF"evGT}o0ov< Oܱ>dE i$ .NELTj5VIF]iJWf?Mt987CKۡQvD.JI>=wI|{7NI&KjCOz.%"MK'{*j ~xB"Ag.ҚԆ,JZ&&U5:t,.? YSd >K|t DΤ cVج\)b8:J 4-nUyQe /zOrq.:l{_Mr1usMz rm9q,N]2D˟4QyyF:rIoVop W; ͖(JІֹևG!uΝ~bX׼GBct:Ih~ŬTyN [YY _z# ,:J.x>%J#+11V,CD,7tZ|6Hшyi<+r{S-NMሚu4(CAO໻ endstream endobj 19 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 20 0 obj[229 0 R] endobj 21 0 obj<>stream HWkon "-,F|KvwSo*FHbCqT? )"bX;q9g^F?4_~ys.ƴp)x3x=ɥ;8hV;YAc1b7r=o.w(EZȤRD39J]t蠾ċw/.>4R9UkIL3IHyx݌ʤ2}e457|\1r74הk'AY**vh%ٮd! BWk"%J77Js'FTvnohᄒKYt#zIh\MvMX:Ʀ[dWړwœ泟qhK# <'&#| ]|wr⿱uOm^omTN <]JuaWkh ?zwx)@؟jG.[P)b%jkam[vQub !3SXʞ6#?JE)%E>ف>3K*e*^KJ(qeKƎm^O"#͘f Q0($sYM-OWxz8bM#zooSҴj!TՙSۜσ9zT2@p²XhʆhOݎy kL%Ocݦ=qtYn'}p[Cs*Zh*e=+`Wʳs50?dȭY_\:kcdpI{e{}"#mXg'>cΨdG Kw2uNF&1'^3y}h|CvT,5e",WRdrT U͐7s\"cCu;bB@=Hd+*QQuRwF}8x":DnMzIv K,ntrQ˽yzjOl|sN5!VM[>Vd8[Ƭ5 og_/D|Ъ4+μКҎʡ=1(1֕Rz+;^ӎ qB VB2mEGؔg8})s1m }1{WF@$y `Zw]NWuQYfŗ-h*}e@Wqx;~ ]c'ʼnK ) %%> 8zo )u.,0&}6t wcGgm,7P mi9 Ӊ'?{-|qVhvH%B< hq(2?";c$UԡbCmɣ]52*v&% `mO T¸lbW0}SvK;M Ҿ^k,w2Og2o{I(l蒙sjwOl^dssDf?uO*i<`~[b<~Ni SčLhZkņU%k*D\2q.Q HΓyE)Q;2fx-y\!cǍO X 9_ ,U*M.6QvWz6!tԃIccʄBd*C?yDw{uhݵ"Zv p]4HE9X*iawkb eٙ=:T>d6_DRFIٖV .EEdU)AӪBMr35L>BM1O{HXFzԖRS\Dd9֟8v#aI{B 0xnPEL 2VCYn~O'{ܛ>m-͘Md^ Şk]\c>KdeBp8ɗk/}t:%?V ŠnZc8%d$N85\j drv%fz 06&9 endstream endobj 22 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 23 0 obj<>stream HW]s|WU L;vɒ.󝕓xuq<%0(W]| .H}˷Wl̾Kv6f3Ivv;$QB{-[Cj &57.MQXoZISMj)G3Ӯ:^塪B!ҪFfBlҘ7k*Oz\@|4Ia)p 4'"uвE:,5L'E)GDҗ MQ9x -ҳ_\N[(q<3T56epڃ FSYd0qΪ.O4{fȕ݆FOFјJک}#,dnRyZ|7U :1@ZQdd4'taR?aܠx"V^Q#D$=? 1_Q-v62{ Ϟ.As wY"zb~}}!t\6\!5O ^~vvۃS5 R Znw`M$}~SȫVdz@XrrPAڭN5cltU=!{k?ٻkb+ &D>ORcV<*@!Ah3JRX6nk[[@C? }w2ynHvR7[lbJl:;TwV{ g #M^NDҮH":a{aO^H; qJ$t#vGԽt>tqtkwJ#ZI-.!CJ*. UGfU#V48D`t[/G h,mX`[zHXߪor}͙硨"jFU[D9d| Vbo:=,ns—e'>iCyzi;ULrvMk^(`a_?ȁ&MB96 (PCiԖq%3k;Jd}s; =>/t\qB-ۈ]X7N;fR4oi3JS}? 3΂n:7XS!f;;hUքވ8 G?JuZKЋ~3-Q. })ۑ(Q_SX$Hg0/JPܸ2pS"IV[e:oYzWm x}{r8K&oޤP.J 5RDIjtn+`mן7ꗜ+lTyu Ou\Pxy5k|\ĵSLL3,K)_NY3:82eOE60aZuj6 J endstream endobj 24 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 25 0 obj[232 0 R 233 0 R] endobj 26 0 obj<>stream HW]s|ׯG0%@drUeݝ._D$7 +?>=OJ*O(bw짟|~ ~w]c]egun}f1Wә;|N=s>]V̛.sFȝ؋\G沯{ vΏlϟ|?d␗k6Y~p:6Wm)QG<ͳCύbu 'Pد?6V_2 革pqUbyPd0UGq<(#p5鋑: ]|xsǩ?1h ZB<.b,~BYFTj~C_{P&.UyzoDoDse`RE#;.);.3 {}su,Ezf[.k ~TmQj/z^)I"d:JݢEuFcʒ8W,iŶe~A[S{Z[CBl%x->5;%7w㥍l@c{,5Da}34M^#2;sV5uM%yG`DQ׬a?XOΞKJQ%@Od9Ʊi2eXvFu8OiU4NJR![TV ^tvjh g x)|3tV&ԟ`,#ss]Q[Am2^x~Cl4$el4/&& /74-c'F; \9%7@L%IR_E}eoo6.1:sd,BmkO)zP 嬮@ז7C(U`f 4J_^?0nh_M 3= @G1S/<(A}(&uY?W6>}I`ݜz;Fp,Km6@(3Zv KEͮ@8Up .mW' ͜ \fMo!k,-VTpYf-6Po._X6:+QQTw nOne>ТF;`L;pیgNXPr%^\yBkÄݛhHѺ~O k{hCUzl-q "3E+4K*ajv̵Ie`GCoI%@d5OoX,L/ޘu1Si*Q%I"wpt{*^?[n+MlC->>xF|2-290Nrf)4y@O4 XAbΝVk gW#}.+,g5xΎl4j(x12[;n]tx6u㿄G_]Le Ea iƠXoRpXK[hgƷA%{7p-IǪ<ǡw %J,0F^ G//hT;yN8d J? m@ endstream endobj 27 0 obj<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/Properties<>/ExtGState<>>>/Type/Page>> endobj 28 0 obj<>stream HWnH}W#hEx 2dvZdKb[8nDKyd]O:u嗛o1[p~᲌-n}rqYl6sfX:8>$>y!<]uOo0o~ő;L N$U*Rx] HLyl[`[WW ]۫8$^jZʵr/SIsY&SJ3tm7$gI[9WwVխb,͟ڛnl k:6$vYb I#ÿ w,mjsywݳ]hpm<~4΄.}viکP"Qh%MF|kEN uM$ a^wܪd'<+m“m6<9dmҚbԽݢ?ы\lW5FF}/ V^kӛc}}Lκ2`uB9SiD\4L2${ȁԈ\κ{0ۯhlhKŷYG,ȕL0d䖌̪Vw2 nxŎUjsD.KRf.b yHm߽-JMV[Ŗx+MVm.6>nFVs{V;Cb)avփuWLrbzxQsI_!Ltw"؎V!*G:Ğd#YYVϒ=pJ1>lh At"@|ee3Td0b OꔌE`iy7I4BUf% RW A$6)ؤȌ1edWiZ)njpE¤'i(EC݄9h2pN~<-4!8BH>jOˬ cLl~ȮR=Fwٞ7ٟmu M{Dze38Zv?VFl׬/֫iL36 '4a%̲Ȥlӥ:F9 m'z6@s{܉z1{A򥰘ލl?"cFWf#wX/D$%b9Fmwŋht,ᯩQm"zBd)1VgP{K ?g}džAB0I+'\ygD"jrɓQPy ^OlK;;ݙ=&#x)vN_韷iޗ6ctI}:N/wm^GalL!G+"z{h*fIŧg)ןBht_-Ltj֛Ü=\5R].C,`Ҷ|Ud]ze49^۴'jH]E nDؖ .H ogU*5GOypsrZMx#Q+r\-Ww~"7fG]!Ҁ2adEwib6L΁Byqy_ᙄ¦*0JdZ<<\A}G-.4" -MWT.d#Lu..kCd=ђ l ўdndCA5 Pa1F::)5kèWAℼ [rzpG:?Q<[\ÖJɅl # ƢЩq9ຈV KP3< (jʒ6>ו:, CODդ ᜪ(f̺Z~S)24r-\=A;`|G&4tYi zu'<ؼ{ K3YxqůP9NWk ~ܒΪ*jQJT3A#rUbSmIoz&wĦ9| B RoeYRyD 'PRIveNXL|kEdPq!2~IEH]^;P&x{N#t4,q0IҗVTS^T9A hߵ~# \[gTcS@XQ7sb;D݈Hb 9h>@ 3~w`6'7$t@G=\TU͐K"\ Z(b9 If(xڜSVphQg BL{IسE[( K*[IxxߨG$<׬2i(m/ǧiI]~χ>]"#TI]Q-ԑm*ni*2X80P;ܮ;ls*וatS hEF)lMlԇJ)l/7#_|m=chuF,Ic웏oHaP!w kŀuB/P endstream endobj 29 0 obj<>stream H{PT/$H0b DeY]X,<KX@)V dѩ:uh2IژFc(S}/TX>q=Exs\:(^-} D=TJ3+LjBA(aC L;2#0~a@בi(5|hp۱}lsU#j?bq}Y=tڈ?h@ L+<T19i`SU˷@j~P6)*~U40EpK .@a@ £nXX<vy#| kSQ %ʱTm [I{o1|8S`9@ ~x= abb f z+l9^4nR6+t;NRP D3lA@HRۨ.dyTJ4ec=bxr@ <6}LWyP)*wH{5%bv*P|5jYK;DϻI̻?*iD ?@n`Gm΃N"ZN@+tWl'e`@J3!@ ~:Iɢ=lf'-r2'I.̉W6}_P0߃ArD-=7uZ7@ $B L+ ZaO L]f.M#a6Uѯ7ז"Jl@`oEkAc^&w3I SLK#cw5\<`iN)bsج7:6(+#TH3rzeuq60)"QP~O\k/7R)L{rMYtce\fP%*%zf]F:qeK⿉!*|BSѷGLJ  #< 40!Ȁ[sئ6_:|f}N8rDάgGX!&[ìCVt3Qܩ)!˛i\w5VY̵;LƚiwBn, bu{d!1~gV=oTL;*6(;;oy U+ @ c74A6a?U1]tD9Y3 6}:%EZlycY2O)1(0~qWTf(NW]]F65TnTdu+[~q,x7ccg1~?SWs^#qղ}x7UAGҡŶ5Jme-?{!":܋ZPXw^ eT2^!mҥGjjek Ġni`ۖ/ckTXEb*#[*B [ g!nd:|=ݫq/]}z2 RI<9/njǠOna #<]U\( qYuܶl^]SBۊ|[@>"~9w z"?hy"-[)-G^7(;K_$yMY~)BOТ\x,2ϢuO~tcv\7֜0nix w N V @ -gxܦgÙO{?YxynhyC{x'5@ &Z*i[9ori`%5LL%/W+m)_ʧeȷg鞏r+w/2jy}Nio1Vuupmj,HqmbއO5@ &Z_UdV~d-5Lt-Ut@1^\,g)h|oVﳢt'(g݋RUcX!7TbpCLu6vVgc|/<<D utTdMQY%z 8$>/2R0kv VpsF72x="/~ 7 ׵5W; in8nƦ~% 6=bс *,"*d$< C D\Ev3ٙm;8v wj 3mW*ywi!D\fp<sz0ߧy52~} խۧ[UEVPQ^%w1+X4>Z VQY>+TU&RWeTeP;֨xE*E"CK!'yB\Q =XYS>tKjADs+ʐNǘXsO >)O$Nk`bikB{ g#](3 *GЍC}yM]|($QN|z y;h .!ҎQ鿢_R#T!* ?@OP4<(b3Oׄj)Y~h5AGos`Ş4UezXU,|R}U)JS[)a* 8@Ҽ}G%VN;T6OXB|!b !Brܶ{g$ HU&^g ::NP ݺ=r T; CY)~ b-[-3뭰*87sYg@jVԃ̺֘ң7Z9sLs2ṅA-W->ߟ.vo`8Z}j2.PG~y-^MV.{ȥMȭӄ$PTT=^O!jk K㔥IʲIE 5=DXK,M,Kţ#tMEoRb ]Bj n /nC}2Ό@ӝ{jhc3t1ptېv~ߌgЂ۟<3f21.\tbD?4׏3lv`0V\r2FPghzZONeC!$KʼnlFn&da:0%"PaTX!j%$:^QٕEHծ0u~H$`R[–4䠐H胯"'>F< mMFŗ-l` `toV9`yM#'k_ *~Ŵ֝ߏ~x}|+T۲aKn7NN3㍇ ]h.x?j?SK{US~I͖J9 G64|,3-+{c߽- SH6*$`U*uOOwO{V'un>m9_EEn<(G-ϩ#\v^(d7|G2 `0 Mc13΁EkK4J5AAe{}j+eK1PHIt It Co|CZY:8Hԙ(wt'{+q.-6^MZN,ψ,|勆9`yDr7Ŋp?yv7Mܰy_B`O x>'p!mtVt.yDC*Q*L4MNh,C1f\أ%5v}(׶.mC^c?e7 -Od2-苇]_5}:iXv>&{vW`0`q]~!NїZ&}EK奂+ł8ͬfkDK-aC c,_y[kcV:^ee'8v9r6hi o4 twv?hX^f*U$"TZ+@n,;+-te2v;B0"oUEU*J4!~/ҏQ[R{\;f)lj93̙:{Zj_Z6z;wӲ{&=-+VX'Ŋ;V#Ҋwckp'y|m'|5x[/>]7^_u Z7kWXuk60]߾V@ c.@!| @ +@ Ю.@"| @ +@ ЮhۃHO?Z{WԈڕCVOPW!An`Z@{.[ ?-zmKnT`i[h# ֢%J|;o:Un]`rUm|%sZ]~'7*o?Ti#OX-.k[aPAna] nׯBwnæ"Y`:_ 4}ZvڐyoWsF9U4Nl+b;ۤƻ|'kƪɃVlm/]SZKH-&+X뺷FQIUYikCnKWЌ@ Xm]ou֖rJlx4LBCUUWf7w&mzٞ_7?LC;V/}ϰgjTZ9r)\dB=6,]fP_+ixmѬ]%󲚝8v 2=._p/cCÕu&%[<Y1yN6( c,_]-\A=ў3>Gi򡤈5gW]\.Bp[y^I,f؀í$x@ /*,D.:YK<]ãN Q"!'ݫ~1?E;PJ2?0D8W^&rHAx(AXMJ˙;)$$EU$$b63]b3}/ KِRMF\ !-yOC0JS?텮'k&.k 0.GL(Q*mnr T0$S }QE~3 R=u?,ӕ8. ]a>=AWY6Hj(:;FlttZ\6*]yS=_sMwR߬q3)Ei`[?_pnrry?!% !&W J[PINvwvLHGYCPM ꘋ!+EKzY?;p+6vOdEwPޛÐWr{'|or6`Q2yN tCmzra}Nz34]u\ ZO1' 40$4hMzqHHyßj"a)Bx~oܜ⹼ V:&/qL$3a,r\|y NFN6eoIuK=-˲R\Iw?E+X iO(^yR|Fx@6H ҌGb4XҤ8,gEZEʑY OS2:oYVq/f\ MuyRU(6D͡;lZͅ<ȬYR#|hY!Yp#J7ߏ*@T 9E(O#6)4{wdä#dE\/Z}H;Ȝ)zf9uxcWu9۰<-N7F)swz}Xpi/x 1̻:0Sb^`fӅ}nmh5lK-DHsŕw4p/v0ࣚ2ZNj){R/ϬnOϸĊrŬB-寽p _Rk|*.4 a×=ȵ,W?8_LKxaKqV@qy$﹉UJj H$5@~K}ߦXVIisXgFMn7+r^IGPV${-#osʞV?otA+qd2~q0NM(cQ .(D_oY8t˅bTÝp󠧌Tabʾ^o W 4 L">=#E D-֝j;WWdmc0(4ꉬ!z,Jfb*<drEfRN`+,cH !?NhxҘ~ARYNo$QbQA.-SZ5//a=~h`&OxU3Wxh0GIp?beT)H 6Jqp? U̒& !NY8KzIeF6#;A'.<J9gl$2s~8mwx #+4ZOzJ3RǼx_b淏ˋ& jgr6agq,2O p9ҥy$ zxx:kMVTd8D81l R֛&Әyx/=8Tw\Xmވ(NљY4:; r$J9.m͚j9l+}Łz8mP:gS]dJ^tٕwTMC.\C[ӿWck +8~d.X/NƪwHO/6s_O{RauPnj'+SI'ADI|O?|ܙF 2bkqe7R#Pq~i ~25Td]e@/V:P~ҞK#ox\Mu5Y/^E{-pA3F3{7Ļ&dX_Htt3KQ&hʘPc>57Y 7OI8K lޢ^/jxBԵpӯJԆ{Ա"sFp/<⯪fhV ,U!'A0K)vmed4YY|eIG [[ 8kDB] 1̞5U cdzYqS•߮L7ݷׯw,6]?Z|/FD)R euZ a!=XBzʧ;MŰ3.sr=ZQct2fŠhz #  / _S$/#n+?Ub5N)pP qx 6MqgR6$>Wh.E<dY+DuSΊ[9{>'ȣ)caXlu1 lj'VT+EV쒵/PK@>$J .[f WM̱$"z\ikGE {𜘳յ  Pw[{>L,M-o[?MfsD %}La ?A}HM"wH'-Q^M/X3q>ᗗR[Mr_xk:t~6%t܄S|pl2)&Xö,O!@;)׈bސjϮoYa|،rD)ow"VK܎^*;W\ȝ.:,C-q\GNDw v۝8Ukv}cz3[uTI:F"YzEO\$-< T2(˥L=jan3$WO\|Gr|͓ߥg+ZH5# P\I87ײ^OEIWvb͵h ˅ǯ+&s_> ?EJ6c|Il/0o= QsBv_fS PVȮ/zUU;nfbNLM|0הF`ZCj?R!s {v6g~Hi$LERSDʌk#IytD1jtED XpJ& ]gr6OHN25y9yQBSVJ iJ;>ÞT f^L0Q%TJ U"cC"!X1 DvٸJn뺟w#ďa{}O]1 JIr O鈀.Y È165Nd)(2'")T)sFhQ(j$G <-a|\H)yU}໼BvѤٍ΢ uA >ҥbąF@'DYTwl)]\J~& Gٷ"H Pzq-JG"8a8<:oZ1m.Z4`RO1XmdxQaBŷMNjޏw.nQl?{u [8/8I巚: tͩOY|)7UDH~O>|>)AGb@IzIq ,ЛM@5VXXqs?˝)]F-eެ68ŮRG5/m5 G~ޢc[!^,d <.1wәs_w& I+@zIg ڜgvE_DTPERH" -yM7H MwB} `swbwMe?ckMAB\Si&mI.[^"$O3avilƳ m0)DRSR؆7M0DRk)j8+_tY%oqB2PKE">LLfD3jloa@@ًJ6MA" )] HeⵕZ_YD^/JVkQ(&ATq}dz/T\ 8ZNiqi6IJCA5[OF[l5G>\DڭTCFM'FX)Xfঝ([&ya6p)61܎~H^E8.Kf< ܙ`lG, 0&6}. QisOMGpa0R^ 06!b7U%m6!,7g<mE9_4n{ŞZs k%YޯGMsCX~=+$^KAJ+oy9ł-`+ܬօE0M}.YtER6]Tu9$}JsF _;Z.T24 >8*&t}Q |CwRblEԱ֙ gq4ۊ]K{qu}*2!!܀tAofdz48sИCa -5grGNܹXz}b8o2Ti"v:[ .~dže7~LFpb/|ds͉ލ&M^GYs*>p: ld[QME ruȬ8ΝY_f1( }\~l(pӳNtR0JE~6q( }6RaVB0Nߏ~0~[ǩ|v7"xfX錪)X+A~\OCi՛Q aq`%:fCӴ(2o&XkJPd ԼIyVAf1Hb[Ss U :T/Q#4>}ml! 3V_R?R_8NYZ}.5wGqE+:9Y Vβ |!*Fh)§ ǵ5l ЪFSF&xgUZޛ~ܽ^,Ocvh@:d-UWJg쩿nfOgK3YHbtga4qbSj%z75L{3T؜i55^ўа ;n+9,,`ò_IؼHŤˮj*N3vʒμNq́⤡|192YP6DY38o/ƱC n+i@(,hְߐڠ->6 9?2`5çfYzT Xў @j)kZ(l]! GE$TIkfೆ;-Ιא{bՍ^]"sX1JkbC9_~_9"M80 |)"~}r(O8yj$!I=78Y+iqx܊GڰbpW)L?֒")̧Ңft) )?Xe: E?L|ĉpz_EmM4vMKP[{?!,P-&s6?H ]Yd̾EuGro:4ٍ*B*MxVevbHM`r+߀TQР jҫb_zGaQB 2D}5nS>t˯ TG5R~oh='\R֘΃>G6B2(m{<ؾL:;9,ymeA]k\1# #d w%YR!M@1&-*$m|=rJio|g|3gY{*Zqٳau2({"=)]d` z1ɻ?7~M=}j, 3# NgC}W_ʶ]Fd ؅34b؋}SrYc .RNzx^$O;İs*|h AøKwaF2Dږ)xnN3v p^eԂY|)JLGx)x~W" 7rG6&a/rK&I-"u_wT| t/hTi`^`EycCDLv=;m_*uq" I)#נ VoXB}8fuⱹ#DYW믘vUN3nF`JO J?nPNX <Њ*HkӹQbjFѨ0lScwYPji辥2Ű_jsrp"O"d3ڃ-ّϯh1BQƽvh:UGٓ"`oKF=5'Q)~s w.rhhF=gTqXƲWmZC{H2"XN&e*Kc&: 7׃3RQbn. 9OA5E4NSڷUr4= o;xX7%. _t(&VJl̓啳Ii&)xgF[btnZ^b(A+&$nlf sxE59~F֮5gv IPhK49s?z0v;{&JHg8)ثÞE>P#5Qf>z~ .aT1XtƉd.Jq|/~n٤Tf}rpF{5|Jp'~yY!6jB%?9y~]82ݏΧt_R@]") N/dWZ8K͛ٓ@~QwTWWSGS;,+ҼWE@[";|jlyȻ<4݋όiK}uZ.C9ޣ+|{WAy~J[sƐ rV8TM'IuQPi%<Mڰ=9WJ'REX۾H &Zf{j<1\غOfF8qb £:0,ߍ_H447ء;Jz+?(+z, 'MEXBzO$w>-]I;4`Hp*b)ƒtvgҕbm4V/EC^~*gaFpkӷ欁EP+Ygo:idFI0p;\6B~-w[M-sK@Azmf1|b U2([E `#c*#V|-DMpT.r}|z/\,OCT,ndR5>ݴ!(c8b1QڧʂaHPH ]`Vw),44F_ hbdQ@ #5"x d5^|YvLu?bhڰC׳Bu>  nH(؉r[5ÂF1RCCGZ+)mdl՝>SL'$Vȶ? ߪX .IXVSJlM9)7iDs9mr'uE&ygE<,E1Ox\IKhZU3/w_K%٦P}*ΫV2&35Ff 0NSH, BQ`[t)wmH+" HV5f:[U:gqg[j]Mtz/\,%,Zr7L bnJ_6R i.eL+ѿg 5⭥3\8uv_aF>!.k@7~SjXS E /<~m]#|mt&"tcsf8TN{^yF/ѹ0%jd0|M޴rݍD~^ Վo^9EH˹a;tA+D,UV&&֐0Ǜ>I(hl Tv'.}vnQN]>a*"[~Y s(ɻ?ǂR8}#D",>jx;Hߎca{了V[=w`)&$^S's֓MvJ֥Bkȅe@Ǎv3"٣שfNﶹ+#^SCYn≮Z3B-aq^\z880'b/NŊ>^1X@۪[v7O(<@tDۮm*"f^J0~0FCaCL C!ahH4d2BnWf)7P습Wy^XozWz3gߟ|,hF&㬧~6}<% XKdлҫU#מ2&[5/a%cvF.GMK҉'E%},u_4 k:8:δ}هQ#z=MK/(SYuf{byPvsMRT#H_M+`0R)jɑ&LUQ@!Z_.hⷶΥ~;`@iQ댫VE q2-1`>_-v_V#[2 N 8ln juyUה$SƇx rlURo5j&Ln94=F H6 #- +Ή KC0.B }bOmڜCz|՞PPб2Uf ,e8O` PfOIJ a_3-DF##YiБA{l)I|hkQXEJ+;ui(|Q Sۜm Ha3iL^ԖNl`%Q aH#@,9bM,IعWT+X*H]rіo__jO t0Mʴ,.]o#BT"J8/<<@"[9|FTPz 8>6sA4 (p,)`ݔ[X3*`~`.,HB{swwrC 2`Pz*{!qo': ~W"$ GZw&KWaA{yAL k %gHβiù|Rg`P5oR{B,6t?0QHb < $?,->b!{VU9Q,>S~%q!YH-L$w]`x|9a$J+_ =le9յh e_39Az 9w=jm#O\{ 'g E+t֮Pbs~j;S_AȑSA'nG[u}w՛,.]o Uzr)TC:Zj^YI$^XxԆ%= Ϟ9YFOp1c{d%+gw[+=l턑<ޮNWuѐ԰HvF&>\3h61\J*k"ȕ-U_s:aLE@A~s*8%]h߶}?ܶIq)b(wxN1sia*5[%ӥ$s9.UئV 'R -s> #©c&D?S3PȖWLăe7{by )]f(P>0 T^ZL;Zk[ W=2`I'>*xrM֨kHvBG3 Pg-6oet "Eω {_(ڕ7Nbq) p}V;Ӏw續ZF’;4O&D mJ{Zr(vkǗ+$bg-jb>4?-w| kEC`sMN,KV~%X&?Y_.& M=!ST/ָ+ 0U1\DElJ(H" Š"KȨMm!JBIKݦoHgwb8y?kMUy !/*ǘjnRYJ„䮧>-oGwq)ksLAQ|)QA$ًU0H4=wG3(^P" ˗FouM ಭjE{ بeC0V}1na ޞ5w"3L]j~p g'Li,ۏԞC?oah49BA0/j g Hj+eG皻OB懿jgć?˘w/aTrer(j/*M9tMRdm%A%[]\$Q^?#Č^C^ (U.'}_~Wg't c  ~x˿JϋzQX "( ƦK\˵6lGgmҡX^=k 6Ȕt)JQTM|C)iÁ7Q+ eU?6~PQ&U ]צn9n>Er`}4'(|AaMi*0 Iةn@+zʥ0tp0th72OXh7$!LYCz43 '캞8H$RG"PC OiS0͖]% gL]'6YTSI=j"ݘIXJ~#_ k|=1~kr]Dl\u`b}~+^ ´ȩ^ȴw?̑o;Υm2WHإۃ?سN}+ۘU-.}0ΙVEgF2چ8ILP\i"Xfz]rGؘKIzk xd&x*\pWDDs]w~R%8_(-;j j+l. &q/nGr,?TK4dqqL6)[`MF ,!;En_FvW8W[.f:W&w; Ԑ8j*k;i2(ND&a xoིaVhs S^wWyQ_]oVzv&aѪI [k 7 R;5@>jSA{($nzg 5d]ByA :e.]HBPM!k[&&V(ehܵLjb @XuɅBX5WLbp~u#eEmJ)MQ-0ƌjsNkД/1DʺFŁf fCnBS梛5 {+$E`ۋy!D5Dȼ&U1BlΣdgK98(K7K(tEy0@aFzg%eguwߖ=P<sP$* 1EzoΤAnp8 KÔF'o;ɓYD2T-EMB|@*'z(,64ǭ*Ɔ$>"- _1T6 /r OUMqˀw7ZPѨ>3]/NÉ0]P::ԑN<`O-F%gϧUD[׾h~ֿmu$JϪ(Vx֟zBx]QEL<mPeNpHQ]L #M7SdļLu]j0V7'z kp㨚%R vRZ"bZz˿Ju~;#A5Qg袦Gyj)Lda؛3#*8oی1z kט+Gi0%b]!tVبySo|lC՜#OW2*hFuSD<,.Y#7~R(~I1ђʏ^h? dy^ŵ{~NJI(^L;^`b2GOe[Σġar$iH:NC`!Va:v]X4Gu¨7D\Ϯwcرn4_-ɺs;(e,l`~*߃ޚ@g66oOi@Si=>ˆN_EJ0YRybZ~ATGN D {Q]G3VxD*A6f;U-R,VN ߍ09(xw]qO"Sr>1?'U~-=S|%Iv>l&،6pk粡%\V0N%/(@e2( j P--=Q$WO&@>` ^|˿Juyw3~B:UhA5;yܺ<\ݿ胴A~ҦAxo,RhgQ,}h>a9֏R#\ ]抜0 ,Lêv<5* ʶ҃f9: - u0ĥj͵a Åa̠1&Aawʷj.TEgb6nH0r,d°"No[%5:0_L"L ?49 ]K"ˑb=,օHʽ5ȉg?JŲ`:M[*>c6mK ҕk}$)R{%}r#^'Fj"Js( l= (v(B՝~MdنnvȹztgC% f=/="QbR`tff1a9p'|-ڭ u)dvLv6lCҊJ/$F>n.%֟E{^8w?a鷧mQ'Hl֝)}e.*qԝSmg`J#=?MgixnP_ЀO5(7˶ig}7U#*么)%{U9xJXp:F>W{M-j2qv.q2u)|݀`0t1ul$''HVvR$PZk{9.*=/婦-}s/J{m5?1*""nB 6vml r:XX nȸ&bzP 7!>hIHOJ@oϳog?BmZ=jíZlȯt]~^x֒M,:8bF,;l3Z~`kp3-aHagl)<^b2{Ej9 I-/ّGGj/e#pF(aTWfypӄZaRhcDC}tsI%6q#XN9 ~>(~dʀ,;-q,6G/_VÖka|qءD^2'AIs5+M($as?N3BkŒ]*YnzeIpjP1J# PSʶ(I []+Հݍrp=iV eQ7OY햗~ٝPMDpN :ҙ(t"[s׃?LOy/_+•RIL~U=w S v/. x1i5TЂ5P:+,. ~yoF,L|h^ JNZؔ=nZxR( %()/L9>NwF͋?Q]0JZUu㰞V2{O{X̽Pf*`rYRs%Ҕ-\a).y#9ć/vz "AXBXע QePֶ n).j&(~ =ENe}Ni:| ?cKlNݱ=[fX|*zl I9UVݾW3Iܙ)Xj~-8fjѤ⇞w,6=oUʏ%JfEm+ b*XtOwt WMtg򁽴ǂZwbJP&րLf/}a]5)lъХ;H6KA`[ "h" F{sdY~|[p0z īmʜK#"jD] \ž%mϹ8J @'wႚ>}pj`<2˔ʱl=:2UA'i^V^ H8Q/dX0pjQ\pWBL#/|ۀ 2f4/.?sfl i 9խmܻz?$ϙ\q2c3bgEXpuS +qT r.liY(MI\~j9g̉uAf# d+8U'tXϑpǶjjs@bT]lNX˙ Su3e2z%5b}}v݌^Uذ~:E34Ì' 1gaʪTOSD%c10FFۢM$4"e9]@~'z 8a?qTc%` D2yKqx'9yUSWxp[Mo&lb,-~yo&,/70qU)af,b up hះ#[{Z A3`ݱB|`#8f26.zS%6 n63!xb3+ANZ/U  h4z|q݉Tkj2h]V-xFzVji"YO2#>N?h7v].s)ϾùŤ@T-I ?W,.(f2Han! x=s w Aր5Oqb{4΋)Ü^wcF'S!|]z ˿ݥ/kjHb\Z"VP+) dv|N |;fG/ K)/7 ^0KH? ;O@.} ؂z~TWp<mnE@!tfC9ߨ[X#zBqͰ!ʙh,@/,74MvbRʦ"9Yj i^OLr|S 4s/6BnRXE3(&,%ɰDgg{ΨbvPu"]>D1ԋ l&!^ӈg1˿MϛpgԾHR`ЈvRݔmyֶKUG݋b*iXd˖f2~ 5쬷Q`23ıd{nt5 Ih݈z83HbVan Yg]3Kۅgj V-bždI<-EÆ'5'2nK! Y9 N{h00nĜ_ϗ|9k`Y{`,^k Ęh B]IxY-iz-T4dTfA;qd[q+WJhg32'R xd=L },rx;*7mp&r_u"-~Wᙵ]-W/Ms͆ZgaNƣ_k_ 5l0T L!i`L,ZVCRdB zZ;!zj~.=L|; Sב+.Xߏcs m=}!M2?x0&5 fThw䮢$ӷ҆S D ݅=\c9yt$`嬾401U-d1M+QԈITZǩtz 7Y%*t9ǫ*($Tr %z͒Kv(n$GzvHXR1ñ%=`>jE޻A>4}#N[^R)/OpQ}'D4i#Ho¯ŠҼb=C )F BWZnp{q^Hp!{"<8#"5FMlOlG:"?_44m%DK3fX||2HER7=:˳JiOfe ,Ie',e3k+ ntg! 9-]3ʟ.PK(HU?wN92cYQJrKeO 58.~l+%ߴAq `-ZØ!,pפ5u nď¿AOY +]‹ )dd5'SNUish׍ 8[]@ܪO˙[|jVdw_;匽_lNc gt$ Vf˨Io4^k[a$'[L*d8aI8nRI{e{LYɂ!|Jw%iֻ@ n!$wc<ڼ^,OQ*TE8PxT=%J][QF - Y6Ok'Mn (~:n#ߔZ ThW؟ϬpXLsꩫof:ec ̀a&,-)mm N[PO38$P\{$S2-Y`< ܸ,"C6_\JKˌka+LV?<= ?yX4%kʳv Z65@r#&DBDIX2PXUtUD۰O/ -w$F#i5q^>o%q%X8!bx1HZ @X@ϬLN iZ*20I`=ˎ~gc 5. 5|=؊"AdK٨K25uȽIE蒦}.e[j 1/ #xbo5mITϨ) 9NӐD/Tsƒ&JjSnJBw)i^nba#jp'svz7.ևލRHhK+($(8Yv#"rfozluEg;h z4~³c_a'-NsF GحqTw[c:ވ|"I8 /vh3s~᏶k Rux8{|Ix>So2› OvCGa_~q]WT *P5qc,"FA`,$+±L\ZQ<%/N6߷ye9sok gY!k( -O#@͂ՑVaH汇nY,l:>' 1mN=M/tbQz kx =g~dc%k\] )o/?mU5ڭ3F>Y!BV~=2C|߳J{#e_tYDlIAQpcքB(0 ׭^d/<9-ܜ4bFȂS'x%4\ơK>zزӕɤBa\#,9%WRxb]bM5icyMf}'Q5*$Mnj#zLfez>elt%q3FnŅ6v `ab2rʂji>_S!O_SE͗H{) p45|M' pVCz!zMZt5R>G!sUa}zR,o:QYjȺ- [˜BCQ0 ?HV$Z4Yt?q.!+`U Hkhn'٭gW@H|'shn9:P5i 6"qPk j|5UE*eeِݸtPkދ4!fH[߮*B짭J$cgΧ0ʡ 2 #LxU;YDypK~/lN/$qrqѧ'K`gGH<>(WBJ'hPd>*lJ+wNuymA̸0V㜖*Y{FK]^=Lj*ca/BtT - P`C[v^Np*'z{h< u? nS}/vu@ H2P¡BU-Cb+g0KU/"/7[_XB- Lp_]yZU,ED=mea~д%FfStnxVs& kk :{ŷh8g ҭt孢XLl1]VwCeuV5E0-?i-1>3QƱhX4,Py\tUym69639Rfߵ BPkԀ&MRꑙ=~Ќ`(9C%)Of|\o=Yqe1L6~Fd1ȓJ[MJ]O^n/65r$m*zgڃdnO~i{!Z`4Kp@Nr [ kqYI4>!}ĊJsS$:j8 7XEwhk\bd ; TEuw1*w {h~(._?~zR,OCv=Q_Q%& eڶ ׳r䬮 M4$zxQa#yVՀ͊)k;0A\Fyc@qei{Z{Az5艖d%bq=w^q8ȞIU=C!j07 0؃5Fd ᶣ to9٭he8nMOEƿ2lMs $Eݼw+ 1A AulmmޑP'J|L aR1_DTBChK8iDn;A6@v \s"08ޟkJ&; 㘪H'VE5Z\')Ș⤘Z":]%MJ~-}|и/p+I$a#5<+~&RQ(VJ1^/i$VjBeP$ j 5o9lLZXX_MXcd lV~]q^ BO f.ا k7'-6 U _X1iy/Y -.hʙ/OR u;Al`džtSe_$ vMzp:O1/=GiCSzҰA=jd0itfD/|_i+~͗3oiwOpY {'R n;iJ3ɹ"2u]pYЀ^>^<YC0Cn-K<1gqRʟerѿc5b!~=͡$c$?VEp]FN^'BHˉF*c8کm8ކbHlJO[p4F52̦iu{-!5 6v%\Tc>Hk޿Ȉ!C5caiQxsKLx עy6PiTMIS*E f MMQ\T%@i{suW4ho#3QՊn@(^| (RSFwDNW?x!ɳ./cY?d:b 196nvx"2GNEo9ِKvR᭵)(Ze#Vb|/H92BtNH,c3)U ګIVyiVՈصfr-8:knbt?^սs|WPJϧm^m+V͡3oM;+܊(ވK9k*((egF':UO4N?HO_2q0: :xO?6i+!3:p2%xr\j wros1Q5d˘ՙ7iz}R :xaE;mBt^jkv ;A#,C;n(g {Qh&j蠎07uzPб/V:f)k>l,a?~?62*\jԷ5W;O,?؇Uvoz+i`nMѮH팽{5*}c&͌c]:O&[W8A1H\=ǟ ƷN.p$lzH*V2t9aBgTG.&j77I8bJN>ozwls`]:$M锐+"SCV*yz{j:|w˽c\6͋{MHMh'·lƻ87@rPP`7CB}E^_tQ% SLlmg"` LyjZ+ Ӹz'$t)(Dt%`+^N QL"RTz|6]?f"uD<WԜ.K{H 1X"zL$PN cܲ%eɽT-2srO w강_;n[_dz-wkqf9Rx}Ԡ;$ 'dklz 0U<q֠dؤG!~1+v&48fmddK'V{QK&b WU Y]f&HYfkB232'Ծw+9.ֵ))#K%$ՕpFة|B8k%^Dn%ΌbX0CYp']u t5$I}Rqlt&q~ vѣN]5yMe}:LY "yuI .}ìAc@4ig!9@DK8DlPMWqJHfPLgfƓVj腈qҘq & ËIA8rˬ4E{ˤy+r-MEOyWp'eX K]FUñ:̀jmvVf -5_kV\f:0Wmỉ(^}U1|=id]w%G\5 Hp+zr[7?I#oP ~+ZOC[=%|}R wY4EDR54jYl['"tGU ꗍ: Vֻm~Bw{K7r ҥ2AgծF%:qR:8:a=\Rυ6K5Oh  9W=}Gޫ^G~<(v8"sGO.%yၪEPtV3['?l|JjtRYBi$'Wh&-Zx lr{4h1E#m6dC?pW!IHD, Zx$U+UjpI R`92rR$nnf䬶:+lH{S[X_=od}Uܖ\ÉLrGS~uakXlp5ձ/Zn)? z~CT<%8Aۆય mܢT'Zߺ[OȪlpW?f 3,y6?9,1utU٣Z*̛Bsm FuB!k߸S+Y|[/8e2M$x;þӇHf=S06U}473ՃiU5@\ς橰y" IFS|A~O5"|:}_4THo(Aڔ:~A*TW| S4.f z5+?lO V鮮ACg%ǧRy7VI7DrIM/ajVsh\n+ݯ?e.>h#i;t5TL)8.Nf0r6­%w)\ eTXvzNnPh!/.}J+od@?wQ{bz}œ!]AE ?n- '[_H~ 1yi,kS/Ry$J=gHM&RnH %IE>DIaFUvʧmCQ@L/h+%*9mJG.oBQ7Oysq}> yTF sү'ҭ5#`/¹8)O)>K|='=vA9Atz;ti؉Hq, Lq0?D.˗n:瀜|N4=kKq6MRӃ>UoH_hV4Ɔ6ȧHVBfMj}Te7'őq[۶0589fڛo-dro!?4}F ҡuh"e`Kdm*_T~ e߬ldE;G|4} '$)C#T%(%9_3.hn,_s|SBL^(҇R]?46/^ܤ"J_MӔ#*Dd.y~ąUt$Hsxr6k|r^"Le 转] ¡T̥kXӼ*f:yE"ƥ"f )yz:YB{v нMsɟ?}*F FȩQ4dVbΝbB4xg\>8LLVPfL`ɖo5TVDVh_$ DӤ}6{Hm_M)~kH6\)P?>wKֆ;4N`)tfqoxCۨ}i}-hW|dD9u˥ pAh89h.JAQ῾g}.Oө^KTYo?lf}ݘ뀣=w51P5V~=t~`@k*@ <I`U@k*@cIiP.&׫N}vJt~cܙPuMh9w`? 9`d >%8&?YZׄSs389,fJt׬mwLsu:tGV~joPl\]uW ;%ǂdb(}W?%7dCy埻pӸ4\;2? #aJdfffi}/T&*5*5 yfoRί*$YB|udmN{;ؙRs%)z$btn3)}7߂WZla92{sF}'Â;JnSezh}v9@kbBIX C+4I)Q|I+Z8o&EN?0i-gESizI6H31*?}[B/5_;8Y:M#YW6 |M,B@W1яGWD *_PoL3Cg*T&oeT~V`@k*?A͑xEvP/Pφ])0 Py5 @-hdF>PxHd< |M@WyP)%|W[PyhTĵ|_ߍq pʃP Uچ@WL~ۆUUE}w^IfgEÜ*?ivPe|i{}R&W\]_rW堅 @}]b1YC&l*_v[*Nɬse.^Ь^FUtkь?L(9vڔ~`cGL'?Ӿ;ivh?5wP&RvtUt38X,Y7hAy-h\YVNCL^}e{=}eWРކ nt#:9*;g,EUbR;r$ na;3FeW.r~75Q9VĔ rna1sAЯA+} EN0 u'DOœ$W*|1\p,Y ;6c\ϙ>T~L1zD<vpnH'"*%T^'JcR`j 僟 A7LPM2̄`eU] ֟_?ŠΔL%+3|3ikE迎GQcjgJC>f}ROm7E~o b0AM|@pzi*lAl'IfB/SGO$3:{ȏCPd]껮0NЙ&/Pf]שSVbGG ̯S|/;ʏC-,q|QJ73E*P8Wdn~>T@*_]* T~<*/Gݮr*?r*? *`/D h@tOB!H*|!VDS{PyX< Ӵgv`|@&T@$@\/~M|(sW/qny. ,"V7kPťb9;ǵCOf2D1cXOD݈%ԨZAD^ɤY^ў0c"!iʢ^ԍ87yR԰qX|~8-"@YN-,Q!& m|my!6sq#ܪ4V{őbs{Cp@3CTdqN;m5ͪUHW,9OE,!9G#*~fŶm[q=[?߿ߢf/=,/9X`&<YXf-` nkY~yGå'NOQ(6z5@ecpgq  zN1W[0(_qv, 6JHۯ )i YiӦQlܲU=s?/@;6{#֌MI;a憖)>Ŗw߲K67 w3Y~3g}4%hqp؉D_򢝍O2VѢDUd|fSXF{-0+wP򆑍jc ={ч➆kc0ytEEN{j-f冖7ZUˋpXFTχ ϱikygPG=:j寱xצ4aE^a Rߵ6̿6љCH 0 X~m83݉`5,%;ըa &QԽL /nyN7,0֎m){k` |⟯< ay-~`L5H endstream endobj 30 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 31 0 obj[236 0 R 235 0 R] endobj 32 0 obj<>stream HW]}ׯ} +~J׎v&M}+]dx/W3K) z-gΜ9s'Ҍ+h7r(Y^F7ՌZmGә=gmNhb?vH%Q[*RiLտG:jQb6#+"IQ%MTQ>ʏuq&ze:I7lux#O t2@FbdT ))u,h2KDZۨ=EY,&hgwMo" cJs,uqz@?p}{:nMyl6xL'Kֵ͛RE[^F?7=!.L9'Å=o`u-o}|CWi`hݚ0nPV2 D7tYoQ萢O}++A:6܎J:t, ]E+(.%xno {9THQgl'4?X_\ו\<ݽ[!\UE6!嬎txi;ΠRK,3qfX||b+FV3 ]Bsܞ|(E>,_b& o[ lB a{\mmxHTk M@h,("6TT=n2UP8ȓvu c_<NicyM5<6wobEr%<37):ņ5!XNerut A Veu.aiP -x:4v"Ui2 v٤*-u;,E¼|@_" .n͜F&bIU|яr hgS:LGe$pU sv7ؿD. gn'`[^,yTE~k`aaXR`Vxiğ{lOr/o.z'Sǹ8kocH)/d ruIM Yj5FXk^Ĝ#p텔"!R-/\AZo70ZУ,*n'*Ql5=%bӼY!^$<_*Hߌ:diyAыo  )m^>ƔMǃӄ^#Mj9^jB;G:֥oi !+G@HE EԄ, N萤ceKZ4-N̐=,:NLW= 6ZTRnR_f%B`?Z&O+fUGk!) 3zU!CQ=t:Jsl^AD]B![K_n[E)zg m,p٠DˡUcA}Q ug9vLH<!/rm1lȞmsbXDi(7Y1bVM'IKQˢ仂rRM>HxB B/Ͻ(B XS77Faڴqa8.7J7r~E*ZRmE;}V|$sëЧR->[#^k먱fG /va֭z/ł߿吧9ς3;fގ63C7"[[r"geU`!1 ExUҨ([X>ewGi46Ћ=T14^8N.*M?x:])U5zr5~{Hq/.^+SM<R~k‡yj a) P\Q(*XxpjK]VqY9PPaŶ~7Cs߰B͂^+~ӏ7@g8$b>ӊN?/I6MD?_7(0aN14Y(rE\̀طmdAjqv$)stUJ62{LxåV`0GϘ5rN"Jɲ#6S;2㙮ϺXne}Bg)s኉`6M]H!5kudNnϗm~_ɜ{擻ȦK [L/Vπd-G<'1(7ԷfgNgh)S8D&/N~6Pi@{zw.{awVfI^k6[n.(2vZ gյsBP,KOv5(s7jpeo =,۾ߟWl=93= vzAXb4O&2ik;q 7 HzzP !N!V^r3i6Fmj~C;{ ɻz?;`ep/*RcKWo:Nj.ӕ/sKcAeh8B6ك'moSiR|jV_G;K"̶vѝ jB? j2%a*F܈b쭡LfB2T5Mk% ݇fh%|CҗMsxyDl/6G&me.F&n̹al++ 㠃SjrN%?~; endstream endobj 33 0 obj<>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 34 0 obj[238 0 R 243 0 R 239 0 R] endobj 35 0 obj<>stream HWr}WUaBdeU$vʛT@;>gEzz9}ݯ짟]a7cW>Kջ㵺zxgݕ㹞&f_ϲbG_n#GV;gK?r=BM+Q26`bFQmAq۾_3aB}|3 *qсܪ=0A2ۺBGTP!  RgiETۄBb*/'y&,Kr,'|Opn4a{ rQA,^DHHCiZ'r"(ә Nak7X7mTtČ[9z* V Fuv0 ŽZZh#2 ({Ԅ-Ӹe3!G&Mg8HlfM*JQWkuL^ B:Ѥ:2~:lLjDU#۬RN<: eӜҕV{3SLu1I*؈`s[!RQ 򅂕hHvHc"DnfܢȄ*8*4߰D1TL 3@PުեUR dIWn Q z.f$߂4]NYjh,<ͪ GD{vmOeUg$ dVSJ@2,Y]YW3j%YOU"Fg[YdlhWR'kRھ*~X\H4,rkǵ% `3=ϖbԌlt7gcv@=V*q;R`i4:a@{C1zEAqb"mQ f&/{_#t7E!4B2m`:Hb㬈t]ATzd(n',Yf5,.J*ApU0~k42Ў գm)]w:0?y<7虍T[/]L|`{?a5<,'wUdM@^CSSRja<3ܙ!i$yO&oUשׂ&gVT48v~?XYE.:FQ qFozi2JQ9|޼!q]z(T-0`1- )QۻK5{1BCQӢT`t>Þ>Pc s QJN!Ā}ַҊW= I:?0?:&Tǿש4^ /(_uRӄZk/lw\cz'9f=oCK4 gilZBQ]3`n})/"v;3ⶮ"saO=+"2{Y3:^tȆ;T*Oj\ђjv>zk63[5܅WـpY(sI>fn֔&-T$o_x\oF6}fe͚[%C*\5 r'FfxtP/M3{]a vO0sFD:huw@]:PB֕"+;TD*p5ex̛uz Ya_ʰd@\>7eu s ^."_61t E4wP0:"^gxinw{eZ¾6c޲*G: lQ)VF_"sm).<5b</}S YJ(E&&B r>{ v`$Ra0'U vP]^4#PT-I: f.4!1`yW?S;Ѽ1KSvւ`0|LMFtCUf)x-ᨤ2jq~6L`K..E l:0( R=-{k֕ӛ.wsތ>ݨ/`AWֺ0lL g%t, D&pHZ_k*3EِDPŀwO[%YN1D⑦>+a1XWvq,`o;}|q~Kem_)ٱ 3]Bc3͢1BxRu>1z 5ٹn(T'Q*e5~$GK<Փiu|G@hZBv{e=~h$c0`qv BdQY1di(tgWYqOܡ*]q2ʲ3'GU xv뮣JyeqSO#ǟQYT4(Uo krQ >p'h endstream endobj 36 0 obj<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/Properties<>/ExtGState<>>>/Type/Page>> endobj 37 0 obj<>stream HWkoF.E*Ls-G$hnvaØYl(R%iίsQ`A,9s_]C?xvqN3fr-fv̖I␠d5qIIJMpß_qJj.>ۣP6b3eZgyyG(ZQִꝪ3u]VZm]HEQ"Eh,"f5۪hlhZ7ERmu]6j=ApVi ,*M3֎*j5vmuS!/4yEE dJo[ZP76Ȏ^lɛlk  NƱݨz^BWu[mM9P2{aEsOuO*Kmt/fa=#ez^_t?@mGH,j]U sqѽw)SURmD?Yt=% igG|zK6}"hӪ6ڕ5VOf[wZ}UЮ u!8CNJC^.nUqkْa0yĥ;Fz8%Z/ZoK>m~KP4vѩ^04"-4jbnj}^ bqasmz|@XˇAp.VA hy=&nQf5/ԐhPWK~pHp/8:~v#>eVL_=H8> ]p&),%X}_Ϟ?4ԉu_"R:&ΪsH1dX4^:Fga},ϺKݓޘ'Y-2QodL>H*}s蚣G.\t:FPП#s6vF'0IzSf_&ْ/gΟ%xԝ&3:S_Jik ;8ytz 0seYnd;*'<pm2nP %u] e#&1]aĸK̠Z9CPĈY9 rUnR*܌pT6-9984 L[ gV7bv޴?`y endstream endobj 38 0 obj<>stream H{PSW/NgkꪌH ʊ"R %0"kUeʴvuni[պ + AwrMTTΝs{Ν݌=tPݢZ*6"݆DIPI*U[>*@%d I4]a֑ EZ{EѢVZk]kF5PW}TH;Gybוg#VXV[,~,ӈ&¬ $f9 OV-:a@ܣ<}AppqEcp v@$@ G܊qbYc@ұ5̓ ,.TP+( Nl#@{0x*uWXC'qcƭp@UceMq^=.3gTJLеeHG-dD#2@ kY^#m'UGed|'A@ S&at[b$؋}cb{%&"v*66*:kvp=zy&;|2QA :@x B qۜkR7l`cBpjqfyQdQZA /EIڜ;#)0 >nSE j$wjQ2QzEAV},C8~$Z?BY%NM :aސsХ-i?2jf[%^z>zS " 曽v_H矫l L tO{ڜmW5Y[4iurJXUD-sjyXUhyqăW|Aw`1 aFk~f,wC>9˕ɛ8ٛlN:VǦ`bjaf{RF+0LV&C?23E$Jaǧ6j}d9L}E"U_&)zl&=D%|Dھa*:"n;*I+-0QWa>0|`Cf7Mjlع9E348~9:M9Jk#LT5VNM^i?3S,/B7s'w=Xi#ǟ ]W\4fzQ_nݧk@ LxWв7R?J &.7Ϳ-_̣r93ygjI [^n8$xMF&%XUoeOϡ"ۑ״-mݩ ;~)T~m?W8A|-P0/;;؃_Br Уm3 YZ$3;@  :ͬOjٸ*&bZJr+^Kȡ=s52Ӛ,ͳ""uQ W2Q[K'㵮N+^J%Z{*%knE,v%*$h055Q]G-O%mȚMh1[c| {/ylzk98rmv*MVvVvJ+ɵaĻ:kZ g&ZFuS}ؾLu@j}Ea2)ٔc({QDTҡR_Aѫ -j$EWR}y~oN!-<|hWkvTG-WWwŀcC7\CEk A v;g*%A,G@X WXn@¿ľ1̜,(h]YL&7P}o(*x}ўմ{%^JP~2ay !JԄɱ{JEY2]YNʽƵjU*S)pmuv1"t#=E|R!T[1Xo#D xv0l0\[~.qDֱ=qh(YRp٩q߀J5>j4aodob57=Nۼ~ffk 3{7eB2TMiyk7i7kCSӾ4+uKJhN>i`"I<*䢷g$=9dblO&7y!ʜULtnoGVgUӱ $icj<(]@-o[5lW5FL׼2P9ɼo~0dj  >`0ǸSʀWKKזוˇ+p4k)XLkl)2dQ(<$YwDk%$`IFpwFT KpIxWyc;F O<#zdaQ?fy_B`O Cb_庭S]'Y۽\,KRr75O#wR,JW7 ! 6س5Ƨ5η5ί5vE[>||Qn[\:69<]tw p. -O 1)Hzs׌1rNg/O٩`0 }jTg\ws/\v{e)#e1}uvD +:v|}H?ӾhkJ3k v93!gC\/m\x1hׁ?b[A o-z%F3wvQ@KHGe#Sa61 G`09S<}|` Fن|Dst񧚷y> l2(>5 z"K1A?Ab fcheyC'Wip۵DȤ,IIÝ)I/ѝi3f7hy$z EDbl~XwuO_UL[-)\SjL.fq U1}?/^{y<>MwR'HdnTEҌGi4>~<5hOKdW? *,AD"ly׸~?~woZ/)f/Y_,*^"/\HCUDoχI`yR H,*X U<@XZ>{j?ێ}Ϻl8/Mr{vݺIYVt.R ׇm-8ζ_3Ζ/uCdxkwV|y,YչZEmZB LWTwFV40-~:P1*jիǺyO]]Ά Om'kZh˽ `oږ⳨r19ov^ub.:p+vUٰ-֮F-)pgyo9g\s?U'PT׉L+pCg;\흭ZeE|mx^o9 C9-uk`3f(aE6sUeobYyK-Ǻj+k+VuڵKm(je`UKnV0-];0ˢ_K( mIrhX+6$@-X U<@`yTR F3AA,OA>s/uG^}h'oN<^ߟAz\}h'aS=c>ډ[}ϰ|ei~Xvt$clv\Nۇ6AHf!<ջ,RzG;lχz^&H{hc,OJK'X~(\}φcbq1&HUi60[ġ+#)I-P:{j(u618K?lZA 򏧓|ެץҒ[n,]kssNާTr>n O]gc acby9 jKgEڋiE($Q-bRN wow;9Sr,-^jPS׍ҺP1d ciu]9.'qŴ^/f< Nb<4,0D|J!X``C l$"˧f; ,0P|J!X``C,"˧XB`oDX>,0\:l&GMb|9lrQNܬ׏Sӑry|W~6SQ4zFC{0-!Uu?==Qfg?)yP^(nw,?g ))q^˱|fsFЦaٜ`#lǣ$+äwH%L8v{aɱHYcPۘԐIz\<+z5|R*]|_G U\\l5TZjn<ܭ ay>]JN7/+}e"LAJtmoJ !Xn%L+uj,Fi.d#^rv̺\ XV%L_fg hysTL[cA[Jlbyܪ ay ,?*U S ,^%hD?Ol?O)hoU;[S /FC-zİZ&*9`݃S _~~7~P  D5~n MrKŴ(q^MN7\/f3tL[#L |J?ɟgXƨnMi0QGjWC9/ËyK ˫Ύ&'Qvi㱘s\VE|zT!1YLl FlpOmU5wlN|7.2S q( pi)NR,/R^:yBd CAOm6H7+& F7xc EaƐ~MP0 8 {>(1WeIm@TI12'+2V&`75Gt߃R׸)H8ztG/m*KnCfN,ыʷP$03A(Oe]UyE?y÷Ӊِ S.]֯lA){!Od}Gy ( n2مqwgN/-}.+P>OmeK*&@%PY?K/"<_@%P fz.P~T@yt(C (lK*<9嗭(/[4: )3u׿zl^m]犨S?{S|ߋ(W>8:a!J^9R>Z(A(VzyUYd#U+Oc~>S|m]ە4TہAP^ LyB3ᬰ؀n *ـ jzuUAP^MyQ5pfTx3@ldDNT.AP. Ly,S}C@qL=ݐyUCթQ eNz CA!&]@y (CA@%Aw&P~IO@y;\(S@y (CA@%P~ɺA3(2炛Q "jIM H(/oVk"eNbh$(7$ۭZ(.wN i]jq`kP:%?ʋVev:9e,nZuẪ{c۽#P^ߙE[xd@ Dɇc71P XM] &)b&  O_)mUҩnGYew(bN[U6i[ap`SވHʿbV ߻Q5"4EE#EsˊR؜) l:> \?4wo8^<+25%_\Uߔw*?~~_We<ʿtJmBL^!zl^&Љ[VR*}}ؙCJ eDћ׷#0"A'v}\!Σ5 R2чw\CPϖ-SWb8wˉ` NL\_SbV<#>ܗ8&bT)bKv*A(:p*id^&M"4{ ϢPB<ʗ^Zev[\R<ފ+p_F1!+>cߣ> G|8ntv|,՗GG/[Gm̒Tv")_&*.[^5WP~]UWGnnum0*˘VC+Z9uz|םo[6QN%J*%;I Go\7|O?*b4b7yt31'qNKnnӪ1Ɂ04BWo኏Ϝ(_tX+)1U#eI{Ĝ:bB$5GPyk|^.HW =Qo[׍Io5p8-`m9??s|wV94K :!@UY=yk_Iyz]_+!*U -rX2B5ʋIA3˖bL': 9R`40FB?wOJx,: 0!56 UUX8-ʠ8vy&3.B;40FfC>/*Kz|?x_f]LumWJïR!9 SRSoSQ=1a:apJ``ՀSo26'9 SRSo}S^164R(Oj?;=D>,c}PmǍ~oLy, 闶=|ҧQhZ:JÞʺwqXQj#BsE~H ܏Ƽ (}FێSt2ۺ^%ռss^G􉇾wqmNj)Qx=l6C1D*6tA@ȹ;\{v'!!!NP;Ũ^ۮݮO5㱫l-*oO}/{ϝ~;S_W?0?_?bO>g?w^dtYT'ʳ_Ÿ;e/=X,rE-b4U>C|Gtt PyF{ RyF{ zfonK:O=0ǩiY;|ioC7vzϻ.N6|{am[jfg*>\~d8i>6tr8r뙼YɞqZV/~`oMWy̼}|Q\-TnGW~qwPy*ST~N[|><NUXxk~@6Uw떫k9UzBoxS/>{w O|db]&k)6U81 S[bU *|@W~tw/PgxO|EUz}*_(x!m|MyΤpbUXwWy༕ߐo ;t g{ןwX7 gm,϶-5ϯn*=ΓtV?y@Q/~ion3י{ <{z=i=<DՆ>7my[/wT:3yY'}}^VCmwtˇ?7pRuhq ФKuⱋq)|9<{>+rX4g6K/򅎯}ykB癗IO}@7\[c},ʿ RHy;-:Po - Y7G6 ʗo?+>,|~G9u+-WF{|qőV~> mCLJMK<"Uȩ<DU GJZ9}_f[? O~ÞOpǚEDUT^JU.[נW[]1+f~h!_Ӿ˹{9nK5V>)ڱ{ypʿ|Zݓٺ1uᕺqM﹢./1c)Ps!ʇRj?@v^` .XC__|?2q8;hz[+ʿ>>V/on{POKjK]U/GW/xtSvQ'yEРC镯9dLM Þ<Ξk\{;*UuYO|ף+𵷲ݿ|+s +_umKy+zJ5_;󼔇.X/z ׎GuhqCGWeG[=߸bm1<0ڕvsm^#n-ޜtk8ZaYb񥜏6ډ\QEh\.D叨<*E#|_ݺ$ شN*@+ߚi *|S{Bʷ&~Z#< _Ԟ򭉟*W>'><!|ku>0OO+*@W5:0OO*@+ߚi *|S{Bʷ&~Z#< _Ԟ򭉟*W>'><!|ku>0OO*@+ߚi *|S{Bʷ&~Z#< _Ԟ򭉟*W>'><!|ku>BV` +TW5:ATʧ' oMGPy=I!|[?TA|jO|RyB_O|`P+TW5:ATʧ' oMGPy=I!|[?TA|jO|RyB_O|`P+TW5:ATʧ' oMGPy=I!|[?TA|jO|RyB_O|`P+TW5:ATʧ' oMGPy=I!|[?TA|jO|RyB_O|`P+TW5:ATʧ' oMGPy=I!|[?TA|jO|RyB_O|`P+TW5:ATʧ' oMGPy=I!|[?TA|jO|RyB_O|`P+TW5:ATʧ' _&<!\w><a\fQy"Qy *WyRy *WyZ_;>_TVys硟nB]㚕>݁*@2߮Dr WyR^+ Pv/* N}j.M4M}o8Z+ӧO^ܶ3y͙m|3Qclr%ى0Z3Vn#pw;`H7ap'!!V`tHe;j|v<%$XX-IO͏[ymLTz+jWFU/]ƦiGLzs3K7X,_TkvfeL6Mj*(,OI.q}!6 Z.@`U"ng5h,I) tIs ] ="HK. 8ffT=&-erl oe؎W;Mi.?j`iYezĘP\dGNc2Xߥ!l(YDB\#? zӷOJQ䩆ʳӓbXƐ\G =?u2\9AOY~l%;8H,i!\.ad"g`<<#Qp =#=2 oD"J.Hv,r/p3%(qZK{#=##X:H,i!\.ad"g-/t(YDB\E5XQeP-T-@dޯO~vyW1锧;/[U`yo /_,=[O';!'[ʵ8z$ؚ W:4"<ڧH]kvibF=4{jTEލRKR0|!T:6ߏ?1L[i |nECǩZzX^֘2g'aKijI|?!,Xly3z/]X'N,Lt&=z*C['_,-+Yibتs%;c)h RHyR3xW݀tz˳-J7zJ?n1le..eXW|?dycˏc-vud8VY\9lgie -BDOJ- { 22uH٢Jev|z>,/q-/]c-rc74 g-:)f^Wt5 ;CXNiEKA-=X8l>ӯ|ޫL%-}Gtϲ1KcA!yXvT/[-_[q^,՞mC-8AHʟgyZoR ןW-e >=,O DDNϿ- U<[^yED:;cn ¾)Kv-e`y_*3-_U^U`iVU𓸖/U?:cdyOs|/WFS-p1Z޸Muj! ,`:`gw-/iZܷl5enX/i;@z[6 ݯ`/V*0[~?`w| eu)[,OT^f%>v6?$ 83b)f\BCY&n_'-.eF-on<˳.K=| <|?ky'sh ay8߰<؂ǻn{2N[XDDWƭHs9<,""Y4+,W4Oo ״a,bDWKѳSN?Høa;a4dpnR(vyvH /ca# K$̸ 8E*ժ fB͛q2 a  \a|$w6Rn6%|hhʡd}:1ғ2?*8TѥK#X&\J F~K: #kG-_+7j : RgKY9^:FHF7ҜiՁ˟m ~>fyYˇWTjq>o(^tX|u`CoyƋD/[>`<#˨S}-F ,X?-, [un0(-ٮby#Xb\B^E=%Lk0viiy,3DZlW& ieeGy5<\{Z>2~k˦X^<*לXj~4ǨRTMbyXS"X^j@>'a-ₖ=ܭky#ךaB 0ZRj=E|.7Sm;IYm> $$'2۴||?ƥ[ky-j&.DGT쁖_YN#tNQ9"2}<ѧ{愍*e)ASw f/}^|]_%<y: 34!CY>5+| !VYl(9]y?VX~`0jXt#Y>edlyv{^U,G>"4(-/`UӬ,fEaw*(45峫2t6?-O6Mihgyy1Fwk!XJ(6WX"S"pjp)N4FDgyfyCZ^yC6biQs"Kh)P`z|aSX>bϝ:rT| `rrA,o>>հ<qB-`ayNRX~|ʩ9 Zg ,@wX~'y`yoG6O)Clmy}rWX_T| T6!cA`y [e-0j@hX>{֑-Ľ-[ n-߁칇uO"87XeHX,N k?+k^&Z>,ˢXayA8!-3d`IYޙ="ׯ<P:trSl ףHzHHމ|\ U~3}DSa]Ǧ M5G#G]h.#)D4`ylKP M><ea5`yݶ-Oe|J=Iy<7#wGö$|,?8X };`ypM`hmyGJbs%BGs5N͆Uá2},mJ,巰0~*0$-=%LhayaIϦEev}0< HvvbOqd/Qԙ=S3E,s~,/,xvi#JX˯DE,6LTMKy<=;݈^SmaͶ٘ΰIew֖N˃a-o~]3݈,|Lwf5tJt+9?+XGz6s\X~jRwEUQ!X)+mf͖pz},O_hXGzWޟn,?57֫aXѲaG2.xGrdT\ <6._nU[^f@?<)k_>=GkylRˇF(,ʖ/*0fp&[T>]VZFRTe-Ӣ**GvԜ([^TDTNcyY<+ԃЬ4>.Kŷ0NGelOO9l,O>[VD,],.ȁɶ6R^ay~W(F&fF()Od`ypAX:أ.8&HE/Y'eWrY/`fآ**<&W|&'l\`Nܛآ**<&Z-߰V@K`yX,kZ%X~jnò,`)r-򋈩:Cv,r S@7,/̺&1CF+w(oh↣C`-f*4ˉ ,,?M-M}nw@GR( C,OMb Ji d? |JC蔩ig| 7yZ^.Q=͉ʒn }+F{t/̉fE:sF54CpApXpN?Q˗΢#wG4鯧wCC8&QB7}^8]}Bn#MUдB65Y< ,Xb ,-fw9"˃,YP[>Pʲ3#,|:C C9YnKGFvZ^3r , ,߾:폚<^)z |AVs7@NNL:I"#$ FhVc[}E٭֯5~DrXsi~~Bq*xݥ-ze??&н倡OƐ'06X~9w,z_IO^z *"gQNP$xs-9ԗ 7RMMܟhAT'`"ɸ{؁iBt8R XrjK;{< (RfYx*̱LmV_X;`!Yޛ=V~/X^Q|?W7-5E1zYx泠t'EAߵo3EC۳|Z]2D4h_;[>o]VP5R+u$`;(ϓʒxwSph3[X ] ߒ8ͫ 'lN3[-/)3D8|j<X~O>Y>2EI+ˎhy 7;L4>;}|- lĹgCY~0=nA+ɉGmiey6ay4YR:$ˇ3Knirb 54]™[~˸[t;gw=`,˃6-/{AH`!YgVm|G98A(g>ש}b;mW,31۴wnɌm{X JE$e#dXq{W5 IyBX~g밴i1XWJ||Io}ˇƵXS##_XSX7L `uX򤿯-U!.Ɵݝ#~_XSr˿Yb̸ayIl$jV#zOO-Ÿ+vѵ/h~~a>-@Ό~?l˖'S6K'||D$@' o᷷B@/'P;T7> [b7e}`yPbm`yE{zkYT.5#Ԛ W’K4ݎ,?E,R)[N ˟(Z@@ڥ{q!Cɾka OO%hy-l:٥˃o9-O.Qˋָ{H$AWAk#\U񘼢+v$5uSo5% :Xq-[--iiJaXOz꟝]Z>^7kr`E藸>qvzE=-<.eyEvcy9["-[K\b -r*z{qj"S__:u? >'Thvz|WEX,aN,le`uhnyZ-*"xnh}|b;1 > cCEӵ7 ,)΀ס??OE uW"⼢^͡E8,|;CCD>aK[~- A)뫩"]ǣ{zbZ~{!1@9\,|;C7{%r_4`%cܥ7'$s|G4U|h?~l0IJ~#eӒ"(5?XǙ!bfqZR)KӑϚSqʥs4d#.rn%50MI-wy`;id`izi33@a۱$]|n&.et#4m;X,,,L"L-&,aywpxd{{]d`i`y`acB0N*->لɖӜWH{doX~G ,t&X^򭵼kwuI^Ui& ~)MӷXlXh!{x źҹ,?~[!**K=K-83DӊJihS~H/Xg{f{o.`N,t`!YgV|WP<[c{'3ηayp[=M`q˖o(p-<7kw9KX+ZX+巆b}˃"n{X Ɛވ#[n;x#,ˏZSt;8UYׇj=߷2[h "|X|'eOÍ/iivcl *[h=`)G %wuZ~ɶK˷[$jk;`)-ώ!إ6ڷPK`F%__b\&3˃-?f< ]7Ff|2S7]"b^ӽdY 6dN-4®޴(G?Zr61X} J=Ji{25廀ms6Kl 2rv#ыNk(Z~<I`-sOFOiD[(M2H>qilRfB>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 40 0 obj[245 0 R] endobj 41 0 obj<>stream HW]s|ׯGR|UcUXAD~|zv EK"=3===g?|{_~yslwW7o7uBL?)['Gl}³lXoi-Y3ܟE8w8xIYlT`x9+ D  -Go"`AoCޒxIR(˴ND6gVɞQ(z>`LIERB=KYyPbiHhD2Uee1`E}|wwP۶⡭kMjΗ?|E~]gPL U"˲~CI)H8]7[L b+f+E/ڇS?NGEK(Z!7'KfGU.,\5MX];,*}4K֥iB*( K>hn&&bBJH!9Œ(HQwg:iӧXKkpơOp% Ĕ`/g(xke@ )m׫]3Qr|yY2U)M]H_ܟqNEI]\8 B2YX3`>?KOZ;1zΘ* b͢q< h;pNʦHC'/)ᄶx<%Ц-}v1goikfC26h;sUY++GڨG}DWc֔I{׬;/0 D_2HRѐ%e]a*ZjӒ?Z6Q̝3{r)AGPOO efM"f4jr/O\~)fyqolpVLSv-Όj!{e!6\r3P"9a l(1=H2eRI&ցۂRPA>t D6@9I_M_O*a$+rc~`Q1QI^Ζ[7I .'#uW}Y1o5u.CX\$,\ig'3|9D:gb'=q!!jGfLUWy *8Nֈ5͖|5{ U|>BEɮ,;),F2-.P]zAb⛶ ~kyJG^ߒC6ۓJ*:34ys6jKnΘ4zw$Թ]$+0K  endstream endobj 42 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 43 0 obj<>stream HW]s|WU>).>*IVbJ'[bEu'""dקg_@r"ٞ/wo~9; g ;˓|g2-r2bNxlgٲdܢׯkY0.jKe{؜,Y])cd,d$K6a/'3\抅d~y6yB#]|bl(L=+IO%[i??'˓K9jM#zRrvq7@z/XA+3T \Gd]XuZ~뛢1b0}A88}FB' &aҋ5PχUn٪z5JU˿/ HU{_TOMmxӛ~klmH[BC꼶kmߝ*1Guok2[[nǻ[J$]&w궽#M&L]X%y6eF)sAmhGLp&YC$늅i% ў$^RfMf].%\UAqav {Xu4i"h΋jM:R6jB^xgQp2c0<&x{aH\mgA, s*%7b&&GBK ḏ©~5 jSG|U{&b GMu17j0o2LׯѥIHZ~Ht nk(U%ΟQBRHhwD^MWI\ۯSY.DTx߲qnџDplAYm~1BZϴjQT.r2>ICx[l.^_c1pG4c/t*>$W:p5iY y(@rêvy'h6ݧ8;Ӂ:IeD]fQ h(ӪEB͋wy~;|0#9]5dEQ.vM ;]!En([Oɼ7(#R-S1IdtiLfPf!!1ДfzNPh`_H`Pnmm%_%صnCޓn9 pMSIecnYG%'I)A]5pֻ&֒{ӀQ'Ml\сrc̺kAFPN*YxP d ϴ/^6>$,jh8]A%Mq8\C_3Xta{pcVW, endstream endobj 44 0 obj<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/ExtGState<>>>/Type/Page>> endobj 45 0 obj<>stream HWYoF~ׯG(.O) ؖ$4zÚ\IP6;;Peα7#~~޼\́;,fWruv/@~*Uhv|?c,;plqV:~Tpn޺.rQ yR}E|''I~  i4/*O@G ţ>p&q3%,*)d^23'k*ƱIOfVy`B_r?tnk+ÅC'SQPלּi3!<2*8Ry0mY ۗSEn]T% F&[RKX^,f=*TRyh"  8ߐ?/ YTT@ Bd6:ca*>x v% NZq(Nyͺ2 TjJ?HDnwS9iT{m6Ѩj-i0y,UȒ&0eߍVJ_Mշu sMW(bn5ϸopM:=isZ]1XG bxkJBG ]:yP elX_m53(v Sc,5=uEז)vFV%,ƩDYcmln_`fR Ǒ7A M@ЦwPDU썬d ad x>BwZ^[TwLVG*1:`F FUFv܌Tv"vHb<ʲWB`RP]E,}~Z&6Dm'14 7)X] XNcht gKMML@CVlf/R쉥~G2Vet(2M[eZEЎMqkB5jL3۝ QQ䋺=EQ&j"uT51f{6,I?A5XUE RXN9ӊ^bߊjy|nzsifByv<#ϔD_!COÞ4< ;2ze6Fo[qIwCxm)J W}X?MvŰNR;m&V# f˫BJl!_'Hb»ݽ Q;}_ vw@ >stream HNQV\vqE,'( +TD֊&MĘ蹽DLbN,-~Gag~%ZTD4Yh-R8/sepNWztŝLEf5\btkZVgʭk\/ίzIlgԙ,2PvK } p'.bK0+JHp_v S fLr#y9NGcݟR㡌8Ƃ1E7 endstream endobj 47 0 obj<>stream H엇7G\Lh$TSZ0b۳}IplbLh c4OOmfvvW{|I# (d鑋eqf;Kvztݻ<9O(xbr{eOyJɾ}Z?˟Qg<9+xnA s^+|IKe%/yEW_s+ ^U6u%x}k}s[%o{y)_~.HG >OxM7}S9.|[>W/|1K_V|[k͚nVšCÇ{9~ȑ?qOr~Zrcǎ?~;Yŝww˚_7bB̭)&9bNCUܮJ &XLUSi5L1lmm4ZjBL9;1s-s1s5GkL 1g&fehM.N-O3JL!v}j.=bB.bfbM<#.ggΉ۸[gL!ʌyφbBq,7F#e2/ ߋK!X!f71Չ!fVsyJ\Z$.-A1!bnS)sTI9kXbżoC/^ 1s[-fefIɼ *'˥xSBL9A1GkJM%qi}a\,8#6b1!Q$bL6-ft)3*O2 1&B6׋t̎u??ALEL Zb̄Yl2Oib?'6}#وb 1!fj<8MB2b 1tQbfcF/+c0;*1?!&HRo !쀘 Ibb&+)ȲVm<^8uP/#~TI+. is}/6h Ru`t?bWc2}z)"(fdj×:[ĔdLT:1g SU9$&]tYRNg̼liB͇㧭ߺR5T ooHxd3 bȏmi}gNњ@]7.jU#49ps|WLű-GHr?fئgy^/ͧ5~RnQ_mc4ۜ-tU/@j>^uӧnLȓ˫k޸D͗} `*q1Ҭ*oꛉJ4$&k߰cPm̌)e,IsV%뉕lUܼU)&x"bj#]5c?\Yњؼ͓!1% :_sẘjfzWn筦cq8f?䞍{h 7%M0c?ϨYuoӤqutC4]3Tl7/a1i[b:aHL"јgXun1fF9y;\_@5s 3HƌjMJo2D$KhUWϲS5xf^3~21t)/o  $njc?[\{IcM}4i2fM {z2e#fV}*k\SJ:;'8t`I/[nJ|옵Sb{96b4*ڒ-BLY|S̲<#c4[:$Y-W:Y_cýFĔ\WFQiD&K-ǻ5ëvBa fVb2uN,33!{Ic*iff?bNPdKyhSՈ.gsFwysl:1b9k+fSFLpo${/g}zjN[bN,eԌÏi1 ?c&¿L $-dL13Yn &ތUL&P3[[.3_GьIAW.=>*hm#h;^3<.i.>~M5oƜxC?6hfIw\h<.\g&aZ 3~1lKqEZWHLtK̶)ss#c9xW@L}?e Ca̮ I |H]V" MfO0jyoxa1Mi!S6Ds1{̻$!Ù[9ۍ36"H.nfq3J6Ǵ~ic!L!(덃~ochS}[3n oO!ds1 p֜1_p1KQc.u?ͮJx"M3OaL;Ud79JmqBdž(DyHll$Ɠnh siǴo@<i?x-s_=Uc_0c}1>98ǘׄ!igjLp J!טZ{ pLyǴ [W oywJ|E[4Un{|Ŵcʉ8s2g`ûH{EEyƴe^(xll1|U9Uc Ӽ_9aZRŷ~:F2Bv1'96/g`m^:LrD5#3y8pcf*{$zf%31hЮ1׼_ 7ZccNoO˶{/Xq95|.A1gYi;%nXpy5XfIIqYܯ37柦ɉJ}axy5SLh88@s7ӴF 35yđE&oYfQDH<5ߚfŅBQajKl<5RoBڂS<<T$q}bq?\a,2< tǬ`:aW>THJ%3rL]?7ǡ7oAwLwН3L;$rcm X~}0ꘅ@Np&.w &Ll٠:!9^r-NKn%uWf'q7*nw&Ȫ+cSDȿ=m8XVbYȣ]/>2gm eJ+;+L¼) VpL_D17 n^qh֘(/&VWY1amTݫ_Y ͤ0ꘇ0@nRHo}b2Nx҆5V]sn똅@N|TlM ~}/cY4p1a a}I(ek #H!L9fM-cCC` /5+yV 3Тx!~|7l~ iީhO%K0X~?S* 1Xtwt{cyc \;汻縘cq:fp085&b } 1K%pL8&p  \.c1K%pL8&p  \.c1K%pL8&p  \.c1K%pL8&p  \.c1K%pL8&p  \.c1K%pL8&p  \.c1K%pL8&p  \.c1K%!L?!L:@&p \a@%/a!L1_R6]B GPcO`\a@%&pɟd|/#L._M endstream endobj 48 0 obj<>stream HyPWQJlL (DE (0prAD k2V,V*6ZY7K5T8fzNDP޼1Bԯׯ_M#'0:EDDDl$Rx딡#RDH֢F( "@l!V67Hsv=D@QXNpD5qɡ\#4~bqiiɿ܂=X{|B$e˂v"PGHo,R ˬAײpS y w:p0\wq?Ni.#!y@^"S rag\< #r۰:qwyɉ3?<+k9rtJ4h&`ғo!m'^gA 6tHL-v w&t`w< ՄD'-pvm"{4@ _bZ)Yc!`̹ŜhfljaԈQ/8 `˖@oa 3/6#R>HTs?{MO\d^2yb?ŌOh;ɑVcz##f6UwwkJ!%Oymn ?; @5Y{:K%|!I^m2m Hz#b^o-l A`_BY*/2 r{{kvK8UQ + s# -}"9;!=糕Qb#+@1>FybLS=[w3tX)\LAS7蛩|%~ӓ~AF}QZ*T,T]K Õia`t?toW_GWl} _:QþpR+1|9{D=G8L=1a5ˍE!јY"ʙur, eyo,~#ໍ O6Ȩ/|A?6TnYe:7!/!˺N c]Y%F0!ĿI^;C& Ȣgt[qO7etx_'WаЀ(ȥ= AH՚2G~z ܮ[Mk'=۾vKLZe8g__\!1n~d 'HF2[,2̈́U0!t`+g3E̫|={c|IQ 1zRHE1VMT]U%Ểd!KH)|.v̊QN"`_ = qv]pIuw5:h qoA5'r.Qw]Ċ]h]7~6[![h2w|mݖZf9+;n?;fP@ quL;l|+kM{UJ&pl'u/a3g܃~Kx8J,ŁJeQPpU#DP(Wźtqg:uN;u,-Lݝ*_$5$1i0;?|~9{~~5 FCn"pֶUE}9ڃECźmMxM+k][¿^eYEؗ2\_>y2Uf|tΛ>eYJA0/:ZWϽ9v3]|?I5.vs\)( ˊcqS^3 S'Lv3L ?6q'F&(v gBk!f]b:)gmHT0+vgj)چBM}&BLH]~V:-NzȥwQ:*M2d5p2< S= `3W $h|K\BytbhaN9dLlmDZdT`aw(qsapsqDUGNS&&_72K0! `qa.0 }B眤fzc3aY"D"'_*TiӵuUؖ%ܐ,Aw‹qSf,Ý\c ۃPZޓ_݂ {Kʇ7z'((qg!]Q|{ԥvp_Mccv3ŭ]Bv`mxfYp~?{])( {YZiXWoL?fɾ/cN6yļTc_oL l5ӛO)ZY8k[&)>RUɺtޭk"=)CҸie-dIqz4hb" 0)R?S; jzbFcX _\1o8øI ΂\l#v`{h߶I3e:tpwqO:??C0]V>>sm<:^]eQ 4i⹾+bsvsfPqwZj727%ɼW_1/36k}RX|qw-R1J'{?-TY_1}ׂdTojtء|관;|~ $ Q9ЇĒnbhe^$ HnA[@ {br-0w'c?F%3e:Þ$. 5q|X7~nop})bsvs ņ*c~c!IxN)i})88Dcf՛_ѧPQZt-tobX)˓]iZT&jWvF Eb &]oyH:<\/1 jwtrxJ4~ʄ7^$f* u# FFbD4D40 j|ʆ)p}-EI{3߱OF$AQ,WIb #ԹKuF&?EO*2 V V"׍/,pq~<#l E*ѕeRUTT ۥ;E^-닑U4IՏ&5f榰-;unQ(vzHWpAWrt]m|ʧ_,ïđ,@9?w1׃R(5XŢ .ϼ|u^U^u*-"r{#96EZK)㮎̘+.^EB牋?_|!QD /MXŘy߼r9uacЭdzhVk0uXR+yZs4p\aE`V::Xed+ej`x<Y|~~DcU=v̫[AjmPqoU7PayX/5Se&@Ĉf K0Y%EA((M*#BPۺ1ӍM ;OpŽz_.uݝ.S*ajǭ#֡)ӥ+ҤRjEx ^7޽kn Wt%`HhGq$!)~rqQ ^^\Ѵ|d|ȢC} _%z`uA/̏+֋/j|`_cYzOIz+C`s? QQ-?QbTK]Lݝ: c1_ʷ+B,*QO7zX7RYL?Z[oE:MVa&p^w9lpOLJH6 P~05$K:.i'6!b,m֑/;IFs$I7MI׆mcW|I 3@Q^_:b*hZV\jK'L:ėɍl6Bj&ZF Gnt36,Ķ0!ݥ_vmhv^e%<҇v 6TK}֗/sV _JǾX;$av2؄N#QXNK bZwHHOV%e0_Xk;_"pފ&+&g}t+Q20_S]LIbqHS&×WJ!;i{QΌ^XF ;]]L׼μ-a}^ %6z Ҋ+:O2lDSwBԱ/MΗ<_|ce` <_|ce` |prW@(6}|)J1 ^^ӧ3'& qOp O!߮עE2ddE|yc)Ëƿ"m<jԠ3`kE”Eqgb.ddE&#Iz0lۋ/Pv5dƽk̯;Rø Ұ89¥S籒֥2d1PY\_{H?iB*WcN0 𤞤7C%b]T)"TFfW4]T4`f-5"Ӡ+v>1;IltBSR8r໗ Eߚu]virWa.hC،Hu2?%^X6cRa)yДa#x=_O& `[h`n@t`H wU#)2?rwGdėb>gen;L+ :{? _:\^l F_ĻӉګSϙsCa|lj~GxPU @+KGl9$|)M.H>)L|zHHbl`md/R*ɷ-lZ7_hsJeJ\;$#sH$B.@OQd1^.C'L|ae7b3L#Ԕ =e T|/ps$ri0 h0[ 5'3Y݌wjbϋb~)zO&?(Kfs2X͔+]`(j+#K-E'FF04`HeΗ<_|ce` <_|ce` |~}lz ߮2D_/凓/~gNWM+"zX=Be^|L{kD]Wrz`Rcz`&>* KsX=bk,je|"_ww2$]r)F|ŋ[eU2+Jǧ׭L3DW ?*9R^t.|!+}NUao& !ѷ6}nj; eQoeҝ;院Ӵ'zЦ11D^FBP VB$uXg]L>5eV2cE52| MƤh*]BiL.`6Xys.|}7+ _.7qS/ &҂w]/]431&檌L/OV|b^>9o >&|3ĻtUE $&eK]r;w1 x(&<_$ާ"/ZwqYmbx$abpwރ/j)/l}@f/N9o{`s!(VF[`|]z/|90}^9aqL d%t%5X1!_ż4XwWZ ]*J\\fJ6"͞XMXvps GCt, +|Bm_p;$KH?.q\Ns(Ls3aFSr pBH3a);K.ݹ)QZ/o>16*?k7!̪9x^jiq JfgAOYG>ˡ3U6z{dQuߎ]  VxȇBLcUvuFL2x࣫0*b YЋ/we`ce` <_|ce` <_ȗןΦ |vuprc H)8{hQ`L._B@Lߢ+q{E3E1䟇02OY[p:" %.A1kDXrIV% $7zArqᯕ|5L@_VF .2=I !2XLӴ.|-N鵃bNW (́!~0tBq!d--duIĚ˓_様{LSĿI|vH&RYwi+&LƋo`+|lžIvK>tW$5IlglIe3pl퐚X^7.[dL jƆΜG"f|!XjmvI1V_DձW_Gܥ?e7p ,H!|@p\R :^*lKrֈ#V >cglvu7 g&hgMEjeoD&az.pB]#zyɳQ$-nqȱP#Vbo,`I? vwn+&i'_[oAҋh$nBXl_C_+F+ _e/;7>9͹)UH'<ܘd >ݲZA:^"8dz󬢗^dU6apڠ0ܝp!EAkуO6QGXElcpmZ!Z`ٺ汩BE,!.lz^#Gzψ^^H^#Gz"E?ҋ~!H/B^#Gz"#"Gz"E?ҋ~!H/B^#Gz"E?ҋ~!H/B^ vp>26z2/ Z./lR ^_[ͧ[Y?^^gKu@6>"[!v>~mXqKz[`R}̄:ON`ɐ^> CȢӬa O=788A**Qk滟Ez)Pظ4~\[/_e0CS>Tyn]s~IwD2(|?c³Y ᥣ^Q?d}\w l0n)  TN3n(RhW碹B0;_$R`b7KͬaK+ӠED[E,T^8_D4$Y`Î",03 d{D)LDPX za䇓UJ/`VoQlH/lH/lH/E?ҋ~!H/B^SE/CtFߟ%O0h3pp˛:y/ww߬g h6^ X)l6PE/ܩtu+ꥹ0- 6}CKLsF+G 6CЕ1, [zl^_MTvUi𭏅gii>AO6cb(dcS |X2b&d8tKml3g-->7^q"PVa}OgN6TSWӢ/J)M?b/T &"^!ζ;:3VtZua`ӡ^6!Qm!~~2 +>V*bWjQ60^ !跥<6sjq^SIcuYMlE *3|hcmp^ 4?vϪxnwl k\0Xמ?]H/M 4c 6c ɘ({'ƩgX|^PH̜T3֌g^Qt8Պŗ-==3ݽPOh:z|vssp2@@+b,ֻL-lzc]fv!-P/đ9#1]f!TzghYd`rV[g!-P/(,D|ḱgGv&)ș2“R`{QdSʘ f]lсE#-e,Z|3Uؘ@v7t ~4ezEy_2ʀ5$XmUJR0ς]Si|ХsE2,:@ݒd ٜg`nыIj "]Tij&*؊|r)\M Խ;;Y5EuܒE2|L {4Cj!ld}u4v2f*,h"s|GjpB aقB?Y,\9CqX+uH#06_S$;M))IVnd=9ޛ Y qH#06_֠Xf+(g:Ǥ}UZcmy#lZ<Ȫb볙@fw2fcӒy'S2Tbq.qH#T狤v-Q V~ 6 *(#5U2SHv{+jW.)NJMH.eeA!T(]4Bu^>1DvV×C'](ͺt/쮬 7u 8M="ƢWV;5ֳ\3n#[s2bVEX4{Q9цB^뭛˸B. K y| ~_?/@K G%#Q/_ <͆[2'E3E?Xl1"uyrOO. _~ݑeI"iVXz}-zE{dC9+suºa4ԣLeVbtOi)%ŗqOTxq)3AT'_L#:yu1 2ջy%+b%PSץg_y-ŗv.z0̨cަŗ>.pho,2ydzSK/\<<^_5>s|?C//䞶]|!8޳Fۈ-~Js >d@/r2Y0sOC!^JQA+?'T0F$p*#Y=*y;яܛ :|_]Iur;|T*| FH,~2h2HfRI7u\3 $d̵p% WgeT9)>]c=@K G/| R_?/@K G%#| ~_?/@K _ )/@K G%#| ~_?/@K G%#| ~_?e(>уwwU==͊ydfQv߱oo|ﷷWQg e^_F:_UY1/,,e@TPFؤ,й"_e@rfT2 c {:UA\~ $ԗK+SZUg O eʁpA# /-N7+)عZLeB.3'C jSI,+sXd~X,3??@X)ldU>m؈q.1zmGI=b$,gyK&f9!E)1L9uFz[ph~@F|ᇠ K(6k&JԞ%TK12|YdaQBBAvHji;kyT*ydGWi7*ieiEN2$!7d)x;E2fиD@3ԁ$Y1L#nƔ,k`\W'u%5u|YD2t6bFꍻqe_h5$ϷRMO8!Wề HsCjpJ _eG 2lcݰMAݜ~z;m}Za!_Da2Gmَٕc/`fi` G_ӡ:#mY&3j!ϗ -c6݁/-^*}U9S M`dq2fnn"5E]<,_.7)"2~TÉi$EHfMͷ5(i_bToZ$Whf+]?)*C=N\Y[䲁>-{ءhK5Xe:0fo(8#U+]' ‚|Х >HMe ݘ<|<Nb&:/ i26Jҋuɦ]bgTA3e"6ꁤ.㽌sAPSuG|#fN̗qJ}uɐ&F a e!_*#NZ._H r=lҷ0U7 aqP eWu]Mm._]'q4D&|(֢,î9$őg:.Ŋ,v ,bl&3ɸ," l4# 60X75pgA 4'x|)jGwv7Ss?ϩS.ӖivaOEj5jMEt]/op;@_2NdaX,e$㣳/ʌ~1Ѿ6v##`tjV%(Ε,TJyP~}%ZD<<ύ1j._Ẃ3M69Lp/xM$uP+<4M,H $''<{IS˞_htW8/s}W KPh ofM }MB8J/ppN5fKP*_x&ψ]:f{~@ $~pr4pyGiz%oq^xs`LxF]t5ݝD/2 XY5 &P$.sf)}b2 TU~aپ| L#ar_tl"%h8J%~ⓜPSw:_ȋN@0Dcc\QVA I/KE< p\񒦷_AJ\/(qLDe&u$^[j\_$Qё0P7Xfڤ΂ 7EEړ*Q~~A!{VYc;uw»6+ȥR&\x:څsuM,HQB\j424AHrq/'A.Wv٧6%Y#OO1AӃڽVL M`)^z|"4m2~h [Bq 8nrӃ@6UAלž^qW,,rC5Xs>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 50 0 obj[249 0 R] endobj 51 0 obj<>stream HWko6n`b!E8:۰膤hʒ!u_CJ+vV>=A?4xaJ.dzGF_t0JS븮Q~;)U\/Қ_W$P"a`5xV-i{j*亮2쨚9u04Hab <'4D>͒dI䆪,dtQWUUk/^ٍxYok'0v3G"pN4d 'K*N2}DscZ;AtQ.%3v% oNQ6*9yWZxM3@!XʕR۪wX#jzxl2׈iC# 9{GzYkjc}muBX]'FQ}.Myc{ͬW w~BWrÑ;A[C BoYU~e&n)M;GqEOFroC2=,~48Vo64Y69>3T6h&@@~3g000׉^,niWm(h6KG^ڬsݯ[X;s9ߑ< }_bhsЉ4܅.Ui](AmԵ8 :u ZA#T/7'U5ڊ˲z%"HehO>30rն,*VMƢFw82ՒHea m ږ\6h:y= ,<6>ޏ:: űf팺KȋQj$S:=5׺kƢ7nlL^R|_FU=г\cFSj 5*Q^FZͿxu^ *4 aGVFo֩1Zж꟦ ;ƤOճMU}<85YYo$G֋q=I{^%(ZZ>f.d/oB1<4-cUQ#6ExKiW9*Ne\"TCxMl|%DXg豘g Nt`)twPr ζh:0&`w}.g[u3d=sS2Nכu?UsI=۵8d p O$seCGDz=Fq j SOlJ9Yy4<[i4Q[ sM& =6> DAs?~GKGLo0wvBdT{?Zx endstream endobj 52 0 obj<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/Properties<>/ExtGState<>>>/Type/Page>> endobj 53 0 obj[254 0 R 253 0 R] endobj 54 0 obj<>stream HW]o}ׯGV\~( +΍Z\ɼH\vgv%Œ2p_lgϞ9sf~yl+ٰq`j\l6mۃڧ|Vp~Oxl) A1'~`}y]A  Y;Ȭȫo"ﳛb[vxyW*t,4 Q ! ;94)xT?b7Ao] Lx 1 8&0]||;fg~zQ6\ 77pxA%PR|o6H4L¾ȓLv)}"%|mLJ~gr՝|=d"Ą11E0;.]L\JDᕐ"[h} 0}9$ԇ/gkaC :g,M_Ĭӎ֧E$*H'tvd1b8lְKO0Wy`U똬l#D9ƚ93QđzЍzr]Tꨇ!pC$bJ8PWVD=: 4Jk39mN֛2\|HIu՟azDMfF@b]kl]"3TY)^?xI7>R2 fS7S"Py"5CYld?C6 NdNJI堋 w%8mEz!Q N^mZ%Ը#sgzSL۠G}A|2ӶQ(H}Yp"p" 1M4Fߊ5FheD1N#OƣQԮGPZf)|,։8''`Aa&+Q:3,kľ|Fu>mD })eZ-eY0w9|jx[JU7efv8y^#\CY0fs9|Hp؉tubs SÉ3u95XiD4K);npkiGhN9tWOTpQzk%-W>*jk\͎)2Z,FPkV %k)YTYˆ\Ott]yTpzelZZ*b&i32(=\p,[WgLIayE}OJm/dnw oc6ݳJ]8w܊D؉4Ԕ^f>stream H}lWO)kb&1Q3ɘNaa@ `Q p:c [X..0,2: PrK w==yr9=ywy~Q*-R{m`"HC7iL6ߊdS?i#icôѮQWuzG?O}ԂJ}Yſ^lb7gc?7gG)_Rߗ5,vaM$=b l (Vܕ '+w 5XgSPƾ୻F;Cŧ,i8{܉om/iȊ3JߦiRi2L\7 -8F%I}XПjtiYĞ!Ïsd{dIiÏ3ŏ@7nLR6Jm8ʆ]J&'~e\$o҆s =83e`*0Ybz <3m%cgN>!3K=~ZfF=3sW_b/ϞV!xGψB|侟A~[:c<|jl黹oX?F8&'[&l|@.%TUnN_ر޽TU{ȹQ}չWK.Bz${0jܷ+0,(z;ß@#~0KBDeL|,2n@r!ر˷vNH?jZyP=Yvc#k(EӴ"&]sͧgS|B®+7@)"ڇShv"MWla޵oGMh3d#!#JktBϩ޹kzw׌75 [~}xksŸ]uY^ǯ)A^ⶮqe߃/1f0޿s[Avc:b=%ZvGXخ^qps#gnLz^t%plͫ\ZU?y,3㧾mS4Bf|X=sJ/eas=YƇ m7hkȼ/Ŗdb1"k|Uk죏WXtBUu ˴.1~ P;Dm)3#s~^ct<6}[% \/E. {D'QHwHs 꺋=}/ U#Zui!Y=أ($5i9~0ѫ s.h hy> nݡ@'Xyu>a@y3 4Z+:cGjςv cPAy4,$U~}ɛfd#35gb{LLZLfݷz)X=ӽMN~VAQ~W>a"h^W'؄\̐cq;|bd|<vzi@.!=vd$S`ݱsel]h/|uy߿]t}x[5I5ϪҀW]*&[9~1v%wMEON3Ne3k*YEJܡ`Z)K1)~ɪԉx=jxO,G˾X}Lp$Ğʗ3)!ʦ5-wL0ãY5UN4Yz^jڃduD?F*$2(r'׮hKh73(]d)⑶9˩ɪv抺NfRE)ɸ;fhERrfxD4_uQ Cy(Qʣ?G!~(BP<*?2S}̦1r67Ynuis:BUg(\ i "r!Ǖ?JD,Vjh1t†|v`P 37!.1!Qjێ=+_Sw[ϖI,Gf=4zi/m<Cfv"3 ?{VNhJ,wcd"g '_Ĭ_GSohæaoG-mieCM㧇xĕi*r]WFTon%KO~5Vfr5|QW)ΟxT8BPqUCʫ?G!~(BP< Cy( L+/F`OV}SEOyW!蹜iUhLJp=D:zH=>^JTyW -֥֕<{O`S2TM{,G[~#UiF\[贙KY5uf~sCU?I,rVۃ>q\a9MQ?y\I^`-=aV3!Tt)\mg(rD7/*h*~v-!Iiz_~%ѽ>4 j8vҡPה@bk֨M./9^_V+i _J@Mq\k BC ?QHt)}Q**DqL}k4u:{]Y˒Ca1{.,;#,ZjɊpLS|..>;~G?.mɁ" 7ԫ掟6I*j[ Q^VRrBf ߹ICy<,Qʣ?Gʣ{ *Tb ~g Ԇ(nr9ENa=G}*UjdlOrQX[j SgxeA?~ @!;$VW'u5-:e>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/ExtGState<>>>/Type/Page>> endobj 57 0 obj<>stream HWko_1_P.%i4lqmopW>Tr?~]>ESm brv̙3g·.?ᄏZ]̂B=>Wp C (i˲נ jWWXekj9r/`lfJFZ!O? txmO όJb-!KRQAQ—$-2!EY6RցT S1)IR.o$΁uU:u;A$r'JJyB#T8?qo_C [<Bvne)Ma%^2eoԝhr0Nu$1$byl_UɈ3s:H|TImi@`:Q)bTD.Rd"m!h0Є ,rG7W:pVݎ7V>6J3)csjT 9 :vc1r`ju.~s$X$`#{ne53~GN`W>#nˋ?FGy ?2QUVD$E3F 7sF/7MCv53.5d(5͡,׺a=@3V_xIW Os 3_dOdu'IX'Q &\]LI$Dٽgފ\jnrCM[U1 X0`!/(w0N@ᜡhPbўL.'d{S׸殑c֩kF]&u/]8"KhM<^FqR,&Whq:'ݲ"B'١>q.Kio3N澱E g8I!4ހ{b'褚Rp$4u0ʙ jA5yz mMWPdE. +KCZ YΉoj*kI>.bP6U=`8/$dKĸg$*&Ƶ~FrzQEeS -ؖQ"W͙zbNlbdez NpѵQ>%Nzr~$v'!":X$tq5ʵx,vYvQcnab}E 7sX{PN^>VcՊ]k+kF}0/9 1uGA``㹜)"pXg4`U3̊;yT5ܛy'.eO{@5nS*zq47=By EoZV.K=]8e* 4OFf)9Ϣ4kUkގW)6(6fbBsҶ :yk\h 6T[ΜqR߰nZjdz0f e*hJx^xķ? es?!ߡMekݬᲫ}0 6V[T𹉮Pbus-Uf',ԗ@ Q'd3eu:^CQGqޟYg{0V!^= S߿d9D:&Ω1H#մ6n4Z=e 7 qkrDv<p/RO3i4d\U΢IpwbE /{%L)#a'] %3"TDenР6no;O>uHpȝVG蜸gh.AQZx-\8?=FRw@E2է< )CQOu\ד*0kFΧôĂIYivuDi f'ufr0$ߎe LǾ7iWjcN/?lw:[7uy A(X ||\=S=eg԰LT_4{NJOE L2a&۷QM+H!oB]Z17(tŭ5 bݮ0AJJ'񨧻hnW1tca5 <mp5[5NL\I|)e*,2ܺh~WWHm\zAXܐf5 ,P>mu@ H4Q'YC'o endstream endobj 58 0 obj<>stream H Oyt9Dc^@J"֣ n|axlLLtMFc@D  3VNi`;SO'<|O q&C. he wkhUTx@Y$76v#*y0g oU7oC9Pcp23K 4 Ghb'p,P9(~62P> P1 a(DRτTY5ؘ# @q/;f oLɲ}[U*|[ް}x"r)/A#l=X6Y:r-mRi1-j7H鄝=P6'J:eVŌf>J??|aNbԾS#i[fٿ>vqHdy<0 6m@a?ŜK!*d>$L|Y!~jQC􎧽/!0O\J]Du_B4A1'GI(KBUNE G폴TѻO/rq .Q]MVt!x 25X .uh?]'/ecKDX%+,q1*xV~VÚ 1iqZNХCt=^SѮ>hVlŬA4.]~IG9d;` V2N~lZj,K޻X=20 endstream endobj 59 0 obj<>stream H |G#MkԤ%$rIBTK j'B[ԫR;A[$ZgG="QQJ++qvvo޼wdIN93~#&u֔)g3MɒyZms<kf_S54466֞MMuOu5M5cfCcmmyLfgXsΟ6m=ӋcOcܹs[VMNb $f^0~ 3,#c3xm"M/!"LJꖙҼŏr9Pұ.ZЊ16ϵCkR<(P\{;T4碶9 {b]ֶ_CC.wd$4 ,j\S{^j^V?R]ԕiO"NisbK:34#N[5m\uƾV`k[кg?|_]u $k;/0C#+ blm"z 7mmxFt2&O[O/A/u˛f|~#>=Yp^ϯ]+\&k+z%zzMm(o=݀6v^^۵ o@7txn.tʀBs vtwp Gw͛{zVFFxo;zGQΞn=dݴ#D-m ;Ǟn۹hVgPQ<=!n<+>=}}̹}[v{LT[- c`ooo'퓷#SO9p'T!vn+B?CG>9>م1V/ p{%_u'Z| u$5&Z-|jIh!;tdw}1Qkwsc=##{7CG?Fk~2<|OQϜ9K| OYڹ{$8^|{rY1Iឞin޳{G$p9{9s98ꁃΡC9gA2HF c`aknnjjڃ`^%wh55uD;n{~{p(inf sG{ǎYCG=r~_##CY>M[paW܁ٳgKOV.>>dҥKO8q=˴0'G18ɓ'S:_[$]M$]M"gY?#6HGndlxo^D9Yڛk+MB1Ytl%Zqb/#d5*'yX/Β1Y>LMrb$c&K-6/36! 2 GFdl=ŭ4rgOVnfzyX V6T=ِ\ .j4LImJx A C[ qKe~ OK[jߒ^WB3,$]MդF*Q432-*P;ܢbܲb[@ɧBT6j0am?Y B 6~T<6b v v,[Z%9۴-miT+ ~qbW;Ŷ;C*TT,vdb[lYlm#ir c!ǡƪҢmFѓyiC-1vXbhBf~1 Y MNwٳ6,͏Ahw'R-90R/ a64Eu+;2ɕ$7.)4ZW-a7Ѱ-؆E(e2y4+ھZlm$m-v$vᷓ^ñަ$"^K=[Pҋ)=RbclE/*P dd!j.,ܩr[#vlbWt-$[N互Gxհ5c+ hKse0e[XG،.4i ;$#ܰ HrgxEGP4 lmSW=*Y$%Ч1^ £҄=b[ HSRٓMrm-vfd-ŎO>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/ExtGState<>>>/Type/Page>> endobj 61 0 obj<>stream HUMo@xG(RlUREIeK2k*bHǡ%w͛jujda!r %5%$H5/xS\8’P!W Hd=GrK\cr~f8 0@{+d endstream endobj 62 0 obj<>stream Hml6RRRJ!mJUD!"ּuZ@Q?T|*6զB M&ZEJv q 6rl}}ݻ_|&P/{ >^u5ꏟb_bN ƟY43EG9crf|gW;ݝ(=k {-b<'@%93`}d/<|5Xi{ 3'_~StXUרeOE6fطƸ7tpwjG (_6z4=8a뛷m=H5֨ag_H Xn\exx&r\=If [.ka8f̘i2fݩk`[,#o::ųvBW(#lof 1{ݏ}}bx5 7g+N8ЍkqS9 Y罞ݖ5`4ea6CB+շMfh;E_fSƅm frLNunr?>,?}bzySꈞV]f_0aF1^T֞ufNX ߅݇N͈.[< _+pt1 !+{}3C.you'wcOAɩY !d5jĬic'c{r]Y0k#oZwg ;X`)0d6w= *GnLb廩,O-{mԥ;ƈ{'i%V6߾aʘ\u :4ӬiYs=4+3(D vR](ÕoS9qwwo'V%_+TJPvq]{ q>:NRglۨq[5E]3lYپ|{7f TԚm!ill `ƽϲEl0_O,dj2fS$4i]Sv"]&ƪTxaWԠ-R36fyZ/=#U5vL]Ĭym`-Y+QЖ)#'_L?{sՈ'-Ŗa+_^B5YKؒ.xCdj]34؀[$mfj|Gv݌oz?I"#Œ3R"H0#E Œ3R"H0#ERagS鶂1ק|[6ufAwrm؀Q\{e]8p%gN[U F޴.6y35+q?1O_۳ve0*\覦,fh)2M-O°f^J500s< 0섙'6롩$ ;aIK-5sӕ`j3`nFvŒ0)Ta 3R°fPa'H >0#UE)+`j 0 endstream endobj 63 0 obj<>stream HLKq{ ߢ"ОiZ+̲a8M  zQVTEhfZ^SԻVnnn=[? ^!mcy\_x-9]@[Qv ʾ6^FWQudDZن`W(ᡜÜޤ ?cؿCUO¡JN. 5oV`?bP5 Q 1@ٽ热Po`Ay(!.&ʪFf4wgU`g4l="K x?+ȪNoy5z9)@G#~&lY"r'Y82mkXI1)j'K脝 P4!J:eŔfqwJ e|z߱t>jGFIekM=8,$GnLHi ׏Lc5TI^*f-9Gle)Po7 HJ]^ DY^ &T^j8šT]*vDE g{ODp^w-o2t?M]w5Y-OTo`*8u׉]{ǔec3Jpi6"*UE``Pasrx.쥳R,}o4jhR&]LDCn%p!l 9X[T?KUbY^=yxc:6W鐨8 endstream endobj 64 0 obj<>stream Hy\EQ4CW0U--QL+ 74.L,Ғ22o(:W;,M33 fgwvw_u^vvw><ڵб!ܹKè%hwx8WLҵknXDTĤGSR\.s%'RcRRGbꝘ׃*V_ԯgBBJ[QXx.woGAKJL=`,`LѫWJ & z#"̑A0RAǨxr<iuq:!C330(!Ģ xrr ǟo;y $-#nI7_y<1c$#`쩣ɖ(8qzXŭ(8BzwDeQ!c M dJIr6L=\Q;$Dprudg$\`b϶ Ycڐ)E8)^a%V<#p@Uu)\P{aw&z8 wd1B]9{y( I Up5(̝sj8Ѫ;/lu-\W4F) k V OEA oz4Z|pg9WU^Zr=P|/y%18#CTQxq0T)%K!4ZaGxRŞǕ%g|xuaf{ӫ j**** = eOSgȮD!'ngzYJօczJ3%jB|55u^W^a^[n+Ê7`cƗxVJE5] >.x#TՇEՕ5 X^fM-GP'im se/ K+| V_7ʺZ`%w؋fO~\Օ5 HrEcjU7+z|'eVYRO.)auϗM!~~r=F$ mrj0MuT aǎAm~0HNIĤRԔmWMUlѢ>Ɔ ~XZ3;+(=o߾}|ְ`TU]M2dCwWS0a]4a]MMM{鯿 II8Mi N Bʑ\<" kY{q y!ڄ֛=yg`0YCHwG~P?ѣ03en Zx9Acxt|ƘcԘ22Rz!gᵀD 4r  NAGnVyM-B&}d:L-+Gd>/lٗz Om'ၗq$$AT{$(0FYW;0 Q^kWCH "BzYdk[812BvAH̽ b A"#6db}مjo$A$ DH L(mY(HV }j!~}+Ha򫅘FDH "A$q.HpîR !Od3"DabRXNaA>%N :Q4HH "A$ Ua׌ NA Qa*D$@=b,y!#ګP #\pyeW! a } DH Axu!#Hh, nEa+DA|Bw bS! \DH "A$q,a)‚h˫^;dֹ [: BBAZ! "A$A) ѕs. endstream endobj 65 0 obj<>stream Hmll|>k귪*4"Q ⸵yi\y0/FP񁦪JD"Rۨ4MdBHB4l3Ͼ>ss[now8fgY<>x`"cq?}EW~Ke[/3VKx* -<έ Wm%]I5%c i !s֚6F:]w~_0S?Gc7F_ٓM ږ"GgFfo ٮ"){co ,"wa}::@ |=VHf-1m(2hP)dc45N#-#\eg`|$gcŦZ&+xnfkck/`osy|['malw_ x.0๙XyY{:&I:Zt0vNĵmc{"@-ZR7766 Uf9mbm3\.utL1zӳ,o#1-}Xj09O#rh(aWwilhUV1c&-HZ&a[vqY[?WMA2ヿ8i.}tLhHV.'+6}ӣ̦3t[>}=_P-0~۸uT-cG9u?|YS!ekhF)D{>WʿQKVT_E[kꍸp>}%4v9s2vkɖ*m ړ1#$͉5 uG_vrT-zN^y]_$x$Es6|M1}DxY擘ai|BJ]5 `1j-K^&cmM*/oǩyts #Meݢ)JRUO&b/)j-ې8ۛwMtKWβ ˯}#URW<enlzHE=#=9hgZ6M|dbxMI#LebO63A_:h\w;~Lиtukh\riW >dK[VVHnj%WΰgɍlCt̽[omO>;w?ӏP4uiql ȏX 5̰HJW:O{o|G1쒧ԫFTŒ=t$C^dls!o+W fWڎF7 H 2ƟFڠn=8i8Ҙ;A+?4zbcV+P!N֎imIk: vWMDch*R3ق; \~ȗɱtpy:um:5q]B-G>XԦwfN^c =C_g$ۗ}bL^n2^_ XH9=uMe2JB{suDdW:3W)=LaS,hw'LGOH=8vg7~2f^1`qiQ܍{F^*gni^OlXq><A~U2W pcFiNjwI״s=YMDd no5+tLx-Wنg֜Ʀ^ŋ+/4:sPUlӅy]_3%C1_z/˷Iݖ.:j@]h-7`scGe4C_c[\}7ul|FK+ݳ@fϓo'??մɄ_<[{rRlN;kN =_W:BóSlg}G6os,pwC9E^-Cڦ!}8OR:u՞L`#dhss@Yx[|@kVV_r%)>ۭ9,i w_8 6Xj9i%tll3-g5*KM؈" FmNC}제--s3*LLQBvJ-zX.4z~20v6 c{(n0 ca~,^80'ݏ\ Ttz0v؞v?su_/RuۓaAc{rX:}p;HՅ_4=Qݿ˯^k6(ˏ0iT_qR 6N m`l}ߟ7c+~ސoyC;H$؁A;H$؁A;H$؁A;H i-06A[Ɩ56zUNiVgal$n_ccg06AJՌ-5j|.7St1R\4/$m#b!y+@o*{#6M AuP`瞨(f Taz\KSl ؙKYSUcmWc 6R7cmWw<~I+b闖F`l-0Jx{p`l-0J ksux+kՍ}+0z i?~ c zثc0*] ^wcRďZt̕4cIb*:%ƳZKcJ'c֥ q4vHd *I^_,L *]? u/c18KsTY]ɒ`a`UؙQYǎy)@4IU'J?`I`Uyͮ)c,_c?9~`1`U2vzr~4NJN0V$?ZMGc67kTADx}} ;:f21JņiQv`p?whg.Jǻj lN)JŶb(G܍}=szzU݇l45ט?}?nl:6 '1Dʐ O-cAp'S,(vhxu꤁m/c00/߆]/cρac=;1^Xy 06{[B {[t!c]wS˒alۃ:`W`l"DmA=oI46cƾP3c=`O`l0#06y{ c=i6dyms~h6OU\(`O['8Pucal.}06rNYi~?YҔ@q1ɷZ!9ɞ(YD_al'Ul{*sRV-*= *-ɋ as|%J 4O 8}5 ؟Kv|bi};`4v쾣y5~۲o$*֒E3+,"Ma;dghŇmcaX1pW#"xV2`F}`F`l'06 06 f{c`F`l'06  س>-E;Yal'n>WxoVQCuT5nȩ^*uŖ.L\'VqO!pjl.cdwv7H~BafP li:$;=Cbi8T|S6;xؓ~T Q=OBBovSj4@xi'×7/7#jKcl Sʠ"x;p7x jP޼eJE˴;^)$(p,ڗ&d_}Iy$E,ώw;hgZcuPmNKE u6b2WRbl>Xoa0,J VaUM,:Xa7%w7ll:Kl7R<%c`<|V)YjE\%4$۞bf4>K -i~ZSYQCEp3w;2hx6ݍ}$plbVL3X\/}yclA&g4"xV{S F`JcYSLL` `l'06 @3c=`O`l0#06)mc=Q}06)mc=Q}06)mnϜ^M7lب>Ni{u_cn 3&mҫ,O)m~_xa? F#-P/*l^4c46^x mlY$MXFZl٢B9-AY^ƖD4Rê.ݍx6"%aSVdijэ}0$fՔ0FRD11XTo c?E||Pcy^ynL%sa_q:#c-P| xN4al0 }\MEZ͜թiq``FmAD3fJ*%I ezJl|+[-2^Uܿ u]%%=*;^6IKňed--M)`Ftc+v~GT(jCFQҧ =(=v@U =eEƜ 06;Tcю}4FvbWa HF)%Jg0WB{I.vrp{[o҆*#]6c1m"1aX46Rv ņӖ,ҥyh3vCbJ!/ AWG/]J yn#(CYIVjwe_ Kľ'4^[=LsJiqYp1;VQ۪>q{пl*mޱۢ}= <0flɬ9oSiɕrc7hcoE^=u1]gl*ƎI-ƾXWϼSʧJf,': Pt5oh0Wz2`CS/Ԧҝ ' 3G{ݭ9-傱Atck#ܥ=;kJ0&{R2vem 5ؠ?u7` D endstream endobj 66 0 obj<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/Properties<>/ExtGState<>>>/Type/Page>> endobj 67 0 obj<>stream HOo@)hR)@ԦRTFrp N-M?}gLjHfdo..\^&c Hi& ɂ0*$;Ah\b rɚW;N-ޔ̧9?{;?Pj/*r2m-k![ޚ"Zcb/[mK׮ģ}jydxmV"0M#(4lrE7cAxC+\܅7H#2 *j-l04v.ECl>(/ /j0~~CNdB3tQY5/'zy&ٰǸ4eɞXW4n{CRJX>JP+X~0JRc44^*@F`b1vE.x;үU/VoKQ-6Ob z7iD#΀¹9ARD(c7 wPYzVvG7->c9U^ߧrjjS'\u-qpTu0y»(qjU hTYEYɵCCR`u hAǮ~@̩6C:ǥ GW6 endstream endobj 68 0 obj<>stream Hmll8RU[ZU ISZ*B8n ubX@Q?T|hSUj%"mTFMEJMd PMxqqlzwg/?<3gG"׸7vܘ`M:6$#l0kbüGa8x* 5?/2_|>@fů3x{oWhÁZasÄsTͳ D&|0o\X p)}}֘dM=Q2qK3U7MWːERDeJ% á]m`XM\ sO;&nO0^NtSO%9[V۴:{V#u6Qkmjna84}ݖhI!E,oz4\:3ќY*LƼt`%(AoL\!+I;_o:5Klc7kL[³u8ϲ$:cX[sta+&Mh  K+?`uDt/k緂h-2M;#|&8?*TYW_z:@5N2YɂUIRϾuE#,-NL|F5~w+_r)A-[mq6Y 5E{m[XtfW *2==ۓ2u"6>s*ӕ,kM'ۃkNy_+1?xK 3rwweﳆ+ݒM[ Ѧ%1:ȿ&Yo1m5.Ι{~pMGa'+k>~e{Y-"bjE#T+o[ߢc OrG<"i:kf_f^&&=]& :ک,u87rjr-77=3'jl!5FV>N?<;OƅUhs6'/:ߎVvޢ?%‹gjOLYWC-"0_Ht[=>!~:qr7ni]~0YG8ONpk"YU -L\k ΢9XS%%8ɦfS 򩾥s1)F>iVMõgk#n u8A`[sGئQ3_.}6&4AM[م;~#v 9';ԏpIˈo^>E84y-*w4;=3O'2kD#wgʶDjLծrdWm[w%sI;6-ta] g?[*GnMi{dlx.CmsCXP,}}H:8nDJ 7KQ<.tӳ,Dg, jrdYЭwmem=*ӕpY>];u2+* )N/fq>dKZt%|؂8XigQg W%2A {5{E5.sD'gT|Y#ZC\6-Dwh}YgA6ZuYS RvL"SGw͘7/@Vt²8Ei9nVDku['»LnMwԬ}VZ0 GYkgONTrtK#̦"O͐Y 9Xi"C`α#tUf# ¬1oLԟ/ Sõ$zENtjɵEn" mWa[|3k~ rrrrrrrrhXF^=Գ@Nq^.K.n}$9:h/ګ^KPܢMaN-pG>δh_l62?tu fm7j^*"\|V֕ݯ^2  X340Ƚ5^]6jNdC7U}qѭeռT }VUjۮ&hfǶ+4io{@Am/9:B2 ^5ey&.jګ:T}fԳf=] kP\AK DK%w˫Ƕ7]UuBÙzXCDm8/k%c%hf@T}A㯙ppjѤ qmdE&fu2wjm/DЮuSmY5wwcWpDFn-׫mԚNj|jlq}54AmCaP[0Lp1RA//{DCP2 * A$ A$ A$ A$ A$ A$[;8h:aM-)ZaZg  :h9!:CL(q+طvcSǸY`4֙ NCdDrT~a`4m]R!Cx74&f5U׌AnkP4!f]D+Y:Ɛ Fu#kb:o<Vt=/;;s,#] A}0A-F/N%]G`ޙةR20zgbFӚY}r,`΄ΚVR#c)%Bu`2ˁYJ.?4`< vsVzx5[&3zj׭;ܟ|eQt0q/H%hό-N?V'p?)^/BeFެmڷdp{7:2Φ7dN[ҝ:Woş +m]?݌n מ{Qӑlҍ&?Bد+Mxԥ$V)mU4ަoy(6_i\m 6Fuc ~›mnFOCdDn F ^qOn&6Z6!QL1Z[u_><>[g*䧒nt[~ExFh)&npq/G0l31^}HߊdMҁX}+o q~ι^aZ q=0=Z{&Fz$}!xܙ;di=!8K_՟WT= endstream endobj 69 0 obj<>stream Hol6ZJ*)U- !\CKBL C(4ꇊmJD$"ZڨHIPBЄ? 9N}>@9c}1ޙ-cnv}ݛ\.AЃ$t[]d*[]c[ke ü7°5 Bm{I3q?[/׹7_þf' ڝgSgM~qфa̾>kI֞Q2vS5Y;CeȢMS4Dg9ڎH=4k+~`X0K sf-̯vNݑa[֞ JZ >^viU1Ñ'hKVJ=4`2Mچ7 05^r*4964Ѝa_oegkW9$$r5U/C~iLlͥʟUɌw6ʿ^MH-aJ?8bSa4uoNئƺq㴴Rnׯ?:kjؚ)[ۅ Ӳca'9Uز,2DFt*6R{vV|>I>qȥm )j8Z7{Z~31VETcou_E#7D ߒZzdbL]"$gE@9`S}qIV4߿L[ j8f)49GL3HgȄ*fY0kx%镯KiXu:z%.Q\N0Xv%<̰E(sbV'3ĨvӀ gɩLݙY9r=w]bKU>9rN;3)xmj,?#UL\uj){T쪱fZdVVjYcZ4kLJNk]{oZw өX&bլ#9 N؆i0QybOu JgjvMj&v۳3qQMeg 5vծfkk{YKܒ*0 a ,+N'.IJja4A̼Wܫc5 3B{I{yvmUwիUʟ9$]h8XMk]>%Uv%ׅLS*O>.SZqH\?mxV32Ey&> 5K@MT!eMd6ۇfGM-ER q(7)Bɀ9u=1m:'rZaIS08|VO4.Y-?E^Lc&f¦ :ݫumW© zѪzmAV[j3 >jNz< ݇UӰIMäڷi& l9 ܭ  Ե N!(h S )_/p A8 BPAP(W~S!V wnZ\TN;"V嬒JgeS~9')+uP(L𳇲ppB`=S,P.ge?r?{(  % pM_vsT.6"{R]r EpƀS(:¹?S+SN!N88OJ/p A8 BPN!(|S <Syp)y˩[)$2p ACNdj2rZBa^# p A BPSN!Syʘ6= B8""p A8 BPN!(|S )_/p AR@'a.NCNEaN\Nb)H:\ BQY[o8d) 8LAҾQ)eFLǵI('PDShǨNB98"OH'h8"zPpmA:&%Osu2svN@壱EW* 4aNN 9>)!LJ:%Pcc3Bx:SIL:}F֨ӱt='W? i^֬nLй|(j{eqaqOڽNE)`A%w[s+vV|py837 >ʄbV WUs dL+o&Dh=UstY5î۷N^[`vc52g+~tDy<]Sb1=x`WN_oNbNӳ#ujw4[LnȭؙP|D2ÉB77gn`#= C6'+AzcuܯqsN.Kӽqsh41y΃:yX;(E(a8?9Gμ_I:MJ'<@/^U]XѦOS#&O/N،9m S\fcp*Λɮ[Et*wxX ~Dz^^>ZѦ.)CszqutP2#i^w`Nlfm(O$Dx*{6jE?u5;i0P |ݥ!.~tz(RR)!:ݨSrN)9 )!LJ:%,áݨ|0ב*WꔜQ:MJwW8=XyAz^,3~wQzeo8EzJ{AĀM.99hyznEzx[\y`z Th|ҭCAʼnJƭR1kG tQ4VHZxe)}e&O#VMMVI6>stream H[lbk[ՇJ*)U- C8&RP(CC/M"FA-mT6*B4 kl^cŻYfsٙ]y|̙3;d *}y 1=1;sonvr~~:X2'RD:PM_[?8x婦=]dU pY{Egϓ]p7GC5 l8zva2Züzg Hޝ35Rq ?|/Yq8ⷙoY;Wu ()o NQl X-Llo`\@2/C^#yJKXC5y#yW@Poj|0Uu C2JQӴ-`Iٛv ꮰ.JL)_ڢ)N]AOP*If#ᴢYӭQXNE (,fC7xixCq75n,85˳Y]` ȍ@ijǜmdv |=I 2,c#|:-Vޒ~5Eٷ (!ĿGg⮳hw w -xxhv q xncXlY{\@@^`"}Q?Ϯ8ewsP8`WE%-))k䄣iqKQI&j>yWM#ouXԬ]Bnpc1",bF#AF@x^6#\u҂ߖ(oSIs.M[ b9]X+ܙ<-{-H Rwǥ>E8qջyH.*wSө͂D\n5GЪH/lwN=E;Ф+-7/T_zT2).H_4IYη*D'_N7IW:/Q6ѡ 27[$H=8A`TY- d¯ړd9-vb # <{ӄpc|)}US<_V??_w*k +W5P=a1@7f-Dt%|tZl=ԃTӻ-]+[WppDS`ȹL}y*ە>L]@ww@lc`n?_vV|0n_  gxwǕ^p %T|:vWH(XmPrqjr`& =I571 -Cy$K TU{4wgB`mJOrA. V]fkyZ6 <f4/ *<^.5 4 8R{ٍPR<}=z+AOp 7 .Af ,A rAn\ ͂ @Y.KHGR~ 3:8/ qB܂ZtRh9h7*^A @QUُZ6v$<,vpe{ #ACb]@f2 D=9Ĩ7/,j!蹀I.LM)T*`2)f0rAG bURybC_ruy@/K.KTw aik>geN؈wK AE^@V[LhK1qkA:1,?mE{~ Lޕgo3Pu+'Mpjq?'n!^'&m=в Xf8_V6 Zl)\B𧻓0.[5KS q5`feAY.;TQȻ A&e-L&uTQ^ATs^s͈tdik>jfj!Z?aT3L -pT 7cLEo,eTίc/״>,sY?zT3IGoHZ},d |ώ7n$w׿[~$ߛoOb[k˸s1 ,6`#\WZYg.Y}+k1 ,6`#`@ $m6\q56rҕdf`'|I5x95Z;{fu^XkTVѾHkWa,`8Ą=d|Wq"` \DYlFmE~ $` |@+X= P(@%3%?c`X,!` %0N͐PXP @v0OS|v> qJJ֌O R9ޱ@7ISg,HB jgLSM0HxMQ8Ĵ/"uF1!JWgx2l0<&CxQЦYz~JYE."EjcrIڐo{4ر@ݛqXg"ɝ#MִXFQHژ:KFʣkkMH` iȑ bIKp65k6]z.7Z7` 8Z@V0 ,tt,EnF>"j(t|,n%G0 @#|`X,}`[,>-X @c <,Db @X b_ϊ+.rݪ{#݇",fZeC5^o@\q+#" ~5mXw @+XX $c!>'1baP5Vt2[X= j e S#y\+'IS5y*׷',`J,pN್reGDVT{(q΢:H,-G}ׯbo2*V:kjڨ Z |c `-4lZ-|ΖB=|39Ō{lf}zL<2U5je5>OS43%cR?]pm|ԴYﶀH{X`#IV~G7p [1z GG52è>ȏO X9XYJ귣 ~o W($ f岚 ϗaX( =V'~~MkϷQ D̟4mlZl'i`2Xd/9*x'+ΰ@|ϑc~Ptx#mJ)܎]̶-"reщHlka ?Uu2i)\\3s{ܽ7*n-`Ew6*EoILc68k[y[RoyXAn-ܤN:]]H-B.Pߕf~V9t)dX򖢮,K1g5B/zyߗb-wnՍJ%hS/'ߪ?o{~\W X kF=p~),*&alxJH7{fϰ@=8k>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/Properties<>/ExtGState<>>>/Type/Page>> endobj 72 0 obj<>stream HN0~I=-!$2*TRwE L*ӉQK 3j79 fuE^p<}ڤy$'{@8[yR?SO=Φϓ5T ߓPwa8wrM nh7=D9좹ɻq蔃tɹ, >@&]S;Pa˜&?S%Aw (pRBgst2hBvlVIY*^R.O(KnrQ̜ΐ>vu'fnqǪcqk2gc7Ա XU_P+ (Vh-p?d_VH9#,-򷄥(L%|`53 endstream endobj 73 0 obj<>stream H{PQI4E` b 9ޠ:"HQHUHjm$N3Ncic2帻'>8ow^Bǽv]~v^Ǐ|q7 vD BqH|Gߧ71`q_1lNNP<<>xs`S0>c G}f<5m [vzR 8[TĆ"jY,t% hp a)ȶaD'k`D*iĈ"# ^"P8ĂӨ,̺l,4xz; XXI'<k D5;+vbId179z;ZVy ~c$o޳>΂s6Q4[)(:'ii7$oEbwZ̚ˑWa9gvE, L~2zꭝۻ7Uf ݼ0vX&8wjPyAᱡjiEv"5S29ɯfZowPLKT!Y95IlgH2ܶw>9zض"34I{ \]]nD+OD4^H]ς0fr-Fnn!ΙjU´4ngZ\hűF?;-AK{6&#iSӉZ*\f U={ Ν$`YSxGt:qpxXnh7Iu ~w6[W#Tm$ V?X[d1M$A,_b+ ZO?@zmgG|leLHwٲNK <!7U 6}ܙ$BXW=CU_lVK[4ɤT@J;/ZH N :vJ-^vƍN ;-"_?e]#d_q%V͌ckj*ҼNޙWC!%#ZMb}9ɄʔᎺ# 0s/G.VIP=VʌPIA*SC!=Ig#^vc1Hx`bVU,Cu!S {a]cGsc^Ȑd9`O0su~av}dw=SHq6Z2ze@Zz*!e%je Z)xi]ZdbM"3z0{M8uzPX+SV#tg1!^?,B O\p*-"DpɃxs!APpbׯ,1lUaZ8f~Z+ ÃX!%4[7w[G,W% u?#j ;*j2*Z^DISPVN-&yI&,& cMRn,ǫ7Tk '-W= Ebd۝zة,&E>W׃~/XS箃b䜽y`L|^8/gJ+z? J0zc@V 3[3Ijv15TD&3,KŔPLVlS(pMM/I`sb]}mk2-¥JR_[b &rWѓ˱a"(ʩ'&49dv^z:3{=p܃ M>#&7;]44C [w]ςB]5ܾyܻy YBgb2Nj꩘]TD &+ԒRzQ /JL_,v^^$P*j6[3[+h*dYuO\y*qJ?9_ _pXqEԌU H]9-VlCdό$ :GPBv^f,qĮsP5D>G+a:ajvj?vY5v:/ w^Aiq̜DomF 6ܸtLYKPrzY%_ARF/,]\y>~$:'I6nbI"Y'ߪhjd)R!Y*Ln &H?)|.T&-1~5ϣ$QDDC-f- 2.κ.&D-/t)3l wO~5q \Kq`2((( 𐇼VvGgvfێS+tU\gۺ jE@\B ހx7%Wp<~{Np(T:h9̘Yc:}%N= pBewWӅkR3gyp ;ǽ}cSt/)&t :[KGWCӁjƷG|w<#vA bʽꜞ2uU"ղ@u*Wە{a "(@6 sqw҂B=h5r %)8HÆW(cvGZ\G۽kf~KY=6E+/wetLRљn3P׽gKPv~eM!L ?adϽy=%;6O utlUGc 4P't{Ui}cƪzV5 {R<[Շ6Q jmr*9K_R&IR= Q0&nbpEg["-[FXe5SYgl͘ k 55QoHu? t]O29ڀ"]Xn]N|H/>DGT~M>Pf`W2BSJ y+ASƏ3;kqqwA``*?\}Yϖl?8NC" W:}(@ARt b)f1إjȵjQLowoЈ/ tCl(3?"hWU}Uk c],Bx_T$<+!tS&({KzH@zCrSgyk҆n.7k~iW[)S\ys%I_[10 ή8yy+/*ĭ>إ>PX[rb|u. 3]1 mKyx[%pj `d|dA*oPX|pÀp 7(N\OTsjǀsdD4!Apw݃`Hbo) y׭jR[h*AL*~*V1K1YNPqIԂ-HmǦtYcelh%&f/'Fd%xqTf7q \׷"mA׈T+ˡ8Qle٪qd@b0~3b 䆶Ůڼʞ9D F%9DD.B1PLD"9DD.B1PLD"9DD.B1PLD"9DD.B1XD(&"rL!$9DD.B1zSo%9z2tѸ&:݄-db`œ >(5`i~߲+ސ1A;olg!!]\^^)Ƀ Ar0xͺ"6lڋ(.fx1fDmd#^qy#5=YN$Y_-:n<^ۄ&]&ۣқTiF/^e}6YgAW njY)2R6))d#-NymW}[\q.Jg&Eۋ#ݝpclbD8ޠŠHsjcE"I1'Fn-[A ZLbBf2;]-~#~Ay#9GOQv(p9^Iv|bO1ޱ~i+Mfqg[conq{YY.Ec'J_rgNo ( u›1Z<[ E[oy8cq2-X;+Is[x::YlW؋w5e -HBnH?=4 J6Տdbz*2siArCZL-&dvh1!C ZLbBf;"ؤtE棟 'sE 8~w7Hojg݆<'jn^X,Ϣy6b="g/`^<sQdPIao4evljED-9KbR#[AI١ń-&dvh1!lI Al G?A>K=X0ufqHoгXo{ fZǛt]k>{ϳy$܋bSFH[hq6ދ aYtb5[ i/oo٤&xv{bwև^A' !àń-&dvh1!C ZLtx{Gjsrf^eDJ؋HɲI,z Ńi1_]:bdbo,}E#pN;_f޸HoXlT ab/uJoH zM{n1ߜaGn-E\ ([хnNyBٌPt2xĺNBqX2',-&dVh1!C ZLtx{G2)bgd~n>cKk@7Z\ԋfn"Osݘ[={>6A f g2̀Y-gq/x"bJEq20Dx+_|6d~̏x܌g^1^͢AS3ʋ_B8H"ye+0bNΠFLad^l]9ĊgE``>%Z62"S[F'ɳYYBI-Z9,J nC ZLtx{Gtn2!^x"I6s)O g1Ewwl[l\dz[K`s@{P$WXtbcxd1:Yl. zqi[5I^毮G'zjI >e^f܆Ƙ5!_ń/bB&2;١ńNW߈GPG^HN3s{Gaavb`{2i o9l3Vz2󏤓o_4* x"}7}zmHo.<̽ckb=3ӏd{! b fzxؼN#[F,M,XS["24 3D'e?;3θ~*,ZY;f>kc#9FfLNbF[ 267]-&[ @lbdβTe%eX&$|tI<"sbbɳ\8#Mu-Ȅ2nSHx"U6:_fl,VRd:uS#AxU%O`נ( M>k\-/TVFlf}"zk>#Sд83 >A/-V8W`"yodl~.TS}UnYXxF/@ſz |关<ε*BPa5Doƒd~5Ӭ nۋ,h#|ꬮQ)jUrƂJ 2D y`1`1`1`1`1$Y\rͺt y:6}>WA?S85.n͘5Ȓ^l&y6ke ㄖ΋"]?H&X, pVWUG"2;WG$yYSjLotfaqAɄH$I(~P7?R.ȑ:Ix,Ώ Ic"`$XAn0,,,,؝lK) :`?8ٮuϺIҠSV=f~ZA#O*[l)nU{Kzc| u.TڋGW"-{qZ5Psv"^*| y6=Ə}+ boS{d&=>xʉ:X*| ,MV6'-2Ry0mT@N0,,,,,؝lK) |M^-o }^F TM#'`[Y?ǃT-u,uզvџYeV,ں̕ɭloqlX+;5y:_̲8DqN8k'К"+SguBމ3p V` X ;X ;X ;X ;Rm<'O&bozMRX o~e/kV gy x#cxpv]HX.`紹~#lqb,|p/35,,SNV2y 5vvvvv'R+}p)@_R-w:7`ƷUͲH`$K+[Y.OUD~XfjaWg` Io5,,㏦SD}+05vvo,?`W`w`w-.*x>ҷ .6ߝ2:R-wﻎX [: 3XExdtñ^$e^,?8UQ,nɉџ,:6#V2|0j6䝨%K}|~Ma`w`w`w`w?߲,.*X5I2) \TZ,--3H=W0bkw ilzȧwT܊8:sᬳOiHe^>6=Juө`r*L9Z5?]fMՠzc*u"NW/bEnM=X||+oumE%F׭6!ߑ3ds,XF$-Nsh/_V?WNfD}FOǭ1,=THX9է]: 'i0&Qj&qڨrfI+ǚ+*'u"Rh{.*ޏfNw{NSphtp˹sfS}3]U=u.'yМ'/ގϚh5j_۴5bHI fZ"%7 O;[} V*U5=k8eI|:\g/VkCmX':YbkZݵ:w1[+É.uًge~'V< :YlሤWTd-iESwOWUP( oN4e3CvV%Uy|U7L ܋[$wy2Zݵxֺ Z[_e,tXXꎳ-v̉))D e[<$3 @^۶/@{X Gyk,H ddЪ엔DB;G )ƂnV gsWVj1k6.kpk|]eQ[ ˚Sٛտ:g#Pܭ/) )*1 WJ:jIY^?Vr1VmwrD|zJe&'Bj{/n5ݪ˸2+?oC+[ZN++dpVWYC€ud *!X!s;t HkJ3ۀw,=8jG;>C-dé{6O׽VHmQʸULɉ^XyEV[$߃UId7ᚓNG}oagN3w/b`1@vdb`1@v ;X ,db`1@v ;X ~O~G*sqq]7>q굼z_:ir2hfVC>M剅wpIݪw,_<_x endstream endobj 74 0 obj<>stream H}PQ:fL(LAAb8<8@V:"HPHUH jiؘ[::&16I(S{-2o^}vww>/1wumG D#@dT-G1R<n8x8O&CVuH[6mT#6(i ;M .xR{GVmz&k`55v|#!3:fm݁|x ^@p"\aV+x=']j)_c_vdp<<< nbIqIޱ@dKG"y "%DJBk[0SFyD >lwpЫ!~|$y0i`>‘9ÞRgGEdT[Hm;iH"6ua}GڵnwDj -Ǧd^K16zd`! Z"EH"퀶B<}D MDD@'lh-uN̿~Oxyx\:E c`e n^{j#pg7(d =0HJH޺o΂s6qd[E)%(Zԓ4 y52ݍjvFs"B]J%iwLGY_ZzK5n=2ĺb3Phi^~'(_;=IDJԠ@h~o,IS($󶨳PxS:J зoqНNLۨv}fg 6wu~ g| Zfbw@ ->Z-f&&8H~E'Ӣtt Z[dZ H;Ib[Cw>nmƦ]NߗUe2t$ZyF&"pEڎ{n16{sr9qf3m$v63n4rp)Rrܴ例nbҏ0: [Koe&Lբp$nܻljo}`KP_jsApl]eB)M c;6 H;c|Ϭ[ؽ {x'Ӎ+UYV|bqxxxr% Re;LxI<@5TL ZfC M~٪[>CNMK ۭH|t>2B;u{2mi$ Hi ZgBA~$;vRIsl7xpR2ŒzF\G ґTD9Rj ḱE怂! s&>dnmi`KPWK%bR*TTgF$ ~sʤ~q@W\ <C 'Uإl~lF:pnxNbS>H'h_{ ~eq9c'ܭ}=`.繻xpi_qd/ c4cYLNZoo`0q5t: )d5Eo"Σ|RvI`s$9a:KWڊZY"*-ġpR(DoĮӫ~ۅ"% %&*]/v'xwo׀S_WMl"c8m˕.UljtvJ+GZ⻨9m>x,Wx'5ϓfI~I?H1::"P!T/VS )0h|aE؜$ uN[B *uӵrTLY[b[}s>Yݸ|]BvC$Rm+$)r[3dwA(Cc>׉d2G?1cVpXAɇWxU/ ֋i-]N-qe:z[=Rڄ:Zb#J*+Ki"zI!޲3&I^$Fp- ֖tm6,AS($Xmx%)&/%ʸe?D/;3(/;D)QXD!yQ" " Z.[Ggv;̶N[w]Wܵ骸8uԊ@@EB{wr%^BWx͝ssnN$hM)}C8J7Fayܜ| 9^p'++C$}J?PE0cyܚYGOٮ>‰dpeػp9>ci1w|` Sڟ95 gP.>KVvMt;DV3}֫`~ #ףMF-+8@ W(Ɲu;ZG]X/L7Wu beIY7ⓕB0]/AN¿n<Mg=H_\GT6a$jSze+Yr֭DYNln A૕ "ӠTLDE[U"]U: uF wu[:ۑA"Px;<=c\t`7c[IOэ nb`܊w xE +949 *!u31wfks6ËIzKlz\OۊDi?|y%Df=/fxZ]cKf}~ni;oZwfvM'HLa&aBk5,ZAn O-q!]P.>00 '!$q&2~u~vE.r>}e ?cu.بv0q;b5La& V~86|E֊΂Hxbz{z[HWApO(fǫ]䀃>,.NPcm@59ە%`T8 &[t3;vɄhפGn #W<= |. {&8>ͪ!&bB4yn)ߤ:cf/9)k?45 m6XRYenjw sfD[uL]E# b.~?t` Tmu ={;n2\t{{v&@nJz ]$QkJ@wsMvtFcwl{cG=ok;~.L#־%}J54e;*v{zVhԉKtpvmCI Jp3DyM1mIl|r,P؞u{wx*)(εUvח pt2.t(wmVLN([ѽV浉׷ڼ6)s}r s)yJqjfR$+gY C^[%ֽ>ګ>ֻ>֧>faC1^7oIoE6oIf6 v};?E'{n'~.} P2g|0z<',6'}$Goe簿ώ>"9sbuӥ/;Dه . /zBwѧƆ3Ѿ]|b/]9D YKOLߩϡ'=/rnr`$31N\6D &s$yxQRO¢GY } j[X?ryl'r7ç;et,P}ߋ6jLƤs lqRMjrZ6_ֹM?[Gťcbfx؞-tW$7Q7ރ{/se@"Py>*$ċH.xeNTwew6ǵ L/R)e=@o![\?~=Zsj[\=gϜy 韹 {nzY0.8KnVd-B-DUn!"u Q[HBTE*RU-DUn!ҪӦC׺+K_Lmn!ĹHBTE*RU-DUn!ҪM}cuO#鿳bbXRZЂG] 2woԎgmn;3+ VnlI lZ_3#~5vR4~|FWn5qss=;t}j&+ȸ-YN{tdÀSuSrowۋi3$њN;iizfG%r#r-^CTQw2I3nkp]WqawSn`<|]YK{&LnDfK䤻^h/H`qҶOR+tgO]NܸVf$:a={05艻7=,H Vv1o~r@+:'QnʇLCB2JB\^X n!"u Q[HBTE&oQ{->;?(>Vv`q>7guRwD7T1} Gqm%z1uK Xfqnntoq23( هB&xVseEWqDfB,R7 P{Y=UvV&w-nzYnL#ՍC0,w1i9Ezf"uchcd$In۴ؗENZ.ko]'n($x6O;2T_[~K)u Q[HBTE*R701~nKiT/Xzn&a[u>%ս ðmR7I4cw׮ sK[ㆋ,`c wklzA YҪӗRw;TݜDNz(݅~@H8.uf Q܎uS6Oi3MF)EE퐺IP 'M{S~X$G@&q Gn}:7ȟ'1n =25R7IQ4݁t}Z'8\jjpQl!<~ƍ^HBTE*RUi,u Q[HBTE*RU-DUZu] &u Q [HBTE*RU-DU=KBA*{Ԃ`zn]gB<GY?C]M`ʹ0[lq[9k,znb;֛uhA2SK2[Caz;<Y[ <ִv8,. HOo~;Q s;?"Z`~[.L#7+7=" \e݄k@1} G\d8 W`Wu?޴wORj{]K]1%k,3F[== 3ij=it^D^ycyFGro8Ցc>rǧ̈́ꞃ莌h`3."RD3}G=~ r=q5n6Fpx{ƦGĐ&RCId]3\1Rn&ېOʥ7d󡚞^ԝQ<.-mRZTdi_ {CP 'M{S~X$G^{Cy[0磻5Fp̷~CGL.Խ!6kF%Ҹxvip%zfE-اA07: u Q[HBTC?RՐ-DUn!"u Q[HBTE*]RU-DUn!"u QVoR-DUS4Mo01~VyQeUmcq]W~!NQwR}>xG~&n;Ѧ &^s;M۶ײGњ'v`Ҡne.gfczxFw-돆 ! `+8t4ټ'ɩ{ y-]36UO'3d.=ʡ'O^XCdFz^-֎@o g;m,uũe.C?n{a_ViN gVvM-{svi ACMԝpqi[Mc_sUi-(L $0DɸD{AnLJ|iz|Soх[c~ֳȶ2WʹҤsqJs٘K-DUn!"u Q?~^4:L<2`s/gr#{9RF#MM`r\Qc_m?g~ٴu>WvͶh۹꜃n,nJb5{"mƹv;6t#o;1= gsn2ayqGS'%=Tݤ7lފݻ9vWޕ+`zС Dk4nfyo;hH`WZ"x/5b2/(I{3lh]*eRI~\uP^ n[(M&*EO; '~]CQFwXݮÊ2$$uF6/uŃk(ԽSٹE*RU-DUn!"u Qu޿IBC*RUe V"V/EݸjĿs~C҇+7~W%4I;si&ss'i ` vXҷ{8=[c71* `JU]R9O_O5wzڰ=}rs&kU2]{- z-jwzKν;M;fv'%쉯$>KiD V&DHL26m.iNTJ}vO5{-uJK4߇z, ]G 7^On42%|V6%>˝oj}" +-GT h7R_V%MQSR^f%> >${}RfO٥6i$GaUeݍqaUK}-MD1?g+R.Vn}t {`Izxu{Z,9.%.)u[E`Q1F+Q(9ee:>^QA(hQ,(Qa׶ݮǵk;\. `G ` J=S>Eg/vԣQhiwx=yv^lnw7<(Զ; ( vXF`7UvO ` `  vXVn`7U*Gg `  vXVn`7U<_}s|o4A"jq_/~i}4!>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/Properties<>/ExtGState<>>>/Type/Page>> endobj 76 0 obj<>stream HT=o0wP'"*T*,u@ QIZbNH{5`2aj4^A8ND a[k[¬G)\æ [C@(j"/yjBdrNSWpg_ҒڃUg DTcBAJIjǩF+5>sH Zp,*܅  7]yғ}$Tioܶ=q9+{f}!INy*®ݑHP"!=a9n8skmA@'"*H[`y endstream endobj 77 0 obj<>stream HPWQ{(RRPDj!$o¯P -T-wLӛ:s9ϱ1U#$n@1}ya$JG7eZ?BOb7@]A$)0&r79z"SKdQ5I\27q\1$jZ[@F*"Vuh<@DH,QXP~_[ٺj =l@DADwE3 |fQ<5v kvFP #iFTD@d9zl-Y (Lpf"o@dj " ˆ"#$>" Ty'8J<`#+WvJLyqDMhH,XM% d4+;1$v3o rv؜<<HZ蔽tb# sUĞkL%@*ѓ]׎7+MR]c!J3_Wh*SDuÒ+AITjwT`"%?"h'Kpk*+gjjM5틚x>vjlǖ?XJYX1{ݴJh@[9"rSPjކϐD¦dv.*Rovh%TME2)̋VeE(zNA`S-9TNrR6o* X){, !wX`̈hN:"*ͫersh9d4@b\SqXsN2i*meHGȡsk4"h+ĤT΍QmPIVN)B!I"^ta*"TIbS:ri*?Sݠ&ҮCQ|Zиe\ݽ+n86:l @*C|9>7O}cpOsd6ҲN[Bղ h*^+MQa2sp zKU{9ɤ4Bcx-ؓmSM)qeWzL?"SAADɥeDgǽ@p?ǙCxr˺!'@>hrk@I\bhvVO5s~_8ܠ*<=e|9Q_@M gSH2`b;*F J38!2ɨo^amX_l^P#\.-Հdwi|Qq<bh!ߘzh>J G0=<ȃ>5|͒:cMtR#WO"j09\I-- Jh)Pb (<'f*I! uN5PtFm%J1YdN^޸H@%🄀9L˪sT$.eeŦr=6͉D{XaQ-TG]m< ~ 肵 g@口0T3S>s:][Zh;:/Y57't=<o*>p9Ԍ4mJ-cZ* K*i 2z~)ͳwQ$FP 2$\[oUKU4M,c5En &KH?)|W&-)~WEI~{Y5k*X _AMewDWRX) /<(yQ" "XE?ڙtfg8uغkUqql.u $$KK,X;_Kw.^,IUe z{IA)\iːDI"N>[>~T}`ql#L Gb)ݓo@8Lʉ=5 =7e+FX @7qf+_~k4G}~Ca6#N~9~Mײ؅{=l..`Wme*~^) !rZRYenjsf{fG^v:[]nSiAu:ݯ#ͯ9/$JD)f5 ;&%ŸgE%fYl52xB#| ^[}'q-{^q‘rFZ,8ſggIԐը ׂ?o4%7He'|tZȵL9tnHToFis۲U&!+7+W>s>#A⺘v{TP &ZK$zTKYxěU$M#n f٪8V,k,@;ķ:9r[ƱIf\;=0'`pg4lRt>CCA=rA?37uMLH H!6 \ױu:ATr-RզuUzk0*5e]3|:[bԇN4 0IfIU UE? ,H̔8t3"9ӫq%}.` jO{" )K@oHHK$_Ϭ7tw _i~Ӎ$xG|L:mu; G!cCEFh4lEE{ +>4'~.pqfǻSrIk4nqtA;Fձ@A:$fr=d3:KUV+dMqQ]šðZ9Uy;jR7$ AU%BT 0xLm{R9UA0E]7)Y&IT^?q$Y%m}'cETv?6~d3hƫ-,0QЀN7S:y[Ud=IMٮjo0Qhu[_id-6lktae;5IRk~G zq%梉T# b) }ޞQ `et`,A](Ք.*xPҽf6sg>H^$>T` ՒnfU«ԇL~%UnyƘ2L C`XT5rnpeINzMUA']Jzd`L `g3f݁&L};42毾&p][CVFh禿oaN÷Kw٨1,1Dek8=܌mIDI/>I]!U= .K;뤝Q⥪MܮՁr UWNyA"$MgNTWxR %[u{ c#C`3v>7{۰}MV,aPh׃~M2~O7eҕ̲s0vLYw=M@zB o SC:s;3Ui3T)ު%.1b̤R0(*ݪT;M6N` $̘aY3\潪WVXT]>XPY])Vy'$ jQ8˓jAHbV2zͱ޷JnEN>_My? K*OhfVgͫP05_x6+Atmj]^LJ<-;OYD%nq 1 Ls-a胔@IULb_x?pcӎ:}"d&~QVi,ֆT TZ%&ɕ+jښ ch#k cGx=ǔ1}bcky45c*%Rw0LL#YZ5Pwv}`HXz=risYk`uj爡 ד>iwS& yV@yRX)5&Q"#fVPQ3 L9ejhE$z, Hu_MĚ,}揱/Lkl!xHHHe+ck"X ~_@{@*>=wP(J`bRLT+p IB+$ T(JBRP( IB/$ T(JBRP( IB/$ T(JBRP('IB*B*=? P(`BP B _H* %|!P(BP"$Uy7HPyq|_ܛv^+WQnh;G'ͶFs1w_vIr87ݳ!aSA'Uz{b@${v+ ~Z{HWN~.^ WG|6Êo66Ӱ~\K|fَϞH 5t ˷IŒmNڥ_vZ|HBzNo^Z33!SH,bk0s&kv\$=N區[LWG(7{K:6W]X\e-vF#dbhlĘ ]rW+\z]sSyڅ:=#)DK'#xrr+k+Eֵ8f"#TS9YN5 |ЖU`S A Sݟ X1w'V<5BZTЩ!SBSө֚W һpڲ2LI7qU/of Kx3gj t{i,31PMNe~5~bJ-sZ" 23i%8l׈|:'\2$;JˤЉBO09UfD?VfP xī(ٜcJ8 f^i>w>s8o&P q5gS-rpwOM%$#L%y=8z'(,;;۱ٓ=qzөc 0)b}ђzoDo J޼Z3yrϧr/TI͸Y8U\efw5G<%K9//0Vt"~Lf;!fiȈ_ةN ̓f@PNqNk_oU22X\ή^y// j3.\?ܱ*^uϩ> 7e-eU[gN5j-.a:!>t*BH}TЩ!Tq 5vRLꗰPcg.dAg$ #qo 6tyuD[S 8~J|Y|u˓uJimP'R7!Y@v0gG =aTbp:Z#\n>$@Õ<;"^`Ve'7.t|4'Se z4u1͓.D^p M3K֫2هG xQ#n*nqNVOℂqR3uL P$9 0ۂw5MWgfSY6Uqu`ҩ(OLtة“,. J*nNu~M]X>4 WȗuF嘅^Q^ "YPOF3h9{b~{i)&z:ػ^z fo-VT7>EaiG򭼍SR:!>t*BH}Tlus7ㄉ" >j/Yfk]&ҷO&`h+xfG/_0Щf:pr~we&h!˩T#SyB+LN:f:0DS79ʜw*ь۩t-X^ElrӹǒYvB2s/Tw_ sVS}SBSR:!>t*BH}TЩ!SBC"ԇNERMNuF*0&5f]c Bϩ`3M6m !;xS6 6~\1-~yrSi%v|Z.?1(q0Jh5^.4pD]p,xZGto[T>d -,w*X,fPL3֛&urS[vM3ՌS[q;P{IT$mNeޯKb%ye}f𮑁i7]g̩Di8r*U1srK JEH&"SU6ENER:!>t*BH};q LF,_+f CH7^<:Z1UGNZTiTpD ^tFpIڮ8Bs3LA8: 6K(mשv*M7'\O68LFqBU23$*2cW]ɘU<*)NrC9}nI Pl: S>̌xQy4Oq*t*BH}Tw8s28A2zxIb_ؽ־6N%ЩևN8.{]:~^#Ⳟl2GbzsNǩ;_l*ѪoٓLf^ЫL?A' ?N].=Lﭩ-3T[s\B7Ȉd4ӦvPߩg|S̅l{E0oMbg*mD(Z. 4KJM |Zdn*%YKЩD ;ҩSO #mie&+R0Hfy2EpZ^TޙGH\NXz,&|_&+2%yJtolj6'3MU 1nۦD ЩiGþ"t*BH}T\NS$K֖ nv>?HZ;x ;9~G;uSw1MYt6rH֚zə-mOWH8HZ;Gi2K?A̻1ɦ~<ǤWWPN%>o6^vM?ZX&w%MV1,p`<ũN"t9DTIx|c̩x<ݩb܎em(?;UŞ9.5lԣ!Z l>﨡+爼W(/NNeOrlFܫԼD4tݩ슉*vCE )M.hOX| JaGZqk/TPSoƩ&;?TT;naBL;y:ts2l3N`ΞǍyMéSٟApQw㻌S}$sU**~m\FLwֶtvUdȫGv֮IJڦ,фL{E|Sw*p;;w3;y"]4=.S(,LnJmPO+5#[ow<$HwrT\@}j hWE#TvU>]t1" j؝sFq"IM9Ǧ΀Fv@8*P4(mGsə.>f"9tŋq5divngv%uTJSe6NKɟ@1YR:C*+ܬ j{&2/ND?l]Jʤ}J͸P"E2=_,&GI#[ʤwu")S{*=[w zSTzwo N>Zq*IN,!qDd⤤?a/K7hD$ s3yQSOrSA*8vq٦ Nug;Y7rZlZH:ʶ%ȝyHfܘ! %SWٮ&XndA2yr Nu*a1"֮vͼ1ahaF kcQ;v$ڂ9VCD.Ssw*9*ETj!BUn"ltwt%ژfB^08TP S@}p*N>8TZeCr~ϢC'Ȑڝ\2Ne(tcvę89UcSX2Ϫ?u = 8g23i2{ok'9n{?M`4I$bbFvPv+2bE[WP*l|흅7n9FI֨G1n7iM84\}# `錢cv{C#V m럓9ݰM+;3)YNccw3=\?TM(nhdDhn?ۑ&vLFIm NNr*{HtU%EWs3Dd7+\Qvզߊjjqq* |OYq F"re7ӆ/RpVs-&*6B7ǝ!_8*G~L;UVLd7n;'(DՍ:.o*[{.#A\aPIdCf Q^ D4aAnom2pSݝ+oPVPYlZuTwTP S@}p*N>8TP S@}p*Né~[~.8TP S@}p*N>8TP S@}~wgTP S@}veY~zLoslCTQqĝڳ6<f*8U~$~Ef|E鶑g+`4;DDuܑ:U%lHptPCkG P Td%FlLs&'90 %jTwueDݑnR F\]H&~I-?ߢyw5eۑr*ԝf|0ZJpG^NSl¦ N>8ԧS-r`2ˏuHCzIb;|/:VLKj[RTS-}i_UWX͕\HhhܦjyvXUV=*D(vf{møSEG؟z[3qˣ?TNWD̮ڲ(|;b{nvEJoYFcSmyYmGsC))dbnE(^잊2y\n.N'$G9`C7Q|"ܾjN5sA}iBZFuc&/6Y"-5sRgp8m>tGkpJ":WW|#C)v$Zza"W^R۱JvDˣ,m5 a2q 8MLpTӖ .8TP SܩeLd"cS/]I.僟h N ڎyZnT_ߚNvW#EČY{qܘ6 k$E]Ը6퀻ܦǿN%RtWyTt譫-ŊKxH̉HR\f]EfT~_Ѻǣb=2WfT]>Pyͺ7N(T>KWdboTCԾS"_wRߩӵUPIVdbuR% NtI/v9NgʞX6\̍kVمy$ŋugqi.ZOkGS5Лg;]4N%>(ڻ6or%S =GQߩ"'#vr33'z;Fsd-C’RT;U| naZPrSYj椊9ZQ|So_v+E)ba(!FH&b50|~JĈ b9]]W>u>]߾z*&/&pJUJ};yz%4"!EbW#JD*ՇϷR*+2S]['Փ[=UCQ$wsH<gq[# cW~|xo0=*=BW)xxP*ɯT4ϼrWb*nѮ` ]_,o?ݑR5J0*=BVsxӊOgyj$7U/CR@~L!A ?($W{z`>X6͑&pdggf[~A᰷wϮGyS);g[JC ~2 A]:}޸XZyiu|/jTc;kmx!Kmx"E"RJz7#~&W;\%|H,!YꮔjW[j$lRTf{fW\T*Uq5@kخ֓U|9u y7cXbs +x! .xr^UޚVR\VBޠpصEx#мmxJՇŎTcT/RӱwRsS^ (0RȆi`(&.Z=TS*^#ܬ j 4/J_:m|:;Zj3X+*}T.f"Qx."e1[4^.?Jԫ٩8/ɿs _<]W z0'\TT R@~&)ղ,}q{rc 89Ȣ{Am;bpfӪk R5FΨ^x$JM\O /Rq!mJT3T}-5כ޳] ."q"YG꠭lY" U4<%uqU)&ۈSW&PEҌGkͅLU*Qa1"lWSLkw3eZ3rgǎx[0YBB.#:N=>$6zsEdj9F?n­h?]%Z"bB<ڪCoQE-.^^ًU?]NRtR5?:N/< ֡1r ꀘ܌9_?:J1]t@p*Jĵ|v5mJwCL +>ߖ|WP/6ilntt.:LUU|j:Gfoh*vV, ꢓrc5wXm1u^Fb-ωN\׭;X}4IJ5{=Rs5$(5(T R@~P*ϦT߭(R}D -(T R@~P*JA ?(gR-˲]lq5l݊#+|Nz]m `{ɶV"^Y:\S*ǪqY S)U*NI*x}qι}Sʙ RJR1f/͉}z3B}oW#/~WWF'DZjB^UC񼉚TTRdT%Q؝T|U7)}K f[LI[yWUx\=%x:Fn#iu v6`IkjSo%#3=208:"sp;(jf^[dl~HpЕNpwRqRi.8ޓz$r-ELgJ%jfv^V\o9w'(ٷT"t6hn{>WJHFCM\&cm+|S-;5j(ZQ7ذy1A_]3c#"UmPmjE~_HHu $XKGU\0;Tf3oc>O K?v~RJA ?(.jY;](pr!L.<6zR5MƔ*nJJU|,(OSz^+kMkqC྘TZEjΩN+F<7'7=3P*x<~Smk!8&V^vx=0`YxVrK*R;QӮ/=(RJz#Y4~Syb#vpGsDD^L=9Nmjv^@+V:4bぉZLGbH$j,d2*YxHSn>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/Properties<>/ExtGState<>>>/Type/Page>> endobj 79 0 obj<>stream HAo0sL=1F*ZڮbiQ4*nBw6$*^`l7WWav7|3A(ۅ$Yn| o+ d&ƕ bn( ;2m-ٔ*,'uo"܍o]7DCW7<8ږUxފhx'8NĴdNgJW&2zs;|vhhgh B !N ]ϐ>stream H{PQI@[Tw3~?uF~kk.;~B:@j {e # (H#$!ؑ/W=CHg H[M[HMDkGyS?':l9|lO/E,.m7ZXZGn'<<<bڟ_ ۻ j< .ꭴ8=׉SvC|SW='RO0^#3r!,434=Y7 =$zD5N CG@z>70!Ium6 RuDDaI?%%b."p]?y'_C;i8)0;:sxBfN`M٘ƴƁr";+vu :IqN67`l`Ofy1Xr&9bl$Y y-:r4 .[ĒSO]NRwx!6Nᕚx|#ﰡ-oc_Zj[;52b Thf~3$?fvjHTPˁFzM teIB1&Mַ4kuZ8J^{o!a^@و+3; 6q\ǯ? ~ L!mig?nUf&]&8~M'Ӓ*r;ȼ(M7Ħ&m Iv֧Gn՛:aw&G_oZodE'h^QiWw9y]Ƙ6{`-`yvv< LyKwL럇Ώ81\lcK􃌬NG*P?S\vjDHwݹ:tƱ-զCJc}Nve+2miYٺn@bs( -ή;_dۅwtguaMDG5 [;0]&촟IKE5Tl ZBUIfJXw͏m:XfWh6 ]LW-'"RY괰䐎S$:XwKN֝뜼u'N@Di*͂g=#ŻJ* +V,+-Eq'osN2;]i`KpskԣJ\ɌRo SVCOAOBw/\D^80N;i.ux[(Zvb;p7Ž܃nGIw?[0݁S@*#<.Z&Nr?ڬgxĵ}V4[Àb*JpRb *,/P ́[I\%N[(65(L߁;MZp*9W%,KxSJwAsm/v|%K <ގ{mֿÏ3Ώ;@XWYNrJy =p8]T{lf>FRKVSe*Eԫ>4 SKqꎟ侺sN2;27P'Gk\}ew&{&=BẍKUNq_BIVw!-kwTwm;Φ;A"xJíGKS|Up;K JB?''xW'9%;z :ݜ0 {@Mf 6UV#ӄ[Ľ:f'UAQ! "ʿZOQ~2yV͋"gqI! uN"rN_A-:E"7uZu*J/Yv5nٟ^Ѯ_tНDL"&:_u7He^ yGsk:Ŋ|6\jJogϥNB7\w]ڇqȌ,}{wY@ { F'^-BC @<&`o(-: ~guZ:IUP!J*ZZL-*оrʯ엣}^Mw.@C8;9- }L_ߑSʴRhu_ٴH@-X3;t HzvFd-egźs=C6 \gxrUtd%{ F<㹯|th!}=7U,Js| M4(V UXuO`]tT^ITPJzI)[BRD/^نq'$p9I t' Օ땛2]f"A[(&c8בIRK_!~D 8<4 BR<<5QAԊuQ?G4iɶc/ܵtU\c[wA003 3sΜ2y̹~\|Gݔ}>' -;cB&r3@r0}VhP9#c>y"Sh-F`[1s<׎˪KAd1kG_U&Ux0L[{绦P&<`eģL֯X 6Lq&(UÄaVf1X*ֳxj2]Q̫_e"Sٙya3N*CR%MX֝C;AmCgn`xUm"=rlyrBv)3{̎fI!▕Iq>kooWFxW]U4}ofkZFt aլA֣u`J5ەug& |HT( +c󲮝12CQ6f"ijUݙݩdMn\/}Dvl6u׋]}c{MwȦhtGYaϩA0cH]c]7`:4ל7̸ǘ(wcNzo>wg{-5]~b(0B&#mq楹a}Y5~ud]huύ%c!ILq&ej5,$*hH}:E1וD)º p==I]q. t@Gt5]/.åϸ+]T` ~maE @4jm/lrT?/?P 9|%{Mw _?WF/6mOd:r.U.9B78? 72P&<`k*4Q i(sDZ{YbͼJH}af!ɦcl1F\DgBkݫ$pJDŲ5]Q rwrWhwaHo~6-T8= W'{F|àD%]u˚8U)C*(B\V?Kr YFo?zCB#t>ӑλ!\ r Ҍ iQ V7ȼrS?HUL)*UXP6;#V~t@7\S#Rڄ_nI$wmonix늢E]"e\ޭK|'~<m @wzͬ %>A}DwxZ2d[u F0 (|Sa m8b]$ wŷqZ:ï:6cZ \wݷY!ȼ95.ɠ4]:. ]S& #>ۀ'yQڧPTY_Ԋ2?׮?][ >,?T^X ݼVXPDװd&% 83?[َ̠Μ]PyzyZE^2gyL/Bi3K$lZesW$ .I;#A&ap0nKc#:'E*P(Zw r߀>W}ƥT;PͶ~,C+8U- iVPGVLߕӕ%Orǻȣ6K]>_ #fuaݕ ٕ0-g6&__w 4mKAy_巻ln{ovIv,ɗy<].y9rlŜL ER.s`\" ˟|wg˝ 1 q> q K܍'^@ ʵ)h~z!s|㏾I4trxv|!f 9M茯B O2*NXsYE+1W\_^] $+s.6^~^J x?j?55^23+~|:xg] ZPbܯlPpn):߫Nm T\i #`k GRR`[21$(7(5uRa3 W78ƺƓ" icЦf R؊2cmP'bh݆"^1Z017~3]t֝xB`FR}Qe؆u`յA 4޻@*ڊOSѠA;4h̒A, ;4h̒A,)2ivw6 )#4hLELxB:?ƿQQW;*jkr}܅%~*焊+Qq lɕq=%TrZgG+쿜PPXMmU ѿg+m,G: -բ6nh5\y9ۭj^*u*P, ǸD={BC"w,Ը~'kAW!홖[pK\i_uhܵnꒊ+|:b <&ܭ^Y[8J+ϜF![C.w]rPOlT堘Wدz=ݾW!j; @]b*Wx5w9ÄFuh;qW:GL9 rv+7~.fYy\% /]X m5ܐ z|oڄnTTS,Z-3FFj4ب⿀R۳]̖nw)1$Bq70r]6Vc^U7^y b;D*OSmUrѸesy!Q+tWLW(nZE ުǀ2W E\܉ [jC׻ ׼c}&}'mI{C"w,ԸzidpZbdTv3U[5M6t**Y+ӿ3OfvEwr=T~V(Ο:AITتΏV\yqator<ߋeIJTulnբͩZǘOܕLӳV wPVBvZNܜF*[u sgFLj{nTh[-]:QjN@D,9&R7gkeǺrzH܉w0Oyyݻc'i̞>;\ު+q[զo(җk5멸gqW2, -v $+|.zU6Z1C܊Zo+>wqw/9,q05_v{&Z  *oMܢ~Ãyqw\=xs[U;7jRW6wbVք00Y'reܗ @QU tn܅zۅϽNgl |wTU{PgUzwB;RFeEov/wpȇ{sonyLUj}eoȖ֮:סZb|MTxq;^{R\vs8h K=nf\U\mڄ0WuU"BnQh´6mՓ6U`6ZvЖk8TS'ס~t7ܥV) w"n?wǸ;qo?q7qoq@"LLku홗5$ir9fsWӪʜpiAۡ%qw@c<ѳ[njJ׹>u6SLQ.NJZИﱱZqgK\7@:\w/yBEǃ+D]!w'*F-7!$ﹺ]E -noV &z|M Ұm;琰5tDrݫ3v;yݿURqNKC:TἺi-gC mBmۆn3Ѕ$&=׿̖_mi$UrVQ痬U:ZKw剕ӪF7׼̖㮰:>ZEv>nWW<̹M++OiᚗYC"׿;xWo=,q0;_#0]1$ܞ_OSghM/Zu^i6͕Sn{>.Z]&LښS0^m` Gmon_S=),Ν0utև_ u"̭|kx fM `qwE `;XqkZ{9ͼp;`Ѕ&UtJ|gҪvl>9Ǥк _+Esŕ)mfk;3ν lvN}{6hj F<ٯ$q%6w]1.$ )ٲ|LuV Tc]X/k[ƝQ7^T"ZoՖK'RNI )vV<I wěOa v s1fOgĝWJ λ28l5E`^뽆Q3VP1^; +_XQ&]9>_8Wa/7效xU(XG8-FhrQ##X; 692x+w1x7wAlA`^U85rva&^I _y‹qg ^-^w,6:c,k. hbK^}"]8 Q`1ӋY7+3o\&LMO >AЪ3usu1S^,,` ywɪ\yS 53bٸ3YYW^+Ɲ@x5 - V$\ku05(ֿKJXdM2Y Fe&X*2bWC8ż#X ; 6 MwqG[#b0HUպ#lH̢u[XZIl>,dy)k L;elUD 6 p'[Y6V]ëw\=Z澃]f]) /7wHfq$G[3[cR \g3~.K.ܪf;P38`~\v0L$dȌt{K]y\q񯻣bJs\I0hRV N(@;;qq]\-swLFV+E-ŝJ>ǝT X&\.Z%֐.G՚i&NX-qi:-.sYG+ŕż#X ; 6 M#b0; 6;%)^_{mKԧ#+f&2R^Uy<ފqiw`% 7.3ܰ-qdsVw>v~2̃weĹx{7g7k 1w={A;ͮTf fn>'5iMźCW p?qs/ڂv#U#\Y""Kѕ@ks0&r2dR12we[p>rwn;ӆD pw޸3%.eb@޳~w]!=˸x^4G\5qWeq]ܘ %&Fq˥ b)0; 6 M#b08kw%C& zɾz5MtE t!1ۖ9koTߌỸ^:B45]~ t!+me%\ tcAtŕW ԸPT>K]]2}jf=\ӳB7ST V{^\Pw K5ϪnؕWo߮*.ĖtnͼPuͅfpǟw E.\ druqQwSrI5.1{wEӛ_Gq;+Q]&Q0n?hǻjf3n;o=_W_i;IbiE.(D b)0; 6 M#b0q?@(gE겧Ε3!>qRR,nҥRӍ.;Bqmn[썔VMG>jx}kһ|ej1A3lLcƝwLT_ĝ7{頚t1@܁j.;ם-J!qQ<+j`qW8'wo,wZFBW3V;y9]; I@TTFQ3]{`ݷ!ޫDWI)Ŋ<5Iqgn:Y!l:]8RfNtֻ:.w:}Z@q23[ j)뵥x}] QiAoݥ9Vz{[Rs]j1BԸ#X; 6 M#b0; 6;պ_$QCIMH̯BOΦG`jܙITSqjǗu^[15.>+\lWu \j&v|c)o])amZc+,w߂ӣdݮ'!K\]΂yoEUj{ K:+x 9RqLj+#0/  M#b0_wA; 6;zp~*R#kJ['T4[Oҥ\JkkaI2zx:gsДjc ܝ8IvUMXz RaI2 .;iSVj;s7@>hvvud Bl C[}2J3#QysAbt-K] 3}A!MwJ)EM]q? VY L|Iߊ -s|7;d";Wq9Ì;/n;gFV~!Dz5fΫ]ybfzQ.xx="#V]q׾@WQMV懶XQyE Ȗ!tDwAKqG&` wAlA௸?wA?#Uz[ ;½yPقnkpێX9G`jpw w+AR W'-yBoH_gxs6""ٽ 'ݲ{l#y@VTtLR S@akvq写ZS.l4E2{"n yRqL wxILEgtlgJuE*S 1`/;u2 R/-3/bnYWkBqDDƛ~q&>rAܹƕJ(Q> V@݆4kwEy,Մ遜) : @.Nt襤,o15=x WRֶI9׬-H Qrbe0l[8PwDo̎; E#b0; 69~a^083meK]?@jIIKb#"6jrmnq~f }ӼY NwJ)_MAXRoM9޲:eg0.;Xg4$R+H+h>;{זq+v~0C#D{q9Rݿ.%9w#x2ZL;XGa5C3QĻ+tI$b#[ڂM[H qͯ;⢈tդB_H*DV#QZrGxR! !dwE`BqGY?W!)i6%(& 4f,D&ԑ ۪甪w»}#a<]18 R]CEaf?>`}%<w݇`t_vx';9R厅N,"ta݊ ̞(?굻q@ Ҥua$؏53#%KinM^{,wZՏ:&ȀkC;8/\*KDߎq<~aB2aUO\ o.16j)q>u.E]Y_Z*_9r#˂*=~qwߵko8/j88˺ڋPv}!Rae;Ds^H>> ZiBȵ0!#,;B"ό;BȋSw{N*jCGJq9dؘp4xax;,![| , EH_"(Dڹt1qgDw34]6v9#ubܹ}#qo||qʡ9|Fǝ~[cw+cmGG^a-vl8On-r,Mݸku^KN "G肺;z?uq*HHZ)uK|q医Sn( r0!#,;B"0!g}w۶u?~Ӎә`QbҰDݢx#Zt%"pmu&LJUEZY(E_c1P6 w>s2PG]CٻќLbpp;bX-O<~P\.sn.ڭ9}/23 V,?ͱ{|T0Twus ˒BieL*F{b\nw#tO˅яEMq5\wgTY)ɚN%h1s&bs#)Y@rj.oT.|/>+zF\G-Wp߯]4B?qڸod2!˯5=m>uzsAKkOQSS:"ލKn$W ѿUszN+LTʳ̭!uq[ >rXT P2QE7).I=PKGxíE\NLHdMYYw.r)ݴ}ÆC~e~iZHA쐖3: @Z]w۸ZvoxN$"Ek,0oEuj;vӤfҿCV ,.s&IYg&݊;~P~ ]ް璞Rߴťۖ0ءuބ qG!wqGY!dwE`BwqGyU~o߷n۶#`]S : R# ^۰ L~UnwJUa~S:N%Ǒs+%zm;= `A#BYw=nwkkwVǝ/?.w)tZ^[_:x\A5`s+ڰ8FZF`-w4(|̀+;)j2?*"RnuW>L'Y0wLzt4TmMJnIvM}$wܤpU܁w'LʘĸKqpZ$6^ہx\m=Z:nĬs;F~e;:Zmg|VWq縞xyw|gMfHQDLjq&n`^RhU%1܎7l$9LY\e$ױO(ןG]m C0װҳvd@cjV`BB`BqGY!dwE8݇1!/ˏ[Em4`1T2E 1V"j$Ҹaۇ+?VXt ! "8a!^kd1!< E,W! opTݒ"$q7-GMj'lo8*R-$긓bحUm(تBk@uKAQ"D̏;ӯ|qJp{saUwRE24L^bqX8NRe7Xwa|Ft._)Znk-' ˲8g 6F[;""HBM`BqGY!dwE`Bw0!/ˏ+0!#,;B"0!#,;B"0!#,;B"T>g=8BO%qwʕOL&!SwRmovu'/DRʓv7,΍;!շH)owCٶY ㎐)gQ7׭SU7^$0օrqqr0;B"̏;B!dwE`Bwǿ&އG/GWBsydq1ŇEw ! @|tS>stream H{PT/i*" #[AEBQK&tGqjL6I(Sݽ{ٳܽ,sw~sι~#{wDMD\"K^F"@  2I3yD3]\ɉ_i"D[ @M6]% 6Oeb5Bhn7ۂO'L)0c2/qn0b[O oL|^|Jo~sQ`4 /|ǰZބv1`cMl\`?@'‚,,{Dxש+&";B"}^R@€w(HVÖ)E>gv*y3Mc3OsW<鈷-ʡl3n4CѓsABOѱ YMl&"NtDDA: aMv !rM^FX:DH"RHx!R^~"!bn" Xr}8bE,g0_qfa%3ED\wY;=)E;5Y;ZDeA:ky p;$'L RH Iߦ#qTP[Pj`!\}UR-K"5 JBϬ%e""^$  {hr43g7 h9?r#koEǭfGCtAZPKբUT/a KH9 WdۧhH+H_a˭LGˍ حߗʒL@,'RL 8a J EXABxxWM:DWo͚F\O UTTVf(iX֕X-AÁy?*kqʒڪׂ_DW*&eBhMvzgZ}z^< N<AE Gu +[).5וu܁.1ŇuZGBO/yǏӳr{ÃyFH#|/^g7xwys x:Zn}^5[wBrTћ*TlY[h ,Rw{KH&WHhj{?1UjۯJZ;JН`!~ (KBu'9ȍn SoXT%!-N;v毧U+.)ÃXG ^94/70晫{d"uH߱f51;3::޲(6-?/^. T ,4i^jTA$TkqhC ,xMMf:m? Ueb`0k/${vt: VA;BA.U]AޙCDaj W. 7̚92O\}o8'{F8YP e%M0c*h:c`{43y-h I>$1J* [S7+kvi*M)^$59<ܩ'Qg9#\~Jњk 4BL w5r(hH39ˡ 3­4=p{/ĺhj7Z)vW6#s^ŝ.jO[ -ĆcςGE.7w3"i32M#*jVI(2ju ^VH(B_9vI)^$P 3+%LLB- ?Mjejv]}Ω \\Fh2"n\nK"VBfQ8ZN ['XG'gpN==\.S1axK-_0 0Zv]=?Iu-9/}һ8Ym[E愦|ux0CzzGli!c?UMWQ!T^UF/KEi nhN&I4+$DbB+ߡ'idA rG )^E|IKp*a/,JO: !X5'`*X+eAAAk" rQ jź(Zڙtfm;N^+t\g۲ jED\B "!srK Id];sy9ys~yM[!(k;cȂ$C i 2Cnv<@Erć2Rvk™pFR8A*U 6b4F7dGP'¾򮩧cPuTX7Rkd)6a'j]zf*YrֵDKNLA&@q%۳}eߞ(yi"GQ*/O"O&54$7Ek6{.AQXF01v`[H^B),n #jh B`"1?~1Q7C('V=gn8F1MS&G'ܓbXܠzgNڰFL ޽UC5'WzL*v!֥u.V/Ո LL QÄ0kX.Py ebeIS)Pjǻ8w.jGr) J@Ec@!0o/6ʳdOhLG7ǹ5~FJ (TW6A0@pH$Aq鮶c&׿8 _inƋ8xgc.&ڥ墺g &lvM= }Yj}:f:z.v~ֱP`.\ {0'&"TJBh4c}_~lVnvyH/\7??h0oBˣ/hXixGakT>ђ[1H$urhnƛ vs_>NZXLLC8D4q;uIG4a&Fys]wԛ+U[]qLnG ˴=j~&Q1qQ9 sI \S)/*7d\庁؅0 mDnb=BCAnU4f[ 2t I0P+YC8;G8ߣRo*C+ :C=Ҍa?_d4 E5/pIEN_]#Ffkj0MK/ؒtW:TR-<ftDJxYub=K˵ X~&U^e!K.֓Л/WطKؗ,$ Td50H km> *}" hĥ@AvchO:\)[M~/ 롞9I>{W -U+S=0u@QZ_\ۓ}&s%H+0R D?&euxd:8@Г/z%ybe}[%mnF/Gz El ABAEcve :ch \NQ|;hЄOnn7qg+;G"gy3W,WK+sΑ/̒ 2D)H!hAp*7.{2V-[Z<[cZc[W,y[nK{]MAn}> A&FDBv% :8Ac?VM2X+wiTp ⨫N.]q,9"5GQ|uvMM(G֎'0vA !*P3v)+ϮYIS}5Ng:X԰||l?w~:1*!H!<FP͢Q=e ?P} ǁ?#zD^֋2:?BُQ5b[ذ;Q0^$l=N=k[%~*sejP `P 3I QS$#s a lEوѶb^B1J`R%IN*C+5wg擌Ba: _xK߰&5|{c~u<;FlQI\Գ7yԳ1u # ~]Kɐ}***%Dȳ""ʊ(( ***+"ʊ((A **. azATTTo_ATTTVBPFFBŨj MomnnzkXYWWW\\̍<;iX,sor]eR,,FWC>(Pmmmcc㛛@%Yd/$j {f.K`R8+JBrf **}lIo8*D۾x4-_hvgS{'gIOk!+gRQګI$-%=zհG/Jx ~MOֆ) ߇Ɯ,tfI1)2_5>NFN-0cOFU$-l84SWs;ˑ$Oei(.5㈯yUHXI0莤P`\`t֦x5%$=$i&%wHPA.-fp_BX|/ΩS2=;١IѰ;,6}@ }1Zj:#Aᣀ$*4k I'BZxrhM)rd)^[a;U-M!O{O7ujvI#T4m,q|ЗT`\OD;*N9+sJ_u~ >:qӠ[DmQjG)THԇU+n?d/DqWVo[H+\6cO9?P2G!E])TK[D~Ε 󽈫Ehiդ:1II6^u"6bBQ-,b܄I,g#5J0ZZufZ+^Hq_F^VAւD͊7 onYI5 sƙ: \؏"Yg*J~u6?y˷p٘7j.vjbF-AuƦ?V#)b_Y3m Ys}W>8'%R NYMQBfԑn/*ATۂm>zZ)ZD9<+E$4SV3TQYCG;'{jxjdiձylo%d䅍_+9Kb48f_ Lu۱M. >0xig81Zs͒P ԷǛI9Q}%SNxSw6Ѭa$\hY lXcV;2~r;--̫pfud ]&~VmmEx(EW?Y`1'WAފIȾ$BK;pdj6fM#?l8M 8D`Dåc (dJfnkg:sHБprgfVbʙ뎯N}2܅eVE;8ÛPߥkuirmgWsafAڋm[cnM-d $СF1dN)l]&pvDTC:ScTb&FxiX诙rzcMgBPg.GvR_M_f(E^q}E-Ϩ O~0=p]<&9 ~T A쀞-cz$@XEձX$H`! B A@  ,X$H`! B A@  οߏ~X$H`! B A@   ο?!A@  ,X$$x >oHk(D~:R 0 pCIß{Bz‰׼\@NG$1s&f?YOm-G2MREO=v-ffڻ? o80Rczd!e;ͦSd# &A?~Ew!?onOa`Yl=&ud-[{V^ G^$:kuOB%@2tZLzKߒf%[0w7 C*R;yw3HP)|ٞufrVMVp 7Ԭțц1!}6u~~.LZX)켨3j߮,tt ̶%h8-nVRY>w~:;2VY(AQ M|"zYwvxNSw+RCYg o7sEfi.r\-A$ i'tX^\=y!A! Bm 'A?B r=mDB-'L[3,R z=ڎ4 xCj#Q+ i 1U.O/At$P4גP7vGh*g_'gHpT~  I 2 ʮ.}(;$(P I?7HЦ!e1Naq c&A }\-AWp&&p̅N%a ,X$nM ,X$H`! B A@    $H`! BHj|chp$#9=f~Wn~ 2u[na Ð|uf [V32n5},jXb5,f3)g:3;^'Foh/Z1dfcrYt\Rm/sJPIJPх,\.S:.Tdfs #,Ho=r p aSg/wۉԱ<렩(+AnZOFdGs)Tد-a쎤oS/3HPGMf)%6 ec;T$Y_~g["K$H`! B A@ $hGtzzQ5=^||mC2-7/^ =uYq're?p| $-gIPxkd_T@1( UinH'¢W~[lkn~ >'yQ Ҿ\yEu9aaE\ ;g:tjy:KY!̼[pK$hʾ[؊d^L9ÖO}mnN<}nWKP1JPth9$hdž8 M,ך3}9(AEF>5#4R[ŸIYEƲOf z|4LKh|=вiUf6_3A_ćy+ C3ˆ df4}eNR:uSz|O<^+r+@jPدVE ,X$%NGy#Ͼئ:~x1S" , !D$ABH !&2KmK ^d=Qi jcz\ڐN<ǝ՘"AiC+ohiqq cp=8$֭[6_b@ieɌ+FtF=LFʐ‹=>tcQ>^Zڏ4֚Hہd|bO:* fƩTj m&6f\1=*cK.9^O8hBiba|.a{`RܯQw)Dܦ,ď]$ψ́ mq23 &6\=sk=y2q\k\؜;qҙ?T ʕ zzCqdVx4fLn1.ͰS$f{{*AnL2%fsN4j=G72 pB,VlDPZ., e0/{D3 Q:A$$H1Ib" !D$ABH !&W~o_$AB H !&" BLD$$H1Ib" !D$AB￶ !$AB\ Ae^>fw`od[yYlӐ-A Di`'$m(O m};j܏7x}}[| fT$(rzڽ>+QD2H3b҈jvKPb9K:~Aiz|sX8I{MmVs3Lӎ=F۱ٷA]x%C] vxfzE녀4Sr 4ZIh0Dc?nGԜvZ}( J/od#!AlJ/Ln8U>ra% 7+-~1J>txW=>YuyS;UR~ oD+v|M77`S䌋r]t~1& i3{SEAq9פCr6!z[uXV":#2AũLՕb" :$Ha !&" BLD$Ȃm[辊3=)ņ8n{Cxp J_UTqDk`KI%eH Eۗ'I(Vo9^ 늉iSm䰧(\L!xpvFi> Y26ō{ N;`>W*q`(>!6D(PzщW [䧭xp2 +v!N\AU9=Ej=Ԧ쐔  v91# |pym9 E17mKPE<0$%D##f_E~1 ?Q䦊Wz#nu8PMN[[Ʈϩ5=38lO#y64ʬU }&^3;1 Τ֜-ABܔ# Et !D^%$H1Ib" !Dm/\ㆠQhun l&i\hebOX0 se:#^-$UWR "6IbνQiqQ]MΖ :m[7+lK{M! gM:ӏ8insܶ uUJ'B&r1<>Ębm;.:l7azu=ܶƺ4uY$A#90Wyq&;Q7C ƻJ[X6 ᮀe-L3 ʹ7JOl z~3TL>`~J4m@ x% @G2׆8O*v4tOi#AZh7/5PBMKNvη'TY|2o}! B\$H1Ib" !DNmۢ*uRl=0uRž3 yá >- MN z=C܍ x8bmSgGxkW 4݈KpWWv7+u8 D/yHЧo!A`#C=s~]"6LsnD6Lp)#Am_$Aų+Akk۳Ge*Kw,6PUn>iMMP<+O AQ\7}"ymAPi(&țsEZ m_ BAv- 0N#ҟdvﲸvcLdbKƴw(-e=Gٍ8UV駶?Y$RSUGLa !>2 !D. B\̛ !G$$H1Ib" !D$ABH !&OHWG}) B\$H1Ib" !D$ABH !&" BL!AIWGھ !G$$H1$h{OƪڊVj}678= vmƙT%t0E$|U9ίlop6I5îUjN Sk6<"-A@Fv|==+9`>z[[&ALȑI]8b@h*YqZnٹcWTM&ki䍳LEU5qn %Anϙ>E$xء.YvD Go#c\fy?U@  z ɀ'$^\ ]!x+L2]DIouLO%>oQ܂Fe -5J#9X5X_ \{;^mloт|㣅 Tov7\tFU.)g)ƘK} luBUp`?C 2o[(yH$$e\[aޣ#E: L$x?UG`A17n;/cqiiACMsmsrȤ< DDAЂ(ZAѵÛ ^_!IicAo{W `5_\| eQID("mmI3IjݲC@sr\>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/ExtGState<>>>/Type/Page>> endobj 83 0 obj<>stream HWko8_q?@,z( NgѢl4bH$jD:ˮ..s׿Ow7oﶰp` Pb{|b$Hc;CzCHSHG%-tOqh&.$ºoX!ύ,x-`x,}벨6lȎ qhǞ!{m p]|F߻cnGti*T:Dԛ :}'Hi1!g Yh[0J1HFP}`=o65!\H˯ɇ.3_Ec"CȢbx0ХxabX:li-B[aJOWDž ";KId5,qּ#{i#PHybY 4Ʊ]U-<:kG/i{H4jJ.eQ*ؒXmN˲Ogz_&L 's}雗WѢVIXb?oTLbem\"#֊4%"(YPhғ6'MUAe5b`/M5-=}dRBH>m"oky).e9f0;"T9%{W ڝG}%F wp#yPG8t8kd-Ј;E7D/H+-9/G>2oO=h!Hd@XY8RkIO.;KlJSEh\Dp*ԁT0ȋ#D;~I5GN 'cӡ%il6Ӷ+z*QiQ˘؝e4;{A 8@]@0@BSM5 {^pTT}k"E+g{gC9J~!w@% {=H^!S[ρ鱧 ZAKho>B猥AVj(9E F35~+.dZɠ\ mi\EG~T&zDz+zF"顔J(L!^l>ZT;w͒,`vu@ޜ"WvЁwg!`uvjiYeЂ3GYz(( idޓ|_cK}y/f.$[d~eZhM޺qfFD^+fij;cR=PK]h}Ђ>stream HKqzD.zTB3J=fj _XY%1P[ZTmg;~/ >ǠŽ[!':! E>( v6 !( ByJ9bl4mwHۂm{ۑ"{hg+#"2^/ \S𫈸B΅^C.Ejʗ yJxtL+ SК! nHqIee'w ,p y[;q 6ߦwt% D`XJ8N40( ݱ֭y1GFj| *ӄaNȚl]"Vl4ܱ!u6F'%Ds@BJ j|nU<@G!v,J'sfW̘}!$@ϮaU %%~ѻ=ޘOP0}ۗ! g"jNzGIOXj CV 8F.P%Z}JWNz=4X TWԎuzG0PBJb  ^4*V+A/CWLXmdlGSW y%2e%*kKzyH/Xx>Jg=TC0Rt03uP%*8A"~M%o5iFVC^86eX1;6CjW_ ),e>stream H엉cGB5IKH* +-n[h5VPoųZJA" POpvvڝvC^v7ys79sVUU͛zAšںLY /)?u%,^4eʧ_x!ҋ/#ZhehI斖˟ѸqY#4.[VZZ2D˛[.gjXAjҥK]՟ED.-ͫWn/kYRɸ÷47/_XSSW[Q܄@WW׺ԝ5kQˁ`Qe5k5]]lWx-2zs歯#ԄgqSlU;k!˹Aw V@{o| h+JuŕwB6˱]oڴoD/zqUV@tRƹ%jU-}7 pkml@/'O]pZغʦM@q݂6g{t=ހ -h+:!ԇ^{=FjeyMoUn7YN 8ӎv+2oDoچޜy zv:щ@z{--=}}iQ[;N]v>ˑ-Pχs܎;rw;Xwgnwn-澏rUndYva`x?{;_^UjțOOO;wӖ=HcRl mmFe!YqQM#{} E'/|}iPJ5  կߋ:dK_qr{| #zщ;Ime;gbkNNL۷~h ?&ׇ{<2pz<3sd^h'Bt~56kwooY5* /m:{&&Ȗ;G9arOΡ#tLsqѶ#b㴑VRdnb9塍mm{ԁ{z߄_ǧDr?v+"ܡ) ߧB1EGFOP6|BvAiPD \]+FO8q&&FZC\ёi_=rD_?֞\N655oruEO:3I}MNN9ce͒6K,Yn$sT @ 7`58zr_>1=|19 ܻâC lro-,v̽yBco-7N9;!M;-方5i~?e,?Qǃ5EH6ie6K,Ynd*Ysc\nd .ieYnd͒稼Fö́~_m,Yfr%m sTb5-:W}Z?P~Pηl n' DZ~rfD},Ynd~r#˭$Me.}RikD\,?09'Y)H[&XE*gM6 (ȭ懲97?~/xLALjG ʝ{+<cS|+n)'5^LqvD*ZM,Afr%˭h`_ +BӷB3 b@7^Yw{+7g`,J *raw`5ɑ cNDLnhOM6Un2Vhٝ'O)P^"|t܊m5N~ ' sqR?ZZ+_ŞXS| @6[~LS{4'%<5?7&eCs<| ȭ׋ lmQ{RR#rO- h{k\bF5&U %6K,}(g)qKx,m,Yfr5t fPܼOi,=n N]C]#K9uW)p%#pwRX{D[=ㅸIe  *w?TZEsH?<^hǻEc! iqwr%m,Yfp?i9+w@ޛ)yiw bOˤ<c5-qKKrҒxfɣ[ʹVd rGρID(="mʎ;<# +ܠrsBn㕈v[1U,Xnd>gq2KY6K,Y`gJܳSnp;0kWod)) !Hij7; eE^}ǘYQln&j!I-۱F\k] O k:bH_>;=&r%m,wċ{miZhJ[ڜDܠVDTT@(e) MEiA͜]>s̑qqH6dlp0l%5Ʃ@Dɸ쇋 S\GIu\K$f,YfxsFIp'eYnd͒6Ak(8) /m=7_<'{cSxJ(?ͩSׄzofr%m6Q``#G endstream endobj 86 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 87 0 obj<>stream HW]o8|po',`oIlf"H恖h[Yt_#9{DVwWWWO$2v8_/.əCVgl":DC(gcv%QL HwI$ u+t,}2qz m?' ꚰ<৫$r 2+P_Ix ]ٽ%w XRe8Ȳ\ ybَKH_BF?9xW'KάؑT=4!ۤ9Si"I<ҷnZs dåԟϩZKHMEg}C&meh],/0\;}M?{+I6ceRXG_V$DE❒vn?AkOkwtC`۞Wg݁,Qwpl&V,6]fEm}מ7v?a6!,iRZD&uR|Y~I5qy> gRzms_{8Z D/V$NVGt)5@lvd yu:d['x+I$Z2^Ns{x6""ѩ=ooN3lIG4⌳dA{+سyGA Yo\蕙MFQTΛԸVK&oFfYBKOHO f^G&^zmb /$a S SЃJ0πV<^A s-M$/@EJѓiY9B(A~bPב1[)M?|9i>4"qVŪY4=TZN"'h:ACo5L#^d&>|~ !g~EU Ae۷{ w0NPCm=нUѥ1A\=cʓ;-O4 MԚ'@5vq 'neMZEBY,lyRʥʀh hf-zZ-YO74u\LSU1=c֌٤k9\[89tS͠\Gbdp_{fXNj_Nu RMtVZXQgh5Ǘ[LT.7fN& vV#rj Wg4iAPܦ`_4ߵQ|ݳ˖0/X!>67EJ7ű4MV<ڨ=VHt{$i{~I}_ UyΆVҺRd*F'TUjk$KwJCdHrqNXzKsD;`[`AX!0<cV )q c-;x|A 9A`=Kv:n?M;l^[:I/׫]pY2L~+3ݎ vŭX}?mYYݥ:B@{l"iu`hf}L7[ ؗھg~Rl{Ә퀶ᮐ4 S)%-.Iğn7`h"X,Гf vw;wZ q=]:=q1SqMi|Ǟ͓C[oo=;/wdh|8ix Q>̀d}hEugyѫ]벩qvPpUhTZҤ)8VOV =Q(c\Hy BtSs5\tޔykp%|AXNzVE&qtx#BXi9VIJAdˋ5J 5բ^}>zSH_'wzp$bG) q2i TX̼{bsSi^ WzEGpB H.0b!l۷Ԅ4Y1OX64.ȋAp;<ܞ}Dhw1ۤ9is2,'xA-,(ք2&4Mt@h`&&$°3Y<P_Z˷=y_G6u8v,nuMvH\c.z4g5?\u$ϩ\ku.SUkv$onQV٦wVsUܹc#,7Z'UeQ1g^q h-!/ zd j}Sh1sT Y YkքOwQhDr2(y.ͫYteJetofdB3&6Ul:*BK+g(! XcLd+] 꾜qS{=!N27~IMtvomtft%Ci( endstream endobj 88 0 obj<>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 89 0 obj[259 0 R 261 0 R 262 0 R 263 0 R] endobj 90 0 obj<>stream HWnH}W#y1 e&zwL,4ٲ\|V54$X%VsOۋw`?3$pe˳&L`L4MAOI__0&a\LJgZ U_x c[ r(Z|A)*E$cQ|✗PTa % B(~aW-^l_Maa&5& Ѹ;{!(mXV}T<$To1DYAel<%i ̪D}> 8T=/V nsYwE`Qɔ{P^RdxJ+>+uە͝˗ \'EY}*[G"3${xGx >]BŹwڔScd{(T |,~ԂD/QJY=5~a@U& Hahuwm;"c26{Ry76FVEm9 ?$ 0]%*Q| SJDŵm 4߃ xĻ! S H_(t!=X(k3GX`W|F=L˥( aͫbLDS1(u7J>v]J B9eMp gN9YԠ\OJ 'E3 B.|kx#ӽ\i[a99ՠ;:c+ 63"(eeEyTX Tt{/bV8 z.zgYMKS0]lvau?j!rBda-,5;))+l.As{Ŵ(F+tqQ ljG ~i^jMSy3q'yh0}S0y-j|mQN䲨;HEz޶bV\7 f3iHPG,)IKrLXAz|"/(M;͌b{u|(g Jn-V'ԢM Vvxc oV1BCC aeUCKʨ>Q7E1u ˡ)*bhua՝V]&J4kU!I.4 Hgy/;(kkl*ig%AoB]ԌjnY˅fn˰[)ْNjtѱ(h &cn'~Wu^Yĥ$Zջ?a5nf9Vdė2#=z:Q=Q[Y^xZ('8dCNFf\ԝ-k1^rB.j~d~Z1VW1ULLWþp4J4F<5-FRw)SK&Bmf>z t[q*у\U@PאvD:09tC/Pe=E[] %wGl,|8dbM'8x0c>Dc)0/){ zr.`' ^j?𗿮v Бi;ѺP4#1K"U#jWQ7G&,[lRá=SvfV!!r/'9 !nnXM沣O|.J/;OfnDkLe~bJO.oDB"SmM~BQ?⏇; -&?`-A4=gآt>h%xJp% \g%Me 8݅9N͒gb^SIKb}&\ڷV0*F4 6VV.81"I8O;C"[P$qBi SaJ dx/C|t;1 9wD&Fe//pqчOZȦBjBiNloۚpVt\vyfR9}K$ۚ1<wꍑ{@+;tp{` endstream endobj 91 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 92 0 obj<>stream HWko۸_1¦EEхئIo#Ѷ#i!Eڴ 9 p볋s8PHa0}sb0],X&q'EO,,*S 4 Ïă2Xly5/26"GV#:їr1|,{f0kPUDs%q5h0$?m[^idzR@ gK)D]o]{xH<ߗgLx<(/1o9a3 ƁcXBytQ)`۔[ С^:#̘w׋E ֖Ը0]j CwVZ~a ًS곗a$2^v zVVP,!ꢀA,6VgGspA9o'c4/u,jIO-'i_n>$"v"6F;/o80ڎc C_$qqAL0EcsK HݺU3ט0\zDȳ6`T \62Q#Wܩ'OQ'Vyȷ3 _ [wS}>v?WyJI*HԶs\RFpvy.kWVfK^` ?BVLO7D_̊aw3s\7rL;{w(QԘC9)Kxtb8dF`2t;Ętۚߝ;+?:Y:/V滢>FB}]7eN#᮪aa{ vð~0,N\+֍ w4Q8n7 f$0y'a`plypN lpN#&0r磂9N e-~ڍoQhd#Dz r.|#_L eϯ / q-N?_&mjp,v C~08?)K-*WՖıpN/ M-M˟ usa@q rf@,sT '#ڹq ' C-o.%̉+_ %_ [4_fo ̱Ds|\&{\Eg/nt04Woo0=;+za!0\@*mS^0@)2/U}U`3?D endstream endobj 93 0 obj<>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 94 0 obj[266 0 R] endobj 95 0 obj<>stream HWnH}Gi Ql^E &d3@-g(R&(_)l!OUsj;{re_}M\p&d;|Vrqgd:l2WlwF1ۥ_ X#c`u i[6B(O{`lB:UH4yȘ{y?g8VB΄ֱV+o(II{>\؈ PG徇`<9Ky?~-+&'c.CF]Hs\9AdSDkQ1$o#N/-3tټLuJR%XT)KyI*^lӸݭp}/ $c@m:ZζDqUWuRFx@T*JorPipU~ƒ ܳa{`EYFQ5蔏5y$kW eI++@r`iR0\PX̵= q#Q"We!$, ʃn8z/fsF2Y+oB?DUQT{d@pq5 B~W݉._nCwZzNص:'DK+ne*%j'=ѻůE-ʪ+ SDSEZ2*njfrܼ|=Bϗsq gxTJ!+ sQ;al1VsV$³` RLǻp8M<&0U&f1:$GCGte Bv(=ăĀdA/߿@ v.*_*bǦV}auAX;c#D'YUID=-$ F1@L+Sgh_7js9N*lsu!$~rnri$P 9,ZQBAeb+ Ԋ K[/"/1}1sUn`)þr{kާoZ>-xN4r2JhbE;Θtt{5ғ &!ꩆ4(+fʋhb' 7N?٭bvVm٘ȧ@P  .ȼ?$޲SZttG_<o9cRHF>|QsG.Vஅy6uq9yV2Cω)MyƽU!K߇D:{: XJLz-N+l_~~zVNq\^.lؾ!(&ѳH@419$d򟍕frG{sLĀ7EZX}vFo`@9h_ۑKN N9QݚUAp]… 9 Nt 4ڸiC) `b'{3XhWE4>kIJqµVn3ptx(%N2k}qL&I!&VT]TߗV؟!2K=DA@,2 ,*̰K02ú,F8g($n4có`v\9'0W|xoSGd*jYR#8mlKr။p`NFaE -6t)>Jif֎(rb-Jo\l5%v%M7YvKxWŤӚHYHD׫U2cy&uy~A:}tOQ5+Aߔ㖟OPȉW"2٘Ƌ'-hb=ǶyBqL\#k[E&SR2B:ج҆N$\R!*{ falw?Z$挲B,UjqJ%^ keaJt-_^Q}d к٧9sǛownq݋>_X^1IȍW:go@>Pcq"V˺G_`F."*X!yzhʦJÌ0n8)r~vk";}DW,90B2#DX j/tK Ii%#%E٭w?4梪JT5l8Gx& /?H%B^4#T=J=P)8`81~}gmzVݝBS#.a1< >캣@1~Ǡ|nZ3Hف<6g?sƠ (b>ɟg+pKeQWe?z=롹\-…S.ŞT/9#j;D/NIF w⽝lZ~*uI9vl ddFmf#~` ɓؔMj'(-Jى pZk]Wl~JHntZZr83>+ct` 4XWL66T3? d endstream endobj 96 0 obj<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 97 0 obj<>stream HWے۸}#9ҖU؛]W|)[I*eR ‹4@M4O]I!ކ}v{EcU4y"sḢ+/̿gE׀( F̌ќmW6Gc$d6W%ye 6?8z ^FSㄧ}Pc{Q.Zb8mj LL:"pM * d jl bO]oً{<ⶇ -13~<w7 PQQ ԧ3Mͽ[JMq#,f3P]0o[Τb{e:ZnjO=H¥e B%{v:1݁h!SU43dp)!c MpC0p@K46oj}rҴeFXPνh@d}qx Wk|Y4D7E } S qhq}d, X+džS5եMv;m:\Ȯ0/m-yѴPXS;Qd]!L>,OyG]<2~ӛ D]ȧZܪ+LʨŤmgt"tP'hҁãd*`PpS w2ïozQI 6ײԶ7hJzWz}fY9vuMw20i8#Hanc.\ c[ eQUOC y x0xB9% j.O(rET?S-M-Ipi-VDO"ҾBBIR]eRh1gLq1UfIV3SM{`K} ,+p9yQkڐGlNaCTW#)M^çc+t.5 |+[ ŜLU6?ld˜59uhy.UC J|<0Nx'id2Q\[j'qi_XIԏz.k_ DW5p:J$p q`;BͦQolLׯ-ć }qsiw<=04>u$Q0ZIZ^Jdc7/EPk/8_ZqKiWuMqٿtjv*Q|4Q@ԌHjs. 2rC|X&6*+맺m,[-d%A\Jtư?3R5 qYѝRr5&2|'S{[]-/e D2ǚ4 Y$/&&SÊP꺠{.Z!;-]2U.КNۜҸoN=4-lnңy μ 5f t$m[J5 L®1̧'l~ ?ۺc+vc `0wdM=7 hwAt=oc74!?E$#KWh|h3cb~4rJc% mDu,^N8oVx-Uy~іU@e(KӄNkN_RقBHLkɎ=8^), endstream endobj 98 0 obj<>stream HVy\SW~YeWM/l#Ȧ@"b aKQAP "R**X(" 2VZA7Lՙi{ιw;0CrYinմCf-М* AZ^.$ {P ߞtP9!:.5>G{,ƶΣ+ (lTb2 AdT6` SXmq\&"HS~Lg<+QF<4Յ 6x3-ʲh\37$OH3}AsV 'g{eUHaKŚ> KQ!yq=k`OOc\ /xeϘM)ٹޟ^UWl$YWK.lI5{8{%L`cX㴬ie&X Ŗ,VI:-~70J˴jAbJ]1qb~ `n(` ! y;sd$Y:1|C(@UPS1FS1Ŋ19Ņ SD(v\džUyYj/vvq#-[xD!C'4:xyUh87 qx_ )30~#87V;V$}Z^̹L=7_%.5v;|aiVOz׎/3[5߶XDmwlەnf,vȱ*SMtCJT NM{`}sV7N!f P4aߙbQC[ h"pVͬzsbZug42φf+![aבnڪ_,r 5%.,vpRv*׋#љ)5JQ8-4g=Չ ~otb[Rx& !ov4ր)EQL0/=c)c4樐k,9yJ8 ǁC{s FcA 7đK2^. Wg{:פ zCa$C[{>O;VΪO=t)pjOqv6 $e0hIjP$1!VI=nWvuSO ݩ0KK԰yE.-hF_XSMP)ӾêqV5KU J]V8D9( f0IQOa%  A3Ad!ȍ?xMNUe*bo;B/X=0IVNmnS]Hsn{ҔVvNh=@MתCd*q+gDLBθk5ib8ވ<߲ꃫ#J;|<֓_[̔ٱu8*Rc[Sׄk\iqY1oȵ2 RߧiF~H\]OVgSlb+MZWz?x+7o|׋迃O80sDLJIBwQ)7oS-m˹xnfʸ P`!<]X'6,UI-@X%oNƧU^^&=̗+p@9$fӦ]Ee& JonV r,H/\} 1ġ*.inqI26\֢x4S**Hc08n?l^YsѠsqU#HyeΠ]2FDcWw㞖> ;\{MY+5b-B>f^J+i-96{/ٲwuSvhteWe)s0٭8sL:|㸡Yq9$DP.i/xj 3WB誡qH!h!pZ^\hB<FJnBm8lZomw,.71:>N@X 0 sP"Q@ZGaGDD|%lVd0s{O)" {yDs.:kpmҖD}GR_#U]n1̓kS$=q t o_+emtج=1^yuTZ jEՊ Ȑ4ٱmɷ@ŦOgM:90 h4-j j+Eyإ9.&nh$scQ72FZ{jUkRFkqe'͸S'ۦy=ȁ[%47 T] AMp[rHT08' DeJ2Hq(i a"E4C)!Ym.x|glCH&E;dMyJ'xC(S sel7SK1e=cOa˸[$^fkeBYV/ܾcO| rS`ev 9 a(6,^l"/'"~Wd@fc:ÞevFp~< xEUU IulV^U}{Jly>>v>m53RB*E_L0{3up vVL4K3P%_Z폽Pv9Mt6` +el= ޝ>R>/䛹?O.Fb!.KJr\V TVW-Yr,"Ko\?\g㨋a<ž+tWD̀uUp ޠ[_&WV.6{)^"^30D )6VϳEetJa 8ĉ4ݪ au)MBiv90g%:g,D[hNrh&ukJ(}y0Y[ %7@̓YE[x ̆űJ&kS2e3,m|q&M#x#u4a4x ,$cx $ƱgS W}1oa<-vG #~:"eC'OG ~(>k>@ktTdDx^={u  `Q!ѥgz4#cx}̘$sЈyyb|$.I R!5)QsԵf&|S/Ќ+~<ۏ!lʜed/&R#Sn`yezA~ gމY1;op-%39"glD^BTi:F֓QDO,x7r%ˣiMFs\n[d5~Ϧpm̍wɃblKDeVPA.'R5j~  CO"n77c5evYqHdbvyF/;Ac3͗C=;_K9.cUfsiYf=~Oʻk9'A&˹/}b.>} lN@vI#9x/1٦~ $*KfɇzɇǕb5 c֚rl^W"[pcycM{XjL4+:m[ ]ν \+tiZgf Oҧ0[.Ͳw,hfQUljθu‚غTi_yf6;Z]<.92T?EThr-P a,˜k$g.P_`5kл' ~&sQ)b(.cg?^Y|/ƒm+!ǚ;\93ƫs9y qZC2Sڱ_r)眜3~DћrR/oCr0ql}9np3Ya9Ǹwjݧ&fawUG }i] T{9Hr>?\(H=N|YE54^{Apu_,Fm?tSEgLglu=14s 3̟M2]AT\Hr@|؄cv5x O#<UP_pL;k{? PjT.`%8x UͳgT:WfaQA5f>,Wk_jglф #89rPWc{cs{/we #ɮP(w`䠚q|G/4- J~~JrYK3BxDgUɸq+wh _3 1ӘQpda~07_a E60+8ͷ/.REus=by2NƱ׃JB?vNH;5iH`@e\-{J{g/mx:e\6a,Kx5h&? Xokǝn∇aVb b9XJ%qҕv׉,i.K0G:_ zXX)NG BzԜ.Mt9{'FHc"_l0d*Ǯob8Uػ>}ߝėd79s\]Dx1HPΠ' X矉D9q_>~Dq,ٞHH`PیCbcpbپ8:Z0爨|g!mUX.PKFDgc Ưsį!_W<gg_,*ߔC-oYy?Mc9/0g3Hޯv+YƯ-eO*SvyF٪m<ؗ`Dž$$ĦĔ.,!I9 b 8 $ĠT MӐZbۘ 4mn3'tJ]64vc#K wvϤy}w{@Io::Ɏ9*?k_ybjk"] 5eִֻ/;kXSiq iVrLk^F߾N:a}]3A/ɤsW)w pkix}|##ҐGً ?ހ}N^`4X #;a){3?%9!%`5D/?"X@"FsXM' M$fOs`Cu{7l##<Vv8c;{TF6.ÿ7uF;6۰vv %v Mcfi`HU@’t,$HIׄN. ZA7 ."HTp|97ER  DV$I sz7٫ո["\\wWAHU.lŷHN &WbqAND&)c27>In|"gq~D܍ߖmut!҆&~ۊRMv*lzizizi=$-m?WVǎ+:L'CսTOn.P EWTyRT=MU}TR2Q_ºK{mG=#AJO)exDe^T\pyX0p1()` ӭ 4.LޜIȎtVnt O1e8=̣:\cv7mqܬBb~ ~Hv0f}HůJIKD:_L\| ZqBiW J]>r%¿HSA}I 7,!Wtz\G񸴗A黮fiK/1 6ĐR_ 6IJ ]C_3(U ~#DcJ ^[cv[+mcl):,1GEhH9eOXJ,z`yh YD#f$k֖'i-j5iHҖZ#"Wc?HR֞)uDs.o"8TE`wcQsYүa(#.ՎEֶk*jJk! 8W '5<_XF#IN^#抮D:"nCwyq=tAMΛ,b@E)IL 5^h^]Sq]3^rL\].qb]*-98%9$[ɻ]=M~?MG7w{Э={knQ^ k{oѢ=!msyHGq'// p[@+huqukq=no\s^u𺚕f.4Ew>rs0^K<Ѧe-ƆYjʛ< >ExxldEE{=%ح/o"]](@V.w,)C^B"Zڈָ}fCn7KZ]&/77LY3aJx^vvZxߕ[3 i/Eic :_;;ڇ]C,?~Co61bo](io\Kb:x/y UN,.6B<|/ 4rCFo(YDBIVm,O9dRpXPXNhk b͛;k_: XG)aڊZZbr-uZMNrz5ǧVM| 'p;&>o¥=ZM?ΥtͳijJxMk_|K+$Qib%r7MF^Fw"/{RU KaI wNd[n{%2u +hccko_`ea dV'Jy71oGKn/p {z/>`o~#[-lͬ#d6 endstream endobj 99 0 obj<> endobj 100 0 obj<>/DW 1000/Type/Font>> endobj 101 0 obj<>stream HTP=o0 +<.E*!=.Rq"}`[~{>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page>> endobj 103 0 obj[271 0 R 269 0 R] endobj 104 0 obj<>stream HW]oH|G`Q%-_A|k ;#j$MLrx3e_SZɷ@9f~urG~xˮi_tos Z&(adJLUnP&X_$U}%!tSVp7 g^/|Cz/=i;_ǑQI837Rh+_EnzP>U*/JսABTk[蔈f1J}1"N!@BicI.U/n4 PTMt9: P4 vVLfPkMFHP@2|TE^pðS'܀sq79qYCh\7-頼&`_ԼVMY s*`2U&uue5QZ\SK=>~Yb[yBBr$ ]R:]0qfxq߁̷M68mz6s"5H<2jڐo5ŰMCf@yˆqB4+Q?/EjB^ܶ5¦HՐRQiRDlj+G[ː0(8I R^{tWY?Ҋr]L-[m3R 8 4X%\db} 0I%@ 7S 1C=0F ^f7uKiV&&[`5-O0TX'pG׎fdt nKՊ jfՁ^#v)aQE^T*3~h4@>R.y*_ HPkZbhs8a;Pګ*]SyPb˺Li_8Z'~fjFs)8f0Į`dMW|( =Wj-.N7qbV,B'3? 쒲3cS#ejLi+Of!.~g=Tp! *rh"Ffᧇ# niA7 Õ5'T1٫0x\:^2%cDD6]+ڬf},>9j#`כYۛǰ|lD(A,ԥ]YL&kzcta_S:5QN8Y@w$6C&[۞k m1ipb1;+#݅7\x.@4OfCf-;sbsOJވj6q;|nMU ÷Rr8UOߌM̓Z+ƪá2I'˗kgJlVo-xKsGawMF4ܱCjfyJoTh^Kv/w˩ pBkB|Zjj6ƨudjs7U$z&QU9~)N;cE%| -)cBT bBfT?V+@OH~䓚{@f4:Ftqg/.͓Dp1mxt)7XCYd>MnTYb~,`#:͍zcOuܙ;B, =/2 cXc>/A 128 0 R/H/I/StructParent 11/Border[0 0 0]/Type/Annot>> endobj 106 0 obj<> endobj 107 0 obj<> endobj 108 0 obj<> endobj 109 0 obj<> endobj 110 0 obj<> endobj 111 0 obj<> endobj 112 0 obj<> endobj 113 0 obj<> endobj 114 0 obj<> endobj 115 0 obj<> endobj 116 0 obj<> endobj 117 0 obj<> endobj 118 0 obj<> endobj 119 0 obj<>/A 200 0 R/H/I/StructParent 10/Border[0 0 0]/Type/Annot>> endobj 120 0 obj<> endobj 121 0 obj<> endobj 122 0 obj<> endobj 123 0 obj<> endobj 124 0 obj<> endobj 125 0 obj<> endobj 126 0 obj<>/A 195 0 R/H/I/StructParent 23/Border[0 0 0]/Type/Annot>> endobj 127 0 obj<>/A 123 0 R/H/I/StructParent 46/Border[0 0 0]/Type/Annot>> endobj 128 0 obj<> endobj 129 0 obj<> endobj 130 0 obj<> endobj 131 0 obj<> endobj 132 0 obj<> endobj 133 0 obj<> endobj 134 0 obj<>/A 118 0 R/H/I/StructParent 29/Border[0 0 0]/Type/Annot>> endobj 135 0 obj<>/A 106 0 R/H/I/StructParent 30/Border[0 0 0]/Type/Annot>> endobj 136 0 obj<> endobj 137 0 obj<> endobj 138 0 obj<>/A 196 0 R/H/I/StructParent 24/Border[0 0 0]/Type/Annot>> endobj 139 0 obj<>/A 113 0 R/H/I/StructParent 37/Border[0 0 0]/Type/Annot>> endobj 140 0 obj<>/A 114 0 R/H/I/StructParent 38/Border[0 0 0]/Type/Annot>> endobj 141 0 obj<>/A 184 0 R/H/I/StructParent 39/Border[0 0 0]/Type/Annot>> endobj 142 0 obj<>/A 170 0 R/H/I/StructParent 17/Border[0 0 0]/Type/Annot>> endobj 143 0 obj<> endobj 144 0 obj<> endobj 145 0 obj<> endobj 146 0 obj<> endobj 147 0 obj<>/A 188 0 R/H/I/StructParent 43/Border[0 0 0]/Type/Annot>> endobj 148 0 obj<> endobj 149 0 obj<>/A 122 0 R/H/I/StructParent 45/Border[0 0 0]/Type/Annot>> endobj 150 0 obj<>/A 107 0 R/H/I/StructParent 31/Border[0 0 0]/Type/Annot>> endobj 151 0 obj<>/A 197 0 R/H/I/StructParent 25/Border[0 0 0]/Type/Annot>> endobj 152 0 obj<>/A 116 0 R/H/I/StructParent 27/Border[0 0 0]/Type/Annot>> endobj 153 0 obj<>/A 117 0 R/H/I/StructParent 28/Border[0 0 0]/Type/Annot>> endobj 154 0 obj<>/A 198 0 R/H/I/StructParent 8/Border[0 0 0]/Type/Annot>> endobj 155 0 obj<>/A 187 0 R/H/I/StructParent 42/Border[0 0 0]/Type/Annot>> endobj 156 0 obj<>/A 186 0 R/H/I/StructParent 41/Border[0 0 0]/Type/Annot>> endobj 157 0 obj<>/A 137 0 R/H/I/StructParent 5/Border[0 0 0]/Type/Annot>> endobj 158 0 obj<>/A 132 0 R/H/I/StructParent 6/Border[0 0 0]/Type/Annot>> endobj 159 0 obj<>/A 133 0 R/H/I/StructParent 7/Border[0 0 0]/Type/Annot>> endobj 160 0 obj<>/A 111 0 R/H/I/StructParent 35/Border[0 0 0]/Type/Annot>> endobj 161 0 obj<>/A 112 0 R/H/I/StructParent 36/Border[0 0 0]/Type/Annot>> endobj 162 0 obj<>/A 108 0 R/H/I/StructParent 32/Border[0 0 0]/Type/Annot>> endobj 163 0 obj<>/A 110 0 R/H/I/StructParent 34/Border[0 0 0]/Type/Annot>> endobj 164 0 obj<>/A 109 0 R/H/I/StructParent 33/Border[0 0 0]/Type/Annot>> endobj 165 0 obj<>/A 185 0 R/H/I/StructParent 40/Border[0 0 0]/Type/Annot>> endobj 166 0 obj<> endobj 167 0 obj<>/A 121 0 R/H/I/StructParent 44/Border[0 0 0]/Type/Annot>> endobj 168 0 obj<> endobj 169 0 obj<> endobj 170 0 obj<> endobj 171 0 obj<>/A 169 0 R/H/I/StructParent 16/Border[0 0 0]/Type/Annot>> endobj 172 0 obj<>/A 168 0 R/H/I/StructParent 15/Border[0 0 0]/Type/Annot>> endobj 173 0 obj<>/A 131 0 R/H/I/StructParent 14/Border[0 0 0]/Type/Annot>> endobj 174 0 obj<> endobj 175 0 obj<>/A 146 0 R/H/I/StructParent 21/Border[0 0 0]/Type/Annot>> endobj 176 0 obj<>/A 145 0 R/H/I/StructParent 20/Border[0 0 0]/Type/Annot>> endobj 177 0 obj<>/A 124 0 R/H/I/StructParent 47/Border[0 0 0]/Type/Annot>> endobj 178 0 obj<>/A 125 0 R/H/I/StructParent 48/Border[0 0 0]/Type/Annot>> endobj 179 0 obj<>/A 166 0 R/H/I/StructParent 2/Border[0 0 0]/Type/Annot>> endobj 180 0 obj<>/A 136 0 R/H/I/StructParent 4/Border[0 0 0]/Type/Annot>> endobj 181 0 obj<>/A 199 0 R/H/I/StructParent 9/Border[0 0 0]/Type/Annot>> endobj 182 0 obj<>/A 148 0 R/H/I/StructParent 3/Border[0 0 0]/Type/Annot>> endobj 183 0 obj<>/A 143 0 R/H/I/StructParent 18/Border[0 0 0]/Type/Annot>> endobj 184 0 obj<> endobj 185 0 obj<> endobj 186 0 obj<> endobj 187 0 obj<> endobj 188 0 obj<> endobj 189 0 obj<>/A 194 0 R/H/I/StructParent 22/Border[0 0 0]/Type/Annot>> endobj 190 0 obj<>/A 115 0 R/H/I/StructParent 26/Border[0 0 0]/Type/Annot>> endobj 191 0 obj<>/A 130 0 R/H/I/StructParent 13/Border[0 0 0]/Type/Annot>> endobj 192 0 obj<>/A 120 0 R/H/I/StructParent 49/Border[0 0 0]/Type/Annot>> endobj 193 0 obj<>/A 129 0 R/H/I/StructParent 12/Border[0 0 0]/Type/Annot>> endobj 194 0 obj<> endobj 195 0 obj<> endobj 196 0 obj<> endobj 197 0 obj<> endobj 198 0 obj<> endobj 199 0 obj<> endobj 200 0 obj<> endobj 201 0 obj<>/A 144 0 R/H/I/StructParent 19/Border[0 0 0]/Type/Annot>> endobj 202 0 obj<>/A 204 0 R/H/I/StructParent 51/Border[0 0 0]/Type/Annot>> endobj 203 0 obj[/ICCBased 210 0 R] endobj 204 0 obj<> endobj 205 0 obj<> endobj 206 0 obj<> endobj 207 0 obj<> endobj 208 0 obj<> endobj 209 0 obj<> endobj 210 0 obj<>stream HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 N')].uJr  wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 211 0 obj<> endobj 212 0 obj<>/A 207 0 R/H/I/StructParent 53/Border[0 0 0]/Type/Annot>> endobj 213 0 obj<>/A 214 0 R/H/I/StructParent 54/Border[0 0 0]/Type/Annot>> endobj 214 0 obj<> endobj 215 0 obj<>/A 211 0 R/H/I/StructParent 52/Border[0 0 0]/Type/Annot>> endobj 216 0 obj<> endobj 217 0 obj<> endobj 218 0 obj<> endobj 219 0 obj<>/A 217 0 R/H/I/StructParent 58/Border[0 0 0]/Type/Annot>> endobj 220 0 obj<>/A 216 0 R/H/I/StructParent 57/Border[0 0 0]/Type/Annot>> endobj 221 0 obj<>/A 218 0 R/H/I/StructParent 59/Border[0 0 0]/Type/Annot>> endobj 222 0 obj<>/A 227 0 R/H/I/StructParent 63/Border[0 0 0]/Type/Annot>> endobj 223 0 obj<>/A 225 0 R/H/I/StructParent 61/Border[0 0 0]/Type/Annot>> endobj 224 0 obj<>/A 226 0 R/H/I/StructParent 62/Border[0 0 0]/Type/Annot>> endobj 225 0 obj<> endobj 226 0 obj<> endobj 227 0 obj<> endobj 228 0 obj<> endobj 229 0 obj<>/A 228 0 R/H/I/StructParent 66/Border[0 0 0]/Type/Annot>> endobj 230 0 obj<> endobj 231 0 obj<> endobj 232 0 obj<>/A 231 0 R/H/I/StructParent 69/Border[0 0 0]/Type/Annot>> endobj 233 0 obj<>/A 230 0 R/H/I/StructParent 70/Border[0 0 0]/Type/Annot>> endobj 234 0 obj<> endobj 235 0 obj<>/A 237 0 R/H/I/StructParent 74/Border[0 0 0]/Type/Annot>> endobj 236 0 obj<>/A 234 0 R/H/I/StructParent 73/Border[0 0 0]/Type/Annot>> endobj 237 0 obj<> endobj 238 0 obj<>/A 241 0 R/H/I/StructParent 76/Border[0 0 0]/Type/Annot>> endobj 239 0 obj<>/A 240 0 R/H/I/StructParent 78/Border[0 0 0]/Type/Annot>> endobj 240 0 obj<> endobj 241 0 obj<> endobj 242 0 obj<> endobj 243 0 obj<>/A 242 0 R/H/I/StructParent 77/Border[0 0 0]/Type/Annot>> endobj 244 0 obj<> endobj 245 0 obj<>/A 244 0 R/H/I/StructParent 81/Border[0 0 0]/Type/Annot>> endobj 246 0 obj[/Indexed 203 0 R 255 46 0 R] endobj 247 0 obj<> endobj 248 0 obj<> endobj 249 0 obj<>/A 250 0 R/H/I/StructParent 85/Border[0 0 0]/Type/Annot>> endobj 250 0 obj<> endobj 251 0 obj<> endobj 252 0 obj<> endobj 253 0 obj<>/A 252 0 R/H/I/StructParent 88/Border[0 0 0]/Type/Annot>> endobj 254 0 obj<>/A 251 0 R/H/I/StructParent 87/Border[0 0 0]/Type/Annot>> endobj 255 0 obj[/Indexed 203 0 R 255 58 0 R] endobj 256 0 obj[/Indexed 203 0 R 255 63 0 R] endobj 257 0 obj[/Indexed 203 0 R 255 84 0 R] endobj 258 0 obj<> endobj 259 0 obj<>/A 264 0 R/H/I/StructParent 98/Border[0 0 0]/Type/Annot>> endobj 260 0 obj<> endobj 261 0 obj<>/A 260 0 R/H/I/StructParent 99/Border[0 0 0]/Type/Annot>> endobj 262 0 obj<>/A 265 0 R/H/I/StructParent 100/Border[0 0 0]/Type/Annot>> endobj 263 0 obj<>/A 258 0 R/H/I/StructParent 101/Border[0 0 0]/Type/Annot>> endobj 264 0 obj<> endobj 265 0 obj<> endobj 266 0 obj<>/A 267 0 R/H/I/StructParent 104/Border[0 0 0]/Type/Annot>> endobj 267 0 obj<> endobj 268 0 obj<> endobj 269 0 obj<>/A 270 0 R/H/I/StructParent 108/Border[0 0 0]/Type/Annot>> endobj 270 0 obj<> endobj 271 0 obj<>/A 272 0 R/H/I/StructParent 107/Border[0 0 0]/Type/Annot>> endobj 272 0 obj<> endobj 273 0 obj<> endobj 274 0 obj<> endobj 275 0 obj<> endobj 276 0 obj<> endobj 277 0 obj<> endobj 278 0 obj<> endobj 279 0 obj<> endobj 280 0 obj<> endobj 281 0 obj<> endobj 282 0 obj<> endobj 283 0 obj<> endobj 284 0 obj<> endobj 285 0 obj<> endobj 286 0 obj<> endobj 287 0 obj<> endobj 288 0 obj<> endobj 289 0 obj<> endobj 290 0 obj<> endobj 291 0 obj<> endobj 292 0 obj<> endobj 293 0 obj<> endobj 294 0 obj<> endobj 295 0 obj<> endobj 296 0 obj<> endobj 297 0 obj<> endobj 298 0 obj<> endobj 299 0 obj<> endobj 300 0 obj<> endobj 301 0 obj<> endobj 302 0 obj<> endobj 303 0 obj<> endobj 304 0 obj<> endobj 305 0 obj<> endobj 306 0 obj<> endobj 307 0 obj<> endobj 308 0 obj<> endobj 309 0 obj<> endobj 310 0 obj<> endobj 311 0 obj<> endobj 312 0 obj<> endobj 313 0 obj<> endobj 314 0 obj<> endobj 315 0 obj<> endobj 316 0 obj<> endobj 317 0 obj<> endobj 318 0 obj<> endobj 319 0 obj<> endobj 320 0 obj<> endobj 321 0 obj<> endobj 322 0 obj<>stream xZo9WH") ([lh#n3M}ځm#O3c'Nz-njF$%%}nisM 6oIЄQC:4ĴbC]7՘cg^UC~UڇCdha YTDprSTﬖ;Up8s!Ԡ:DPR_W96Hղt*t: \lu,!&:tp041{C*Yj&)D )XIΩeJrI;'$ooR)$'jxC&E *TФrZ>?Z,|YhC wBgXb>Q v]tSQIZN:xjrC7m} &Ibrͭ3&g>$36^r#g>b2{#)ə!!o>:{Gי>̝J$"\% lⅼpI6_>\BG%9Y&]|E;i(wϓyͻ٪_OW}W?/6ɻezv:zON֫r葙v= xLxvٵx:Swr|~q'V˫|s.bWUq<[/Vutr}կ6_yW߮?WI/?54^ z u`'?'|gŅ~telymf,#ZחVjVK|\jE<{͖|y<:y}Gi>_^^.ݟ <_>yO?j0i|W^Dcmb Eo8Zx]<8 R$3HE7~OA3GGQF1bEVoGэ04<歬*G1b7EV6`khP'l&Tȣ(*" QE,b*wS9(]MUKZXUDRon *bZqB?T[mnf\QT{&՛'!1 FzSȚGOz5Fk#ԃ*gv3?Xՙ!,7Bf =#媑r[\adܙ2_Xg1,7cf 1 ra]f3XA,7!wf(G,W$ 19d>Q,D YYcd^1,J 1‰d~)aƔI"3g!EL83Xdɴccf2X1ND[ {2g Kj]F*͓{6| %o/v-#8tw1p#ݻa m.wT(7PEǃzNFy3S8Q!ơbQmޯhOIC<@/ e4R[m|ߝt;lv6&6N!mݛǞa{1Ƽ0ng,SEtne;Vwm[8ZֆvO7Dx/w3.E< :=Sb߫,, І@t_vhElJTcwnwW.YEinPӇay+y6Mwi?Ozlv.'ڼطg8v[e>ӹB]4J=}\ͼbr֓7WFc5_}Q|byX/V66oZc8gMѭ,mm:F((CxKiGpjQoŐ[@V3.{uNt!ttYJ#HX#ֵ(Z_?*Tٍ .-w>19wwgpTro&Gr/cs{\2CzniiiiQZ`آ endstream endobj 323 0 obj<>stream xX[oZG++=ggvg/Rq*ՊݢQ48,Ds@l0Zg/\1] It1zGKˎ)gbt'.da/(.XWFqPW֢8a8 pYUR\숒"#.(|0$] T] (e9hNМKET=@;pZ 1G *4gAj_1`1P7j͍w0XYA"<ह)МXD]rVP[DdfDUW* &*c ©86f kv!tBԌ!qkf .AF &!/⡹.BUT ='qBhp< f rV(\+ JH+h `pwk5djlHhM(#ђnU o <LGq8} ]ve۷EGw~m>Pm3ߵ=n{T2IeT1IU{$LR$e&nlF0q#̍ۇ˪]:7Mj\54_t5,&ms|~Y,ۭ|Wd=#:e97߳GOMȴ?`OƘ/a|~<*QJc׊kAȫ~s͈^WNha9mC{J7!G#Wu/ÇxC[ je OS/O+:)CMl FMgA Q`Z%܇b9^M;ہn\!,K1zAJazzXvdm_õ_ ;nW9xM,Bl )\6om <БN2([(j:O L4sx=# '*;n.>(ˁ@wun.-O' ?QH,B"-B"T-B/]dtHXA&Zd"A&jlꅉl&nܐQv۝ =2}H_퓲u?F'i)pRk<\΃|) 0 0 0 0 0 ZP endstream endobj 324 0 obj<>stream xڴXo6WxG( $6[؃qScSbC>I;;$rR{/N`?9 Ɨf{_\ R\!#\1®G+$u%P숃1ZVF3Gaf,x[Ɍe $$'b+s}ɅGaoJ"Sn.{AdHNB@$)$dY !Y2$Bɐ 5| ކ }A -Rc ]AR9`Rq"XA^Y* B1k@J=$+ W8#HN0J=$g3*TO.zo"᱒(!@d#EFQ*E9P $[*-$JU o4@ru C ^A"FvjzWKOƌR0fOe!a!W-SeubufV&tPV_wgpuvQ[v{}]ܬ~ աH͛C6R*E]X|^}Y/;8.׋uGapϺf}zqw>{//nVպ muwWm)U5GݻjSv~~ϐ\Ck_ZVS rʻ65qweʆ\<Ց[56Ap5[Oq.lΰcs1l1tô#C>ZqbW܉ʝ}]cA)[5Ԃ2G'OLV9'sST{kWc%6U6Vk k$}"kEh܅ M6w:RuXjz|Z@B0#"y:"OmfDdY3,c:xbΖemW4M `ۖMYe y(nTq}积.8ؕ*\Ow/+J6W~yM]ܧR ([@٠VK.[yH9G&5NHLu#ebkR3lgvIZzb32 k>rq&;fA{MMfβ/E8voB`8}dG7bUӠ-:ևO PMaSS)^dM,rԍDTg9nHr{QLUwڐ2u0.ނIiqɩy0i-xr>stream xڼXnF\qg2@v Ԉ>zPmHR7ڤDu XZg\w蒱&l_dѳ ; `s%ʼne< _~ ڂ3ވ$||!\ YXd,!bPDH"ldytXrސ p1ϊsQyLy0 0 NQ,I`NY036e`0lغX)afI, 0 b#V 0Io9#WBx!V'=ATϓ<{P]wC(5Z=r% 0AP>^C" -0k Uz>i|.`Ϊ )el-qcZՋ ;H 7a# &hr>ݻLÁ GHum:}na^z=2QS=xw~ > >>Y;[>>_5Vki~~ұsy+&}l!mlkFl0_<Ė^hCejiz?:[jg]x\\LHzmtJhRa;vfRu!Շ-}c#׵>m#~__\~g q^_۷ 坧Rv*ᘞ/'5-B|p6S ]/cAǞh)hw3FEыrqSQtݔance}s߭' 2TɎo'ҙ477HA\yk?OcסXn[_(앱Nꮟ4>9 u&o{Bkw\G.x<|>7Ǎ९L_FqgmH(5g`w|c/AdmLfhyAtGMVoq]K'̷(G|%29%YQ.!ٗc%ҴCkɳ2eMAzީ[_ъW`kͽ۽']}/W|(}YD],1,#el,`Ұ3b̐n|t}ӥ]Er͓Nmg'>stream xڬXn7}EoC 0'i:E?8u@P{fwݭ&)s!wٳ&b79XC -W2Zo(DP\4>.ό6eMƐhM,3)&dżJ2 h8e>ҍxsb+G0<: $NF)!/F3: c/ $d(' $qg( eNrqِ͜t :)|"g;tds 0?!sDrNh):`(GĔ ɢL` /#ȊHER ,T)[c[dw[Bt:H#}6bƇ(l|tF' I0p'aeYFF< FH^cMV ,`F!<宒Ljə1"R_ :XOFfK\(PAS ajPoWw_7p.]Y'!]MSڪ$F<"E}:݌!!9zRW).6_ARWYzZh\Pky=Wk4Zq\Pke|W-"{p^۠m6i$_ YmGGGGGGGg1W=g<=qŪ]qEqo|Cf>]0w<8ێ}oY[19⢹栋4&x1͉6':9Xs+/=|k{d]p-Z0Ú>L_0*Ü{>Ó?j ɚ:3Vgx}E#7o=#}]nYwA=1q]3+ rp{~{V endstream endobj 327 0 obj<>stream xڼXo7 WyD"@ Xl+ {05n,~;ۉ}K!9G(yQ\,B!<S^Exbij]wq]\Q|&WIV1)$n.x H0>) *Kr\L̚4AFQPQ/1@5 %VBpggr5Isp)h>Pz]:{^i?,`uQۯs@\p+/G?MьTXLh.Jd}^tV<)SawÝU/QCv!agyxZi iLm 1ͿJ j j؝hb!So'n }ө6̕KqZCR'4p6p)Qi֗Ob[s;4-'e"rD%3De3i e:31{L׻v%hKr>3}hq#mϒh?*iLDŽiLO ` endstream endobj 328 0 obj<>stream xڴXMo7+zr9 nmr0rkUJɿ,K2{Aj8x6ֈH&2"t%JE IG|L2 M RLH&#a|ћ lf ; 'E`-XWd Ÿ́m()(B$)r)aA!OM ( 3CqJ,\8[ JN6.3\A\J %v {ʎB EX9B`6ޣb|(UJ'B!>;`N(TlϥHsNsK,"YJ֒ օrX~M ޕSBťH+\H͛܈Kr+\;WAI<*Q}m/ q!?eAmctHkR~0,ۧUJd*5EMߒAF/*_T|I%Kʗ/)_R4y=˿| Vj[ ]!F$mlCal5LՐ[ [&jHз .{yt7߿̻˳>o6*8`yҺ4>T5q:Hw Ȥ`gFjJkU$mϽN[aX)uJ`X)u:DQ>Q>Q>Q>Q>Q>Q>T=[*+4+UVꬮJo/|>3sb$7p᱁۽A{_42s~y3_n6evfw]̾nf|}u?.7wly{zwOכzG Yl}vs pzy^#0N1y|vxƵ;TECx;⏇J xt<$JBiԪc'?5>2 i9[}{2M9> endobj 330 0 obj<> endobj 331 0 obj<> endobj 332 0 obj<> endobj 333 0 obj<> endobj 334 0 obj<> endobj 335 0 obj<> endobj 336 0 obj<>stream Acrobat Distiller 7.0.5 (Windows) Princeton University D:20080716122900 Acrobat PDFMaker 7.0.5 for Word 2008-07-16T08:32:50-04:00 2008-07-16T08:31:02-04:00 2008-07-16T08:32:50-04:00 uuid:03e6bfe3-f87b-43ac-8a3e-2ebf146da9b6 uuid:cee7495b-ed23-4b27-bbc6-264f32588aa0 2 application/pdf Introduction Joseph H. Taylor endstream endobj 337 0 obj<> endobj xref 0 1009 0000000000 65535 f 0000050520 00000 n 0000050795 00000 n 0000051195 00000 n 0000053017 00000 n 0000053358 00000 n 0000053406 00000 n 0000056273 00000 n 0000056603 00000 n 0000057196 00000 n 0000115302 00000 n 0000128123 00000 n 0000128426 00000 n 0000128467 00000 n 0000131797 00000 n 0000132127 00000 n 0000132168 00000 n 0000135318 00000 n 0000135595 00000 n 0000138884 00000 n 0000139175 00000 n 0000139200 00000 n 0000142272 00000 n 0000142537 00000 n 0000145770 00000 n 0000146049 00000 n 0000146082 00000 n 0000149192 00000 n 0000149526 00000 n 0000152064 00000 n 0000195440 00000 n 0000195731 00000 n 0000195764 00000 n 0000198796 00000 n 0000199114 00000 n 0000199155 00000 n 0000202540 00000 n 0000202874 00000 n 0000204969 00000 n 0000231348 00000 n 0000231627 00000 n 0000231652 00000 n 0000234953 00000 n 0000235242 00000 n 0000237732 00000 n 0000238096 00000 n 0000239778 00000 n 0000240324 00000 n 0000246816 00000 n 0000264929 00000 n 0000265247 00000 n 0000265272 00000 n 0000267101 00000 n 0000267449 00000 n 0000267482 00000 n 0000269544 00000 n 0000273812 00000 n 0000274153 00000 n 0000276421 00000 n 0000277267 00000 n 0000280305 00000 n 0000280680 00000 n 0000281455 00000 n 0000284530 00000 n 0000285363 00000 n 0000287480 00000 n 0000294610 00000 n 0000294966 00000 n 0000295721 00000 n 0000300421 00000 n 0000305314 00000 n 0000311301 00000 n 0000311633 00000 n 0000312103 00000 n 0000326594 00000 n 0000336565 00000 n 0000336886 00000 n 0000337279 00000 n 0000352842 00000 n 0000353199 00000 n 0000353734 00000 n 0000370698 00000 n 0000384145 00000 n 0000384512 00000 n 0000386689 00000 n 0000387490 00000 n 0000390548 00000 n 0000390813 00000 n 0000393420 00000 n 0000393738 00000 n 0000393787 00000 n 0000396797 00000 n 0000397087 00000 n 0000399100 00000 n 0000399418 00000 n 0000399443 00000 n 0000402558 00000 n 0000402849 00000 n 0000405897 00000 n 0000418024 00000 n 0000418268 00000 n 0000418452 00000 n 0000418740 00000 n 0000419062 00000 n 0000419096 00000 n 0000421393 00000 n 0000421546 00000 n 0000421599 00000 n 0000421652 00000 n 0000421705 00000 n 0000421758 00000 n 0000421811 00000 n 0000421864 00000 n 0000421917 00000 n 0000421970 00000 n 0000422023 00000 n 0000422076 00000 n 0000422129 00000 n 0000422182 00000 n 0000422235 00000 n 0000422387 00000 n 0000422441 00000 n 0000422494 00000 n 0000422547 00000 n 0000422600 00000 n 0000422653 00000 n 0000422706 00000 n 0000422858 00000 n 0000423007 00000 n 0000423059 00000 n 0000423111 00000 n 0000423163 00000 n 0000423215 00000 n 0000423267 00000 n 0000423319 00000 n 0000423472 00000 n 0000423623 00000 n 0000423675 00000 n 0000423727 00000 n 0000423880 00000 n 0000424029 00000 n 0000424178 00000 n 0000424327 00000 n 0000424480 00000 n 0000424532 00000 n 0000424585 00000 n 0000424638 00000 n 0000424691 00000 n 0000424840 00000 n 0000424892 00000 n 0000425041 00000 n 0000425190 00000 n 0000425341 00000 n 0000425493 00000 n 0000425645 00000 n 0000425794 00000 n 0000425943 00000 n 0000426092 00000 n 0000426243 00000 n 0000426394 00000 n 0000426543 00000 n 0000426694 00000 n 0000426843 00000 n 0000426992 00000 n 0000427145 00000 n 0000427294 00000 n 0000427443 00000 n 0000427495 00000 n 0000427644 00000 n 0000427696 00000 n 0000427748 00000 n 0000427800 00000 n 0000427952 00000 n 0000428103 00000 n 0000428253 00000 n 0000428298 00000 n 0000428450 00000 n 0000428602 00000 n 0000428751 00000 n 0000428900 00000 n 0000429048 00000 n 0000429199 00000 n 0000429350 00000 n 0000429498 00000 n 0000429648 00000 n 0000429701 00000 n 0000429754 00000 n 0000429807 00000 n 0000429860 00000 n 0000429913 00000 n 0000430066 00000 n 0000430215 00000 n 0000430364 00000 n 0000430513 00000 n 0000430664 00000 n 0000430717 00000 n 0000430770 00000 n 0000430823 00000 n 0000430876 00000 n 0000430928 00000 n 0000430980 00000 n 0000431032 00000 n 0000431181 00000 n 0000431332 00000 n 0000431368 00000 n 0000431441 00000 n 0000431883 00000 n 0000432122 00000 n 0000432175 00000 n 0000432409 00000 n 0000432947 00000 n 0000435617 00000 n 0000435692 00000 n 0000435842 00000 n 0000435994 00000 n 0000436069 00000 n 0000436218 00000 n 0000436270 00000 n 0000436322 00000 n 0000436375 00000 n 0000436527 00000 n 0000436678 00000 n 0000436828 00000 n 0000436978 00000 n 0000437127 00000 n 0000437276 00000 n 0000437367 00000 n 0000437458 00000 n 0000437544 00000 n 0000437597 00000 n 0000437749 00000 n 0000437802 00000 n 0000437854 00000 n 0000438006 00000 n 0000438158 00000 n 0000438211 00000 n 0000438362 00000 n 0000438512 00000 n 0000438564 00000 n 0000438716 00000 n 0000438868 00000 n 0000438950 00000 n 0000439003 00000 n 0000439056 00000 n 0000439208 00000 n 0000439261 00000 n 0000439411 00000 n 0000439457 00000 n 0000439867 00000 n 0000440101 00000 n 0000440251 00000 n 0000440327 00000 n 0000440379 00000 n 0000440432 00000 n 0000440584 00000 n 0000440736 00000 n 0000440782 00000 n 0000440828 00000 n 0000440874 00000 n 0000440956 00000 n 0000441106 00000 n 0000441200 00000 n 0000441351 00000 n 0000441502 00000 n 0000441656 00000 n 0000441750 00000 n 0000441839 00000 n 0000441992 00000 n 0000442074 00000 n 0000442206 00000 n 0000442358 00000 n 0000442425 00000 n 0000442578 00000 n 0000442653 00000 n 0000442724 00000 n 0000442919 00000 n 0000443034 00000 n 0000443088 00000 n 0000443244 00000 n 0000443297 00000 n 0000443475 00000 n 0000443528 00000 n 0000443640 00000 n 0000443693 00000 n 0000443805 00000 n 0000443858 00000 n 0000443984 00000 n 0000444037 00000 n 0000444193 00000 n 0000444246 00000 n 0000444338 00000 n 0000444391 00000 n 0000444515 00000 n 0000444568 00000 n 0000444684 00000 n 0000444737 00000 n 0000444855 00000 n 0000444908 00000 n 0000445063 00000 n 0000445162 00000 n 0000445215 00000 n 0000445288 00000 n 0000445430 00000 n 0000445483 00000 n 0000445644 00000 n 0000445735 00000 n 0000445787 00000 n 0000445904 00000 n 0000446024 00000 n 0000446076 00000 n 0000446188 00000 n 0000446240 00000 n 0000446293 00000 n 0000446421 00000 n 0000446474 00000 n 0000446526 00000 n 0000446579 00000 n 0000446669 00000 n 0000446722 00000 n 0000446775 00000 n 0000446865 00000 n 0000446920 00000 n 0000446975 00000 n 0000450268 00000 n 0000451573 00000 n 0000453094 00000 n 0000454661 00000 n 0000456350 00000 n 0000457871 00000 n 0000459109 00000 n 0000459146 00000 n 0000459171 00000 n 0000459250 00000 n 0000459381 00000 n 0000459513 00000 n 0000459645 00000 n 0000459721 00000 n 0000464162 00000 n 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f trailer <> startxref 116 %%EOF wsjt_9.3.r2792/timer.f900000664000175000017500000000463511553334406013050 0ustar jtnjtnsubroutine timer(dname,k) ! Times procedure number n between a call with k=0 (tstart) and with ! k=1 (tstop). Accumulates sums of these times in array ut (user time). ! Also traces all calls (for debugging purposes) if limtrace.gt.0 character*8 dname,name(50),space,ename character*16 sname logical first,on(50) real ut(50),ut0(50),dut(50),tt(2) integer ncall(50),nlevel(50),nparent(50) integer onlevel(0:10) common/tracer/ limtrace,lu data first/.true./,eps/0.000001/,ntrace/0/ data level/0/,nmax/0/,space/' '/ data limtrace/0/,lu/-1/ save if(lu.lt.1) lu=6 if(k.gt.1) go to 40 !Check for "all done" (k>1) onlevel(0)=0 do n=1,nmax !Check for existing name if(name(n).eq.dname) go to 20 enddo nmax=nmax+1 !This is a new one n=nmax ncall(n)=0 on(n)=.false. ut(n)=eps name(n)=dname 20 if(k.eq.0) then !Get start times (k=0) if(on(n)) print*,'Error in timer: ',dname,' already on.' level=level+1 !Increment the level on(n)=.true. ut0(n)=etime(tt) ncall(n)=ncall(n)+1 if(ncall(n).gt.1.and.nlevel(n).ne.level) then nlevel(n)=-1 else nlevel(n)=level endif nparent(n)=onlevel(level-1) onlevel(level)=n else if(k.eq.1) then !Get stop times and accumulate sums. (k=1) if(on(n)) then on(n)=.false. ut1=etime(tt) ut(n)=ut(n)+ut1-ut0(n) endif level=level-1 endif ntrace=ntrace+1 if(ntrace.lt.limtrace) write(lu,1020) ntrace,dname,k,level,nparent(n) 1020 format(i5,': ',a8,3i5) return ! Write out the timer statistics 40 write(lu,1040) 1040 format(/' name time frac dtime', & ' dfrac calls level parent'/73('-')) if(k.gt.100) then ndiv=k-100 do i=1,nmax ncall(i)=ncall(i)/ndiv ut(i)=ut(i)/ndiv enddo endif total=ut(1) sum=0. sumf=0. do i=1,nmax dut(i)=ut(i) do j=i,nmax if(nparent(j).eq.i) dut(i)=dut(i)-ut(j) enddo utf=ut(i)/total dutf=dut(i)/total sum=sum+dut(i) sumf=sumf+dutf kk=nlevel(i) sname=space(1:kk)//name(i)//space(1:8-kk) ename=space if(i.ge.2) ename=name(nparent(i)) write(lu,1060) float(i),sname,ut(i),utf,dut(i),dutf, & ncall(i),nlevel(i),ename 1060 format(f4.0,a16,2(f10.2,f6.2),i7,i5,2x,a8) enddo write(lu,1070) sum,sumf 1070 format(/36x,f10.2,f6.2) return end subroutine timer wsjt_9.3.r2792/symsync65.f0000664000175000017500000000136611563244773013445 0ustar jtnjtn subroutine symsync65(c5,n5,k0,s,flip,pr,nsps,kpk,ccf,smax) complex c5(n5) real s(n5),pr(126),ccf(-128:128) complex z kh=nsps/2 z=0. do i=1,nsps z=z + c5(i) enddo s(1)=real(z)**2 + aimag(z)**2 smax=s(1) do i=nsps+1,n5 z=z + c5(i) - c5(i-nsps) s(i-nsps+1)=real(z)**2 + aimag(z)**2 smax=max(s(i-nsps+1),smax) enddo iz=n5-nsps+1 smax=0. do k=-kh,kh sum=0. do i=1,126 j=nsps*(i-1)+k+k0 if(j.ge.1 .and. j.le.iz) sum=sum + flip*pr(i)*s(j) enddo ccf(k)=sum if(sum.gt.smax) then smax=sum kpk=k endif enddo return end wsjt_9.3.r2792/azdist.f0000664000175000017500000000560711374536343013062 0ustar jtnjtn subroutine azdist(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm, + nHotAz,nHotABetter) character*6 MyGrid,HisGrid,mygrid0,hisgrid0 real*8 utch,utch0 logical HotABetter,IamEast real eltab(22),daztab(22) data eltab/18.,15.,13.,11.,9.,8.,7.,6.,5.3,4.7,4.,3.3,2.7, + 2.,1.5,1.,0.8,0.6,0.4,0.2,0.0,0.0/ data daztab/21.,18.,16.,15.,14.,13.,12.,11.,10.7,10.3,10., + 10.,10.,10.,10.,10.,10.,9.,9.,9.,8.,8./ data mygrid0/" "/,hisgrid0/" "/,utch0/-999.d0/ save if(MyGrid.eq.HisGrid) then naz=0 nel=0 ndmiles=0 ndkm=0 nhotaz=0 nhotabetter=1 go to 999 endif if(mygrid.eq.mygrid0 .and. hisgrid.eq.hisgrid0 .and. + abs(utch-utch0).lt.0.1666667d0) go to 900 utch0=utch mygrid0=mygrid hisgrid0=hisgrid utchours=utch if(MyGrid(5:5).eq.' ') MyGrid(5:5)='m' if(MyGrid(6:6).eq.' ') MyGrid(6:6)='m' if(HisGrid(5:5).eq.' ') HisGrid(5:5)='m' if(HisGrid(6:6).eq.' ') HisGrid(6:6)='m' if(MyGrid.eq.HisGrid) then Az=0. Dmiles=0. Dkm=0.0 El=0. HotA=0. HotB=0. HotABetter=.true. go to 900 endif call grid2deg(MyGrid,dlong1,dlat1) call grid2deg(HisGrid,dlong2,dlat2) call geodist(dlat1,dlong1,dlat2,dlong2,Az,Baz,Dkm) ndkm=Dkm/100 j=ndkm-4 if(j.lt.1) j=1 if(j.gt.21)j=21 if(Dkm.lt.500.0) then El=18.0 else u=(Dkm-100.0*ndkm)/100.0 El=(1.0-u)*eltab(j) + u*eltab(j+1) endif daz=daztab(j) + u * (daztab(j+1)-daztab(j)) Dmiles=Dkm/1.609344 tmid=mod(UTChours-0.5*(dlong1+dlong2)/15.0+48.0,24.0) IamEast=.false. if(dlong1.lt.dlong2) IamEast=.true. if(dlong1.eq.dlong2 .and. dlat1.gt.dlat2) IamEast=.false. azEast=baz if(IamEast) azEast=az if((azEast.ge.45.0 .and. azEast.lt.135.0) .or. + (azEast.ge.225.0 .and. azEast.lt.315.0)) then C The path will be taken as "east-west". HotABetter=.true. if(abs(tmid-6.0).lt.6.0) HotABetter=.false. if((dlat1+dlat2)/2.0 .lt. 0.0) HotABetter=.not.HotABetter else C The path will be taken as "north-south". HotABetter=.false. if(abs(tmid-12.0).lt.6.0) HotABetter=.true. endif if(IamEast) then HotA = Az - daz HotB = Az + daz else HotA = Az + daz HotB = Az - daz endif if(HotA.lt.0.0) HotA=HotA+360.0 if(HotA.gt.360.0) HotA=HotA-360.0 if(HotB.lt.0.0) HotB=HotB+360.0 if(HotB.gt.360.0) HotB=HotB-360.0 900 continue naz=nint(Az) nel=nint(el) nDmiles=nint(Dmiles) nDkm=nint(Dkm) nHotAz=nint(HotB) nHotABetter=0 if(HotABetter) then nHotAz=nint(HotA) nHotABetter=1 endif 999 return end wsjt_9.3.r2792/aclocal.m40000664000175000017500000001262511204001266013232 0ustar jtnjtndnl {{{ ax_check_gfortran AC_DEFUN([AX_CHECK_GFORTRAN],[ AC_ARG_ENABLE(g95, AC_HELP_STRING([--enable-g95],[Use G95 compiler if available.]), [g95=$enableval], [g95=no]) AC_ARG_ENABLE(gfortran, AC_HELP_STRING([--enable-gfortran],[Use gfortran compiler if available.]), [gfortran=$enableval], [gfortran=no]) dnl dnl Pick up FC from the environment if present dnl FCV="" if test -n $[{FC}] ; then gfortran_name_part=`echo $[{FC}] | cut -c 1-8` if test $[{gfortran_name_part}] = "gfortran" ; then gfortran_name=$[{FC}] FC_LIB_PATH=`$[{FC}] -print-file-name=` g95=no gfortran=yes FFLAGS="$[{FFLAGS_GFORTRAN}]" FCV="gnu95" else unset $[{FC}] fi fi dnl dnl Note regarding the apparent silliness with FCV. dnl The FCV value for g95 might be system dependent, this is dnl still to be fully explored. If not, then the FCV_G95 dnl stuff can go away. -db dnl AC_MSG_CHECKING([uname -s]) case `uname -s` in CYGWIN*) AC_MSG_RESULT(Cygwin) CYGWIN=yes ;; SunOS*) AC_MSG_RESULT(SunOS or Solaris) AC_DEFINE(__EXTENSIONS__, 1, [This is needed to use strtok_r on Solaris.]) ;; dnl dnl Pick up current gfortran from ports infrastructure for fbsd dnl FreeBSD*) if test -z $[{gfortran_name}] ; then gfortran_name=`grep FC: /usr/ports/Mk/bsd.gcc.mk | head -1 |awk '{print $[2]}'` fi FCV_G95="g95" ;; *) FCV_G95="g95" AC_MSG_RESULT(no) ;; esac dnl dnl look for gfortran if nothing else was given dnl if test -z $[gfortran_name] ; then gfortran_name="gfortran" fi AC_PATH_PROG(G95, g95) AC_PATH_PROG(GFORTRAN, $[{gfortran_name}]) if test ! -z $[{GFORTRAN}] ; then echo "*** gfortran compiler found at $[{GFORTRAN}]" if test "$[{gfortran}]" = yes; then FC_LIB_PATH=`$[{GFORTRAN}] -print-file-name=` FC=`basename $[{GFORTRAN}]` g95=no FFLAGS="$[{FFLAGS_GFORTRAN}]" FCV="gnu95" fi else echo "*** No gfortran compiler found" fi if test ! -z $[{G95}] ; then echo "*** g95 compiler found at $[{G95}]" if test "$[{g95}]" = yes; then FC_LIB_PATH=`$[{G95}] -print-file-name=` FC=`basename $[{G95}]` gfortran=no FFLAGS="$[{FFLAGS_G95}]" FCV=$[{FCV_G95}] fi else echo "*** No g95 compiler found" fi dnl dnl if FC is not set by now, pick a compiler for user dnl if test -z $[{FC}] ; then if test ! -z $[{GFORTRAN}] ; then if test "$[{g95}]" = yes; then echo "You enabled g95, but no g95 compiler found, defaulting to gfortran instead" fi FC_LIB_PATH=`$[{GFORTRAN}] -print-file-name=` FC=`basename $[{GFORTRAN}]` g95=no gfortran=yes FFLAGS="$[{FFLAGS_GFORTRAN}]" FCV="gnu95" elif test ! -z $G95 ; then if test "$[{gfortran}]" = yes; then echo "You enabled gfortran, but no gfortran compiler found, defaulting to g95 instead" fi FC_LIB_PATH=`$[{G95}] -print-file-name=` FC=`basename $[{G95}]` g95=yes gfortran=no FFLAGS="$[{FFLAGS_G95}]" FCV=$[{FCV_G95}] fi fi AC_DEFINE_UNQUOTED(FC_LIB_PATH, "${FC_LIB_PATH}", [Path to fortran libs.]) AC_SUBST(FC_LIB_PATH, "${FC_LIB_PATH}") AC_DEFINE_UNQUOTED(FC, "${FC}", [Fortran compiler.]) AC_SUBST(FC, "${FC}") AC_SUBST(FCV, "${FCV}") ])dnl }}} dnl {{{ ax_check_portaudio AC_DEFUN([AX_CHECK_PORTAUDIO],[ HAS_PORTAUDIO_H=0 HAS_PORTAUDIO_LIB=0 HAS_PORTAUDIO=0 AC_MSG_CHECKING([for a v19 portaudio ]) portaudio_lib_dir="/usr/lib" portaudio_include_dir="/usr/include" AC_ARG_WITH([portaudio-include-dir], AC_HELP_STRING([--with-portaudio-include-dir=], [path to portaudio include files]), [portaudio_include_dir=$with_portaudio_include_dir]) AC_ARG_WITH([portaudio-lib-dir], AC_HELP_STRING([--with-portaudio-lib-dir=], [path to portaudio lib files]), [portaudio_lib_dir=$with_portaudio_lib_dir]) if test -e $[{portaudio_include_dir}]/portaudio.h; then HAS_PORTAUDIO_H=1 fi if test -e $[{portaudio_lib_dir}]/libportaudio.so \ -o -e $[{portaudio_lib_dir}]/libportaudio.a;then HAS_PORTAUDIO_LIB=1 fi if test $[{HAS_PORTAUDIO_H}] -eq 1 -a $[{HAS_PORTAUDIO_LIB}] -eq 1; then LDFLAGS="-L$[{portaudio_lib_dir}] $[{LDFLAGS}]" LIBS="$[{LIBS}] -lportaudio" CPPFLAGS="-I$[{portaudio_include_dir}] $[{CPPFLAGS}]" AC_CHECK_LIB(portaudio, Pa_GetVersion, \ [HAS_PORTAUDIO_VERSION=1], [HAS_PORTAUDIO_VERSION=0]) if test $[{HAS_PORTAUDIO_VERSION}] -eq 0; then AC_MSG_RESULT([This is likely portaudio v18; you need portaudio v19]) else HAS_PORTAUDIO=1 fi else AC_MSG_RESULT([portaudio not found trying FreeBSD paths ]) portaudio_lib_dir="/usr/local/lib/portaudio2" portaudio_include_dir="/usr/local/include/portaudio2" dnl dnl Try again to make sure portaudio dirs are valid dnl AC_MSG_CHECKING([for a v19 portaudio in FreeBSD paths.]) HAS_PORTAUDIO_H=0 HAS_PORTAUDIO_LIB=0 if test -e $[{portaudio_include_dir}]/portaudio.h; then HAS_PORTAUDIO_H=1 fi if test -e $[{portaudio_lib_dir}]/libportaudio.so \ -o -e $[{portaudio_lib_dir}]/libportaudio.a;then HAS_PORTAUDIO_LIB=1 fi if test $[{HAS_PORTAUDIO_H}] -eq 1 -a $[{HAS_PORTAUDIO_LIB}] -eq 1; then AC_MSG_RESULT([found portaudio in FreeBSD paths, double checking it is v19 ]) LDFLAGS="-L$[{portaudio_lib_dir}] $[{LDFLAGS}]" LIBS="$[{LIBS}] -lportaudio" CPPFLAGS="-I$[{portaudio_include_dir}] $[{CPPFLAGS}]" AC_CHECK_LIB(portaudio, Pa_GetVersion, \ [HAS_PORTAUDIO_VERSION=1], [HAS_PORTAUDIO_VERSION=0]) if test $[{HAS_PORTAUDIO_VERSION}] -eq 0; then AC_MSG_RESULT([How did you end up with a portaudio v18 here?]) else AC_MSG_RESULT([found v19]) HAS_PORTAUDIO=1 HAS_PORTAUDIO_H=1 fi fi fi ])dnl }}} wsjt_9.3.r2792/lenms.f900000664000175000017500000000277111461555650013051 0ustar jtnjtnsubroutine lenms(r,npts,msglen) ! Determine length of the user message in a JTMS ping. real r(60000) real acf(1624) integer np(9) data np/5,7,9,11,13,17,19,23,29/ !Permissible message lengths save acf !Why necessary? (But don't remove!) msglen=0 !Use ACF to find msg length if(npts.ge.8*56) then r=r-sum(r(1:npts))/npts acfmax=0. acf0=dot_product(r(1:npts),r(1:npts)) kz=min(nint(0.75*npts),29*56) do k=8,kz fac=float(npts)/(npts-k) acf(k)=fac*dot_product(r(1:npts),r(1+k:npts+k))/acf0 enddo call hipass(acf(8),kz-7,50) do k=8,kz !Find acfmax, kpk if(acf(k).gt.acfmax) then acfmax=acf(k) kpk=k endif enddo sumsq=0. n=0 do k=8,kz !Find rms, skipping around kpk if(abs(k-kpk).gt.10) then sumsq=sumsq+acf(k)**2 n=n+1 endif enddo rms=sqrt(sumsq/n) acf=acf/rms !Normalize the acf amax2=0. acflim=3.5 do i=1,9 k=56*np(i) !Check only the permitted lengths if(k.gt.kz) go to 10 if(acf(k).gt.acflim .and. acf(k).gt.amax2) then amax2=acf(k) !Save best value >3.5 sigma msglen=np(i) !Save message length kpk2=k endif enddo 10 continue endif return end subroutine lenms wsjt_9.3.r2792/wsjt7a.txt0000664000175000017500000000267311461555650013374 0ustar jtnjtn Temporary Supplement to WSJT User's Guide, version 7.1+ ------------------------------------------------------- Version 7.1+ of WSJT is an experimental release designed to allow testing of two new modes: JTMS_2 -- possible replacement for FSK441 (meteor scatter) ISCAT_2 -- possible replacement for JT6M (ionoscatter, weak Es, F2) Despite the similarity in names, these modes are *not* the same as the modes JTMS and ISCAT offered for testing in WSJT8. The "_2" versions use the same modulation methods but different coding. They use free-text rather than structured messages. If JTMS_2 or ISCAT_2 remains part of a production release of WSJT, the "_2" portion of the mode name will eventually be dropped. In the meantime, during the testing phase, the suffix should help to avoid confusion. The following table summarizes some parameters of the new modes in WSJT 7.1 and the comparable older modes. FSK441 JTMS_2 JT6M ISCAT_2 ------------------------------------------------------------------ T/R period (s) 30 30 30 30 Modulation type 4-FSK MSK* 44-FSK 41-FSK Keying rate (baud) 441 1378 21.5 43.1 Characters/s 147 197 14.3 32.3 Bandwidth (Hz) 1764 1378 947 1809 *MSK stands for "minimum shift keying", a technique that allows faster keying while minimizing bandwidth. wsjt_9.3.r2792/fftw3.f0000664000175000017500000000413711015074716012603 0ustar jtnjtn INTEGER FFTW_R2HC PARAMETER (FFTW_R2HC=0) INTEGER FFTW_HC2R PARAMETER (FFTW_HC2R=1) INTEGER FFTW_DHT PARAMETER (FFTW_DHT=2) INTEGER FFTW_REDFT00 PARAMETER (FFTW_REDFT00=3) INTEGER FFTW_REDFT01 PARAMETER (FFTW_REDFT01=4) INTEGER FFTW_REDFT10 PARAMETER (FFTW_REDFT10=5) INTEGER FFTW_REDFT11 PARAMETER (FFTW_REDFT11=6) INTEGER FFTW_RODFT00 PARAMETER (FFTW_RODFT00=7) INTEGER FFTW_RODFT01 PARAMETER (FFTW_RODFT01=8) INTEGER FFTW_RODFT10 PARAMETER (FFTW_RODFT10=9) INTEGER FFTW_RODFT11 PARAMETER (FFTW_RODFT11=10) INTEGER FFTW_FORWARD PARAMETER (FFTW_FORWARD=-1) INTEGER FFTW_BACKWARD PARAMETER (FFTW_BACKWARD=+1) INTEGER FFTW_MEASURE PARAMETER (FFTW_MEASURE=0) INTEGER FFTW_DESTROY_INPUT PARAMETER (FFTW_DESTROY_INPUT=1) INTEGER FFTW_UNALIGNED PARAMETER (FFTW_UNALIGNED=2) INTEGER FFTW_CONSERVE_MEMORY PARAMETER (FFTW_CONSERVE_MEMORY=4) INTEGER FFTW_EXHAUSTIVE PARAMETER (FFTW_EXHAUSTIVE=8) INTEGER FFTW_PRESERVE_INPUT PARAMETER (FFTW_PRESERVE_INPUT=16) INTEGER FFTW_PATIENT PARAMETER (FFTW_PATIENT=32) INTEGER FFTW_ESTIMATE PARAMETER (FFTW_ESTIMATE=64) INTEGER FFTW_ESTIMATE_PATIENT PARAMETER (FFTW_ESTIMATE_PATIENT=128) INTEGER FFTW_BELIEVE_PCOST PARAMETER (FFTW_BELIEVE_PCOST=256) INTEGER FFTW_DFT_R2HC_ICKY PARAMETER (FFTW_DFT_R2HC_ICKY=512) INTEGER FFTW_NONTHREADED_ICKY PARAMETER (FFTW_NONTHREADED_ICKY=1024) INTEGER FFTW_NO_BUFFERING PARAMETER (FFTW_NO_BUFFERING=2048) INTEGER FFTW_NO_INDIRECT_OP PARAMETER (FFTW_NO_INDIRECT_OP=4096) INTEGER FFTW_ALLOW_LARGE_GENERIC PARAMETER (FFTW_ALLOW_LARGE_GENERIC=8192) INTEGER FFTW_NO_RANK_SPLITS PARAMETER (FFTW_NO_RANK_SPLITS=16384) INTEGER FFTW_NO_VRANK_SPLITS PARAMETER (FFTW_NO_VRANK_SPLITS=32768) INTEGER FFTW_NO_VRECURSE PARAMETER (FFTW_NO_VRECURSE=65536) INTEGER FFTW_NO_SIMD PARAMETER (FFTW_NO_SIMD=131072) wsjt_9.3.r2792/setup65.f0000664000175000017500000000521611033464225013062 0ustar jtnjtn subroutine setup65 C Defines arrays related to the pseudo-random synchronizing pattern. C Executed at program start. integer npra(135),nprc(126) include 'prcom.h' C JT44 data npra/ + 1,1,1,0,1,0,0,0,0,1,1,1,0,0,1,1,0,0,0,0, + 1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,1, + 1,0,0,1,0,0,1,0,1,1,1,0,0,1,1,1,0,0,0,0, + 0,0,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0, + 1,0,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0, + 1,1,1,1,1,0,1,0,1,1,0,1,0,0,0,0,0,1,1,0, + 1,1,1,0,1,1,0,1,1,0,1,0,1,1,0/ C JT65 data nprc/ + 1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, + 0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, + 0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, + 0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, + 1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, + 0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, + 1,1,1,1,1,1/ data mr2/0/ !Silence g77 warning C Put the appropriate pseudo-random sequence into pr nsym=126 do i=1,nsym pr(i)=2*nprc(i)-1 enddo C Determine locations of data and reference symbols k=0 mr1=0 do i=1,nsym if(pr(i).lt.0.0) then k=k+1 mdat(k)=i else mr2=i if(mr1.eq.0) mr1=i endif enddo nsig=k C Determine the reference symbols for each data symbol. do k=1,nsig m=mdat(k) mref(k,1)=mr1 do n=1,10 !Get ref symbol before data if((m-n).gt.0) then if (pr(m-n).gt.0.0) go to 10 endif enddo go to 12 10 mref(k,1)=m-n 12 mref(k,2)=mr2 do n=1,10 !Get ref symbol after data if((m+n).le.nsym) then if (pr(m+n).gt.0.0) go to 20 endif enddo go to 22 20 mref(k,2)=m+n 22 continue enddo C Now do it all again, using opposite logic on pr(i) k=0 mr1=0 do i=1,nsym if(pr(i).gt.0.0) then k=k+1 mdat2(k)=i else mr2=i if(mr1.eq.0) mr1=i endif enddo nsig=k do k=1,nsig m=mdat2(k) mref2(k,1)=mr1 do n=1,10 if((m-n).gt.0) then if (pr(m-n).lt.0.0) go to 110 endif enddo go to 112 110 mref2(k,1)=m-n 112 mref2(k,2)=mr2 do n=1,10 if((m+n).le.nsym) then if (pr(m+n).lt.0.0) go to 120 endif enddo go to 122 120 mref2(k,2)=m+n 122 continue enddo return end wsjt_9.3.r2792/fano.c0000664000175000017500000001645111015074716012474 0ustar jtnjtn/* * Soft decision Fano sequential decoder for K=32 r=1/2 convolutional code * Copyright 1994, Phil Karn, KA9Q */ #define LL 1 /* Select Layland-Lushbaugh code */ #include #include #include #include "fano.h" struct node { unsigned long encstate; /* Encoder state of next node */ long gamma; /* Cumulative metric to this node */ int metrics[4]; /* Metrics indexed by all possible tx syms */ int tm[2]; /* Sorted metrics for current hypotheses */ int i; /* Current branch being tested */ }; /* Convolutional coding polynomials. All are rate 1/2, K=32 */ #ifdef NASA_STANDARD /* "NASA standard" code by Massey & Costello * Nonsystematic, quick look-in, dmin=11, dfree=23 * used on Pioneer 10-12, Helios A,B */ #define POLY1 0xbbef6bb7 #define POLY2 0xbbef6bb5 #endif #ifdef MJ /* Massey-Johannesson code * Nonsystematic, quick look-in, dmin=13, dfree>=23 * Purported to be more computationally efficient than Massey-Costello */ #define POLY1 0xb840a20f #define POLY2 0xb840a20d #endif #ifdef LL /* Layland-Lushbaugh code * Nonsystematic, non-quick look-in, dmin=?, dfree=? */ #define POLY1 0xf2d05351 #define POLY2 0xe4613c47 #endif /* Convolutional encoder macro. Takes the encoder state, generates * a rate 1/2 symbol pair and stores it in 'sym'. The symbol generated from * POLY1 goes into the 2-bit of sym, and the symbol generated from POLY2 * goes into the 1-bit. */ #define ENCMAC(sym,encstate){\ unsigned long _tmp;\ \ _tmp = (encstate) & POLY1;\ _tmp ^= _tmp >> 16;\ (sym) = Partab[(_tmp ^ (_tmp >> 8)) & 0xff] << 1;\ _tmp = (encstate) & POLY2;\ _tmp ^= _tmp >> 16;\ (sym) |= Partab[(_tmp ^ (_tmp >> 8)) & 0xff];\ } /* Convolutionally encode a packet. The input data bytes are read * high bit first and the encoded packet is written into 'symbols', * one symbol per byte. The first symbol is generated from POLY1, * the second from POLY2. * * Storing only one symbol per byte uses more space, but it is faster * and easier than trying to pack them more compactly. */ #ifdef CVF int __stdcall ENCODE(char *data, int *nbytes0,char *symbols) #else int encode_(char *data, int *nbytes0,char *symbols) #endif { unsigned long encstate; int sym; int i; unsigned nbytes; nbytes=*nbytes0; encstate = 0; while(nbytes-- != 0){ for(i=7;i>=0;i--){ encstate = (encstate << 1) | ((*data >> i) & 1); ENCMAC(sym,encstate); *symbols++ = sym >> 1; *symbols++ = sym & 1; } data++; } return 0; } /* Decode packet with the Fano algorithm. * Return 0 on success, -1 on timeout */ #ifdef CVF int __stdcall FANO( unsigned long *metric, /* Final path metric (returned value) */ unsigned long *cycles, /* Cycle count (returned value) */ unsigned char *data, /* Decoded output data */ unsigned char *symbols, /* Raw deinterleaved input symbols */ unsigned int *nbits0, /* Number of output bits */ int mettab[2][256], /* Metric table, [sent sym][rx symbol] */ int *delta0, /* Threshold adjust parameter */ unsigned long *maxcycles0)/* Decoding timeout in cycles per bit */ #else int fano_( unsigned long *metric, /* Final path metric (returned value) */ unsigned long *cycles, /* Cycle count (returned value) */ unsigned char *data, /* Decoded output data */ unsigned char *symbols, /* Raw deinterleaved input symbols */ unsigned int *nbits0, /* Number of output bits */ int mettab[2][256], /* Metric table, [sent sym][rx symbol] */ int *delta0, /* Threshold adjust parameter */ unsigned long *maxcycles0)/* Decoding timeout in cycles per bit */ #endif { struct node *nodes; /* First node */ register struct node *np; /* Current node */ struct node *lastnode; /* Last node */ struct node *tail; /* First node of tail */ long t; /* Threshold */ long m0,m1; long ngamma; unsigned int lsym; unsigned long i; unsigned int nbits; int delta; unsigned long maxcycles; nbits=*nbits0; delta=*delta0; maxcycles=*maxcycles0; if((nodes = (struct node *)malloc(nbits*sizeof(struct node))) == NULL){ printf("alloc failed\n"); return 0; } lastnode = &nodes[nbits-1]; tail = &nodes[nbits-31]; /* Was nbits-33 in Karn code */ /* Compute all possible branch metrics for each symbol pair * This is the only place we actually look at the raw input symbols */ for(np=nodes;np <= lastnode;np++){ np->metrics[0] = mettab[0][symbols[0]] + mettab[0][symbols[1]]; np->metrics[1] = mettab[0][symbols[0]] + mettab[1][symbols[1]]; np->metrics[2] = mettab[1][symbols[0]] + mettab[0][symbols[1]]; np->metrics[3] = mettab[1][symbols[0]] + mettab[1][symbols[1]]; symbols += 2; } np = nodes; np->encstate = 0; /* Compute and sort branch metrics from root node */ ENCMAC(lsym,np->encstate); /* 0-branch (LSB is 0) */ m0 = np->metrics[lsym]; /* Now do the 1-branch. To save another ENCMAC call here and * inside the loop, we assume that both polynomials are odd, * providing complementary pairs of branch symbols. * This code should be modified if a systematic code were used. */ m1 = np->metrics[3^lsym]; if(m0 > m1){ /* 0-branch has better metric */ np->tm[0] = m0; np->tm[1] = m1; } else { /* 1-branch is better */ np->tm[0] = m1; np->tm[1] = m0; np->encstate++; /* Set low bit */ } np->i = 0; /* Start with best branch */ maxcycles *= nbits; np->gamma = t = 0; /* Start the Fano decoder */ for(i=1;i <= maxcycles;i++){ #ifdef debug printf("k=%ld, g=%ld, t=%ld, m[%d]=%d\n", np-nodes,np->gamma,t,np->i,np->tm[np->i]); #endif /* Look forward */ ngamma = np->gamma + np->tm[np->i]; if(ngamma >= t){ /* Node is acceptable */ if(np->gamma < t + delta){ /* First time we've visited this node; * Tighten threshold. * * This loop could be replaced with * t += delta * ((ngamma - t)/delta); * but the multiply and divide are slower. */ while(ngamma >= t + delta) t += delta; } /* Move forward */ np[1].gamma = ngamma; np[1].encstate = np->encstate << 1; if(++np == lastnode) break; /* Done! */ /* Compute and sort metrics, starting with the * zero branch */ ENCMAC(lsym,np->encstate); if(np >= tail){ /* The tail must be all zeroes, so don't even * bother computing the 1-branches there. */ np->tm[0] = np->metrics[lsym]; } else { m0 = np->metrics[lsym]; m1 = np->metrics[3^lsym]; if(m0 > m1){ /* 0-branch is better */ np->tm[0] = m0; np->tm[1] = m1; } else { /* 1-branch is better */ np->tm[0] = m1; np->tm[1] = m0; np->encstate++; /* Set low bit */ } } np->i = 0; /* Start with best branch */ continue; } /* Threshold violated, can't go forward */ for(;;){ /* Look backward */ if(np == nodes || np[-1].gamma < t){ /* Can't back up either. * Relax threshold and and look * forward again to better branch. */ t -= delta; if(np->i != 0){ np->i = 0; np->encstate ^= 1; } break; } /* Back up */ if(--np < tail && np->i != 1){ /* Search next best branch */ np->i++; np->encstate ^= 1; break; } /* else keep looking back */ } } *metric = np->gamma; /* Return final path metric */ /* Copy decoded data to user's buffer */ nbits >>= 3; np = &nodes[7]; while(nbits-- != 0){ *data++ = np->encstate; np += 8; } free(nodes); *cycles = i+1; if(i >= maxcycles) return -1; /* Decoder timed out */ return 0; /* Successful completion */ } wsjt_9.3.r2792/iscat.f900000664000175000017500000001060211555313247013024 0ustar jtnjtnsubroutine iscat(cdat0,npts0,t2,pick,cfile6,MinSigdB,DFTolerance,NFreeze, & MouseDF,mousebutton,mode4,nafc,nmore,psavg) ! Decode an ISCAT signal parameter (NMAX=30*3101) parameter (NSZ=4*1400) character cfile6*6 !File time character c42*42 character msg*29,msg1*29,msgbig*29 character csync*1 complex cdat0(NMAX) complex cdat(NMAX) real s0(288,NSZ) real fs1(0:41,30) real psavg(72) !Average spectrum of whole file integer dftolerance integer icos(4) logical pick,last data icos/0,1,3,2/ data nsync/4/,nlen/2/,ndat/18/ data c42/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ /.?@-'/ fsample=3100.78125 !Sample rate after 9/32 downsampling nsps=144/mode4 bigworst=-1.e30 bigxsync=0. last=.false. do inf=1,6 !Loop over data-segment sizes nframes=2**inf if(nframes*24*nsps.gt.npts0) then nframes=npts0/(24*nsps) last=.true. endif npts=nframes*24*nsps do ia=1,npts0-npts,nsps*24 !Loop over start times stepped by 1 frame ib=ia+npts-1 cdat(1:npts)=cdat0(ia:ib) t3=t2+(ia + 0.5*npts)/fsample + 0.9 if(pick) t3=t2 ! Compute symbol spectra and establish sync: call synciscat(cdat,npts,s0,jsym,df,DFTolerance,NFreeze, & MouseDF,mousebutton,mode4,nafc,psavg,xsync,nsig,ndf0,msglen, & ipk,jpk,idf,df1) nfdot=nint(idf*df1) isync=xsync if(msglen.eq.0 .or. isync.lt.max(MinSigdB,0)) then msglen=0 worst=1. avg=1. ndf0=0 go to 100 endif ipk3=0 !Silence compiler warning nblk=nsync+nlen+ndat fs1=0. nfold=jsym/96 jb=96*nfold k=0 n=0 do j=jpk,jsym,4 !Fold information symbols into fs1 k=k+1 km=mod(k-1,nblk)+1 if(km.gt.6) then n=n+1 m=mod(n-1,msglen)+1 ii=nint(idf*float(j-jb/2)/float(jb)) do i=0,41 iii=ii+ipk+2*i if(iii.ge.1 .and. iii.le.288) fs1(i,m)=fs1(i,m) + s0(iii,j) enddo endif enddo ! Read out the message contents: msg= ' ' msg1=' ' mpk=0 worst=9999. sum=0. do m=1,msglen smax=0. smax2=0. do i=0,41 if(fs1(i,m).gt.smax) then smax=fs1(i,m) ipk3=i endif enddo do i=0,41 if(fs1(i,m).gt.smax2 .and. i.ne.ipk3) smax2=fs1(i,m) enddo rr=0. if(smax2.gt.0.0) rr=smax/smax2 sum=sum + rr if(rr.lt.worst) worst=rr if(ipk3.eq.40) mpk=m msg1(m:m)=c42(ipk3+1:ipk3+1) enddo avg=sum/msglen if(mpk.eq.1) then msg=msg1(2:) else if(mpk.lt.msglen) then msg=msg1(mpk+1:msglen)//msg1(1:mpk-1) else msg=msg1(1:msglen-1) endif if(worst.gt.bigworst) then bigworst=worst bigavg=avg bigxsync=xsync nsigbig=nsig ndf0big=ndf0 nfdotbig=nfdot msgbig=msg msglenbig=msglen bigt2=t3 tana=nframes*24*nsps/fsample if(bigworst.gt.2.0) go to 110 endif 100 continue enddo if(last) go to 110 enddo 110 continue worst=bigworst avg=bigavg xsync=bigxsync nsig=nsigbig ndf0=ndf0big nfdot=nfdotbig msg=msgbig msglen=msglenbig t2=bigt2 isync=xsync nworst=10.0*(worst-1.0) navg=10.0*(avg-1.0) if(nworst.gt.10) nworst=10 if(navg.gt.10) navg=10 if(navg.le.0 .or. isync.lt.max(minsigdb,0)) then msg=' ' nworst=0 navg=0 ndf0=0 nfdot=0 nsig=-20 msglen=0 tana=0. t2=0. endif csync=' ' if(isync.ge.1) csync='*' call cs_lock('iscat') write(11,1020) cfile6,isync,nsig,t2,ndf0,nfdot,csync,msg(1:28), & msglen,nworst,navg,tana write(21,1020) cfile6,isync,nsig,t2,ndf0,nfdot,csync,msg(1:28), & msglen,nworst,navg,tana 1020 format(a6,2i4,f5.1,i5,i4,1x,a1,2x,a28,i4,2i3,f5.1) call cs_unlock return end subroutine iscat wsjt_9.3.r2792/xfft2.f0000664000175000017500000001260711033433544012602 0ustar jtnjtn SUBROUTINE xfft2(DATA,NB) c c the cooley-tukey fast fourier transform in usasi basic fortran c C .. Scalar Arguments .. INTEGER NB C .. C .. Array Arguments .. REAL DATA(NB+2) C .. C .. Local Scalars .. REAL DIFI,DIFR,RTHLF,SUMI,SUMR,T2I,T2R,T3I,T3R,T4I, + T4R,TEMPI,TEMPR,THETA,TWOPI,U1I,U1R,U2I,U2R,U3I,U3R, + U4I,U4R,W2I,W2R,W3I,W3R,WI,WR,WSTPI,WSTPR INTEGER I,I2,IPAR,J,K1,K2,K3,K4,KDIF,KMIN, + KSTEP,L,LMAX,M,MMAX,NH C .. C .. Intrinsic Functions .. INTRINSIC COS,MAX0,REAL,SIN C .. C .. Data statements .. DATA TWOPI/6.2831853071796/,RTHLF/0.70710678118655/ c c 1. real transform for the 1st dimension, n even. method-- c transform a complex array of length n/2 whose real parts c are the even numbered real values and whose imaginary parts c are the odd numbered real values. separate and supply c the second half by conjugate symmetry. c NH = NB/2 c c shuffle data by bit reversal, since n=2**k. c J = 1 DO 131 I2 = 1,NB,2 IF (J-I2) 124,127,127 124 TEMPR = DATA(I2) TEMPI = DATA(I2+1) DATA(I2) = DATA(J) DATA(I2+1) = DATA(J+1) DATA(J) = TEMPR DATA(J+1) = TEMPI 127 M = NH 128 IF (J-M) 130,130,129 129 J = J - M M = M/2 IF (M-2) 130,128,128 130 J = J + M 131 CONTINUE c c main loop for factors of two. perform fourier transforms of c length four, with one of length two if needed. the twiddle factor c w=exp(-2*pi*sqrt(-1)*m/(4*mmax)). check for w=-sqrt(-1) c and repeat for w=w*(1-sqrt(-1))/sqrt(2). c IF (NB-2) 174,174,143 143 IPAR = NH 144 IF (IPAR-2) 149,146,145 145 IPAR = IPAR/4 GO TO 144 146 DO 147 K1 = 1,NB,4 K2 = K1 + 2 TEMPR = DATA(K2) TEMPI = DATA(K2+1) DATA(K2) = DATA(K1) - TEMPR DATA(K2+1) = DATA(K1+1) - TEMPI DATA(K1) = DATA(K1) + TEMPR DATA(K1+1) = DATA(K1+1) + TEMPI 147 CONTINUE 149 MMAX = 2 150 IF (MMAX-NH) 151,174,174 151 LMAX = MAX0(4,MMAX/2) WR=0 !Shut up compiler warnings. -db WI=0 !Shut up compiler warnings. -db W2I=0 !Shut up compiler warnings. -db W2R=0 !Shut up compiler warnings. -db W3I=0 !Shut up compiler warnings. -db W3R=0 !Shut up compiler warnings. -db DO 173 L = 2,LMAX,4 M = L IF (MMAX-2) 156,156,152 152 THETA = -TWOPI*REAL(L)/REAL(4*MMAX) WR = COS(THETA) WI = SIN(THETA) 155 W2R = WR*WR - WI*WI W2I = 2.*WR*WI W3R = W2R*WR - W2I*WI W3I = W2R*WI + W2I*WR 156 KMIN = 1 + IPAR*M IF (MMAX-2) 157,157,158 157 KMIN = 1 158 KDIF = IPAR*MMAX 159 KSTEP = 4*KDIF IF (KSTEP-NB) 160,160,169 160 DO 168 K1 = KMIN,NB,KSTEP K2 = K1 + KDIF K3 = K2 + KDIF K4 = K3 + KDIF IF (MMAX-2) 161,161,164 161 U1R = DATA(K1) + DATA(K2) U1I = DATA(K1+1) + DATA(K2+1) U2R = DATA(K3) + DATA(K4) U2I = DATA(K3+1) + DATA(K4+1) U3R = DATA(K1) - DATA(K2) U3I = DATA(K1+1) - DATA(K2+1) U4R = DATA(K3+1) - DATA(K4+1) U4I = DATA(K4) - DATA(K3) GO TO 167 164 T2R = W2R*DATA(K2) - W2I*DATA(K2+1) T2I = W2R*DATA(K2+1) + W2I*DATA(K2) T3R = WR*DATA(K3) - WI*DATA(K3+1) T3I = WR*DATA(K3+1) + WI*DATA(K3) T4R = W3R*DATA(K4) - W3I*DATA(K4+1) T4I = W3R*DATA(K4+1) + W3I*DATA(K4) U1R = DATA(K1) + T2R U1I = DATA(K1+1) + T2I U2R = T3R + T4R U2I = T3I + T4I U3R = DATA(K1) - T2R U3I = DATA(K1+1) - T2I U4R = T3I - T4I U4I = T4R - T3R 167 DATA(K1) = U1R + U2R DATA(K1+1) = U1I + U2I DATA(K2) = U3R + U4R DATA(K2+1) = U3I + U4I DATA(K3) = U1R - U2R DATA(K3+1) = U1I - U2I DATA(K4) = U3R - U4R DATA(K4+1) = U3I - U4I 168 CONTINUE KDIF = KSTEP KMIN = 4*KMIN - 3 GO TO 159 169 M = M + LMAX IF (M-MMAX) 170,170,173 170 TEMPR = WR WR = (WR+WI)*RTHLF WI = (WI-TEMPR)*RTHLF GO TO 155 173 CONTINUE IPAR = 3 - IPAR MMAX = MMAX + MMAX GO TO 150 c c complete a real transform in the 1st dimension, n even, by con- c jugate symmetries. c 174 THETA = -TWOPI/REAL(NB) WSTPR = COS(THETA) WSTPI = SIN(THETA) WR = WSTPR WI = WSTPI I = 3 J = NB - 1 GO TO 207 205 SUMR = (DATA(I)+DATA(J))/2. SUMI = (DATA(I+1)+DATA(J+1))/2. DIFR = (DATA(I)-DATA(J))/2. DIFI = (DATA(I+1)-DATA(J+1))/2. TEMPR = WR*SUMI + WI*DIFR TEMPI = WI*SUMI - WR*DIFR DATA(I) = SUMR + TEMPR DATA(I+1) = DIFI + TEMPI DATA(J) = SUMR - TEMPR DATA(J+1) = -DIFI + TEMPI I = I + 2 J = J - 2 TEMPR = WR WR = WR*WSTPR - WI*WSTPI WI = TEMPR*WSTPI + WI*WSTPR 207 IF (I-J) 205,208,211 208 DATA(I+1) = -DATA(I+1) 211 DATA(NB+1) = DATA(1) - DATA(2) DATA(NB+2) = 0. DATA(1) = DATA(1) + DATA(2) DATA(2) = 0. RETURN END wsjt_9.3.r2792/genmet.f0000664000175000017500000000140411461555650013031 0ustar jtnjtn subroutine genmet(mode,mettab) C Return appropriate metric table for soft-decision convolutional decoder. real bias !bias for integer table integer scale !scale factor for integer table C Metric table (RxSymbol,TxSymbol) integer mettab(0:255,0:1) call cs_lock('genmet') bias=0.5 scale=10 if(mode.eq.7) then !Non-coherent 2FSK open(19,file='dmet_10_-1_3.dat',status='old') else print*,'Unsupported mode:',mode,' in genmet.' stop 'genmet' endif call cs_unlock do i=0,255 read(19,*) junk,d0,d1 mettab(i,0)=nint(scale*(d0-bias)) mettab(i,1)=nint(scale*(d1-bias)) enddo return end wsjt_9.3.r2792/UpdateHistory.txt0000664000175000017500000036522111015074716014754 0ustar jtnjtnChanges in WSJT 5.9.7 (r383): May 4, 2007 ------------------------------------------------- Several new features were motivated by the recent explosion of activity using JT65A on the HF bands. 1. The "Band" menu now has entries for all bands from 1.8 to 2304 MHz. 2. An optional menu item "Decode -> JT65 -> Quick Decode" has been added. If this item is checked, decoding will start at t=48 s (rather than t=53 s). Decoding will then be slightly faster, and (very) slightly less sensitive. This feature is intended primarily for terrestrial QSOs, which do not have the 2.5 s path delay of the moonbounce channel. 3. Since WSJT 5.9.0, double-clicking on a callsign in either one of the decoded text windows causes that callsign to be copied into the "To Radio" box and inserted appropriately into transmit message boxes Tx1 and Tx2. Double-right-clicking does these same things and also activates "Auto On". These features make it easy to call a station you have just copied calling CQ, or responding to your CQ. In version 5.9.7 the feature is expanded so that in JT65 mode double-right-clicking on a callsign causes the Tx messages to be configured with numerical signal reports (in dB) and full-length messages including callsigns. 4. The little-used "Sked" box has been deleted. In its place (just above the "GenStdMsgs" button) is a new button labeled "TxDF = 0". Clicking this button toggles between transmitting at the standard JT65 frequency (sync tone at 1270.46 Hz) and transmitting at an offset frequency equal to the current value of "Freeze DF". This feature is intended primarily for HF use. If you are tuned to dial frequency 14.076 MHz, for example, and find someone calling CQ at DF=-450 Hz, click on the sync tone to set Freeze DF appropriately, then click the TxDF button. Its label will change to "TxDF = -450" (or whatever the appropriate number is) and its background color will change to red. Your next transmission will be very close to zero-beat with the other station. If you change Freeeze DF and wish to change your Tx frequency to the new value, toggle the TxDF button off and then on again. 5. Earlier versions of WSJT used the Right/Left arrow keys to adjust "Freeze DF" in 5 Hz steps. This use sometimes conflicted with standard use of the arrow keys for text editing, with the undesirable side effect that Freeze DF might be changed unintentionally (for example, when editing a Tx message). In version 5.9.7 keys F11 and F12 are used to adjust Freeze DF, rather than the arrow keys. 6. In past versions Alt-D has been available as a keyboard shortcut equivalent to clicking the Decode button. Related keyboard shortcuts have been added: Ctrl-d forces the decoder to consider data that would normally be rejected because they do not meet the standard signal-level requirements. Shift-Ctrl-D does the same thing, but also forces an attempt to decode a standard (as opposed to shorthand) message. 7. A one-page summary of WSJT keyboard shortcuts, special mouse commands, and recommended message sequences for minimal JT65 QSOs has been added to the standard distribution. Print the file WSJT_Quick_Reference.pdf and keep a copy handy at your operating position. 8. Several very minor bugs were corrected, and screens displayed by Help menu items were updated. Changes in WSJT 5.9.6 (r309): September 22, 2006 ------------------------------------------------- WSJT v5.9.6 r309 provides the following new features: 1. In earlier versions the vertically-scrolling JT65 waterfall always displayed the frequency range 500-2500 Hz. The range has now been optionally expanded and made more flexible. By toggling a button labeled "BW" at the top of the SpecJT window you can change the displayed bandwidth to 4 kHz. In addition, you can offset the displayed region in 100 Hz steps by using buttons labeled "<" and ">", and you can return the range to its default alignment with a button labeled "|". This new feature provides two significant advantages. If your receiver provides a bandwidth greater than 2 kHz in USB mode, you can now display up to 4 kHz instantaneously (and with offsets, a total range of 5 kHz). The Kenwood TS-2000, for example, provides a 5 kHz bandwidth. The expanded range will make it easier to find other stations to work -- e.g. in contests, and at 1296 MHz where Doppler shifts are relatively large. In addition, extending the displayed spectrum to frequencies below 500 Hz is useful if you are using WSJT as a display tool when operating on CW. 2. When attempting to establish proper synchronization with a received signal, the JT65 decoder searches values of DT from -2 to +10 s. Toggling a new control labeled "Shift" (to the right of "Dsec") will offset the received data by +5 s, thereby providing an effective search range of -7 to +5 s. In normal operation you should leave this option turned OFF (i.e., "Shift 0.0"). Occasionally, however, using "Shift 5.0" may allow you to decode transmissions from a station whose computer clock has a large error. 3. "Alt-G" is a keyboard shortcut equivalent to clicking "GenStdMsgs". A new shortcut "Ctrl-G" now has a similar effect, but it generates an alternate set of JT65 messages with callsigns included in the "RO" and "RRR" messages. These message forms can be useful in pile-up situations. 4. I have been told that the use of "/A" is a required callsign suffix in some circumstances. Therefore, the list of optional callsign suffixes has been expanded to include "/A". For this feature to work properly it is necessary for both transmitting and receiving stations to use WSJT v5.9.6 (or later). 5. An improved algorithm is now used to measure the error in soundcard sampling frequencies. One effect is that the resulting numbers in the status bar will restabilize correctly after your computer clock has been reset. 6. The default font used to display astronomical data has been changed to a monospace font. In addition, more flexibility is provided for selecting suitable and attractive fonts when running WSJT under Linux or FreeBSD. 7. Switching from JT6M to JT65 mode now turns Freeze off. 8. Appearance of the F1 help screen has been cleaned up. 9. Shortcut reminders have been added to menu items. 10. Cut-and-paste now works properly when running WSJT in Linux. Changes in WSJT 5.9.5 (r236): August 3, 2006 --------------------------------------------- WSJT v5.9.5 r236 contains some major improvements for JT65 and a number of smaller enhancements affecting other modes. 1. Changes to the JT65 Deep Search decoder have made it slightly more sensitive, on average. More importantly, the number of false decodes has been dramatically reduced. JT65 decoding can be as much as 3 times faster than before. For these reasons alone, you should be sure to upgrade if you use JT65. 2. A more useful menu of JT65 decoding options is provided. You may now select "No Deep Search", "Normal Deep Search", "Aggressive Deep Search", or "Include Average in Aggressive Deep Search". 3. The two end-of-line numbers (formerly displayed only if Aggressive was checked) are now always displayed in JT65 mode. The first number is 1 if the Koetter-Vardy decoder succeeded, 0 otherwise. The second number is the confidence level of the Deep Search decoding (if enabled) on a 0 to 10 scale. 4. The JT65 AFC function has been rewritten. Drifting signals (including Doppler-induced drifts at 1296 MHz) will usually decode better with AFC turned on. 5. Mode JT65C, which is used primarily at 1296 MHz, has been improved in several ways. Synchronizing is better by about 1 "sync" unit, and signal strengths are measured more reliably. Decoding of shorthand messages is improved. 6. When compiled for Linux and FreeBSD (see note below), WSJT now allows use of parallel as well as serial ports for T/R control. 7. Wave files are now saved correctly in Linux and FreeBSD versions. 8. Support has been added for extra-long callsigns such as VU4AN/VU3RYF. The full augmented callsign must be no longer than 12 characters. Enter the special add-on DXCC prefix or callsign (in this case, VU4AN) on the Setup | Options page. 9. If the "Grid" box on main WSJT window is blank, displayed values of Doppler and df/dt will be those of your own echoes. 10. If the ToRadio box is blank, "Mon_" (rather than "_" is now used as the naming prefix for recorded wave files. 11. The birdie-killing "Zap" feature has been changed so that if Freeze is ON, nothing is zapped within Tol of the Freeze DF. In addition, the Zap behavior no longer depends on previous decoding history. 12. Bug fix: previously, if Freeze had been checked while operating in another mode, Zap no longer worked correctly in FSK441 mode. This has been fixed. 13. The selection of data for mouse-picked decodes in JT6M mode has been corrected. (In recent versions it was necessary to click a few seconds to the right of a signal enhancement.) 14. The logic that limits search for JT6M synchronization to a range of frequencies (+/- Tol around FreezeDF) has been corrected. A small green tick at the left edge of the main graphical area indicates the FreezeDF frequency. The FreezeDF value is also displayed digitally in the status bar. You can change FreezeDF with the left/right keyboard arrows. Default settings for JT6M are now Tol=200, Freeze On, MouseDF=0. 15. If mouse-picked decoding was invoked, all wave files were previously saved even if "Save none" was selected on the menu. This has been fixed. 16. On your first start-up with version 5.9.5, be sure to re-enter your correct PTT port number on the Setup | Options page. Under Linux or FreeBSD, enter the appropriate device name, for example /dev/ttyS0. Special note to Linux and FreeBSD users --------------------------------------- WSJT is now being used by a number of people on Linux or FreeBSD systems. Appearance and operational behavior is essentially identical to the Windows version. At present you must compile the yourself for Linix or FreeBSD. Instructions are available, and others who have succeeded will help you if help is needed. This is not necessarily a trivial task, however. Packaged versions of WSJT for specific *nix distributions may be provided if there is sufficient demand. For more information on WSJT for Linux and FreeBSD, or if you want to try compiling the program for Mac OS/X, contact the WSJT development team at wsjt-devel@lists.berlios.de. WSJT is Open Source software. The source code and related materials can be found at http://developer.berlios.de/projects/wsjt/. Changes in WSJT 5.9.4 (r159): April 11, 2006 --------------------------------------------- This is a maintenance release. 1. Problems exhibited on some computers with dual or "hyperthreading" CPUs have been fixed (or at least reduced, see below). 2. Problems with reading previously recorded files (such as the sample files in the WSJT tutorial) have been fixed. 3. Bad data could cause an error message "Error in KV decoder, or no KV decoder present" in the console window. Fixed. 4. The delay between PTT assertion and start of Tx Audio, and the delay between end of Tx Audio and release of PTT, have been increased by 0.2 s. In addition, a bug in the T/R timing logic was fixed. 5. There was a minor bug in computing the position of the moon. (The displayed Az and El of the "home station" were correct for a time 100 seconds earlier than the actual time.) This has been fixed. In addition, refraction adjustments are no longer made in the Sun and Moon elevations. 6. A minor bug when displaying large negative Doppler shifts in the file azel.dat has been fixed. 7. As an aid to future development of WSJT, the program is now capable of transmitting "test files" with arbitrary audio content. NOTE: If you have a computer with multiple CPUs or a CPU with hyperthreading, and if WSJT 5.9.4 does not run properly for you, please reboot your machine, enter the BIOS Setup screen, disable hyperthreading, and see if WSJT then runs properly. Then let me know the results of this test. Note: you will probably notice very little (if any) degradation in performance by leaving hyperthreading turned off. For now, this is the recommended procedure if you have problems with it turned on. Changes in WSJT 5.9.3: January 26, 2006 --------------------------------------- This is a minor maintenance release. 1. New Help screen provides a list of available suffixes and add-on DXCC prefixes. 2. The occasional error message about "images do not match" has been trapped and should no longer occur. 3. It is no longer necessary to enter one's own grid locator with the first two letters in upper case and the last two in lower case. 4. Initialization of the PTT line to the "OFF" state has been fixed. Changes in WSJT 5.9.2: January 16, 2006 --------------------------------------- Enhancements ------------ 1. Thread priorities have been adjusted for smoother operation. 2. The JT65 decoder has been given improved immunity to garbage data (birdies, QRM, etc). It exhibits better performance on strong signals and provides more accurate estimates of their S/N. 3. The FSK441 decoder produces less on-screen gibberish when processing mouse-picked decodes. 4. The JT6M decoder now makes better use of Freeze and Tol. You can set the value of "Freeze DF" by using the Right/Left arrow keys. (This feature is also useful in JT65 mode.) 5. On-screen font sizes can be set by using Windows Notepad to edit the file wsjtrc.win. If your screen has resolution greater than 1024 x 768, or if you have old eyes like mine, you may want to increase the font sizes from 8 and 9 points (first three lines of the file) to, say, 9 and 10 points. 6. A simulator mode is now built into WSJT for testing purposes. It is presently most useful in JT65 mode. By entering, say, "#-22" in the text box for Tx6, you signify that the program should generate its Tx audio files with the signal embedded in white gaussian noise, 22 dB below the noise power in a 2.5 kHz bandwidth. You can direct this signal into a second computer running WSJT, for example to test the decoder or to practice operating in JT65 mode. You can even have the two computers "work each other" in a simulated QSO, although changing messages of course requires operator action. 7. Dividing lines are now provided on the waterfall display between spectra corresponding to wave files read from disk. 8. The PTT line is explicitly set low on program startup. 9. The F10 key brings up the SpecJT screen (if it was hidden) and toggles foreground and focus status between the WSJT and SpecJT screens. 10. You can use the Alt-F and Alt-Z keyboard shortcuts to toggle "Freeze" and "Zap" on and off. 11. "Accelerated decoding" has been removed from the Setup menu. In effect, this option is now always ON. 12. Text windows are now cleared when switching between modes. 13. Linux and FreeBSD versions (see below) offer PTT control via parallel port, as well as serial port. They offer sound support via ALSA and OSS. Bug Fixes: ---------- 1. The use of non-threadsafe code for FFTs could cause occasional and unpredictable program crashes. Fixed. 2. A bug in the JT65 decoder could (rarely) cause large errors in the reported level of strong signals. Fixed. 3. The program could be made to crash by trying to read a very short wave file. Fixed. 4. "Save None" now works as it should. Please note: ------------ When entering your grid locator on the Setup->Options page, use upper case for the first two letters and lower case for the last two. For example, for K1JT the locator is FN20qi. For Curious Users, and Especially for Programmers ------------------------------------------------- WSJT is no longer a one-person effort, and the program no longer runs only under Microsoft Windows. WSJT is now a full-fledged Open Source project, with an active working group making contributions to future development. Source code is now stored in a public repository under control of a version control system called "Subversion," or SVN. You can learn more at http://developer.berlios.de/projects/wsjt/. The first significant result of the group effort has been to create versions of WSJT that run under the Linux and FreeBSD operating systems. Porting WSJT to the Macintosh platform should be straightforward, but has not yet been done. If you are interested in testing and using WSJT on your own Linux or FreeBSD system, we'd like to hear from you. Please note that the present Linux and FreeBSD versions are intended mainly for programmers. You need to know your way around these operating systems to be able to install them. If you feel that you can usefully contribute to the future development of WSJT on any platform, we would also like to hear from you! We could use help with documentation and website maintenance, as well as actual programming. The present WSJT working group consists of: Diane Bruce, VA3DB James Courtier-Dutton Bob McGwier, N4HY Jonathan Naylor, ON/G4KLX Stewart Nelson, KK7KA Joe Taylor, K1JT Kaj Wiik, OH6EH Changes in WSJT 5.9.0: November 16, 2005 ------------------------------------------ 1. JT65 decoding has been made faster and significantly improved in other ways. Three new options appear on the Decode->JT65 menu: "Fast", "Normal", and "Exhaustive". The program is most sensitive if you choose "Exhaustive". Choosing "Normal" will make decoding slightly less sensitive, but the loss is not great, and decoding can be twice as fast. The "Fast" setting is faster still, but can be less sensitive by 2 dB or more in some cases. If you have a 1.5 GHz or faster computer, use "Exhaustive". With a slower computer you may want to experiment with the other settings. 2. In JT65 mode, double-clicking on the waterfall (SpecJT window) or on the red curve (main window) sets "Freeze DF" to the selected frequency, turns Freeze ON, sets Tol to 50 Hz, and invokes the decoder. Using this feature, you can quickly decode a transmission at several different values of DF. I find this feature to be *extremely* useful. 3. The range of DT values searched to establish synchronization has been doubled, now extending from -2 to +10 seconds. The reported values of DT are more accurate, as well. You should normally expect EME signals to have DT in the range 2 to 3 seconds, but the program will now synchronize properly even if DT is well outside this range. 4. WSJT now offers the ability to correct for errors in soundcard input and output sampling rates. Numbers displayed in the first panel of the status bar (at lower left of the main screen) give the ratio of actual sample rates for input and output to the correct value, 11025 Hz. The numbers should stabilize within about one minute after program startup. If they fall in a "safe" range between about 0.9990 and 1.0010, you have a good sound card (at least in respect to sampling frequency). You can then leave the entry fields "Rate In" and "Rate Out" on the "Setup -> Options" page at their default values, 1.0. If your soundcard gives one or both numbers well outside the safe range, you should enter the displayed errant numbers as "Rate In" and/or "Rate Out" on the Setup->Options page. This needs to be done only once; subsequent changes in the last decimal place of the displayed values are not very significant, and can be safely ignored. The result of this procedure is that your Tx signal will be "trimmed" so that your tone spacings in time and frequency are more nearly correct. In addition, your digitized Rx signals will be adjusted so that the software can properly interpret them. This trimming is an important procedure. Some recent sound cards produce sampling error factors as low as 0.9932 or as high as 1.0068. If uncorrected, such results can degrade your S/N in WSJT modes by 2 dB or more. If one of the measured sample rates differs from the corresponding value specified for "Rate In" or "Rate Out" by more than 0.1%, a red warning label will appear just below the graphical area on the main screen. 5. The graphical display of information obtained during JT65 decoding has been enhanced. As before, a red line illustrates the maximum correlation between the pseudo-random sync tone pattern and the received signal at each value of frequency offset, DF. A blue line shows the correlation at the best DF, plotted as a function of time offset, DT. If a shorthand message is detected, two new lines colored magenta and orange replace the red and blue lines. The new lines illustrate phase-resolved spectra measured in each of the two phases of the shorthand square-wave pattern. A properly detected shorthand message will show a peak in the magenta curve, followed at a specified distance by a peak in the orange curve. The correct locations of the two peaks are marked by small yellow ticks. Unlike the alternating shorthand message tones, birdies will appear with approximately equal amplitudes in the magenta and orange curves. 6. For the convenience of temporary DXpeditions, a new JT65 feature permits use of add-on DXCC prefixes that are not in the published list of supported prefixes. Both stations in a QSO must enter the required prefix (for example, PJ8 or FS) in a box on the Setup->Options page. The effect will be to temporarily add the entry to the table of supported prefixes. 7. The Setup->Options page has new entry fields labeled "Source RA" and "Source DEC". You can enter the current right ascension and declination of a radio source to be used for system calibration, or perhaps a pulsar or a deep space probe that you wish to detect. The program will display (on the Astronomical Data screen) the current Azimuth and Elevation of the specified object at your station. The source Azimuth and Elevation are also written every second to the file azel.dat, in case you have automated tracking capabilities that depend on this information. 8. For contest-style operations, the Setup->Options menu has an item labeled "F4 sets Tx6". If this item is checked, when you hit F4 to clear the To Radio box the program will turn Freeze OFF and set the Tx message number to 6. 9. To facilitate the coming release of the full source code of WSJT under the GNU General Public License, the proprietary soft-decision Reed Solomon decoder has been removed from WSJT proper and made into a separate executable module, KVASD.EXE. This change is transparent to the user, and the full benefit of the soft-decision decoder is still available. An open source hard-decision decoder is also provided; it's what you get when you select the "Fast" JT65 decoding option. 10. In WSJT 5.8.6, if the value of "Freeze DF" (as displayed in the Status Bar) differs from the sync tone frequency by more than "Tol", shorthand decoding was suppressed even if Freeze was not checked. This is a bug, and it has been fixed. 11. Earlier versions of WSJT had a bug that could cause the "Zap" function to notch out a valid sync tone. Fixed. 12. The Help screens called up by F1 and Shift-F1 have been updated. Be sure to read these screens: they contain many operational conveniences that you may not have discovered! 13. At scrolling speed 5, the time labels and "minute separator" lines were displayed erratically and the CPU load was excessive. Fixed. 14. Signal strength measurements above -20 dB were formerly compressed and significantly underestimated. This has been fixed. 15. Decodings of the average of many properly synchronized transmissions would sometimes go from "good" to "bad" after approximately 8-12 transmissions. This was a bug, and it has been fixed. 16. Several bugs in the FSK441 decoder have been fixed. Both automatic decoding and mouse-picked decoding have been improved. 17. Changing WSJT modes now sets Auto to OFF, Tol to 400, and the Tx message number to 1. 18. The generated audio for CW ID in FSK441 and JT6M modes has been moved to 440 Hz, to avoid possible confusion with the other tones used in these modes. 19. Readout of "Rx noise" on the main screen is now highlighted in red if the level is outside the range -10 to +10 dB. 20. The Monitor button is no longer highlighted in green while you are transmitting. 21. No attempt is made to decode if the Rx level is very low -- for example, if your receiver is turned off. 22. If the Grid box does not contain a valid locator, readouts of azimuth and distance are suppressed. 23. Keying of the audio tone to produce Morse code has been softened to suppress key clicks. 24. Transmitted messages recorded in the file ALL.TXT are now identified as to mode, and shorthand transmissions are noted as such. 25. A number of other very minor bugs have been fixed. Changes in WSJT 5.8.6 --------------------- 1. Audio input and output has been modified in a way that accommodates certain soundcards (e.g., SB Live!) that did not work correctly with WSJT 5.8.3. 2. New item on Setup->Options menu to select whether GenStdMsgs forces Tx message number to 1. 3. Status of all selectable items on Setup->Options menu is preserved on program restart. 4. If a CQ is transmitted in JT65 mode, the Sked box is automatically unckecked. 5. In v5.8.3, entering the same callsign and locator information in MyCall and ToRadio/Grid could cause the program to freeze. Fixed. 6. If MyCall includes an extra prefix, as in 4X/ZL1RS, the standard JT65 messages should not include a grid locator. Fixed. 7. The "ms" parameter has been removed from the Soundcard status readout at bottom left. Separate sample-rate factors are now displayed for audio input and output, but only if "Enable diagnostics" is checked on the Setup menu. 8. The SpecJT screen may now be made invisible by clicking on "X" in the upper right corner. To restore it to visible status, click on View->SpecJT on the main screen. 9. Decoded text lines in JT6M mode were sometimes too long, causing end-of-line wrap-around. Fixed. 10. Some diagnostic messages printed to console window have been removed. 11. The values of S, Sync, Clip, Zap and NB are now preserved when the program is terminated and restarted. 12. Version 5.8.3 was unable to read back its own recorded wave files. Fixed. 13. A programming error in the JT65 shorthand message decoder has been fixed. Under certain conditions, this error could cause false decodes of shorthand messages. 14. The logic of file saving commands Save Last, Save decoded, etc., has been corrected. 15. Wave files read from disk will now produce spectral plots on the waterfall display if Monitor is OFF. 16. The CW ID feature has been implemented. 17. The mapping of signal levels to pixel colors and its dependence on settings of Brightness and Contrast controls has been changed so as to improve sensitivity to very weak signals. 18. In v5.8.3, changing Dsec would create erroneous results for the displayed soundcard sample rate factor. Fixed. 19. Running in JT65 mode with Dsec>0 caused transmission errors (including a gap in transmitted tones at t = 38-41 s), and the resulting transmission was unreadable. Fixed. 20. Undesired resizing of main screen could occur when a long FSK441 message was transmitted. Fixed. 21. The "yellow line" displayed in the graphical area in JT6M mode was computed incorrectly in version 5.8.3. Fixed. 22. When running at speeds 1-5, the waterfall spectrum may optionally be "flattened" to remove rolloff at edges. To enable this feature, check "Flatten spectra" on the SpecJT Options menu. COMMENTS ON SOUND CARDS ----------------------- In general, "high end" sound cards offer no advantages when used with WSJT. Motherboard AC-97 compliant sound systems are cheap and work well. If you do need to buy a sound card for use with WSJT, my advice is to get a simple one. You do NOT need 8-channel surround-sound, wavetable synthesis, special effects, etc. Those features are for games and listening to music, and they will be wasted on WSJT. Likewise, you do not need 24-bit A/D and D/A conversions. Specifications having to do with signal/noise ratio are quite irrelevant to use with WSJT, as you should never be operating in a regime where A/D quantizing noise (or any other noise generated in the sound card) contributes significantly to the system S/N. If you have a choice, get a card that offers a *native* sampling rate of 44100 or 11025 Hz, or both. (Unfortunately, it is often very difficult to tell from the manufacturer's literature whether this capability is present or not.) If native sampling at 11025 Hz is available -- or if the manufacturer has at least provided a well-designed resampling capability -- the soundcard sample-rate factors (displayed by WSJT in the bottom left corner, if "Setup->Enable diagnostics" is checked) should both be very close to 1.0000. Changes in WSJT 5.8.3 --------------------- 1. The Dsec parameter was not working properly in v5.8.1. Fixed. 2. CPU load at high waterfall speeds has been substantially reduced. 3. Saving cumulative file of decoded text is no longer optional. The file name has been changed to ALL.TXT, to reflect use of this file for transmitted as well as decoded text. 4. Logic for green bar illustrating region searched for sync tones has been corrected. 5. Bug producing index error in "plot_yellow" is fixed. 6. Bug causing crash in CW mode if TRPeriod > 60 s is fixed. 7. Tabular listing of Audio devices has been clarified. 8. Name at top of waterfall screen has been changed to "SpecJT" so that its icon can be distinguished from that of main screen. 9. VOX control of T/R sequencing is now permitted by setting the COM port to 0. 10. Exit from program with the "To Radio" box empty caused error message and substitution of default parameters on restart. Fixed. 11. Default FSK441 message #5 for EU has been changed to "73 MyCall" (which I am told conforms with standard EU practice). 12. Lower case letters are now acceptable in entries on Setup->Options screen, and will be translated appropriately to upper case in transmitted messages. 13. The file AZEL.DAT has been moved to the WSJT6 installation directory. 14. The "Sh Msg" box was always checked when entering FSK441 mode. It now remembers its state if you had unchecked it. 15. Keyboard shortcuts have been implemented for most on-screen controls. Use F1 to see a full listing. 16. "Gen Std Msgs" now sets the Tx message to #1 in all WSJT modes. 17. Self-echo doppler value has been replaced by "Dgrd" in the astronomical data displayed on the main screen. 18. The audio stream has been trimmed by 0.5 s at the start of FSK441 and JT6M Rx sequences, to prevent possibly copying one's own Tx signal. (Is this enough?) 19. Two header parameters in wave files recorded by WSJT have been corrected so that the files can be read correctly by Windows Sound Recorder. 20. Four-digit grid locators no longer produce incorrect azimuth headings. 21. Logic error in the waterfall's horizontal scrolling mode fixed. 23. The active Tx message box is now highlighted during a transmission, as in WSJT 4.x. 24. Green ticks marking range of JT65 tone frequencies and red ticks marking shorthand tones may optionally be displayed only if Freeze is checked. (Select on waterfall screen's Options menu.) 25. "Tool-tip" readout of full entry in CALL3.TXT is now provided after Lookup, if mouse pointer hovers over the ToRadio box. 26. Parameter RDsec was removed from the screen, as it is not implemented. 27. Some additional diagnostic information is now displayed. A parameter "ms" following the "Soundcard x.xxxx" readout is a measure of the maximum time between successive servicing of the audio callback routine. The nominal value is about 186 ms, but somewhat larger values are normal owing to granularity of the Windows system clock. Values larger than 330 ms cause a warning message to appear in the console window. Large values of this parameter may be related to audio input problems (see below). 28. The latest version of DL8EBW's CALL3.TXT database is included with the distribution. It will be installed only if there is no file named CALL3.TXT already in your WSJT6 installation directory. KNOWN PROBLEMS -------------- 1. Some fraction of WSJT 5.8.1 users -- perhaps 5-10%, it is hard for me to judge -- have had problems with erratic audio input. I am having difficulty tracing the problem because I have not been able to reproduce it on any computer to which I have access. Typical symptoms are that after startup WSJT 5.8.1 runs normally in Monitor mode for a minute or so, but then the reported audio level jumps to a much higher value and perhaps fluctuates wildly. Two users have switched todifferent sound cards and made the problem go away. Several others have discovered that if they first start WSJT4 and leave it running (in Monitor mode, I believe), and then start WSJT 5.8.1, the new program behaves properly. One user corrected the problem by turning off an "AGC" feature on his sound card. Apparently most of the newer SoundBlaster cards have this AGC feature, and it is turned ON by default. I am told that it can be turned OFF by using the supplied utility CTMIX32.EXE. I do not yet understand the cause of the erratic audio problem. It is possible that it has been fixed in v5.8.3, as several minor changes have been made to the audio input routines; but I think this is unlikely. If you had this problem at your station and have now solved it, please let me know what you did! If you still have problems when running version 5.8.3, let me know about that as well. 2. I do not yet have a good definition of the "minimum computer" required to run WSJT6. Several people have told me that they are using the program successfully on 300-500 MHz machines. Those with computers slower than about 600 MHz will do best to avoid the higher waterfall speeds and not run many other programs while using WSJT. Beta Release 5.8.1 ------------------ Beta release 5.8.1 is an entirely new program, dsesigned to preserve the features and the "look and feel" of version 4.9.8, but also to add many new features and do so in a way that will make for easier for program maintenance and future development. After a period of beta testing, the program will become known as WSJT 6.0. I will refer to it here as WSJT6. Many features of WSJT6 will be familiar to present users of WSJT4.x. However, the user interface and other real-time portions of the program have been entirely re-written, so you may find a few things that look different or work differently than before. WSJT6 is a multi-threaded program. This architecture permits much better timing control and much better sharing of the CPU among the program's many tasks. A real-time waterfall is provided, optimized for each of the WSJT modes. You can measure and set the Rx gain in real time. You can decode FSK441 pings immediately after hearing them. The decoders for JT65 and JT6M are essentially the same as those in recent versions of the program. (I have many plans for enhancements to the decoders, but these must wait for future updates.) The FSK441 decoder has intentionally reverted back to approximately version 3.8.1, because it has been shown that recent versions did not perform quite as well. WSJT 5.8 is a stable release. Extensive tests by a small group of early beta testers have already shown that it works well. However, it contains many thousands of lines of new code, and most likely that code has some bugs. Nevertheless, I think you will find many operational advantages to using it. Over the past 2.5 months, all of my own MS and EME QSOs have been made with the new version. If you decide to participate in the beta testing period, please accept the responsibility of reporting any bugs that you find, as well as telling me of features you would still like to see. I would appreciate hearing about new features that you like, as well. PRELIMINARY INSTRUCTIONS AND COMMENTS ------------------------------------- 1. I suggest installing WSJT6 to a new directory such as C:\Program Files\WSJT6. After installation you will probably want to copy your version of the callsign database, CALL3.TXT, into the new WSJT6 directory, replacing the one that is supplied. 2. When you start the program you should get three windows on your screen. One has a black background and I will call it the "console window"; it is mainly used for debugging messages. You can minimize it and generally ignore it. You should, however, look there for messages if the program crashes (see also items 9 and 11, below). The other two windows are a Spectran-like waterfall and the more-or-less familiar WSJT window. It is no longer necessary or desirable to run Spectran simultaneously with WSJT. 3. FSK441, JT65, and JT6M are all present and functional. I have made many QSOs with FSK441 and JT65, so I know they are working well. JT6M has been tested somewhat less, but I have seen no problems as yet. EME Echo mode and the CWID feature are not yet implemented. 4. To start the real-time spectral display, click Monitor. Normally you can leave Monitor on all the time. 5. There are two ways to set the Rx Audio gain. You can call up the Windows mixer as before, using the "Rx Volume Control" item on the Options menu. There is also a digital gain control near the bottom right of the waterfall screen. You should aim for around 0 dB, as before -- but with 16-bit audio sampling it is no longer very critical. Use the "S-meter" at the lower right of the waterfall display, or the familiar box labeled "Rx noise" at bottom center of the main screen. 6. You should be able to make FSK441, JT65, and JT6M QSOs more or less as usual. In FSK441 and JT6M you will want to run the spectral display at speed "H1" or "H2" (speed is selected at the top of the waterfall screen). (The "H" means horizontal scrolling.) Scrolling speeds "5" and "H2" use a lot of CPU time, so you may want to avoid them unless your computer is pretty fast. I generally use speed "1" or "2" for JT65 and "H1" for FSK441 and JT6M. 7. When running FSK441 in the horizontal scrolling mode, the spectral display shows current data in the top half and the previous Rx sequence in the bottom half. The most recently decoded sequence is shown also on the main screen, as in version 4.x. 8. You can decode FSK441 pings right away by clicking on any of the 2-dimensional spectral displays, or the accompanying green lines. You can click on the top half, the bottom half, or in the main screen's graphical area. 9. If you have more than one sound card, you can select the desired one. Look at the startup messages in the console window. You should see a list of the available Audio devices and information about which one has been selected. If you wish to change the selection, enter the desired device numbers on the Setup->Options screen, then terminate and restart the program. 10. If your display has resolution 1024 x 768 or less, you may prefer to resize the waterfall window so that only its top portion remains visible. The two main WSJT windows may then be kept visible without overlapping. 11. Some program crashes can kill the console window so that you can't read the error messages. If this happens, and if the crash is repeatable, open a Windows Command-Prompt window; CD to your WSJT6 installation directory, and start the program from there by typing "WSJT6". With this startup procedure, any subsequent post-mortems will remain visible. Please report any such messages to me! 12. You may find decoding to be slightly slower than with v4.9.x. I have not yet spent any time optimizing the new code for speed; it will get faster when I turn attention to that task. If you have an older computer you may wish to check the menu item "Setup->Accelerated decoding", which will suspend updating the waterfall during the decoding process. 13. Be sure to look at the screens called up by function keys F1 and Shift-F1. These screens are also available from the Help menu. They list some useful keyboard and mouse commands that you might otherwise overlook. 14. Be sure to explore all the menus and on-screen controls, and try out the commands listed on the help screens. Until I can find time to write a new manual, this is the best way to learn about some of the new features. 15. In JT65 mode, a horizontal green line on the frequency scale shows the range of frequencies that will be searched for a sync tone. You can set the "Freeze DF" value by clicking on the main screen's red curve (as in WSJT 4.x) or by clicking on the waterfall with the shift key held down. If "Freeze" is checked, vertical green ticks will mark the selected sync-tone frequency and the corresponding frequency of the highest data tone. Red tick marks denote the frequencies of the RO, RRR, and 73 shorthand messages. 16. WSJT6 can read and process WAV files produced by earlier versions. The converse is not true, however, because earlier versions of WSJT are not equipped to read the 16-bit data files produced by WSJT6. 17. When you click "Log QSO," a line with date, time, HisCall, HisGrid, frequency, and mode is added to the file WSJT.LOG in the installation directory. 18. Every second, a short file named "c:\azel.dat" is updated with time, moon and sun coordinates, frequency, doppler, and doppler rate information. This file could be used by other software to make your antenna track or your radio follow doppler changes. 19. In the lower left corner of the main screen you will see a message of the form "Soundcard: x.xxxx", where x.xxxx is a number close to 1.0000. This number is the ratio of the soundcard's measured sampling frequency to the nominal value, 11025 Hz. The displayed value should stabilize after the program has been running for a minute or so. If you see values less than about 0.9990 or greater than 1.0010, please let me know about it and tell me what kind of computer and sound card you are using. 20. Callsigns for Swaziland (prefix 3DA0) can now be used in standard JT65 messages, and they will provide the full "deep search" sensitivity. 21. The box labeled "NB" enables a software noise blanker. If your receiver already has a good noise blanker, this may be of little use; if it does not, you may find this one better than nothing. It can be helpful when short, impulsive noise spikes are present. 22. The "QRN" parameter of older WSJT versions has been combined with the "Clip" parameter. In FSK441 mode, Clip=0 corresponds to the old QRN=5. If you want more FSK441 immunity to summertime QRN, increase Clip above 0 just as you would have increased QRN above 5. 23. The "B" and "C" submodes of FSK441 have not been implemented. As far as I could tell, they were little used. Let me call your attention to the online WSJT Forums hosted by DK5YA at www.vhfdx.de/cgi-bin/yabb/YaBB.pl. If you provide information and post questions about WSJT 5.8 there, it will help others as well as yourself -- and may help to reduce the load on my email inbox. I do, of course, want to hear from you directly if you have found a problem with the new program version or suggestions for its improvement. Changes in Version 4.9.8 ------------------------ Version 4.9.8 is a minor maintenance release. The changes are: 1. Bug in JT65 decoder could (rarely) cause a correct decoding by the Reed-Solomon decoder to be "overruled" by an incorrect decoding from the Deep Search decoder. Fixed. 2. Bug in JT65 Reed-Solomon decoder could cause program to crash under certain rare conditions. Fixed. 3. The standard "CQ" message generated for a callsign having an extra prefix or suffix should not include a grid locator. Fixed. 4. Automatically generated CW messages for stations with callsigns longer than 4 characters were improperly truncated. Fixed. 5. Bug in JT65 decoder could occasionally cause one or two extra letters to be appended to a correctly decoded callsign. Fixed. 6. Grid locator entered in "Report" box in FSK441 mode (as used by some in North American meteor scatter contest) would cause a crash on program restart. Fixed. Changes in Version 4.9.7 ------------------------ 1. The only change in version 4.9.7 is to add KC4 to the list of supported DXCC prefixes. Changes in Version 4.9.6 ------------------------ 1. WSJT 4.9.5 fails to decode some files that have relatively high S/N and good Sync level. This is a bug, and has been fixed. For this reason alone, you should definitely upgrade to Version 4.9.6. 2. New optional message formats are provided for conveying and responding to signal reports. It has been permissible for some time to send, for example, VK7MO K1JT -24 K1JT VK7MO R-27 (The number after the minus sign must have two digits and must be in the range -01 to -30.) I plan to implement a quick way of copying the measured strength of a decoded transmission into TX message #2, when desired. This is not yet done in v4.9.6, however. You must edit the TX messages by hand if you use these formats. Enhancements in version 4.9.6 now allow you to send messages like the ones listed below. Both stations will need to be running v4.9.6 in order for these to work: VK7MO K1JT RO VK7MO K1JT RRR VK7MO K1JT 73 3. Decoding by the deep search algorithm has been extended so as to include messages of the types discussed in item 2. Changes in Version 4.9.5 ------------------------ 1. Full support for long callsigns like ZA/PA2CHR and G4ABC/P is now provided. When using such a callsign prefix or suffix, do not include a grid locator in your transmitted message. Note that 4.9.5 and 4.9.2 do not handle prefixes in the same way; they are not compatible. To get the benefit of the expanded capability, both stations (TX and RX) must use 4.9.5. The correct message format is "K1JT V5/ZS5Y" or "V5/ZS5Y K1JT". The extended callsign must be present in CALL3.TXT or in "To Radio" for the deep-search decoder to be effective. 2. If you double-click on a callsign in the decoded text window, and if the word preceding the callsign is "CQ", then TX message #1 will be selected after the messages are updated. Otherwise, TX message #2 will be selected. 3. So that you will be aware of what is happening, the background color in the TX message box turns red whenever a message you have entered is "non-standard" and will be sent as 13 characters of plain text. 4. Items related to decoding have been removed from the Setup | Options screen and replaced by a new menu labeled Decoding. Here you may now select "No shorthands" for FSK441 and several options for JT65 decoding. 5. In case you are upgrading directly from v4.9.0 or earlier to v4.9.5, a callsign database file has been included as CALL3A.TXT. If you do not already have a file CALL3.TXT, you should rename the supplied file to CALL3.TXT. Otherwise, you will probably want to ignore the supplied file, since you will have made additions to your own copy. 6. The frequency of program crashes (for example, after a long period of monitoring) is much reduced, possibly to zero. Please, if you encounter a received wave file that reproducibly causes WSJT to crash, send it to me. Changes in Version 4.9.2 ------------------------ 1. In CW mode you can now set the desired T/R period by using the text box provided. This feature did not work properly in v4.9.1. 2. Under some conditions using the "Add" button to edit information in the file CALL3.TXT would cause a program crash with the message "Run-time Error #53". Fixed. 3. Using the double-mouse-click on a callsign in the decoded text window will now set the active Tx Message to Tx2. I believe this will be most commonly what is desired, and will be an added convenience for random JT65 operation. 4. The "Sked" box remained visible on the EME Echo screen, covering part of the RIT box. Fixed. 5. The program generates two numbers to characterize its level of confidence in decoded messages. In version 4.9.1, these numbers appeared at the end of each decoded text line. They are not displayed in version 4.9.2, but in the next version I will probably display them if you have checked the "Aggressive decoding" box. The first number is 0 or 1 according to whether the soft-decision Reed Solomon decoder has failed or succeeded. The second number represents a confidence level on a 0-10 scale for messages decoded using the "deep search" algorithm. Anything under 3 is questionable; messages rated 6 and above are unlikely to be wrong, unless you are processing "garbage" data containing strong birdies, QRN, etc. In that case, you are on your own. 6. A bug was introduced when implementing the "Aggressive decoding" check box. This bug caused a stray "OOO" flag to be sometimes displayed even when no signal was present and synchronization had not been achieved. Fixed. Changes in Version 4.9.1 ------------------------ 1. A programming error in version 4.9.0 prevented the "deep search" portion of the JT65 decoder from detecting some messages that include the "OOO" signal report. The bug has been fixed, and consequently the extra 4 dB of sensitivity will become available for those messages. 2. The callsign database, a file named CALL2.TXT in version 4.9.0, has been converted to a comma-delimited format and is now named CALL3.TXT. As has been true in the past, you should maintain your own copy of this file according to your own needs. New calls may be added to the file using the "Add" button of WSJT, and you can edit the file directly with the Windows NotePad program. I apologize for the fact that if you have already edited CALL2.TXT extensively, you will need to do so again. The good news is that the programs WSJT, MoonSked (by GM4JJJ) and Tracker (by W7GJ) will now use the same database file, CALL3.TXT. 3. Two new JT65 check boxes have been made available to the user: one labeled "Sked", located on the main screen, and one labeled "Aggressive decoding" on the Setup | Options screen. Check "Sked" to signify that you are trying to work a known station; the deep search decoder will then look only for your own call and the one displayed in the "To Radio" box. Check "Aggressive search" if you want to see all messages found by the deep-search decoder, even if the confidence level is moderately low. Leave this box unchecked if you prefer to see only decoded messages that have been assigned a relatively high confidence. 4. The duration of T/R sequences in CW mode defaults to 60 s if the Band is 50 MHz, 150 s if 432 MHz, and 120 s otherwise. However, an on-screen box now allows you to override the defaults and set any desired T/R period (in seconds). Changes in Version 4.9.0 ------------------------ On the outside WSJT version 4.9.0 looks nearly the same as its recent predecessors. A "CW" entry now appears on the Mode menu. This is presently a "transmit only" mode: it sends standard EME-style messages at 15 WPM, by keying an 800 Hz audio tone, and it takes care of the timing and T/R switching for you. Receiving is left up to you, the operator. For me, this combination makes CW EME QSOs relaxing and enjoyable. Presently the program uses 2.5 minute sequences if you are on 432 MHz, 2 minutes on 144 MHz, and 1 minute on 50 MHz. (If you want to run with 1-minute sequences on 144, set the band indicator to 50 MHz.) Double-clicking on a callsign in either one of the decoded text windows will cause that callsign to be copied into the "To Radio" box. The call will then be looked up in the database and will be inserted appropriately into the transmit message boxes Tx1 and Tx2. This feature is designed to facilitate random JT65 operation by making it easy to call a station you have just copied calling CQ, or responding to your CQ. The most significant program enhancements are those made to the JT65 decoder. It has been transformed into a multi-layered procedure that takes better advantage of the structured nature of JT65 messages and the substantial computing capability that most WSJT users have in their hamshacks. In version 4.9.0, if the initial JT65 decoding effort fails then deeper searches are attempted using an entirely different approach. The result is a net gain of about 4 dB over a wide range of circumstances. My JT65 digital simulator, which has accurately predicted the performance of previous versions of the software, correctly decodes about 50% of simulated Rx files with the v4.7.0 decoder at a signal level of -24 dB. With the v4.9.0 decoder, it correctly decodes more than half of the simulated data files at -28 dB. This very substantial improvement means that JT65's message-averaging facility will be needed much less frequently than with earlier versions of WSJT. Most of the time, if the transmission synchronizes properly, it will also decode properly. You will get better performance from the new JT65 decoder if you understand a few things about how it works. The following is a very brief description; more complete technical details will be forthcoming when I find time to write it all down. JT65 is capable of transmitting and receiving 2^72 (about 5 x 10^21) distinct user messages. Instead of sending the minimum number of 72 information bits needed to to convey any one of those distinct messages, the program actually sends 63 six-bit "symbols" for a total of 378 bits in each transmission. The 302 extra bits comprise the powerful forward error correction (FEC) capability of the JT65 mode, allowing the system to function reliably with signals far below the audible threshold. One of the first tasks of the JT65 decoder is to measure the signal level at each of the 64 data-tone frequencies during each of the 63 data intervals in a transmission. The program must then decide which one of the possible 2^72 messages was most likely the one sent. This procedure is necessarily probabilistic in nature. The best decoder will go as far down into the noise as possible, but it must also know when to give up so that it produces few false decodes. The total of 2^72 distinct messages is far too many to permit each one to be tested individually against the received signal. However, an important characteristic of the Reed-Solomon FEC code used in JT65 is that well-defined mathematical algorithms can be used to direct the decoder toward the most likely candidate messages, based on the available signal information. A mathematical inversion of the code is made possible by the organization of the redundant information contained in the 306 extra bits. The new JT65 decoder goes far beyond the capabilities of normal Reed-Solomon decoders. If the standard decoding procedure fails to produce a high-confidence solution, the program proceeds to search explicitly for each one of a number of messages that it considers likely or plausible on other grounds. Nearly 2^28 (over 250 million) different callsigns can be accommodated in each of the two callsign fields of a JT65 message. Once again, this is far too many to permit an exhaustive search for them all. Consequently, the "deep search decoder" takes the callsigns listed in the file CALL2.TXT (located in the user's WSJT directory) as being the most likely alternatives in the message's second field. A correlation algorithm is then applied to find out if one of these calls and its associated grid locator are present, combined with either "CQ" or the receiving station's callsign in the first field. High-confidence matching of this kind can be accomplished down to about -28 dB on the WSJT scale, in a single transmission, with a very low error rate. The bottom line is that for any arbitrary callsign the new JT65 decoder performs at least as well as the one in WSJT version 4.7.0. Message averaging works just as it did before, and if you are listening in to a "third party" QSO between two other stations, the sensitivity will be the same as in version 4.7.0. However, if a station that is listed in the file CALL2.TXT is calling CQ or is calling you, your sensitivity will be about 4 dB better on average. Please note that the decoder is given no information whatsoever about what station you may be trying to work. Its heart is "as pure as the driven snow," even if you are working a sked. However, the decoder does presume that the callsign of the transmitting station is more likely to be one listed in CALL2.TXT than some other callsign constructed at random. The program always attempts to decode a purely arbitrary message first. Failing that, it will look more deeply in the noise for the presence of a message that includes the callsign of a station listed in the database file. It is no accident that the algorithm just described bears close resemblance to the thought processes (conscious and otherwise) that we use to copy very weak CW by ear. Familiar combinations like CQ and one's own callsign are always easier to dig out of the noise than random combinations of characters. Callsigns that we have seen or heard before are more easily recognized than arbitrary calls generated at random. The new JT65 decoder behaves similarly, except that it is kept fully in the dark about who you are trying to work. All decoders make mistakes, and this one is no exception. Just like a human copying CW, the JT65 decoder has a "grey area" in which it finds a solution but may have only moderate confidence in it. In such cases the decoder appends a "?" to the decoded text, and the operator must make the final decision as to whether the decoding is correct. Be aware that because of the mathematical message structure, incorrect decodings will not just differ from the correct one in a few characters; more likely, they will exhibit a whole incorrect callsign. As you gain experience in recognizing the graphical and numerical indications of proper message synchronization and the effects of "birdies" and other interference, you will become adept at making these decisions when necessary. With added on-the-air experience I will probably be able top reduce the decoder's error rate, as well. A final note: the file CALL2.TXT replaces the file CALLSIGN.TXT used by earlier versions of WSJT. The format has been changed to permit extended callsigns such as those sometimes used by DXpeditions, for example ZA/PA2CHR. The name of the database file has been changed so as not to "break" an earlier version of WSJT that you may wish to keep available. Full support for extended callsigns (i.e., calls with an extra prefix or suffix) is planned for a future version of WSJT. Changes in Version 4.7.0 ------------------------ 1. New feature: WSJT can now be used simultaneously with Spectran on the same computer. You can start Spectran by selecting "Use Spectran for input" on the Setup menu. This feature also allows the user to select the sound card to be used for input. 2. Bug fix: in some circumstances, switching from a JT65 long-format message to a shorthand message did not work properly. Fixed. 3. Bug fix: for operators in the southern hemisphere and longitudes more than 90 degrees east or west, the wrong "Hot spot" was sometimes identified as the best direction for sporadic meteors. Fixed. Changes in Version 4.6.1 ------------------------ 1. Bug fix: I mistakenly shifted the RX data by 2 seconds, rather than the intended 1 s, when changing the DT range. Therefore in v4.6.0 the actual DT range is not -1 to +5 s as stated, but rather 0 to +6 s; moreover, the displayed values of DT are too small by 1.0 s. This has been fixed. 2. New feature: thanks to Akira, JM1SZY, I learned that occasionally a file (or an average of several files) will decode better with the AFC feature turned off. Consequently I have added a checkbox that must be ticked to activate AFC in the JT65 modes. If you can trust the frequency stability of the signal you are receiving, and especially if you are trying to receive a signal at -27 dB or weaker, leaving this box unchecked may yield a slight improvement in decoding. In most cases, especially at 144 MHz and above, I recommend leaving the AFC turned ON. 3. Thanks to Chris, GW4DGU, for pointing out that the Gx series of prefixes is no longer legal for reciprocal license operating in the countries of the UK. The valid prefix series for such operation is now the M-series, i.e., M MD MI MJ MM MU MW. I have changed the prefix table accordingly. Version 4.6 ----------- This is the first full release of WSJT since version 3.0. New users can install Version 4.6 directly, without upgrading from a previous installation. Of course, you can also upgrade from an earlier version in the usual way. All download files can be found on the WSJT home page, http://pulsar.princeton.edu/~joe/K1JT. The new release includes an entirely new "WSJT 4.6 User's Guide." This document is about one third the length of the former "User's Guide and Reference Manual," but contains nearly everything you need to know to use the program. A copy of the new Guide is included in the version 4.6 distribution files. You can also download it directly from http://pulsar.princeton.edu/~joe/K1JT/WSJT_User_460.pdf. Even if you are an experienced WSJT user, you should definitely print and read this document. New features in WSJT Version 4.6 include the following: 1. Improved automatic frequency control in JT65 modes. If you have lost JT65 QSOs because of unstable oscillators, this is for you. 2. The acceptable range for DT in JT65 mode is now -1 to +5 s. This range is a better fit for EME communication than the former -2 to +4 s. It will allow for somewhat greater clock errors before inter-station synchronization fails on an EME path. Note to experienced users: this means that the plotting scale for the "blue curve" now runs from -1 to +5 s. EME signals should normally produce a blue peak near the center of the plot area. 3. When the blue window displaying moon coordinates has been toggled to display coordinates for the DX station as well as the home station, it now displays MaxNR in place of SD. MaxNR is the maximum path non-reciprocity in dB. This effect arises from the combination of spatial polarization shift plus Faraday rotation; it is what causes "one way propagation" between stations that use fixed linear polarization. 4. A facility for generating the file ID.WAV for station identification is now built into WSJT. 5. The "Save Decoded" menu item now saves files with decoded shorthand messages as well as normal messages. 6. JT65 has a new shorthand message "ATT" (for "Attention!"). It is intended as an aid to help two stations find each other by determining the correct DF. 7. Visual aids for evaluating JT65 shorthand messages "by eye" are provided if you click on the sync-tone frequency in the Big Spectrum display. 8. For DXpeditions: a country prefix preceded by "/" may be substituted for the grid locator in a type 1 JT65 message. 9. Alternatively, a signal report of the form "-NN" or "R-NN" may be substituted for the grid locator in a type 1 JT65 message. For example, -24 might indicate that signals were being received at -24 dB. The minus sign is required, and NN must lie between 01 and 30. 10. The receiver noise level reported by Measure mode (the level of the "green line") has been increased by 2 dB to be consistent with levels reported by the other operating modes. Changes in Version 4.5.1 ------------------------ Bug fixes: 1. JT6M did not transmit properly in version 4.5.0 because the program failed to switch its wavefile generator into JT6M mode. Fixed. 2. WSJT consumed a large fraction of CPU time in JT65 mode, even when the program was supposedly doing nothing. Fixed. 3. Monitoring for long periods in JT65 mode would occasionally produce a Fortran "output conversion error". Fixed. 4. Clicking the "Add" button with nothing in the Grid box would cause a program crash. Fixed. Enhancements: 1. In the FSK441 modes, messages longer than 3 nonblank characters and starting with R26, R27, RRR, or 73 are no longer transmitted as shorthand messages. 2. Onscreen labels now indicate active status of the "Save Decoded", "Save All", and "Save text in File DECODED.CUM" features. 3. Small improvements have been made in the decoding of shorthand messages in modes FSK441B and C. 4. Alphabetic characters in message templates (on the Setup | Options screen) are now case-insensitive. Principal New Features in WSJT Version 4.5 ------------------------------------------ 1. The JT65 modes employ an entirely new decoding algorithm that uses "soft decisions" to recover the transmitted message. The message format and Reed-Solomon encoding are unchanged, so the JT65A, B, and C modes are fully compatible with earlier versions. However, the new decoder is more sensitive by slightly more than 1 dB. It is based on software licensed from CodeVector Technologies, LLC, and protected under United States Patent 6,634,007. As usual, however, I am making WSJT freely available for amateur radio use. Changes to the JT65 modes are "under the hood," and except for the improved performance you will find them mostly invisible. The new decoder can be somewhat slower than the one in v4.3.4, depending on details of the received data. 2. Like JT65, FSK441 now provides three submodes. FSK441A is identical to the "classical" FSK441. The two new modes, FSK441B and FSK441C, use the same 4-tone frequency shift keying at 441 baud. However, they use forward error correction (FEC) on a character-by-character basis, to improve message reliability. They also provide shorthand messages which are more robust than the single-tone messages of traditional FSK441. Cross-mode communication will not work: a transmission in FSK441B must be received in FSK441B, etc. FEC information in FSK441B and FSK441C is conveyed by sending additional channel symbols (tones) for each character, using special codes designed to optimize the error rate and sensitivity with very short pings. The additional symbols are redundant when the S/N is high, but they allow recovery from transmission errors when the S/N is low. FSK441A, which provides no redundancy, transmits 3 symbols per character. Modes B and C use 4 and 7 symbols per character, respectively. The raw throughput of user information is summarized in the following table: FSK441A FSK441B FSK441C ---------------------------------------------------------------- Sequential tones per character 3 4 7 User data rate, characters/second 147 110 63 Time for a 12-character message, ms 82 109 190 The shorthand messages in FSK441B and FSK441C use alternating tones at two specific frequencies, as follows: Shorthand Low tone High tone message (Hz) (Hz) ------------------------------ R26 861 1206 R27 861 1550 RRR 861 1895 73 861 2239 Tests with my digital simulator show that shorthand messages in FSK441B and FSK441C are several dB more sensitive than the ST messages of FSK441A. At the same time they give a far lower rate of false positives. With multi-tone messages the sensitivities of the three submodes are nearly the same, but they have different trade-offs. Mode A is 25 percent faster than mode B, but mode B is more accurate and will produce much less on-screen "gibberish". Mode C is about half the speed of mode A but has still stronger FEC code. Parameters of the B and C modes were selected in the expectation that FSK441B might become the mode of choice for meteor scatter work on 144 MHz (and possibly also 222 MHz), while FSK441C will likely prove best at 50 MHz where the pings are longer. These suppositions need to be tested, of course. Experienced WSJT users should have no difficulty making the new modes work. Just select the desired mode from the Mode menu (or use the appropriate hot-key combination), and away you go. Other Changes in Version 4.5.0 ------------------------------ 1. Bug fix: In JT65 mode, if you sent 73s and then started a QSO with a new station, the program would sometimes continue sending the 73 message even though TX message #1 had been checked. This has been fixed. 2. Performance enhancement: Shorthand messages in JT65 were sometimes suppressed because of an apparent low-value Sync detection that produced no decoded message. This has been fixed; there is no longer any need to set your Sync threshold to a higher value when you are expecting to receive a shorthand message. 3. The JT65 "Filter" function has been removed. It was confusing to some, and anyway was generally deemed of little value. The new decoder provides a much better solution. 4. The "suggested report" has been deleted from FSK441 decoded text lines. It is replaced by S/N, the measured signal-to-noise ratio in dB. Note that the familiar "dB" measurement of (S+N)/N is still available, as well. 5. Finer adjustment intervals are provided for "S", the FSK441 ping detection limit. As in earlier version, these numbers refer to (S+N)/N. In contrast, the "Single Tone" or "Shorthand" detection limits refer to S/N, a more useful parameter at very low signal levels. (See below for more details on signal to noise ratios, if interested.) 6. A button labeled "Add" just below the grid locator box will cause the displayed callsign and grid to be entered into the CALLSIGN.TXT database. 7. A date and time stamp is now added to the DECODED.CUM file at program startup or when you first enable writing to this file. Request to Users ---------------- As usual, I will appreciate hearing from users about the new features in WSJT. Let me know, of course, if you find bugs or other problems in the program. In particular, let me know of your experiences with FSK441B and FSK441C. Remember, my guess is that FSK441B should work very well on 2 meters, while FSK441C may work best on 6 meters. After you have gained some experience with FSK441C on 6 meters, I would be interested to know whether you think JT6M should be retired. In North America, at least, I do not think it is being used very much. Why use both S/N and (S+N)/N ? ------------------------------ WSJT has traditionally measured the level of FSK441 signals as the ratio (signal plus noise)/(noise) = (S+N/N), in dB. This quantity is approximately what S-meters try to measure; it has the advantage that it goes to zero when there is no signal, while at high signal levels it increases as you would expect, in proportion to signal strength. At low signal levels, however, the numbers for (S+N)/N in dB behave in a way that may be counter-intuitive. When WSJT reports that a meteor ping had strength 3 dB, it means that signal plus noise was 3 dB higher than noise alone. That means that signal and noise were equal in power, so the corresponding value of S/N must be 0 dB. If the same signal had been transmitted with half the power, it would have had S/N = -3 dB, and (S+N)/N would have been 10*log(0.5+1.0) = 1.76 dB. Yes, cutting the TX power in half would only reduce the ping level from 3.0 dB to 1.76 dB! That's why, for many purposes, S/N is a more useful number -- and why I am now listing both numbers in FSK441 decoded text lines. The table below will allow you to convert easily between S/N and (S+N)/N, both as numerical ratios and as dB. S/N S/N (S+N)/N (S+N)/N (dB) (dB) ---------------------------------------- 10.0 10.000 11.000 10.41 9.0 7.943 8.943 9.51 8.0 6.310 7.310 8.64 7.0 5.012 6.012 7.79 6.0 3.981 4.981 6.97 5.0 3.162 4.162 6.19 4.0 2.512 3.512 5.46 3.0 1.995 2.995 4.76 2.0 1.585 2.585 4.12 1.0 1.259 2.259 3.54 0.0 1.000 2.000 3.01 -1.0 0.794 1.794 2.54 -2.0 0.631 1.631 2.12 -3.0 0.501 1.501 1.76 -4.0 0.398 1.398 1.46 -5.0 0.316 1.316 1.19 -6.0 0.251 1.251 0.97 -7.0 0.200 1.200 0.79 -8.0 0.158 1.158 0.64 -9.0 0.126 1.126 0.51 -10.0 0.100 1.100 0.41 Beta Release 4.3.4 ------------------ Beta Release 4.3.4 of WSJT is now available for free download at the WSJT home page, http://pulsar.princeton.edu/~joe/K1JT. The principal change from version 4.2.1 is to offer three JT65 submodes. The submodes differ in tone spacing and total bandwidth as follows: Mode Spacing Total BW ------------------------- JT65A 2.7 Hz 177.6 Hz JT65B 5.4 355.3 JT65C 10.8 710.6 Note that JT65A is identical to the original JT65. If you want to work people who have not yet upgraded to v4.3.4, be sure to select mode JT65A. Otherwise, be sure to use the same mode that your QSO partner is using. Cross-mode contacts will not work. JT65B should be nearly as sensitive as JT65A, and it will be twice as forgiving of frequency instabilities. On balance, with existing "stock" radios, JT65B will probably be better than JT65A. JT65C is less sensitive by a small amount, perhaps 1 dB, but will be even more lenient on stability issues. By all means experiment with the different submodes, and be sure to let me know your conclusions about them! I am presently inclined to recommend that JT65B should become the "standard" JT65 mode. If this tentative conclusion holds up, future versions of the program may no longer support the A and C modes. Other changes from version 4.2.1 include the following: 1. Further improvements have been made to the JT65 decoding algorithm. These improvements apply to all three submodes. Some wave files that would not decode with v4.2.1 now decode properly, especially in averages over several minutes. 2. The frequency width W of the sync tone (the "red spike") is now measured and displayed in Hz after DF in the main text box. In any of the three JT65 modes, W should be no more than 2-4 Hz under good conditions. Uncorrected frequency drifts, excessive oscillator phase noise, and certain propagation effects can make the width larger. Anything over about about 4 Hz will impair copy in JT65A. Similarly, widths greater than about 7 and 15 Hz will begin to impair copy in JT65B and C, respectively. 3. The utility program CWID.EXE now accepts lower case letters on the command line. It also permits you to specify the audio frequency of the tone in the wave file. You may wish to place the tone at 600 Hz or lower so that it lies well below the tones generated by any of the WSJT operating modes. 4. The "Clip" function has been improved in several ways. The yellow and magenta curves in the Big Spectrum display no longer disappear when Clip > 0. Setting Clip = 3 does hard clipping, as before, but it also blanks out any data regions with average power well above the "baseline" of the green curve. Experimenting with different values of Clip may help you to recover good copy from noisy data. 5. I believe that the text window displays in Monitor mode, and when you are using the Include/Exclude buttons, now function correctly. 6. Minor bug fixes: the program no longer crashes in EME Echo mode if you select "EME Calc | Load | Cancel". The correct "S" value is listed on the status bar in JT6M mode. 7. The program's "Fit and finish" is improved in several not very important ways. WSJT Version 4.2.1 ------------------ Version 4.2.1 contains a number of enhancements and bug fixes, mostly related to the new JT65 mode. Changes from version 4.1.1 include the following: 1.1 Message averaging now works correctly 1.2 Many small improvements to the decoding algorithm 1.3 Decoding speed improved by 50% 1.4 JT65 monitor mode is properly implemented 1.5 TX message can be changed up to t=59 s of preceding RX period 1.6 Switch to a shorthand TX message at any time 1.7 Freeze works properly for shorthand messages 1.8 Decodes with failed FEC (forward error correction) are optionally displayable 1.9 "Garbage filter" provided so that questionable decodes appear only if they contain some recognizable text 1.10 Automatic station ID, as in FSK441 and JT6M modes 1.11 Companion program to generate a CW ID.WAV file is included 1.12 The birdie zapper now works in JT65 mode 1.13 "Clip" function has been reactivated 1.14 F5 help screen updated to reflect JT65 practices 1.15 "OOO" message handled more transparently 1.16 Optional display of Moon Az/El at DX station, replacing Sun Az/El 1.17 Right/Left audio out now works properly 1.18 DT displayed as blank rather than 0.0 for shorthand messages 1.19 No program crash if ToRadio or Grid left empty 1.20 No program crash if attempting to decode 60 s file in JT6M 1.21 All other reported problems causing crash have been fixed +-------------------------------------------------------------+ | Quick Start Guide to Using WSJT version 4 and the JT65 Mode | +-------------------------------------------------------------+ Version 4 of WSJT marks a significant departure in the program's evolution. The list of features is no longer a full superset of those available in all previous versions. In particular, the JT44 mode is gone; it is replaced by a new mode called JT65 that I hope will be a significant improvement for making QSOs via EME and extremely weak tropospheric paths. The procedure for upgrading to version 4 is identical to previous upgrades, with one exception: the setup procedure will install a new program in your existing WSJT directory, but will keep the old version alive as well. The two versions of the program can coexist peacefully. During a testing period you will probably want the older version and JT44 to be available as well. What is different about JT65, compared to JT44? Here's a short list: 1. T/R period 60 s; actual TX audio duration 46.8 s. (Yes, this will put somewhat more stress on your PA. If its cooling is marginal, take appropriate action.) 2. Modulation uses 64 data tones plus a sync tone. 3. Tones are spaced by 2.7 Hz in frequency and 0.372 s in time. The total occupied bandwidth of a JT65 signal is about 180 Hz. 4. Transmissions consist of 63 data tones or "symbols," each carrying 6 bits of information. In addition there are 63 sync symbols for establishing time and frequency synchronization. 5. Software AFC (automatic frequency control) can follow drift rates up to about +/-10 Hz/minute. 6. User messages are tightly "source coded" into 72 bits. 7. Strong FEC (forward error correction) coding is used to mitigate transmission errors. 8. User-level message formats are designed to permit maximum possible efficiency in EME or similar QSOs. A valid message must be be one of three possible types: 1. "Call1 Call2 Grid" or "Call1 Call2 Grid OOO" 2. "RO", "RRR", or "73" (so-called shorthand messages) 3. "any text you want" (up to 13 characters selected from a 42-character alphabet) Instead of a callsign, the first field of a message type 1 may contain "CQ" or "QRZ". Other such "special tokens" may be added later. The available alphabet of characters for message type 3 is: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./? 9. Instead of JT44's very effective intra-message averaging of the even, odd, and "last N" characters of a message, JT65 offers even more powerful special shorthand messages for RO, RRR, and 73. These have much higher sensitivity than the other message types. They work reliably down to about -30 dB. If you succeed in exchanging callsigns and "OOO" by means of type 1 messages, you should certainly be able to complete the QSO. 10. Message averaging over subsequent transmissions works as it did in JT44, with one exception. The "OOO" signal report typically used for EME can be appended to message #1 and the message will continue averaging without any need to start over. The presence or absence of "OOO" will be detected if sync is achieved, whether or not full decoding has been successful. 11. Receiving FEC-decoded transmissions takes some getting used to. You will find *much* less gibberish on your screen in JT65 than in JT44. The FEC algorithm has a good idea whether it has succeeded or not, and the program will suppress output unless it is "pretty sure" that it has got the message right. You will discover that when the FEC procedure fails and the program has not realized it, text is occasionally produced looks like plausible (but quite wrong) callsigns or grid locators. You must mentally reject such garbage messages, when they occur. In the small amount of on-the-air testing that JT65 has enjoyed so far, my experience is that that only a few percent of decoded messages are displayed incorrectly. Most of the time, received text is either "letter perfect" or is left blank. 12. You may optionally have the program display text for instances when the decoder in uncertain of its results. Doing so makes use of an "expected message", and you can specify a minimum number of characters thst must match before uncertain text is displayed. By default the expected message is "MyCall HisCall HisGrid" where MyCall is your own callsign, HisCall is the one entered in the onscreen "To Radio" box, and HisGrid is the first four characters of the grid locator in the "Grid" box. 13. At least one design choice used to define the JT65 algorithm is still subject to change. If the 2.7 Hz tone spacing turns out to be problematic because of propagation anomalies or inadequate oscillator stabilities, the spacing could be increased. There are significant advantages to the smaller spacing, however, so I am sticking with it for now. Beta Release 4.1.1 ------------------ +-------------------------------------------------------------+ | Quick Start Guide to Using WSJT version 4 and the JT65 Mode | +-------------------------------------------------------------+ Version 4 of WSJT marks a significant departure in the program's evolution. The list of features is no longer a full superset of those available in all previous versions. In particular, the JT44 mode is gone; it is replaced by a new mode called JT65 that I hope will be a significant improvement for making QSOs via EME and extremely weak tropospheric paths. The procedure for upgrading to version 4 is identical to previous upgrades, with one exception: the setup procedure will install a new program in your existing WSJT directory, but will keep the old version alive as well. The two versions of the program can coexist peacefully. During a testing period you will probably want the older version and JT44 to be available as well. What is different about JT65, compared to JT44? Here's a short list: 1. T/R period 60 s; actual TX audio duration 46.8 s. (Yes, this will put somewhat more stress on your PA. If its cooling is marginal, take appropriate action.) 2. Modulation uses 64 data tones plus a sync tone. 3. Tones are spaced by 2.7 Hz in frequency and 0.372 s in time. The total occupied bandwidth of a JT65 signal is about 180 Hz. 4. Transmissions consist of 63 data tones or "symbols," each carrying 6 bits of information. In addition there are 63 sync symbols for establishing time and frequency synchronization. 5. Software AFC (automatic frequency control) can follow drift rates up to about +/-10 Hz/minute. 6. User messages are tightly "source coded" into 72 bits. 7. Strong FEC (forward error correction) coding is used to mitigate transmission errors. 8. User-level mesage formats are designed to permit maximum possible efficiency in EME or similar QSOs. A valid message must be be one of three possible types: 1. "Call1 Call2 Grid" or "Call1 Call2 Grid OOO" 2. "RO", "RRR", or "73" (so-called shorthand messages) 3. "any text you want" (up to 13 characters selected from a 42-character alphabet) Instead of a callsign, the first field of a message type 1 may contain "CQ" or "QRZ". Other such "special tokens" may be added later. The available alphabet of characters for message type 3 is: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./? 9. Instead of JT44's very effective intra-message averaging of the even, odd, and "last N" characters of a message, JT65 offers even more powerful special shorthand messages for RO, RRR, and 73. These have much higher sensitivity than the other message types. They work reliably down to -30 dB and below. If you succeed in exchanging callsigns and "OOO" by means of type 1 messages, you should certainly be able to complete the QSO. 10. Message averaging over subsequent transmissions is intended to work as it did in JT44, with one exception. The "OOO" signal report typically used for EME can be appended to message #1 and the message will continue averaging without any need to start over. The presence or absence of "OOO" will be detected if sync is achieved, whether or not full decoding has been successful. [Note: message averaging is only partially functional in the first beta release of the JT65 mode. I will need some experience with the mode in order to optimize the code here.] 11. Receiving FEC-decoded transmissions takes some getting used to. You will find *much* less gibberish on your screen in JT65 than in JT44. The FEC algorithm has a good idea whether it has succeeded or not, and the program will suppress output unless it is "pretty sure" that it has got the message right. You will discover that when the FEC procedure fails and the program has not realized it, text is occasionally produced looks like plausible (but quite wrong) callsigns or grid locators. You must mentally reject such garbage messages, when they occur. In the small amount of on-the-air testing that JT65 has enjoyed so far, my experience is that that only a few percent of decoded messages are displayed incorrectly. Most of the time, received text is either "letter perfect" or is left blank. 12. The program makes use of what it calls the "expected message". By default this message is "MyCall HisCall HisGrid" where MyCall is your own callsign, HisCall is the one entered in the onscreen "To Radio" box, and HisGrid is the first four characters of the grid locator in the "Grid" box. The AFC algorithm, in particular, can work more effectively when the actual message received matches the expected message. 13. Several design choices used in defining the JT65 algorithm are still subject to change. If the 2.7 Hz tone spacing turns out to be problematic because of propagation anomalies or inadequate oscillator stabilities, the spacing could be increased. About 1 dB of additional S/N could be obtained by omitting the "Grid" field of the standard message format. This would also reduce the maximum "plain text" message length from 13 characters to 10. 14. Please note that the "Clip" and "ST" are not functional in WSJT v4.1.1. Their settings do not affect program operation. Beta Release 3.8.1 ------------------ This release contains the following new features: 1. An optional large spectral display. Its axes are reversed with respect to those of the FSK441 and JT6M waterfall displays; in the new plot, frequency runs from left to right and time from top to bottom. 2. A new birdie zapper that is especially effective in the FSK441 and JT6M modes. You can watch what it is doing by observing the waterfall displays before and after the "Zap" box is checked. Click "Decode" to refresh the displays after checking or uncheking "Zap". 3. Message decoding in FSK441 mode has been improved in several ways. DF is more accurately determined. Better synchronization is achieved with the precise timing of 25-sample tone bursts comprising each message symbol. Folding of messages is no longer attempted. (It seems that whenever a ping is long enough to make folding effective, it's also strong enough to make folding unnecessary.) As in previous versions, the left mouse button allows decoding of single-tone messages while the right button suppresses them. 4. It is now permissible to click "Gen Std Msgs" while transmitting in FSK441 or JT6M mode. When this button is clicked, the Tx message number will reset to #1 if and only if the callsign in "To Radio" has changed. 5. Message formatting templates for FSK441 and JT6M may now include the special codes %G and %L to insert your 4-digit grid or full 6-digit locator, respectively, in the message. 6. "Reset Defaults" now resets the QRN level to 5, as it should. 7. The decoding parameters in use are no longer listed in the Status Bar at lower right. This listing had become redundant. 8. In Monitor mode, the name assigned to the Rx wave file begins with "Mon_" instead of the "To Radio" callsign. 9. In FSK441 mode, all messages with more than 3 non-blank characters are transmitted in multi-tone mode. Beta Version 3.6.4 ------------------ The previous version had the threshold set very low for all mouse-picked decoding attempts in JT6M mode. This was useful to me for testing, but produced excessive gibberish. Version 3.6.4 has a reasonable threshold and produces much cleaner output. In addition, the message averaging algorithm has been improved. I find that I seldom need to use either "Freeze" or "FixAve" now. These buttons are still present in version 3.6.4, but unless I hear that people are finding them useful I may remove them soon. An option has been added to the Setup menu so that you can determine whether you want the "Tx Stop" button to kick you out of Auto Mode, or not. The default is not to do so. ***IMPORTANT*** If you can make WSJT v3.6.4 crash in normal operation, please let me know (and tell me how). Also let me know if you find anything that does not work as intended. I believe the present code behaves well and is nearly ready to be upgraded from "Beta" status to a full release. WSJT Beta Version 3.6.3 ----------------------- Version 3.6.3 has a number of small improvements, many of them not immediately visible. Several bugs have been exterminated. The JT6M decoder works better and is more sensitive. JT6M now has a "FixAve" checkbox; when this is checked, average messages will be sought only at the lengths of the automatically generated messages. WSJT Beta Version 3.6.2 ----------------------- Version 3.6.2 corrects a problem that on a few machines caused a fatal error that could only be corrected by deleting the initialization file, WSJT361.INI. WSJT Beta Version 3.6.1 ----------------------- Version 3.6.1 corrects a problem that caused an immediate termination on program startup on some users' machines (typically older ones). If you need this upgrade, you need it bad! It also fixes a minor bug that could cause a divide-by-zero error if you clicked on the plot area when no data was available to analyze. WSJT Beta Version 3.6.0 ----------------------- The JT6M mode is only a week old, but many hundreds of QSOs have been made with it all over the world. This mode is expressly designed for meteor scatter on 6 meters, but it may be useful with some other propagation modes as well. It has characteristics that place it about midway between FSK441 and JT44 in both speed and sensitivity. A second beta release of WSJT with JT6M, Version 3.6.0, is now available for downloading at http://pulsar.princeton.edu/~joe/K1JT/UPD360.EXE The download file is about 0.75 MB in length. Comparison of Versions 3.6.0 and 3.5.1 -------------------------------------- 1. Version 3.6.0 has a better and faster decoder for JT6M. Further improvements in this area are still to come. 2. Several bugs that could cause crashes in V3.5.1 have been fixed. Version 3.6.0 appears to be quite stable (at least on my own computers). 3. Some buttons have been moved from their familiar positions. 4. Gadgets that Microsoft calls "Up-Down Controls" have replaced the +/- buttons used for various decoding parameters. 5. You can now drag the mouse pointer across any portion of the large plot area to cause decoding of that portion of a recorded file. This works in both FSK441 and JT6M mode. The area you selected is marked when the plot is refreshed. 6. A yellow curve now appears above the green curve in JT6M mode. The yellow line represents measured power received at the sync-tone frequency and in the sync-tone intervals. I haven't yet written up any detailed instructions for the JT6M mode. However, if you are an experienced WSJT user you probably won't need any. Here are a few things it will be helpful to know about JT6M. 1. Like JT44, JT6M uses 44-tone FSK with a "sync tone" and 43 possible data tones -- one for each character in the supported alphanumeric set. The sync tone is at 1076.66 Hz, and the 43 other possible tones are spaced at 21.53 HZ intervals up to 2002.59 Hz. The tones are keyed at a rate of 21.53 baud, so each one lasts for 1/21.53 = 0.04644 seconds. The sync tone is ON during every 3rd transmission interval; tones representing two data characters follow each sync tone. The transmission rate of user data is therefore (2/3)*21.53 = 14.4 characters per second. The transmitted signal sounds a bit like piccolo music. 2. Basic operation is very similar to FSK441. Just select JT6M from the WSJT "Mode" menu (or use "Shift-F7") and then proceed as usual. 3. The green line and waterfall display have their usual meanings. 4. The program attempts to decode both single pings and an "average message". The average is the last line displayed during each decoding attempt, and is flagged with an asterisk as in FSK441. The number to the right of the asterisk is the inferred message length (for example, the number should be 10 for the message "W8WN K1JT "). If the program finds the wrong length, the average will be garbled or meaningless. All message lengths should be even numbers, because odd-length messages are padded with an extra space at transmission time in order to make them even. 5. Clicking with the left mouse button decodes a 4-second block of data near the mouse pointer. The right button uses a longer segment of 10 seconds. Drag the mouse with the button down to select any desired region. Experiment for best decoding as necessary. 6. As soon as you see some properly decoded text, set the DF box to the measured DF and check the "Freeze" box. Alternatively, you can set the Tolerance to a low value (say 25 Hz) after the desired signal has been identified. Use RIT, if necessary, to bring subsequently measured DF's down to a small value. 7. Default settings for the decoder are S > -12 dB, Tol=400 Hz, DF=0 Hz. 8. JT6M can work with signals that are up to 13 dB weaker than those required for FSK441. In the brief on-the-air tests I've made with W8WN, we have both found that mouse-clicking on the smooth green line, even where nothing was heard and nothing can be seen, sometimes causes both callsigns to pop up out of the noise! Version 3.0 ----------- A new major release of WSJT, Version 3.0, is now available for free download. Instructions for upgrading and for complete installations can be found at http://pulsar.princeton.edu/~joe/K1JT. What's new in Version 3.0? -------------------------- 1. The "User's Guide and Reference Manual" has grown to 51 well illustrated pages. The new manual includes four major new sections which together cover: a) the EME Echo mode, including the "Measure" sub-mode and the "EME Calc" utility for estimating the strength of your echoes from the moon; b) the nature of the various astronomical calculations done within WSJT, and a summary of their accuracies; c) several pages describing availability of Fortran source code for the DSP algorithms in WSJT, as well as a suite of test programs for generating simulated data and testing the FSK441 and JT44 encoding and decoding algorithms; d) a short essay on possible future developments for WSJT. 2. The astronomical calculations in WSJT have been overhauled and thoroughly checked. In practice the differences from V2.9 will seem minor, but as described in the new manual's Appendix B, the accuracies of computed positions for the sun and moon, and for the EME Doppler shift, are now well documented. Computed positions are accurate to within about 0.04 degrees, and Doppler is better than 1 Hz at 144 MHz. Exactly what is meant by the displayed data is now described in the manual, as well. 3. A new feature has been added on the Help menu. It pops up a screen summarizing the standard message exchanges used for minimal QSOs using FSK441 and JT44. No more excuses for not being sure about which message you should send next! 4. The Measure mode can now be left running indefinitely, with its output written to a file. A few individuals have been wanting to use the program for radio astronomy purposes, and the new version provides a minimal facility for doing this. 5. The display screen for the EME Calc utility has been cleaned and tightened up. 6. A few other small niceties, all minor in scope. Version 2.9.0 ------------- I am pleased to announce the availability of an upgrade to WSJT Version 2.9. The upgrade provides most of the features of the soon-to-be-released Version 3.0; I am releasing it now as Version 2.9 because many users have asked for early access to its new capabilities. A full release of Version 3.0 must await some updating of the Users Guide and Reference Manual. Probably a few additional features will be added by then, as well. Please be patient! Version 2.9 is available only as an upgrade. As usual, it can be downloaded from the WSJT web site, http://pulsar.princeton.edu/~joe/K1JT, or from the European mirror site http://www.dk5ya.de. New features of the program include the following: 1. EME Echo mode now works on certain computers (generally older, slower ones) that previously refused to run Echo mode properly. The new version runs fine under Windows 95 on my ancient 100 MHz Pentium with 32 MB of RAM. 2. A new feature known as "Measure" can be selected from the main screen in EME Echo mode. Click the Measure button and your system will record the received audio for one second, compute the level of the noise and display the result in units of dB relative to the nominal WSJT "0 dB" level. The program will repeat this measurement cycle every 2 seconds and plot the results as a green line in the graphical screen area. You can use this mode to measure Sun noise, antenna temperature, ground noise, preamp gain, and a host of other useful quantities, relative to a chosen reference level. 3. A pop-up utility labeled "EME Calc" can be selected from the EME Echo screen. It provides an easy way to predict whether you should be able to detect your own echoes from the moon, as well as your ability to work another station by EME. Boxes are provided to enter your TX power, TX feedline loss, RX noise figure, RX feedline loss, antenna gain, ground gain, ground noise, and sky temperature. Similar quantities can be entered for a second station, and you must also specify the operating frequency. When you click "Compute," the program will calculate the maximum expected echo strengths for the "Home Station" and the "DX Station" individually, as well as the maximum expected signal strength of each station at the other location. The program also estimates the averaging time that would be required to detect echoes at the predicted signal level. Signal strengths are quoted relative to the WSJT standard, the noise power in a 2500 Hz bandwidth. If the computed result for your echo exceeds about -38 dB, you have a chance of being able to detect your echoes using WSJT. In comparison, echoes are detectable by the human ear only if they exceed about -14 dB on the same scale, or equivalently +3 dB in a 50 Hz bandwidth. Note that the estimated signal strengths are supposed to be the maximum values expected for the specified conditions. There are many reasons (Faraday rotation, ionospheric scintillation, libration fading, ...) why the actual signal strength may be different, and deviations are much more likely to be downward than upward. The predicted echo strength for my present 144 MHz station at a reasonably good time of the month is around -25 dB. My experience has been that the predictions are fairly good if enough time is spent to be sure of catching a Faraday rotation peak. A number of smaller enhancements have been made in the EME Echo mode of WSJT. These include the following: 4. The program is much better behaved when operating at higher frequencies, in particular 1296 MHz and above. If you fail to enter an RIT setting or specify one that would make the return echo fall outside the audio frequency range 900 - 2100 Hz, the program will suggest a better RIT value for you to use. 5. The amount of programmed frequency spread of your transmitted signal (the "Dither" magnitude) can be set to any value in the range 0 to 500 Hz. It defaults to 50 Hz. 6. Instead of accumulating average echo parameters indefinitely, you can set a parameter "Tavg" that specifies a time constant for averaging. The default value is 5 minutes; at this setting the average echo spectrum will build up as before for the first 5 minutes, but thereafter it will track the signal characteristics over the most recent 5 minutes. In other words, the average gradually "forgets" the signals received more than Tavg minutes ago. Setting Tavg to a large number, say 999 minutes, will closely approximate the program's previous behavior. If you can detect your EME echoes easily and want to see how they vary with time, you might set Tavg to 1 minute, start a "Measure" sequence, and take down the signal level readings at one minute intervals. 7. Information sent to the main text window every 6 seconds now accumulates, with the text window scrolling as necessary. The output is also (optionally) written to file DECODED.CUM so that you can study the data later. Other miscellaneous improvements and bug fixes include the following: 8. In JT44 mode, if the "Grid" box is left empty then no EME Doppler shift will be displayed. 9. The minimum "Dsec" increment has been reduced from 1 second to 0.5 second. This will permit more precise on-the-fly correction of the Windows clock for use by WSJT, should that be necessary. 10. JT44 messages are always exactly 22 characters in length, and any additional characters are ignored. To make this behavior more obvious, any excess characters are now visibly removed from the screen when transmission of a message begins. 11. In Version 2.3.0, hitting the F4 key while in echo mode would cause the program to crash. Fixed. 12. Switching between modes could cause the Auto Period button to be stuck in the disabled or "grayed out" state. Fixed. 13. The last character in a manually edited FSK441 message was not sent if the default trailing blank and "<" character were erased. Fixed. Version 2.3.0 ------------- This release of WSJT is the first to include the EME Echo mode. This mode allows you to detect and measure your own lunar echoes, even if they are far too weak to hear. The mode can be highly useful for evaluating your station performance, even if you prefer to use CW rather than JT44 for your EME QSOs. If you are a present user of WSJT with no interest in detecting and measuring your EME echoes, you will find no significant advantages to upgrading to WSJT Version 2.3.0. With the exception of a minor bug fix, the FSK441 and JT44 modes are essentially unchanged. You can download the upgrade from the WSJT home page, http://pulsar.princeton.edu/~joe/K1JT, and soon also from the European mirror site http://www.vhfdx.de/wsjt. To upgrade an existing WSJT installation of Version 1.9.4 or later you should download and execute the file UPD230.EXE, which will replace your existing files WSJT.EXE and WSJT1.DLL with new files of the same name. I have not yet produced a new full distribution of the latest version. Doing this will require extensions to the User's Guide and Reference Manual, and will probably be accompanied by further improvements to the program. If you wish to do a full installation of Version 2.3.0 from scratch you should download the installation file WSJT222.EXE, run it to install Version 2.2.2, and then upgrade to Version 2.3.0 as described above. Minor Bug Fix: In WSJT Version 2.2.2 and earlier, if you dismissed the "Setup | Options" page by clicking on the "X" in the upper right corner of the form, instead of by clicking the "Done" button, the home station callsign ("My Call") would revert to its default value "K1JT". (Contrary to popular opinion, this was not an subtle ploy designed to increase my own VUCC totals; it was simply a coding mistake.) The bug has now been fixed. EME Echo mode is presently a plain, no-frills implementation. You can activate it from the Mode menu or by striking function key F9. Most of the familiar WSJT buttons will then disappear from the screen, leaving just a few that are essential for controlling the Echo mode. If your station is already operational in the FSK441 and JT44 modes and you have provided the proper signal levels, all you need to do for an echo test is to start WSJT Version 2.3.0, hit F9 to switch to EME Echo mode, aim your antenna at the moon, pick a clear frequency, and toggle Auto Period On. The program will then start cycling through the following loop: 1. Transmit a fixed tone for 2.0 s 2. Wait about 0.5 s for the start of your echo 3. Record the received signal for 2.0 s 4. Analyze and plot the results 5. Repeat from step 1 The loop cycle time is 6 seconds, so the transmitter duty cycle is only 2/6 or 33%. Your transmitter will think it is loafing. At the start of each transmission the frequency of the transmitted tone is randomly dithered by an offset up to +/- 100 Hz around a nominal value of 1500 Hz. The programmed offset is removed from the computed spectrum of each recording before it is added into the accumulating average. This procedure helps to minimize the effect of birdies in the receiver passband: in the average spectrum a fixed-frequency birdie will be smeared out over a 200 Hz range, while the desired signal remains sharply defined. Two curves are plotted in WSJT's main plot area during each pass through the Tx/Rx loop. Each represents the spectrum of received power over a 400 Hz range centered on the expected echo. The curve in gray is a reference spectrum that you can use to be sure you have chosen a reasonably birdie-free passband. It is aligned so as to remove the EME doppler shift computed at the start of your run. The alignment will not be subsequently adjusted for changes in doppler shift or for the random dithering of the transmitted frequency. Stable birdies will therefore stay fixed in the blue spectrum, making them easy to recognize and evade if necessary. The red curve displays the desired EME echo signal. Spectra computed for each 2-second receive period are shifted to correct for changing doppler shift and for the programmed frequency dithering, and are then averaged. The EME echo should appear as a narrow spike near the middle of the red curve, close to DF = 0. In addition to the graphical display, a line is presented in the WSJT text window in the following form: N: 16 Sig: -26.3 dB DF: -1.3 Hz Width: 0.7 Hz Q: 9 This information gives the number N of Tx/Rx cycles that have been averaged, the mean signal strength in dB, the measured frequency offset of the detected echo from the expected frequency, the spectral width of the echo, and a relative quality indicator for the detection on a 0 - 10 scale. Signal strength is measured in the same units as used in the FSK441 and JT44 modes, i.e., in dB relative to the received noise power in a 2500 Hz bandwidth. Low values of Q represent dubious detections, in which case the values of signal strength, DF, and width may be meaningless. A note about doppler calculations will be helpful here. Most computer programs in amateur EME stations use approximate formulae to compute the position and distance of the moon and the expected doppler shifts of echos. WSJT is no exception, and I cannot presently quote a firm figure on the accuracy of its doppler calculations or describe how their errors depend on lunar coordinates or the accuracy of your station location. EME Echo mode uses a calculated doppler shift to align received spectra so that the echo should appear at DF = 0. I have found that on 2 meters the return signals generally fall within 10 Hz of DF = 0. Further improvements in accuracy of the doppler routine will be forthcoming. If you can hear your own EME echoes you should see a spike in the red curve within a few seconds after toggling Auto Period On. If your echoes are 10-15 dB below the audible threshold you should see a significant spike on the red curve within a few minutes. To give you a better example of what to expect, consider the parameters of my station. On 2 meters I run up to 400 Watts to a 17.6 dBd antenna (4 x 9 el yagis) aimed at the horizon. I have never heard my own CW echoes with this system. However, when the moon is in my elevation window at 0 - 10 degrees I can easily detect my echoes at any time of the month using WSJT in its EME Echo mode. Indeed, I can turn off the PA and use my FT-847 barefoot, delivering 35 W to the antenna, and still detect my echoes rather easily, even with the moon in a "bad" part of the sky and the path degradation as large as -8 dB. I seem to be able to detect my echoes reliably down to relative signal levels around -36 dB. The spectral analysis done in EME Echo mode provides a frequency resolution of 0.67 Hz. If your transmitter or receiver has short-term frequency stability much worse than this value, so that something drifts or wobbles by more than about 1 Hz in 2 seconds, your echo sensitivity will be degraded. Most modern radios have no difficulty in meeting this standard on the 6 and 2 meter bands, but the higher UHF and microwave bands will be more problematic. I don't have enough experience to know what the spectral width of an echo on the 432 MHz or 1296 MHz band should be after averaging for a few minutes. I have been measuring widths of 2 Hz or less on 2 meters. By default WSJT will assume that your receiver and transmitter are tuned to the same frequency. An on-screen box labeled "RIT (Hz)" is provided so that you can inform the program of any offset receiver tuning, for example to accommodate a large doppler shift. Suppose you are running a test on 70 cm and the predicted doppler shift at the start of the run is -1087 Hz. That would cause echoes from the 1400 - 1600 Hz transmitted audio tone to come back as low as 313 Hz, probably well below the low-frequency cutoff in your receiver's passband. Use your transceiver's RIT control to offset the receiver tuning by some round number within a few hundred Hz of the predicted value -- say -1000 Hz in this example -- and enter this offset in the RIT box before starting the echo measurement. The program will accommodate subsequent changes in the doppler shift up to 800 Hz or so, if necessary, without any further adjustments. Your echo should appear at the center of the red curve, as usual. You won't need to use the RIT feature on 6 or 2 meters, where doppler shifts are much smaller and echoes always fall well within the receiver's SSB passband. Please note that I have so far tested the EME Echo mode only on 2 meters. You will discover that the software implementation is not yet highly polished; a number of improvements are already in the works, but I want to gain the advantage of feedback from other users before I go too much further. If you use the EME Echo mode -- especially on bands other than 2 meters -- please send me your comments, experiences, and suggestions! I am anxious to know how well it works for you. Version 2.2.2 ------------- This is a minor maintenance release. As usual, you can download it from the WSJT web page, http://pulsar.princeton.edu/~joe/K1JT. In addition to a short update file, UPD222.EXE, a full distribution of WSJT Version 2.2.2 is available as WSJT222.EXE. I had thought that Version 2.2.1 had already fixed a sometimes baffling bug appearing in earlier versions: if WSJT was terminated when in its "minimized" state, it could get "stuck" on your Windows taskbar and refuse to return to a full size display. It's not always easy for me to test program revisions on all available versions of Windows, and it seems that the V2.2.1 fix did not solve the problem on at least some versions of Windows 98. This time, with V2.2.2, I believe it's *really* fixed! If WSJT is stuck in the minimized state you should fix it as follows, and then upgrade to Version 2.2.2: A) Start WSJT. It should appear in minimized form on the taskbar at the bottom of your screen. B) Right-click on the WSJT taskbar label and select "Move". C) Press the "left arrow" and/or "up arrow" keys a few times and then move the mouse. You should start to see a "dotted frame" indicating the location of the WSJT screen. D) Click the left mouse button, and you should be back in business. Then you should download and install UPD222.EXE and upgrade your system to Version 2.2.2. Version 2.2.1 ------------- This is a minor maintenance release. You can download it from the WSJT web page, http://pulsar.princeton.edu/~joe/K1JT. In addition to the short update file, a new full distribution of WSJT Version 2.2.1 is available, as well as a new version of the manual addressing the new program features. As always, I will be pleased to receive comments and suggestions at email address k1jt@arrl.net. Please note, however, that I will be on vacation and not reading email from July 7 through 21. Version 2.2.1 fixes the following minor bugs in Version 2.2.0: 1. When first started without a valid INI file, the v2.2.0 would fail to "Generate Std Messages" when asked to do so. Once you have switched modes, say from FSK441 to JT44, the program worked correctly. 2. Local hour angles greater than 180 degrees are now displayed as negative angles. 3. If you did not check the menu item "File | Save text in File DECODED.CUM", the v2.2.0 would create an unwanted file named "fort.21" and write all decoded JT44 text there. 4. If WSJT was terminated when in the "minimized" state, it could get "stuck" on your Windows taskbar. If you are stuck in this mode you should fix it as follows, and then upgrade to Version 2.2.1: A) Start WSJT. It should appear in minimized form on the taskbar at the bottom of your screen. B) Right-click on the WSJT taskbar label and select "Move". C) Press the "left arrow" and/or "up arrow" keys a few times and then move the mouse. You should start to see a "dotted frame" indicating the location of the WSJT screen. D) Click the left mouse button, and you should be back in business. Version 2.2.0 ------------- WSJT Version 2.2.0 provides several significant enhancements, a number of smaller improvements, and four minor bug fixes. To upgrade to v2.2.0 you should download the self-extracting zip file UPD220.EXE and execute it to extract its contents, directing the resulting files to your WSJT installation folder. The new version includes the following changes: 1. The JT44 mode now has an adjustable parameter called "Clip." It can be controlled with +/- buttons just below analogous ones for the "Sync" parameter. The value of Clip defaults to 0, where it has no effect. By increasing Clip to 1, 2, or 3 you can introduce "soft," "moderate," or "hard" clipping of any sudden increases in signal strength that might ruin the decoding of an otherwise usable signal. I have found that setting Clip to 2 or 3 permits me to use JT44 in the presence of summertime QRN that renders v2.0.1 useless. Clipping also helps to accommodate occasional meteor pings in a JT44 QSO, recovering the program's ability to synchronize on a weak residual signal. You can leave the clipping turned on; note, however, that using hard clipping on a signal that does not require it can cost you about 1 dB in message S/N. I recommend generally leaving Clip set to 0 and increasing it only when necessary. 2. JT44 mode has a new checkbox labeled "Zap Birdies." It does just what you would hope such a command would do -- and it can turn a totally spoiled signal into good copy! (In the upgrade file I've included an example wave file recorded via EME from W7FG, in the presence of a strong birdie at my station. To become a believer, try decoding this file both with and without "Zap Birdies" checked. He was sending me the message "K1JT W7FG EM26 ".) The Zap algorithm works best with birdies that are steady in both amplitude and frequency. A sure indicator that you have a birdie problem is a persistent extra spike (or spikes) in the red-line plot, in addition to the one corresponding to the JT44 sync tone. If the birdie is higher in frequency than the sync tone by 20 to 465 Hz, you will probably see a number of identical garbage characters in the line of decoded text. If this happens, check the "Zap Birdies" box and hit "Decode Again", and your copy should improve. It will work best if you have already identified the correct value of DF and checked the "Freeze" box to lock onto the Sync tone. Do not expect miracles! Keeping birdies out of your receiver or QSYing to avoid them will always work better than trying to deal with them in software. Nevertheless, this birdie-killer can make the difference between a successful QSO and one that fails miserably. 3. The JT44 mode has a second new checkbox labeled "Fold Msg." For messages having identical content in the first and second half, this feature can yield a signal-to-noise improvement of 1.5 dB. The JT44 default message formats have been modified slightly to maximize the opportunities for useful message folding. For example, if K1AA is working G2ZZ, the first EME-style message will now be generated as "G2ZZ K1AA G2ZZ K1AA ". (Notice the two spaces in the middle of the message and at the end.) If the "Fold Msg" box is checked, the message will be decoded simply as "G2ZZ K1AA ". Try decoding a marginal signal both with and without the "Fold Msg" box checked. QSB conditions might make one or the other preferable at a particular time. 4. In WSJT versions 2.0.0 and 2.0.1 the JT44 decode algorithm produces a single-character average of the last four character positions in a message. In Version 2.2.0 the averaging limit has been changed to equal the number of "O" characters (for EME messages) or "R" characters (for non-EME messages) at the trailing end of default TX message #2. For example, if clicking "Generate Std Texts" produces "G2ZZ K1AA OOOOOOOOOOOO" for message #2, the program will produce a single-character average based on the last 12 received character positions. This choice gives you the best possible chance of properly decoding an "O" or "R" report in message #2, and it also gives you a good chance at snagging the "RRRRRRRRRRRRRRRRRRRRRR" message under very marginal conditions. For steady signals the procedure can yield a 5.4 dB S/N advantage over single characters and a 2.4 dB advantage over the four-character average. 5. WSJT now remembers whether you were using FSK441 or JT44 mode when you last exited the program. On startup it restores the most recently used mode, including values of W, S, and Sync, as appropriate. 6. All decoded text in JT44 mode is now written to the cumulative file DECODED.CUM. In previous versions of WSJT, text was saved only in FSK441 mode. 7. The default Sync setting in JT44 mode is now 1 rather than 2. I believe nearly everybody runs with Sync = 1. 8. WSJT v2.2.0 is more complete and more consistent about saving information about the starting directory and the form size of the "File | Open" dialog box. 9. The displayed azimuths for "Hot A" and "Hot B" (direction headings to use for optimal sporadic meteor reflections) now wrap correctly at 0 and 360 degrees. You will no longer see, for example, values like 368 or -8 degrees if you are working someone to your north. 10. In JT44 mode the program now displays the local hour angle of the Moon, in degrees. You will appreciate this if you have a polar mounted EME array. 11. The UTC Offset may now be specified as a floating-point number -- that is, with significant digits after a decimal point. 12. The count of available records displayed in the average message window behaved illogically when "Decode Again" and "Include" were used. This has been fixed. 13. There was a bug in the JT44 display routine that caused error messages to appear when the moon's right ascension was very close to 00:00. The error could appear at most once a month, and it would persist for an hour or so. The bug has been fixed. 14. There was an apparent logical inconsistency in program behavior if "Exclude" was clicked after "Clear Avg" had been executed. This has been fixed. 15. In V2.0.1 if you hit F8 more than once and then hit F7, the "Width" parameter in FSK441 mode would be set to 200 ms. This has been fixed. Version 2.0.1 ------------- This is a minor maintenance release. Principal changes from Version 2.0 include the following: 1. The installation scripts for both the full installation and the upgrade to v2.0.1 are more robust and much easier to use. 2. The decoding parameters for FSK441 mode are saved correctly after you have used JT44 mode. 3. The controls for "Decode Again", "Include", and "Exclude" are now fully available during the Tx period. 4. Certain colors (e.g., the backgrounds of a few labels) now display better on older machines. 5. The background colors behind certain Tx messages in JT44 mode have been corrected. 6. The manual has been updated to conform with the new installation scripts, and a number of other small changes (mostly correcting typos) have been made. 7. The Tab key now moves the focus between various on-screen controls and text boxes in a rational way. Version 2.0 ----------- A major new release of WSJT, Version 2.0 is now available for free download. Instructions for upgrading and for new installations can be found at http://pulsar.princeton.edu/~joe/K1JT. What's new in Version 2.0 ? -------------------------- The JT44 mode for extreme weak signal work was first introduced in beta release 1.8.0. This mode has now matured, the program is stable, and tons of EME QSOs (among others) are being made with it. New features and fixes in Version 2.0 include the following: 1. Full monitor mode with separate averaging of 1st and 2nd sequences. 2. Mouse-selected value of DF for decoding when "Freeze" is checked. 3. Program is much faster at certain critical points, and now runs reliably on a 75 MHz Pentium with 24 MB of RAM. 4. The dreaded "always starts minimized" bug has been fixed. 5. Certain dates (such as "2002 VIII 21" now display properly in machines configured for European format. 7. A number of other small niceties. wsjt_9.3.r2792/win_stdint.h0000664000175000017500000001271011173762056013740 0ustar jtnjtn/* ISO C9x 7.18 Integer types * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794) * * THIS SOFTWARE IS NOT COPYRIGHTED * * Contributor: Danny Smith * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * Date: 2000-12-02 */ #ifndef _STDINT_H #define _STDINT_H #define __need_wint_t #define __need_wchar_t #include /* 7.18.1.1 Exact-width integer types */ typedef signed char int8_t; typedef unsigned char uint8_t; typedef short int16_t; typedef unsigned short uint16_t; typedef int int32_t; typedef unsigned uint32_t; //typedef long long int64_t; //typedef unsigned long long uint64_t; /* 7.18.1.2 Minimum-width integer types */ typedef signed char int_least8_t; typedef unsigned char uint_least8_t; typedef short int_least16_t; typedef unsigned short uint_least16_t; typedef int int_least32_t; typedef unsigned uint_least32_t; //typedef long long int_least64_t; //typedef unsigned long long uint_least64_t; /* 7.18.1.3 Fastest minimum-width integer types * Not actually guaranteed to be fastest for all purposes * Here we use the exact-width types for 8 and 16-bit ints. */ typedef char int_fast8_t; typedef unsigned char uint_fast8_t; typedef short int_fast16_t; typedef unsigned short uint_fast16_t; typedef int int_fast32_t; typedef unsigned int uint_fast32_t; //typedef long long int_fast64_t; //typedef unsigned long long uint_fast64_t; /* 7.18.1.4 Integer types capable of holding object pointers */ typedef int intptr_t; typedef unsigned uintptr_t; /* 7.18.1.5 Greatest-width integer types */ //typedef long long intmax_t; //typedef unsigned long long uintmax_t; /* 7.18.2 Limits of specified-width integer types */ #if !defined ( __cplusplus) || defined (__STDC_LIMIT_MACROS) /* 7.18.2.1 Limits of exact-width integer types */ #define INT8_MIN (-128) #define INT16_MIN (-32768) #define INT32_MIN (-2147483647 - 1) #define INT64_MIN (-9223372036854775807LL - 1) #define INT8_MAX 127 #define INT16_MAX 32767 #define INT32_MAX 2147483647 #define INT64_MAX 9223372036854775807LL #define UINT8_MAX 0xff /* 255U */ #define UINT16_MAX 0xffff /* 65535U */ #define UINT32_MAX 0xffffffff /* 4294967295U */ #define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */ /* 7.18.2.2 Limits of minimum-width integer types */ #define INT_LEAST8_MIN INT8_MIN #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST32_MIN INT32_MIN #define INT_LEAST64_MIN INT64_MIN #define INT_LEAST8_MAX INT8_MAX #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MAX INT32_MAX #define INT_LEAST64_MAX INT64_MAX #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX /* 7.18.2.3 Limits of fastest minimum-width integer types */ #define INT_FAST8_MIN INT8_MIN #define INT_FAST16_MIN INT16_MIN #define INT_FAST32_MIN INT32_MIN #define INT_FAST64_MIN INT64_MIN #define INT_FAST8_MAX INT8_MAX #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MAX INT32_MAX #define INT_FAST64_MAX INT64_MAX #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX /* 7.18.2.4 Limits of integer types capable of holding object pointers */ #define INTPTR_MIN INT32_MIN #define INTPTR_MAX INT32_MAX #define UINTPTR_MAX UINT32_MAX /* 7.18.2.5 Limits of greatest-width integer types */ #define INTMAX_MIN INT64_MIN #define INTMAX_MAX INT64_MAX #define UINTMAX_MAX UINT64_MAX /* 7.18.3 Limits of other integer types */ #define PTRDIFF_MIN INT32_MIN #define PTRDIFF_MAX INT32_MAX #define SIG_ATOMIC_MIN INT32_MIN #define SIG_ATOMIC_MAX INT32_MAX #define SIZE_MAX UINT32_MAX #ifndef WCHAR_MIN /* also in wchar.h */ #define WCHAR_MIN 0 #define WCHAR_MAX 0xffff /* UINT16_MAX */ #endif /* * wint_t is unsigned short for compatibility with MS runtime */ #define WINT_MIN 0 #define WINT_MAX 0xffff /* UINT16_MAX */ #endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */ /* 7.18.4 Macros for integer constants */ #if !defined ( __cplusplus) || defined (__STDC_CONSTANT_MACROS) /* 7.18.4.1 Macros for minimum-width integer constants Accoding to Douglas Gwyn : "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC 9899:1999 as initially published, the expansion was required to be an integer constant of precisely matching type, which is impossible to accomplish for the shorter types on most platforms, because C99 provides no standard way to designate an integer constant with width less than that of type int. TC1 changed this to require just an integer constant *expression* with *promoted* type." */ #define INT8_C(val) ((int8_t) + (val)) #define UINT8_C(val) ((uint8_t) + (val##U)) #define INT16_C(val) ((int16_t) + (val)) #define UINT16_C(val) ((uint16_t) + (val##U)) #define INT32_C(val) val##L #define UINT32_C(val) val##UL #define INT64_C(val) val##LL #define UINT64_C(val) val##ULL /* 7.18.4.2 Macros for greatest-width integer constants */ #define INTMAX_C(val) INT64_C(val) #define UINTMAX_C(val) UINT64_C(val) #endif /* !defined ( __cplusplus) || defined __STDC_CONSTANT_MACROS */ #endif wsjt_9.3.r2792/sleep.h0000664000175000017500000000112711015074716012660 0ustar jtnjtn/* * sleep.h 1.0 02/03/10 * * Defines cross-platform sleep, usleep, etc. * * By Wu Yongwei * */ #ifndef _SLEEP_H #define _SLEEP_H #ifdef _WIN32 # if defined(_NEED_SLEEP_ONLY) && (defined(_MSC_VER) || defined(__MINGW32__)) # include # define sleep(t) _sleep((t) * 1000) # else # include # define sleep(t) Sleep((t) * 1000) # endif # ifndef _NEED_SLEEP_ONLY # define msleep(t) Sleep(t) # define usleep(t) Sleep((t) / 1000) # endif #else # include # ifndef _NEED_SLEEP_ONLY # define msleep(t) usleep((t) * 1000) # endif #endif #endif /* _SLEEP_H */ wsjt_9.3.r2792/smo.f900000664000175000017500000000045211461555650012523 0ustar jtnjtnsubroutine smo(x,npts,y,nadd) real x(npts) real y(npts) nh=nadd/2 do i=1+nh,npts-nh sum=0. do j=-nh,nh sum=sum + x(i+j) enddo y(i)=sum enddo y(:nh)=0. y(npts-nh+1:)=0. fac=1.0/nadd do i=1,npts x(i)=fac*y(i) enddo return end subroutine smo wsjt_9.3.r2792/makepings.f900000664000175000017500000000104011461555650013675 0ustar jtnjtnsubroutine makepings(iwave,nwave) integer*2 iwave(nwave) real*8 t iping0=-999 dt=1.0/11025.0 do i=1,nwave iping=i/(3*11025) if(iping.ne.iping0) then ip=mod(iping,3) w=0.015*(4-ip) ig=(iping-1)/3 amp=sqrt((3.0-ig)/3.0) t0=dt*(iping+0.5)*(3*11025) iping0=iping endif t=(i*dt-t0)/w if(t.lt.0.d0 .and. t.lt.10.0) then fac=0. else fac=2.718*t*dexp(-t) endif iwave(i)=nint(fac*amp*iwave(i)) enddo return end subroutine makepings wsjt_9.3.r2792/thcvf.f900000664000175000017500000000270111336544732013036 0ustar jtnjtnsubroutine cs_init use dfmt type (RTL_CRITICAL_SECTION) ncrit1 character*12 csub0 integer*8 mtx common/mtxcom/mtx,ltrace,mtxstate,csub0 ltrace=0 mtx=loc(ncrit1) mtxstate=0 csub0='**unlocked**' call InitializeCriticalSection(mtx) return end subroutine cs_init subroutine cs_destroy use dfmt type (RTL_CRITICAL_SECTION) ncrit1 character*12 csub0 integer*8 mtx common/mtxcom/mtx,ltrace,mtxstate,csub0 call DeleteCriticalSection(mtx) return end subroutine cs_destroy subroutine th_create(sub) use dfmt external sub ith=CreateThread(0,0,sub,0,0,id) return end subroutine th_create subroutine th_exit use dfmt ncode=0 call ExitThread(ncode) return end subroutine th_exit subroutine cs_lock(csub) use dfmt character*(*) csub character*12 csub0 integer*8 mtx common/mtxcom/mtx,ltrace,mtxstate,csub0 n=TryEnterCriticalSection(mtx) if(n.eq.0) then ! Another thread has already locked the mutex call EnterCriticalSection(mtx) iz=index(csub0,' ') if(ltrace.ge.1) print*,'"',csub,'" requested the mutex when "', & csub0(:iz-1),'" owned it.' endif mtxstate=1 csub0=csub if(ltrace.ge.3) print*,'Mutex locked by ',csub return end subroutine cs_lock subroutine cs_unlock use dfmt character*12 csub0 integer*8 mtx common/mtxcom/mtx,ltrace,mtxstate,csub0 mtxstate=0 if(ltrace.ge.3) print*,'Mutex unlocked' call LeaveCriticalSection(mtx) return end subroutine cs_unlock wsjt_9.3.r2792/avemsg65.f0000664000175000017500000000374411563256730013220 0ustar jtnjtn subroutine avemsg65(mseg,mode65,ndepth,decoded,nused, + nq1,nq2,neme,mycall,hiscall,hisgrid,qual,ns,ncount) C Decodes averaged JT65 data for the specified segment (mseg=1 or 2). parameter (MAXAVE=120) !Max avg count is 120 character decoded*22,deepmsg*22 character mycall*12,hiscall*12,hisgrid*6 real s3(64,63) common/ave/ppsave(64,63,MAXAVE),nflag(MAXAVE),nsave,iseg(MAXAVE) C Count the available spectra for this Monitor segment (mseg=1 or 2), C and the number of spectra flagged as good. nused=0 ns=0 nqual=0 deepmsg=' ' do i=1,nsave if(iseg(i).eq.mseg) then ns=ns+1 if(nflag(i).eq.1) nused=nused+1 endif enddo if(nused.lt.1) go to 100 C Compute the average of all flagged spectra for this segment. do j=1,63 call zero(s3(1,j),64) do n=1,nsave if(nflag(n).eq.1 .and. iseg(n).eq.mseg) then call add(s3(1,j),ppsave(1,j,n),s3(1,j),64) endif enddo enddo nadd=nused*mode65 call extract(s3,nadd,ncount,decoded) !Extract the message if(ncount.lt.0) decoded=' ' nqual=0 C Possibly should pass nadd=nused, also: if(ndepth.ge.3) then flipx=1.0 !Normal flip not relevant for ave msg call deep65(s3,mode65,neme,flipx,mycall,hiscall,hisgrid, + deepmsg,qual) nqual=qual if(nqual.lt.nq1) deepmsg=' ' if(nqual.ge.nq1 .and. nqual.lt.nq2) deepmsg(19:19)='?' else deepmsg=' ' qual=0. endif if(ncount.lt.0) decoded=deepmsg C Suppress "birdie messages": if(decoded(1:7).eq.'000AAA ') decoded=' ' if(decoded(1:7).eq.'0L6MWK ') decoded=' ' 100 if(nused.lt.1) decoded=' ' return end wsjt_9.3.r2792/configure.ac0000664000175000017500000001301011242615363013660 0ustar jtnjtndnl $Id: configure.ac 1322 2009-08-18 21:19:47Z va3db $ dnl Process this file with autoconf to produce a configure script. dnl AC_PREREQ(2.61) dnl Sneaky way to get an Id tag into the configure script AC_COPYRIGHT([$Id: configure.ac 1322 2009-08-18 21:19:47Z va3db $]) AC_INIT([wsjt],[7.04]) fail=0 AC_PREFIX_DEFAULT("/usr/local") OLD_CFLAGS="$CFLAGS" dnl Checks for programs. AC_PROG_CC AC_LANG(C) AC_PROG_F77 dnl Make sure autoconf doesn't interfere with cflags -jmallett CFLAGS="$OLD_CFLAGS" dnl Lets guess at some likely places for extra libs/includes XXX -db CPPFLAGS="-I/usr/local/include ${CPPFLAGS}" LDFLAGS="-L/usr/local/lib ${LDFLAGS}" LIBS=" -lpthread ${LIBS}" FFLAGS_GFORTRAN="${FFLAGS} -fno-range-check -ffixed-line-length-none\ -Wall -fbounds-check -fno-second-underscore -fPIC" FFLAGS_G95="${FFLAGS} -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC" #-Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC AX_CHECK_GFORTRAN AX_CHECK_PORTAUDIO if test "$ac_cv_c_compiler_gnu" = yes; then AC_MSG_CHECKING(if $CC is Apple GCC) if expr "`$CC -v 2>&1 | tail -1`" : ".*Apple" >/dev/null; then AppleGCC=yes else AppleGCC=no fi AC_MSG_RESULT($AppleGCC) CFLAGS="$CFLAGS -Wall -O0" fi dnl If we support -g, use it! if test "$ac_cv_prog_cc_g" = yes; then CFLAGS="$CFLAGS -g" fi dnl jdc -- If CFLAGS is defined, best use it everywhere... dnl NOTE: jv says it must be added to the *END*, because things like dnl "gcc -O9 -O2" will result in -O2 getting preference. How stupid. if test ! -z "$CFLAGS"; then CFLAGS="$CFLAGS $CFLAGS" fi AC_ISC_POSIX AC_C_INLINE AC_PROG_GCC_TRADITIONAL AC_PROG_MAKE_SET AC_PROG_INSTALL AC_PATH_PROG(RM, rm) AC_PATH_PROG(CP, cp) AC_PATH_PROG(MV, mv) AC_PATH_PROG(LN, ln) AC_PATH_PROG(SED, sed) AC_PATH_PROG(AR, ar) AC_PATH_PROG(LD, ld) AC_PATH_PROG(TEST, [test], [test]) AC_PATH_PROG(PYTHON, python) AC_PATH_PROG(F2PY, f2py) AC_SUBST(VERSION, "${version}") AC_MSG_CHECKING([OS]) OS=`uname` AC_SUBST(OS, "${OS}") dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([inttypes.h stdint.h sys/resource.h sys/param.h errno.h \ sys/syslog.h stddef.h libgen.h sys/wait.h wait.h stdio.h termios.h \ sys/resource.h linux/ppdev.h dev/ppbus/ppi.h sys/stat.h fcntl.h sys/ioctl.h ]) AC_HEADER_TIME AC_CHECK_HEADER([fftw3.h], [HAS_FFTW3_H=1], [HAS_FFTW3_H=0]) AC_CHECK_HEADER([samplerate.h], [HAS_SAMPLERATE_H=1], [HAS_SAMPLERATE_H=0]) dnl See whether we can include both string.h and strings.h. AC_CACHE_CHECK([whether string.h and strings.h may both be included], gcc_cv_header_string, [ AC_COMPILE_IFELSE( [#include #include ], [gcc_cv_header_string=yes], [gcc_cv_header_string=no]) ]) if test "$gcc_cv_header_string" = "yes"; then AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h]) fi dnl check for a fortran shim entry point AC_CHECK_LIB(fftw3f, sfftw_destroy_plan_, \ [HAS_FFTW3FLIBS=1], [HAS_FFTW3FLIBS=0]) dnl Check for stdarg.h - if we can't find it, halt configure AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - wsjt will not compile without it **])]) dnl Debug-related options dnl ===================== AC_ARG_ENABLE(clobber, AC_HELP_STRING([--enable-clobber], [Don't preserve old binaries on make install]), [clobber=$enableval], [clobber=no]) if test "$clobber" = yes; then AC_SUBST(CLOBBER, yes) fi AC_ARG_ENABLE(assert, AC_HELP_STRING([--enable-assert],[Enable assert().]), [assert=$enableval], [assert=no]) if test "$assert" = no; then AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.]) fi if test "$prefix" = "NONE"; then prefix=${ac_default_prefix} else dnl Don't get bitten by Cygwin's stupidity if the user specified dnl a custom prefix with a trailing slash prefix=`echo ${ac_default_prefix} | sed 's/\/$//'` fi dnl sanity tests. dnl ============= if test -z $FC ; then fail=1 echo "You need g95 or gfortran to compile this program!" fi if test $HAS_FFTW3_H -eq 0; then fail=1 echo "You need to install the fftw3 libraries" fi if test $HAS_SAMPLERATE_H -eq 0; then fail=1 echo "You need to install the samplerate library" else AC_DEFINE(HAS_SAMPLERATE_H, 1, ) LIBS="${LIBS} -lsamplerate" fi if test $HAS_PORTAUDIO -eq 1; then AC_DEFINE(HAS_PORTAUDIO, 1, ) AC_DEFINE(HAS_PORTAUDIO_H, 1, ) AC_DEFINE(HAS_PORTAUDIO_LIB, 1, ) else fail=1 echo "This program needs portaudio v19 to compile." echo "Please use --with-portaudio-include-dir= and" echo " --with-portaudio-lib-dir= to set the paths." fi if test $HAS_FFTW3_H -eq 1; then AC_DEFINE(HAS_FFTW3_H, 1, ) else fail=1 echo "You are missing the fftw3.h include file" fi if test $HAS_FFTW3FLIBS -eq 1; then LIBS="${LIBS} -lfftw3f" AC_DEFINE(HAS_FFTW3FLIBS, 1, ) else fail=1 echo "You are missing the fortran shim libs in libfftw3." fi if test "$F2PY" = ""; then echo "You are missing f2py, trying local copy." F2PY="python f2py.py"; fi dnl dnl If fail a pre-requisite then fail dnl if test $fail -eq 1; then AC_MSG_ERROR([Please check error messages and install missing packages.]) fi dnl AC_SUBST(PREFIX, "${prefix}") AC_SUBST(CPPFLAGS, "${CPPFLAGS}") AC_SUBST(LDFLAGS, "${LDFLAGS}") AC_SUBST(LIBS, "${LIBS}") AC_SUBST(CFLAGS) AC_SUBST(FFLAGS) AC_SUBST(F2PY, "${F2PY}") AC_CONFIG_FILES(Makefile) AC_OUTPUT dnl do summary echo echo "***************" if test $g95 = "yes"; then echo "Using g95 as fortran compiler."; elif test $gfortran = "yes"; then echo "Using gfortran as fortran compiler."; fi echo echo "Compiling $PACKAGE_NAME $version" echo echo "Installing into: $prefix" echo wsjt_9.3.r2792/ftn_init.f900000664000175000017500000000421111461563162013531 0ustar jtnjtn! Fortran logical units used in WSJT6 ! ! 10 wave files read from disk ! 11 decoded.txt ! 12 decoded.ave ! 13 tsky.dat ! 14 azel.dat ! 15 debug.txt ! 16 c:/wsjt.reg ! 17 wave files written to disk ! 18 test file to be transmitted (wsjtgen.f90) ! 19 dmet_* files ! 20 prefixes.txt ! 21 ALL.TXT ! 22 kvasd.dat ! 23 CALL3.TXT ! 24 FFT_plans.txt ! 25 *.eco !------------------------------------------------ ftn_init subroutine ftn_init !f2py threadsafe character*1 fname*80 include 'gcom1.f90' include 'gcom2.f90' include 'gcom3.f90' include 'gcom4.f90' character*12 csub0 integer*8 mtx integer*2 nsky common/sky/ nsky(360,180) common/mtxcom/mtx,ltrace,mtxstate,csub0 call cs_init call cs_lock('ftn_init') iflag=1 i=ptt(nport,pttport,0,iflag,iptt) !Clear DTR line iflag=0 i=ptt(nport,pttport,0,iflag,iptt) !Clear RTS line addpfx=' ' do i=80,1,-1 if(AppDir(i:i).ne.' ') goto 1 enddo 1 iz=i lenappdir=iz call pfxdump(appdir(:iz)//'/prefixes.txt') open(11,file=appdir(:iz)//'/decoded.txt',status='unknown', & err=910) endfile 11 open(12,file=appdir(:iz)//'/decoded.ave',status='unknown', & err=920) endfile 12 open(15,file=appdir(:iz)//'/debug.txt',status='unknown', & err=940) open(21,file=appdir(:iz)//'/ALL.TXT',status='unknown', & position='append',err=950) open(22,file=appdir(:iz)//'/kvasd.dat',access='direct',recl=1024, & status='unknown') call zero(nsky,180*180) fname=appdir(:iz)//'/TSKY.DAT' call rfile2(fname,nsky,129600,nr) if(nr.ne.129600) go to 10 nsky4=nsky(1,1) if (iabs(nsky4).gt.500) then write(*,1000) 1000 format('Converting TSKY.DAT') do i=1,360 do j=1,180 nsky(i,j) = iswap_short(nsky(i,j)) enddo enddo endif 10 call cs_unlock return 910 print*,'Error opening DECODED.TXT' stop 920 print*,'Error opening DECODED.AVE' stop 940 print*,'Error opening DEBUG.TXT' stop 950 print*,'Error opening ALL.TXT' stop end subroutine ftn_init wsjt_9.3.r2792/LICENSE.TXT0000775000175000017500000004336311015074716013075 0ustar jtnjtnThe source code for WSJT is made available under the GNU General Public License. ##################################################################### GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, 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 St, 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. wsjt_9.3.r2792/configure0000775000175000017500000057173311242615363013326 0ustar jtnjtn#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.62 for wsjt 7.04. # # $Id: configure.ac 1234 2009-05-17 12:27:34Z va3db $ # # 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='wsjt' PACKAGE_TARNAME='wsjt' PACKAGE_VERSION='7.04' PACKAGE_STRING='wsjt 7.04' PACKAGE_BUGREPORT='' ac_default_prefix="/usr/local" # 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='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT F77 FFLAGS ac_ct_F77 G95 GFORTRAN FC_LIB_PATH FC FCV CPP GREP EGREP SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RM CP MV LN SED AR LD TEST PYTHON F2PY VERSION OS CLOBBER PREFIX LIBOBJS LTLIBOBJS' ac_subst_files='' ac_user_opts=' enable_option_checking enable_g95 enable_gfortran with_portaudio_include_dir with_portaudio_lib_dir enable_clobber enable_assert ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS F77 FFLAGS 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 wsjt 7.04 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/wsjt] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of wsjt 7.04:";; 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-g95 Use G95 compiler if available. --enable-gfortran Use gfortran compiler if available. --enable-clobber Don't preserve old binaries on make install --enable-assert Enable assert(). Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-portaudio-include-dir= path to portaudio include files --with-portaudio-lib-dir= path to portaudio lib files 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 F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags 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. _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 wsjt configure 7.04 generated by GNU Autoconf 2.62 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. $Id: configure.ac 1234 2009-05-17 12:27:34Z va3db $ _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 wsjt $as_me 7.04, which was generated by GNU Autoconf 2.62. 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: 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 fail=0 OLD_CFLAGS="$CFLAGS" 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: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&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: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $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: 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: 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: 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: 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 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_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn 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_F77+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # 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_F77="$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 F77=$ac_cv_prog_F77 if test -n "$F77"; then { $as_echo "$as_me:$LINENO: result: $F77" >&5 $as_echo "$F77" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn 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_F77+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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_F77="$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_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 $as_echo "$ac_ct_F77" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for Fortran 77 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); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { $as_echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } if test "${ac_cv_f77_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _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_f77_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_f77_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 $as_echo "$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { $as_echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 $as_echo_n "checking whether $F77 accepts -g... " >&6; } if test "${ac_cv_prog_f77_g+set}" = set; then $as_echo_n "(cached) " >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _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_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_f77_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 $as_echo "$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi if test $ac_compiler_gnu = yes; then G77=yes else G77= 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 CFLAGS="$OLD_CFLAGS" CPPFLAGS="-I/usr/local/include ${CPPFLAGS}" LDFLAGS="-L/usr/local/lib ${LDFLAGS}" LIBS=" -lpthread ${LIBS}" FFLAGS_GFORTRAN="${FFLAGS} -fno-range-check -ffixed-line-length-none\ -Wall -fbounds-check -fno-second-underscore -fPIC" FFLAGS_G95="${FFLAGS} -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC" #-Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC # Check whether --enable-g95 was given. if test "${enable_g95+set}" = set; then enableval=$enable_g95; g95=$enableval else g95=no fi # Check whether --enable-gfortran was given. if test "${enable_gfortran+set}" = set; then enableval=$enable_gfortran; gfortran=$enableval else gfortran=no fi FCV="" if test -n ${FC} ; then gfortran_name_part=`echo ${FC} | cut -c 1-8` if test ${gfortran_name_part} = "gfortran" ; then gfortran_name=${FC} FC_LIB_PATH=`${FC} -print-file-name=` g95=no gfortran=yes FFLAGS="${FFLAGS_GFORTRAN}" FCV="gnu95" else unset ${FC} fi fi { $as_echo "$as_me:$LINENO: checking uname -s" >&5 $as_echo_n "checking uname -s... " >&6; } case `uname -s` in CYGWIN*) { $as_echo "$as_me:$LINENO: result: Cygwin" >&5 $as_echo "Cygwin" >&6; } CYGWIN=yes ;; SunOS*) { $as_echo "$as_me:$LINENO: result: SunOS or Solaris" >&5 $as_echo "SunOS or Solaris" >&6; } cat >>confdefs.h <<\_ACEOF #define __EXTENSIONS__ 1 _ACEOF ;; FreeBSD*) if test -z ${gfortran_name} ; then gfortran_name=`grep FC: /usr/ports/Mk/bsd.gcc.mk | head -1 |awk '{print $2}'` fi FCV_G95="g95" ;; *) FCV_G95="g95" { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } ;; esac if test -z $gfortran_name ; then gfortran_name="gfortran" fi # Extract the first word of "g95", so it can be a program name with args. set dummy g95; 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_path_G95+set}" = set; then $as_echo_n "(cached) " >&6 else case $G95 in [\\/]* | ?:[\\/]*) ac_cv_path_G95="$G95" # Let the user override the test with a path. ;; *) 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_path_G95="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi G95=$ac_cv_path_G95 if test -n "$G95"; then { $as_echo "$as_me:$LINENO: result: $G95" >&5 $as_echo "$G95" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "${gfortran_name}", so it can be a program name with args. set dummy ${gfortran_name}; 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_path_GFORTRAN+set}" = set; then $as_echo_n "(cached) " >&6 else case $GFORTRAN in [\\/]* | ?:[\\/]*) ac_cv_path_GFORTRAN="$GFORTRAN" # Let the user override the test with a path. ;; *) 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_path_GFORTRAN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GFORTRAN=$ac_cv_path_GFORTRAN if test -n "$GFORTRAN"; then { $as_echo "$as_me:$LINENO: result: $GFORTRAN" >&5 $as_echo "$GFORTRAN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z ${GFORTRAN} ; then echo "*** gfortran compiler found at ${GFORTRAN}" if test "${gfortran}" = yes; then FC_LIB_PATH=`${GFORTRAN} -print-file-name=` FC=`basename ${GFORTRAN}` g95=no FFLAGS="${FFLAGS_GFORTRAN}" FCV="gnu95" fi else echo "*** No gfortran compiler found" fi if test ! -z ${G95} ; then echo "*** g95 compiler found at ${G95}" if test "${g95}" = yes; then FC_LIB_PATH=`${G95} -print-file-name=` FC=`basename ${G95}` gfortran=no FFLAGS="${FFLAGS_G95}" FCV=${FCV_G95} fi else echo "*** No g95 compiler found" fi if test -z ${FC} ; then if test ! -z ${GFORTRAN} ; then if test "${g95}" = yes; then echo "You enabled g95, but no g95 compiler found, defaulting to gfortran instead" fi FC_LIB_PATH=`${GFORTRAN} -print-file-name=` FC=`basename ${GFORTRAN}` g95=no gfortran=yes FFLAGS="${FFLAGS_GFORTRAN}" FCV="gnu95" elif test ! -z $G95 ; then if test "${gfortran}" = yes; then echo "You enabled gfortran, but no gfortran compiler found, defaulting to g95 instead" fi FC_LIB_PATH=`${G95} -print-file-name=` FC=`basename ${G95}` g95=yes gfortran=no FFLAGS="${FFLAGS_G95}" FCV=${FCV_G95} fi fi cat >>confdefs.h <<_ACEOF #define FC_LIB_PATH "${FC_LIB_PATH}" _ACEOF FC_LIB_PATH="${FC_LIB_PATH}" cat >>confdefs.h <<_ACEOF #define FC "${FC}" _ACEOF FC="${FC}" FCV="${FCV}" HAS_PORTAUDIO_H=0 HAS_PORTAUDIO_LIB=0 HAS_PORTAUDIO=0 { $as_echo "$as_me:$LINENO: checking for a v19 portaudio " >&5 $as_echo_n "checking for a v19 portaudio ... " >&6; } portaudio_lib_dir="/usr/lib" portaudio_include_dir="/usr/include" # Check whether --with-portaudio-include-dir was given. if test "${with_portaudio_include_dir+set}" = set; then withval=$with_portaudio_include_dir; portaudio_include_dir=$with_portaudio_include_dir fi # Check whether --with-portaudio-lib-dir was given. if test "${with_portaudio_lib_dir+set}" = set; then withval=$with_portaudio_lib_dir; portaudio_lib_dir=$with_portaudio_lib_dir fi if test -e ${portaudio_include_dir}/portaudio.h; then HAS_PORTAUDIO_H=1 fi if test -e ${portaudio_lib_dir}/libportaudio.so \ -o -e ${portaudio_lib_dir}/libportaudio.a;then HAS_PORTAUDIO_LIB=1 fi if test ${HAS_PORTAUDIO_H} -eq 1 -a ${HAS_PORTAUDIO_LIB} -eq 1; then LDFLAGS="-L${portaudio_lib_dir} ${LDFLAGS}" LIBS="${LIBS} -lportaudio" CPPFLAGS="-I${portaudio_include_dir} ${CPPFLAGS}" { $as_echo "$as_me:$LINENO: checking for Pa_GetVersion in -lportaudio" >&5 $as_echo_n "checking for Pa_GetVersion in -lportaudio... " >&6; } if test "${ac_cv_lib_portaudio_Pa_GetVersion+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lportaudio $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 Pa_GetVersion (); int main () { return Pa_GetVersion (); ; 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_portaudio_Pa_GetVersion=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_portaudio_Pa_GetVersion=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_portaudio_Pa_GetVersion" >&5 $as_echo "$ac_cv_lib_portaudio_Pa_GetVersion" >&6; } if test $ac_cv_lib_portaudio_Pa_GetVersion = yes; then \ HAS_PORTAUDIO_VERSION=1 else HAS_PORTAUDIO_VERSION=0 fi if test ${HAS_PORTAUDIO_VERSION} -eq 0; then { $as_echo "$as_me:$LINENO: result: This is likely portaudio v18; you need portaudio v19" >&5 $as_echo "This is likely portaudio v18; you need portaudio v19" >&6; } else HAS_PORTAUDIO=1 fi else { $as_echo "$as_me:$LINENO: result: portaudio not found trying FreeBSD paths " >&5 $as_echo "portaudio not found trying FreeBSD paths " >&6; } portaudio_lib_dir="/usr/local/lib/portaudio2" portaudio_include_dir="/usr/local/include/portaudio2" { $as_echo "$as_me:$LINENO: checking for a v19 portaudio in FreeBSD paths." >&5 $as_echo_n "checking for a v19 portaudio in FreeBSD paths.... " >&6; } HAS_PORTAUDIO_H=0 HAS_PORTAUDIO_LIB=0 if test -e ${portaudio_include_dir}/portaudio.h; then HAS_PORTAUDIO_H=1 fi if test -e ${portaudio_lib_dir}/libportaudio.so \ -o -e ${portaudio_lib_dir}/libportaudio.a;then HAS_PORTAUDIO_LIB=1 fi if test ${HAS_PORTAUDIO_H} -eq 1 -a ${HAS_PORTAUDIO_LIB} -eq 1; then { $as_echo "$as_me:$LINENO: result: found portaudio in FreeBSD paths, double checking it is v19 " >&5 $as_echo "found portaudio in FreeBSD paths, double checking it is v19 " >&6; } LDFLAGS="-L${portaudio_lib_dir} ${LDFLAGS}" LIBS="${LIBS} -lportaudio" CPPFLAGS="-I${portaudio_include_dir} ${CPPFLAGS}" { $as_echo "$as_me:$LINENO: checking for Pa_GetVersion in -lportaudio" >&5 $as_echo_n "checking for Pa_GetVersion in -lportaudio... " >&6; } if test "${ac_cv_lib_portaudio_Pa_GetVersion+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lportaudio $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 Pa_GetVersion (); int main () { return Pa_GetVersion (); ; 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_portaudio_Pa_GetVersion=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_portaudio_Pa_GetVersion=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_portaudio_Pa_GetVersion" >&5 $as_echo "$ac_cv_lib_portaudio_Pa_GetVersion" >&6; } if test $ac_cv_lib_portaudio_Pa_GetVersion = yes; then \ HAS_PORTAUDIO_VERSION=1 else HAS_PORTAUDIO_VERSION=0 fi if test ${HAS_PORTAUDIO_VERSION} -eq 0; then { $as_echo "$as_me:$LINENO: result: How did you end up with a portaudio v18 here?" >&5 $as_echo "How did you end up with a portaudio v18 here?" >&6; } else { $as_echo "$as_me:$LINENO: result: found v19" >&5 $as_echo "found v19" >&6; } HAS_PORTAUDIO=1 HAS_PORTAUDIO_H=1 fi fi fi if test "$ac_cv_c_compiler_gnu" = yes; then { $as_echo "$as_me:$LINENO: checking if $CC is Apple GCC" >&5 $as_echo_n "checking if $CC is Apple GCC... " >&6; } if expr "`$CC -v 2>&1 | tail -1`" : ".*Apple" >/dev/null; then AppleGCC=yes else AppleGCC=no fi { $as_echo "$as_me:$LINENO: result: $AppleGCC" >&5 $as_echo "$AppleGCC" >&6; } CFLAGS="$CFLAGS -Wall -O0" fi if test "$ac_cv_prog_cc_g" = yes; then CFLAGS="$CFLAGS -g" fi if test ! -z "$CFLAGS"; then CFLAGS="$CFLAGS $CFLAGS" fi { $as_echo "$as_me:$LINENO: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if test "${ac_cv_search_strerror+set}" = set; then $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi 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_search_strerror=$ac_res else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_strerror+set}" = set; then break fi done if test "${ac_cv_search_strerror+set}" = set; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:$LINENO: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if test "${ac_cv_c_inline+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _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_c_inline=$ac_kw 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 test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; 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 { $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: 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" if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if test "${ac_cv_prog_gcc_traditional+set}" = set; then $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { $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 ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$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\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 $as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$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. # 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' # Extract the first word of "rm", so it can be a program name with args. set dummy rm; 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_path_RM+set}" = set; then $as_echo_n "(cached) " >&6 else case $RM in [\\/]* | ?:[\\/]*) ac_cv_path_RM="$RM" # Let the user override the test with a path. ;; *) 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_path_RM="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RM=$ac_cv_path_RM if test -n "$RM"; then { $as_echo "$as_me:$LINENO: result: $RM" >&5 $as_echo "$RM" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "cp", so it can be a program name with args. set dummy cp; 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_path_CP+set}" = set; then $as_echo_n "(cached) " >&6 else case $CP in [\\/]* | ?:[\\/]*) ac_cv_path_CP="$CP" # Let the user override the test with a path. ;; *) 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_path_CP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CP=$ac_cv_path_CP if test -n "$CP"; then { $as_echo "$as_me:$LINENO: result: $CP" >&5 $as_echo "$CP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "mv", so it can be a program name with args. set dummy mv; 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_path_MV+set}" = set; then $as_echo_n "(cached) " >&6 else case $MV in [\\/]* | ?:[\\/]*) ac_cv_path_MV="$MV" # Let the user override the test with a path. ;; *) 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_path_MV="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MV=$ac_cv_path_MV if test -n "$MV"; then { $as_echo "$as_me:$LINENO: result: $MV" >&5 $as_echo "$MV" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "ln", so it can be a program name with args. set dummy ln; 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_path_LN+set}" = set; then $as_echo_n "(cached) " >&6 else case $LN in [\\/]* | ?:[\\/]*) ac_cv_path_LN="$LN" # Let the user override the test with a path. ;; *) 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_path_LN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LN=$ac_cv_path_LN if test -n "$LN"; then { $as_echo "$as_me:$LINENO: result: $LN" >&5 $as_echo "$LN" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "sed", so it can be a program name with args. set dummy sed; 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_path_SED+set}" = set; then $as_echo_n "(cached) " >&6 else case $SED in [\\/]* | ?:[\\/]*) ac_cv_path_SED="$SED" # Let the user override the test with a path. ;; *) 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_path_SED="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SED=$ac_cv_path_SED if test -n "$SED"; then { $as_echo "$as_me:$LINENO: result: $SED" >&5 $as_echo "$SED" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; 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_path_AR+set}" = set; then $as_echo_n "(cached) " >&6 else case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; *) 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_path_AR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi AR=$ac_cv_path_AR if test -n "$AR"; then { $as_echo "$as_me:$LINENO: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "ld", so it can be a program name with args. set dummy ld; 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_path_LD+set}" = set; then $as_echo_n "(cached) " >&6 else case $LD in [\\/]* | ?:[\\/]*) ac_cv_path_LD="$LD" # Let the user override the test with a path. ;; *) 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_path_LD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LD=$ac_cv_path_LD if test -n "$LD"; then { $as_echo "$as_me:$LINENO: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "test", so it can be a program name with args. set dummy test; 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_path_TEST+set}" = set; then $as_echo_n "(cached) " >&6 else case $TEST in [\\/]* | ?:[\\/]*) ac_cv_path_TEST="$TEST" # Let the user override the test with a path. ;; *) 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_path_TEST="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_TEST" && ac_cv_path_TEST="test" ;; esac fi TEST=$ac_cv_path_TEST if test -n "$TEST"; then { $as_echo "$as_me:$LINENO: result: $TEST" >&5 $as_echo "$TEST" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "python", so it can be a program name with args. set dummy python; 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_path_PYTHON+set}" = set; then $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) 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_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:$LINENO: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "f2py", so it can be a program name with args. set dummy f2py; 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_path_F2PY+set}" = set; then $as_echo_n "(cached) " >&6 else case $F2PY in [\\/]* | ?:[\\/]*) ac_cv_path_F2PY="$F2PY" # Let the user override the test with a path. ;; *) 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_path_F2PY="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi F2PY=$ac_cv_path_F2PY if test -n "$F2PY"; then { $as_echo "$as_me:$LINENO: result: $F2PY" >&5 $as_echo "$F2PY" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi VERSION="${version}" { $as_echo "$as_me:$LINENO: checking OS" >&5 $as_echo_n "checking OS... " >&6; } OS=`uname` OS="${OS}" { $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; } if test `eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` = yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in inttypes.h stdint.h sys/resource.h sys/param.h errno.h \ sys/syslog.h stddef.h libgen.h sys/wait.h wait.h stdio.h termios.h \ sys/resource.h linux/ppdev.h dev/ppbus/ppi.h sys/stat.h fcntl.h sys/ioctl.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;} ;; 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 if test `eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` = 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 whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if test "${ac_cv_header_time+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 int main () { if ((struct tm *) 0) 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 ac_cv_header_time=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi if test "${ac_cv_header_fftw3_h+set}" = set; then { $as_echo "$as_me:$LINENO: checking for fftw3.h" >&5 $as_echo_n "checking for fftw3.h... " >&6; } if test "${ac_cv_header_fftw3_h+set}" = set; then $as_echo_n "(cached) " >&6 fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_fftw3_h" >&5 $as_echo "$ac_cv_header_fftw3_h" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking fftw3.h usability" >&5 $as_echo_n "checking fftw3.h 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 _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 fftw3.h presence" >&5 $as_echo_n "checking fftw3.h 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 _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: fftw3.h: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: fftw3.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: fftw3.h: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: fftw3.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: fftw3.h: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: fftw3.h: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: fftw3.h: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: fftw3.h: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: fftw3.h: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: fftw3.h: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: fftw3.h: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: fftw3.h: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: fftw3.h: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: fftw3.h: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: fftw3.h: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: fftw3.h: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for fftw3.h" >&5 $as_echo_n "checking for fftw3.h... " >&6; } if test "${ac_cv_header_fftw3_h+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_header_fftw3_h=$ac_header_preproc fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_fftw3_h" >&5 $as_echo "$ac_cv_header_fftw3_h" >&6; } fi if test $ac_cv_header_fftw3_h = yes; then HAS_FFTW3_H=1 else HAS_FFTW3_H=0 fi if test "${ac_cv_header_samplerate_h+set}" = set; then { $as_echo "$as_me:$LINENO: checking for samplerate.h" >&5 $as_echo_n "checking for samplerate.h... " >&6; } if test "${ac_cv_header_samplerate_h+set}" = set; then $as_echo_n "(cached) " >&6 fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_samplerate_h" >&5 $as_echo "$ac_cv_header_samplerate_h" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking samplerate.h usability" >&5 $as_echo_n "checking samplerate.h 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 _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 samplerate.h presence" >&5 $as_echo_n "checking samplerate.h 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 _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: samplerate.h: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: samplerate.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: samplerate.h: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: samplerate.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: samplerate.h: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: samplerate.h: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: samplerate.h: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: samplerate.h: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: samplerate.h: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: samplerate.h: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: samplerate.h: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: samplerate.h: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: samplerate.h: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: samplerate.h: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: samplerate.h: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: samplerate.h: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for samplerate.h" >&5 $as_echo_n "checking for samplerate.h... " >&6; } if test "${ac_cv_header_samplerate_h+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_header_samplerate_h=$ac_header_preproc fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_samplerate_h" >&5 $as_echo "$ac_cv_header_samplerate_h" >&6; } fi if test $ac_cv_header_samplerate_h = yes; then HAS_SAMPLERATE_H=1 else HAS_SAMPLERATE_H=0 fi { $as_echo "$as_me:$LINENO: checking whether string.h and strings.h may both be included" >&5 $as_echo_n "checking whether string.h and strings.h may both be included... " >&6; } if test "${gcc_cv_header_string+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF #include #include _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 gcc_cv_header_string=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gcc_cv_header_string=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $gcc_cv_header_string" >&5 $as_echo "$gcc_cv_header_string" >&6; } if test "$gcc_cv_header_string" = "yes"; then cat >>confdefs.h <<\_ACEOF #define STRING_WITH_STRINGS 1 _ACEOF fi { $as_echo "$as_me:$LINENO: checking for sfftw_destroy_plan_ in -lfftw3f" >&5 $as_echo_n "checking for sfftw_destroy_plan_ in -lfftw3f... " >&6; } if test "${ac_cv_lib_fftw3f_sfftw_destroy_plan_+set}" = set; then $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3f $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 sfftw_destroy_plan_ (); int main () { return sfftw_destroy_plan_ (); ; 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_fftw3f_sfftw_destroy_plan_=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_fftw3f_sfftw_destroy_plan_=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_fftw3f_sfftw_destroy_plan_" >&5 $as_echo "$ac_cv_lib_fftw3f_sfftw_destroy_plan_" >&6; } if test $ac_cv_lib_fftw3f_sfftw_destroy_plan_ = yes; then \ HAS_FFTW3FLIBS=1 else HAS_FFTW3FLIBS=0 fi if test "${ac_cv_header_stdarg_h+set}" = set; then { $as_echo "$as_me:$LINENO: checking for stdarg.h" >&5 $as_echo_n "checking for stdarg.h... " >&6; } if test "${ac_cv_header_stdarg_h+set}" = set; then $as_echo_n "(cached) " >&6 fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdarg_h" >&5 $as_echo "$ac_cv_header_stdarg_h" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking stdarg.h usability" >&5 $as_echo_n "checking stdarg.h 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 _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 stdarg.h presence" >&5 $as_echo_n "checking stdarg.h 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 _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: stdarg.h: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: stdarg.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: stdarg.h: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: stdarg.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: stdarg.h: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: stdarg.h: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: stdarg.h: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: stdarg.h: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: stdarg.h: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: stdarg.h: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: stdarg.h: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: stdarg.h: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: stdarg.h: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: stdarg.h: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: stdarg.h: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: stdarg.h: in the future, the compiler will take precedence" >&2;} ;; esac { $as_echo "$as_me:$LINENO: checking for stdarg.h" >&5 $as_echo_n "checking for stdarg.h... " >&6; } if test "${ac_cv_header_stdarg_h+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_header_stdarg_h=$ac_header_preproc fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdarg_h" >&5 $as_echo "$ac_cv_header_stdarg_h" >&6; } fi if test $ac_cv_header_stdarg_h = yes; then : else { { $as_echo "$as_me:$LINENO: error: ** stdarg.h could not be found - wsjt will not compile without it **" >&5 $as_echo "$as_me: error: ** stdarg.h could not be found - wsjt will not compile without it **" >&2;} { (exit 1); exit 1; }; } fi # Check whether --enable-clobber was given. if test "${enable_clobber+set}" = set; then enableval=$enable_clobber; clobber=$enableval else clobber=no fi if test "$clobber" = yes; then CLOBBER=yes fi # Check whether --enable-assert was given. if test "${enable_assert+set}" = set; then enableval=$enable_assert; assert=$enableval else assert=no fi if test "$assert" = no; then cat >>confdefs.h <<\_ACEOF #define NDEBUG 1 _ACEOF fi if test "$prefix" = "NONE"; then prefix=${ac_default_prefix} else prefix=`echo ${ac_default_prefix} | sed 's/\/$//'` fi if test -z $FC ; then fail=1 echo "You need g95 or gfortran to compile this program!" fi if test $HAS_FFTW3_H -eq 0; then fail=1 echo "You need to install the fftw3 libraries" fi if test $HAS_SAMPLERATE_H -eq 0; then fail=1 echo "You need to install the samplerate library" else cat >>confdefs.h <<\_ACEOF #define HAS_SAMPLERATE_H 1 _ACEOF LIBS="${LIBS} -lsamplerate" fi if test $HAS_PORTAUDIO -eq 1; then cat >>confdefs.h <<\_ACEOF #define HAS_PORTAUDIO 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAS_PORTAUDIO_H 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAS_PORTAUDIO_LIB 1 _ACEOF else fail=1 echo "This program needs portaudio v19 to compile." echo "Please use --with-portaudio-include-dir= and" echo " --with-portaudio-lib-dir= to set the paths." fi if test $HAS_FFTW3_H -eq 1; then cat >>confdefs.h <<\_ACEOF #define HAS_FFTW3_H 1 _ACEOF else fail=1 echo "You are missing the fftw3.h include file" fi if test $HAS_FFTW3FLIBS -eq 1; then LIBS="${LIBS} -lfftw3f" cat >>confdefs.h <<\_ACEOF #define HAS_FFTW3FLIBS 1 _ACEOF else fail=1 echo "You are missing the fortran shim libs in libfftw3." fi if test "$F2PY" = ""; then echo "You are missing f2py, trying local copy." F2PY="python f2py.py"; fi if test $fail -eq 1; then { { $as_echo "$as_me:$LINENO: error: Please check error messages and install missing packages." >&5 $as_echo "$as_me: error: Please check error messages and install missing packages." >&2;} { (exit 1); exit 1; }; } fi PREFIX="${prefix}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" LIBS="${LIBS}" F2PY="${F2PY}" 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}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.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 : ${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 wsjt $as_me 7.04, which was generated by GNU Autoconf 2.62. 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 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _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 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet 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 Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ wsjt config.status 7.04 configured by $0, generated by GNU Autoconf 2.62, 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' 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;; --he | --h | --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 _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 "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 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; }; } if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $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" eval set X " :F $CONFIG_FILES " 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 _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 $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; }; } ;; 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 echo echo "***************" if test $g95 = "yes"; then echo "Using g95 as fortran compiler."; elif test $gfortran = "yes"; then echo "Using gfortran as fortran compiler."; fi echo echo "Compiling $PACKAGE_NAME $version" echo echo "Installing into: $prefix" echo wsjt_9.3.r2792/geocentric.f0000664000175000017500000000070411015074716013670 0ustar jtnjtn subroutine geocentric(alat,elev,hlt,erad) implicit real*8 (a-h,o-z) C IAU 1976 flattening f, equatorial radius a f = 1.d0/298.257d0 a = 6378140.d0 c = 1.d0/sqrt(1.d0 + (-2.d0 + f)*f*sin(alat)*sin(alat)) arcf = (a*c + elev)*cos(alat) arsf = (a*(1.d0 - f)*(1.d0 - f)*c + elev)*sin(alat) hlt = datan2(arsf,arcf) erad = sqrt(arcf*arcf + arsf*arsf) erad = 0.001d0*erad return end wsjt_9.3.r2792/dot.f0000664000175000017500000000022511015074716012332 0ustar jtnjtn real*8 function dot(x,y) real*8 x(3),y(3) dot=0.d0 do i=1,3 dot=dot+x(i)*y(i) enddo return end wsjt_9.3.r2792/avecho.f900000664000175000017500000000656511756463535013214 0ustar jtnjtnsubroutine avecho(fname,ntime,y1,ibuf0,ntc,necho,nfrit,ndither, & dlatency,nsave,f1,nsum,nclearave,ss1,ss2) parameter (NBSIZE=1024*2048) character*24 fname integer*2 y1(NBSIZE) !Buffer for Rx data real d(28672) !Real audio data real s1(600) !Avg spectrum relative to initial Doppler echo freq real s2(600) !Avg spectrum with Dither and changing Doppler removed real ss1(-224:224) real ss2(-224:224) real tmp(600) integer nsum !Number of integrations real dop0 !Doppler shift for initial integration (Hz) real doppler !Doppler shift for current integration (Hz) real s(8192) real x(32770) complex c(0:16384) equivalence (x,c) common/echo/xdop(2),techo,AzMoon,ElMoon,mjd save s1,s2,dop0 if(ibuf0.lt.1) print*,'IBUF0:',ibuf0 sq=0. k=2048*(ibuf0-1) do i=1,14*2048 k=k+1 if(k.gt.NBSIZE) k=k-NBSIZE d(i)=y1(k) sq=sq + d(i)*d(i) enddo sigdB=db(sq/(14*2048)) - 58.5 if(sigdB.lt.-99.0) sigdB=-99.0 if(nclearave.ne.0) nsum=0 nclearave=0 if(nsum.eq.0) then dop0=2.0*xdop(1) !Remember the initial Doppler s1=0. s2=0. endif doppler=2.0*xdop(1) ! if(nsave.ne.0) write(26) fname,ntime,dop0,doppler,d(1:28672) dt=1.0/11025.0 df=11025.0/32768.0 istart=1 nz=14*2048 + 1 - istart x(1:28672)=d(istart:istart+28671) x(28673:)=0.0 call xfft(x,32768) fac=1.e-9 do i=1,8192 s(i)=fac * (real(c(i))**2 + aimag(c(i))**2) enddo fnominal=1500.0 !Nominal audio frequency w/o doppler or dither ia=nint((fnominal+dop0-nfrit)/df) ib=nint((f1+doppler-nfrit)/df) if(ia.lt.600 .or. ib.lt.600) go to 900 if(ia.gt.7590 .or. ib.gt.7590) go to 900 nsum=nsum+1 if(ntc.lt.1) ntc=1 u=1.0/nsum if(nsum.gt.ntc) u=1.0/ntc do i=1,600 s1(i)=(1.0-u)*s1(i) + u*s(ia+i-300) !Center at initial doppler freq s2(i)=(1.0-u)*s2(i) + u*s(ib+i-300) !Center at expected echo freq j=i-300 if(abs(j).le.224) then ss1(j)=s1(i) ss2(j)=s2(i) endif enddo if(nsave.ne.0) then call cs_lock('avecho') open(25,file=fname,status='unknown') do i=1,600 write(25,3001) (i-300)*df,s1(i),s2(i) 3001 format(f10.3,2f12.3) enddo call flush(25) close(25) call cs_unlock endif call pctile(s2,tmp,600,50,x0) call pctile(s2,tmp,600,84,x1) rms=x1-x0 peak=-1.e30 do i=1,600 if(s2(i).gt.peak) then peak=s2(i) ipk=i endif enddo s2half=0.5*(peak-x0) + x0 ia=ipk ib=ipk do i=1,100 if((ipk-i).lt.1) go to 11 ia=ipk-i if(s2(ia).le.s2half) goto 11 enddo 11 do i=1,100 if((ipk+i).gt.600) go to 21 ib=ipk+i if(s2(ib).le.s2half) goto 21 enddo 21 width=df*(ib-ia-1) exchsig=-99. if(x0.gt.0.0) echosig=10.0*log10(peak/x0 - 1.0) - 35.7 echodop=df*(ipk-300) snr=0. if(rms.gt.0.0) snr=(peak-x0)/rms NQual=(snr-2.5)/2.5 if(nsum.lt.12) NQual=(snr-3)/3 if(nsum.lt.8) NQual=(snr-3)/4 if(nsum.lt.4) NQual=(snr-4)/5 if(nsum.lt.2) NQual=0 if(NQual.lt.0) NQual=0 if(NQual.gt.10) NQual=10 call cs_lock('avecho') rewind 11 write(11,1010) nsum,sigdB,echosig,echodop,width,azmoon,elmoon,NQual 1010 format(i4,f6.1,f7.1,f8.1,3f6.1,i4) write(21,1010) nsum,sigdB,echosig,echodop,width,azmoon,elmoon,NQual call flush(11) call flush(21) call cs_unlock 900 return end subroutine avecho wsjt_9.3.r2792/call_to.txt0000664000175000017500000001323611232356566013570 0ustar jtnjtn---------------------------------------------------------------------------- Audio Threads (including interrupt service routines) AI Name Routines called ---------------------------------------------------------------------------- a2d.f90: padevsub A fivehz.F90: random_number, random_seed, wsjtgen I gen24.f: chkmsg, encode, entail, interleave24, packmsg, unpackmsg ... gen64.f90: random_number gen65.f: chkmsg, graycode, interleave63, packmsg, rs_encode, unpackmsg, setup65 gen6m.f: gentone gencw.f: morse, msgtype gencwid.f: morse genwspr.f90: encode232, inter_mept, wqdecode, wqencode grid2k.f: grid2deg interleave24.f: cs_lock, cs_unlock DI interleave63.f: move DI inter_mept.f: cs_lock, cs_unloc DI k2grid.f: deg2grid packgrid.f: grid2deg packmsg.f: packtext, getpfx1, k2grid, packcall, packgrid DGI packpfx.f90: packcall rfile.f90: cs_lock, cs_unlock GI wqencode.f90: hash, pack50, packcall, packgrid, packname, packpfx, packprop, packtext2 wsjtgen.F90: abc441, cs_lock, cs_unlock, gen24, gen64, gen65, gen6m, gencwid, gencw, genwspr, rfile, rfile2 ---------------------------------------------------------------------------- GUI Thread G Name Routines called ---------------------------------------------------------------------------- astro0.F90: astro, cs_lock, cs_unlock G astro.F: grid2deg, coord, cs_lock, cs_unlock, MoonDop, rfile2, ... sun, zero azdist0.f90: azdist, cs_lock, cs_unlock azdist.f: geodist, grid2deg ftn_init.F90: cs_init, cs_lock, cs_unlock, pfxdump ftn_quit.f90: cs_destroy, filbig2, four2a getfile.F90: check_endian, cs_lock, cs_unlock, rfile, rfile2, sleepqq, usleep horizspec.f90: hscroll, xfft2 moon2.f: dcoord MoonDop.f: dcoord, fromxyz, geocentric, moon2, toxyz spec.f90: cs_lock, cs_unlock, horizspec, hscroll, xfft2, flat2 ---------------------------------------------------------------------------- Decoder Thread D Name Routines called ---------------------------------------------------------------------------- avemsg65.f: add, deep65, extract, zero D avemsg6m.f: add, cs_lock, cs_unlock, move, zero ... avesp2.f: flatten, move, ps, zero bzap.f: four2a, xfft, zero chkt0.f90: cs_lock, cs_unlock, packmsg, unpackmsg decode162.f: fano232, inter_mept, wqdecode decode1.F90: cs_lock, cs_unlock, decode2, flushqqq, savedata, sleepqq, usleep decode24.f: cs_lock, cs_unlock, interleave24, genmet, unpackmsg decode2.f90: decode3, get_fname decode3.F90: pix2d65, pix2d, wsjt1, blanker decode65.f: extract, move, spec2d65, deep65 decode6m.f: avemsg6m, cs_lock, cs_unlock, four2a, zero, add deep65.F: cs_lock, cs_unlock, encode65, packmsg, unpackmsg encode65.f: graycode, interleave63, packmsg, rs_encode extract.f: demod64a, chkhist, cs_lock, cs_unlock, flushqqq, graycode, indexx, interleave63, pctile, rs_decode, runqqq, unpackmsg fchisq.f: ccf2 filbig2.F: sfftw_* DG flat1.f: pctile flat2.f: pctile flatten.f: add, move, pctile, zero four2a.f: sleep_msec, sfftw_* DG ftpeak65.f: fil651, fil652, fil653, fil653, symsync65 genmet.f: cs_lock, cs_unlock get_fname.F90: cs_lock, cs_unlock indexx.f: ssort longx.f: detect, peakup, sync lpf1.f: four2a, xfft, zero mept162a.f: cs_lock, cs_unlock, decode162, fourt, sync162, twkfreq mtdecode.f: cs_lock, cs_unlock, indexx, longx, pctile, ping, smooth, spec441 pctile.f: sort ps162.f: four2a ps24.f: fourt ps.f: xfft runqqq.F90: flush, sleepqq, usleep savedata.F90: cs_lock, cs_unlock, get_fname short65.f: add, flat1, getsnr, ps, smooth, zero sort.f: ssort spec2d65.f: add, four2a, ftpeak65, move, zero spec2d.f: indexx, move, pctile, set, xfft, zero spec441.f: move, xfft, zero stdecode.f: cs_lock, cs_unlock, peakup sync162.f: add, pctile, ps162, zero sync24.f: add, flat1, pctile, peakup, ps24, slope, xcor24, zero, sync64.f: add, limit, ps, zero, smooth sync65.f: add, flat1, limit, pctile, peakup, ps, slope, xcor, zero, smooth syncf0.f: add, move, xfft, zero syncf1.f: add, move, smooth, xfft, zero sync.f: xfft, zero unpackgrid.f: deg2grid DI unpackmsg.f: grid2k, unpackcall, unpacktext, getpfx2 DI wqdecode.f90: cs_unlock, cs_lock, hash, unpack50, unpackcall, DI unpackgrid, unpackname, unpackpfx, unpackprop, unpacktext2 wsjt1.F: bzap, cs_lock, cs_unlock, decode6m, flushqqq, indexx, lpf1, mtdecode, s2shape, spec2d, spec441, stdecode, syncf0, syncf1, synct, wsjtwspr, zero, wsjt24, wsjt64, wsjt65, avesp2, short65, bzap, avesp2 wsjt24.f: cs_lock, cs_unlock, decode24, flushqqq, sync24, avemsg65 wsjt64.f: sync64 wsjt65.f: cs_lock, cs_unlock, decode65, flushqqq, setup65, sync65, avemsg65 wsjtwspr.f90: filbig2, mept162a xcor.f: pctile xfft.f: four2a wsjt_9.3.r2792/nchar.f0000664000175000017500000000102311015074716012634 0ustar jtnjtn function nchar(c) C Convert ascii number, letter, or space to 0-36 for callsign packing. character c*1 if(c.ge.'0' .and. c.le.'9') then n=ichar(c)-ichar('0') else if(c.ge.'A' .and. c.le.'Z') then n=ichar(c)-ichar('A') + 10 else if(c.ge.'a' .and. c.le.'z') then n=ichar(c)-ichar('a') + 10 else if(c.ge.' ') then n=36 else Print*,'Invalid character in callsign ',c,' ',ichar(c) stop endif nchar=n return end wsjt_9.3.r2792/synct.f0000664000175000017500000000345711023566303012713 0ustar jtnjtn subroutine synct(data,jz,jstart,f0,smax) C Gets a refined value of jstart. C parameter (NMAX=30*11025) parameter (NMAX=1024*1024) parameter (NB3=3*512) real data(jz) real*8 dpha,twopi complex*16 z,dz complex c,c1,zz common/hcom/c(NMAX) ps(zz)=real(zz)**2 + aimag(zz)**2 !Power spectrum function C Convert data to baseband (complex result) using quadrature LO. twopi=8*atan(1.d0) dpha=twopi*f0/11025.d0 dz=cmplx(cos(dpha),-sin(dpha)) z=1.d0/dz if(jz .ge. NMAX) then print*,"synct jz >= NMAX ", jz stop endif do i=1,jz z=z*dz c(i)=data(i)*z enddo C Detect zero-beat sync tone in 512-sample chunks, stepped by 1. C Sums replace original values in c(i). zz=0 do i=1,512 !Compute first sum zz=zz+c(i) enddo c1=c(1) c(1)=zz do i=2,jz-512 !Compute the rest recursively zz=c(i-1)+c(i+511)-c1 c1=c(i) !Save original value c(i)=zz !Save the sum enddo C Iterate to find the best jstart. jstart=jstart+NB3 nz=(jz-jstart)/NB3 -1 smax=0. jstep=256 jbest=jstart 10 jstep=jstep/2 jstart=jbest do j=jstart-jstep,jstart+jstep,jstep s=0. r=0. do n=1,nz k=(n-1)*NB3 + j s=s + ps(c(k)) r=r + ps(c(k+512)) + ps(c(k+1024)) enddo s=2*s/r !Better to use s/r or s-r? if(s.gt.smax) then smax=s jbest=j endif enddo if(jstep.gt.1) go to 10 jstart=jbest if(jstart.gt.NB3) jstart=jstart-NB3 return end wsjt_9.3.r2792/hipass.f900000664000175000017500000000100311461555650013205 0ustar jtnjtnsubroutine hipass(y,npts,nwidth) ! Hipass filter for time-domain data. Removes an RC-type running ! mean (time constant nwidth) from array y(1:npts). real y(npts) c1=1.0/nwidth c2=1.0-c1 s=0. do i=1,nwidth !Get initial average s=s+y(i) enddo ave=c1*s do i=1,npts !Do the filtering y0=y(i) y(i)=y0-ave !Remove the mean ave=c1*y0 + c2*ave !Update the mean enddo return end subroutine hipass wsjt_9.3.r2792/wsjt24.f0000664000175000017500000001321511563256730012712 0ustar jtnjtn subroutine wsjt24(dat,npts,cfile6,NClearAve,MinSigdB, + DFTolerance,NFreeze,mode,mode4,Nseg,MouseDF,NAgain, + idf,lumsg,lcum,nspecial,ndf,NSyncOK,ccfblue,ccfred,ndiag) C Orchestrates the process of decoding JT4 messages, using C data that have been 2x downsampled. real dat(npts) !Raw data integer DFTolerance logical first logical lcum character decoded*22,cfile6*6,special*5,cooo*3 character*22 avemsg1,avemsg2,deepmsg character*69 line,ave1,ave2 character*1 csync,c1 character*12 mycall character*12 hiscall character*6 hisgrid character submode*1 real ccfblue(-5:540),ccfred(-224:224) include 'avecom.h' data first/.true./,ns10/0/,ns20/0/ save mode65=2 if(first) then nsave=0 first=.false. ave1=' ' ave2=' ' if(nspecial.eq.999) go to 900 !Silence compiler warning endif naggressive=0 if(ndepth.ge.2) naggressive=1 nq1=3 nq2=6 if(naggressive.eq.1) nq1=1 if(NClearAve.ne.0) then nsave=0 !Clear the averaging accumulators ns10=0 ns20=0 ave1=' ' ave2=' ' endif if(MinSigdB.eq.99 .or. MinSigdB.eq.-99) then ns10=0 !For Include/Exclude ? ns20=0 endif C Attempt to synchronize: look for sync tone, get DF and DT. call sync24(dat,npts,DFTolerance,NFreeze,MouseDF,mode, + mode4,dtx,dfx,snrx,snrsync,ccfblue,ccfred,flip,width) csync=' ' decoded=' ' deepmsg=' ' special=' ' cooo=' ' ncount=-1 !Flag for RS decode of current record ncount1=-1 !Flag for RS Decode of ave1 ncount2=-1 !Flag for RS Decode of ave2 NSyncOK=0 nqual1=0 nqual2=0 if(nsave.lt.MAXAVE .and. (NAgain.eq.0 .or. NClearAve.eq.1)) + nsave=nsave+1 if(nsave.le.0) go to 900 !Prevent bounds error nflag(nsave)=0 !Clear the "good sync" flag iseg(nsave)=Nseg !Set the RX segment to 1 or 2 nsync=nint(snrsync-3.0) nsnr=nint(snrx) if(nsnr.lt.-30 .or. nsync.lt.0) nsync=0 nsnrlim=-32 if(nsync.lt.MinSigdB .or. nsnr.lt.nsnrlim) go to 200 C If we get here, we have achieved sync! NSyncOK=1 nflag(nsave)=1 !Mark this RX file as good csync='*' if(flip.lt.0.0) then csync='#' cooo='O ?' endif call decode24(dat,npts,dtx,dfx,flip,mode,mode4,decoded, + ncount,deepmsg,qual,submode) 200 kvqual=0 if(ncount.ge.0) kvqual=1 nqual=qual if(ndiag.eq.0 .and. nqual.gt.10) nqual=10 if(nqual.ge.nq1 .and.kvqual.eq.0) decoded=deepmsg ndf=nint(dfx) if(flip.lt.0.0 .and. (kvqual.eq.1 .or. nqual.ge.nq2)) cooo='OOO' if(kvqual.eq.0.and.nqual.ge.nq1.and.nqual.lt.nq2) cooo(2:3)=' ?' if(decoded.eq.' ') cooo=' ' do i=1,22 c1=decoded(i:i) if(c1.ge.'a' .and. c1.le.'z') decoded(i:i)=char(ichar(c1)-32) enddo jdf=ndf+idf call cs_lock('wsjt24') write(line,1010) cfile6,nsync,nsnr,dtx-1.0,jdf,nint(width), + csync,special,decoded(1:19),cooo,kvqual,nqual,submode 1010 format(a6,i3,i5,f5.1,i5,i3,1x,a1,1x,a5,a19,1x,a3,i4,i4,1x,a1) C Blank all end-of-line stuff if no decode if(line(31:40).eq.' ') line=line(:30) if(lcum) write(21,1011) line 1011 format(a69) C Write decoded msg unless this is an "Exclude" request: if(MinSigdB.lt.99) write(lumsg,1011) line if(nsave.ge.1) call avemsg65(1,mode65,ndepth, + avemsg1,nused1,nq1,nq2,neme,mycall,hiscall,hisgrid,qual1, + ns1,ncount1) if(nsave.ge.1) call avemsg65(2,mode65,ndepth, + avemsg2,nused2,nq1,nq2,neme,mycall,hiscall,hisgrid,qual2, + ns2,ncount2) nqual1=qual1 nqual2=qual2 if(ndiag.eq.0 .and. nqual1.gt.10) nqual1=10 if(ndiag.eq.0 .and. nqual2.gt.10) nqual2=10 nc1=0 nc2=0 if(ncount1.ge.0) nc1=1 if(ncount2.ge.0) nc2=1 C Write the average line ! if(ns1.ge.1 .and. ns1.ne.ns10) then if(ns1.ge.1) then if(ns1.lt.10) write(ave1,1021) cfile6,1,nused1,ns1,avemsg1, + nc1,nqual1 1021 format(a6,i3,i4,'/',i1,20x,a19,i8,i4) if(ns1.ge.10 .and. nsave.le.99) write(ave1,1022) cfile6, + 1,nused1,ns1,avemsg1,nc1,nqual1 1022 format(a6,i3,i4,'/',i2,19x,a19,i8,i4) if(ns1.ge.100) write(ave1,1023) cfile6,1,nused1,ns1, + avemsg1,nc1,nqual1 1023 format(a6,i3,i4,'/',i3,18x,a19,i8,i4) if(lcum .and. (avemsg1.ne.' ')) + write(21,1011) ave1 ns10=ns1 endif C If Monitor segment #2 is available, write that line also ! if(ns2.ge.1 .and. ns2.ne.ns20) then !***Why the 2nd part?? *** if(ns2.ge.1) then if(ns2.lt.10) write(ave2,1021) cfile6,2,nused2,ns2,avemsg2, + nc2,nqual2 if(ns2.ge.10 .and. nsave.le.99) write(ave2,1022) cfile6, + 2,nused2,ns2,avemsg2,nc2,nqual2 if(ns2.ge.100) write(ave2,1023) cfile6,2,nused2,ns2,avemsg2, + nc2,nqual2 if(lcum .and. (avemsg2.ne.' ')) + write(21,1011) ave2 ns20=ns2 endif if(ave1(31:40).eq.' ') ave1=ave1(:30) if(ave2(31:40).eq.' ') ave2=ave2(:30) write(12,1011) ave1 write(12,1011) ave2 call flush(12) if(lumsg.ne.6) end file 11 call cs_unlock 900 continue return end wsjt_9.3.r2792/short65.f0000664000175000017500000001401411035431676013063 0ustar jtnjtn subroutine short65(data,jz,NFreeze,MouseDF,DFTolerance, + mode65,nspecialbest,nstest,dfsh,iderrbest,idriftbest, + snrdb,ss1a,ss2a,nwsh,idfsh) C Checks to see if this might be a shorthand message. C This is done before zapping, downsampling, or normal decoding. parameter (NP2=60*11025) !Size of data array parameter (NFFT=16384) !FFT length parameter (NH=NFFT/2) !Step size parameter (MAXSTEPS=60*11025/NH) !Max # of steps real data(jz) integer DFTolerance real s2(NH,MAXSTEPS) !2d spectrum real ss(NH,4) !Save spectra in four phase bins real psavg(NH) real sigmax(4) !Peak of spectrum at each phase real ss1a(-224:224) !Lower magenta curve real ss2a(-224:224) !Upper magenta curve real ss1(-473:1784) !Lower magenta curve (temp) real ss2(-473:1784) !Upper magenta curve (temp) real ssavg(-11:11) integer ipk(4) !Peak bin at each phase save nspecialbest=0 !Default return value nstest=0 df=11025.0/NFFT C Do 16 k FFTs, stepped by 8k. (*** Maybe should step by 4k? ***) call zero(psavg,NH) nsteps=(jz-NH)/(4*NH) nsteps=4*nsteps !Number of steps do j=1,nsteps k=(j-1)*NH + 1 call ps(data(k),NFFT,s2(1,j)) !Get power spectra if(mode65.eq.4) then call smooth(s2(1,j),NH) call smooth(s2(1,j),NH) endif call add(psavg,s2(1,j),psavg,NH) enddo call flat1(psavg,s2,NH,nsteps,NH,MAXSTEPS) nfac=40*mode65 dtstep=0.5/df fac=dtstep/(60.0*df) C Define range of frequencies to be searched fa=max(200.0,1270.46+MouseDF-600.0) fb=min(4800.0,1270.46+MouseDF+600.0) ia=fa/df ib=fb/df + 4.1*nfac !Upper tone is above sync tone by 4*nfac*df Hz if(NFreeze.eq.1) then fa=max(200.0,1270.46+MouseDF-DFTolerance) fb=min(4800.0,1270.46+MouseDF+DFTolerance) endif ia2=fa/df ib2=fb/df + 4.1*nfac !Upper tone is above sync tone by 4*nfac*df Hz if(ib2.gt.NH) ib2=NH C Find strongest line in each of the 4 phases, repeating for each drift rate. sbest=0. snrbest=0. idz=6.0/df !Is this the right drift range? do idrift=-idz,idz drift=idrift*df*60.0/49.04 call zero(ss,4*NH) !Clear the accumulating array do j=1,nsteps n=mod(j-1,4)+1 k=nint((j-nsteps/2)*drift*fac) + ia call add(ss(ia,n),s2(k,j),ss(ia,n),ib-ia+1) enddo do n=1,4 sigmax(n)=0. do i=ia2,ib2 sig=ss(i,n) if(sig.ge.sigmax(n)) then ipk(n)=i sigmax(n)=sig if(sig.ge.sbest) then sbest=sig nbest=n endif endif enddo enddo n2best=nbest+2 if(n2best.gt.4) n2best=nbest-2 xdf=min(ipk(nbest),ipk(n2best))*df - 1270.46 if(NFreeze.eq.1 .and. abs(xdf-mousedf).gt.DFTolerance) goto 10 idiff=abs(ipk(nbest)-ipk(n2best)) xk=float(idiff)/nfac k=nint(xk) iderr=nint((xk-k)*nfac) nspecial=0 maxerr=nint(0.008*abs(idiff) + 0.51) if(abs(iderr).le.maxerr .and. k.ge.2 .and. k.le.4) nspecial=k if(nspecial.gt.0) then call getsnr(ss(ia2,nbest),ib2-ia2+1,snr1) call getsnr(ss(ia2,n2best),ib2-ia2+1,snr2) snr=0.5*(snr1+snr2) if(snr.gt.snrbest) then snrbest=snr nspecialbest=nspecial nstest=snr/2.0 - 2.0 !Threshold set here if(nstest.lt.0) nstest=0 if(nstest.gt.10) nstest=10 dfsh=nint(xdf) iderrbest=iderr idriftbest=idrift snrdb=db(snr) - db(2500.0/df) - db(sqrt(nsteps/4.0))+1.8 n1=nbest n2=n2best ipk1=ipk(n1) ipk2=ipk(n2) endif endif if(nstest.eq.0) nspecial=0 10 continue enddo if(nstest.eq.0) nspecialbest=0 df4=4.0*df if(nstest.gt.0) then if(ipk1.gt.ipk2) then ntmp=n1 n1=n2 n2=ntmp ntmp=ipk1 ipk1=ipk2 ipk2=ntmp endif call zero(ss1,2258) call zero(ss2,2258) do i=ia2,ib2,4 f=df*i k=nint((f-1270.46)/df4) ss1(k)=0.3 * (ss(i-2,n1) + ss(i-1,n1) + ss(i,n1) + + ss(i+1,n1) + ss(i+2,n1)) ss2(k)=0.3 * (ss(i-2,n2) + ss(i-1,n2) + ss(i,n2) + + ss(i+1,n2) + ss(i+2,n2)) enddo kpk1=nint(0.25*ipk1-472.0) kpk2=kpk1 + nspecial*mode65*10 ssmax=0. do i=-10,10 ssavg(i)=ss1(kpk1+i) + ss2(kpk2+i) if(ssavg(i).gt.ssmax) then ssmax=ssavg(i) itop=i endif enddo base=0.25*(ssavg(-10)+ssavg(-9)+ssavg(9)+ssavg(10)) shalf=0.5*(ssmax+base) do k=1,8 if(ssavg(itop-k).lt.shalf) go to 110 enddo k=8 110 x=(ssavg(itop-(k-1))-shalf)/(ssavg(itop-(k-1))-ssavg(itop-k)) do k=1,8 if(ssavg(itop+k).lt.shalf) go to 120 enddo k=8 120 x=x+(ssavg(itop+(k-1))-shalf)/(ssavg(itop+(k-1))-ssavg(itop+k)) nwsh=nint(x*df4) endif C See if orange/magenta curves need to be shifted: idfsh=0 if(mousedf.lt.-600) idfsh=-670 if(mousedf.gt.600) idfsh=1000 if(mousedf.gt.1600) idfsh=2000 if(mousedf.gt.2600) idfsh=3000 i0=nint(idfsh/df4) do i=-224,224 ss1a(i)=ss1(i+i0) ss2a(i)=ss2(i+i0) enddo return end wsjt_9.3.r2792/configure_10.60000775000175000017500000055330411342752274013770 0ustar jtnjtn#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for wsjt 7.04. # # $Id: configure.ac 1322 2009-08-18 21:19:47Z va3db $ # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 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=: # Zsh 3.x and 4.x performs 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh 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.) as_nl=' ' 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 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. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # 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 || 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=: # Zsh 3.x and 4.x performs 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=: # Zsh 3.x and 4.x performs 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 autoconf@gnu.org about your system, echo including any error possibly output before this echo message } 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" || { 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 fi echo >conf$$.file 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 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='wsjt' PACKAGE_TARNAME='wsjt' PACKAGE_VERSION='7.04' PACKAGE_STRING='wsjt 7.04' PACKAGE_BUGREPORT='' ac_default_prefix="/usr/local" # 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='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT F77 FFLAGS ac_ct_F77 G95 GFORTRAN FC_LIB_PATH FC FCV CPP GREP EGREP SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RM CP MV LN SED AR LD TEST PYTHON F2PY VERSION OS CLOBBER PREFIX LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS F77 FFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=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_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=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 ;; -*) { 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 && { 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. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. 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 case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { 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 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 .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { 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 -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | 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 .." { 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" || { 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 wsjt 7.04 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/wsjt] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of wsjt 7.04:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-g95 Use G95 compiler if available. --enable-gfortran Use gfortran compiler if available. --enable-clobber Don't preserve old binaries on make install --enable-assert Enable assert(). Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-portaudio-include-dir= path to portaudio include files --with-portaudio-lib-dir= path to portaudio lib files 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 F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags 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. _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" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`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 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 wsjt configure 7.04 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. $Id: configure.ac 1322 2009-08-18 21:19:47Z va3db $ _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 wsjt $as_me 7.04, which was generated by GNU Autoconf 2.61. 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=. 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=`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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $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=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac 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=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac 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 && echo "$as_me: caught signal $ac_signal" 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 explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 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 { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`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 { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 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 fail=0 OLD_CFLAGS="$CFLAGS" 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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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" 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 { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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" 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 { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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" 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 { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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" 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 { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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" 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 { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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" 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 { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 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. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? 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.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. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? 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 | *.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 { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 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. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? 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 { { 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 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 { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out 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. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? 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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 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 { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? 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 ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 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 { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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 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 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 "echo \"\$as_me:$LINENO: $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 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 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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$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 { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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 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 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) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$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 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_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn 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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # 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_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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_F77="$ac_prog" 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_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _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 "echo \"\$as_me:$LINENO: $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 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else 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_f77_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _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 "echo \"\$as_me:$LINENO: $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 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` 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 CFLAGS="$OLD_CFLAGS" CPPFLAGS="-I/usr/local/include ${CPPFLAGS}" LDFLAGS="-L/usr/local/lib ${LDFLAGS}" LIBS=" -lpthread ${LIBS}" FFLAGS_GFORTRAN="${FFLAGS} -Wall -fbounds-check -fPIC" FFLAGS_G95="${FFLAGS} -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC" #-Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC # Check whether --enable-g95 was given. if test "${enable_g95+set}" = set; then enableval=$enable_g95; g95=$enableval else g95=no fi # Check whether --enable-gfortran was given. if test "${enable_gfortran+set}" = set; then enableval=$enable_gfortran; gfortran=$enableval else gfortran=no fi FCV="" if test -n ${FC} ; then gfortran_name_part=`echo ${FC} | cut -c 1-8` if test ${gfortran_name_part} = "gfortran" ; then gfortran_name=${FC} FC_LIB_PATH=`${FC} -print-file-name=` g95=no gfortran=yes FFLAGS="${FFLAGS_GFORTRAN}" FCV="gnu95" else unset ${FC} fi fi { echo "$as_me:$LINENO: checking uname -s" >&5 echo $ECHO_N "checking uname -s... $ECHO_C" >&6; } case `uname -s` in CYGWIN*) { echo "$as_me:$LINENO: result: Cygwin" >&5 echo "${ECHO_T}Cygwin" >&6; } CYGWIN=yes ;; SunOS*) { echo "$as_me:$LINENO: result: SunOS or Solaris" >&5 echo "${ECHO_T}SunOS or Solaris" >&6; } cat >>confdefs.h <<\_ACEOF #define __EXTENSIONS__ 1 _ACEOF ;; FreeBSD*) if test -z ${gfortran_name} ; then gfortran_name=`grep FC: /usr/ports/Mk/bsd.gcc.mk | head -1 |awk '{print $2}'` fi FCV_G95="g95" ;; *) FCV_G95="g95" { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } ;; esac if test -z $gfortran_name ; then gfortran_name="gfortran" fi # Extract the first word of "g95", so it can be a program name with args. set dummy g95; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_G95+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $G95 in [\\/]* | ?:[\\/]*) ac_cv_path_G95="$G95" # Let the user override the test with a path. ;; *) 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_path_G95="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi G95=$ac_cv_path_G95 if test -n "$G95"; then { echo "$as_me:$LINENO: result: $G95" >&5 echo "${ECHO_T}$G95" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "${gfortran_name}", so it can be a program name with args. set dummy ${gfortran_name}; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_GFORTRAN+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GFORTRAN in [\\/]* | ?:[\\/]*) ac_cv_path_GFORTRAN="$GFORTRAN" # Let the user override the test with a path. ;; *) 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_path_GFORTRAN="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GFORTRAN=$ac_cv_path_GFORTRAN if test -n "$GFORTRAN"; then { echo "$as_me:$LINENO: result: $GFORTRAN" >&5 echo "${ECHO_T}$GFORTRAN" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test ! -z ${GFORTRAN} ; then echo "*** gfortran compiler found at ${GFORTRAN}" if test "${gfortran}" = yes; then FC_LIB_PATH=`${GFORTRAN} -print-file-name=` FC=`basename ${GFORTRAN}` g95=no FFLAGS="${FFLAGS_GFORTRAN}" FCV="gnu95" fi else echo "*** No gfortran compiler found" fi if test ! -z ${G95} ; then echo "*** g95 compiler found at ${G95}" if test "${g95}" = yes; then FC_LIB_PATH=`${G95} -print-file-name=` FC=`basename ${G95}` gfortran=no FFLAGS="${FFLAGS_G95}" FCV=${FCV_G95} fi else echo "*** No g95 compiler found" fi if test -z ${FC} ; then if test ! -z ${GFORTRAN} ; then if test "${g95}" = yes; then echo "You enabled g95, but no g95 compiler found, defaulting to gfortran instead" fi FC_LIB_PATH=`${GFORTRAN} -print-file-name=` FC=`basename ${GFORTRAN}` g95=no gfortran=yes FFLAGS="${FFLAGS_GFORTRAN}" FCV="gnu95" elif test ! -z $G95 ; then if test "${gfortran}" = yes; then echo "You enabled gfortran, but no gfortran compiler found, defaulting to g95 instead" fi FC_LIB_PATH=`${G95} -print-file-name=` FC=`basename ${G95}` g95=yes gfortran=no FFLAGS="${FFLAGS_G95}" FCV=${FCV_G95} fi fi cat >>confdefs.h <<_ACEOF #define FC_LIB_PATH "${FC_LIB_PATH}" _ACEOF FC_LIB_PATH="${FC_LIB_PATH}" cat >>confdefs.h <<_ACEOF #define FC "${FC}" _ACEOF FC="${FC}" FCV="${FCV}" HAS_PORTAUDIO_H=0 HAS_PORTAUDIO_LIB=0 HAS_PORTAUDIO=0 { echo "$as_me:$LINENO: checking for a v19 portaudio " >&5 echo $ECHO_N "checking for a v19 portaudio ... $ECHO_C" >&6; } portaudio_lib_dir="/usr/lib" portaudio_include_dir="/usr/include" # Check whether --with-portaudio-include-dir was given. if test "${with_portaudio_include_dir+set}" = set; then withval=$with_portaudio_include_dir; portaudio_include_dir=$with_portaudio_include_dir fi # Check whether --with-portaudio-lib-dir was given. if test "${with_portaudio_lib_dir+set}" = set; then withval=$with_portaudio_lib_dir; portaudio_lib_dir=$with_portaudio_lib_dir fi if test -e ${portaudio_include_dir}/portaudio.h; then HAS_PORTAUDIO_H=1 fi if test -e ${portaudio_lib_dir}/libportaudio.so \ -o -e ${portaudio_lib_dir}/libportaudio.a;then HAS_PORTAUDIO_LIB=1 fi if test ${HAS_PORTAUDIO_H} -eq 1 -a ${HAS_PORTAUDIO_LIB} -eq 1; then LDFLAGS="-L${portaudio_lib_dir} ${LDFLAGS}" LIBS="${LIBS} -lportaudio" CPPFLAGS="-I${portaudio_include_dir} ${CPPFLAGS}" { echo "$as_me:$LINENO: checking for Pa_GetVersion in -lportaudio" >&5 echo $ECHO_N "checking for Pa_GetVersion in -lportaudio... $ECHO_C" >&6; } if test "${ac_cv_lib_portaudio_Pa_GetVersion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lportaudio $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 Pa_GetVersion (); int main () { return Pa_GetVersion (); ; 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 "echo \"\$as_me:$LINENO: $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 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 && $as_test_x conftest$ac_exeext; then ac_cv_lib_portaudio_Pa_GetVersion=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_portaudio_Pa_GetVersion=no fi 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 { echo "$as_me:$LINENO: result: $ac_cv_lib_portaudio_Pa_GetVersion" >&5 echo "${ECHO_T}$ac_cv_lib_portaudio_Pa_GetVersion" >&6; } if test $ac_cv_lib_portaudio_Pa_GetVersion = yes; then \ HAS_PORTAUDIO_VERSION=1 else HAS_PORTAUDIO_VERSION=0 fi if test ${HAS_PORTAUDIO_VERSION} -eq 0; then { echo "$as_me:$LINENO: result: This is likely portaudio v18; you need portaudio v19" >&5 echo "${ECHO_T}This is likely portaudio v18; you need portaudio v19" >&6; } else HAS_PORTAUDIO=1 fi else { echo "$as_me:$LINENO: result: portaudio not found trying FreeBSD paths " >&5 echo "${ECHO_T}portaudio not found trying FreeBSD paths " >&6; } portaudio_lib_dir="/usr/local/lib/portaudio2" portaudio_include_dir="/usr/local/include/portaudio2" { echo "$as_me:$LINENO: checking for a v19 portaudio in FreeBSD paths." >&5 echo $ECHO_N "checking for a v19 portaudio in FreeBSD paths.... $ECHO_C" >&6; } HAS_PORTAUDIO_H=0 HAS_PORTAUDIO_LIB=0 if test -e ${portaudio_include_dir}/portaudio.h; then HAS_PORTAUDIO_H=1 fi if test -e ${portaudio_lib_dir}/libportaudio.so \ -o -e ${portaudio_lib_dir}/libportaudio.a;then HAS_PORTAUDIO_LIB=1 fi if test ${HAS_PORTAUDIO_H} -eq 1 -a ${HAS_PORTAUDIO_LIB} -eq 1; then { echo "$as_me:$LINENO: result: found portaudio in FreeBSD paths, double checking it is v19 " >&5 echo "${ECHO_T}found portaudio in FreeBSD paths, double checking it is v19 " >&6; } LDFLAGS="-L${portaudio_lib_dir} ${LDFLAGS}" LIBS="${LIBS} -lportaudio" CPPFLAGS="-I${portaudio_include_dir} ${CPPFLAGS}" { echo "$as_me:$LINENO: checking for Pa_GetVersion in -lportaudio" >&5 echo $ECHO_N "checking for Pa_GetVersion in -lportaudio... $ECHO_C" >&6; } if test "${ac_cv_lib_portaudio_Pa_GetVersion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lportaudio $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 Pa_GetVersion (); int main () { return Pa_GetVersion (); ; 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 "echo \"\$as_me:$LINENO: $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 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 && $as_test_x conftest$ac_exeext; then ac_cv_lib_portaudio_Pa_GetVersion=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_portaudio_Pa_GetVersion=no fi 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 { echo "$as_me:$LINENO: result: $ac_cv_lib_portaudio_Pa_GetVersion" >&5 echo "${ECHO_T}$ac_cv_lib_portaudio_Pa_GetVersion" >&6; } if test $ac_cv_lib_portaudio_Pa_GetVersion = yes; then \ HAS_PORTAUDIO_VERSION=1 else HAS_PORTAUDIO_VERSION=0 fi if test ${HAS_PORTAUDIO_VERSION} -eq 0; then { echo "$as_me:$LINENO: result: How did you end up with a portaudio v18 here?" >&5 echo "${ECHO_T}How did you end up with a portaudio v18 here?" >&6; } else { echo "$as_me:$LINENO: result: found v19" >&5 echo "${ECHO_T}found v19" >&6; } HAS_PORTAUDIO=1 HAS_PORTAUDIO_H=1 fi fi fi if test "$ac_cv_c_compiler_gnu" = yes; then { echo "$as_me:$LINENO: checking if $CC is Apple GCC" >&5 echo $ECHO_N "checking if $CC is Apple GCC... $ECHO_C" >&6; } if expr "`$CC -v 2>&1 | tail -1`" : ".*Apple" >/dev/null; then AppleGCC=yes else AppleGCC=no fi { echo "$as_me:$LINENO: result: $AppleGCC" >&5 echo "${ECHO_T}$AppleGCC" >&6; } CFLAGS="$CFLAGS -Wall -O0" fi if test "$ac_cv_prog_cc_g" = yes; then CFLAGS="$CFLAGS -g -m32" fi if test ! -z "$CFLAGS"; then CFLAGS="$CFLAGS $CFLAGS" fi { echo "$as_me:$LINENO: checking for library containing strerror" >&5 echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } if test "${ac_cv_search_strerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$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 strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi 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 "echo \"\$as_me:$LINENO: $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 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 && $as_test_x conftest$ac_exeext; then ac_cv_search_strerror=$ac_res else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_strerror+set}" = set; then break fi done if test "${ac_cv_search_strerror+set}" = set; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 echo "${ECHO_T}$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { echo "$as_me:$LINENO: checking for inline" >&5 echo $ECHO_N "checking for inline... $ECHO_C" >&6; } if test "${ac_cv_c_inline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _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 "echo \"\$as_me:$LINENO: $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 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_c_inline=$ac_kw else 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 test "$ac_cv_c_inline" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 echo "${ECHO_T}$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; 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 { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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 echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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 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 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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$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 "echo \"\$as_me:$LINENO: $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 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 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 "echo \"\$as_me:$LINENO: $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 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 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 { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 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 { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else 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 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" 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 fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else 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 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" 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 fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name 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 { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test $ac_cv_c_compiler_gnu = yes; then { echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6; } if test "${ac_cv_prog_gcc_traditional+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_pattern="Autoconf.*'x'" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f -r conftest* if test $ac_cv_prog_gcc_traditional = no; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes fi rm -f -r conftest* fi fi { echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`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 echo $ECHO_N "(cached) $ECHO_C" >&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 { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$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 { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$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. # 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. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS 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 { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' # Extract the first word of "rm", so it can be a program name with args. set dummy rm; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_RM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $RM in [\\/]* | ?:[\\/]*) ac_cv_path_RM="$RM" # Let the user override the test with a path. ;; *) 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_path_RM="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RM=$ac_cv_path_RM if test -n "$RM"; then { echo "$as_me:$LINENO: result: $RM" >&5 echo "${ECHO_T}$RM" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "cp", so it can be a program name with args. set dummy cp; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_CP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $CP in [\\/]* | ?:[\\/]*) ac_cv_path_CP="$CP" # Let the user override the test with a path. ;; *) 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_path_CP="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CP=$ac_cv_path_CP if test -n "$CP"; then { echo "$as_me:$LINENO: result: $CP" >&5 echo "${ECHO_T}$CP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "mv", so it can be a program name with args. set dummy mv; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_MV+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MV in [\\/]* | ?:[\\/]*) ac_cv_path_MV="$MV" # Let the user override the test with a path. ;; *) 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_path_MV="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MV=$ac_cv_path_MV if test -n "$MV"; then { echo "$as_me:$LINENO: result: $MV" >&5 echo "${ECHO_T}$MV" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "ln", so it can be a program name with args. set dummy ln; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_LN+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $LN in [\\/]* | ?:[\\/]*) ac_cv_path_LN="$LN" # Let the user override the test with a path. ;; *) 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_path_LN="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LN=$ac_cv_path_LN if test -n "$LN"; then { echo "$as_me:$LINENO: result: $LN" >&5 echo "${ECHO_T}$LN" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $SED in [\\/]* | ?:[\\/]*) ac_cv_path_SED="$SED" # Let the user override the test with a path. ;; *) 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_path_SED="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SED=$ac_cv_path_SED if test -n "$SED"; then { echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; *) 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_path_AR="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi AR=$ac_cv_path_AR if test -n "$AR"; then { echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $LD in [\\/]* | ?:[\\/]*) ac_cv_path_LD="$LD" # Let the user override the test with a path. ;; *) 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_path_LD="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LD=$ac_cv_path_LD if test -n "$LD"; then { echo "$as_me:$LINENO: result: $LD" >&5 echo "${ECHO_T}$LD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "test", so it can be a program name with args. set dummy test; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_TEST+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $TEST in [\\/]* | ?:[\\/]*) ac_cv_path_TEST="$TEST" # Let the user override the test with a path. ;; *) 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_path_TEST="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_TEST" && ac_cv_path_TEST="test" ;; esac fi TEST=$ac_cv_path_TEST if test -n "$TEST"; then { echo "$as_me:$LINENO: result: $TEST" >&5 echo "${ECHO_T}$TEST" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_PYTHON+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) 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_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { echo "$as_me:$LINENO: result: $PYTHON" >&5 echo "${ECHO_T}$PYTHON" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "f2py", so it can be a program name with args. set dummy f2py; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_F2PY+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $F2PY in [\\/]* | ?:[\\/]*) ac_cv_path_F2PY="$F2PY" # Let the user override the test with a path. ;; *) 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_path_F2PY="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi F2PY=$ac_cv_path_F2PY if test -n "$F2PY"; then { echo "$as_me:$LINENO: result: $F2PY" >&5 echo "${ECHO_T}$F2PY" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi VERSION="${version}" { echo "$as_me:$LINENO: checking OS" >&5 echo $ECHO_N "checking OS... $ECHO_C" >&6; } OS=`uname` OS="${OS}" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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 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 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 -r 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 -r 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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 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 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 echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in inttypes.h stdint.h sys/resource.h sys/param.h errno.h \ sys/syslog.h stddef.h libgen.h sys/wait.h wait.h stdio.h termios.h \ sys/resource.h linux/ppdev.h dev/ppbus/ppi.h sys/stat.h fcntl.h sys/ioctl.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; } if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 int main () { if ((struct tm *) 0) 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 "echo \"\$as_me:$LINENO: $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 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_time=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi if test "${ac_cv_header_fftw3_h+set}" = set; then { echo "$as_me:$LINENO: checking for fftw3.h" >&5 echo $ECHO_N "checking for fftw3.h... $ECHO_C" >&6; } if test "${ac_cv_header_fftw3_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_fftw3_h" >&5 echo "${ECHO_T}$ac_cv_header_fftw3_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking fftw3.h usability" >&5 echo $ECHO_N "checking fftw3.h usability... $ECHO_C" >&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 _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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking fftw3.h presence" >&5 echo $ECHO_N "checking fftw3.h presence... $ECHO_C" >&6; } 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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: fftw3.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: fftw3.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: fftw3.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: fftw3.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: fftw3.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: fftw3.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: fftw3.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: fftw3.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: fftw3.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: fftw3.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: fftw3.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: fftw3.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: fftw3.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: fftw3.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: fftw3.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: fftw3.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for fftw3.h" >&5 echo $ECHO_N "checking for fftw3.h... $ECHO_C" >&6; } if test "${ac_cv_header_fftw3_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_fftw3_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_fftw3_h" >&5 echo "${ECHO_T}$ac_cv_header_fftw3_h" >&6; } fi if test $ac_cv_header_fftw3_h = yes; then HAS_FFTW3_H=1 else HAS_FFTW3_H=0 fi if test "${ac_cv_header_samplerate_h+set}" = set; then { echo "$as_me:$LINENO: checking for samplerate.h" >&5 echo $ECHO_N "checking for samplerate.h... $ECHO_C" >&6; } if test "${ac_cv_header_samplerate_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_samplerate_h" >&5 echo "${ECHO_T}$ac_cv_header_samplerate_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking samplerate.h usability" >&5 echo $ECHO_N "checking samplerate.h usability... $ECHO_C" >&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 _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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking samplerate.h presence" >&5 echo $ECHO_N "checking samplerate.h presence... $ECHO_C" >&6; } 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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: samplerate.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: samplerate.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: samplerate.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: samplerate.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: samplerate.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: samplerate.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: samplerate.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: samplerate.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: samplerate.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: samplerate.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: samplerate.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: samplerate.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: samplerate.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: samplerate.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: samplerate.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: samplerate.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for samplerate.h" >&5 echo $ECHO_N "checking for samplerate.h... $ECHO_C" >&6; } if test "${ac_cv_header_samplerate_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_samplerate_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_samplerate_h" >&5 echo "${ECHO_T}$ac_cv_header_samplerate_h" >&6; } fi if test $ac_cv_header_samplerate_h = yes; then HAS_SAMPLERATE_H=1 else HAS_SAMPLERATE_H=0 fi { echo "$as_me:$LINENO: checking whether string.h and strings.h may both be included" >&5 echo $ECHO_N "checking whether string.h and strings.h may both be included... $ECHO_C" >&6; } if test "${gcc_cv_header_string+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #include #include _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 "echo \"\$as_me:$LINENO: $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 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 gcc_cv_header_string=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gcc_cv_header_string=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $gcc_cv_header_string" >&5 echo "${ECHO_T}$gcc_cv_header_string" >&6; } if test "$gcc_cv_header_string" = "yes"; then cat >>confdefs.h <<\_ACEOF #define STRING_WITH_STRINGS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for sfftw_destroy_plan_ in -lfftw3f" >&5 echo $ECHO_N "checking for sfftw_destroy_plan_ in -lfftw3f... $ECHO_C" >&6; } if test "${ac_cv_lib_fftw3f_sfftw_destroy_plan_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3f $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 sfftw_destroy_plan_ (); int main () { return sfftw_destroy_plan_ (); ; 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 "echo \"\$as_me:$LINENO: $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 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 && $as_test_x conftest$ac_exeext; then ac_cv_lib_fftw3f_sfftw_destroy_plan_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_fftw3f_sfftw_destroy_plan_=no fi 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 { echo "$as_me:$LINENO: result: $ac_cv_lib_fftw3f_sfftw_destroy_plan_" >&5 echo "${ECHO_T}$ac_cv_lib_fftw3f_sfftw_destroy_plan_" >&6; } if test $ac_cv_lib_fftw3f_sfftw_destroy_plan_ = yes; then \ HAS_FFTW3FLIBS=1 else HAS_FFTW3FLIBS=0 fi if test "${ac_cv_header_stdarg_h+set}" = set; then { echo "$as_me:$LINENO: checking for stdarg.h" >&5 echo $ECHO_N "checking for stdarg.h... $ECHO_C" >&6; } if test "${ac_cv_header_stdarg_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdarg_h" >&5 echo "${ECHO_T}$ac_cv_header_stdarg_h" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking stdarg.h usability" >&5 echo $ECHO_N "checking stdarg.h usability... $ECHO_C" >&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 _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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking stdarg.h presence" >&5 echo $ECHO_N "checking stdarg.h presence... $ECHO_C" >&6; } 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 "echo \"\$as_me:$LINENO: $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 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 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 { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: stdarg.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: stdarg.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: stdarg.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: stdarg.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: stdarg.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: stdarg.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: stdarg.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: stdarg.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: stdarg.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: stdarg.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: stdarg.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: stdarg.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: stdarg.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: stdarg.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: stdarg.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: stdarg.h: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for stdarg.h" >&5 echo $ECHO_N "checking for stdarg.h... $ECHO_C" >&6; } if test "${ac_cv_header_stdarg_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_stdarg_h=$ac_header_preproc fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdarg_h" >&5 echo "${ECHO_T}$ac_cv_header_stdarg_h" >&6; } fi if test $ac_cv_header_stdarg_h = yes; then : else { { echo "$as_me:$LINENO: error: ** stdarg.h could not be found - wsjt will not compile without it **" >&5 echo "$as_me: error: ** stdarg.h could not be found - wsjt will not compile without it **" >&2;} { (exit 1); exit 1; }; } fi # Check whether --enable-clobber was given. if test "${enable_clobber+set}" = set; then enableval=$enable_clobber; clobber=$enableval else clobber=no fi if test "$clobber" = yes; then CLOBBER=yes fi # Check whether --enable-assert was given. if test "${enable_assert+set}" = set; then enableval=$enable_assert; assert=$enableval else assert=no fi if test "$assert" = no; then cat >>confdefs.h <<\_ACEOF #define NDEBUG 1 _ACEOF fi if test "$prefix" = "NONE"; then prefix=${ac_default_prefix} else prefix=`echo ${ac_default_prefix} | sed 's/\/$//'` fi if test -z $FC ; then fail=1 echo "You need g95 or gfortran to compile this program!" fi if test $HAS_FFTW3_H -eq 0; then fail=1 echo "You need to install the fftw3 libraries" fi if test $HAS_SAMPLERATE_H -eq 0; then fail=1 echo "You need to install the samplerate library" else cat >>confdefs.h <<\_ACEOF #define HAS_SAMPLERATE_H 1 _ACEOF LIBS="${LIBS} -lsamplerate" fi if test $HAS_PORTAUDIO -eq 1; then cat >>confdefs.h <<\_ACEOF #define HAS_PORTAUDIO 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAS_PORTAUDIO_H 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAS_PORTAUDIO_LIB 1 _ACEOF else fail=1 echo "This program needs portaudio v19 to compile." echo "Please use --with-portaudio-include-dir= and" echo " --with-portaudio-lib-dir= to set the paths." fi if test $HAS_FFTW3_H -eq 1; then cat >>confdefs.h <<\_ACEOF #define HAS_FFTW3_H 1 _ACEOF else fail=1 echo "You are missing the fftw3.h include file" fi if test $HAS_FFTW3FLIBS -eq 1; then LIBS="${LIBS} -lfftw3f" cat >>confdefs.h <<\_ACEOF #define HAS_FFTW3FLIBS 1 _ACEOF else fail=1 echo "You are missing the fortran shim libs in libfftw3." fi if test "$F2PY" = ""; then echo "You are missing f2py, trying local copy." F2PY="python f2py.py"; fi if test $fail -eq 1; then { { echo "$as_me:$LINENO: error: Please check error messages and install missing packages." >&5 echo "$as_me: error: Please check error messages and install missing packages." >&2;} { (exit 1); exit 1; }; } fi PREFIX="${prefix}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" LIBS="${LIBS}" F2PY="${F2PY}" 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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $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" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 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}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.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=`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 : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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 ## --------------------- ## ## 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=: # Zsh 3.x and 4.x performs 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh 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.) as_nl=' ' 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 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. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # 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 || 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" || { 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 fi echo >conf$$.file 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 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 wsjt $as_me 7.04, which was generated by GNU Autoconf 2.61. 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 cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet 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 Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ wsjt config.status 7.04 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 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' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. 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 ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) 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. -*) { 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 if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 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 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") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim F77!$F77$ac_delim FFLAGS!$FFLAGS$ac_delim ac_ct_F77!$ac_ct_F77$ac_delim G95!$G95$ac_delim GFORTRAN!$GFORTRAN$ac_delim FC_LIB_PATH!$FC_LIB_PATH$ac_delim FC!$FC$ac_delim FCV!$FCV$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim SET_MAKE!$SET_MAKE$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim RM!$RM$ac_delim CP!$CP$ac_delim MV!$MV$ac_delim LN!$LN$ac_delim SED!$SED$ac_delim AR!$AR$ac_delim LD!$LD$ac_delim TEST!$TEST$ac_delim PYTHON!$PYTHON$ac_delim F2PY!$F2PY$ac_delim VERSION!$VERSION$ac_delim OS!$OS$ac_delim CLOBBER!$CLOBBER$ac_delim PREFIX!$PREFIX$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 75; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 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 ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _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 fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 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 || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; 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 "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; 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 || 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=`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 || 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" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 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=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`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 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # 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= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF 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 sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;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 $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out 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"; } && { 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 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 ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 echo echo "***************" if test $g95 = "yes"; then echo "Using g95 as fortran compiler."; elif test $gfortran = "yes"; then echo "Using gfortran as fortran compiler."; fi echo echo "Compiling $PACKAGE_NAME $version" echo echo "Installing into: $prefix" echo wsjt_9.3.r2792/sync24.f0000664000175000017500000001300311461555650012672 0ustar jtnjtn subroutine sync24(dat,jz,DFTolerance,NFreeze,MouseDF, + mode,mode4,dtx,dfx,snrx,snrsync,ccfblue,ccfred1,flip,width) C Synchronizes JT4 data, finding the best-fit DT and DF. parameter (NFFTMAX=2520) !Max length of FFTs parameter (NHMAX=NFFTMAX/2) !Max length of power spectra parameter (NSMAX=525) !Max number of half-symbol steps integer DFTolerance !Range of DF search real dat(jz) real psavg(NHMAX) !Average spectrum of whole record real s2(NHMAX,NSMAX) !2d spectrum, stepped by half-symbols real ccfblue(-5:540) !CCF with pseudorandom sequence real ccfred(-450:450) !Peak of ccfblue, as function of freq real ccfred1(-224:224) !Peak of ccfblue, as function of freq real tmp(550) save C Do FFTs of twice symbol length, stepped by half symbols. Note that C we have already downsampled the data by factor of 2. nsym=207 nfft=2520 nh=nfft/2 nq=nfft/4 nsteps=jz/nq - 1 df=0.5*11025.0/nfft call zero(psavg,nh) C Compute power spectrum for each step and get average do j=1,nsteps k=(j-1)*nq + 1 ! call limit(dat(k),nfft) call ps24(dat(k),nfft,s2(1,j)) ! if(mode65.eq.4) call smooth(s2(1,j),nh) call add(psavg,s2(1,j),psavg,nh) enddo call flat1(psavg,s2,nh,nsteps,NHMAX,NSMAX) !Flatten the spectra C Find the best frequency channel for CCF ! famin= 670.46 ! fbmax=1870.46 famin=200. fbmax=2700. fa=famin fb=fbmax if(NFreeze.eq.1) then fa=max(famin,1270.46+MouseDF-DFTolerance) fb=min(fbmax,1270.46+MouseDF+DFTolerance) else fa=max(famin,1270.46+MouseDF-600) fb=min(fbmax,1270.46+MouseDF+600) endif ia=fa/df ib=fb/df if(mode.eq.7) then ia=ia - 3*mode4 ib=ib - 3*mode4 endif i0=nint(1270.46/df) lag1=-5 lag2=59 syncbest=-1.e30 syncbest2=-1.e30 call zero(ccfred,901) do i=ia,ib call xcor24(s2,i,nsteps,nsym,lag1,lag2,mode4, + ccfblue,ccf0,lagpk0,flip) j=i-i0 if(mode.eq.7) j=j + 3*mode4 if(j.ge.-372 .and. j.le.372) ccfred(j)=ccf0 C Find rms of the CCF, without the main peak call slope(ccfblue(lag1),lag2-lag1+1,lagpk0-lag1+1.0) sync=abs(ccfblue(lagpk0)) ppmax=psavg(i)-1.0 C Find the best sync value if(sync.gt.syncbest2) then ipk2=i lagpk2=lagpk0 syncbest2=sync endif C We are most interested if snrx will be more than -30 dB. if(ppmax.gt.0.2938) then !Corresponds to snrx.gt.-30.0 if(sync.gt.syncbest) then ipk=i lagpk=lagpk0 syncbest=sync endif endif enddo C If we found nothing with snrx > -30 dB, take the best sync that *was* found. if(syncbest.lt.-10.) then ipk=ipk2 lagpk=lagpk2 syncbest=syncbest2 endif C Peak up in frequency to fraction of channel ! call peakup(psavg(ipk-1),psavg(ipk),psavg(ipk+1),dx) ! if(dx.lt.-1.0) dx=-1.0 ! if(dx.gt.1.0) dx=1.0 dx=0. dfx=(ipk+dx-i0)*df if(mode.eq.7) dfx=dfx + 3*mode4*df C Peak up in time, at best whole-channel frequency call xcor24(s2,ipk,nsteps,nsym,lag1,lag2,mode4, + ccfblue,ccfmax,lagpk,flip) xlag=lagpk if(lagpk.gt.lag1 .and. lagpk.lt.lag2) then call peakup(ccfblue(lagpk-1),ccfmax,ccfblue(lagpk+1),dx2) xlag=lagpk+dx2 endif C Find rms of the CCF, without the main peak call slope(ccfblue(lag1),lag2-lag1+1,xlag-lag1+1.0) sq=0. nsq=0 do lag=lag1,lag2 if(abs(lag-xlag).gt.2.0) then sq=sq+ccfblue(lag)**2 nsq=nsq+1 endif enddo rms=sqrt(sq/nsq) snrsync=abs(ccfblue(lagpk))/rms - 1.1 !Empirical dt=2.0/11025.0 istart=xlag*nq dtx=istart*dt snrx=-99.0 ppmax=psavg(ipk)-1.0 if(ppmax.gt.0.0001) then snrx=db(ppmax*df/2500.0) + 7.5 !Empirical if(mode.eq.7) snrx=snrx + 3.0 !Empirical endif if(snrx.lt.-33.0) snrx=-33.0 C Compute width of sync tone to outermost -3 dB points ! call pctile(ccfred(ia-i0),tmp,ib-ia+1,45,base) ! i1=max(-224,ia-i0) ! i2=min(224,ib-i0) i1=max(-450,ia-i0) i2=min(450,ib-i0) call pctile(ccfred(i1),tmp,i2-i1+1,45,base) jpk=ipk-i0 if(abs(jpk).gt.450) then print*,'sync24 a:',jpk,ipk,i0 snrsync=0. go to 999 else stest=base + 0.5*(ccfred(jpk)-base) ! -3 dB endif do i=-10,0 if(jpk+i.ge.-371) then if(ccfred(jpk+i).gt.stest) go to 30 endif enddo i=0 30 continue if(abs(jpk+i-1).gt.450 .or. abs(jpk+i).gt.450) then print*,'sync24 b:',jpk,i else ! x1=i-1+(stest-ccfred(jpk+i-1))/(ccfred(jpk+i)-ccfred(jpk+i-1)) x1=i-0.5 endif do i=10,0,-1 if(jpk+i.le.371) then if(ccfred(jpk+i).gt.stest) go to 32 endif enddo i=0 ! 32 x2=i+1-(stest-ccfred(jpk+i+1))/(ccfred(jpk+i)-ccfred(jpk+i+1)) 32 x2=i+0.5 width=x2-x1 if(width.gt.1.2) width=sqrt(width**2 - 1.44) width=df*width width=max(0.0,min(99.0,width)) do i=-224,224 ccfred1(i)=ccfred(i) enddo 999 return end wsjt_9.3.r2792/geniscat.f900000664000175000017500000000401211547132427013514 0ustar jtnjtnsubroutine geniscat(msg,nmsg,mode4,samfac,iwave,nwave,msgsent) ! Generate an ISCAT waveform. parameter (NMAX=30*11025,NSZ=1291) character msg*28,msgsent*28 !Message to be transmitted integer*2 iwave(NMAX) !Generated waveform integer imsg(30) integer itone(NSZ) character c*42 real*8 twopi,dt,f0,f,df,pha,dpha,samfac real*8 f1,ff,dph integer icos(4) !Costas array data icos/0,1,3,2/ data nsync/4/,nlen/2/,ndat/18/ data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ /.?@-'/ nsps=512/mode4 twopi=8.d0*atan(1.d0) df=11025.d0/nsps dt=1.d0/(samfac*11025.d0) f0=47*df if(mode4.eq.2) f0=13*df nsym=NMAX/nsps nblk=nsync+nlen+ndat msglen=nmsg+1 k=0 kk=1 imsg(1)=40 !Always start with BOM char: '@' do i=1,nmsg !Define the tone sequence imsg(i+1)=36 !Illegal char set to blank do j=1,42 if(msg(i:i).eq.c(j:j)) imsg(i+1)=j-1 enddo enddo do i=1,nsym !Total symbols in 30 s j=mod(i-1,nblk)+1 if(j.le.nsync) then itone(i)=icos(j) !Insert 4x4 Costas array else if(j.gt.nsync .and. j.le.nsync+nlen) then itone(i)=msglen !Insert message-length indicator if(j.ge.nsync+2) then n=msglen + 5*(j-nsync-1) if(n.gt.41) n=n-42 itone(i)=n endif else k=k+1 kk=mod(k-1,msglen)+1 itone(i)=imsg(kk) endif enddo msgsent=msg k=0 pha=0. ! f1=-20.0*twopi/(11025.d0**2) ! kh=(nsym*nsps)/2 !### do m=1,nsym !Generate iwave f=f0 + itone(m)*df dpha=twopi*f*dt do i=1,nsps k=k+1 pha=pha+dpha ! pha=pha+dpha + f1*(k-kh) !### iwave(k)=nint(32767.0*sin(pha)) enddo enddo nwave=k return end subroutine geniscat wsjt_9.3.r2792/syncms.f900000664000175000017500000000143111461555650013237 0ustar jtnjtnsubroutine syncms(cdat,npts,cwb,r,i1) ! Establish character sync within a JTMS ping. complex cdat(npts) !Analytic signal complex cwb(56) !Complex waveform for 'space' real r(60000) real tmp(60000) integer hist(56),hmax(1) complex z r=0. jz=npts-55 do j=1,jz z=0. ss=0. do i=1,56 ss=ss + abs(cdat(i+j-1)) !Total power z=z + cdat(i+j-1)*conjg(cwb(i)) !Signal matching enddo r(j)=abs(z)/ss !Goodness-of-fit to enddo ncut=99.0*float(jz-10)/float(jz) call pctile(r,tmp,jz,ncut,rlim) hist=0 do j=1,jz k=mod(j-1,56)+1 if(r(j).gt.rlim) hist(k)=hist(k)+1 enddo hmax=maxloc(hist) i1=hmax(1) return end subroutine syncms wsjt_9.3.r2792/savedata.f900000664000175000017500000000772611551601445013522 0ustar jtnjtnsubroutine savedata integer*1 n4 integer*2 iswap_short character fname*24,longname*80 data ibuf0z/1/ include 'gcom1.f90' include 'gcom2.f90' include 'gcom3.f90' equivalence (nfmt2,n4) save if(mode(1:4).eq.'JT65' .or. mode(1:3).eq.'JT4' & .or. mode(1:2).eq.'CW') then call get_fname(hiscall,iyr,imo,ida,ntime,lauto,fname0) ibuf1=ibuf0 ibuf2=ibuf go to 1 else call get_fname(hiscall,iyr,imo,ida,ntime-trperiod,lauto,fname0) endif if(ibuf0.eq.ibuf0z) go to 999 !Startup condition, do not save if(ntrbuf(ibuf0z).eq.1) go to 999 !We were transmitting, do not save ! Get buffer pointers, then copy completed Rx sequence from y1 to d2a: ibuf1=ibuf0z ibuf2=ibuf0-1 1 jza=2048*(ibuf2-ibuf1) if(jza.lt.0) jza=jza+NRxMax if(jza.lt.110250) go to 999 !Don't save files less than 10 s if(jza.gt.120*11025) go to 999 !Don't save if something's fishy k=2048*(ibuf1-1) if(mode(1:4).ne.'JT65' .and. mode(1:3).ne.'JT4' & .and. mode(1:2).ne.'CW') k=k+3*2048 if(mode(1:4).ne.'JT65' .and. mode(1:3).ne.'JT4' & .and. mode(1:2).ne.'CW' .and. jza.gt.30*11025) then k=k + (jza-30*11025) if(k.gt.NRxMax) k=k-NRxMax jza=30*11025 endif ! Check timestamps of buffers used for this data msbig=0 i=k/2048 if(msmax.eq.0) i=i+1 nz=jza/2048 if(msmax.eq.0) then i=i+1 nz=nz-1 endif do n=1,nz i=i+1 if(i.gt.1024) i=i-1024 i0=i-1 if(i0.lt.1) i0=i0+1024 dtt=tbuf(i)-tbuf(i0) ms=0 if(dtt.gt.0.d0 .and. dtt.lt.80000.0) ms=1000.d0*dtt msbig=max(ms,msbig) enddo if(ndebug.gt.0 .and. msbig.gt.msmax .and. msbig.gt.330) then call cs_lock('savedata') write(*,1020) msbig 1020 format('Warning: interrupt service interval',i11,' ms.') call cs_unlock endif msmax=max(msbig,msmax) do i=1,jza k=k+1 if(k.gt.NRxMax) k=k-NRxMax xx=dgain*y1(k) xx=min(32767.0,max(-32767.0,xx)) d2a(i)=nint(xx) enddo fnamea=fname0 npingtime=0 fname=fnamea !Save filename for output to disk nagain=0 mousebutton=0 ndecoding=1 !Request decoding ! Generate file name and write data to file ! if(nsave.ge.2 .and. ichar(fname(1:1)).ne.0) then if(ichar(fname(1:1)).ne.0) then ! Generate header for wavefile: ariff='RIFF' awave='WAVE' afmt='fmt ' adata='data' lenfmt=16 nfmt2=1 nchan2=1 nsamrate=11025 nbytesam2=2 nbytesec=nchan2*nsamrate*nbytesam2 nbitsam2=16 ndata=2*jza nbytes=ndata+44 nchunk=nbytes-8 do i=80,1,-1 if(appdir(i:i).ne.' ') go to 10 enddo 10 longname=AppDir(1:i)//'/RxWav/'//fname call cs_lock('savedata') open(17,file=longname,status='unknown',form='unformatted', & access='direct',recl=nbytes,err=20) if (n4.ne.nfmt2) then nchunk = iswap_int(nchunk) lenfmt = iswap_int(lenfmt) nfmt2 = iswap_short(nfmt2) nchan2 = iswap_short(nchan2) nsamrate = iswap_int(nsamrate) nbytesec = iswap_int(nbytesec) nbytesam2 = iswap_short(nbytesam2) nbitsam2 = iswap_short(nbitsam2) ndata = iswap_int(ndata) write(17,rec=1) ariff,nchunk,awave,afmt,lenfmt,nfmt2,nchan2,nsamrate, & nbytesec,nbytesam2,nbitsam2,adata,ndata,(iswap_short(d2a(j)),j=1,jza) else write(17,rec=1) ariff,nchunk,awave,afmt,lenfmt,nfmt2,nchan2,nsamrate, & nbytesec,nbytesam2,nbitsam2,adata,ndata,(d2a(j),j=1,jza) endif close(17) filetokillb=filetokilla filetokilla=longname go to 30 20 print*,'Error opening Fortran unit 17.' print*,longname 30 continue call cs_unlock endif 999 if(mode(1:4).ne.'JT65' .and. mode(1:3).ne.'JT4' & .and. mode(1:2).ne.'CW') then ibuf0z=ibuf0 call get_fname(hiscall,iyr,imo,ida,ntime,lauto,fname0) endif return end subroutine savedata wsjt_9.3.r2792/encode_rs.c0000664000175000017500000000230610465172107013505 0ustar jtnjtn/* Reed-Solomon encoder * Copyright 2002, Phil Karn, KA9Q * May be used under the terms of the GNU General Public License (GPL) */ #include #ifdef FIXED #include "fixed.h" #elif defined(BIGSYM) #include "int.h" #else #include "char.h" #endif void ENCODE_RS( #ifdef FIXED DTYPE *data, DTYPE *bb,int pad){ #else void *p,DTYPE *data, DTYPE *bb){ struct rs *rs = (struct rs *)p; #endif int i, j; DTYPE feedback; #ifdef FIXED /* Check pad parameter for validity */ if(pad < 0 || pad >= NN) return; #endif memset(bb,0,NROOTS*sizeof(DTYPE)); for(i=0;i&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: wsjt_9.3.r2792/gen65.f0000664000175000017500000000477311563244773012516 0ustar jtnjtn subroutine gen65(message,mode65,nfast,samfac,ntxdf,iwave,nwave, + sendingsh,msgsent,nmsg) C Encodes a JT65 message into a wavefile. parameter (NMAX=60*11025) !Max length of wave file character*22 message !Message to be generated character*22 msgsent !Message as it will be received character*3 cok !' ' or 'OOO' character*6 c1,c2 real*8 t,dt,phi,f,f0,dfgen,dphi,twopi,samfac,tsymbol integer*2 iwave(NMAX) !Generated wave file integer dgen(12) integer sent(63) integer sendingsh common/c1c2/c1,c2 include 'prcom.h' data twopi/6.283185307d0/ save if(abs(pr(1)).ne.1.0) call setup65 call chkmsg(message,cok,nspecial,flip) if(nspecial.eq.0) then call packmsg(message,dgen) !Pack message into 72 bits sendingsh=0 if(iand(dgen(10),8).ne.0) sendingsh=-1 !Plain text flag call rs_encode(dgen,sent) call interleave63(sent,1) !Apply interleaving call graycode(sent,63,1) !Apply Gray code tsymbol=4096.d0/(nfast*11025.d0) nsym=126 !Symbols per transmission else tsymbol=16384.d0/11025.d0 nsym=32 sendingsh=1 !Flag for shorthand message endif C Set up necessary constants dt=1.0/(samfac*11025.0) f0=118*11025.d0/1024 + ntxdf dfgen=mode65*11025.d0/4096.d0 t=0.d0 phi=0.d0 k=0 j0=0 ndata=(nsym*11025.d0*samfac*tsymbol)/2 ndata=2*ndata do i=1,ndata t=t+dt j=int(t/tsymbol) + 1 !Symbol number, 1-126 if(j.ne.j0) then f=f0 if(nspecial.ne.0 .and. mod(j,2).eq.0) f=f0+10*nspecial*dfgen if(nspecial.eq.0 .and. flip*pr(j).lt.0.0) then k=k+1 f=f0+(sent(k)+2)*dfgen endif dphi=twopi*dt*f j0=j endif phi=phi+dphi iwave(i)=32767.0*sin(phi) enddo do j=1,5512 !Put another 0.5 sec of silence at end i=i+1 iwave(i)=0 enddo nwave=i call unpackmsg(dgen,msgsent) if(flip.lt.0.0) then do i=22,1,-1 if(msgsent(i:i).ne.' ') goto 10 enddo 10 msgsent=msgsent(1:i)//' OOO' endif do i=22,1,-1 if(msgsent(i:i).ne.' ') goto 20 enddo 20 nmsg=i return end wsjt_9.3.r2792/tab.c0000664000175000017500000000156611015074716012320 0ustar jtnjtn/* 8-bit parity lookup table, generated by partab.c */ unsigned char Partab[] = { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, }; wsjt_9.3.r2792/grid2deg.f0000664000175000017500000000243011015074716013233 0ustar jtnjtn subroutine grid2deg(grid0,dlong,dlat) C Converts Maidenhead grid locator to degrees of West longitude C and North latitude. character*6 grid0,grid character*1 g1,g2,g3,g4,g5,g6 grid=grid0 i=ichar(grid(5:5)) if(grid(5:5).eq.' ' .or. i.le.64 .or. i.ge.128) grid(5:6)='mm' if(grid(1:1).ge.'a' .and. grid(1:1).le.'z') grid(1:1)= + char(ichar(grid(1:1))+ichar('A')-ichar('a')) if(grid(2:2).ge.'a' .and. grid(2:2).le.'z') grid(2:2)= + char(ichar(grid(2:2))+ichar('A')-ichar('a')) if(grid(5:5).ge.'A' .and. grid(5:5).le.'Z') grid(5:5)= + char(ichar(grid(5:5))-ichar('A')+ichar('a')) if(grid(6:6).ge.'A' .and. grid(6:6).le.'Z') grid(6:6)= + char(ichar(grid(6:6))-ichar('A')+ichar('a')) g1=grid(1:1) g2=grid(2:2) g3=grid(3:3) g4=grid(4:4) g5=grid(5:5) g6=grid(6:6) nlong = 180 - 20*(ichar(g1)-ichar('A')) n20d = 2*(ichar(g3)-ichar('0')) xminlong = 5*(ichar(g5)-ichar('a')+0.5) dlong = nlong - n20d - xminlong/60.0 c print*,nlong,n20d,xminlong,dlong nlat = -90+10*(ichar(g2)-ichar('A')) + ichar(g4)-ichar('0') xminlat = 2.5*(ichar(g6)-ichar('a')+0.5) dlat = nlat + xminlat/60.0 c print*,nlat,xminlat,dlat return end wsjt_9.3.r2792/alignmsg.f900000664000175000017500000000211511461555650013524 0ustar jtnjtnsubroutine alignmsg(word0,nmin,msg,msglen,idone) character*(*) word0 character*29 msg,word word=word0//' ' idone=0 ! Test for two (or more) characters if(word(1:2).eq.' ' .and. len(word).eq.2) then i2=index(msg,' ') if((i2.ge.1.and.i2.lt.msglen) .or. & (msg(1:1).eq.' '.and.msg(msglen:msglen).eq.' ')) then if(i2.eq.1) msg=msg(i2+2:msglen) !Align on EOM if(i2.ge.2) msg=msg(i2+2:msglen)//msg(1:i2-1) idone=1 endif ! Align on single (as last resort) else if(word(1:1).eq.' ' .and. len(word).eq.1) then i3=index(msg,' ') if(i3.ge.1 .and. i3.lt.msglen) msg=msg(i3+1:msglen)//msg(1:i3) if(i3.eq.msglen) msg=msg(1:msglen) msg=msg(1:msglen)//msg(1:msglen) idone=1 ! Align on specified word else call match(word,msg(1:msglen),nstart,nmatch) if(nmatch.ge.nmin) then if(nstart.eq.1) msg=msg(nstart:msglen) if(nstart.gt.1) msg=msg(nstart:msglen)//msg(1:nstart-1) idone=1 endif endif return end subroutine alignmsg wsjt_9.3.r2792/prcom2.f0000664000175000017500000000102611015074716012746 0ustar jtnjtn common/prcom2/ npr2(207),pr2(207) data npr2/ + 0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0, + 1,0,0,1,0,0,1,1,1,1,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,1, + 0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1, + 0,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1, + 0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,1, + 1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1/ wsjt_9.3.r2792/stdecode.f0000664000175000017500000000671411231655622013350 0ustar jtnjtn subroutine stdecode(s2,nchan,nz,sigma,dtbuf,df,stlim0, + DFTolerance,cfile6,pick,istart) C Search for and decode single-tone messages. real s2(nchan,nz) integer DFTolerance logical pick character cfile6*6,msg3*3 character*90 line common/ccom/nline,tping(100),line(100) NSPD=25 !Change if FSK110 is implemented LTone=2 NBaud=11025/NSPD stlim=stlim0 if(pick) stlim=stlim0-1.0 iwidth=1 ts0=-1.0 dt=1.0/11025.0 C In each time slice, find largest peak between LTone*NBaud-DFTolerance and C (LTone+3)*NBaud+DFTolerance. ia=(LTone*NBaud-DFTolerance)/df - 5.0 ib=((LTone+3)*NBaud+DFTolerance)/df - 4.0 ipk=0 !Shut up compiler warnings. -db do j=1,nz smax=0. do i=ia,ib !Get the spectral peak if(s2(i,j).gt.smax) then smax=s2(i,j) ipk=i endif enddo peak=dB(smax/sigma) - 14.0 !Empirical C constant should be dB(43/2500) = -17.6 dB? if(peak.gt.stlim) then C To minimize false ST decodings from QRN and MT pings, find the C second best peak (excluding points around the first peak). smax2=0. do i=ia,ib if((abs(i-ipk).gt.iwidth) .and. s2(i,j).gt.smax2) then smax2=s2(i,j) endif enddo C Larger values of ratlim make it more likely to report ST decodings. ratlim=0.18 if(stlim.lt.-2.5) ratlim=0.20 if(stlim.lt.-3.5) ratlim=0.22 if(stlim.lt.-4.5) ratlim=0.24 if(pick) ratlim=0.27 !Fine tuning here... if(smax2/smax.gt.ratlim) goto 20 call peakup(s2(ipk-1,j),s2(ipk,j),s2(ipk+1,j),dx) freq=(ipk+5+dx)*df tstart=j*dtbuf + dt*(istart-1) mswidth=20 nwidth=0 nstrength=0 n=nint(freq/NBaud) noffset=freq-n*NBaud if((noffset.lt.-DFTolerance) .or. + (noffset.gt.DFTolerance)) goto 20 C The numbers 2 and 5 depend on Ltone: if(n.lt.2 .or. n.gt.5) goto 20 C OK, this detection has survived all tests. Save it for output C (uness perhaps it is redundant). if(n.eq.LTone) msg3='R26' if(n.eq.LTone+1) msg3='R27' if(n.eq.LTone+2) msg3='RRR' if(n.eq.LTone+3) msg3='73' C Now check for redundant detections. (Not sure, now, why I chose C the time span 0.11 s.) peak0=0.0 !Shut up compiler warnings. -db if(tstart-ts0.gt.0.11) then peak0=0. !If time diff>0.11s, start fresh else if(peak.le.peak0) goto 20 nline=nline-1 !Delete previous, this one's better peak0=peak !Save best peak endif C OK, we want to output this one. Save the information. if(nline.le.99) nline=nline+1 ts0=tstart tping(nline)=tstart nst=(int(smax/smax2)-4)/2 + 1 if(nst.lt.1) nst=1 if(nst.gt.3) nst=3 call cs_lock('stdecode') write(line(nline),1050) cfile6,tstart,mswidth,int(peak), + nwidth,nstrength,noffset,msg3,nst 1050 format(a6,f5.1,i5,i3,1x,2i1,i5,1x,a3,40x,i3) call cs_unlock endif 20 continue enddo return end wsjt_9.3.r2792/setup.py0000664000175000017500000000232311756463535013125 0ustar jtnjtn#!/usr/bin/env python version="WSJT Version 9.1, by K1JT" from distutils.core import setup from distutils.file_util import copy_file import os def wsjt_install(install): # # In a true python environment, Audio.so would be compiled from python # I'm doing a nasty hack here to support our hybrid build system -db # if install == 1: os.makedirs('build/lib/WsjtMod') copy_file('WsjtMod/Audio.so', 'build/lib/WsjtMod') setup(name='Wsjt', version=version, description='Wsjt Python Module for Weak Signal detection', long_description=''' WSJT is a computer program designed to facilitate Amateur Radio communication under extreme weak-signal conditions. Three very different coding and modulation methods are provided: one for communication by "meteor scatter" techniques on the VHF bands; one for meteor and ionospheric scatter, primarily on the 6 meter band; and one for the very challenging EME (Earth-Moon-Earth) path. ''', author='Joe Taylor', author_email='joe@Princeton.EDU', license='GPL', url='http://physics.princeton.edu/pulsar/K1JT', scripts=['wsjt','wsjt.py'], packages=['WsjtMod'], ) if __name__ == '__main__': import sys if 'install' in sys.argv: wsjt_install(1) else: wsjt_install(0) wsjt_9.3.r2792/foldms.f900000664000175000017500000000247311461555650013216 0ustar jtnjtnsubroutine foldms(s2,msglen,nchar,mycall,msg,msg29) ! Fold the 2-d "goodness of fit" array s2 modulo message length, ! then decode the folded message. real s2(0:63,400) real fs2(0:63,29) integer nfs2(29) character mycall*12 character msg*400,msg29*29 character cc*64 ! 1 2 3 4 5 6 ! 0123456789012345678901234567890123456789012345678901234567890123 data cc/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ./?- _ @'/ fs2=0. nfs2=0 do j=1,nchar !Fold s2 into fs2, modulo msglen jj=mod(j-1,msglen)+1 nfs2(jj)=nfs2(jj)+1 do i=0,40 fs2(i,jj)=fs2(i,jj) + s2(i,j) enddo enddo msg=' ' do j=1,msglen smax=0. do k=0,40 if(fs2(k,j).gt.smax) then smax=fs2(k,j) kpk=k endif enddo if(kpk.eq.40) kpk=57 msg(j:j)=cc(kpk+1:kpk+1) if(kpk.eq.57) msg(j:j)=' ' enddo msg29=msg(1:msglen) call alignmsg(' ',2,msg29,msglen,idone) if(idone.eq.0) call alignmsg('CQ', 3,msg29,msglen,idone) if(idone.eq.0) call alignmsg('QRZ', 3,msg29,msglen,idone) if(idone.eq.0) call alignmsg(mycall,4,msg29,msglen,idone) if(idone.eq.0) call alignmsg(' ', 1,msg29,msglen,idone) msg29=adjustl(msg29) return end subroutine foldms wsjt_9.3.r2792/detect.f0000664000175000017500000000116511015074716013020 0ustar jtnjtn subroutine detect(data,npts,f,y) C Compute powers at the tone frequencies using 1-sample steps. parameter (NZ=11025,NSPD=25) real data(npts) real y(npts) complex c(NZ) complex csum data twopi/6.283185307/ dpha=twopi*f/11025.0 do i=1,npts c(i)=data(i)*cmplx(cos(dpha*i),-sin(dpha*i)) enddo csum=0. do i=1,NSPD csum=csum+c(i) enddo y(1)=real(csum)**2 + aimag(csum)**2 do i=2,npts-(NSPD-1) csum=csum-c(i-1)+c(i+NSPD-1) y(i)=real(csum)**2 + aimag(csum)**2 enddo return end wsjt_9.3.r2792/spec441.f0000664000175000017500000000154511022616637012737 0ustar jtnjtn subroutine spec441(dat,jz,s,f0) C Computes average spectrum over a range of dat, e.g. for a ping. C Returns spectral array and frequency of peak value. parameter (NFFT=256) parameter (NR=NFFT+2) parameter (NH=NFFT/2) real*4 dat(jz) real*4 x(NR),s(NH) complex c(0:NH) equivalence (x,c) call zero(s,NH) nz=jz/NFFT do n=1,nz j=1 + (n-1)*NFFT call move(dat(j),x,NFFT) call xfft(x,NFFT) do i=1,NH s(i)=s(i)+real(c(i))**2 + aimag(c(i))**2 enddo enddo smax=0. df=11025.0/NFFT fac=1.0/(100.0*nfft*nz) do i=1,nh s(i)=fac*s(i) if(s(i).gt.smax) then smax=s(i) f0=i*df endif enddo return end wsjt_9.3.r2792/decode65.f0000664000175000017500000000457311563244773013166 0ustar jtnjtn subroutine decode65(dat,npts,dtx,dfx,flip,ndepth,neme, + mycall,hiscall,hisgrid,mode65,nfast,nafc,decoded,ncount, + deepmsg,qual) C Decodes JT65 data, assuming that DT and DF have already been determined. real dat(npts) !Raw data real s2(77,126) real s3(64,63) real ftrack(126) character decoded*22,deepmsg*22 character mycall*12,hiscall*12,hisgrid*6 !### real xx(256) real ss(-128:128) common/tmp8/ mcode(63) !### include 'avecom.h' include 'prcom.h' dt=2.0/11025.0 !Sample interval (2x downsampled data) istart=nint(dtx/dt) !Start index for synced FFTs nsym=126 C Compute spectra of the channel symbols f0=1270.46 + dfx call spec2d65(dat,npts,nsym,flip,istart,f0,ftrack,nafc,mode65, + nfast,s2) do j=1,63 k=mdat(j) !Points to data symbol if(flip.lt.0.0) k=mdat2(j) do i=1,64 s3(i,j)=s2(i+7,k) enddo enddo nadd=mode65 call extract(s3,nadd,ncount,decoded) !Extract the message qual=0. if(ndepth.ge.1) call deep65(s3,mode65,neme, + flip,mycall,hiscall,hisgrid,deepmsg,qual) !### if(qual.gt.10.0) then ! rewind 82 j=1 do i=1,126 k=mdat(j) if(flip.lt.0.0) k=mdat2(j) if(i.eq.k) then xx(i)=s2(mcode(j)+7,i) j=j+1 else xx(i)=s2(6,i) endif enddo do i=127,256 xx(i)=0. enddo call ps(xx,256,ss(1)) do i=1,128 ss(-i)=ss(i) enddo ss(0)=ss(1) call smooth(ss,257) do i=-128,128 ff=i*11025.0/(4096.0*256) write(82,3001) ff,1000.0*ss(i),db(ss(i)/ss(0)),deepmsg 3001 format(f9.4,2f12.3,2x,a22) enddo endif !### if(ncount.lt.0) decoded=' ' C Suppress "birdie messages": if(decoded(1:7).eq.'000AAA ') decoded=' ' if(decoded(1:7).eq.'0L6MWK ') decoded=' ' C Save symbol spectra for possible decoding of average. do j=1,63 k=mdat(j) if(flip.lt.0.0) k=mdat2(j) call move(s2(8,k),ppsave(1,j,nsave),64) enddo return end wsjt_9.3.r2792/peakup.f0000664000175000017500000000020111015074716013023 0ustar jtnjtn subroutine peakup(ym,y0,yp,dx) b=(yp-ym)/2.0 c=(yp+ym-2.0*y0)/2.0 dx=-b/(2.0*c) return end wsjt_9.3.r2792/gen24.f0000664000175000017500000000477711461555650012511 0ustar jtnjtn subroutine gen24(message,mode4,samfac,ntxdf,iwave,nwave, + sendingsh,msgsent,nmsg) C Encode a JT4 message into a wavefile. parameter (NMAX=60*11025) !Max length of wave file character*22 message !Message to be generated character*22 msgsent !Message as it will be received character*3 cok !' ' or 'OOO' real*8 t,dt,phi,f,f0,dfgen,dphi,pi,twopi,samfac,tsymbol integer*2 iwave(NMAX) !Generated wave file integer sendingsh integer dgen(13) integer*1 data0(13),symbol(216) logical first include 'prcom2.f' data first/.true./ save nsym=207 !Symbols per transmission if(first) then do i=1,nsym pr2(i)=2*npr2(i)-1 enddo pi=4.d0*atan(1.d0) twopi=2.d0*pi first=.false. endif call chkmsg(message,cok,nspecial,flip) call packmsg(message,dgen) !Pack 72-bit message into 12 six-bit symbols call entail(dgen,data0) call unpackmsg(dgen,msgsent) nbytes=(72+31+7)/8 call encode(data0,nbytes,symbol(2)) !Convolutional encoding symbol(1)=0 !Reference phase sendingsh=0 if(iand(dgen(10),8).ne.0) sendingsh=-1 !Plain text flag call interleave24(symbol(2),1) !Apply JT4 interleaving C Set up necessary constants tsymbol=2520.d0/11025.d0 dt=1.d0/(samfac*11025.d0) f0=118*11025.d0/1024 + ntxdf dfgen=11025.d0/2520 !4.375 Hz t=0.d0 phi=0.d0 j0=0 ndata=(nsym*11025.d0*samfac*tsymbol)/2 ndata=2*ndata do i=1,ndata t=t+dt j=int(t/tsymbol) + 1 !Symbol number, 1-207 if(j.ne.j0) then f=f0 + (npr2(j)+2*symbol(j)-1.5) * dfgen * mode4 if(flip.lt.0.0) + f=f0+((1-npr2(j))+2*symbol(j)-1.5)*dfgen*mode4 dphi=twopi*dt*f j0=j endif phi=phi+dphi iwave(i)=32767.0*sin(phi) enddo do j=1,5512 !Put another 0.5 sec of silence at end i=i+1 iwave(i)=0 enddo nwave=i if(flip.lt.0.0) then do i=22,1,-1 if(msgsent(i:i).ne.' ') goto 10 enddo 10 msgsent=msgsent(1:i)//' OOO' endif do i=22,1,-1 if(msgsent(i:i).ne.' ') goto 20 enddo 20 nmsg=i ! write(*,3002) (symbol(i),i=1,207) ! 3002 format(70i1) return end wsjt_9.3.r2792/get_fname.f900000664000175000017500000000111111461555650013643 0ustar jtnjtnsubroutine get_fname(hiscall,iyr,imo,ida,ntime,lauto,fname) character hiscall*12,fname*24,tag*7 integer ntime nsec=mod(ntime,86400) ihr=nsec/3600 imin=mod(nsec/60,60) isec=mod(nsec,60) call cs_lock('get_fname') write(fname,1000) iyr-2000,imo,ida,ihr,imin,isec 1000 format('_',3i2.2,'_',3i2.2,'.WAV') call cs_unlock tag=hiscall(1:7) i=index(hiscall,'/') if(i.ge.5) tag=hiscall(1:i-1) if(i.ge.2.and.i.le.4) tag=hiscall(i+1:) if(hiscall(1:1).eq.' ' .or. lauto.eq.0) tag='Mon' i=index(tag,' ') fname=tag(1:i-1)//fname return end subroutine get_fname wsjt_9.3.r2792/xcor24.f0000664000175000017500000000553311461555650012702 0ustar jtnjtn subroutine xcor24(s2,ipk,nsteps,nsym,lag1,lag2,mode4, + ccf,ccf0,lagpk,flip) C Computes ccf of a row of s2 and the pseudo-random array pr2. Returns C peak of the CCF and the lag at which peak occurs. For JT65, the C CCF peak may be either positive or negative, with negative implying C the "OOO" message. parameter (NHMAX=1260) !Max length of power spectra parameter (NSMAX=525) !Max number of half-symbol steps real s2(NHMAX,NSMAX) !2d spectrum, stepped by half-symbols real a(NSMAX) real ccf(-5:540) integer npr2(207) real pr2(207) logical first data lagmin/0/ !Silence g77 warning data first/.true./ data npr2/ + 0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0, + 1,0,0,1,0,0,1,1,1,1,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,1, + 0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1, + 0,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1, + 0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,1, + 1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1/ save if(first) then do i=1,207 pr2(i)=2*npr2(i)-1 enddo first=.false. endif do j=1,nsteps n=2*mode4 if(mode4.eq.1) then a(j)=max(s2(ipk+n,j),s2(ipk+3*n,j)) - + max(s2(ipk ,j),s2(ipk+2*n,j)) else kz=mode4/2 ss0=0. ss1=0. ss2=0. ss3=0. wsum=0. do k=-kz+1,kz-1 w=float(kz-iabs(k))/mode4 wsum=wsum+w if(ipk+k.lt.1 .or. ipk+3*n+k.gt.1260) then print*,'xcor24:',ipk,n,k else ss0=ss0 + w*s2(ipk +k,j) ss1=ss1 + w*s2(ipk+ n+k,j) ss2=ss2 + w*s2(ipk+2*n+k,j) ss3=ss3 + w*s2(ipk+3*n+k,j) endif enddo a(j)=(max(ss1,ss3) - max(ss0,ss2))/sqrt(wsum) endif enddo ccfmax=0. ccfmin=0. do lag=lag1,lag2 x=0. do i=1,nsym j=2*i-1+lag if(j.ge.1 .and. j.le.nsteps) x=x+a(j)*pr2(i) enddo ccf(lag)=2*x !The 2 is for plotting scale if(ccf(lag).gt.ccfmax) then ccfmax=ccf(lag) lagpk=lag endif if(ccf(lag).lt.ccfmin) then ccfmin=ccf(lag) lagmin=lag endif enddo ccf0=ccfmax flip=1.0 if(-ccfmin.gt.ccfmax) then do lag=lag1,lag2 ccf(lag)=-ccf(lag) enddo lagpk=lagmin ccf0=-ccfmin flip=-1.0 endif return end wsjt_9.3.r2792/msdf.f900000664000175000017500000000253511461555650012662 0ustar jtnjtnsubroutine msdf(cdat,npts,t2,nfft1,f0,nfreeze,mousedf,dftolerance,dfx,snrsq2) ! Determine DF for a JTMS signal. Also find ferr, a measure of ! frequency differerence between 1st and 2nd harmonic. ! (Should be 0.000) parameter (NZ=32768) complex cdat(npts) integer dftolerance real sq(NZ) real ccf(-2600:2600) !Correct limits? real tmp(NZ) complex c(NZ) data nsps/8/ save c df1=11025.0/nfft1 nh=nfft1/2 fac=1.0/(nfft1**2) do i=1,npts c(i)=fac*cdat(i)**2 enddo c(npts+1:nfft1)=0. call four2a(c,nfft1,1,-1,1) ! In the "doubled-frequencies" spectrum of squared cdat: fa=2.0*(f0-400) fb=2.0*(f0+400) j0=nint(2.0*f0/df1) ja=nint(fa/df1) jb=nint(fb/df1) jd=nfft1/nsps do j=1,nh+1 sq(j)=real(c(j))**2 + aimag(c(j))**2 enddo ccf=0. do j=ja,jb ccf(j-j0-1)=sq(j)+sq(j+jd) enddo call pctile(ccf(ja-j0-1),tmp,jb-ja+1,50,base) ccf=ccf/base if(NFreeze.gt.0) then fa=2.0*(f0+MouseDF-DFtolerance) fb=2.0*(f0+MouseDF+DFtolerance) endif ja=nint(fa/df1) jb=nint(fb/df1) ! rewind 51 smax=0. do j=ja,jb k=j-j0-1 if(ccf(k).gt.smax) then smax=ccf(k) jpk=j endif f=0.5*k*df1 ! write(51,3002) f,ccf(k) !3002 format(2f12.3) enddo ! call flush(51) fpk=(jpk-1)*df1 dfx=0.5*fpk-f0 snrsq2=smax return end subroutine msdf wsjt_9.3.r2792/align28.f900000664000175000017500000000211311461555650013165 0ustar jtnjtnsubroutine align28(word0,nmin,msg,msglen,idone) character*(*) word0 character*28 msg,word word=word0//' ' idone=0 ! Test for two (or more) characters if(word(1:2).eq.' ' .and. len(word).eq.2) then i2=index(msg,' ') if((i2.ge.1.and.i2.lt.msglen) .or. & (msg(1:1).eq.' '.and.msg(msglen:msglen).eq.' ')) then if(i2.eq.1) msg=msg(i2+2:msglen) !Align on EOM if(i2.ge.2) msg=msg(i2+2:msglen)//msg(1:i2-1) idone=1 endif ! Align on single (as last resort) else if(word(1:1).eq.' ' .and. len(word).eq.1) then i3=index(msg,' ') if(i3.ge.1 .and. i3.lt.msglen) msg=msg(i3+1:msglen)//msg(1:i3) if(i3.eq.msglen) msg=msg(1:msglen) msg=msg(1:msglen)//msg(1:msglen) idone=1 ! Align on specified word else call match(word,msg(1:msglen),nstart,nmatch) if(nmatch.ge.nmin) then if(nstart.eq.1) msg=msg(nstart:msglen) if(nstart.gt.1) msg=msg(nstart:msglen)//msg(1:nstart-1) idone=1 endif endif return end subroutine align28 wsjt_9.3.r2792/encode232.f0000664000175000017500000000151711035145663013237 0ustar jtnjtn subroutine encode232(dat,nbytes,symbol,maxsym) C Convolutional encoder for a K=32, r=1/2 code. integer*1 dat(nbytes) !User data, packed 8 bits per byte integer*1 symbol(maxsym) !Channel symbols, one bit per byte integer*1 i1 include 'conv232.f' nstate=0 k=0 do j=1,nbytes do i=7,0,-1 i1=dat(j) i4=i1 if (i4.lt.0) i4=i4+256 nstate=ior(ishft(nstate,1),iand(ishft(i4,-i),1)) n=iand(nstate,npoly1) n=ieor(n,ishft(n,-16)) k=k+1 symbol(k)=partab(iand(ieor(n,ishft(n,-8)),255)) n=iand(nstate,npoly2) n=ieor(n,ishft(n,-16)) k=k+1 symbol(k)=partab(iand(ieor(n,ishft(n,-8)),255)) enddo enddo return end wsjt_9.3.r2792/Wsjt_Howto_Ubuntu.html0000664000175000017500000002064011223071501015725 0ustar jtnjtn Wsjt_Howto_Ubuntu1

How to compile WSJT under Ubuntu and Debian

by Harry Popov LZ1BB
Sep 04 2008


Several people asked how to compile WSJT as deb package provided by Ubuntu 7.10 is not working. Here is the easiest way. It was tested with Ubuntu 7.10, 8.04 and Debian Lenny distributions:
 
1. Type in terminal:

sudo apt-get build-dep wsjt

This will install all necessary dev packages needed for compilation except fftw3 libraries. To install them open Synaptic Package Menager and hit SEARCH button. Type fftw3 in the search window. Mark for installation libfftw3 and libfftw3-dev packages.

2. Download WSJT source package from:

http://lz1bb.bfra.org/wsjt/wsjt-7.0.0.r973.tar.gz

As ordinary user type in the console (terminal):

tar xzvf wsjt-7.0.0.r973.tar.gz

cd wsjt-7.0.0.r973
./configure
make clean; make

That is all!! Next just start it. IMPORTANT!!! Always cd to wsjt-7.0.0.r973 folder before running wsjt::

cd ~/wsjt-7.0.0.r973
python -O wsjt.py

I use simple script to start WSJT. Useful in case of bad memory like mine:

Create a text file called wsjt7 and copy/paste the following:

--------Copy bellow me------------
#!/bin/sh
#
# wsjt7     This shell script starts wsjt-7.0.0.r973
cd ~/wsjt-7.0.0.r973
python -O wsjt.py
--------Copy above me------------

Save file in your home folder and make it executable:
chmod +x wsjt7

If you like you could make symbolic link as root:

For Ubuntu:

sudo -s (to become root)
password (give your user password)
ln -s ~/wsjt7 /usr/bin/wsjt7
Ctrl+D (to become  ordinary user again)

For Debian:

su (to become root)
password (give your root password)
ln -s ~/wsjt7 /usr/bin/wsjt7
Ctrl+D (to become  ordinary user again)


Now you could start WSJT by simply typing wsjt7 in terminal.



For some unknown yet reasons compiled WSJT with gfortran compiler does not work on some machines. You will see the main window for a second and program crashes with "Segmentation fault" message. Solution for this problem is simple. You must install another compiler called g95 and recompile WSJT. Then all must be fine:
1. Download the g95 compiler from:

http://ftp.g95.org/#V0.91

Look at G95 Binaries and Source (Stable version 0.91, March 2008) for your architecture. For example Linux x86 package is downloaded from:

http://ftp.g95.org/v0.91/g95-x86-linux.tgz

2. Unpack the downloaded tarball (e.g. g95-x86-linux.tgz) in a directory of your choice:
tar -zxvf g95-x86-linux.tgz For your convenience, you can create another symbolic link from a directory in your $PATH (e.g. /bin) to the executable. You must be root for this. In Ubuntu:

sudo -s
ln -s $PWD/g95-install/bin/*g95* /bin/g95
Ctr+D (to go back to ordinary user)

3. Test if all is fine with g95 installation. Type g95 as command in the terminal. If all is fine you will have this answer:

g95: no input files

4. Recompile WSJT

cd ~/wsjt-7.0.0.r973
./configure --enable-g95
make clean; make



If compilation fails either with gfortran or g95 compilers check version of the package python-numpy. If it is version 1.1.0 you must downgrade to the previous python-numpy version 1.0.4 This is known problem which will be solved soon I believe.


1. Start Synaptic Package Manager. Hit SEARCH button. Type python-numpy. Mark package python-numpy for Removal and remove it.
2. Download the older python-numpy version 1.0.4 from:

http://lz1bb.bfra.org/wsjt/numpy-1.0.4.tar.gz

3. Untar and install it:

For Ubuntu:

tar xzvf numpy-1.0.4.tar.gz
cd numpy-1.0.4.tar.gz
sudo -s (to become root)
password (give your user password)
python setup.py install
Ctrl+D (to become ordinary user again)

For Debian:

tar xzvf numpy-1.0.4.tar.gz
cd numpy-1.0.4.tar.gz
su (to become root)
password (give your root password)
python setup.py install
Ctrl+D (to become ordinary user again)

This is all. Now recompile WSJT following the steps above. All must be fine now.



If you do not like the fonts and font size of WSJT just change them. Go in the folder where you compiled WSJT. Use your favourite text editor and open the file called wsjtrc. Change the fonts and/or font size figures according your choice. Actually I think you will mostly like to play with font size figures only. Save the changes and restart WSJT so changes to take effect.



Please remember that any change of Audio Device needs restart of WSJT before changes take effect.



I have problems while using default Audio Device /dev/dsp/ of WSJT program. Problems are:
   - Bad decode on FSK441
   - Programs crashes every 8 of 10 times when try to transmit on JT65.
The last was confirmed by F1EBK too.

These two problems might be connected with our local hardware but might be /dev/dsp fault. If you encounter the same behaviour just use direct card access. Usually Audio Device 1 from WSJT Setup>Options.

Some modern sound cards do not support sample rate 11025 requested by WSJT . If you have such card you will receive errors during direct access try. If so use the clue suggested by Hamish Moffatt VK3SB:
 
1. Create in your home folder empty hidden file with name:
.asoundrc

2. Copy in it the following code:

pcm.radio {
        type hw
        card 0
        device 0
}
pcm_slave.radioslave {
        pcm radio
        rate 48000
}
pcm.radioconv {
        type rate
        slave radioslave
}


3. Use appropriate Audio Device number for device called "radioconv".


Have fun!

73, Harry LZ1BB





wsjt_9.3.r2792/ana932.f900000664000175000017500000000115111556063075012717 0ustar jtnjtnsubroutine ana932(dat,npts0,cdat,npts) real dat(npts0) complex cdat(262145) complex cfft common/down932/cfft(147456),npts2,df932 n=log(float(npts0))/log(2.0) nfft1=2**(n+1) nfft2=9*nfft1/32 df932=11025.0/nfft1 fac=2.0/nfft1 do i=1,npts0/2 cdat(i)=fac*cmplx(dat(2*i-1),dat(2*i)) enddo cdat(npts0/2+1:nfft1/2)=0. call four2a(cdat,nfft1,1,-1,0) !Forward r2c FFT cfft(1:nfft2)=cdat(1:nfft2) call four2a(cdat,nfft2,1,1,1) !Inverse c2c FFT npts=npts0*9.0/32.0 !Downsampled data length npts2=npts return end subroutine ana932 wsjt_9.3.r2792/chkhist.f0000664000175000017500000000056611015074716013211 0ustar jtnjtn subroutine chkhist(mrsym,nmax,ipk) integer mrsym(63) integer hist(0:63) do i=0,63 hist(i)=0 enddo do j=1,63 i=mrsym(j) hist(i)=hist(i)+1 enddo nmax=0 do i=0,63 if(hist(i).gt.nmax) then nmax=hist(i) ipk=i+1 endif enddo return end wsjt_9.3.r2792/flat1.f0000664000175000017500000000103411015074716012552 0ustar jtnjtn subroutine flat1(psavg,s2,nh,nsteps,nhmax,nsmax) real psavg(nh) real s2(nhmax,nsmax) real x(8192),tmp(33) nsmo=33 ia=nsmo/2 + 1 ib=nh - nsmo/2 - 1 do i=ia,ib call pctile(psavg(i-nsmo/2),tmp,nsmo,50,x(i)) enddo do i=1,ia-1 x(i)=x(ia) enddo do i=ib+1,nh x(i)=x(ib) enddo do i=1,nh psavg(i)=psavg(i)/x(i) do j=1,nsteps s2(i,j)=s2(i,j)/x(i) enddo enddo return end wsjt_9.3.r2792/four2b.f900000664000175000017500000000533611461555650013132 0ustar jtnjtnsubroutine four2a(a,nfft,ndim,isign,iform) ! IFORM = 1, 0 or -1, as data is ! complex, real, or the first half of a complex array. Transform ! values are returned in array DATA. They are complex, real, or ! the first half of a complex array, as IFORM = 1, -1 or 0. ! The transform of a real array (IFORM = 0) dimensioned N(1) by N(2) ! by ... will be returned in the same array, now considered to ! be complex of dimensions N(1)/2+1 by N(2) by .... Note that if ! IFORM = 0 or -1, N(1) must be even, and enough room must be ! reserved. The missing values may be obtained by complex conjuga- ! tion. ! The reverse transformation of a half complex array dimensioned ! N(1)/2+1 by N(2) by ..., is accomplished by setting IFORM ! to -1. In the N array, N(1) must be the true N(1), not N(1)/2+1. ! The transform will be real and returned to the input array. parameter (NPMAX=100) parameter (NSMALL=16384) complex a(nfft) complex aa(NSMALL) integer nn(NPMAX),ns(NPMAX),nf(NPMAX),nl(NPMAX) real*8 plan(NPMAX) !Actually should be i*8, but no matter data nplan/0/ include 'fftw3.f' save plan,nplan,nn,ns,nf,nl if(nfft.lt.0) go to 999 nloc=loc(a) do i=1,nplan if(nfft.eq.nn(i) .and. isign.eq.ns(i) .and. & iform.eq.nf(i) .and. nloc.eq.nl(i)) go to 10 enddo if(nplan.ge.NPMAX) stop 'Too many FFTW plans requested.' nplan=nplan+1 i=nplan nn(i)=nfft ns(i)=isign nf(i)=iform nl(i)=nloc ! Planning: FFTW_ESTIMATE, FFTW_ESTIMATE_PATIENT, FFTW_MEASURE, ! FFTW_PATIENT, FFTW_EXHAUSTIVE npatience=1 nflags=FFTW_ESTIMATE if(npatience.eq.1) nflags=FFTW_ESTIMATE_PATIENT if(npatience.eq.2) nflags=FFTW_MEASURE if(npatience.eq.3) nflags=FFTW_PATIENT if(npatience.eq.4) nflags=FFTW_EXHAUSTIVE if(nfft.le.NSMALL) then jz=nfft if(iform.eq.0) jz=nfft/2 do j=1,jz aa(j)=a(j) enddo endif ! call sleep_msec(0) if(isign.eq.-1 .and. iform.eq.1) then call sfftw_plan_dft_1d(plan(i),nfft,a,a,FFTW_FORWARD,nflags) else if(isign.eq.1 .and. iform.eq.1) then call sfftw_plan_dft_1d(plan(i),nfft,a,a,FFTW_BACKWARD,nflags) else if(isign.eq.-1 .and. iform.eq.0) then call sfftw_plan_dft_r2c_1d(plan(i),nfft,a,a,nflags) else if(isign.eq.1 .and. iform.eq.-1) then call sfftw_plan_dft_c2r_1d(plan(i),nfft,a,a,nflags) else stop 'Unsupported request in four2a' endif ! call sleep_msec(0) i=nplan if(nfft.le.NSMALL) then jz=nfft if(iform.eq.0) jz=nfft/2 do j=1,jz a(j)=aa(j) enddo endif 10 continue ! call sleep_msec(0) call sfftw_execute(plan(i)) ! call sleep_msec(0) return 999 do i=1,nplan call sfftw_destroy_plan(plan(i)) enddo return end subroutine four2a wsjt_9.3.r2792/gen441.f900000664000175000017500000000060511770624406012726 0ustar jtnjtnsubroutine gen441(itone,ndits,cfrag) integer itone(84) complex cfrag(2100) ! Generate iwave twopi=8*atan(1.0) dt=1.0/11025.0 k=0 NSPD=25 df=11025.0/NSPD pha=0. do m=1,ndits freq=(itone(m)+1)*df dpha=twopi*freq*dt do i=1,NSPD k=k+1 pha=pha+dpha cfrag(k)=cmplx(sin(pha),-cos(pha)) enddo enddo return end subroutine gen441 wsjt_9.3.r2792/tweak2.f900000664000175000017500000000076511546363177013136 0ustar jtnjtnsubroutine tweak2(ca,jz,fsample,f0,f1,cb) ! Shift frequency of analytic signal ca, with output to cb complex ca(jz),cb(jz) real*8 twopi,dphi complex*16 w,wstep data twopi/0.d0/ save twopi if(twopi.eq.0.d0) twopi=8.d0*atan(1.d0) w=1.d0 x0=0.5*(jz+1) do i=1,jz x=(i-x0)/fsample if(mod(i,100).eq.1) then dphi=(f0 + f1*x) * (twopi/fsample) wstep=cmplx(cos(dphi),sin(dphi)) endif w=w*wstep cb(i)=w*ca(i) enddo return end subroutine tweak2 wsjt_9.3.r2792/WSJT_Source_Code.txt0000775000175000017500000002721111022562357015207 0ustar jtnjtn WSJT DEVELOPMENT OVERVIEW ------------------------- 1 Introduction ---------------------------------------------------------------------- WSJT is a computer program designed to facilitate Amateur Radio communication under extreme weak-signal conditions. Three very different coding and modulation methods are provided: one for communication by "meteor scatter" techniques on the VHF bands; one for meteor and ionospheric scatter, primarily on the 6 meter band; and one for the very challenging EME (Earth-Moon-Earth) path. 2 Program Overview ---------------------------------------------------------------------- WSJT's user interface is written in Python. The major Python source-code files include: 1. wsjt.py Defines the main-screen GUI for user interactions; acts as "traffic cop" for orchestrating all event-driven and time-shared activities. 2. specjt.py Provides real-time display of received signals as two-dimensional "waterfall" spectra. 3. options.py Provides entry fields for user-defined parameters. 4. astro.py Displays astronomical data for sun, moon, sky temperature, etc. Smaller Python files serve various utility purposes. Both wsjt.py and specjt.py make calls to external procedures compiled from Fortran and C. A variety of global data is shared among modules through common blocks defined in Fortran. The Python code runs in a single thread, although timers make the functions of the several main modules appear concurrent. Fortran routines create additional threads to be used for soundcard I/O and the decoding of received messages. As a small part of its overall task, the decoder for JT65 invokes an external program named KVASD.EXE or KVASD, located in the main WSJT directory. If this program is present it uses information on received 64-FSK symbols and attempts to decipher it according to a Reed Solomon (63,12) code, using the algebraic soft-decision algorithm of Koetter and Vardy. If KVASD is not present, WSJT uses its own internal hard-decision Reed Solomon decoder instead. Interprocess communication between WSJT and KVASD takes place through a shared disk file. KVASD is not an integral part of WSJT. Its algorithm is patented, and the source code is the property of CodeVector Technologies, LLC. However, compiled versions of KVASD may be freely used in conjunction with WSJT for the purposes of amateur radio weak-signal communication. 3 Some Functional Details ---------------------------------------------------------------------- WSJT execution starts at the top of Python file wsjt.py. The other Python modules are loaded and executed as needed. Fortran routines are called to start a high-priority thread to handle continuous A/D and D/A streams, and a background thread to decode received or previously recorded signals. The top-level Python code determines the overall state of program operation, e.g., Idle, Monitoring, or Transmitting. In normal usage the operator puts the program into Auto mode, resulting in a timed sequence of alternating transmission and reception intervals. 4 Other Open-Source Software used in WSJT ---------------------------------------------------------------------- WSJT 5.9 uses the following open source libraries: 1. FFTW, by Matteo Frigo and Steven Johnson, for computing Fourier transforms 2. PortAudio, by Ross Bencina and Phil Burk, for audio I/O 3. "Secret Rabbit Code" or "libsamplerate", by Erik de Castro, for accomplishing band-limited resampling of data 4. RS, by Phil Karn, KA9Q, for Reed Solomon encoding and hard-decision decoding. 5 Platform-Dependent Notes ---------------------------------------------------------------------- The Python code should run on any supported Python platform. Most of the remaining code can be compiled for Linux, FreeBSD, unix, or OS/X, as well as Windows. Platform-dependent versions of FFTW, PortAudio, and libsamplerate may need to be installed. Methods are provided for creating additional threads and setting their runtime priorities in Windows, Linux, and FreeBSD. 6 Partial List of Functions and Subroutines, and their purposes ---------------------------------------------------------------------- Routines for audio startup, decoding, display computations blanker.f90 Noise blanker fivehz.f90 Called by PortAudio callback flat2.f Flatten the spectrum for waterfall display pix2d65.f90 Computes pixels for waterfall display pix2d.f90 Computes pixels for waterfall display runqqq.f90 Executes another process wsjtgen.f90 Generates Tx waveforms abc441.f90 Part of FSK441 generator gen65.f Generate JT65 waveform chkmsg.f Check a JT65 message for presence of 'OOO' encode65.f Encode a JT65 message getpfx1.f Handle extra DXCC prefixes getpfx2.f ... graycode.f Convert binary to/from Gray code nchar.f Convert number, letter, space to 0-36 packcall.f Routines for JT65 source encoding packdxcc.f ... packgrid.f ... packmsg.f ... packtext.f ... pfx.f ... gen6m.f Generate JT6M waveform gentone.f Generate tone for JT6M message gencw.f Generate CW waveform morse.f Convert ascii to morse dits gencwid.f Generate a CW ID message grid2k.f Convert grid locator to integer interleave63.f Interleave JT65 symbols gcom1.f90 Global commons for sharing data among Fortran routines gcom2.f90 and between Fortran and Python gcom3.f90 gcom4.f90 makedate.f90 Gererates makedate_sub.f90 Astronomical calculations: astro.f Computes Az, El, Doppler for Sun, Moon, etc. astropak.f "Includes" for astro supoport routines azdist.f Computes azimuth, distance, etc., between two locators coord.f Spherical trig utility dcoord.f Spherical trig utility in double precision deg2grid.f Convert lat/long (degrees) to grid locator dot.f Compute dot product ftsky.f Get sky temperature from data file geocentric.f Convert geodetic to geocentric coords GeoDist.f Compute azimuth and distance between two locators grid2deg.f Convert grid locator to lat/long moon2.f Compute moon location at specified date and time MoonDop.f Compute lunar doppler shift and related quantities sun.f Compure sun location at specified date and time toxyz.f Convert between polar and cartesian coords Utilities: db.f Compute decibels from ratio gasdev.f Generate Gaussian random numbers igray.f Gray code indexx.f Sort routine set.f Move, add, zero, ... pctile.f Sort an array and get specified percentile ran1.f Uniform random numbers rfile2.f Read a binary file (Linux) sort.f Sort an array FFTs: fftw3.f Fortran definitions for FFTW four2a.f Wrapper to make FFTW look like four2 four2.f FFT in Fortran (a;ternative to using FFTW) ps.f Compute power spectrum xfft.f Real to complex FFT wrapper Routines for Decoding: wsjt1.f Top-level decoding routine; handles FSK441 especially avesp2.f Computes average spectrum bzap.f Find and remove birdies detect.f Measure power in FSK441 tones flatten.f Flatten the spectrum longx.f Decode normal FSK441 messages lpf1.f Quick-and-dirty lowpass filter mtdecode.f Multi-tone decoding ping.f Find pings s2shape.f Flatten the 2d spectrum smooth.f Smooth by boxcar averaging spec2d.f Compute 2d spectrum for FSK441 stdecode.f Decode FSK441 shorthand messages sync.f Synchronize FSK441 data wsjt65.f JT65 decoder afc65.f AFC for JT65 avemsg65.f Decode average message decode65.f Decode JT65 message deep65.f Deep search decoder demod64a.f Compute probabilities of transmitted symbols extract.f Extract message from JT65 symbol probabilities flat1.f Flatten the passband getsnr.f Compute snr or shorthand message k2grid.f Convert integer to 4-digit grid locator limit.f Clipper for JT65 peakup.f Interpolate to find fractional-bin peak setup65.f Initialize pseudorandom sync vector short65.f Detect JT65 shorthand messages slope.f Remove a straight-line slope spec2d65.f Compute 2d spectrum for JT65 spec441.f Compute spectra for FSK441 decoding sync65.f Synchronize a JT65 signal unpackcall.f Unpack JT65 message parts ... unpackgrid.f ... unpackmsg.f ... unpacktext.f ... xcor.f Compute cross-correlation for JT65 sync decode6m.f Decode JT65 signal syncf0.f First frequency sync syncf1.f Second freq sync synct.f First time sync avemsg6m.f Get average JT65 message JT65code.f Program to illustrate and test JT65 coding Hard-Decision Reed Solomon Codec decode_rs.c Decoder encode_rs.c Encoder init_rs.c Initialization routine wrapkarn.c Wapper for Fortran cutil.c Fortran wrappers for some basic C functions jtaudio.c Audio I/O, calls PortAudio routines padevsub.c Select desired audio device ptt.c PTT via serial port DTR/RTS ptt_linux.c Ditto for Linux (dummy at present) resample.c Wrapper for resample routine start_threads.c Start audio and decoder threads 7 Compiling Instructions ---------------------------------------------------------------------- Scripts are provided for compiling WSJT in both Windows and Linux. They are presently set up to use Compaq Visual Fortran (v6.6) and Microsoft C (v6.0) in Windows, and g95 and gcc in Linux. My installation has Python 2.3. Additional tools include f2py, which compiles Fortran and C to make Python extensions; the Python Imaging Library; Numeric Python; and the SciPy distribution utilities. Linux Windows Function ------------------------------------------------------------------- g0 g0.bat Compiles the hard-decision Reed Solomon Decoder Needs to be done only once. g1 g1.bat Compiles the remaining Fortran and C to produce Python extension module audio.pyd (Windows) or audio.so (Linux). g2 g2.bat Uses McMillan Installer to create an f2py specification file, wsjt.spec g3 g3.bat Uses Installer to produce a distributable file WSJT6.EXE (Windows). g99 g99.bat Runs all of the g[0-3] scripts. These steps produce a distributable file WSJT6.EXE (Windows) or wsjt6 (Linux) that contains all necessary software components, so that the end user does not need to install Python or any of its other extensions, or the compilers. A configuration script and Makefile facility is also provided. Assuming that all of the pre-requisites are properly installed, WSJT can now be compiled in Windows as follows: C> copy Makefile.win Makefile C> nmake In Linux or FreeBSD, do the following: $ ./configure $ make 8a Present status (January 17, 2006) ---------------------------------------------------------------------- WSJT version 5.9.2 (built from SVN revision 115) has been released for Windows. It is is fully functional in Linux and BSD, as well, but presently need to be compiled locally. In due course we plan to provide distributions for standard *nix distributions. 8b Present status (June 7, 2008) The latest stable working version of WSJT in svn is 789. The head of the tree might work, it might also burn down your house. You have been warned! Bug reports are welcome, but please read BUGS so we have something to work with. wsjt_9.3.r2792/GeoDist.f0000664000175000017500000000600011022616637013101 0ustar jtnjtn subroutine geodist(Eplat, Eplon, Stlat, Stlon, + Az, Baz, Dist) implicit none real eplat, eplon, stlat, stlon, az, baz, dist C JHT: In actual fact, I use the first two arguments for "My Location", C the second two for "His location"; West longitude is positive. c c c Taken directly from: c Thomas, P.D., 1970, Spheroidal geodesics, reference systems, c & local geometry, U.S. Naval Oceanographic Office SP-138, c 165 pp. c c assumes North Latitude and East Longitude are positive c c EpLat, EpLon = End point Lat/Long c Stlat, Stlon = Start point lat/long c Az, BAz = direct & reverse azimuith c Dist = Dist (km); Deg = central angle, discarded c real BOA, F, P1R, P2R, L1R, L2R, DLR, T1R, T2R, TM, + DTM, STM, CTM, SDTM,CDTM, KL, KK, SDLMR, L, + CD, DL, SD, T, U, V, D, X, E, Y, A, FF64, TDLPM, + HAPBR, HAMBR, A1M2, A2M1 real AL,BL,D2R,Pi2 data AL/6378206.4/ ! Clarke 1866 ellipsoid data BL/6356583.8/ c real pi /3.14159265359/ data D2R/0.01745329251994/ ! degrees to radians conversion factor data Pi2/6.28318530718/ BOA = BL/AL F = 1.0 - BOA c convert st/end pts to radians P1R = Eplat * D2R P2R = Stlat * D2R L1R = Eplon * D2R L2R = StLon * D2R DLR = L2R - L1R ! DLR = Delta Long in Rads T1R = ATan(BOA * Tan(P1R)) T2R = ATan(BOA * Tan(P2R)) TM = (T1R + T2R) / 2.0 DTM = (T2R - T1R) / 2.0 STM = Sin(TM) CTM = Cos(TM) SDTM = Sin(DTM) CDTM = Cos(DTM) KL = STM * CDTM KK = SDTM * CTM SDLMR = Sin(DLR/2.0) L = SDTM * SDTM + SDLMR * SDLMR * (CDTM * CDTM - STM * STM) CD = 1.0 - 2.0 * L DL = ACos(CD) SD = Sin(DL) T = DL/SD U = 2.0 * KL * KL / (1.0 - L) V = 2.0 * KK * KK / L D = 4.0 * T * T X = U + V E = -2.0 * CD Y = U - V A = -D * E FF64 = F * F / 64.0 Dist = AL*SD*(T -(F/4.0)*(T*X-Y)+FF64*(X*(A+(T-(A+E) + /2.0)*X)+Y*(-2.0*D+E*Y)+D*X*Y))/1000.0 TDLPM = Tan((DLR+(-((E*(4.0-X)+2.0*Y)*((F/2.0)*T+FF64* + (32.0*T+(A-20.0*T)*X-2.0*(D+2.0)*Y))/4.0)*Tan(DLR)))/2.0) HAPBR = ATan2(SDTM,(CTM*TDLPM)) HAMBR = Atan2(CDTM,(STM*TDLPM)) A1M2 = Pi2 + HAMBR - HAPBR A2M1 = Pi2 - HAMBR - HAPBR 1 If ((A1M2 .ge. 0.0) .AND. (A1M2 .lt. Pi2)) GOTO 5 If (A1M2 .lt. Pi2) GOTO 4 A1M2 = A1M2 - Pi2 GOTO 1 4 A1M2 = A1M2 + Pi2 GOTO 1 c c all of this gens the proper az, baz (forward and back azimuth) c 5 If ((A2M1 .ge. 0.0) .AND. (A2M1 .lt. Pi2)) GOTO 9 If (A2M1 .lt. Pi2) GOTO 8 A2M1 = A2M1 - Pi2 GOTO 5 8 A2M1 = A2M1 + Pi2 GOTO 5 9 Az = A1M2 / D2R BAZ = A2M1 / D2R c c Fix the mirrored coords here. c az = 360.0 - az baz = 360.0 - baz end wsjt_9.3.r2792/CALL3.TXT0000664000175000017500000067366611554672346012640 0ustar jtnjtn//ms 3.0 2009-07-01 01:15:53 UTC _WSJT_CALL3 > CALL3.txt format for WSJT-PROGRAM by K1JT //MS-EME-WSJT-Version 2009-07-01 01:15:53 UTC an exerp of VHF-DATABASE on MMMonVHF //UPDATES welcome: http://www.mmmonvhf.de/dbase.php - 73 the Team of MMMonVHF 2E0ZWW,JO01ED,,,M3ZWW,,ICOM IC-820H FT897D,04/09 2I0BIW,IO64PF,,,MI3IYA,,Yaesu ft-847,06/07 2M0EXD,IO88FO,,,,,,04/04 3B9C,MH10QG,EME,,,,,01/03 3D2LR,RH92,EME,, 3DA0HL,KG53MS,EME,,EXPEDITION,,,03/07 3V8BB,JM56ER,EME,,,,,06/02 3V8SS,JM55GX,EME,,Expedition,,144: 16JXX and 1kw,12/05 3X5A,IJ39JJ,EME,,EXPEDITION,,144: 2M28XPOLs and a KW,11/07 3Y0X,EC41RE,EME,,Expedition,,144: 4x 9el 350W,02/06 4F2KWT,PK06CI,EME,,,,50: 7el 650W,07-06 4J1FS,KP40,,,Expedition,,,01/90 4K6D,LN40VK,EME,,,,,01/94 4N7AX,KN05PC,,,,,144: 200 W 2x10el 9BV,08/00 4O3T,JN92HJ,EME,,,,144: IC706 Skysar 1kW FM-PA 3x 10 el at 10m abt 700m asl,08/06 4O4AR,JN94AS,,,= YU4AR,,144: TR9130 250W 10el PA0MS-ant Preamp,11/02 4O4D,JN94BR,,,,,144: 300W 11el,05/97 4O9T,JN94XC,,,YU7AAA YT7C,,,11/08 4S7CCG,MJ96WV,EME,,,,144: 4 x 8el and 300W,07/06 4U1ITU,JN36BF,EME,,div. Activities,,144: 8el 600W,11/00 4X1IF,KM72KA,EME,,,,,07/05 4X4IF,KM72KD,EME,,,,,05/00 4X6UJ,KM72,EME,,,,,01/00 4Z5AO,KM72MW,,,ex UA1AKZ,,ft-857 ic-746,07/05 4Z5BS,KM71JW,,,,,,07/95 5A7A,JM62MU,EME,,Expedition,,144: 2x 10el 7ZB 1KW - 432: 9wl ant 200W,03/07 5B4AGY,KM64EV,,,ex G3RSI 5A3CAD VO2AN,,FT-726R plus 1kW Linears and head amplifiers for 6M and 2M and 100w for 70cms,01/05 5B4AIA,KM65GD,EME,,EXPEDITION,,144: 2MXP32 6WL 500W,09/07 5B8AD,KM64TV,EME,,,,144: 2x16 el 14.3dB 230w,03/05 5B8AV,KM64FT,,,ex 5B/G1JJE,,,05/04 5C8M,IM64PD,EME,,Expedition,,144: IC706 MKIIG PA 1KW preamp. 2x 3WL yagis,10/00 5F3COM,IM52JJ,EME,,= SV8CS,,,09/06 5H1HP,KI93RV,EME,,EXPEDITION,,144: 14el XP 1.2KW,05/09 5H1HP/KI94,KI94,EME,,EXPEDITION,,144: 14el XP 1.2KW,05/09 5H1MS,KI93RV,EME,,EXPEDITION,,144: 14el XP 1.2KW,05/09 5H1MS/KI94,KI94,EME,,EXPEDITION,,144: 14el XP 1.2KW,05/09 5P8Z,JO55RT,EME,,,,144: IC706 GS31b 1KW 4x8el,04/07 5P9S,JO54TU,EME,,= OU9S OV9S 5Q9S OZ9S,,See www.oz9s.dk (click rig) for actual and updated info,05/07 5Q2M,JO65AN,EME,,= OZ1PIF,,FT847 50: 100W 4el - 144: 350W 2x 13el Preamp,04/07 5Q9S,JO54TU,EME,,= 5P9S OU9S OV9S OZ9S,,See www.oz9s.dk (click rig) for actual and updated info,05/07 5R8EM,LH42WX,EME,,EXPEDITION,,,09/08 5T5JC,IL30AM,EME,,,,,01/94 5T5SN,IK28AC,EME,,QRT,,,09/05 5X1D,KJ60EM,EME,,,,300W- 17el,03/97 5Z4EME,KI79MO,EME,,EXPEDITION,,144: 2x 10el XPol and 600W,02/09 5Z4NU,KI88IP,,,,,144: 25W 9el,09/05 6F75A,DL81UU,EME,,= XE2AT,,144: IC820 400W 4x 9el,01/07 6I2AT,DL81UU,EME,,= XE2AT,,144: IC820 400W 4x 9el,01/07 6V7A,IK14LK,EME,,Expedition,,144: 2 times BQH8B cross yagis 14.5 dBd and 500w SSPA,05/06 6Y4A,FK18AA,EME,,Expedition,,144: 2x 2MXP28 cross pol ant. 1KW,10/00 7J0AAD,PM97OS,EME,,,,144: 1KW 4x19el 2x18el MGF1801,01/00 7J6CCU,PL36VI,EME,,,,50: TS570 or IC821,04/02 7K1MFR,PM95SP,,,,,,01/03 7K3LGC,PM95RI,EME,,,,,09/06 7L1RLL,PM95SO,,,,,,01/03 7M1QMY,PM95VQ,,,,,,02/09 7M2PDT,QM05EK,EME,,,,432: 16x14el 1-5KW,11/06 7Q7JE,KH76DW,EME,,= ZS6JDE,,144: 2x 9el 350W,07/06 7S2AT,KP03DU,,,= SK2AT,,,03/06 7W0AD,JM16JR,,,,,,11/04 7X0AD,JM16JR,,,,,144: 9el 200W,11/04 7X2VV,JM16WJ,,,,,,07/02 7Z1SJ,LL25WG,EME,,,,144: 2x 13el,02/07 8J1AXA,QM05DF,EME,,SPECIALCALL,,,05/08 8N1EME,QM06IQ,EME,,Expedition,,,03/07 8S4BX,JO79SD,EME,,,,,10/99 8S6T,JO68SE,,,ALSO SM6WET & SG6T,,FT650 847 920,11/08 9A1AAX,JN65TF,,,,,144: 16el 500W,04/01 9A1CAL,JN86EL,,,,,144: IC271 FT736 FT225RD 4CX1500A 2x17el BF981,11/04 9A1CBE,JN86BE,,,,,,01/96 9A1CCB,JN85LN,,,ex YU2CCB- YT2C,,,03/01 9A1CCY,JN85OO,EME,,ex YU2CCY,,,08/01 9A1CDD,JN85LW,,,,,,01/91 9A1CEU,JN75RO,EME,,,,144: 80W 2x18el 5.5wl 4x11el - 432: 10W 38el,01/99 9A1CHI,JN95JG,,,ex YU2CHI,,,01/94 9A1CHL,JN83,,,,,,03/98 9A1CMS,JN86DM,,,,,,05/07 9A1DFG,JN85EL,,,,,,07/96 9A1EZA,JN86HG,EME,,ex YU2EZA,,IC271E 144: 2x4CX250b MGF1302 10mM2,11/01 9A1KDE,JN95FQ,,,,,,01/94 9A1RGC,JN75XT,,,,,,01/03 9A1Z,JN86FJ,,,ex YU2SOM YT2SOM 9A3HZ,,IC706 DB6NT 1W ON 3CM,01/05 9A2AE,JN86HF,,,,,144: 8x24el 1KW,12/08 9A2AT,JN86LL,,,,,,01/03 9A2DI,JN95,,,,,,06/95 9A2EU,JN85JO,,,,,,07/96 9A2GH,JN75IE,,,,,,01/03 9A2KK,JN85KV,,,,,,11/01 9A2KL,JN74OC,,,,,,08/07 9A2MF,JN65SL,,,YU2SBF YU2MF,,YAESU FT-480 r,05/07 9A2MK,JN75XU,EME,,,,,01/94 9A2PT,JN86,EME,,,,,11/01 9A2RD,JN65TF,,,,,144: 2x16el 1KW,05/04 9A2SB,JN95GM,,,ex YU2SB,,,06/99 9A2TE,JN85KK,,,,,144: ft225rd ts690s 100w,03/06 9A2TK,JN76WA,EME,,YU2SSU YU2TK,,TS2000X FT290RII FT7,07/07 9A2U,JN75RO,EME,,,,144: 80W 2x18el 5.5wl 4x11el,01/99 9A2VR,JN95FQ,,,,,,06/07 9A3DF,JN86HG,,,,,,04/03 9A3GE,JN75EI,EME,,YU2RNF,,TR7 FT817 FT857 IC703 HOME MADE TRANSV. PA 4CX250B 4x 8el,08/07 9A3JH,JN75AD,EME,,,,,01/06 9A3JI,JN86FJ,,,= 9A4K,,50: FT-101ZD+FTV650- IC706mk2g 7ele M2,05/02 9A3LN,JN95IN,,,,,,06/08 9A3MR,JN83FM,,,,,,08/00 9A3PA,JN85EG,EME,,,,FT736r - 50: 10W 5el - 144: 8x13el 800W MGF1302 - 4320: 300W 4x19el MGF1302,08/04 9A3TF,JN85,,,,,,08/96 9A3TU,JN95EH,,,YT2TU,,TS 830s + transverter home made 6m/2m 10W,06/08 9A3W,JN74OC,,,ex 9A1RKV,,IC706,09/02 9A3ZA,JN75RO,,,,,144: 100W 12el,08/00 9A4C,JN85LN,,,,,,03/01 9A4CK,JN86,,,,,,08/96 9A4EW,JN95KG,EME,,,,144: 200W 10 el. BVOpt,06/08 9A4FW,JN95JG,EME,,,,144: 600W 4x17el F9FT MGF1302,08/00 9A4K,JN86FJ,,,= 9A3JI,,50: FT-101ZD+FTV650- IC706mk2g 7ele M2,05/02 9A4NF,JN73VS,,,,,50: 50W 6el 144: 400W MGF1302 4.5wl,06/08 9A4VM,JN85FS,,,,,,05/07 9A4WY,JN74,,,,,144: 50W,08/98 9A5CW,JN65UF,,,EX 9A5AEI,,,09/07 9A5D,JN92BP,,,Expedition,,,08/99 9A5WA,JN85LN,,,,,,06/96 9A5Y,JN85OO,,,SpecialCall,,144: 800W 16x5el,10/99 9A6PSM,JN75EJ,,,,,FT817 FT225 IC-7000 IC-202,10/07 9A6WW,JN86EL,,,,,144: IC271 FT736 FT225RD 4CX1500A 2x17el BF981,09/06 9A7W,JN85PO,,,ex YU2QS,,,06/06 9A90CBD,JN85OO,EME,,SpecialCall,,,07/97 9A9B,JN75XU,EME,,,,144: 4x 16el 1KW,09/06 9A9PP,JN85IW,,,9A7PSN,,Yaesu FT-857D,05/09 9H1BN,JM75GU,EME,,,,,09/99 9H1BT,JM75EU,EME,,,,,01/94 9H1CD,JM75FV,EME,,NOT qrv MS nw (01/01),,144: TS850 LT2S 1KW 2x4.4lb DJ9BV MGF1302,01/01 9H1CG,JM75,,,,,144: FT902DM FTV250 100W 17el,11/01 9H1ES,JM75FV,EME,,,,,09/99 9H1GB,JM75FU,EME,,,,144: TS780 100W 19el,08/03 9H1LO,JM75EW,EME,,9H5LO,,IC746 - IC706 - FT817 - TH-F7E,12/08 9H1PA,JM75FV,EME,,9H5O,,144 Mhz: TS711 4x10el (3wl) crossed yagi GS35b - 50 Mhz - 8el yagi 2wl,09/07 9H1PI,JM75FU,,,ex 9H5PI,,50: 100W 5el,03/03 9H1TX,JM75FU,EME,,,,50: 8el yagi 100W - 144: IC7400 GS35 1000 W 2x 15el Xpol LNA145MKII,08/06 9H1XT,JM75GV,,,,,,08/02 9H3LF,JM76,,,Expedition,,,01/91 9H3ZZ,JM76CB,EME,,Expedition,,,01/93 9J2JD,KH46MM,EME,,Expedition,,144: 2M7 antenna,05/06 9K2YM,LL48CJ,EME,,,,144: 2M5WL 450 W,06/07 9K48NLD,LL48CJ,EME,,SPECIALCALL,,144: 4x 13el 300W,02/09 9M2BV,OJ30UD,EME,,,,,01/94 9M6YBG,OJ85BW,EME,,,,2x 10el 50w,10/08 9N7JO,NL27QR,EME,,YU7EF,,,04/07 9W2QC,OJ03TB,EME,,,,144: 2x 10el Vert 70 W,10/08 9X4V,PM95RI,EME,,SpecialCall,,,09/06 A22BW,KG38SU,EME,,,,,01/94 A35RS,AG28HV,EME,,= ZL1RS,,,12/08 A43DLH,LL93,EME,,EXPEDITION,,,09/08 A43EME,LL93,EME,,EXPEDITION,,,11/08 A61Q,LL75SJ,EME,,,,144: 4x 13el 700W,10/06 A71AW,LL55RH,EME,,,,144: 2XP20 1KW,07/06 AA0BR,DN70KN,,,,,,01/03 AA0BW,EM29PS,,,,,,04/03 AA0DQ,EN12,,,,,,01/03 AA0EN,EM29,,,,,,01/03 AA0P,DM79,,,,,,01/03 AA1OV,FN43GE,,,,,,04/03 AA1VL,FN42HN,,,,,,04/03 AA1YN,FN43GC,EME,,,,144: 4x 16el 100W,10/06 AA2GF,FN02,,,,,,01/03 AA2WV,FN12BV,EME,,,,144: 4x 17el 400W,10/06 AA3NM,FM19JE,,,,,,01/03 AA4FQ,EM67LQ,EME,,,,1500W,01/05 AA4SC,EM94MX,EME,,,,,05/08 AA5C,EM13SE,,,,,FT-990 FT-736R Homebrew Microwave Gear,10/07 AA5CH,EM35GK,,,,,,01/03 AA5IB,EM12,,,,,,01/03 AA5WL,EM32,,,,,,01/03 AA5WQ,EM26BC,,,,,,01/03 AA6GS,DM12,,,,,,01/03 AA6HA,DM43CN,,,,,144: 500W 9el M2,01/01 AA6IW,CM97VI,,,,,,01/03 AA6WI,CM97,,,,,,01/03 AA7A,DM43AO,EME,,,,144: 8877 1.5KW 6x13el (DJ9BV),09/06 AA8BC,EN90FE,,,,,,01/03 AA8HS,EN81,,,,,,01/03 AA9D,EN52,,,,,,01/01 AA9IL,EN62AI,,,,,,01/03 AA9MY,EN50FM,EME,,,,144: Yaesu 847 IC910H IC706MKIIG 2x 18XXX M2,11/05 AB0SD,EN30LL,,,,,,01/03 AB0TJ,DN60FN,,,,,,01/03 AB3BK,FN10PD,EME,,,,144: 17el 400W,09/06 AB4CR,EM77,,,,,,01/03 AB4OO,EM81,,,,,,01/98 AB5F,EM46FG,,,KG7CV,,KENWOOD TS-2000--VIKING VALIANT--HQ-170,05/07 AB5IG,EM12,,,,,,01/03 AB9FN,EN53,,,,,,01/03 AC1H,FN33XJ,,,,,144: 300W 13dbD yagi,01/01 AC1T,FN32,,,,,,01/03 AC3A,EM28QV,EME,,,,FT847 144: 4x 9el M2 8877 1-5KW,08/05 AC4TO,EM70,,,,,,02/05 AC5OG,EM10,EME,,,,,03/05 AC5TM,EM40LL,EME,,,,144: 2M5 400W,03/05 AD4EB,EM65NS,,,,,,01/03 AD4TJ,FM08LE,EME,,,,IC706MKIIG 144: 4x 15el K1FO 700w JT--KW+ CW,10/08 AD6A,CM97AG,,,,,,01/03 AD6FP,CM87WI,EME,,,,,01/04 AD6P,EM18,,,,,,01/03 AE0G,EN10PS,,,,,,01/03 AE0W,DM78,,,,,,01/03 AE4RO,EL97TG,,,,,,09/01 AE5K,EM36PC,,,,,,01/03 AE6EQ,CM95OH,EME,,,,432: 16x 14el 700W,09/05 AF1T,FN43ED,EME,,,,,01705 AF4IF,EL95US,,,KD4GKO,,Yaesu,08/07 AF4O,EM55LK,,,,,,01/03 AF6O,DM14EJ,EME,,ex G3PRM,,144: 4x 2M12 800W - 432: 4x 9wl 1500W,01/06 AF9R,EN52XB,,,,,,01/03 AG2A,FN30FR,,,,,,01/03 AG4QE,FM04KX,,,,,,01/03 AG4ZE,EM83WM,EME,,,,,07/06 AG9Y,EN40,,,,,144: 160W 13el,01/01 AH6EZ,EN51SW,,,,,,12/01 AH6LE,CN85NK,,,,,,01/03 AH8A,AH45OP,,,,,,01/03 AI1K,FN41IL,,,,,,01/03 AI3W,FM19PW,,,,,,01/04 AI8Z,DM79,,,,,,01/03 AJ0E,EM29RD,,,,,,01/03 AJ6T,CM87XK,,,,,144: 200w 10el 50:100w 6el,05/07 AM25DXU,JN11CM,EME,,SpecialCall,,,01/92 AN3JT,JN01UI,EME,,SPECIALCALL,,IC910 + SP2 + 4x13B2 + GS35B,08/07 AN6SA,JM19IR,EME,,SpecialCall,,144: FT847 2x4CX250 2x17el - 432: 4x33el,01/01 AO4WT,IN80KN,,,,,,08/08 AO5TT,IM99SL,,,= EA5TT,,,08/08 AO6SA,JM19IR,EME,,SPECIALCALL,,,09/07 AO6VQ,JM19HN,EME,,SPECIALCALL,,144: 2KW MGF1302 8x17el M2 432: 21el 115w 1296: 55el 10w,12/07 BA4TB,PM01EO,EME,,EXPEDITION,,IC746 + HL250PA (running 250W) 2x 10ele Yagi,03/08 BD1AX,PL04VQ,EME,,,,144: 2wl Yagi 350W,04/08 BV6GU,PL03CD,EME,,,,144: 250W 20ele cross yagi,05/06 BX1AD,PL04VQ,EME,,,,144: 11 Xpol 100W,03/08 BY1QH,ON80DA,,,,,,01/03 BY4RRR,OM92JA,EME,,,,144: 2x13 ele 100W 432: 2x 17 ele 70W,02/08 BY4RSA,OM91,EME,,= DL3OCH,,,05/07 BY7PP,OL63NA,EME,,EXPEDITION,,50: 2x 6el 100W 144: 2x9el 300W Preamp SP-2000 432: 2x20el 70W,02/08 BY9AA,OM44LL,EME,,,,144: IC920 2 x 15 XP 350W,03/08 C31MS,JN02UN,,,Expedition,,144: 2Stn a� 800W 2x17el or 11el,05/97 C31RC,JN02SK,EME,,Expedition,,,01/89 C31TLT,JN02TL,EME,,Expedition,,144: 4x24el 2x4CX250 900W,08/01 C56EME,IK13ql,EME,, C6AIE,FL16IQ,EME,,= WZ8D,,144: TS2000 250W 13el,03/06 C91CF,KG64HB,EME,,EXPEDITION,,,04/08 CN8KD,IM63KX,,,,,144: 10W 11el,06/03 CN8LI,IM63NX,EME,,,,50: IC746 250W 6el - 144: 2x17elts- 250w- lna- 1/2' lowloss cable- Az+Elevat,10/07 CN8ST,IM64NA,EME,,QRT (is nw PA....),,,06/98 CN8TW,IM63EN,EME,,,,144: 4x 13el,01/06 CO2OJ,EL83TD,,,,,50: 100W 4el - 144: 110W 9el,06/06 CQ14HZE,IM57NH,,,SpecialCall,,,02/04 CS0DIZ,IM69,,,SpecialCall,,,01/89 CS1GDX,IM59IB,,,SpecialCall,,144: IC706MK II G 200W 12el,11/03 CS6ARC,IM59RX,,,SpecialCall,,,11/01 CT1ANO,IN51RE,,,,,144: TS2000 4cx250B 1x16JXX2 SP 2000,06/09 CT1BYM,IM58SM,EME,,,,,05/07 CT1DHM,IN61CB,EME,,,,,04/07 CT1DIZ,IM58KP,,,,,,06/03 CT1DMK,IN50QP,EME,,,,144: 1-5KW 4x11el DL6WU,03/99 CT1DNF,IN50QP,,,,,144: IC821H 200Watts 2x12ele DL6WU Preamp,12/04 CT1EKD,IM59IB,EME,,,,144: IC706 MK II G 400W 4 x 17 el 432: 300W + 10wl Yagi,08/08 CT1EWA,IM59NS,EME,,,,,06/09 CT1FAK,IN50QO,EME,,,,144: FT1000D FT736R 200W 4x13el DL6WU MGF1302,05/03 CT1FFU,IM59KJ,EME,,,,,03/05 CT1FJC,IM57OC,,,= G4MAW,,TS-2000 5el yagi 6 metres. 4el yagi on 4metres,03/07 CT1FOH,IN50RA,,,,,50: 6el - 144: 200W 4x 12el MGF1302,04/04 CT1HZE,IM57NH,,,= DL8HCZ,,,12/05 CT1WW,IN61GE,,,SilentKey,,,11/96 CT2FEY,IN61OT,,,,,,07/07 CT2GUR,IM59ML,EME,,,,IC-910H+ 2x17el+LNA+1KW,06/09 CT2HSN,IN61CB,,,,,,03/07 CT2HSO,IN61CB,,,,,,06/07 CT2IET,IN60GD,,,,,FT100D,11/02 CT2IWG,IN51OJ,,,,,144: IC706 100W 9el,02/05 CT2JIB,IM58MO,EME,,,,IC-910H + IC-706MKIIG + IC-746,05/08 CT4KQ,IN60BP,,,,,,03/98 CU2E,HM77UD,EME,,,,144: 1KW 28 Xpol,06/07 CU2IJ,HM77ES,,,,,,04/04 CU3EQ,HM68KP,,,,,KENWOOD TS 2000 - TS 570,04/08 CX5BBF,GF15WM,EME,,,,432: 3m dish with 4 dipole,08/07 CX5CJ,GJ15,EME,,,,144: 4x 17el 1KW,02/02 CX5IC,GF07WQ,EME,,,,,03/08 CX5UR,GF26TS,,,CX2AAE - CX3UU - CX1JO,,KENWOOD TS430 - IC 241 - FT 2500,02/08 CX9BT,GF15WK,,,,,,01/03 CY9SS,FN97WE,EME,,Expedition,,144: 400W single yagi,01/05 DA0BV,JN58VF,,,SpecialCall,,,01/94 DA0DD,JO61,EME,,SpecialCall,,,05/06 DA0HEL,JO34WE,,,EXPEDITION,,,08/08 DA0NRW,JO41GV,,,SpecialCall,,144: 3CX400A7 4x14el or 17el,12/96 DA0WAE,JO41GU,,,SpecialCall,,,12/04 DA0Y,JN48MB,EME,,,,,04/09 DA0YFD,JN59MO,EME,,,,,05/07 DA4RG,JO31FG,,,= GW8VHI,,,11/95 DB1PB,JO30UE,,,,,,12/01 DB2WD,JN39VV,EME,,,,,04/96 DB3BW,JO42AC,EME,,,,HF: TS520 - 144/432: FT726r Tube PA 2m 350W 70cm 150W 6m trv8W,06/09 DB3LA,JO31JK,,,,,,07/02 DB4ET,JO31,,,,,,11/02 DB4LL,JO54SM,,,,,144: FT221 20W 4el,08/01 DB4VQ,JN39MF,,,,,,01/94 DB5ML,JN58OI,,,,,,09/03 DB5WC,JN49EJ,,,,,60W 11el Preamp,12/03 DB6BX,JO32OK,,,SilentKey,,,11/96 DB6NT,JO50UI,,,,,,01/03 DB6RO,JN58QB,,,,,,12/03 DB7OB,JO52IJ,,,,,144: FT221 100W 11el,08/00 DB8AT,JO51CP,,,,,,05/04 DB8WK,JO33XN,,,,,144: 200W 2x11El. - 432: 300W 2x23El.,03/06 DB8YL,JO41EV,,,,,,12/99 DC0KK,JO41KQ,,,,,,03/08 DC1ECD,JO31MH,,,,,,10/04 DC1MUS,JN69EP,,,,,,11/02 DC1MWB,JN58,,,,,,04/05 DC2IP,JN49FD,,,,,144: IC706 max. 50W 6el,08/08 DC2JR,JO64CA,,,,,,11/01 DC2MW,JN58IV,EME,,,,144: 4x 9el 300W,09/07 DC3VM,JN39KK,,,,,,12/99 DC3VW,JN39KJ,,,,,,10/04 DC3ZR,JN68CV,,,,,,01/03 DC5JQ,JO31BC,,,,,,10/07 DC6DY,JO53GO,,,,,,06/09 DC6GF,JN48OC,,,,,IC 706 MKIIG PreAmp,01/05 DC6KI,JO30IL,,,NOT qrv MS nw (01/01),,,04/05 DC6RN,JN59WK,,,,,144: 12el PA GS35,04/09 DC7OH,JO62OK,,,,,,01/01 DC7UT,JO31NJ,EME,,,,144: 4x17el 500W,03/01 DC9UP,JN39QN,EME,,F5VKQ,,,01/09 DC9YC,JO31QK,,,,,,10/07 DD0NM,JN59NI,,,,,144: IC 910 100W 2x11 el Yagi,08/07 DD0VF,JO60UX,EME,,,,144: 550W-CW 250W-digi 4x8el MGF1303 (JO61WA: 100W 5el BF998),06/09 DD1JN,JO50DJ,,,,,144: 600W 11el Preamp - 432: 21el 200W VV - 1296: 55el 10W VV - 2320: 80el 1W,04/02 DD1WKS,JN39KK,,,,,,01/01 DD2KR,JO30FQ,EME,,,,FT1000 144: LT2S 3CX800A7 Preamp 17ele M2 432: LT70S 3CX800A7 Preamp 2x39el M2,10/07 DD2UJ,JO61WD,,,,,,10/04 DD3DX,JO31TN,,,,,,07/01 DD3SP,JO72EN,,,,,50: 5el - 144: FT847 4CX250 17el F9FT MGF1302 - 432: 21el,02/04 DD5DX,JO61CA,,,,,144: 180Watt 2x17el Preamp,07/04 DD6UBS,JO41AH,,,,,144: TM255 MGF1302 180W 11El F9FT - 432: TM455 MGF1302 40W,10/04 DD7PC,JN49AX,EME,,,,,05/07 DD9SQ,JN59BH,,,,,,07/98 DF0AK,JN49EA,,,,,,07/97 DF0AW,JO31MG,EME,,,,FT736 144: 800W 2x 11el 432: 200W 4x 23el 1296: 23el 10W,09/07 DF0BV,JN68AH,EME,,,,144: 2x17el 750W,04/05 DF0CI,JO51CH,,,,,,11/03 DF0CK,JO50AN,EME,,= DK0R,,144: 500Watt 2x11el,09/05 DF0EME,JO40,,,,,,01/03 DF0LBO,JO53CT,,,,,,05/02 DF0MMO,JN49JX,,,,,144: 200W 11el,11/00 DF0MTL,JO61JF,,,,,,07/05 DF0SAX,JO61VC,,,,,144: 20W 13el,12/98 DF0SL,JN59OI,,,,,,08/08 DF0WD,JO42FD,,,,,144: 8874 250W 2x9el - 432: 3CX800 4x18el,02/08 DF0WF,JO62VT,,,,,,01/05 DF1AN,JO63SX,,,ex DL1KUS,,,01/00 DF1BN,JO31GD,,,,,144: IC821 HLV-300 300Watts MGF 1302 2x17ele F9FT,07/01 DF1CF,JN57FP,EME,,,,144: CF300 3CX800 4x13el (3lb),12/04 DF1GL,JN47CO,,,,,144: IC 746 300W 8el,04/07 DF1HF,JO43WJ,EME,,,,144: 6el 432: 19el 1296: 44el,09/07 DF1IAZ,JN49LD,,,,,50: 3 el - 144: 150W 2x10el MGF1302,07/01 DF1OC,JO52,,,,,,01/93 DF1SO,JN48PO,,,,,144: homemade 200W,08/98 DF1VB,JO31SK,EME,,,,,03/07 DF1ZE,JN49,EME,,,,,01/94 DF2CQ,JN58SE,,,,,,10/04 DF2NU,JN58XA,,,DL0UMK,,TS-790S + PA + Preamp + 11 ele yagi,10/07 DF2OOO,JO41RF,,,SpecialCall,,IC820H 144: 250W 2x11el- 432: 130W 2x23el Preamp,09/99 DF2UJ,JO61QH,,,,,,02/02 DF2ZC,JO30RN,EME,,,,144: TS2000 LT2S 2xGU74b 750W MGF1302 4x2M18XXX (21 dbd),04/07 DF3FJ,JO40CC,,,,,,01/93 DF3RU,JN59UL,EME,,,,,03/05 DF4IP,JN49HE,,,,,,08/08 DF4MAA,JN58WH,EME,,,,,05/97 DF4UE,JN48RR,,,,,432: 4x27el 600W,09/03 DF4WC,JN49KV,,,DB4PN,,TR9000-IC490,09/08 DF5BN,JN49GU,,,,,,08/99 DF5DE,JO40CX,,,,,,12/06 DF5HC,JN49HT,EME,,,,50: 4 Ele - 144: 4x8Ele 500W - 432: 4x17Ele 500W,05/09 DF5JJ,JO43XO,,,ex EA6/DF5JJ + ex EA6ADW,,432: 700W 19el - 1296: 500W 26el - 10368: 20W dish,03/04 DF5KB,JO72CM,,,ex DD6BKR,,FT847 - 144Mhz 750 wtts 14 el Longyagi - 50Mhz 7el by DK7ZB,08/06 DF5NK,JN59PM,,,DB6NJ,,144: 11el 600W alt. 15el 750W(JN59OP) 432: 19el 500W,06/09 DF5NK/P,JN59OP,,,DB6NJ,,144: 11el 600W alt. 15el 750W(JN59OP) 432: 19el 500W,06/09 DF6HT,JO64FG,,,,,,12/06 DF6LO,JO52CE,,,,,,01/93 DF6MU,JN58WF,,,DL1ABD,,Elecraft k2 + XV144 + THP PA 160W,09/07 DF6NA,JN49XS,,,,,432: 2x3CX800 4x30el,10/01 DF6OB,JO42,,,NOT qrv MS nw (01/01),,,07/97 DF6VW,JO42KH,,,,,,07/97 DF6YL,JO31WS,EME,,,,,02/08 DF7AP,JO51FI,,,,,,04/09 DF7DJ,JO31UO,,,,,,06/97 DF7IF,JN48DN,,,,,,01/03 DF7IT,JN49IN,,,,,,10/04 DF7KF,JO30GU,EME,,,,144: 16x18el EME Pwr,12/04 DF7OG,JO52BN,,,,,144: TS770E 4x150 16el,04/04 DF7RG,JN68HG,EME,,,,,01/05 DF8AA,JO60XX,,,ex DL2VAA,,144: 100W 17el,12/99 DF8AE,JO41GX,,,,,,10/04 DF8IK,JO30JT,,,,,144: 300W 11el 432: 400W 27el,01/05 DF8LC,JO53GX,EME,,,,,08/99 DF8PC,JO43RS,EME,,,,144: 100W 16el M2,03/06 DF9CY,JO54AL,EME,,,,IC820H + 400w + 1x9ele 2.5wl full elevation + MGF1302,10/08 DF9IJ,JN48CX,,,,,,01/03 DF9KT,JO30GU,,,,,,11/95 DF9KX,JO30FQ,EME,,,,FT1000 144: LT2S 3CX800A7 Preamp 17ele M2 432: LT70S 3CX800A7 Preamp 2x39el M2,10/07 DF9QT,JO30OR,,,,,144: 700W 11Ele,07/08 DF9QX,JO42HD,EME,,,,,01/94 DF9RJ,JN68GS,EME,,,,144Mhz: 1.8KW 4x17Ele. - 432Mhz: 1KW 4x21Ele. - 10Ghz: 5W 60cm Spiegel,03/06 DF9YF,JO42GE,,,,,,12/03 DG0CAL,JO31,,,,,,06/00 DG0FE,JO62UN,EME,,,,FT736r 50: 25 watt 1x4el - 144: 500W 4x17el - 432: 25 watt 2x21el - 1296: 10 watt 2x35el,04/08 DG0KU,JO64AC,,,,,,01/03 DG0KW,JO64MH,EME,,,,144: 2x 13el,01/05 DG0OPK,JO50GQ,EME,,,,50MHZ Dipol - 144: 400W 17dBd MGF1302,12/08 DG0TU,JO61TU,,,,,,08/97 DG0WJ,JO60CV,,,,,,11/02 DG1BA,JO43LB,,,,,,01/00 DG1BHA,JO73DB,,,,,,09/07 DG1CMZ,JO60DS,,,,,,08/01 DG1IU,JN49FA,,,,,,08/96 DG1LY,JO44RK,,,,,,03/04 DG1TA,JN69GH,,,,,,02/01 DG1VL,JO61WE,EME,,Y91VL,,144: 150W 9el MGF1302,05/09 DG1YBO,JO32RG,,,,,144: FT225RD 80W 9el,09/04 DG2BCP,JO43DC,EME,,,,144: 4x 3.6l DJ9BV+GS35 Pa 432: 4x 11l DJ9BV,03/06 DG2DAA,JO62GU,,,,,,06/02 DG2GEP,JN48DL,,,,,144: 200W 9ele Yagi,04/03 DG2KBC,JN58MI,EME,,,,2x7ele FT847 GS35b LNA,06/09 DG2NBN,JN59NR,,,,,FT847 144: 200W 2x3wl 9BV MGF1302 - 432: 300W 22el MGF1302,08/01 DG2NZM,JN59IV,,,,,,06/03 DG2SRL,JO61HN,EME,,,,144: Transv. LT2S 18el M2 500W,04/06 DG2TOM,JO62BM,,,,,IC706 50: 4el Yagi - 144: 15el M2 100W,08/05 DG2VC,JO61VC,,,,,,01/04 DG3FK,JO41PG,,,,,TS850+TV TS790 144: 17el 150W - 432: 4x17el 200W - 1296: 55el 100W,09/03 DG3JO,JO31JK,,,,,TR-2000- TM-D700- DSPCOM,04/03 DG3MDE,JN58EI,,,,,ICOM IC-7400 Inv.V 2x13 5m,09/07 DG3XA,JO43WJ,,,,,144: 1500 Watt 7 ele M2,02/09 DG4BH,JO30RX,,,,,,01/03 DG4EK,JO31NI,,,,,,01/03 DG4EKE,JO31NI,,,,,144: IC820h- SP2000- 17/11el- QQE06-40,01/97 DG4NBI,JN59IF,EME,,,,,10/07 DG5AAG,JO51,,,,,,07/01 DG5CST,JO60DS,EME,,,,144: FT847 4x12el I0JXX GU74,08/07 DG5HV,JO43XQ,,,,,,01/99 DG5NEX,JN49WS,,,,,,01/93 DG5OAF,JO51EP,,,,,144: FT736 400W 2x17el B2 MGF1302,11/99 DG5SMY,JN49QA,EME,,,,144: 4x 17ele 432: 4x 23ele,08/04 DG6JF,JO31,,,,,,10/01 DG6LS,JO54AK,,,,,144:TS790 8877 4x17el - 432: 8x33el DJ9BV 3CX800A7,12/96 DG6MBS,JO41AH,,,,,144: TM255 MGF1302 180W 11El-F9FT - 432: TM-455 MGF1302 40W,08/02 DG6MGP,JN58WH,,,,,,01/95 DG6SYL,JO53QP,,,,,144: 150W 11el 6WU Preamp - 432: 150W 23el Preamp - 1296: 10W 48el Preamp,03/02 DG7MHR,JN57DR,,,,,,03/03 DG7NT,JN47QQ,,,,,144: 2x10 el,02/08 DG7OV,JO42VX,,,,,,10/04 DG7RBV,JN59UM,,,,,,01/90 DG7SF,JN48RR,,,,,144: FT736 300W 2x7el,06/01 DG7SFL,JN49XF,,,,,144: 300 W + 10El. - 432: 150W + 2*21El.,01/04 DG7TG,JO43SV,,,,,,06/05 DG8DP,JN68BI,,,,,Yaesu FT-950 - Elecraft XV144 - VHF PA 4CX250B - 9 Ele. M2,04/09 DG8NCO,JO50VH,EME,,,,144: 4 x 9 El + BEKO HLV-1500 ICOM IC7400 / 8 x 10 El + BEKO HLV 3000,05/09 DG8NCY,JO50HA,,,,,,07/02 DG8UAW,JN48BR,,,,,FT-847: 144MHz: 50W 7el Preamp - 432MHz: 300W 16el Preamp,09/01 DG8WH,JO43GH,,,DO6BH,,IC271E + FT897D,07/08 DG8YFM,JO32MF,,,,,,03/06 DG8YHH,JO32QI,EME,,,,,10/06 DG9BEM,JO43CD,,,,,144: 350W 17el VV - 432: 300W 4x20el VV - 1296: 150W 1.2m dish VV,01/03 DG9DAZ,JO31XB,,,,,144: TM255,11/01 DG9GLA,JO40,,,,,,12/01 DG9MAQ,JN58LJ,EME,,,,144: HA8UG-PA Gi46b 9 El. Tonna SP-2000,12/07 DG9NCX,JN59BT,,,,,,11/99 DG9NFM,JO50QG,,,,,,01/94 DG9YIH,JO32QI,,,,,144: 500W 17el,12/04 DH0AAI,JO51AR,,,,,144: FT225rd PA 200W SP2000 4xDL7KM,08/02 DH0GHU,JN38VN,,,ex DG2GHU,,144: TS850 LT2S HLV300 300W 11el,09/01 DH0LS,JO61II,,,,,144: 4CX350 500W 2x17el Preamp - 432: 150W 21el - 10W Dish,12/03 DH0MBH,JN58JD,,,,,,01/02 DH0OAH,JO42OB,,,,,,01/03 DH0X,JN49DE,EME,,,,,08/05 DH0YAZ,JO41GG,,,,,,01/03 DH1FM,JO61UD,,,,,144: 90W 10el - 1296: 1W 30el,08/02 DH1HC,JO53FF,,,,,144: 13el 500W,10/05 DH1KBB,JO20XX,,,,,,01/93 DH1NAD,JN49,,,,,,01/93 DH1NSP,JN59JX,,,,,,01/01 DH1TW,JN48QM,EME,,,,144: 600W 10el,04/01 DH2FAF,JO40,,,,,,01/93 DH2OAA,JO42TU,,,,,144: IC275E 4x11el 6WU 500W,03/04 DH2RS,JN47TT,,,ex DG3GSR,,144: 75W 11el MGF1302,01/98 DH2UAK,JO71FU,EME,,DG6IBO,,IC910+Preamp - 144: 4x 14el 500W - 432: 2x 29el 50W- 1296: 67el 10Ghz: 1.25m/10W,05/09 DH3DP,JO31,,,,,,07/96 DH3NAN,JO50NC,EME,,,,,12/97 DH3YAK,JO31RS,EME,,DD4QI,,144: 4x 12el M2 750W,02/09 DH4FAJ,JN49EX,EME,,,,IC910 IC7400 144: 4x 9el 1KW - 432: 4X15 50 watt,12/08 DH5BS,JO63PX,EME,,EX DB3VE DH3VE,,FT857d IC970h Pa's Yagi's 50-432mc,07/07 DH5FS,JO61UA,,,,,144: 9el 120W - 432: 4x21el,11/00 DH5HS,JO31FF,,,,,FT847,11/02 DH5HV,JO31AS,,,EX DB5VH,,144: IC746 Pro (100W only) with 2M12 Msquare @ 14m,07/08 DH5LAN,JO44TN,,,,,,05/97 DH5MK,JO41IV,,,DC3QB,,144: 100W 5ele. DK7ZB MGF1302,05/09 DH6ICE,JO61XU,,,,,,07/04 DH6JL,JO31NI,,,EX DG1JL,,50: IC-746 6M5X wid 360 view till Horizont,10/07 DH7FB,JO62SM,,,ex DD6UFR,,144: FT847 GS35b 2x9el DK7ZB,08/05 DH8BQA,JO73CE,EME,,,,,05/07 DH8GV,JO33RL,,,EX DD0BI,,FT-100 300W,02/08 DH8IAB,JO30NO,EME,,DC5IV,,144: 17el 750W,09/07 DH8IAT,JN49GC,,,,,,12/07 DH8WE,JO50TJ,EME,,DG0OLT,,,04/08 DH8YHR,JO41GV,,,,,,01/03 DH9FAG,JN49LX,,,,,,01/03 DH9GCD,JN38VF,,,ex DG9GCD,,144: 11el 100W MGF1302,05/02 DH9KAE,JO30BW,,,,,,01/93 DH9NBB,JN49WS,,,ex DG9NBT,,,01/99 DH9NFM,JO50RF,EME,,,,144: 2X17 M2 - 432: 2X38 M2 - 1296: 4x21 - 2320: 67ele - 10368: 60cm dish,06/05 DH9OK,JO51AS,,,,,,06/04 DH9OY,JO51AQ,,,ex DG5OAA,,,05/00 DJ0QZ,JN49LM,EME,,,,144: IC746 8877 2x18el M2 MGF1302,11/01 DJ0RU,JO31KM,,,,,,07/02 DJ1JD,JO52CK,EME,,,,,08/00 DJ1LP,JO64,,,,,,01/93 DJ1OJ,JN58SE,,,,,144: 100W 2x11el SP2000,10/00 DJ1SHF,JO73AM,,,,,144: TS711 120W 2x10el- Preamp,11/96 DJ1TU,JN48TR,EME,,EX DL2SAD,,FT-897D,10/07 DJ2GM,JN58SC,,,,,,04/06 DJ2IA,JO71AO,,,ex DM2BHF,,144: FT736R 100Watt 9-ele-Yagi,08/02 DJ2IE,JN48HV,,,,,,07/02 DJ2JA,JO40IM,EME,,,,,04/04 DJ2JS,JO31SL,,,,,,04/04 DJ2KQ,JO30BW,,,DC8KQ DH9KAE,,FT736R 2x14elm 144Mhz - 5elm 50Mhz,12/07 DJ2QV,JN58UA,,,= M0RUN,,,06/09 DJ2QV/P,JN57XX,,,,,,06/09 DJ2XS,JO53AK,,,,,,01/95 DJ3FI,JO31DI,EME,,,,,08/00 DJ3HW,JO42LH,,,,,144: R2CW 750W 12elM2 MGF1302 432: 750W 28el.M2 1296: 220W 48el.,09/08 DJ3JJ,JN48JS,EME,,,,TS2000x,01/09 DJ3LE,JO44TN,,,= OZ7LE,,50: 25WERP 5el - 144: 2x17el 600W - 432: 2x21 100W,02/04 DJ3MY,JN58QD,EME,,,,144: 600W 4x17el,08/99 DJ3RU,JN58,,,,,,01/95 DJ3ST,JN48,,,,,,01/03 DJ3TF,JN59WK,,,,,,06/00 DJ3VI,JO43VI,EME,,,,144: FT736r 2x11el 750W,02/06 DJ4SO,JO44WG,,,,,,11/99 DJ4TC,JO63PN,EME,,EX Y21TC DL1NTC,,144: 380W 2x 11el - 432: 460W 2x 26el homemade,05/08 DJ4UF,JO30BR,,,,,144: 300W 2x 8el MGF1302,09/04 DJ5BV,JO30KI,,,,,144: 600W 11el MGF1302 - 432: 400W 20el - 1296: 500W 4x20el - 10386: 15W 1m dish,07/02 DJ5CL,JN58WH,,,ex DG1MHY,,,08/00 DJ5DT,JN49IV,,,,,,05/02 DJ5HG,JO53IU,,,,,,06/04 DJ5MN,JN58WH,EME,,,,,06/96 DJ5MS,JN68KS,,,SilentKey,,,10/99 DJ5NV,JN59KN,EME,,ex DL9NDD,,,12/01 DJ5RE,JN59WK,EME,,,,144: GS35b 250W 2x12el M2,03/04 DJ5SQ,JN37UW,,,,,144: TS870 LT2S 600W 11el,12/97 DJ6JJ,JO31LG,,,,,,12/01 DJ6MB,JO30,EME,,,,,01/94 DJ6OL,JO52AP,,,,,,05/08 DJ6SN,JO30BU,,,DC6SN DH6SN,,YAESU FT-736R -PA- 2m 2x17Ele -6m 5Ele --IC7000,07/08 DJ6TN,JO54CF,,,,,,09/96 DJ6WD,JO40AT,,,SilentKey,,,03/99 DJ6XV,JO31LQ,,,,,,04/04 DJ7AL,JO61VC,EME,,,,144: IC910 VLA 200 4el F9FT,04/06 DJ7FJ,JN48AG,EME,,,,,01/94 DJ7IL,JO52LD,,,,,IC7400 IC910H HLV120 homemade,04/07 DJ7OF,JO51HQ,EME,,ex DG5OAE,,144: 6x17el CC 17B2 MGF1302 EME Pwr,04/05 DJ7OQ,JO42WJ,,,,,144: TS 850 LT2S PA 2x 4CX250 Preamp 0.5 dB M2 5WL,06/09 DJ7PW,JN48TR,,,,,IC7400 11ele Yagi,12/07 DJ7RI,JO54CH,,,,,,12/03 DJ7RST,JN59UK,EME,,,,144: 4 x 2MXP20 1k2 432: 5 x 20el 1k5,09/07 DJ8ES,JO43SX,,,,,144: 300W 17el - 432: 300W 24el - 1296: 100W 49el - 2320: 10W 44el - 10368: 1.5W 60cm Parabol,08/03 DJ8MS,JO63CT,EME,,EX DG5TR,,144: 750W 11el 7ZB Preamp 432: 300W 2x13el 7ZB Preamp,02/08 DJ8OG,JO40MF,,,,,IC 275H 8el DK7ZB,04/04 DJ8PB,JO44MC,,,SilentKey,,,01/93 DJ9CS,JO54DG,,,,,FT-847 200W PA 50: 3 el 144: 9el,09/04 DJ9EV,JN49SC,EME,,,,FT847/17 el yagi,02/09 DJ9FG,JO52TD,,,ex DM2CFG Y23FG DL9ZFG,,HF: FT757GXII 10m Longwire - 50: 25W IRF610 Dipol - 144: 300W 9el- 432: 150W 12el,10/06 DJ9JY,JO31JM,,,ex DG1JY,,,01/01 DJ9KV,JN68OK,,,,,,06/95 DJ9MG,JO52TC,EME,,EX DM2BQG Y22QG DL8CME,,144: 2x 17el 500W,01/08 DJ9YE,JO43HV,,,,,144: 400Watt 17el M2 MGF1302,02/08 DJ9YW,JO42QA,EME,,,,144: 2x10el 500W - 1296: 3.5 and 4.5m dish 360W,02/01 DK0AK,JO30NQ,,,,,,05/04 DK0ALK,JN38TD,,,,,,06/96 DK0BN,JN39VX,EME,,,,144: 700W 3x 9el F9FT + 2x 11elF9FT,09/03 DK0EP,JO31TS,,,,,,11/04 DK0IG,JN58SE,,,,,144: 350W 2x11el,12/96 DK0NHF,JO62JR,EME,,,,,01/94 DK0OG,JN68GI,EME,,,,144: 700W 8x17el,12/04 DK0R,JO50AN,EME,,= DF0CK,,144: 500Watt 2x11el,09/05 DK0TU,JO62PM,EME,,,,144: 4x 12el QRO,05/06 DK0TX,JO50HK,,,,,,03/02 DK0UB,JO31PK,,,,,,08/97 DK0VV,JO61WB,,,,,144: 550W 4x7el MGF1303,03/04 DK1CM,JO40LG,EME,,ex DL2FDX,,144: FT990 LT2S 700W YL1050 18el MGF1302 - 432: 41el MGF1302 - 1296: 48el MGF1302,04/01 DK1CO,JO63SX,EME,,EX DL9GKA,,TS2000 TS790 AMPLITEC PA UG2-100-1500 50: 4el 144: 4x17el H 2x17el V LNA 432: 50 W 2x 20el LNA,03/08 DK1EJP,JO31DD,,,,,,03/03 DK1KO,JO53CT,EME,,,,144: 8877 4X17el F9FT full elevation MGF1302,11/08 DK1MAX,JN58SP,EME,,EX DL4MDQ,,144: 11 el F9FT 750W,10/08 DK1MZ,JO42XP,EME,,ex LZ1KU DL4ABJ,,144: EME Pwr 13el MGF1302,11/03 DK1PZ,JO41TH,EME,,,,,01/94 DK1VI,JN49HH,,,,,144: 650W 16 el.- 432: 100W 21 el.- 1296: 120W 1-2m Spiegel,09/08 DK2AM,JO43AK,,,,,144: 450W 4x14el MGF1302,12/01 DK2BJ,JO30BS,,,,,IC746 PRO IC706MKIIG Transverters,05/07 DK2FT,JO42KC,,,,,,01/03 DK2PH,JO41GV,EME,,CT1DTQ,,IC 746 50: 6M7JHV - 144: 4x 16JXX,07/07 DK2UO,JO30,,,,,,01/93 DK2YCT,JO32RG,,,,,,12/03 DK2ZF,JO43VH,EME,,,,,10/08 DK3BU,JO33NO,EME,,,,50: 25 W ERP 5el - 144: 749W 4x12el Preamp - 432: 749W 4x34el Preamp (16x11el) - 1296: 749W 0.9m dish,08/08 DK3DUA,JO61TC,,,ex DG0DU,,144: FT847 1000Watts ERP,04/00 DK3EE,JO41GU,EME,,= DK3T ex DL9YEY,,144: 8877 4x 24el M2,09/06 DK3EP,JO31TS,,,,,,06/05 DK3FB,JO31UC,EME,,,,432: 750W 4x23el - 1296: 150W 37el - 2300: 5W 65el,03/01 DK3IK,JN39JF,,,,,,04/97 DK3MU,JO72GK,,,,,,10/04 DK3NG,JO43VC,EME,,,,,01/09 DK3QN,JN58LJ,EME,,,,,06/09 DK3QZ,JO31LP,,,,,,07/02 DK3RV,JO31,,,,,,07/96 DK3SE,JN37VP,EME,,,,144: 50W 2x 12JXX,04/05 DK3SML,JN49SF,,,DO3ML,,IC-910H 100 W 9-elem. Yagi after DK7ZB,05/09 DK3T,JO41GV,EME,,,,,08/05 DK3WG,JO72GI,EME,,EX DM2BYE Y22ME DL3BWW,,144: GS35B 6x 14el (5wl) 432: GS23B 8x 27el & 16x27el 1296: 100 W 1x55el,06/08 DK3WW,JO62NH,,,EX Y54WL Y21EF Y41ZF DL6USB,,,10/07 DK3XM,JO43XL,,,,,144: 700w 2x2wl 60m asl,09/04 DK3XT,JN49FE,,,= AB7IY,,,01/07 DK4JN,JO31,EME,,,,,01/94 DK4KW,JO60EM,,,EX DG0JWW,,TS-2000X,05/08 DK4OG,JN68GI,,,,,,01/03 DK4TG,JO31LB,EME,,,,144: 2X11el. 750W,12/07 DK4U,JO42FD,,,,,144: 8874 250W 2x9el - 432: 3CX800 4x18el,02/08 DK4WN,JN49EP,,,ex DC1PN,,,11/03 DK4XI,JN39NG,,,,,,01/03 DK5AI,JO51GO,,,,,,10/07 DK5DC,JO31SL,,,,,,07/02 DK5DQ,JO31PG,,,,,144: 300W 2x10el,03/04 DK5DV,JO30XS,,,,,FT-847 TS850SAT,04/09 DK5E,JO42DC,EME,,,,,07/06 DK5EW,JN48MB,EME,,EX DG3GAG,,144: IC-7400 ATF54143 HEMT 16x 7el 750Watt,11/08 DK5IT,JN49FB,,,,,,01/03 DK5KK,JO63EX,,,ex DG0KK,,,01/01 DK5KMA,JO50IK,,,ex DO8KB,,,03/06 DK5LA,JO44TR,EME,,,,144: 100W 20el,08/05 DK5MV,JN58WH,,,,,,08/97 DK5OX,JN59MO,EME,,,,TS-2000X 144: 10el DK7ZB 50: Dipole,08/07 DK5PD,JN39VV,EME,,,,,03/00 DK5SO,JN58AV,EME,,,,144: TS700 600Wtts 4x3.5WL,12/08 DK5TE,JN58BG,,,,,144: IC746 HLV600/8877 2x13el 432: IC475H 2x20el GS35b,05/02 DK5WL,JN39VW,EME,,,,144: 750W 2x 2MXP20 (10 element XPOL),09/07 DK5WO,JO30AS,,,,,YAESU FT-767GX LT23S,07/05 DK5YA,JN49NX,EME,,EX DH8NAA,,50: 4el - 144: GS35b 4x9elM2 PHEMT 0.3db - 432: TH338 19el BV,06/07 DK6AS,JO52,EME,,,,,02/01 DK7BY,JO33RJ,EME,,,,750W,03/04 DK7DN,JO40CW,,,,,,05/09 DK7DR,JN47DP,,,EX DL8GCL DG7GAL 9H3XV,,IC821,07/06 DK7LH,JO43BB,,,ex DG8BCC,,144: IC271 400W 2x3.6wl 9BV - 432: IC471H 100W 4x11wl 9BV,12/01 DK7LZ,JO30,,,,,,12/01 DK7T,JN48XK,,,ex DL0UL,,144: 11el 400W 3CX800,12/05 DK8EL,JO31LJ,,,ex DH6JT,,144: 100W 9el MGF1302,12/04 DK8KX,JO30,,,,,,05/04 DK8VS,JN39NF,EME,,,,,07/01 DK8ZJ,JO54AG,EME,,,,144: 600W BEKO 4x 12el M2,09/05 DK9OY,JO52CK,EME,,,,,10/01 DK9RL,JN69BB,,,,,,01/97 DK9ZY,JO40BE,EME,,,,144: TS850 Trvt YL1052 MGF1302 4x10el 2.2wl DJ9BV,11/99 DL0AO,JN59WI,EME,,,,,02/03 DL0AVH,JO52,EME,,,,144: 700W 2x2M18XXX,07/01 DL0BWS,JO64EB,,,,,144: IC-910 100W 2x9el 432: IC910 4x19el 75W 1296:IC910 2x35el 10W,04/07 DL0DAN,JO33OP,,,SPECIALCALL,,,03/98 DL0DBR,JO54WC,EME,,,,,06/99 DL0DET,JO52CK,EME,,,,,01/94 DL0EF,JO30IM,,,,,,01/03 DL0FTG,JO53FM,,,,,,04/01 DL0GER,JN49CC,,,,,,08/00 DL0HES,JO41RF,,,,,IC820H 144: 250W 2x11el - 432: 130W 2x23el Preamp,07/01 DL0HOF,JO50XG,EME,,,,144: 2x 10el 750W 432: 4x19el 250W 1296 56El 30W,08/07 DL0LAU,JO61JF,,,,,,05/02 DL0LN,JO31RS,,,,,,10/04 DL0LSW,JO61XU,,,,,144: 17el 750W,12/99 DL0PO,JO43CD,,,,,,08/96 DL0SHF,JO54BH,,,,,,01/03 DL0UEM,JO73AR,,,,,,07/05 DL0UL,JN48XK,,,= DK7T,,144: 11el 400W 3CX800,12/05 DL0UMK,JN68BC,EME,,,,144: TS790S 4CX1000 4x17el 5WL,01/95 DL0VV,JO64AD,EME,,,,144: 500W 4x WY209 Preamp 3SK121,09/07 DL0WAE,JO42DC,EME,,,,750w and lots of aluminium!,05/04 DL0WH,JN49HN,EME,,,,,01/92 DL0WX,JO30FQ,,,,,,07/96 DL1AAH,JO52EF,,,,,IC-756pro3 / TR-144H+40 / TR-432H / 12 and 28 el M� yagi,06/09 DL1AIW,JO43SX,EME,,,,FT 736 FT 221 FT 290,08/08 DL1AOQ,JO50IW,,,,,,05/02 DL1BKY,JO33RL,,,,,,01/03 DL1DAX,JO31RM,,,,,144: IC251E 100W 11el - 432: FT780R 30W 19el,07/05 DL1DSB,JO61,,,ex Y28OL,,,01/93 DL1DUR,JO70KV,EME,,,,144: IC275H 700W 4x11el S3030,08/00 DL1DWI,JO61TD,EME,,,,144: 2x 8el 750W,06/06 DL1EAP,JO31IK,,,,,144: 12el 750W,04/07 DL1EEX,JO31MA,,,,,144: 750W 10db ant.,09/00 DL1EFJ,JO31GM,,,NOT qrv MS nw (01/01),,,09/01 DL1EL,JO41RF,,,ex DL3ZBA,,IC820H 144: 250W 2x11el - 432: 130W 2x23el Preamp,09/01 DL1ELY,JO31IO,,,,,144: FT225rd Mutek 17el 150W,01/01 DL1GBF,JN48NJ,EME,,,,,02/97 DL1GBM,JN48FD,,,,,50: 7W - 144: 400W- 432: 100W- 1296: 200W,07/02 DL1GGT,JN58AO,EME,,,,144: 8877 2x 12el elev. 10368: 5W 60cm,12/04 DL1GI,JN49FG,,,ex DL1GJO,,,12/03 DL1GNM,JN38WB,,,,,,10/02 DL1HTT,JO61FR,,,,,,11/99 DL1HYZ,JO62,EME,,,,,03/01 DL1JJ,JO31IA,,,,,,08/02 DL1KDA,JO30FQ,EME,,EX DG1KDA,,FT1000 144: LT2S 3CX800A7 Preamp 17ele M2 432: LT70S 3CX800A7 Preamp 2x39el M2,10/07 DL1MAJ,JN68AH,,,= HA1BC,,144: 2x17el 750W,12/99 DL1NEO,JN59KV,,,,,144: IC275H SP2000 Beko HLV600 (max. 600 W) 2x17el Tonna,09/99 DL1NFI,JN59KV,,,ex DG5NGC,,144: IC746 100W 12el M2,01/02 DL1NUX,JO50LE,,,DO2NAK,,KWD TS2000X IC706MK II G,04/07 DL1OJ,JO42QI,,,,,144: Elecraft K2 LT2S Beko HLV600 9el 300W,04/07 DL1RNW,JO62GH,EME,,,,144: 300W 4x10 DK7ZB,12/07 DL1RTL,JO62PH,,,,,144: 13el 100W MGF1302,07/01 DL1SDN,JN48PP,,,,,144: 2x11el 500W,07/99 DL1SFK,JN48PR,,,,,,06/02 DL1SUN,JO53PN,,,ex Y21NB,,,04/00 DL1SUZ,JO53UN,EME,,EX Y24LB,,TS2000 2m: GS35 2x2.2WL Preamp 3SK121 70cm: 2xEC9000 2x7.7WL Preamp.,01/09 DL1UU,JO62SP,,,ex DL7VBW,,144: 300W 2x9el,04/06 DL1VPL,JO61UA,,,EX Y21PL DM2GPL DM3XML,,,05/09 DL1YDD,JO31OO,,,EX DG8YDJ,,144/432: 4CX250 X-Yagis 3 m 1296: 100 W Yagi 3 m,08/08 DL1YMK,JO31QX,EME,,EX DB1DI,,,10/07 DL1ZU,JO40IM,,,,,,06/09 DL2ALF,JO50IW,,,,,144: 100W 9el,08/02 DL2ARD,JO60AR,,,,,144: IC275E 350W 4x17el,02/05 DL2BWH,JO62XR,EME,,,,HF: TS 830+GS35+ Log-Periodic /// 144: 350 W 10 over 10 El. Yagi,08/08 DL2CJ,JO50,EME,,,,,01/94 DL2DAO,JO31PH,,,,,144: 600W 24el,11/02 DL2DBX,JO31OL,,,,,,07/05 DL2DXA,JO61VC,,,,,144: 150W 11el,01/97 DL2EAA,JN59PL,EME,,,,,06/09 DL2FCN,JN49JU,EME,,,,50: 10W 2el BF981 - 144: 400W 11el MGF1302 - 432: 30W 19el CF300,03/06 DL2FDL,JO40LN,,,,,FT736R 50: 5el - 144: 150W 9el - 432: 19el 25W - 1296: 23el 10W,08/03 DL2GPS,JN48CD,EME,,DG2GPS,,TS2000 144Mhz:4x9el DK7ZB Yagi 432Mhz 2x20el X-Yagi Maspro,03/09 DL2IAN,JN49BC,EME,,,,144: 1 KW 2x9el,07/01 DL2IE,JN48,,,,,,01/93 DL2JA,JN58,,,,,,02/04 DL2LAC,JO44MR,EME,,,,144: 18 dBd GS35b 432: 20 dBd GS35b 10368: 4 m dish,03/05 DL2LAH,JO44QS,EME,,DD0LV,,144: 750W 4x12ele DK7ZB 432: 300W 4x16 ele DK7ZB,02/09 DL2MF,JO52DP,,,DL4OBI,,,06/08 DL2MHS,JN58,EME,,,,,03/00 DL2NFX,JN59IV,,,,,144: IC746 100W,04/01 DL2NUD,JO63MF,EME,,,,144: 4x 18el QRO,05/06 DL2NWK,JO63SP,EME,,,,,01/93 DL2OCB,JN49HR,,,,,TS-2000,06/07 DL2OM,JO30SN,EME,,,,,08/01 DL2RDH,JN68HW,,,,,TenTec ORION II + DB6NT-Transverter+PA,05/07 DL2RMC,JN68GI,,,,,,11/97 DL2RSX,JO62SH,EME,,,,144: 19 dBd MGF 1302 DSP 1-2KW,12/03 DL2RUG,JO62,,,,,,01/03 DL2SDQ,JN49OC,,,,,,08/01 DL2YDS,JO32,,,,,,08/97 DL3AAL,JO52,,,,,,01/93 DL3ANK,JO50NL,,,,,,10/07 DL3AZI,JO51ME,,,,,,01/97 DL3BUE,JO72FH,,,,,,08/02 DL3BWG,JO62TQ,,,ex DM5DD Y26GE DR3R,,FT-847 11-ELE-F9FT,03/06 DL3DTS,JO61UA,,,,,,01/93 DL3FBJ,JO40,,,,,,11/01 DL3HRT,JO61AB,,,ex Y32MH,,144: 10el 2.3wl 100W GaAsFet DSP-NR,07/02 DL3IAE,JN49DE,EME,,,,50: TS120 trvt 6el - 144: 3CX800 750W 2x10el MGF1302,08/05 DL3IAS,JN49EJ,,,,,144: 20w 10el DK7ZB 432: 3w 23el DK7ZB 1296: 100w 1.5m 2320: 75w 1.5m 3400: 40w 1.5m 5760: 8w 1.5m 10368: 10w 48cm,07/05 DL3JAN,JO60KT,,,,,144: 9el 300W,03/01 DL3JIN,JO60LX,,,Y32IN,,50W 6ele,05/08 DL3JPN,JO60IS,,,Y56YN - Y23PN,,2m 150W@9ele - HF 500W@3ele (20/15/10) and FD4 - 70cm 100W@10ele,03/07 DL3LBK,JO54AH,,,,,144: 250Watt 11el,07/96 DL3LSM,JO61GG,EME,,,,Elecraft K3+TR144H - 300 W - 11 ele. Flexayagi,01/09 DL3LST,JO61FI,EME,,,,144: 9el,04/05 DL3MBG,JN68,,,NOT qrv MS nw (01/01),,,12/05 DL3MGL,JN58QD,,,= EA/DL3MGL,,,12/01 DL3NAW,JN59KV,,,zzT W3TWX,,144: 500W 2x11el,08/03 DL3NCR,JN48QX,,,,,50: IC736 3el Yagi - 144: IC275E 11el DL6WU 8874 BF982,08/08 DL3NUA,JO64XB,EME,,EX Y38ZA,,144: 500W 9el Yagi,02/07 DL3RBH,JN68HJ,,,,,,05/99 DL3RU,JN49FG,,,,,,01/03 DL3SAS,JN48OR,EME,,,,,04/96 DL3TN,JO31LC,,,,,,12/01 DL3TW,JO44SK,,,,,144: FT1000 LT2S 6x6el 600W,01/03 DL3WW,JO60FL,,,,,,08/08 DL3XT,JN49FT,,,,,,01/93 DL3YBP,JO42,EME,,,,,01/93 DL3YEE,JO42GE,EME,,,,50MHz: 5ele 70MHz: 4ele 144MHz: 5el 100W 432MHz: 28ele 400W 1296MHz: 48ele 150W,05/08 DL3YEL,JO41EV,,,,,144: 9el 3CX800,03/06 DL4ABJ,JO42XP,,,,,,01/03 DL4ALI,JO50JW,,,,,,07/99 DL4ANT,JN49LF,,,,,,09/01 DL4AO,JO42NX,,,,,144: 150W 11el,05/08 DL4DD,JO43OT,,,,,TS2000,07/05 DL4DTU,JO60TS,EME,,,,1296: 200W 3.7m dish 0.4db,08/05 DL4DWA,JO61QH,EME,,,,144: 600W 13ele 432: 35w 19ele,12/05 DL4EA,JO31,,,,,,09/96 DL4EBY,JO62PM,EME,,,,,12/03 DL4IB,JO64CC,,,ex DL5KVA,,144: 11el 300W,12/98 DL4JM,JO31ED,EME,,,,144: 4el 100W,05/05 DL4KG,JN48OU,EME,,,,TS2000 - 50: dipole 30 W 144: 10el DJ9BV 100 W 432: 23el DJ9BV 300 W 1296: 35el 80 W,04/07 DL4MEA,JN58RI,EME,,,,432: 4.5m dish EME KA0RYT peamp GS35b 1296: TH347 750W 1.5m tropo 4.5m dish EME FHX35 HEMT preamp 2320: 1.5m tropo 4.5m dish EME 2xMRF21120 HEMT preamp,04/07 DL4MP,JN48NV,,,ex DL8SET,,50: 100W 5el,01/01 DL4NAA,JO40OC,,,,,144: hm 750W 2x15el,09/07 DL4SUN,JO63CT,,,,,,10/04 DL4WO,JO61WC,EME,,,,144: 17el 150W,04/05 DL4XX,JO43XK,,,,,,07/97 DL4YAO,JN58,,,,,,05/02 DL4YBM,JO42DC,,,,,,01/95 DL5AG,JO63CT,,,,,350W 11el Yagi,06/07 DL5BAC,JO43LG,,,,,,01/96 DL5BBW,JO32NH,,,,,,01/01 DL5CC,JO64AD,,,ex DL5KVD,,144: 17el 600W,12/06 DL5DAV,JO31,,,,,,06/08 DL5DTA,JO61SD,EME,,,,144: 4x11el EME Pwr GaasFet DSP59,08/99 DL5EBS,JO31LH,,,,,144/432MHz: TS790+13 el./20 el. Yagi. 50MHz:Icom+4 el. Yagi,05/09 DL5FDP,JN49LP,,,,,,11/02 DL5FN,JO40FB,EME,,,,432 8X28 QRO,04/09 DL5GAC,JN47UT,EME,,,,144: 400W 11el Flexa CF300,04/08 DL5IO,JN49NI,,,,,,01/97 DL5LF,JO54,EME,,,,432: 1KW 4x9el 9BV 8.5lb - 1296: 20W 23el,08/00 DL5MAE,JN58VF,EME,,,,144: 8x17el 700W,07/05 DL5MAM,JN58UB,,,,,144: 100W 10el,07/04 DL5MCG,JN58KH,EME,,,,144: 11el 500W,05/07 DL5ME,JO52SD,,,ex DL6CIA,,144: 100W 18el,04/04 DL5MEL,JN58,,,,,144: 600W 11el,03/00 DL5NEN,JN59MO,,,ex DH5NBE,,144: 12el GS35b MGF1302 - 432: 28el GS35b - 1296: 35el 40W,12/97 DL5OAU,JO52GW,,,,,,01/03 DL5QQ,JO32KB,EME,,,,,04/96 DL5RBW,JN58VF,,,,,,01/03 DL5RDI,JN58XX,,,DG1RCJ,,,08/08 DL5RDO,JN59VN,,,,,,01/92 DL5ROB,JN68HG,,,ex DG5CH,,144: 300W 16el BF981,03/07 DL5UJ,JN39UJ,,,EX DC8IL,,IC-271E 150watts MGF1302 preamp 5el DK7ZB,05/07 DL5WG,JO52VK,,,ex Y52WG- DL6CRS,,50: 20W 4el - 144: 300W 2x11el,05/04 DL5XV,JO53AP,,,,,144: 2x15el 600W,06/06 DL5YAS,JO31WS,,,,,,12/01 DL5YET,JO41EV,,,,,144: 750W 13el - 432: 750W,04/02 DL5ZA,JO51HK,,,,,144: IC706 100W 14el F9FT,08/07 DL6BF,JO32QI,EME,,,,144: 400W 4x 8el - 432: 150W 4x11el,03/09 DL6KR,JO30NQ,,,,,,10/05 DL6LAU,JO53CF,EME,,,,,07/03 DL6LI,JO53BV,,,,,,06/07 DL6MFK,JN67JX,EME,,,,,08/07 DL6NAA,JO50VF,EME,,,,,10/00 DL6NCI,JO50VI,,,,,,01/93 DL6NDK,JO53BV,EME,,,,TS790 40W 350W 8El Yagi 12dBd,01/08 DL6RDR,JN68BM,,,,,,10/95 DL6UAL,JO61XU,,,,,144: 750W 2x BigWheel,12/00 DL6WT,JN39VV,EME,,,,,04/96 DL6WU,JN49HT,EME,,,,,02/04 DL6YEH,JO32VA,EME,,ex DG3YFB,,144: IC730 LT2S 749W 2x2.2wl 9BV - 432: IC730 LT70 200W 4x8.8wl 9BV,03/02 DL6YFB,JO31KM,,,ex DH4YAT,,,01/96 DL6ZAU,JO40JF,EME,,,,FT736+MHP145 144: 600W 1x 12el M2,05/07 DL6ZBN,JO40ED,,,currently not active 01/04,,144: TS700S 80W 11el MGF1302,05/02 DL7AKA,JO62QO,EME,,,,144: TR7 Trvt 2x4CX250b 15el DJ9BV,01/01 DL7APV,JO62JR,EME,,DC7PV,,432: 16x39el. EME 8x21el. Tropo,01/09 DL7ARM,JO62RJ,,,,,,12/95 DL7AUK,JO62,,,,,,01/03 DL7DCU,JO41BC,,,ex DG7DCU,,144: FT767 100W 4x11el MGF1302,03/99 DL7FF,JO62TJ,EME,,ex DL7UTS,,HF 100W FD4 - 144: 4x11el 1KW,04/05 DL7HR,JN58PF,EME,,,,IC 7400 - 144: 2x 8el LY hor 800W,02/08 DL7PP,JO30SE,,,,,FT920-6m Transverter 144: 2x 11el F9FT 50: 6el DK7ZB,08/05 DL7QY,JN59BD,,,,,,10/08 DL7TX,JN49IV,,,ex DC7AP,,144: 50W 6el - 432: 17el 100W,11/01 DL7UAE,JO62PH,EME,,,,FT736R 50: PA Tonna20505 - 144: GS35 4x3wl (13el) 90degElev - 432: GS35 2x6wl(19el),10/06 DL7UDA,JO62TK,EME,,,,144: IC275H 2xGI7B 17 el F9FT (GS35B 2x10el DK7ZB) 432: IC475H GS35B 21el F9FT (GS23B 4x21el DK7ZB),10/08 DL7UGB,JO62,,,,,,05/97 DL7ULE,JO62,,,,,,12/95 DL7ULM,JO62SN,,,,,,05/01 DL7UME,JO62SN,,,,,,01/03 DL7YC,JO62PK,,,,,HF: 400W - 50: 10W - 144: 200W - 432: 750W - 1296: 110W - 2320: 125W - 10368: 33W,09/03 DL7YW,JO62RK,EME,,ex DC7OL,,,01/02 DL8AKI,JO51,,,,,,11/95 DL8AKR,JO51AI,EME,,DM2CGI Y25VI,,144: FT847 150 Watt PA 5 EL-YAGI (10db) next more,02/08 DL8BBL,JO42,,,,,,04/04 DL8BDU,JO43AA,,,ex DC9BJ DH5BAG,,144: 750W 15el 432: 250W 2x 20el,01/08 DL8CMM,JO52VM,,,,,,05/04 DL8DAT,JO31,EME,,,,,01/93 DL8DBU,JO30NP,,,ex DG8FCB DH6DAH,,144: TS-2000X single 2M12 600W 0.35dB,07/06 DL8DUL,JO61,,,,,,08/04 DL8EBW,JO31NF,EME,,EX DD0EF,,TS-2000 144: 2x 12el M2 full Elv 750W MOSFET LNA144MKII-SSB RX: ONKYO T-4711 PCR1000 7el Crossyagi,01/09 DL8FBD,JO40,,,,,,01/93 DL8GAM,JN37,,,,,144: TS870 600W 11el,12/97 DL8GP,JN39LH,EME,,,,144: SE400 FT847 4cx250b GS35b 90mtr.coax 500watt in 8x 20el.crossyagis,04/05 DL8HCZ,JO53AP,,,= CT1HZE,,,11/00 DL8II,JN49,,,,,,07/08 DL8LAQ,JO43XU,,,,,IC-7400 8874 M2 2M5WL,06/08 DL8MEM,JN57XX,,,,,,12/06 DL8NBN,JN58,,,,,,01/93 DL8OBU,JO42XI,EME,,,,432MHz: 750W 4x33el - 1296MHz: 150W 67el,11/01 DL8SCL,JN48RM,EME,,,,,03/01 DL8SCQ,JN48RV,EME,,DG8SAV,,TS711E + 3CX800/GS35b + 2 * 10 DJ9BV( 1990 ) H,06/09 DL8UCC,JO71EQ,EME,,,,144: 500W 2x11el or 2x17el,07/04 DL8WKR,JO61CD,,,,,,09/06 DL8YAU,JO41HS,EME,,,,144: Ant: 12 El 4WL PA: 700W-MOSFET VV: ATF54143,03/09 DL8YE,JO31MH,,,EX DL8YET,,50: FT847 5el DK7ZB - 144: FT847 10el DK7ZB GS35 - 432: FT847 30w 23el DK7ZB - 10368: FT290 DB6NT Transv 5W 65cm dish,04/08 DL8YHR,JO41GV,EME,,ex DH8YHR,,50: LT6S 2x9el M2 - 144: 24el M2 750W,11/05 DL9AN,JO62RE,,,ex DL7UME,,50: 10W 5el - 144: FT736r 750W GS35b 2x12el,08/04 DL9BDM,JO33RL,,,,,,01/93 DL9DAK,JO43XO,,,DG5DT DH4DAB,,IC7000,04/07 DL9DBJ,JO31OK,EME,,DG8DU,,VHF FT897D GS23b 7El UHF FT897D TH308 2x 19El,07/08 DL9EBF,JO31FH,,,,,,01/03 DL9EBL,JO31,EME,,,,,01/94 DL9GBH,JN48RW,,,,,,12/01 DL9GRE,JO61FH,,,Y66XA,,HLV600 10Eel DK7ZB DEMI Transverter,10/07 DL9GS,JO31OM,EME,,,,,07/08 DL9IM,JO31,,,,,,07/04 DL9KR,JO40DE,EME,,,,,09/02 DL9LBH,JO30MP,EME,,,,TS-2000 144: 2x 11el 500W - 432: 23el 50W,08/08 DL9MCC,JN58UA,,,,,144: 4x 2-4wl 700W MGF1302 - 432: 2x 7wl 700W MGF1302,08/03 DL9MS,JO54WC,EME,,EX DL9GJW,,144: 4x17el GS35b MGF1302,11/05 DL9NBD,JO50LE,EME,,,,TS790 150w 2x11el,03/07 DL9NDD,JN59KN,,,,,,01/03 DL9NDW,JO50XG,,,,,IC7000 2m=400W/17el 70cm=100w 21el,06/09 DL9OA,JO64EB,,,,,144: IC821 100W 9el/2.5wl CF300,03/02 DL9OBD,JO42QN,EME,,,,IC7400 144: 4x11el 750W BF981 - 50: 5el 25W,05/08 DL9RCI,JN68,,,,,,07/95 DL9USA,JO71EN,,,,,144: 10el DL6WU 300W RXAmpl,09/03 DL9YEY,JO41GV,,,,,,01/03 DM1AC,JO30IV,EME,,DC9KZ,,TS2000 - 144 MHz 750W - 2 x 9 ele - 50 MHz 10W - 4 ele,09/08 DM1CG,JO31IC,,,EX DG1ELE,,50: TS 850 LT6 4el - 144: TS 850 LT2S 600W 12el M2 HF: FT 850,10/08 DM1HD,JO31GD,,,ex DC1JP,,144: TS850S LT2S HLV600 600Watt 17 EL M2,08/02 DM2BHG,JO51MW,EME,,EX HZ1AB- Y22HG,,144: 4x 17el XPol 2xGS35b MGF1302,01/08 DM2DXG,JO51MV,,,,,,06/02 DM2ECM,JO62GJ,,,Y25CD,,,05/08 DM2GS,JO42HJ,,,,,,12/04 DM2HB,JO41EQ,,,,,50: FT950 144: IC-706MK2G 50W 11el F9FT,06/09 DM2LL,JO62VU,,,DG3BSD,,HF:500 W- Beam 10-15-20 Dipol 2x 31 50 m // 144 : 100 W 11 El,08/08 DM2PG,JO51,,,,,,04/03 DM2SR,JO53HR,,,DO4LSR,,144: IC-910 - HA8UG GS31 - 2M18XXX Yagi 50MHz: 4element TenTec 1208 x-verter,05/08 DM3FG,JN49LT,,,,,,04/03 DM3FM,JO40MF,,,,,144: IC275H 8el 7ZH,06/02 DM4KA,JO64II,,,,,,03/03 DM7RM,JN48HD,,,EX DH3IAJ,,50: 10W 4el 144: 100W 10el 10GHz 5W 48cm dish,04/09 DM8MM,JO40AQ,,,ex DC9PX DL7AJA,,144: IC-706MKIIG 3CX1500A7 MGF1302 17el. Tonna,11/06 DN1FC,JO41RF,,,,,IC820H 144: 250W 2x11el- 432: 130W 2x23el Preamp,07/01 DN1MA,JN58VF,,,,,144: 8x17el 700W,12/00 DN2MS,JO31OM,,,SpecialCall,,144: C5400 HG51 400W 9el MGF1302,12/98 DO1CTL,JO60LT,,,,,,08/01 DO1EDK,JO31RL,,,,,Kenwood TR-751E,08/05 DO1EL,JO31JL,,,,,,06/02 DO1NF,JN69,,,,,,08/01 DO1YDS,JO42HJ,,,,,,04/04 DO2TC,JO73AO,,,,,,04/05 DO3ESB,JN59VS,,,,,144: IC275H 17el,07/07 DO3MT,JN67,,,,,FT817,01/03 DO5AN,JO31,,,,,,04/02 DO9ST,JN49VW,,,,,,03/01 DP5G,JO31IC,,,SpecialCall,,,04/06 DQ2006R,JO31NF,EME,,SpecialCall,,IC275H or TS2000 144: 2x 12el M2 full elev 750W BIY-ATF-Preamp,06/06 DR5O,JO31MG,EME,,= DF0AW JO31MG,,FT736 144: 750W 2x 11el 432: 200W 4x 23el 1296: 23el 10W,12/08 DS1MFC,PM37LM,EME,,,,144: 4x 13el 100W,04/08 DZ1JP,PK04NC,EME,,,,,03/06 E51EME,BG08DR,EME,,ZK1EME,,IC-706Mk2g 4x 8el 500W,12/08 E73DPR,JN92ER,,,YU4DPR,,FT-897 IC-7000,05/09 E73DU,JN92ER,,,,,,05/09 E75DX,JN84MX,,,T96C,,TS2000,06/08 E77AR,JN94AS,,,YU4AR,,Icom IC275 + PA 250W,06/09 E77GS,JN84OT,EME,,EX T98GTH,,FT897 150 watt 10 el DK7ZB,09/08 EA1ABZ,IN71QO,EME,,,,144: 4x12el or 11el DL6WU 1500W (4CX250+GS35B) Ga-As FET - 432: 15el 35W,10/02 EA1AIB,IN82TK,,,,,,08/95 EA1BBE,IN62BH,EME,,,,,10/05 EA1BFZ,IN81SS,,,,,,04/04 EA1BLA,IN53UM,,,,,50: 100W 5el - 144: 1kw 12el MGF1302 - 432(/p): 31el 600W MGF1302 - 1296(/p): 2x55el 80W MGF1302,10/02 EA1BLX,IN53VK,,,= EB1BXW,,,04/06 EA1CJ,IN71SW,,,EB1ISN,,IC-7000 Acom 1000,06/09 EA1CKL,IN82KF,,,,,,08/08 EA1CRK,IN73DM,,,,,Kenwood ts-790e or Icom 706 MkII 50: 100W 7el - 144: 17el 200W - 432: 19el 130W - 1296: 35el 10W,01/04 EA1CYE,IN83,,,,,,01/93 EA1DDO,IN53UI,EME,,,,144: 17B2 100W pHEMT 432: 50W 31el 1296: 10W 55el,09/06 EA1DDU,IN73EM,,,EX EB1ALC,,144: TS-2000E2+16JXX2+170W 432: TR851E+CC729B 29EL+120W 50: IC706MKIIG+5EL ZX6-5. 1296: TS2000E2+55EL.F9FT+10w.,12/08 EA1DOD,IN73AN,EME,,,,,01/93 EA1EBJ,IN73FL,,,,,50: IC729 BV6-1wl - 144: IC275H BV2-4wl - 432: IC475H BVO-8.5wl,03/06 EA1EW,IM79WS,,,,,,07/95 EA1FBF,IN73WJ,EME,,,,,04/07 EA1JK,IN72RA,,,,,,01/01 EA1KV,IN52PF,,,,,,01/93 EA1OD,IN73EM,,,,,,01/90 EA1RX,IN52PF,,,ex EA1BSK,,IC706 MKIIG,06/03 EA1SH,IN63GA,,,= EB1FIF,,144: 17B2 170W GaAs-Fet - 432: 31el 180W GaAs-Fet,05/04 EA1YV,IN52OC,EME,,,,50: IC706 2x5el - 144: TS2000 GS35B 1KW 4x 17el M2 full elevation MGF1302,08/06 EA2AF,IN92,,,,,,01/90 EA2AGZ,IN91DV,EME,,,,FT1000MP- FT736 144: 4CX1500b 4x17B2CC MGF1402,10/06 EA2ARD,IN93,,,,,,08/02 EA2ASB,IN83KF,EME,,EB2DMN EC2BAW,,,11/08 EA2AVY,IN92DS,,,,,,01/03 EA2BVD,IN91OO,EME,,EB2ATY,,,11/07 EA2KP,IN83MG,,,ex EA2AKP,,144: TR751E 2M18XXX 200W Preamp - 432: 100W 21el,04/04 EA2LU,IN92ET,EME,,,,144: 8x9el 750 W MGF1302,01/06 EA2LY,IN93AH,,,ex EA4LY,,144: TS790 4CX1500 LNA144 2x18el,08/98 EA2NN,IN83MG,EME,,ex EA2CHT,,144: 4wl 200W IC706MKIIG,10/06 EA2RCF,IN82,,,,,,08/02 EA2RL,IN83MG,,,ex EA2AJX,,50: 10W Dipol - 144: 100W 6el Quad,07/05 EA3/DL3MGL,JN01ME,EME,,= EA3MS,,144: 1KW 1x17el,04/09 EA3ADW,JN11CQ,EME,,,,,10/02 EA3AEL,JN01,,,,,,01/93 EA3AIR,JN11,,,,,,01/93 EA3AQJ,JN11BJ,,,,,,01/87 EA3AXV,JN01TJ,EME,,,,Elecraft K2 IC756II Elecraft trvter. GS35 17el-5WL,05/07 EA3BB,JN01VS,EME,,EX EA3BBU,,144: 2x 17el 400W MGF1302,09/07 EA3BEW,JN01SG,,,,,,12/95 EA3BTZ,JN11BI,EME,,,,144: 100W 16el 0.8db preamp,09/02 EA3CN,JN11BI,,,ex EA3GAW,,,03/96 EA3DUY,JN12LD,,,,,144: 4x17el 800W - 50: 6 el 500W - 432: 21el 50W,08/02 EA3DXU,JN11CM,EME,,SILENTKEY,,,10/07 EA3ECE,JN01LT,,,,,,11/97 EA3EDU,JN01WK,,,,,,03/08 EA3EHQ,JN11HR,EME,,,,,03/96 EA3ESE,JN01WR,,,,,144: TM-255 VLA200 SHF MVV144-VOX 13 el Yagi,04/06 EA3FLN,JN11KT,,,,,144: IC275H 450Watts GaAsFET preamp 0.6dB 18ele 18xxxM2,04/04 EA3FTT,JN01VR,,,,,RIG: IC 275H 120W 13ELE yagui,09/06 EA3GAW,JN11BI,,,,,,01/03 EA3GCJ,JN11EM,,,,,Yaesu FT-107M,04/04 EA3GFB,JN11,,,,,,12/95 EA3GIQ,JN01ND,,,,,,07/95 EA3GKU,JN01NJ,,,,,,08/08 EA3GLJ,JN01UI,,,EC5AKW,,Elecraft K3,03/08 EA3IH,JN11BJ,,,,,,01/87 EA3KU,JN00JV,EME,,,,144: IC275H 2x4CX250 16el- preamp,04/05 EA3MD,JN11,,,,,,01/94 EA3MM,JN01WH,EME,,,,,01/93 EA3MS,JN01ME,EME,,DG3MGL,,144: 2x 17el GS35b,10/08 EA3PL,JN11PL,EME,,,,,01/94 EA3TI,JN11JT,,,,,144: 17el 5lambda Yagi 400W 110masl,08/06 EA3UM,JN01,EME,,,,,01/94 EA3URC,JN11,,,SpecialCall,,YAESU FT-100 ICOM IC-706MKII - 144: 50W 14el,05/03 EA3WH,JN01,,,,,,01/93 EA3XU,JN11CK,EME,,,,,12/07 EA4AMX,IM89AT,,,,,,07/01 EA4BAS,IN80HL,EME,,,,FT847 144: 17el 180W MGF1302 - 432: 35el 100W MGF1302,09/02 EA4DB,IN80EJ,,,EA4BPJ,,IC-756ProIII - IC-821H,09/07 EA4ED,IM79FW,EME,,,,,01/94 EA4EHI,IM68TV,,,,,144: IC275H 1500W 4x17B2,07/01 EA4EKH,IN80ND,EME,,,,144: 50Watt 9el,08/05 EA4LU,IM68TV,,,ex EB4FQP,,144: FT726r 400W 17el (17B2),04/03 EA4SV,IM68MU,,,ex EA4DQR,,,04/04 EA5AAJ,IM99SL,,,,,144: IC-706MK2G 100W 9el,04/04 EA5AEL,IM98RP,EME,,,,ICOM 746-100w ant 14 elemnts VHF-multi-band dipole HF-5 elemts to 6 meters-monoband to 10 meters and others,04/07 EA5CJ,IM99TL,EME,,,,,07/05 EA5DWS,IM98SR,,,,,Icom 706-MKII-G YAESU FT-920,08/08 EA5EF,IM99SM,,,EA5BVK - EC5BD,,144 MHz 70 W + 9 el yagi / 50 MHz 100 W + DK7ZB 5 el yagi,04/07 EA5EMM,IM99,,,,,,01/93 EA5GIY,IM98XD,EME,,,,,01/99 EA5HM,IM99,,,,,,01/93 EA5IC,IM98,,,,,,01/94 EA5MT,IM88WV,,,,,,08/08 EA5NO,IM98FV,,,,,,08/97 EA5SE,IM98IL,EME,,,,144: 2x 17el 1.5K,04/06 EA5SR,IM98GF,,,,,,08/08 EA5ZF,IM99VT,EME,,EX EB5IFI,,144: 600W 2x 17el LNA145 432: 35W 2x 21el F9FT mw432s,05/07 EA6ADW,JM19LU,EME,,,,50: 20dbd- 144: 40W- 10el- up: div. Spiegel,07/97 EA6DD,JM19JK,,,,,144: IC706MKIIG 17elB2 100W,05/03 EA6FB,JM08PV,EME,,,,,08/02 EA6IB,JM09SB,,,,,144: IC251E 150W 15elYagi,04/02 EA6NP,JM19MQ,,,,,,01/93 EA6QB,JM08PV,,,,,144: 2x15el 4CX400,05/03 EA6SA,JM19LO,EME,,,,TS-2000X: ...@50+9dBd's. 2x4X150@144+15dBd's. 2X4CX250@432+18dBd's. 10W@1296+25dBd's.,05/08 EA6VQ,JM19HN,EME,,,,144: 2KW MGF1302 8x17el M2 432: 21el 115w 1296: 55el 10w,04/05 EA7AJ,IM87CS,,,,,144: 300W 2x 19el,08/04 EA7DBH,IM76GD,,,,,,01/94 EA7DFH,IM87DD,EME,,,,FT-857 TS2000 17el 200w,05/07 EA7ERP,IM87EE,,,,,TS 790-E 13 ELE TONNA + PA 4CX350A,06/08 EA7EYX,IM87CS,,,,,,12/04 EA7HG,IM87CS,EME,,,,144: 4x 9el 100w mgf1302,12/05 EA7OC,IM77OV,,,,,144: IC820 250W 17el,03/01 EA7RM,IM87CS,,,ex EA7GTF,,144: TR9130 240W 17B2 OH5IY,07/02 EA7TL,IM66VO,,,,,,05/05 EA7TN,IM66VP,,,EX EA1AK/7,,TS2000 144: 100 W 2 x 2.5 wl - 50: 100 W 0.81wl,05/08 EA8BEX,IL27GX,,,EB8QC,,IC910H,06/08 EA8FF,IL28,EME,,,,,02/01 EA9AI,IM75IV,,,,,144: 100W 9el,06/03 EA9MH,IM85NG,,,,,,05/00 EB1BKG,IN62BH,EME,,,,,11/01 EB1BXW,IN53VK,,,= EA1BLX,,,04/06 EB1DNK,IN62CL,EME,,,,144: IC706 4x17el 500 Watt MGF1302 - 432: 70W 21el,04/06 EB1EB,IN83BK,,,ex EB1IQC,,,08/05 EB1EFC,IN52OF,,,,,,01/93 EB1EHO,IN73DM,,,,,144: 17el 200W - 432: 21el 50W,07/04 EB1EUW,IN82TK,,,,,,01/95 EB1IHY,IN52PM,,,,,144: 17el 160W,07/04 EB1IVY,IN53SJ,,,,,,07/02 EB2AYV,IN83MG,,,,,144: 250W 2M18XXX,01/04 EB2DTP,IN82NS,,,,,FT847 IC746 FT816 17el 1000W,08/03 EB2DVT,IN91MP,,,,,,03/06 EB2FJN,IN83QE,EME,,,,50: 1x3 cushcraft 100W - 144: 2x 13b2 Ant MGF1302 1KW - 432: 9el X-Quad BF980 150W,12/08 EB3BAP,JN11CJ,,,,,144: FT736r 200W 17el,01/01 EB3CNX,JN11DI,,,,,,01/93 EB3EPR,JN01ND,,,,,,01/03 EB3GHU,JN11CJ,,,,,,04/04 EB3JT,JN01UI,EME,,EB3GEK,,IC910 + SP2 + 4x13B2 + GS35B,08/07 EB3WH,JN01WN,,,,,,01/93 EB4DF,IM79QQ,,,,,TS-790 FT-817 144: 500W 17el - 432: 500W 21el,06/04 EB4EQZ,IN80EK,,,,,Yaesu ft-817 Yaesu FT-897,08/05 EB4ERS,IN80BH,,,,,FT736 144: 140W 9el GaAs-Fet,01/00 EB4EUB,IN80DJ,EME,,,,50: 6el 100W - 144: 17el 1KW MGF1302 - 432: 21el 50W MG1302 - 1296: 55el 10W,08/00 EB4FXD,IM78BX,,,,,144: 150W 17el,02/04 EB4GIA,IN80CG,,,,,144: IC821 IC706 TS790 240W 17el - 432: 100W 31el SP70,02/98 EB4TT,IN70XJ,,,ex EB4CXS,,,05/00 EB5AZO,IM99RA,,,,,,11/04 EB5EA,IM99TN,EME,,EB5AYG,,144: 4x 11el 500W,05/08 EB5EEO,IM98PG,EME,,,,144: TS2000 6 x 18 2M18xxx /432 : 4 x 38 13 wl / 1296: 8 X 35 Elm Tonna,08/07 EB5EHX,IM99,,,,,,01/93 EB6AOK,JM09RB,,,,,HF 144 432 1296,06/09 EB7BMV,IM67WI,EME,,,,,05/09 EB7BQI,IM76SR,,,,,,06/03 EB7COL,IM77AG,,,,,,05/04 EB7DBX,IM67LG,,,,,144: 12 ele DK7ZB 350W LNA SHF Electronik,07/07 EB7EFA,IM67XI,,,,,,01/95 EB8ANY,IL18,EME,,,,144: 500W 4x 7el,12/04 EB8BTV,IL18QI,,,,,,05/03 EC1DMY,IN82SL,,,,,,08/08 EC3DR,JN01UJ,EME,,EA3GLJ,,,04/09 ED1GSR,IM79WS,,,Expedition,,,01/94 ED3DXU,JN01VQ,EME,,SPECIALCALL,,,02/08 ED4RKF,IM79WS,,,Contestcall,,144: 240W 13el,03/97 ED5TOR,IN90XP,,,Expedition,,,01/93 ED6EIG,JM19IM,,,SpecialCall,,,08/99 EG3TVC,JN11BI,,,SpecialCall,,144: 400W 17el M2,12/99 EH1RX,IN52IN,,,ex EH1BSK,,IC706 MKIIG,03/02 EH3AXV,JN01TJ,,,,,50: FT920+trsv GS35b 6elYagi,07/02 EH5RM,IM98,,,,,,07/02 EH6SA,JM19LO,,,,,TS-2000X,08/07 EH7RM,IM76QM,,,,,,01/03 EH9LS,IM75IV,,,,,,01/03 EI2CA,IO62,,,,,,01/88 EI2IP,IO61CX,,,,,,04/07 EI2VPX,IO53IQ,,,,,,01/91 EI3GE,IO63XD,,,,,,08/00 EI4DQ,IO51WU,EME,,,,144: ic910 gs35b MGF1302 4x10el or 10el,03/08 EI4GHB,IO52QQ,,,,,Icom 910,09/08 EI4VBE,IO42,,,Expedition,,,01/88 EI4VBS,IO42,,,Expedition,,,01/90 EI4VWY,IO54,,,Expedition,,,08/01 EI4VWZ,IO55,,,Expedition,,,08/01 EI4VXV,IO43XL,,,G0AFH,,144: 400W 17el Preamp,12/06 EI5FK,IO51RT,EME,,,,144: FT847 150W 9el,03/05 EI5HN,IO62,,,Expedition,,,05/06 EI6CPB,IO63WE,,,,,50: IC706 - 144: IC821,09/06 EI6GF,IO62RG,,,,,,02/98 EI6IZ,IO53HU,EME,,,,IC756PRO2,06/07 EI75RTS,IO51,EME,,SPECIALCALL,,,04/07 EI7IX,IO53FT,EME,,,,,10/07 EI7RCG,IO62,,,,,144: 27el,08/96 EI7RSD,IO62WX,,,,,144: 27el 400Watts,07/96 EI8JK,IO51DN,EME,,EI2FSB,,FT-726 FT-736 FT-102 FT-897,06/09 EI9HW,IO63MP,,,,,,10/93 EJ4VNX,IO43,,,SpecialCall,,,01/93 EJ6O,IO43MM,,,SpecialCall,,,01/94 EM1U,FC74US,,,,,,01/03 EN80AL,KO61WP,,,= UT8AL,,,08/07 ER1AN,KN46KX,,,ex ER5OIW UO5OIW,,144: FT857 200W 2x10el,12/04 ER2RM,KN46KA,,,ex ER5OK,,,11/05 ER5AA,KN45CW,,,ex UO5OB,,,06/00 ER5AL,KN45CW,,,,,,07/02 ES0Q,KO17AV,,,SpecialCall,,,06/04 ES0X,KO18,EME,,Expedition,,,07/99 ES1CW,KO29HK,,,,,,05/98 ES1RF,KO29IJ,EME,,ex UR2RGM,,FT1000MP/FT847/FT736/TS2000+Trans.+Preamps 50: 5el 500W - 144: 4x9el 500W - 432: 4x19el 150W - 1296: 4x 35el,04/06 ES2CM,KO29DJ,EME,,,,ICOM-706 MKIIG 144: 4x 14el 600W,04/06 ES2NA,KO29JL,,,,,144: IC706MKII 300W 9el,04/02 ES2QH,KO29LL,,,,,144 : FT847 700Watts 9ele Preamp - 432: IC821 800W,08/01 ES2WX,KO29JN,,,,,,05/03 ES3BR,KO28JS,,,,,,05/04 ES3GZ,KO28,,,,,,01/93 ES3RF,KO29IF,EME,,EX UR2RGM ES1RF ES1RF/3,,FT1000MP/FT847/FT736/TS2000 50: 5el 500W - 70: 5el 60W - 144: 4x18el 500W - 432: 8x19el 200W - 1296: 4x35el 30W,03/08 ES4Q,KO39BD,,,Expedition,,,08/05 ES5KJ,KO38IJ,,,,,,01/05 ES5MC,KO38JJ,,,,,,12/95 ES5MG,KO38IJ,,,,,,01/94 ES5PC,KO38HJ,,,,,1296: remote operated setup: 4.5 m dish 300-350W,10/08 ES5RE,KO38,,,,,,01/94 ES5RN,KO38,,,,,,01/94 ES5RY,KO38JI,,,,,,11/02 ES5WE,KO38JJ,,,,,,01/94 ES6DO,KO27WX,,,EX UR1RYY- UR2RDO,,IC756 + IC820H+Preamp ATF54143 + 100/350W 50MHz: 4el - 144MHz: 2M5WL,05/08 ES6LBN,KO37AW,,,,,144: 170W 11el,07/04 ES6RQ,KO28WA,EME,,ex UR2RQT UR2RQ,,TS2000 FT736 FT847 144: 2KW 8x17el M2 + 1x 18el,07/05 ES8AS,KO28FJ,,,,,,04/04 ES8X,KO18XC,EME,,Expedition,,144: TS790E+PA 300W 2x9 el or FT 847+ PA 300W 9 el Yagi and preamps,07/02 ET3AA,KJ98JX,EME,,= ZL1RS,,,04/08 EU1AB,KO33SU,,,EX UC2AAB,,,12/08 EU6AF,KO35,,,,,,12/07 EU6MS,KO45IN,,,ex RC2WBH,,144: 16el 700W MGF1302,09/01 EV2AA,KO33PM,,,,,,01/03 EV2AAB,KO33ST,,,,,,01/03 EV2OEU,KO52IK,,,,,,01/03 EV5M,KO53TP,EME,,Expedition,,144: 4x 9el QRO,08/06 EV5N,KO42RX,,,Expedition,,,01/94 EW1CD,KO33SW,,,,,,06/07 EW1RZ,KO33SV,,,,,,10/01 EW2ABC,KO33VW,EME,,,,,11/08 EW6AL,KO46KB,,,Expedition- QSL via EU6MS,,,08/06 EW6DX,KO45JL,,,,,144: 100W 9el,08/97 EW6FS,KO35LB,,,,,144: 20W 2x16el F9FT Preamp,01/03 EW6GB,KO45CN,,,,,144: 200W 10el,08/02 EW7IM,KO53,,,ex UC2SMM,,,01/92 EW7IN,KO53,,,,,,01/94 EW7IW,KO53DR,,,,,,01/03 EW8DD,KO42QA,,,,,144: 4x16el F9FT- 50W,12/98 EW8RR,KO41OV,,,,,,09/07 EY8MM,MM48FI,EME,,,,144: IC706 200W 2x 10el,06/06 F0DBD,JN08XW,,,,,FT726R 10W 10el Preamp,01/02 F0DIX,IN93SV,,,,,-,06/07 F0EJW,IN78VJ,,,,,ICOM 910H Antenne 17 El�ments tonna Pwr:20watts,06/08 F0FEQ,JN33LN,,,,,,11/06 F1AFJ,JN06HT,EME,,,,144: 4x11el F9FT 1500 W 0.4dB,11/04 F1AKK,JN39CC,,,,,,07/01 F1AOE,IN93RS,,,,,,04/04 F1CCM,IN93MP,,,,,,01/93 F1CNE,JN28,EME,,,,,01/94 F1CXX,JN18AT,,,EX J28EL,,ic910h+11 ele-ft847+dipole+gp 50mhz,05/09 F1DLZ,JN19FH,,,,,,08/08 F1DUZ,IN97NJ,EME,,,,144: FT897D 2x 4CX250R 600W 4x 11el LNA 9BV,04/06 F1DVP,JN12JN,,,,,,08/08 F1EBK,JN18BW,EME,,,,144: TS790A 300W 4x10el DK7ZB,11/04 F1EBN,JN18JR,,,,,,08/02 F1ELL,JN18EX,EME,,,,,01/94 F1ERG,JN27JJ,,,,,,08/08 F1FEN,JN25JC,EME,,,,,01/94 F1FHI,IN97GD,,,,,,01/03 F1FIH,JN23GS,,,,,,04/03 F1FLA,JN26KU,EME,,,,144: 4x25el Xpol 7.6lb 1KW MGF1302,10/05 F1FVP,IN95XA,,,,,,01/03 F1GHP,IN96LE,,,,,,01/03 F1GTR,IN96JE,,,,,,01/03 F1GTU,JN05IF,,,,,144: 160W 13el,05/06 F1HAR,JN18DT,,,,,,01/93 F1HQM,JN23LV,,,,,,10/07 F1IHP,IN88,,,,,,07/02 F1ISJ,IN97QM,,,,,IC746,10/08 F1IXQ,JN15MQ,,,,,,12/01 F1JG,JN23HQ,,,ex FC1JG,,,08/02 F1JOE,JN05IF,,,,,,01/93 F1JRD,JN13WO,,,ex FA1JRD,,144: TR751 GS35b 2x11el F9FT,12/04 F1MBM,JN38CQ,,,,,FT225RD 144: 8877 4CX250 MGF1302 16el F9FT - 432: 100W 21el F9FT,12/02 F1MOZ,IN93RS,,,,,,11/06 F1NGP,JN39CC,,,,,,04/97 F1NNI,IN88,,,,,,04/02 F1NSR,JN33JK,EME,,,,144: IC275h 2*11EL 2*4CX250,03/07 F1NWZ,JN17CT,EME,,,,144: FT736R Mutek Front End 4x 10el 7ZB GS35B,03/07 F1ODA,JN13FO,,,,,144: 400W,10/02 F1PUX,JN16XL,,,,,TS690S 144: LT2S 200W 20el - 50: 5el,01/99 F1PYR,JN19DA,,,,,,04/02 F1PYW,JN38UP,,,,,144: 120W 9el or 2x11el - 432: 17el or Helix,03/99 F1RAD,JN25WF,,,ex FC1RAD,,50: 5W 1/4wl. - 144: TR751e 25/200W,05/02 F1RHS,JN03PV,,,,,,11/01 F1TE,IN94QS,EME,,,,144: 4x 12el 2KW,09/06 F1VJQ,IN95OL,,,EXPEDITION,,,07/07 F1VS,JN04FV,,,,,,05/08 F2TU,JN38LG,EME,,,,,11/01 F3VS,JN38LF,EME,,,,144: 24x20el (6wl) & 8x20el (6wl) DJ9BVs,03/99 F4ALP,JO10OP,,,,,,12/01 F4APX,JN23XL,EME,,,,144: 4*18EL - 432: 4*21EL 2*4CX250,01/04 F4ARU,IN94VT,,,,,144: 4x3.6wl 1KW 8877,11/01 F4AZF,JN39GG,EME,,,,144: IC275h 500W 8874 4x 15el,04/06 F4BKV,IN95PT,,,,,144: TS700 150W 9el - 432: TS440S TRV 70W 21el - 1296: TRV 1W 3x35el,04/02 F4CIB,JN03,,,,,144: 250W 9el,05/02 F4CYZ,JN38SF,EME,,,,144: FT897D 400W 2x 9el Yagi,05/05 F4DDX,JN23QI,,,F0DDX,,FT897 FT817,03/08 F4DSD,JN23JO,EME,,,,,01/05 F4DXX,IN97LH,EME,,,,144. 17el 200W,01/06 F4ERO,JN18JV,,,EX F0ERO,,,12/08 F4JRC,JN23JW,EME,,,,144: 4x10el,01/01 F4JVG,JN16UM,,,,,,07/02 F5ANT,JN24RJ,,,,,,04/96 F5AQC,JN05PU,,,,,,01/03 F5BUU,JN03BO,,,,,,01/05 F5DE,JN05DP,,,,,50: 50W 5el - 144: 100W 16el,08/07 F5EAN,JN06CP,EME,,,,,01/94 F5FEN,JN25JC,,,,,,01/03 F5FHI,IN97GD,EME,,ex F1FHI,,,01/94 F5FLN,IN94SR,,,,,144: 300W 17el,08/99 F5FVP,IN95WB,,,,,144: 4x17el 1KW,07/00 F5GHP,IN96LE,EME,,EX F1GHP FC1GHP FD1GHP FE1GHP,,IC745+transverter 4x14elts DJ9BV 3.6Wl MGF1302B Power 400w,10/07 F5HRY,JN18EQ,EME,,,,144: 1KW 4x11el,11/02 F5IF,JN12IL,,,,,,08/08 F5IVP,JN23QI,,,,,IC706MKIIG 50 W elts F9FT,05/07 F5JKK,IN87PR,,,= FM5JC,,,08/07 F5JNX,JN37PV,EME,,,,144: 4x 17el 600W,02/07 F5JRX,JN25AW,,,,,,01/94 F5KCR,JN26IX,,,,,,08/96 F5KDK,JN23VF,,,,,,01/03 F5KPO,JN24,,,,,,12/01 F5LEN,JN38BO,,,,,144: IC275A 250W 17elB2,06/05 F5LKW,JN23SJ,,,,,144: TS700 60W 13el,04/03 F5LRL,JN26MV,,,,,144: 400W 4x10el,05/02 F5LUW,JO10MP,EME,,ex F1LUW,,,11/95 F5MGD,JN07AW,,,,,FT102 + tvtr,05/04 F5MMX,JN18CN,,,FD1MMX FE1MMX F1MMX SO9MMX SO8MMX,,Home made,11/07 F5MSL,JN26JS,EME,,ex FC1MSL,,144: 8877 4x11el (or 4x10el) MGF1302,02/99 F5MZN,IN87BU,EME,,,,,08/96 F5NWK,IN97EJ,,,ex FD1NWK,,144: 9el 200W,05/04 F5OIH,JN06,,,,,,08/03 F5OWL,JN33CC,,,ex FC1OWL,,50w 2x9elts side by side with elevation,08/05 F5PAU,IN88CB,,,,,144: 4x11el 150W,07/02 F5RRS,JN36EB,,,,,144: 350W 10el Quad,10/06 F5RSS,JN36EB,,,,,144: Kenwood TM-255 PA : TE SYSTEMS 1452G (350 Watts) ANT : 10 el. Qubical Quad,10/06 F5SCL,JN29HP,EME,,,,FT225RD,07/08 F5SDD,JN23RF,EME,,FD1SDD,,FT901 IC211,01/04 F5SE,JN29BG,,,,,,06/03 F5SIB,JN18EB,,,FD1SIB,,,03/09 F5SJE,JN13,,,,,,12/95 F5SJP,JN13VQ,,,,,144: TS790 180W 17B2,01/02 F5VBW,JN03,,,,,,06/95 F5VHX,JN04FT,EME,,ex F/G8MBI,,,06/03 F6ANQ,IN94RT,,,,,,07/96 F6AOI,JN33NQ,,,,,,08/02 F6APE,IN97QI,EME,,,,144: 17el 200W,11/06 F6BAZ,JN39EF,,,,,,06/02 F6BEE,JN08FU,,,,,,01/03 F6BEG,JN25JS,EME,,,,144: 3wl Antenna 300W,06/08 F6BKI,IN94,EME,,,,,12/05 F6CBH,JN19BH,,,,,,12/07 F6CGJ,IN78RK,EME,,,,144: 4x11el 400W,04/00 F6CIO,JN26JH,,,,,,09/98 F6CJG,JN15,EME,,,,,01/93 F6CKZ,JN09LH,,,,,,01/97 F6CRP,IN96KE,,,,,50 MHz : 3 el - 100 W 144 MHz : 600 W- 9 el DK7ZB,09/07 F6CTW,JN18,EME,,,,,01/93 F6DHI,JN23RK,,,,,144: 200W 9el MGF1302,04/04 F6DKQ,JN37BI,,,,,,11/08 F6DKW,JN18CS,,,,,,02/01 F6DRO,JN03TJ,,,,,2500Watt 18el BF981,03/04 F6DWG,JN19AJ,,,,,,04/05 F6DWH,JN19,,,,,,01/95 F6EAS,IN98,,,,,,08/01 F6EGV,JN33AQ,,,,,,08/07 F6EMT,IN98FG,EME,,,,,01/94 F6EYM,IN99,EME,,,,,12/95 F6FHP,IN94TR,EME,,ex F1CYO,,144: 1KW 4x6 wl 432: 27el 800W,08/06 F6FLV,JN18AT,,,,,,02/96 F6FTN,JN08XS,,,,,TS2000X 144: 4x9el 300W,01/04 F6GPT,IN94SW,,,,,144: 11el 400W,03/07 F6GRB,JN25KP,EME,,,,144: 4x 10el 600W,05/06 F6GUU,JN05CU,,,,,FT857,04/06 F6HLC,JN26HS,EME,,,,144: gs35b or th308 17elt yagi,09/07 F6HRO,IN88JQ,,,,,IC910 144: 17el 100W,05/06 F6HVK,JN27LH,EME,,EX F1AUQ,,144: 4x 17el H or single Yagi 400w / kw,01/08 F6HYE,JN36DG,EME,,,,,01/94 F6IFX,JN07CX,,,,,,10/07 F6ITS,JN33MP,,,,,IC706MK2G 144: 50W quad 8 el 432: 20W quad 2x11el,04/08 F6IZZ,JN18GR,,,,,,01/03 F6JXR,IN98HW,,,,,,09/98 F6KHM,IN78RJ,EME,,,,,06/02 F6KRK,JN18AS,,,,,144: 17el 120W,08/08 F6KSX,JN18,,,,,,01/03 F8BKD,JN38LG,EME,,,,144: TS-2000 4X11 el 1000W,01/03 F8CS,JN27UR,,,,,,08/98 F8DNX,IN93FJ,EME,,,,IC-7400. 100 watts. 10 elts (DK7ZB)home made quad(4x10 coming soon),05/08 F8DO,JN26IF,EME,,,,50: TS680S 5el - 144: FT225 4CX1000 2x11el MGF1302,08/06 F8DYR,JN07WL,,,F4DYR,,50 / 144 : homebrew,10/08 F8ENY,JN03RO,,,,,,08/08 F8IPS,JO00SQ,,,,,,07/00 F8KFR,JN09RG,,,,,144: 2x9el 1-8KW - 432: 80W 26el doublequad,09/06 F8OP,JN26MM,EME,,,,50: TS690 100W 6el - 144: FT225RD Mutek 2x4CX350 500W 17B2 Cushcraft,02/05 F8PKC,JN38MG,EME,,,,144: TS-2000 4x17b2 qro,04/06 F9HS,JN23AT,EME,,,,144: 4x BVO3WL 8877 MGF1302,10/07 F9IE,IN86WW,,,,,,05/04 FA1APX,JN23XL,EME,,,,144: IC970 4 x 22 el DJ9BV 2 x 4CX350F,04/00 FC1DUZ,IN97NB,,,,,,01/03 FF6KBF,JN18BW,,,,,,01/03 FK8HA,RG37FR,,,,,,01/03 FM5CS,FK94LI,EME,,,,144: 4x 17el B2 1.5KW 8877 LNA 0.5db,05/06 FO4NK,BH52,EME,,,,,01/94 FO5RK,BH52,,,,,,01/03 FR5DN,LG78SS,EME,,,,,12/05 FS5UQ,FK88LC,,,,,,01/03 FT5XO,ME40VK,EME,,,,,03/05 FY5DG,GJ35QD,EME,,,,,01/03 G0AEI,JO01GO,,,,,,01/91 G0AFH,JO01EI,,,,,144: 2x17el 400W,01/08 G0BPU,JO02,EME,,,,,01/94 G0CHE,IO90PS,,,,,50: 400W 70: 50W,05/07 G0CUH,IO70LG,EME,,,,144: 500W 10el,04/05 G0CUZ,IO82WM,,,,,FT726r 50: 50W 2el - 144: MGF1302 2x3CX400A7 5el or 11el - 432: 10W 5el,07/02 G0DJA,IO93IF,,,EX G6VMQ,,TS2000X SDR1000 FT817,09/08 G0EVT,IO93GR,,,,,144: IC202S 250Watts 3wl DJ9BV,07/01 G0FIG,IO90UU,,,,,50: IC575h 6el 400W - 144: IC275h 400W 10el MGF1302 - IC475h 300W 2x19el,05/00 G0GMB,IO92NB,EME,,,,IC756 PRO II TR144H MGF1302 LNA GS35 PA. Ant: 17 ele F9FT for 2m - 5 ele for 6m - 3 ele for 4m,08/08 G0GMS,IO82XT,,,,,50: IC746 & IC756pro GS35b pre-amp,04/06 G0HVQ,IO81UX,,,,,Icom IC7400,04/07 G0HYP,IO84FN,,,,,FT847 IC1271E 144: 1.5KW 2x17el - 432: 2x21el,09/06 G0ISW,IO84OQ,,,EX G1MOG,,Kenwood TS-2000 & Create Log Periodic,04/07 G0JDL,JO02UK,,,,,,01/96 G0JUR,IO92WT,,,,,,08/99 G0KAD,IO91VC,,,G1JUZ,,144: FT1000MkV Elecraft XV Transverter 2x 12ele hoembrew GS35,04/07 G0KAS,IO91UI,,,,,144: IC275h 2x4CX250b 17el Preamp,01/00 G0KPW,JO02RF,,,,,144: 400W 2x17B2,07/06 G0KSC,JO01,EME,, G0KUX,IO91WP,,,,,,11/01 G0KZG,IO80,,,,,,03/07 G0LBK,IO93JK,,,,,,01/93 G0MGA,JO00DT,,,,,,01/93 G0MJW,IO91JO,,,,,50: 100W 5el - 70: 160W 4el - 144: 2x4CX250b 13el,01/97 G0NFA,IO91NE,,,,,144: IC271A,04/01 G0PES,IO83LS,,,,,,11/99 G0RRJ,IO91FE,,,ex G8OPR,,1296: 100W 55el,04/04 G0RUZ,IO93FR,EME,,ex G6ZTU,,144: IC746 GS35b 6x 4.6wl. 32JXX X-Pole MGF1801 - 432: 2003 - 1296: 5m Dish TH347,10/02 G0SAS,IO84OQ,,,,,Kenwood TS-2000,10/07 G0TPH,IO92IO,,,,,,12/01 G0UWK,IO83UB,,,ex G1WEM,,FT1000mp 144: TV144/28 GS31b 400W 5WL 432: 2x 6WL GS31b MGF1302,10/06 G0WUU,IO92SR,,,,,,08/08 G0XDI,IO91RP,,,,,,11/01 G1EMJ,IO82WM,,,,,,01/93 G1GEY,IO94FW,EME,,,,,01/94 G1KAW,IO91TK,EME,,,,144: 9el 200W,08/06 G1MOG,IO84OQ,,,,,Kenwood TS-2000,10/07 G1OGY,JO01GR,,,,,,09/04 G1SWH,IO83QO,,,,,,10/04 G1WPF,IO91RP,,,,,144: IC275E Tempo2002 3CX800 9el,08/99 G1XRL,EN35,,,,,,01/03 G1YJI,IO91WP,,,,,,11/01 G1ZJP,IO92WV,,,= M1MHZ,,IC7400 IC1275e IC475H IC202s IC402 TS830s & Tvtrs 4x 12el 400W,11/08 G3BW,IO84,,,,,,01/93 G3JHM,IO91LC,,,= F0AKD EI4AW,,50: 100W 5el - 144: 400W 2x13el,05/01 G3LQR,JO02QF,EME,,,,,01/94 G3LTF,IO91GG,EME,,,,eme: 6m dish,03/06 G3NAQ,IO91HL,,,,,50: 400W 3el - 4: 100W 2el - 144: 400W 17el - 70: 250W 21el,08/05 G3UTS,IO94CU,,,,,144: 400W 9el M2 BF981,02/04 G3WCS,IO83RH,,,,,144: TS430S HB Transverter HB Amp 2x4CX250B 20el DJ9BV 70: 100W 4el 50: 100W 4el,01/05 G3WDG,IO92rg,EME,, G3WZT,IO90UX,EME,,,,IC756PRO 50: 7el 400W - TS2000 144: 2x12el 400W - 432: 1x19el 50W,03/07 G3YNN,JO00EU,,,,,50: 2-5W 5el - 144: FT736 100W 14el - 432: FT736 25W 11el,05/04 G3YYD,IO91TR,,,,,FT1000MP Transverter 4CX400 400w to 3wl yagi at 22m AGL,04/05 G4AEP,IO91NJ,EME,,,,144: 400Watt 17el ATF53045,01/05 G4AFJ,IO92HO,,,,,144: 150W 10el,09/01 G4ALY,IO70UL,,,,,,12/03 G4AOA,IO83TD,,,,,,01/93 G4APJ,IO83UP,,,G8APJ,,FT736 FT817,10/07 G4ASR,IO81MX,EME,,,,144: FT221GTi 2x3CX400 17el (4x17el),02/04 G4BRK,IO91HP,,,,,144: 80W 9el,05/08 G4CBW,IO83UB,EME,,,,144: TS2000 IC756PROII 4x 9el 800W,01/07 G4CCH,IO93,EME,,,,5.4m dish. 650W CW or 450W JT,05/07 G4CJG,IO94CR,,,,,,01/93 G4CLA,IO92JL,,,,,,09/03 G4DBL,IO91JJ,,,,,144: IC746PRO 4CX350 300W 17el,11/04 G4DDK,JO02PA,EME,,,,TS2000X IC275 FT847 FT817 FT290,04/07 G4DEZ,JO03AE,,,= G4ZDE G9Z,,IC910 and IC7400 various Linears,10/06 G4DHF,IO92UU,EME,,,,144: K2 txvtr GS35B 8x Yagis 2.2 wl,10/06 G4DOL,IO80SP,,,,,,04/99 G4DZU,IO93ES,EME,,,,1296: 800W 3m. Dish,05/07 G4ERP,IO81XW,,,,,,01/03 G4FDX,EN60VL,,,,,,01/03 G4FRE,JO01KK,EME,,,,,01/94 G4FUF,JO01GN,EME,,,,,04/05 G4HGI,IO83PL,,,,,144: TS780 GS35b 400W 17el,08/04 G4HGT,IO83,,,,,,01/93 G4IGO,IO80NW,EME,,,,50: IC706 300W 6el - 144: IC706 2x 17el 400W,04/05 G4JCC,IO90MS,,,,,,01/03 G4JZS,IO91SO,,,G8LZE,,,06/07 G4KLA,IO92AK,EME,,,,2x11 400w SSB SP-2000 preamp TS790 LinearAMP,12/08 G4KLX,IO93FB,,,,,,03/04 G4KUX,IO94BP,EME,,,,,10/07 G4KWQ,IO92AQ,,,,,144: FT847 400W Preamp 16el Tonna,04/03 G4LOH,IO70JC,EME,,,,,05/07 G4ODA,IO92WS,,,,,,01/05 G4OIG,IO92OG,,,G8CXK,,TS130V - FT736R (50 - 1296) - FT817 - C528,09/07 G4PBP,IO82WO,,,,,,07/01 G4PCI,IO91AL,,,,,IC756PRO,01/03 G4PCS,IO91WV,EME,,,,indoor antennas,10/07 G4PIQ,JO01MU,EME,,,,144: 2x3CX800 ATF10136 4x15el CueDee,10/04 G4RGK,IO91ON,,,,,144: 300Watt 17el MGF1302 - 432: 400Watt 8x27el MGF1302,03/01 G4RKV,JO01OI,,,,,144: IC275E EME Pwr 2x9el MGF1302,01/01 G4RNL,IO83,EME,,,,,01/94 G4RRA,IO80BS,,,,,144: 4x10el 400W,08/03 G4SHC,IO83VO,,,,,,01/93 G4SSO,IO91TO,,,,,,08/94 G4SWX,JO02PB,EME,,,,,06/09 G4VIX,JO01PU,EME,,,,,01/94 G4VPD,IO92BJ,,,,,,01/90 G4VXE,IO91QL,,,,,,03/01 G4WQE,JO01CJ,,,,,,01/03 G4XBF,IO91QE,,,,,,04/99 G4XUM,IO83,EME,,,,,10/02 G4YTL,IO92MB,EME,,,,144: IC275 1KW 4x 5wl DJ9BV,05/05 G4ZFJ,JO01HO,EME,,,,50: 4Q 400W 70: 4Q 25W 144: 4x 9el KW,01/09 G4ZTR,JO01KW,EME,,,,144: FT1000MP LT2S 2x4CX250B MGF1302 CC17B2 or 2x9ele OZ5HF,08/05 G5WQ,IO91DO,EME,,,,ic756pro3 jst-245 ic706mk2g ft100d 4x 11el 500W,10/07 G6AVK,JO01HO,EME,,,,,10/08 G6DER,IO93GN,,,,,,01/97 G6HIE,IO90ST,,,,,,01/09 G6HKM,JO01FT,,,,,,01/94 G6RAF,IO92QP,,,,,,10/95 G6TEL,IO90AR,,,,,,05/04 G6TUS,JO02AG,,,,,TS-2000 - 100w - 12ele ZL,02/09 G6UT,JO01BS,,,= M0ITY OK2IT - ex OK2ITY,,,05/06 G6XRK,IO90RN,,,,,144: IC820H Henry2002 Mutek 15el M2,01/98 G6XVV,IO93,,,,,,11/95 G6YAY,IO80EL,,,,,,01/03 G6YIN,IO93ET,,,,,,01/99 G6ZTU,IO93HN,EME,,,,,01/93 G7KQW,IO93,,,,,,01/03 G7LIJ,JO01GG,,,,,,01/95 G7NCF,IO81RE,,,,,FT847,05/05 G7RAU,IO90IR,,,,,144: FT757 Mutek 12el 400W,05/08 G8APZ,JO01DO,EME,,,,IC-275 or IC475 on every band 144MHz - 24GHz with transverters,10/07 G8BCG,IO70RK,EME,,= H44PT,,50: IC756POOII 400W 7el,06/06 G8BHH,IO82WO,,,,,,07/01 G8CLZ,JO00EU,,,,,50: 2-5W 5el - 144: FT736 25W 9el - 432: FT736 25W 11el,09/01 G8DKK,IO91VX,,,,,,05/07 G8DSL,IO90FW,,,,,,01/03 G8ECI,JO03AK,,,,,50: 5el 300W - 70: 5el 160W - 144: 10el 300W,01/01 G8GTD,IO93,,,,,,11/01 G8GXP,IO93FQ,,,,,TS2000X + PAs for 6m 4m 2m 70cms and 23cms (see QRZ.com for details),11/08 G8IZY,IO91VC,,,,,144: TS700G BF981 4CX250b 250W 9el M2,01/01 G8LZE,IO91SO,,,G4JZS,,,08/08 G8LZG,IO93SR,,,,,FT847 or FT100,11/01 G8MYK,IO92BJ,,,,,IC275H- 100W- 17el,07/02 G8OPR,IO91FE,,,,,,01/03 G8PYP,IO90AS,,,,,,01/93 G8ROU,IO92,,,,,,01/93 G8RWG,JO01BN,EME,,,,144: FT1000MP DEM144/28 2x8874 MGF1302 9el full elv,05/02 G8T,IN79JX,,,,,,06/02 G8TIC,IO82VF,,,,,50: JST245+8877+6el 144: IC7400+1KW+DJ9BV-10el,08/08 G8TOK,JO01BI,,,,,,04/02 G8UUR,IO92ET,,,,,144: 80Watts 3ele@10mtrs,07/00 G8VHI,IO92FM,,,,,50: 100W 4el - 70: 10W 4el - 144: 9el 200W - 432: 2x23el 100W - 1296: 67el 40W,07/04 G8VR,JO01DJ,,,,,50: 3el 100W,05/03 G8VYK,JO01FO,EME,,,,144: IC251E MGF1302 180Watts 15 ele Cue Dee 15m,07/05 G8XVJ,IO83RJ,,,,,144. LT2S 8877 17el M2,08/99 GB2LBN,IO85,EME,,,,144: 17el 100W,08/00 GB2LD,IN79JX,,,Expedition,,,08/06 GB2WQ,IO66,,,Expedition,,,01/92 GB4IOM,IO74PB,EME,,,,,05/04 GB4SPT,IO74PB,EME,,,,,05/04 GB4VR,IO57,,,Expedition,,,01/90 GB4XS,IO78HA,,,Expedition,,50: IC746 100W 4el - TR9130 - 70: 150W 6el - 144: 2x14el 400W,08/00 GD0WKX,IO74SD,,,Expedition,,,10/95 GD4IOM,IO74QD,EME,,,,50: 400W 4x7el - 144: 400W 8x9el - 432: 400W 4x20el,08/01 GD4UFD,IO74,,,Expedition,,,01/88 GD7HEJ,IO74SD,,,,,,10/95 GI0OTC,IO65QE,,,,,,12/00 GI1JUS,IO74,,,,,,01/93 GI4KSO,IO64XK,,,,,70: 100W 3el - 144: 300W 8el,07/03 GI4SNA,IO64XM,EME,,,,144: 4x 12el QRO,02/08 GI6ATZ,IO74AJ,,,,,144: IC251E Mutek FE 300W 13el,12/06 GI7UGV,IO74DO,,,= GM7UGV,,FT847 144: 200W 8el,04/06 GI8YDZ,IO65,,,,,,01/88 GJ0JSY,IN89XE,,,,,,12/01 GJ0RUZ,IN89,EME,,Expedition,,,03/02 GJ4ICD,IN89WE,,,,,,10/98 GM0BQM,IO85CE,,,,,144: 200W 2x17el,03/02 GM0EWX,IO67UL,,,,,144: 12el 8874,05/02 GM0GMD,IO86AE,,,,,,07/00 GM0HUO,IO86OI,,,,,FT736r 50: 100W 3el - 144: 180W 12el,08/99 GM0JOL,IO78VM,,,,,,01/93 GM0ONN,IO87,EME,,,,,03/06 GM0WDD,IO85JV,,,BECOMING ACTIVE 07/07 -> 6M HOME 2M PORTABLE,,6m - IC756pro2 2m FT-847,05/07 GM0WDF,IO75PW,,,,,144:TS940 Trsv IC271E 400W 17el,09/01 GM3POI,IO88OW,,,,,,10/01 GM3SBC,IO85IX,EME,,,,144: 100W 11el,11/05 GM3SEK,IO74SR,,,,,,05/07 GM3UCN,IO85RV,,,,,,04/04 GM4AFF,IO86ST,,,,,144: 14el Tonna EME-Pwr MGF1302,08/03 GM4CXM,IO75TW,EME,,,,144: FT736R 3cx800A7 2x9el @ 23m 432: 120w 2x23el Wimo @ 21m 23cm: 150w 4x44el @ 11m,01/09 GM4ILS,IO87IP,,,,,,07/01 GM4ISM,IO85AR,EME,,,,FT847,07/05 GM4JJJ,IO86GB,EME,,,,144: 4x3wl XPOL 8877,05/01 GM4OGM,IO85,,,,,,01/88 GM4SIV,IO57RT,,,Expedition,,,07/06 GM4VVX,IO78TA,,,,,50: TR751E 5W Dipol,04/06 GM4WJA,IO87MN,EME,,,,,03/07 GM4YXI,IO87WJ,,,,,,04/00 GM5RP,IO66,,,QSL via G3SEK,,,08/01 GM6HGF,IO75QP,,,MM0XPG,,,05/08 GM6VIU,IO85,,,,,144: TR851E 25W 24el,11/99 GM6VXB,IO97AQ,EME,,,,6M 400W-7EL 4M 100W-6EL 2M 250W-11EL 70CM 50W-2X19EL 23CM 50W-2X55EL 12CM 10W-80CM DISH 9CM 15W-80CM DISH 3CM 10W-80CM DISH,04/07 GM7ASN,IO78TA,,,,,,06/95 GM7LVJ,IO85,,,,,,01/94 GM8OEG,IO86LL,,,,,,04/06 GU7DHI,IN89RL,,,,,,12/01 GU8FBO,IN89QK,,,,,144: 10el 50W,10/06 GW0KZG,IO82,,,,,,12/98 GW0PZT,IO72PT,,,,,,01/93 GW0VWD,IO81EM,,,,,,07/96 GW3HWR,IO71XN,,,,,FT847 IC910 + Amps - 144: 350W 9el Preamp,08/05 GW3LEW,IO71PS,,,,,,04/03 GW3XYW,IO71XR,EME,,,,144: 4x 10el 400W,01/06 GW4DGU,IO71SV,EME,,,,144: 15.6dBi yagi 750W SSPA 0.4dB HEMT 432: 2x yagi (19.5dBi) 550W SSPA 0.4dB HEMT,05/08 GW4HDF,IO81JO,,,,,,04/02 GW4LXO,IO81,,,,,,08/98 GW4UWR,IO81LP,,,,,,08/99 GW4VEQ,IO73SG,,,,,,10/02 GW4VVX,IO81JP,,,,,,06/95 GW4ZQV,IO81LQ,,,,,,08/97 GW6TEO,IO71LP,,,,,TS-2000. 50mhz-250W 70mhz-100W 144mhz-300W 432mhz-50W.,05/08 GW6YAY,IO81LM,,,EX G6YAY,,144: IC821H 300Watts 17ele CC,08/03 GW7SMV,IO81LN,EME,,,,IC910H 144: 12eleM2 432: 19ele tonna 50: ICOM 746 6ele 1wl yagi,06/08 GW8ASA,IO81EM,,,,,FT847 IC706 Linears - 144: 220W 9el,02/04 GW8ASD,IO83LB,,,,,Icom IC756 ProIII with Acom 1000 and 5ele for 6m.Icom IC756 ProII with transverter 100w 4ele 4m. Icom IC910X with linear for 23cm,06/07 GW8IZR,IO73TI,EME,,EX G8IZR,,144: 2x 9el GS35 .23 dbrx - 432: 4x21Y 350W 1dbrx - 1296: 8W 2m dish,04/06 GW8KCY,IO71VS,,,,,,04/08 GW8OQV,IO81QR,,,,,144: FT225-Mutek 2x4CX250b 4x10el DL6WU or 17el,07/98 GX0SAS,IO84OQ,,,,,Kenwood TS-2000,10/07 GX4NOK,IO93FR,,,,,,01/03 GX4WWR,IO91LL,,,,,,01/03 H40HP,RH29,EME,,EXPEDITION,,144: 18el 1500W Preamp,03/09 H44HP,QI90,EME,,EXPEDITION,,144: 18el 1500W Preamp,03/09 H44HP/RI00,RI00,EME,,EXPEDITION,,144: 18el 1500W Preamp,03/09 H44HP/RI01,RI01,EME,,EXPEDITION,,144: 18el 1500W Preamp,03/09 H44MS,QI90XN,EME,,= DL2GAC,,144: 18el M2 1 KW,03/08 HA0DU,KN07VN,EME,,,,,09/07 HA0HO,KN07SU,EME,,,,144: 6x 10el 3.5KW,12/06 HA0MS,KN17,,,,,,08/08 HA1BC,JN87PU,,,= DL1MAJ,,144: 3CX800A7 2x17el,12/00 HA1FV,JN87JJ,,,HG1KYY,,FT-847 2m: 2x12el 300w 6m: 5el 100w,05/08 HA1KVM,JN87AL,,,,,,01/03 HA1KYA,JN87HF,,,,,144: 8x13el DL6WU 200W,11/98 HA1VHF,JN87GF,EME,,ex HG1W,,,10/98 HA1W,JN87GF,,,,,,01/03 HA1YA,JN87GF,EME,,ex HG1YA,,144: 8x13el & 8x14el - 432: 16x32el - 23+13:1.5m dish 6+3: 90cm dish,06/05 HA2A,JN87,,,,,,12/99 HA2NP,JN97EO,,,,,,05/01 HA2RD,JN87WB,,,,,,10/08 HA2RG,JN86RT,EME,,,,144: FT102 4x 17el DJ9BV 2KW MGF1302,10/06 HA2RX,JN87,,,,,,12/98 HA2SX,JN87VC,,,,,144: IC821H 600Watts 11ele,12/98 HA2VH,JN87WG,,,,,,03/03 HA3DXC,JN96JO,,,,,144: 5.5WL 2x8877,07/96 HA3UU,JN96JO,,,,,144: TS711A GS35B 5.5wl 4wl 2wl MGF1100 - 432: FT736R ELH730 3CX800A7 4x10wl MGF1100,09/04 HA4A,JN96JO,,,ex HA4XT,,144: TS711A GS35B 5.5wl 4wl 2wl MGF1100 - 432: FT736R ELH730 3CX800A7 4x10wl MGF1100,05/04 HA4KYB,JN97DI,,,ex HG4KYB,,,01/94 HA4WQ,JN97IF,,,,,,06/03 HA4XG,JN86GS,EME,,,,144: FT726R 60W 10el Yagi,12/08 HA4XT,JN96JO,,,,,,01/05 HA5BSW,JN97JD,,,ex HA3GK,,144: IC706MKII KNW TR751 300w 2x 13ele yagi,07/05 HA5CAR,JN97,,,,,,07/01 HA5CBA,JN97OM,,,,,144: HF trsv+conv,04/04 HA5CRQ,JN97,,,,,,08/02 HA5CRX,JN97KP,EME,,,,144: IC-7000 GS31 SP2000 3wl DJ9BV-BVO2,12/07 HA5CW,JN97PM,,,EX HG5CW,,144: FT225RD/Mutech B1016 GS35B 800W 10el MGF1302,11/07 HA5IW,JN97LN,,,,,,08/01 HA5KDQ,JN97LN,EME,,,,,07/03 HA5LV,JN97ML,,,,,144: FT-897 + 300W + 3wl DJ9BV,05/08 HA5OO,JN97OM,,,,,144: 100w 3wl DJ9BV 50: 5W FD4 HF:100W FD4 HB9CV for 28 MHz,05/07 HA5OV,JN97NJ,EME,,,,144: FT920+Trnv GS35 1-5KW 4X10 ele. BVO2 MGF1302,06/07 HA5PT,JN97MK,,,,,FT847,09/08 HA5RL,JN97PL,,,,,,12/04 HA5TS,JN97LL,,,,,144: IC-706MKII 8ele,07/04 HA5UK,JN97OM,,,HA9TE HA5CTA,,144: 300W 10el 3wl,01/08 HA6NA,JN98VC,,,,,144: 250W F9FT,08/01 HA6NN,JN98VC,,,,,FT-847 6 ele YU7EF yagi for 2 m 7 ele YU7EF for 70 cm 3 ele DK7ZB for 6 m,01/08 HA6NQ,JN98WA,,,,,144: 700Watts CF300 DJ9BV 3.2wl,01/05 HA6NY,JN98WC,,,,,144: 1000W MHP145 17el full el - 432: 40W LNA435 18el full el - 1296: 10W 55el F9FT,12/06 HA6OQ,JN98JC,,,ex HG6OQ,,,08/98 HA6VV,JN97WS,,,,,,06/09 HA6VV/P,JN97WV,,,,,,06/09 HA6ZB,JN97,,,,,,01/05 HA6ZV,JN97WH,,,,,,09/04 HA7JJS,JN97OG,,,,,,10/95 HA7KPL,JN97OG,,,ex HG7KPL,,,12/95 HA7MB,KN07BM,,,,,IC-706 Ft200 IC910h Ant.2m-8el Quagi 6m-Moxon HF-Dipole,10/07 HA7NK,KN07CM,,,,,144: 200W 4x15el 9BV Preamp,06/00 HA7PL,JN97OG,,,ex HG7PL,,,11/06 HA7RF,JN97NP,,,,,IC 735 +conv,04/03 HA7UL,JN97KK,,,,,Yaesu FT847 W3DZZ,05/08 HA8AR,KN06MQ,,,,,TS790A FT-897D + PA GI7B 3wl DK7ZB,12/07 HA8CE,KN06EN,EME,,ex HG8CE,,144: GS35b 400W 16 el. DJ9BV CF300,12/05 HA8CS,KN06BD,,,,,,01/03 HA8ET,KN06,EME,,ex HG8ET,,,01/93 HA8KCP,KN08DQ,,,,,,01/03 HA8V,KN06HT,EME,,,,10w 3el -- 900w 44el -- 75w 92el -- 25w 76el -- 50w 1.2 dish -- 200mw 1.2 dish,10/06 HA8VF,JN96UW,,,ex HG8VF,,,10/97 HA9KRL,KN07GT,,,,,,04/05 HA9MCQ,KN08JC,,,,,144: 150W 14el CF300,06/98 HA9MDP,KN08DF,,,EX HG9MDP,,FT-736 FT-897,04/07 HA9OZD,KN08DF,,,ex HG9OZD,,144: TR9130 150W 14el CF300,04/06 HA9RC,KN08NB,,,ex HG9RC,,,01/94 HAM3DXC,JN96JO,,,SpecialCall,,144: 5.5WL 2x8877,07/96 HAM3UU,JN96JO,,,SpecialCall,,144: 5.5WL 2x8877,07/96 HAM7JJS,JN97OG,,,SpecialCall,,,07/96 HAM7KPL,JN97OG,,,SpecialCall,,,07/96 HAM7PL,JN97OG,,,SpecialCall,,,07/96 HAM8CE,KN06EN,EME,,SpecialCall,,,11/96 HB2FAP,JN47CE,,,,,144: 16el 1KW,12/00 HB5OK,JN46LA,,,SpecialCall,,144: FT847 8877 17el MGF 1302,12/98 HB9ADJ,JN36LH,EME,,,,50: FT-897D + Acom 1000 ant. 3 el 144: FT-857D + PA 200W ant. 4 x 11 Flexa AzEl,04/07 HB9AOF,JN36LM,,,,,,01/97 HB9BBD,JN47EE,,,,,,01/03 HB9BIN,JN37XH,,,HB2BIN HE7BIN,,IC-910/IC-7800,12/08 HB9BQU,JN37VD,,,,,50: 10W - 144: 200W 17el,08/99 HB9BZA,JN36BE,,,,,50: FT-847 V-2000 - 144: 3CX800 11Y - 432: 2*8874 19Y,01/04 HB9CVD,JN36CD,EME,,,,,01/94 HB9CYN,JN36RX,,,,,144: 30W 7el 10db Gaas,01/99 HB9DBM,JN47BE,,,qrv at HB9Q,,,03/99 HB9DDS,JN47IK,,,,,,05/02 HB9DFG,JN37SM,EME,,,,144: FT100 - 500W - 7el - MGF1302,08/08 HB9DKM,JN37SL,EME,,,,50: 3el vertical - 144: 150W 2x11el Flexa MGF1302 - 432: 9el X-Quad 100W CF300,03/02 HB9DLU,JN45LU,,,,,,01/03 HB9DSU,JN36CG,EME,,ex IK2BHX K2BHX,,,07/05 HB9DUR,JN46ME,EME,,EX HB9SUL,,NOT QRV FROM HOME,09/07 HB9EFK,JN46JE,EME,,ALSO CT2JTY AND EX HE9ZLE HB3YIT,,TS-2000X 12el DK7ZB + MGF 1302 / HM GS-31B PA,06/08 HB9FAP,JN47PH,,,,,144: IC7400 2x18 el Yagi 1KW,07/08 HB9FMN,JN47CI,,,,,TS-940s TEN-TEC 2m & 6m X-verter FT-897D FT-817ND,08/08 HB9HLI,JN37JB,EME,,,,,03/07 HB9HLM,JN36KW,EME,,= CN2DX - EX HB9SAX,,,06/08 HB9LU,JN46EW,,,,,,06/96 HB9MM,JN36HP,,,,,,08/02 HB9MS,JN47PH,EME,,,,144: 8877,12/99 HB9OCW,JN46LA,EME,,,,50: 4el 10W - 144: 4x13B2 1KW - 432: 2x29el 1KW,10/99 HB9PJT,JN47FG,,,,,,05/02 HB9Q,JN47CG,EME,,HB9PMD HB9CRQ,,50: 10W 11el - 144: 15mPb & 8x19el 1KW - 432: 15mPb 1KW - 1296: 15mPb 200W,04/07 HB9QQ,JN47,EME,,,,50: 2x 5el 144: 17el QRO,10/05 HB9RUZ,JN47JM,,,,,,12/96 HB9SJV,JN36BK,,,,,50MHz: 6 el & 2x5/8 vert. 144MHz: 100W 11el,08/07 HB9SLO,JN36LT,,,,,144: FT736r 1KW 18el LY,04/03 HB9SNR,JN36MQ,,,,,144: FT736r 800W 12el M2,11/01 HB9STI,JN47GJ,,,,,,01/93 HB9STY,JN36IP,,,,,FT690R 50: 150W vert & 5el - 144: 300W 2x15el,07/98 HB9SUL,JN46LA,,,,,,01/03 HB9SV,JN45LV,EME,,,,,08/00 HB9WAH,JN47FD,,,,,50: 10W - 144: 2x 11El 1kW MGF1302 - 432: 2x 18El 1kW MGF1302 - 1296: 4x 24El 10W MGF1302,04/04 HB9ZGA,JN47CH,,,,,,10/07 HC5K,FI07NB,,,,,,01/03 HF75PZK,JO93AC,EME,,SpecialCall,,,01/05 HG1DLZ,JN87HF,,,,,144: 8x13el 200W MGF1402,12/98 HG1ZR,JN86KU,,,HA1ZR (1965-1967),,FT 817,01/09 HG2EAD,JN97,,,,,,01/93 HG2KNP,JN97,,,,,,01/93 HG2NP,JN97,,,,,,01/95 HG3DXC,JN96JO,,,,,144: 5.5WL 2x8877,08/98 HG3O,JN96JO,,,,,144: 5.5WL 2x8877,08/98 HG4XG,JN96,,,,,,01/93 HG5CYT,JN97,,,,,144: FT290r 50W 5el - 432: 25W 11el,01/01 HG5PT,JN97MT,,,,,,01/93 HG6KNB,JN98,,,,,,01/93 HG6KVB,KN07,,,,,,01/93 HG6NQ,JN98WA,,,,,,01/95 HG7AJ,JN97,,,,,,01/93 HG7JAL,JN97KK,,,,,,07/02 HG7JUV,KN07SP,,,,,,05/09 HG7P,JN97KW,,,ex HG7B/p,,,04/97 HG7WJ,JN97MP,,,,,,01/93 HG9SM,KN08HF,,,,,,07/04 HG9VHF,KN08EB,,,,,144: TR9130 150W 14el CF300,07/00 HGM3DXC,JN96JO,,,SpecialCall,,144: 5.5WL 2x8877,07/96 HGM3O,JN96JO,,,SpecialCall,,144: 5.5WL 2x8877,07/96 HI3TEJ,FK49EL,EME,,QSL via ON4IQ,,144: 17el 500W,06/05 HI8ROX,FK58AL,,,,,,01/03 HK1DX,FJ29EM,EME,,,,144: 200W 17el - 432: 150W 8wl,11/06 HL4GHT,PM35NU,EME,,,,144: 4x 13el 100W,03/08 HL5XF,PM45OH,,,,,,01/03 HP3XUG,EJ88SJ,EME,,EX KG6UH/DU1,,144: 4x 17el 1KW,01/00 HQ8R,EK87,EME,,EXPEDITION,,,03/08 HR9BFS,EK66UE,EME,,,,,12/07 HS0ZIL,OK16bq,EME,,= DL2LAH,,144: QRP 2x10ele DK7ZB,02/09 HS2CRU,OK03LE,,,,,,01/03 HV0A,JN61FV,,,,,,01/05 HV4NAC,JN61,,,Expedition,,,06/99 I0EMV,JN62BK,,,,,,01/92 I0FOV,JN62,EME,,,,,11/06 I0NLK,JN62HB,,,,,FT736 200W 11el F9FT,03/06 I0UGB,JN62BO,EME,,,,,11/06 I0UZF,JN63,,,,,,06/00 I1ANP,JN44VC,EME,,,,IC735+L4B - 144: TS700 4x4cx250b MGF1302 4x16el DJ9BV - 432: IC402+lin 26db horn,03/01 I1BSN,JN34,,,,,,01/93 I1CPM,JN34VI,,,,,,01/03 I1CPN,JN34VH,,,,,,02/04 I1DMP,JN34XU,,,,,144: 20 el LYagi 17 dBi RX 430K TX 56dbm,03/08 I1JTQ,JN35UB,EME,,,,144: 2x18el 900W MGF1801,08/01 I1KTC,JN45HK,EME,,,,,11/96 I1NDP,JN45AL,EME,,,,,10/08 I1PIK,JN44TG,EME,,,,FT736R 50: 2x5el- 144: 14+14xpol-el Preamp - 432: 32el HL130 - 1296: 35el,05/07 I1PSC,JN44MJ,,,,,FT-225rd + 200W-20eI - IC475h-25el - Trsv DB6NT 1296-55el,03/09 I1TEX,JN35SA,EME,,,,144: 13el 300W,03/08 I1TXD,JN45,,,,,,01/93 I2FAK,JN45OB,EME,,,,144: 24x19el LLY YL1056,12/04 I2FHW,JN45,,,,,,01/93 I2KBD,JN45PL,EME,,,,,04/07 I2ODL,JN45KL,EME,,,,144: 4x17el 8877 - 432: 8x21el 3CX800A7 - 1296: 2m dish 2x7289,09/00 I2OKW,JN45OO,,,,,,08/02 I2PHD,JN45SL,EME,,,,,12/00 I2RV,JN45PL,EME,,,,144: 4x 15el KLM,05/06 I2SVA,JN45,,,,,,01/02 I2UZV,JN45,,,,,,08/02 I3DLI,JN65,EME,,,,6x19el 8877 CF379,11/00 I3LDP,JN55LK,EME,,,,FT-736R + 144 Ampl with 2x4CX250B,04/08 I3LDS,JN55SR,,,,,,01/90 I3LGP,JN55WJ,,,,,144: IC746 100W 17el BF960,01/04 I3LLH,JN65BM,,,,,,04/00 I3MEK,JN55SJ,EME,,,,,08/07 I4LCK,JN54RK,,,,,432: FT736 3CX800 Preamp 4x25el LY @ 950m asl (portable: /4 JN54PD),02/08 I4RHP,JN54QL,,,,,144: TS711+PA500W 17EL,07/04 I4TTZ,JN54VJ,,,,,,01/03 I4XCC,JN63GV,EME,,,,144: 4x17el F9FT 3CX800A7 preamp 1db,06/09 I4YNO,JN54KP,,,,,144: FT-736R MuTek MGF1302 3CX800 20el Shark,08/03 I5CTE,JN53XG,EME,,,,,02/01 I5MPK,JN53,EME,,,,,01/94 I5MXX,JN53JU,,,,,144: 4x4el & 4x9el,10/00 I5MZY,JN53OT,EME,,,,144: 800W 4x10el BF998,10/04 I5PPD,JN53PS,EME,,,,10368: 3m Dish 20W,10/00 I5PPE,JN53NS,,,,,,01/03 I5TWK,JN53FU,EME,,EX I8TWK,,,02/08 I5WBE,JN53JR,EME,,,,144: FT736R 4x17el 8877 MGF1302 432: Yeasu FT 847 GS35b 4x26el 1296: LT23S 4x35 el 100W,03/08 I5YDI,JN54BB,EME,,,,144: FT736 3cx800 2x17el or 4x15el,04/02 I6BQI,JN72AK,EME,,,,144: 4x16jxx TS2000 8877PA,03/06 I6PNN,JN72GL,EME,,,,,01/94 I6QGA,JN63,EME,,,,,01/94 I6QON,JN63RL,,,,,,01/94 I6WJB,JN72CK,EME,,,,144: 4x 16el 1 Kw MGF1302,05/05 I6YPK,JN72,,,,,,01/95 I7CSB,JN71QQ,,,I2CSB,,TS790-FT847-IC756PROIII,05/08 I7FNW,JN81GD,EME,,,,,01/94 I7HCB,JN71VT,,,,,144: 150W 13el,12/01 I7RNI,JN80,,,,,,01/93 I8JIT,JN71HN,,,,,,08/08 I8KPV,JN70KO,EME,,,,,12/06 I8MPO,JN70FP,,,,,IC746PRO Henry Radio 2002A 13el yagi Landwehr 145MAS 186m asl,09/07 I8REK,JN70,,,SilentKey,,,01/93 I8TUS,JM89DE,,,,,,10/04 I8UZA,JN70AU,,,,,144: FT847 150W 10el BVO3wl,09/02 I8WES,JN70,,,,,,01/93 IB0CW,JN60RS,,,EXPEDITION,,144: 250W 12 el Yagi,06/08 IC8CQF,JN70CN,,,,,50: 100W 4el Yagi - 144: 300W 10el 3wl 9BV,08/05 IC8EGJ,JN70CN,,,,,,01/89 IC8FAX,JN70CN,,,ex IW8BZN,,144: FT736r 300W 20el,03/04 IC8TEM,JN70CN,EME,,,,TS2000 - TS680 - HF VHF - 50mhz 2EL DK7ZB - 144mhz 20el shark - hf vertical gp,07/07 IH9YMC,JM56XT,,,,,,08/04 II0W,JN51,,,QSL via IW0BET,,,06/03 IK0FEC,JN63,,,,,,01/93 IK0FIY,JN61GW,EME,,,,FT736r 144: 6el 800W MGF1302 - 432: 33el 600W MGF1302,01/00 IK0FTA,JN61GV,,,,,50: TS680 GaasFet 6el,05/02 IK0IXI,JN52VB,,,,,Homemade xvtrs for 6m & 4m,06/08 IK0IXO,JN52WA,EME,,,,,01/93 IK0OKY,JN61ES,,,,,50: loop quad fractal 100W - 144: 50 w jpole,06/09 IK0OZK,JN52VC,EME,,,,350W- 2x17el- Preamp,12/99 IK0PCJ,JN63CL,,,,,,01/03 IK0RNL,JN61GW,,,,,,01/03 IK0SMG,JN61ER,EME,,,,,07/06 IK0SOI,JN62HN,,,,,,06/02 IK0VKL,JN61GV,,,IW0DRT,,,04/07 IK0VMO,JN62LH,EME,,,,144: 4x 9el 500W,10/06 IK0WGF,JN52VC,,,EX IW0DAL,,144: 2x11el 200W,04/07 IK0XIH,JN61KM,EME,,IW0CQX,,Kenwood TS-2000,06/09 IK1DPA,JN33VT,,,,,YAESU FT-897D - ant: for 6m 5el F9FT - HF: HyGain DX-88,09/08 IK1EFM,JN44JK,,,,,,01/93 IK1EGC,JN35UF,,,,,50: FT650 3-500z 6el 1wl- 144: IC275 16el 4.4wl 4cx250 MGF1302,07/02 IK1FJI,JN44LL,EME,,,,144: 4x 12el M2 GU78b LNA CA144T PHEMT preamp,08/08 IK1GYZ,JN35TB,,,,,,11/95 IK1HJQ,JN33,,,,,,01/90 IK1HWG,JN44DS,EME,,,,,01/94 IK1JXY,JN44WC,EME,,,,,08/04 IK1LBW,JN44VC,,,,,,08/98 IK1LGV,JN44JK,,,,,144: GS31 MGF1302 15el QD,08/00 IK1LUT,JN34TW,,,,,,01/93 IK1MTZ,JN35UB,EME,,,,,08/01 IK1PAG,JN35SB,,,,,144: IC275h 1KW 2x17el F9FT MGF1302,02/08 IK1RQT,JN34VP,,,,,,12/01 IK1SLI,JN35UI,,,,,,01/93 IK1SPR,JN34TQ,,,,,144: Braun SE400 500W MGF1302 2x 13el,08/05 IK1UWL,JN33VT,EME,,,,144: 4x 14XPol 700W (1400W in circular pol.),01/08 IK1YWB,JN34UX,,,,,,04/02 IK2CDI,JN55GN,EME,,,,144: IC275H 3CX800A7 MGF1302 4x18el,01/00 IK2CFR,JN54,,,,,,03/01 IK2DDR,JN55GN,EME,,,,144: IC275H 8877 MGF1302 4x19el LY,01/06 IK2EAD,JN55EJ,EME,,,,,01/94 IK2EAE,JN45LL,,,,,144: FT480r 100W 17el,11/01 IK2FIL,JN45OM,,,,,144: IC275H 9 el. F9FT + SP2000 50W,11/04 IK2GSO,JN45NP,EME,,ex K2GSO,,IC7400 FT857 50: 1KW 10el 144: 14el DJ9BV,03/05 IK2JUB,JN45ON,,,,,,03/05 IK2LHP,JN45SP,,,,,144: TS790 200W 15el - 432: 100W 31el,07/01 IK2MMB,JN45,EME,,,,,02/05 IK2OFO,JN45KL,EME,,,,144: 4x17el 8877 - 432: 8x21el 3CX800A7 - 1296: 2m dish 2x7289,09/00 IK2RTI,JN55AD,,,,,,01/03 IK2TPX,JN45LL,EME,,,,,01/93 IK2XRL,JN45NR,,,,,144: FT736r 150W 17el Preamp,01/01 IK2YXK,JN45OP,,,,,144: IC275h 4CX250 12elM2 DSP59,05/02 IK3MAC,JN55SH,EME,,,,144: 1100W 24 x 23el LLY + 24x 10el yagi Vert,09/05 IK3TPP,JN65EP,,,,,,12/04 IK3VZO,JN55XA,,,,,144: 16el 200W,02/98 IK4DCO,JN64GB,EME,,,,,01/94 IK4DCX,JN64GA,EME,,,,144: 4x20el 2.5KW,04/01 IK4DRY,JN64BL,,,,,,04/01 IK4FMT,JN54WG,,,,,144: TS790 2M5WL 4CX250 MGF1302 20dB,01/00 IK4JOC,JN54WN,EME,,,,,01/94 IK4NMF,JN54SM,EME,,,,,01/94 IK4PLU,JN64FC,,,EX IW4ASW,,,10/07 IK4PMB,JN54MM,EME,,IW4CET,,50: X-Verter 10W Dipole - 70: OZ X-VERTER 3el DK7ZB - 144: FT225RD MUTEK or TS850+X-Verter 8877 11el F9FT 14XP WiMo,10/07 IK4WLV,JN54XK,EME,,,,,02/98 IK5AMB,JN53FU,,,,,,11/98 IK5JWQ,JN52NS,EME,,,,,08/98 IK5OEA,JN53PG,,,,,,12/04 IK5OIY,JN52NT,,,,,,03/96 IK5QLO,JN53FU,,,,,,04/08 IK5WJD,JN53PR,EME,,,,432: 4 x 26 elements Yagi hor Pol. - LNA 0.25 dB NF - 8877 1 KW PA - 1296: Septum Feed Cavity LNA 0.35 dB NF 3 meters solid Dish,07/06 IK5ZUI,JN53RD,,,,,144: TS700G 11el 250W BF981,07/97 IK6EIW,JN63RJ,EME,,,,,10/95 IK6FHF,JN63,,,,,,01/93 IK6IHM,JN72,,,,,,01/95 IK6MLI,JN62UT,,,,,144: FT736 4x11el KLM Booster 8930,07/99 IK6MMJ,JN63RL,,,,,,10/95 IK6WDY,JN62XK,,,,,kenwood ts 790e ant. 2el quad,05/08 IK7EZN,JN90DG,EME,,,,144: 4x 16el JXX 1 KW,04/05 IK7UXY,JN90DC,EME,,IW7BPW,,IC-756PRO2/Xverter h.m./16jxx/8877,06/09 IK7XLW,JN80FT,EME,,,,144: 16JXX 250W,03/06 IK8BIZ,JN70GR,,,,,,08/08 IK8ETN,JM89CH,,,,,144: ic275e 4x150 17f9ft,01/04 IK8IUQ,JN70MM,,,,,,01/03 IK8MKK,JN71DC,,,,,,01/95 IK8TOY,JM89CH,,,,,,08/04 IK8XLD,JN70VP,EME,,,,144: 11el GaasFet,09/00 IK8YOQ,JN70GR,,,,,,04/09 IK0BZY,JN61GW,,,,,07/09 IK0BZY/MM,JN50AX,,,,,07/09 IK0BZY/P,JN62GA,,,,,07/09 IN3AGI,JN56,,,,,,01/03 IN3ATM,JN56NK,,,,,,01/02 IN3DOV,JN65WS,,,,,,01/93 IN3HER,JN56,EME,,,,,01/94 IN3KLQ,JN56RG,EME,,,,144: 180W 17el,04/00 IQ2CJ,JN45ON,,,,,IC 275H - GS35 - 2 x 13 DJ9BV,03/05 IQ3AZ,JN65QQ,EME,,,,144: 4x 8el 800W,10/08 IQ4DF,JN45,EME,,,,,10/05 IS0/DF2ZC,JN40TJ,EME,,EXPEDITION,,144: TS2000 2x 9 ele M2 2x GU74b by LZ2US,03/09 IS0/DH7FB,JN40TJ,EME,,EXPEDITION,,144: TS2000 2x 9 ele M2 2x GU74b by LZ2US,03/09 IS0AGY,JM49OF,,,,,144: IC211E 4CX350b 17el Gaas,07/05 IS0BDB,JN40GT,,,,,,05/04 IS0CAK,JM49,,,,,,01/04 IS0CBC,JM49NH,,,IW0ULG,,,04/07 IS0EBO,JN40GR,EME,,ex IW0UEI,,144: Icom gs35 3wl ant,03/06 IS0GQX,JM49OH,,,,,,05/05 IS0SWW,JN40GR,,,,,,02/04 IT9BLB,JM68QE,,,ex IW9AJZ,,144: 2x15el 3CX800 MGF1302,08/06 IT9CHU,JM76IV,EME,,,,,01/09 IT9CJC,JM76IW,EME,,,,IC706MKIIG 120W 10EL DK7ZB - EME SETUP 4X10 8877 MGF4919G,06/09 IT9GSF,JM67SS,,,,,,01/94 IT9GSV,JM77LH,,,,,,04/01 IT9IPQ,JM78SG,EME,,,,ic756pro ic275 ic475 transv,04/02 IT9LCY,JM77NO,,,,,,01/93 IT9TYR,JM78QF,EME,,IW9CER,,IC 756 pro II - Knw TS790 E - IC 706 MKII,04/09 IV3BBR,JN65TW,,,,,,04/07 IV3CYT,JN65TW,,,,,,06/09 IV3DXW,JN65QQ,,,,,144: 4CX250 - 16JXX2 4.5WL,08/03 IV3GBO,JN66OA,EME,,,,,01/02 IV3GTH,JN65RU,EME,,,,50: FT897 5/8 vertical - 144 MHz: FT897 160W 16 el F9FT,06/07 IV3HWT,JN65ST,EME,,,,144: FT101zd Trvt 8877 4x18el 4x20el,08/04 IV3KTY,JN65QQ,,,,,,04/07 IV3MPI,JN65SV,,,EX IW3QMB,,IC746 IC271E Mutek FT736R PHEMT144 PHEMT: 50: 2x 6el 9BV 500W - 144: 4x12el 6WU 500W - 432: 4x21el F9FT,03/06 IV3NDC,JN65RV,,,,,144: 100W BF981 2x15el 3.3wl,04/07 IV3SIX,JN65RU,,,EX IW3QYG IW3RI,,50: 6el/HyGain 144: 4x17el 432: 4x21el,05/07 IV3VFP,JN66HD,EME,,,,,01/93 IV3ZCX,JN65QS,EME,,,,144: Icom 275 PA 600Watts MGF1302 4x24el,01/90 IW0AKA,JN61FS,,,,,,01/90 IW0AYO,JN61IU,,,,,144: 16el,07/96 IW0BTS,JN61GU,,,,,,01/88 IW0BZD,JN61FS,,,,,,10/07 IW0CUT,JN61TP,EME,,,,,01/93 IW0CVK,JN61GV,,,,,,01/05 IW0DJB,JN61,,,,,,04/02 IW0DVG,JN61KK,,,,,,01/93 IW0FFK,JN61FS,,,,,,04/07 IW0GDC,JN61HX,,,,,,10/98 IW0HLE,JN61WK,,,,,,08/08 IW0QNX,JN62,,,,,,01/97 IW0QO,JN63EC,,,,,,01/93 IW0RBS,JN63FD,,,,,,01/93 IW0RLC,JN63FD,,,,,,06/00 IW1ARB,JN44CV,EME,,,,144: 4x4.4Wl lt2s 3cx1500,03/01 IW1AZJ,JN35UB,,,,,144: 200W 3.8wl DJ9BV,06/00 IW1BCV,JN44FS,EME,,,,144: IC275H 2x18el MGF1302 8877,08/08 IW1CGB,JN35VG,EME,,,,50: 3el PA - 144: 4x17el 2x4cx250b MGF1302,06/97 IW1CHX,JN35TH,,,,,144: C58 13el DJ9BV MGF1302 170W,04/02 IW1DIM,JN35TC,,,,,,07/01 IW1DJS,JN35SA,,,,,,08/01 IW1FTY,JN35UA,,,,,,01/03 IW1GLM,JN34PT,,,,,,08/08 IW2BNA,JN45ON,,,,,144: IC275H 3CX800 4x11el - 432: IC475H 8930 23ele - 1296: IC1275 2C39 4x23ele,01/04 IW2BSQ,JN45UJ,,,,,144: IC746 !7el,04/03 IW2BZY,JN45NN,,,,,144: 500Watts 2x12ele Flexa,08/01 IW2DAL,JN45NN,,,,,144: TenTec OII - TR144H +40 - 4x19LLY 4CX1000a,06/08 IW2DMN,JN45KL,,,,,144: 100W 15el,10/02 IW2DUA,JN45LL,EME,,,,,01/93 IW2FZR,JN45WE,EME,,,,144: 9el 500W,06/09 IW2FZR/P,JN56AE,EME,,JN56BE FOR EME,,1296: 4 mt dish VE4MA th308 400 W at feed/ 144 9el 500W,06/09 IW2HAJ,JN45NO,,,,,50: IC706 6el - 144: IC 275H + GS35B 2X13 EL Preamp,09/08 IW2HUS,JN45NO,,,,,,04/02 IW2HWQ,JN55GK,,,,,144: FT736r 80W 21el,10/96 IW2LLA,JN55AM,,,,,144: 2x17el 100W,08/96 IW2MYV,JN45JN,,,,,144: TS711E 4CX250 GaAs 4x7el + elv.,01/02 IW2NEF,JN46QD,,,,,144: FT847 12elXY,11/02 IW2NOR,JN45ON,,,,,ICOM IC275H KENWOOD TS 2000 144: 100W 2x17el F9FT,06/04 IW3BKQ,JN56NH,,,,,,07/02 IW3HRT,JN55TG,,,,,,08/08 IW3QTG,JN65PT,,,,,144: IC746 2x 17FT,08/04 IW3SGT,JN65VP,,,,,,05/07 IW3SNU,JN65OT,,,,,,11/04 IW4ADT,JN54,EME,,,,,01/94 IW4AR,JN64FD,,,,,,01/03 IW4ARD,JN64FD,EME,,,,144: IC756PRO3 TXV-DB6NT 3CPX1500A7 4x8XP pre PHEMT full elevation 432: TS-2000X GS23B 4x18el pre PHEMT full elevation,01/09 IW4AZY,JN54ML,,,,,IC275 ft817 ic706 hm xverter 2 x 20 yagi many other depending location,04/07 IW4BET,JN54QL,,,,,,08/02 IW4BLG,JN54VF,EME,,,,144: 4x10el k5gw 900w,01/04 IW4BTJ,JN54QL,,,,,,01/03 IW4CB,JN54XK,,,,,,02/01 IW4DJE,JN64,,,,,,01/95 IW4DLA,JN64CE,,,,,,01/94 IW4DMH,JN64CJ,,,,,,11/98 IW4DQY,JN64AG,,,,,,03/04 IW4EHV,JN64AE,EME,,,,IC7400 144: 16el 432: 21el,11/07 IW4EHZ,JN54ML,EME,,ex IW4BTE,,IC706MKIIG 20EL70CM 12EL2MT 6EL6MT,03/05 IW4EJK,JN54ML,,,,,ICOM IC910 - 144: 2X CROSS YAGI 10EL - 432. 2X CROSS YAGI 19EL,04/08 IW5ACZ,JN53HP,,,,,50: TS2000 HB9CV 144: TR751E 4CX250 250 WATT 12el,10/04 IW5BLG,JN54VF,,,,,,01/03 IW5BML,JN52JW,EME,,,,,04/99 IW5BPE,JN52NT,,,,,,01/93 IW5DHN,JN53GI,EME,,,,TS2000 4x 7el,04/06 IW5DNZ,JN53,,,,,,05/02 IW5EJM,JN53HA,,,,,,08/08 IW5EKJ,JN54AA,EME,,EX IW1CCH,,144: IC-756 PRO2 TRSV GS31 or 3CX800,09/07 IW6AEG,JN63RO,,,,,,10/93 IW6BLH,JN63RO,,,,,,12/00 IW6BNO,JN63RL,,,,,,11/95 IW7DEC,JN81GF,,,,,144: 12db yagi 100W Preamp,08/04 IW8QOT,JM88BR,,,,,,01/03 IW9ELR,JM68PD,,,,,,11/02 IW9FRA,JM68GA,,,,,,01/05 IY1GMN,JN33VT,EME,,SPECIALCALL,,,06/09 IZ0ARL,JN61IU,,,,,144: 200W 16el,10/96 IZ0AYB,JN52VC,EME,,,,IC-910H 144: 4x12JXX - 432: 2x19 Tonna,05/04 IZ0CVK,JN61GV,,,ex IW0CVK,,YAESU FT767mod YAESU FT221R mod 2x8el DJ9BV 4CX250 MGF1801,09/06 IZ0FWE,JN62IQ,,,,,,08/08 IZ0GYP,JN61GT,EME,,,,144: 9el 250W,11/06 IZ1ANZ,JN45FH,,,,,,05/07 IZ1BPN,JN34OT,EME,,ex IW1CGB,,144: 150W 9el dj9bv MGF1801 50: TS680 3el,03/06 IZ1DBY,JN45FW,,,IW1FRO,,Icom IC706mk2g Yaesu FT847 FT817,06/07 IZ1DXS,JN35UA,,,ex IW1FTY,,ICOM IC-7400 (746 PRO) - 50: 6el - 144: 14el,11/02 IZ1EGT,JN44LK,,,ex IW1RDT,,IC910 100W 2.5 Wl ant,02/05 IZ1ESM,JN45FB,,,ex IW1ESM,,KWD TS850 + LT2S MK2 + 4.4wl BV,09/02 IZ1MKR,JN44FH,EME,,,,,01/09 IZ2AAJ,JN45,,,,,,12/99 IZ2DJP,JN55FO,,,,,,05/04 IZ2EEQ,JN45,,,,,,07/02 IZ2FOB,JN45MQ,,,ex IW2DVK,,50:5w dipole 144:150W 2x9ft MGF1302 432:4x21 ft-MGF1302-GS35b 1296:xverter50w-35ft,05/05 IZ2GOL,JN45OL,,,ex IW2LC,,ICOM IC-761 IC-756 IC-275H YAESU FT-897 FT-847 FT-817 KENWOOD TS-480HX TS-790E,03/05 IZ3KGJ,JN65IN,EME,,,,144: 2x 19el LLY,01/09 IZ4AIK,JN63HV,,,ex IW4CYM,,50: 100W 5el - 144: TS790 3CX800A7 TS850 & Trvt MGF1302 17el,07/01 IZ4BEH,JN54WL,,,,,144: 1KW 2x16el MGF2407 - 432: 2x21el 300W - 1296: 57el loop 60W - 2320: 53el loop 20W,10/02 IZ4BEJ,JN64CE,,,ex IW4DCT,,144: 2x13el gd Pwr,11/97 IZ4GWE,JN64BL,,,EX IW4EOQ,,,12/07 IZ5BXF,JN53GV,EME,,ex IW5DRA,,300W- 4x11el 2.2wl- 0.3dbNF,01/01 IZ5EME,JN52NS,EME,,ex IW5AVM,,144: 4x20el 8877 - 432: 4x25el 3CX800 - 1296: TH338 4x55ft,04/01 IZ5GNS,JN53CX,EME,,ex IW5CNS,,144: IC275H 4x10el 2.2wl 9BV 8877 MGF1302,08/05 IZ5MAO,JN54AA,EME,,IW5EKJ,,Transverters-GS35-2x4cx250r-2x9dk7zb-4x25jxx70,09/07 IZ8AZB,JN70EP,EME,,ex IW8CVV,,144: 4x11el 8930(400W),01/02 IZ8DWL,JM88BR,,,ex IW8QOT,,144: IC-746 PA 4CX250 16JXX LY MGF1302,04/04 IZ8IBB,JN70FP,,,,,,08/08 IZ8IFV,JN70KO,,,,,,08/08 J44XG,KM19KE,,,EXPEDITION,,,09/07 J45M,KM46CF,EME,,Expedition,,144: FT100 FT847 IC706 DSP59/Datong audiofilters 3CX800 4x10ele X-pol 3wl MGF1302 NF 0.3dB,06/01 J48PL,KN20IN,,,Expedition,,,07/06 J79MY,FK95,EME,,,,4x Yagi- 1.5KW,06/98 JA0BBW,PM97LV,EME,,,,144: 4x 13el 150W,10/07 JA0BLU,PM97OS,EME,,,,144: 1KW 4x19el 2x18el MGF1801,01/00 JA0VI,PM95,EME,,,,,01/03 JA1DXA,PM95VU,,,,,,01/03 JA1RJU,QM06CB,EME,,,,50: 2x 14el 1KW - 144: 2x 14el 50W,12/06 JA1VZV,PM95QL,,,,,,01/03 JA2HMO,PM85IH,,,,,,01/03 JA2JRJ,PM84MW,EME,,,,,01/00 JA2KRW,PM85NE,EME,,,,,01/03 JA2TY,PM84GS,EME,,,,,01/03 JA3BXC,PM74SU,,,,,,01/03 JA3IAF,PM74,EME,,,,,01/03 JA3SGR,PM74TU,EME,,,,,01/03 JA4BLC,PM65NM,EME,,,,2320: 6m dish 300W,04/06 JA4CMZ,PM65MI,EME,,,,,01/03 JA4KLX,PM95RI,,,,,,01/03 JA5NNS,PM63,EME,,,,,01/03 JA5OVU,PM74FC,EME,,,,,01/03 JA5YJS,PM63,EME,,,,,01/03 JA6AHB,PM53CP,EME,,,,432: 7m Dish 1KW,11/05 JA6CZD,PM53FM,EME,,,,2320: 5m dish 150W,04/06 JA6DZI,PM53GM,EME,,,,,01/03 JA6XED,PM53,EME,,,,,01/03 JA6ZHR,PM53,EME,,,,,01/03 JA7BJP,QM07GN,,,,,,01/03 JA7BMB,PM97WM,EME,,,,,01/03 JA7JJN,PM95RQ,EME,,,,,04/09 JA8ERE,QN02QX,EME,,,,2320: 6m dish 180W,04/06 JA8IAD,QN03,EME,,,,2320: 5m dish 180W,04/06 JA8PL,QN03,EME,,,,,01/03 JA9BOH,PM86FA,EME,,,,144: 4 x 2.8 mt,04/04 JD1BLY,QL17CC,EME,,EXPEDITION,,,01/08 JD1BMP,QL17CC,EME,,EXPEDITION,,,01/08 JE1KFX,QM06IR,EME,,,,144: 4x 18el 500W,05/05 JE1TNL,PM95PH,EME,,,,2m IC910D+GU74B 4x13ele 70cm IC910D+3CX800A7 4x20ele,08/08 JE2XBY,PM84MS,EME,,,,,03/05 JE5FLM,PM74AH,EME,,,,144: 2x 13el Vert 50W,10/06 JF3HUC,PM74UX,EME,,,,,01/03 JF3IPR,PM74,,,,,,01/03 JG2BRI,PM84LW,EME,,,,,04/05 JH0ISW,PM97LO,,,,,,01/03 JH0MHE,PM96HI,EME,,,,144: 4x 18el M2 500W,12/05 JH0QBI,PM97FF,,,,,,01/03 JH0WJF,PM86,EME,,,,,12/07 JH0YSI,PM85VJ,EME,,,,,03/01 JH1EFA,PM96UB,EME,,,,,01/03 JH1KRC,QM06AW,EME,,,,PO 500 watts exc. 3cm 300 watts 4.4m dish,03/06 JH1OFX,PM85SM,EME,,,,,01/03 JH1OQW,PM95UX,,,,,,01/03 JH1SWD,QM06HN,,,,,,01/03 JH1XUJ,PM95UR,EME,,,,,01/03 JH2COZ,PM49NW,EME,,,,144: IC821 4x14el 3.6wl ITT-4651 tube 3SK129 Preamp,09/06 JH2OJS,PM85LD,,,,,,01/03 JH3EAO,PM74KR,EME,,,,,01/03 JH3VJV,PM74LP,,,,,,01/03 JH4JLV,PM54LA,EME,,,,,01/03 JH5FOQ,PM63JS,EME,,,,144: 4x 28 Xpol 1KW,08/06 JH5LUZ,PM63FK,EME,,,,,01/03 JH6RTO,PM53FA,,,,,,01/03 JH7PAV,QM07DI,EME,,,,,01/03 JH7SIA,QM09EN,,,,,,01/03 JH8CMZ,QN12MN,EME,,,,144: 2x 13el 500W,11/08 JH9TJT,PM86HK,EME,,,,144: 2x 11el V 50W,11/06 JI1FLB,PM95WS,,,,,,01/03 JI1MNT,PM95QH,,,,,TS-870S,03/09 JI1NJC,QM06FL,,,,,,01/03 JI3GER,PM75XA,EME,,,,,01/03 JI4POR,PM65NK,,,,,,01/03 JJ1NNJ,QM06GH,EME,,,,,01/03 JJ1VOM,PM95,,,,,,01/03 JJ3JHP,PM75XD,EME,,,,144: 2x 11el,11/06 JK1HIX,PM95WH,EME,,,,4x17el 8877,03/99 JK1KTY,QM05DK,EME,,,,144: 2x15 2.75wl 200W,01/06 JK1LYP,PM95,,,,,,01/03 JK1XDX,PM95,,,,,,01/03 JK7IKU,QM09BR,,,,,,01/03 JL1ZCG,PM59UM,EME,,,,TS790 4CX1500A 16x 2.5WL V-POL YAGIS,03/99 JM1GSH,QM06IS,EME,,,,144: 4x 11el 500w,04/05 JM1LQW,PM96QA,,,,,,01/03 JM1MQE,PM95RP,,,,,,01/03 JM1SZY,PM95SO,EME,,,,,08/05 JM1WBB,QM05DX,EME,,,,144: IC-910D 2 x GU74B 4 x 2M32XP 432: IC-910D 50W 2X720,08/08 JN1BMX,QM06FM,,,,,,01/03 JN1CSO,PM95SW,EME,,,,144: 12x 15el H/V 2000W,01/03 JN1JFC,QM06AD,EME,,,,,03/08 JN4FNZ,PM54QD,EME,,,,144: 2x 13el 800W,01/90 JO1LVZ,PM95RT,EME,,,,144: 4x 9el 50W,05/06 JO3FUO,PM74RT,,,,,,06/07 JO3JJN,PM85AC,EME,,,,,01/03 JO3RNL,PM74TT,EME,,,,,01/03 JR1EDE,PM95TG,EME,,,,10368: 1.8m Dish 40W,02/01 JR1EUX,PM95TO,EME,,,,,01/03 JR1RCH,PM96SI,EME,,,,,01/03 JR2HCB,PM85NC,EME,,,,50: 2x 10el,04/05 JR3REX,PM74LQ,,,,,,01/03 JR4AEP,PM65RH,EME,,,,,01/03 JR4BRS,PM65,EME,,,,,01/03 JR5JXV,PM86XG,,,,,,01/03 JR5UOY,PM64XF,,,,,,01/03 JR6EXN,PM53FH,EME,,,,50: 4x 8el Yagi.full elev. Homebrew 1000W,01/09 JR6LDE,PM53FS,,,,,144: 12el 50W,06/06 JR7VXF,QM09AK,,,,,,01/03 JR9NWC,PM85BW,EME,,,,,01/03 JS3CTQ,PM74UN,EME,,,,144: 4x 11el 500W,05/06 JS3SIM,PM74VW,EME,,,,,01/03 JW5E,JQ78QF,EME,,,,144: 2 x 10Xpol 800w,02/08 JX7DFA,IQ50OV,EME,,QSL via LA7DFA,,TS2000,08/00 K0AWU,EN37ED,EME,,,,144: 800w 1x 4wl 13el Yagi,11/06 K0AZ,EM37CD,,,,,144: 800Watts 17B2,09/01 K0BLR,EN25UO,,,,,,01/03 K0CB,EM27,,,,,,01/03 K0CIO,EM07,,,,,,01/03 K0CJ,EN34IS,,,,,,01/03 K0CQ,EN32EC,,,,,,01/03 K0CXJ,EN26,,,,,,01/03 K0DAS,EN42,EME,,,,,01/03 K0FF,EM49HO,,,,,50: 1-5KW 7el or 4x6el - 144: 1-5KW 2x17el M2 or 4x17el,01/01 K0FQA,EN35FE,,,,,,01/03 K0FZG,EN36,,,,,,01/03 K0GCJ,EN43,,,,,,01/03 K0GEI,EM49,,,,,,01/03 K0GRM,DN96OT,,,,,,01/03 K0GU,DN70MQ,EME,,,,144: FT1000DEM 8877 4x17elB2 SSB Preamp,01/01 K0HH,EM48,,,,,,01/03 K0HU,EN10,,,,,,09/99 K0HWE,EN41BX,,,,,,01/03 K0IDC,EN12TL,,,,,,01/04 K0IDT,EN10PS,,,,,,01/03 K0IK,EN34JR,,,,,,01/04 K0ILC,EN36,,,,,,01/03 K0IR,EN25,,,,,,01/03 K0JO,EN34,,,,,,01/03 K0KE,DM79,,,,,,01/03 K0KFC,EN34,,,,,,01/03 K0KJX,EM48,,,,,,01/03 K0KP,EN36VW,EME,,,,50M:7 ele 100 144: 5WL 1.5 KW,10/07 K0KQY,DM98,,,,,,08/00 K0LGI,EN42,,,,,,01/03 K0LLS,EM29,,,,,,01/03 K0MQS,EN31UH,,,,,,01/03 K0NG,EN10,,,,,,01/03 K0NL,EM48MK,,,,,,01/03 K0NY,EN44DB,,,,,,01/03 K0OG,EM47CW,,,,,FT100D 50: 100W G5RV 144: 50W 3el beam,10/06 K0PFX,EM48SR,,,,,,01/03 K0PG,EN61AU,,,,,,01/03 K0PJ,EN34,,,,,,01/03 K0PS,DM59VG,,,,,,01/04 K0PW,EN34CV,EME,,ex NJ0M,,144: 1.5KW 2x17el 5lb MGF1302,09/01 K0RDF,EM29,,,,,,01/03 K0RI,DM78PX,EME,,,,144: 1x 17el KW,06/05 K0RL,EM49HU,,,,,,01/03 K0RP,DM88AD,,,,,50: 150W - 144: 150W - 222: 110W - 432: 110W - 1296: 10W,01/01 K0RRY,EN36,,,,,,01/03 K0RZ,DM79JX,,,,,,01/03 K0SDH,EN34JS,,,,,,01/03 K0SE,EN34,,,,,,01/03 K0SHF,EN34JV,,,,,,01/03 K0SM,EN10RT,,,,,144: 160W Preamp 13B2,01/01 K0SQ,EN35,,,,,,01/03 K0TAR,EN34,,,,,,01/03 K0VM,EN42,,,,,,01/03 K0VSV,EN41LK,,,,,50: 8W 5el - 144: 170W 12el,01/98 K0WLU,EN13XS,,,,,,01/03 K0XP,FN31,,,ex KO0U/1,,144: 350W 3219 - 222: 450W KLM16,01/02 K0XXX,EM46FF,,,KD5LUN,,IC-746 FT-736R,05/07 K0YW,DM67ED,EME,,,,,03/06 K0ZPO,EM15,,,,,,01/03 K1AE,FN42EJ,,,,,,11/01 K1CA,FN42IV,EME,,,,144: 8 x 28 el X-POL & 8877,06/05 K1DS,FN20JE,EME,,,,144: 10el 120W,07/06 K1FO,FN31QJ,EME,,,,,01/03 K1IM,FN31WX,,,,,,01/03 K1JT,FN20QI,EME,,,,144: 4x 14XP 1KW,01/08 K1MS,FN42,,,,,144: 1KW 2x M2 5wl,01/01 K1OR,FN42IR,EME,,,,144: 4x 13el no elevation 1500W - 432: 1500W,02/08 K1OYB,FN43TP,,,,,,01/03 K1POP,FN51,,,,,,01/03 K1RC,FN42HQ,,,,,,01/03 K1RO,FN31,,,,,,01/03 K1RQG,FN54LM,EME,,,,,04/05 K1RS,EN53wb,EME,, K1RZ,FM19JH,,,,,,01/03 K1SG,FN42FE,EME,,WA1AYS,,50 MHz: IC756PRO 3-1000Z Terrestrial: 2 x M2 6M2.5WLC EME: 4 x 6M5X w/full elevation.,09/07 K1TEO,FN31,,,ex WA2TEO,,144: 800W 4x12el - 222: 500W 2x23el,01/01 K1TR,FN42IU,,,WA1OAM,,,05/07 K1UHF,FN31FH,EME,,ex KD1DU,,144: 1-5KW 4x12el - 222: 500W,01/01 K1VOW,DM25VF,,,,,,01/03 K1ZE,FN41,,,ex WA1HYN,,144: 300W 2x4218 - 222: 60W 220B - 432: 400W 2xK2RIW,01/98 K2AAX,FN12CS,EME,,ex KA2RDO,,144: 4x 9el 400,11/05 K2AH,FN20,EME,,,,,01/03 K2AXX,FN12CS,EME,,,,144: TS-930S Transverters 4x 9el 400W - 432: TS-830S Transverters,11/05 K2BLA,EL99IA,EME,,,,144: 400W 8x 2.5WL,04/05 K2DH,FN13FB,EME,,,,,01/08 K2DRH,EN41VR,EME,,ex KA2DRH,,144: 2x 18el 1KW,03/07 K2DRM,EN41VR,EME,,,,144: 2x 18el 1KW,06/06 K2EVW,EM96SS,,,,,,01/03 K2GAL,FM29PH,EME,,,,,01/98 K2LME,FN31UI,EME,,,,,10/98 K2OS,FN13CD,EME,,,,,12/00 K2OVS,FN30,,,,,50: 250W 6el - 144: 200W single yagi - 432: 60W single yagi,01/01 K2PGB,FN20,,,,,50: TS680S 10W 3el - 144: IC251A 80W 13B2,01/01 K2STO,EL88PH,,,,,,01/03 K2TXB,FM29PT,EME,,,,144: 2x KLM 16LBX 28,04/05 K2UYH,FN20QG,EME,,,,432: 28 dish 1KW,09/05 K2VEE,EM79WP,,,,,,01/03 K2WKA,FN20RF,,,,,,01/03 K2YAZ,EN74AV,,,,,,01/03 K2ZD,FN21NR,EME,,,,50: 7el QRO,12/07 K3ACE,FM29DR,,,,,,01/03 K3AX,FN20,EME,,,,,01/00 K3BFA,FN10XI,,,,,144: 1-5KW 4x15el,01/01 K3CB,FM18VR,EME,,K6LEW,,Orion,02/09 K3DJC,FM19LL,,,,,,01/03 K3EAR,FM19HX,,,,,,01/03 K3EOD,FM29LL,,,,,,09/06 K3FOR,FM19SB,EME,,,,,01/03 K3FU,FM18,,,,,,01/03 K3GNC,FM29KX,,,,,,01/97 K3HZO,FN20AG,,,,,50: 350W 5el - 144: 350W 17el - 432: 100W 24el,01/98 K3IB,FM19UU,EME,,,,50: 200W 6M5XX - 144: 1-5KW FO12 - 222: 300W - 432: 300W 2xRIW,12/07 K3JT,EM99XO,,,,,,01/03 K3JYD,FM18,EME,,,,432: 4x 19el 400W 144 2 x K1FO-15 1500W,05/07 K3LFO,FM19,EME,,,,,01/03 K3LOW,EN91BK,,,,,,01/03 K3MF,FM19XP,EME,,,,432: 8x 25 K1FO GS23b 1500w,01/08 K3ROJ,FM19SH,,,,,,01/03 K3SIW,EN52,,,,,,01/03 K3TKJ,FM28EM,,,,,,01/03 K3TUF,FN10WE,,,,,,01/04 K3TV,FN20EP,,,,,,01/03 K3UZY,FN20,,,,,,01/03 K3VLQ,EM92,,,,,,01/03 K4AL,EM66QF,EME,,,,144: 15el 400W,05/05 K4AR,EM76,EME,,,,432: 8x28el (9lb) Yagis 1-5KW 0.25db,01/00 K4BTY,EM66,,,,,TS-870 TS-850 FT-736R,05/09 K4CSO,EM73,,,,,,01/03 K4DD,EM60NP,,,,,,01/04 K4DRF,EM74QA,,,,,,01/03 K4DXA,EM95pe,,, K4EJQ,EM86,,,,,,01/03 K4EME,FM08JF,EME,,,,432: 8x 33el 800W,09/05 K4FJW,EM86,,, K4HJE,EM96,,,,,,01/01 K4JAF,EM70EK,,,,,,01/03 K4KAE,FM02AT,,,,,,01/03 K4KO,EM66UD,EME,,,,144: 100W 15el,05/06 K4MRW,EM64PW,,,ex WB4AXQ,,,01/01 K4QF,EM64,,,,,,01/03 K4QI,FM06,EME,,,,,08/05 K4QXX,EL87RM,,,,,,01/03 K4RF,EM84DJ,,,ex WS4F,,,01/01 K4SDI,EM56TQ,,,,,,01/03 K4SSO,EM48SR,,,,,144: 160W 16el,01/02 K4SSP,EM47,,,,,,09/99 K4TAX,EL96WF,,,,,,01/03 K4VJ,EL96LX,,,,,,01/03 K4WRI,EL98LM,,,,,,01/03 K4WY,FM18IS,EME,,,,IC-7000xvcr to 2MPX20 xpol yagis(2) Commander II amp avg 500watts out preamp etc,11/08 K4XR,EM64NL,EME,,,,144: 2x 18el QRO,09/04 K4YA,EM25,,,,,,01/03 K4YNT,EM74KW,EME,,,,,02/05 K4ZFY,EL18,,,,,,01/03 K5AIH,EL09TK,EME,,,,,01/98 K5AM,DM62NI,EME,,,,144: 1x 17el 1500W,11/06 K5APM,EM10BL,,,,,,01/03 K5AZU,EM40SN,EME,,,,,01/03 K5BYS,EM13,,,,,,01/03 K5CBL,EM15,,,,,,01/03 K5CFM,EM15,,,,,,01/03 K5CM,EM25,,, K5CPZ,EM15,,,,,,01/03 K5CZD,EM32VN,EME,,,,144: 2x 13el 375W,05/06 K5DNL,EM15LJ,EME,,,,50: 7el 144: 2x 17el 400W,04/07 K5EGW,EM30,,,,,,01/03 K5EWS,EM10,,,,,,01/03 K5FA,EM44,,,,,,01/03 K5GE,EL09,,,,,,01/03 K5GMX,FN31NU,EME,,,,144: 4x 13el 600W,04/05 K5GNA,EM20,,,,,,01/03 K5GW,EM13PA,EME,,,,144: 48x10el,04/05 K5IS,DM96,,,,,,01/03 K5IUA,EL29CD,,,ex KB5IUA,,,01/01 K5JL,EM15DQ,EME,,,,,01/05 K5LLL,EM10KF,,,,,,03/07 K5LZO,EM20,,,,,,01/03 K5MAT,DM65,,,,,,01/03 K5MQ,EM31WQ,EME,,,,144: 17B2 1500W,11/06 K5OGE,EM20UX,,,,,,01/01 K5PHD,EM12,,,,,,01/03 K5PHF,DM61,,,,,,01/03 K5PJR,EM37KA,EME,,,,1296: 4m dish 300W 0.2db lna,09/06 K5QE,EM31,EME,,,,144: 8x 18el M2 QRO - 432: 19x 9wl,11/06 K5QQ,DM65SB,,,,,,01/03 K5QXJ,EM30XA,,,,,,01/03 K5RFI,EM16,,,,,,01/03 K5RHR,DM65UV,,,,,,01/03 K5RUS,EM32VM,,,,,,01/03 K5SO,DM66XW,EME,,,,1296: 250W 8.6m dish 0.2db LNA,04/06 K5SXK,EM12,,,,,,01/03 K5TN,EM15,,,,,,01/03 K5TNP,EM32,,,,,,01/03 K5TTT,EM26CH,,,ex KB5ZUD,,,01/02 K5UHF,EM10DJ,,,,,,01/03 K5UJC,EM20VB,,,,,,01/04 K5VH,EM00XE,,,,,,01/03 K5WO,EM12,,,,,,01/03 K5WPN,EM14AL,,,,,144: 100Watt 11el cushcraft 50: omni 432: 50watts 11el M2,05/07 K5WXN,DM61,EME,,,,,01/03 K5YPV,EM54MR,,,,,,01/03 K5YY,EM26,,,,,144: 1KW 13el,01/03 K5ZMJ,EM12,,,,,,01/03 K5ZMS,EL09,,,,,,01/03 K5ZSJ,EM12,,,,,,01/03 K5ZXE,EM14KL,,,,,,01/03 K6AAW,CN80TE,EME,,,,144: 4x15el 3wl 1.2KW MGF1302,06/06 K6ALF,CM97BH,,,,,,01/03 K6CYS,DM12KT,,,,,,01/03 K6DV,DM13NI,EME,,,,,01/03 K6FQ,DM12NL,EME,,,,144: 4x7ele crossed 1.3KW,03/05 K6HLH,DM14CP,EME,,,,,05/07 K6IAH,DM12,,,,,,01/03 K6IBY,DM13,EME,,SILENTKEY,,,10/08 K6JEY,DM03WT,EME,,,,432: 4x25el K1FOs 500W 0.4db,10/06 K6KL,CM97,,,,,,01/03 K6LEW,FM18LT,EME,,,,,11/00 K6MBY,CN88KD,,,,,Icom 746 144: M2 17 el 3000K ERP,09/07 K6MXI,CM88QL,,,,,,01/03 K6MYC,DM07DB,EME,,,,144: 4x 32XP M2 1KW,04/07 K6PF,DM13AR,,,,,144: FT726r 175W 4xM 2MXP20,01/01 K6QXY,CM88QL,EME,,,,,10/05 K6SUE,CM98AK,,,,,144: 650W 2x17el- 222: 120W 7wl- 432: 175W 2x9el,11/99 K6UCY,FN42HM,EME,,,,4x 25el 1KW,03/07 K6UIY,DM14,,,,,144: FT726r 1KW 2Yagis,01/97 K6UM,CM88,,,,,,01/03 K6ZX,CN82GM,,,,,144: 160W 2x2M9,01/97 K7AD,DN06ID,EME,,,,144: 4x 14el 1kW,10/05 K7BV,FN31VI,EME,,,,50: 1000w 4x7el,03/05 K7CA,DM37,EME,,,,144: 8x 16el 1500W,09/08 K7CAI,DN27KF,,,,,,01/03 K7CW,CN87LJ,EME,,,,6m kW 8elem - 2m kW 16elem,04/07 K7FB,DN17HN,EME,,,,400W 11db ant,05/07 K7IEY,CN88,,,,,,03/98 K7JA,DM03XS,,,,,144: 190W 19el,01/98 K7KX,DN55,,,,,,01/03 K7LNP,DN30,EME,,,,,09/99 K7MAC,DN13SN,EME,,,,50: 7el 1000W 144: 4x 15el 1500W,09/05 K7MDL,CN87XT,EME,,,,144: 2x 3wl 300W,04/05 K7MI,CN73TC,EME,,,,144: 4x 17el 500W,12/07 K7ND,CN87QF,,,,,144: 1KW 2x5wl M2,01/01 K7NEP,DN53NF,,,ex N2NEP,,FT1000MP 144: HM 1KW PA 13el,01/98 K7OO,DM04,,,,,,01/03 K7PVT,CN88SA,,,,,,01/03 K7TRM,DM33VP,,,,,,01/03 K7UOP,DM33XN,,,,,,01/01 K7UV,DN31XM,,,,,,01/03 K7WIA,CN87TR,EME,,,,,03/05 K7WUP,DM49IG,EME,,,,,01/03 K7XC,DM09NM,EME,,EX NC7K KD7DH A35WZ,,50: IC746 100W 6el 144: IC746 350W 18xxx 222: xvtr 400W 27el 432: IC706IIG 300W 33el,05/07 K7XD,CN85,EME,,,,144: 400W 2x23el,01/97 K7XQ,CM97QI,EME,,ex KO6RD,,50: 2x 7el 1KW - 144: 4x 2MPX18 Xpol 3lb 1.5KW MGF1302 - 432: 4x 9wl 1KW,10/06 K7XW,CN96XI,EME,,,,50: 1-5KW 5el - 144: 600W 2x3.5wL - 222: 50W 5wl - 432: 200W 4x5.3wl,01/01 K7YVZ,DN13TL,,,ex KC7YVZ,,144: 1-5KW 4x18XXX 2x13el Quagi Preamp - 432: 350W 4x38el,01/01 K7ZL,CN84JC,,,,,144: 150W 36foot yagi,01/98 K8BHZ,EN75DB,,,,,144: 1-5KW 4x17B2,01/98 K8DGY,EN63WW,,,,,,01/03 K8EB,EN73CB,EME,,,,144: 1500W 2x 18el,12/05 K8EME,EN72EH,EME,,ex NP4C,,144: FT847- 4x11el 2.2lb- 8877 (1-5KW),03/00 K8GUN,FM09WH,EME,,WB8VAZ,,ICOM,04/07 K8IE,EN52,,,,,,01/03 K8ISK,FM18DV,EME,,,,,01/03 K8MD,EN82,,, K8MM,EN83IB,,,,,,01/04 K8RAY,EN72XK,EME,,,,144: 4x 9el 400W,10/07 K8ROX,EN80LO,,,,,,01/03 K8SD,EN12,,,,,,01/03 K8TL,EM89CV,EME,,,,144: 360W 2MXP28,12/07 K8UC,EM99EG,EME,,,,,01/03 K8UK,EN82LK,EME,,,,,01/03 K8VEB,EN72NN,,,,,,01/03 K8VP,EN91,EME,,ex KB8ZW,,,07/01 K8XK,EN42,,,,,,01/03 K9AKS,EN41,,,,,,01/03 K9AM,EN52,,,,,,01/03 K9BCT,EL96UE,EME,,,,,01/03 K9BMB,EM69OG,,,,,,01/03 K9CA,EN61ML,,,,,,01/03 K9CFA,EN52,,,,,,01/03 K9CT,EN50BQ,EME,,,,IC7800 IC756 ProII Demi xvtr LunarLink 4x18 XXX Demi LNA,09/07 K9DMW,EN52UI,,,NT9E,,756PROII(6m) 910H(144/432),09/07 K9DQ,EN62AS,,,,,,08/06 K9DRO,EN54fn,,, K9DTB,EM89,,,,,,01/90 K9DX,EN52XC,EME,,,,144: 8x 19el Amp. 8877,09/06 K9EA,EN94CB,,,,,,09/01 K9EK,EM79BF,,,,,,01/03 K9FYV,EN41,,,,,,01/03 K9HJZ,EN50ES,,,,,,01/03 K9HMB,EN52VI,EME,,,,,12/00 K9HSK,EN51,,,,,,01/03 K9IJ,EN52,,,,,,01/03 K9ILT,EN61AU,,,,,,01/03 K9IMM,EN52,,,,,,01/03 K9IMX,EM38,,,,,,01/03 K9IZV,EN53,,,,,,01/03 K9JK,EN52XC,,,,,,01/03 K9KFR,EN71GG,EME,,,,,01/03 K9KHW,EN63AD,,,,,,01/03 K9KL,EN64,,,,,,04/06 K9KNW,EL96EC,EME,,,,,03/05 K9MB,EM57,,,,,,01/03 K9MRI,EN70IU,EME,,,,144: 8x m2 yagis and 1.2kw,04/05 K9MU,EN44HW,EME,,ex KB9UZV,,,01/06 K9NS,EN52RL,,,,,144: 2M18XXX,05/06 K9OQN,EN52,,,,,,01/03 K9PO,EN52VF,,,,,,01/03 K9PW,EN52,,,,,,01/03 K9SLQ,EN70KK,EME,,,,432: 16x FO22 1.5 KW,07/07 K9SM,EM59EE,EME,,,,144: 4x 9el 500W,11/05 K9SQL,EM69RF,,,,,,01/04 K9TI,EN51,EME,,,,144: 4x K1FO 12 el PA 8877,02/01 K9VHF,EN53,EME,,,,144: 17el 400W,05/05 K9VNM,EN63,,,,,,01/03 K9VS,EN52,,,,,,01/03 K9XI,EN61,,,,,,01/03 K9YR,EN52,,,,,,01/03 K9ZZH,EN61,EME,,,,,01/03 KA0EWM,EN30,,,,,,01/03 KA0KCI,EM17,,,,,,01/03 KA0KUY,EM07XD,,,,,,01/03 KA0MOW,EM17,,,,,,01/03 KA0MR,EM18GE,,,,,,01/03 KA0MWA,DM79LL,,,,,,01/03 KA0NNO,EM24TL,,,,,,01/97 KA0OGU,EM29,,,,,,01/03 KA0PQW,EN33,,,,,,11/01 KA0RYT,EN34DW,EME,,,,,01/02 KA0UZZ,EN34,,,,,,01/03 KA0Y,EN41,EME,,,,,08/00 KA0YSQ,EN42,,,,,,01/03 KA0ZOZ,EN23,,,,,,01/03 KA1JBG,FN42,,,,,,01/03 KA1OTP,FN41,EME,,,,,01/03 KA1R,FN42NE,EME,,,,,05/09 KA1VHF,EM89LL,EME,,,,144 2x 17el 1KW,10/06 KA2DRH,EM64KT,,,,,,01/03 KA2HZO,FM29US,,,,,,01/03 KA2KQM,EM74QA,,,,,,01/03 KA3DQD,FM29DO,,,ex N3ZWW,,Ten-Tec 526 ICOM 735,03/06 KA3HED,FM27,,,,,,01/03 KA3WSZ,FM29GK,EME,,,,,01/03 KA4WJA,EL89WE,,,,,,01/03 KA5AAE,EM06,,,,,,01/03 KA5AIH,EL29NW,EME,,,,,10/96 KA5DWI,EM12JU,,,,,Yaesu FT-290R FT-726R and FT 747GX,01/09 KA5PVB,EM13,,,,,,01/03 KA5TQY,EM43,,,,,,01/03 KA5UEL,EM12,,,,,,01/03 KA5UEV,DM93,,,,,,01/03 KA5ULI,EM30,,,,,,01/03 KA5WMJ,DM96,,,,,,01/03 KA5WRG,EM15,,,,,,01/03 KA5YJJ,EM44NN,,,,,,01/03 KA6NBC,CM98,,,,,,01/03 KA7V,DN14MA,,,,,144: 13B2 1500W,11/03 KA8EDE,EM79,,,,,,01/03 KA8HOK,EM89LL,EME,,,,144: 2x 19el 600W,10/06 KA8HQL,EM89VU,,,,,,01/03 KA8SFP,EM12,,,,,,01/01 KA8SSB,EM79,,,,,,01/03 KA8TER,DN43AL,,,,,,01/03 KA9CFD,EN40OM,,,,,,08/05 KA9LDS,EN51,,,,,,01/03 KA9LLF,EM71,,,,,,01/03 KA9LNP,DN30,,,,,144: 800W KLM13LBA,01/01 KA9MGR,EN41,,,,,,01/03 KA9OIL,EN62,,,,,,01/03 KA9UVY,EM58NG,,,,,,01/03 KA9YCB,EM57QQ,,,,,,01/03 KB0BFI,EM29LL,,,,,,01/03 KB0BVR,EN26AH,,,,,,01/03 KB0CY,DM79,,,,,,01/03 KB0EMR,EN31,,,,,,01/03 KB0FHP,FN20GE,,,,,,01/03 KB0FRX,EN10,,,,,,01/03 KB0G,DM79PA,EME,,,,,09/06 KB0GL,EN35,,,,,,01/03 KB0GR,EM29,,,,,,01/03 KB0GU,EM28TW,,,,,,01/04 KB0HH,EM07QD,EME,,,,,01/04 KB0IKP,EN25UQ,,,,,,01/03 KB0LRI,DM79,,,,,,01/03 KB0LXX,DN96,,,,,,01/03 KB0MNK,EN34IW,,,,,,01/03 KB0NR,EN35OG,,,,,,01/03 KB0OBT,EN35KB,,,,,,01/03 KB0OZN,EN34,,,,,,01/03 KB0PYO,EN24GP,,,,,,01/97 KB0THN,EN44DB,,,,,,01/03 KB0TZA,EN35ID,,,,,,01/03 KB0USF,DM79LR,,,,,,01/03 KB0VUK,EN34PK,,,,,,09/01 KB1CJ,FN42JG,,,,,IC746 50: 100W 2el - 144: 100W 13el,09/03 KB1DFE,FN42ES,,,,,,01/03 KB1HGB,FN53EU,,,,,,01/03 KB1LKB,FN31RS,EME,,,,144: 2x 12el 300W,09/06 KB2AH,FN20,,,,,,01/03 KB2M,FM29PE,,,,,,01/03 KB3EDF,FM18RH,,,,,,04/07 KB3HWO,FN10UB,,,,,,01/03 KB3PD,FM29,EME,,,,,01/03 KB4BSA,EM73,,,,,,01/03 KB4FQ,FM04GR,,,,,,01/03 KB4RSM,EM66OG,,,,,,01/03 KB4WM,EM63,EME,,,,,01/03 KB4ZGO,FM06BQ,EME,,,,144: 160W 13B2,08/05 KB5DAK,DM96,,,,,,01/03 KB5EK,EM15,,,,,,01/03 KB5MR,EM26,,,,,,01/03 KB5MY,DM13NC,,,,,,01/03 KB5UBE,EM12LQ,,,,,,01/03 KB5ULP,EM15,,,,,,01/03 KB5VL,DM73RK,,,,,,01/03 KB5VQQ,EM15,,,,,,01/03 KB5WII,EM15,,,,,,01/03 KB5WMY,EM32,,,,,,01/98 KB5YAJ,EM14,,,,,,01/03 KB5YUA,EM44,,,,,,01/03 KB5ZMY,EM12,,,,,,01/03 KB5ZUD,EM26,,,,,,01/03 KB6IGC,DM15DO,,,,,,01/03 KB7FUV,DN44,,,,,,01/93 KB7XO,DN41AB,,,,,,01/03 KB8GC,EN74HD,,,,,,01/03 KB8JVH,EN80,,,,,,01/03 KB8O,EN82JJ,,,,,,03/00 KB8RQ,EM79SV,EME,,,,144: 8x 19el M2,03/05 KB8U,EN71SW,EME,,,,,01/06 KB8VAO,CM87XW,EME,,,,,02/09 KB8ZUZ,EN83JL,,,,,,01/03 KB8ZW,EN91IJ,,,,,,01/03 KB9GPW,EN61,,,,,,01/03 KB9II,EN52WA,,,,,,01/03 KB9KCJ,EN52,,,,,,01/03 KB9MLA,EN61CX,EME,,,,18el- 160W,10/98 KB9NKM,EN70NS,EME,,,,144: 4x 13el 1KW,11/06 KB9NLM,EN53UO,,,,,,01/03 KB9PCL,EN41,,,,,,01/03 KB9PJL,EN44DV,EME,,,,144: 400W 18el,11/06 KB9Q,EN52VV,,,,,,01/03 KB9RQZ,EM59,EME,,,,144: 13el 100W,07/06 KB9TLV,EN45MW,,,,,,01/03 KB9UMT,EN50DP,,,,,,01/03 KB9VQC,EN53,,,,,,01/03 KB9VUG,EN52,,,,,,01/03 KB9YXF,EN61,,,,,,01/03 KB9ZK,EN62,,,,,,01/03 KC0AKJ,EN42,,,,,,01/03 KC0AMG,DM98GK,,,,,,01/03 KC0BMF,EN31BE,EME,,,,50: 5ele 100W 144: 13el 100W,12/08 KC0CHW,EN41IN,,,,,,01/03 KC0CRE,DM28,,,,,,01/03 KC0FTQ,DM79OB,,,,,,01/03 KC0FXY,EN34,,,,,,01/03 KC0HLN,EN32tl,,, KC0HTB,EN34JT,,,,,,01/03 KC0LBT,EN35IB,,,,,,01/05 KC0LMS,EN34IW,,,,,,01/03 KC0MLS,EM19QU,,,,,,01/03 KC0OG,EN10,,,,,,01/03 KC0P,EN34SB,,,,,,01/03 KC0QR,EN10,,,,,,01/03 KC0UWS,DN70KE,EME,,,,50: 3el,08/05 KC0Y,DM79,,,,,,01/03 KC2TN,FM29NS,,,,,,01/03 KC3AK,FM19UU,,,,,,01/04 KC3RE,FM18DP,EME,,ex TF3XUU TA3/KC3RE,,144: 280W 0.5dB 15el can elevate manually to 10 eme from car - 432: 110W 0.5dB 19 el can elevate manually to 30,04/06 KC4PX,EL98QG,EME,,,,,06/05 KC4VI,EL88SD,EME,,,,144: 4x 3.5wl 1000W,05/05 KC5BQS,EL29,,,,,,01/03 KC5BRO,EM15,,,,,,01/03 KC5LOW,EM22,,,,,,01/03 KC5NOA,EL08,,,,,50: 150W 5el - 144: 100W 10el - 432: 20W 19el,01/01 KC5NOB,EL07,,,,,50: 10W 5el - 144: 170W 8el - 432: 10W 19el,01/01 KC5UOO,EM26,,,,,,01/03 KC5WX,EM13LB,,,,,,01/03 KC5YKX,EL17HS,,,,,Icom 746 w/ DEM 22 and 432 xverters 50: 5el - 144: 13el - 222: 15el - 432: 25el,05/02 KC5ZXE,EM45AM,,,,,,01/03 KC6A,DM03,EME,,,,,01/03 KC6TEU,CM98MQ,,,,,,01/03 KC6WFS,DM04RK,,,,,50: 100W 5el - 144: 100W 2x12el - 432: 50W 2x18el,08/01 KC6ZWT,CM98NO,EME,,,,144: 300W 17el M2 - 222: 250W 15el - 432: 150W 19el,10/08 KC7MRP,CN88,,,,,,01/97 KC7OTV,CN84KA,,,,,,01/03 KC7V,DM43AS,EME,,,,Rig Kenwood TS2000 Amp Antenna Works 8877 Ant 4 x 2M5WL,10/06 KC8CCD,EM79VM,,,,,,01/03 KC8DLL,EN66,,,,,50: 150W M25 - 144: 200W 2x13B2 - 432: 100W KLM,01/98 KC8GYW,EM79,,,,,,01/03 KC8NST,EN91QB,,,,,,01/03 KC8OIT,EN83,,,,,,07/01 KC8QVO,EM79VP,,,,,,11/05 KC9AAX,EN52,,,,,,01/03 KC9AER,EN52,,,,,,01/03 KC9AYO,EN52,,,,,,01/03 KC9BTW,EN52,,,,,,01/03 KC9CMT,EN63LA,,,,,,01/04 KC9ELU,EM79hj,,, KD0BT,EN41,,,,,,01/03 KD0DW,DN70LF,,,,,,01/03 KD0HE,EN00,,,,,,01/03 KD0KUK,EN35dw,,, KD0LO,EM48,,,,,,01/03 KD0PY,EN41UX,,,,,144: IC275A 2516g 150W 13el - 432: IC471H 70W 15el,01/01 KD0SU,DM78,,,,,,01/03 KD1DU,FN31FH,EME,,,,,01/03 KD3UY,FM19LG,EME,,,,144: 2x 4WL antenna 1KW,05/05 KD4ESV,EL87RH,,,,,,01/01 KD4FNB,FM17TD,,,,,,01/03 KD4LT,EM81CG,EME,,,,,01/03 KD4MZM,EL87RG,EME,,,,50: FT107m - 144: FT726r 170W 19el,07/01 KD4NOQ,EM55BE,,,,,,01/03 KD4NUD,EM91HB,,,,,,01/03 KD4TJN,EM55CE,,,,,,01/03 KD5FFW,EM12,,,,,,01/03 KD5FZX,EM12MP,EME,,,,,01/03 KD5HIO,DM65UV,EME,,,,,01/03 KD5KJD,EL29IR,,,,,,01/04 KD5LDQ,EM26IH,,,,,,01/03 KD5LWU,DM66AU,,,,,,01/03 KD5OMJ,EM04UO,,,,,,01/03 KD5OUG,EM12,,,,,,01/03 KD5QQU,EM12QX,,,,,,01/03 KD5QWO,EM15AJ,,,,,Yaesu ft-847,01/04 KD5XB,DM84,,,,,,12/06 KD7ETC,DM54AH,,,,,,01/04 KD7YZ,EM88,,, KD9KX,EN42,,,,,,01/03 KE0MO,EN41,,,,,,01/03 KE0UQ,EM29,,,,,,01/03 KE2N,FM18EW,EME,,G0VSN,,432: 16x 28el 1000W,08/07 KE3PL,FN20PM,,,,,,01/03 KE4ENX,EM84GM,,,,,,01/03 KE4IKM,EM73,,,,,,01/03 KE4KDB,EM55,,,,,,01/03 KE4MKW,EM84DJ,,,,,,01/03 KE4VUN,EM67MS,,,,,,01/03 KE4WBO,FL96VW,EME,,,,222: 4x 16el 120W,10/06 KE4YH,EL88OA,,,,,,01/01 KE4YYD,EL97RV,,,,,,09/06 KE5CO,EL29,,,,,,01/03 KE5ML,EM15,,,,,,01/03 KE6NDG,CN90QJ,,,,,,01/03 KE6PT,CM88UE,,,,,,01/03 KE7CX,CN85LJ,,,,,,01/03 KE7NR,DM33WM,EME,,,,144: 4x 13el KW 432: 2x 28el 1KW 50MHZ 5 ele L/B & KW,05/07 KE7NS,DN41AF,,,,,,01/02 KE7OI,DN13SU,EME,,,,,01/01 KE7V,CN88JB,,,,,,01/04 KF0AU,EN31HI,,,,,,01/03 KF0CK,EM38JC,,,,,,01/03 KF0DS,DM41,,,,,,01/03 KF0FE,EN41,,,,,,01/03 KF0M,EM17HO,EME,,,,,01/01 KF0OA,DM79,,,,,,01/03 KF0Q,EN44EA,,,,,,01/03 KF4HOU,EM86VE,,,,,,01/03 KF4JU,EL87,,,,,,01/03 KF5AL,EM13,,,,,,01/03 KF5IU,EM31WR,,,,,,01/03 KF5PE,EM12,,,,,,01/03 KF6BXH,CM87VQ,,,,,,01/03 KF6HQC,DM14ED,,,,,,01/03 KF7CN,DN16LV,,,,,,01/01 KF7IS,DN41AC,,,,,,01/04 KF7VY,DN17IQ,,,,,,01/03 KF8QL,EN72FU,,,N8MXK,,IC-746-Flexradio 1000-DEMI transverters,01/09 KF9CY,EM59,,,,,,01/03 KF9YR,EN54,,,,,144: 170W 13B2,01/97 KG0MW,EN13,,,,,,02/01 KG0SV,DM79,,,,,,01/03 KG4BMH,EM76JK,,,,,144: 1000 Watts sp144vdg GasFet 40 Element Collinear Array 7/8Heliax,05/02 KG4CHX,EM95LL,,,,,,01/03 KG4FET,EM90FH,,,,,,07/01 KG4KAK,EL96VG,,,,,,01/05 KG4MLA,EL88OA,,,,,,01/03 KG5RK,EM12,,,,,,01/03 KG5SF,EM44,,,,,,01/03 KG5UN,EM02,,,,,,01/03 KG6DX,QK23KL,EME,,,,144: 4x 13el CushCraft 900W,06/05 KG6ENA,DM04DK,,,,,,01/03 KG7CN,DN23BF,,,,,50: 5el 1KW,11/06 KG7FU,CN83KA,,,,,144: 2x11el 1KW,01/01 KH7K,AL08UJ,,,,,,01/03 KH7X,BL11CG,EME,,EXPEDITION,,,04/07 KH7Y,BL11,EME,,W6YM,,,08/07 KI0LE,EN36US,EME,,KB0PDO,,Kenwood TS-790A Yaesu FT-847,09/07 KI4BYV,FM15CX,,,,,,01/04 KI4M,EM95AQ,,,,,144: 800W M2 18XXX,01/01 KI4TZ,EM95LD,EME,,,,144: 2x 13el 400W,05/08 KI6FF,DM13AR,,,,,,01/03 KI7JA,CN85RL,,,,,,01/04 KI7WB,DN62,,,,,144: 200W 10el,01/01 KJ5EY,DM65XA,,,,,,01/03 KJ5Q,EM15,,,,,,01/03 KJ6HZ,DM13HX,EME,,,,50: 3el 100W - 144: 2x 17el 500W - 222: 10W - 432: 4x 19el 500W - 1296: 10W dish - 10G: 2W dish,09/06 KJ7A,DM03,EME,,,,432: FT-817 8 x 25 ele,11/00 KJ7F,DN13VO,EME,,,,,01/04 KJ7OG,DM42MH,EME,,,,,01/03 KJ9I,EN53QB,EME,,,,50: 1 Yagi,11/08 KK4NO,EM92,,,,,,01/03 KK5WA,EM45,,,,,,01/03 KK7B,EN57RB,,,,,,01/03 KK7LK,CN88SS,,,,,,01/03 KK8O,EN80OR,,,,,,01/04 KL6M,BP51DC,EME,,ex AL7OB,,9.2m dish,10/06 KL7FB,BP51HO,EME,,,,,01/03 KL7FH,BP41BB,EME,,,,432: 16X12 ele polarity rotation FT-847 100 W preamp K0RYT .18db NF,09/05 KL7HFQ,BP51,EME,,,,,01/03 KL7IZW,EM13SE,EME,,,,,12/04 KL7UW,BP40IQ,EME,,ex AL7EB,,FT847 144: 4 Xpol-20el M2 170W MGF1801 432: 16.5dbd Antenne 50W,09/05 KL7X,BP51AE,EME,,,,,02/01 KM0A,EM84UT,EME,,,,144: single Yagi,10/06 KM0T,EN13VB,,,,,,07/01 KM1H,FN42,,,,,144: 1-5KW 2x4218XL,01/01 KM4ID,EM93WA,,,,,,01/03 KM5OL,EM13RB,,,,,,01/03 KM5PO,EM12KO,EME,,ex KD5BUR,,144: 13KW ERP,04/05 KM6WC,CM97OP,,,,,FT100,09/02 KN4SM,FM16QT,,,,,144 : 1.5KW 5wl M2 - 432: 1.5KW 13wl M2 - 222: 300w K1FO 22el,12/07 KN6DD,DM03,EME,,,,,01/03 KO0Z,EM48,,,,,,01/03 KO2R,EN52,,,,,,01/03 KO4FR,FM16UV,,,,,,01/05 KO4QR,FM26,,,,,,01/98 KO7N,CN84IA,EME,,,,,08/01 KQ0Z,EM37,,,,,,01/03 KQ4I,FM06JB,EME,,,,144: DISH,01/90 KQ6JI,CM87UJ,,,,,,01/03 KQ6MU,DN16WF,EME,,,,144: 17el 100W,07/05 KQ6UH,DM14BC,,,,,,01/03 KR5E,EL29JN,,,,,,01/03 KR5V,EM13,EME,,,,,01/02 KR5Vex,EM13SD,,,,,,01/03 KR7O,DM07BA,EME,,ex N7STU,,HTX100 144: Trvt 1KW 2M5wl - 222: Trvt 450W 7wl yagi,10/06 KR8L,DN43AL,,,,,,01/03 KS0F,EM48SL,,,,,,01/97 KT4HA,FM15BH,,,,,,01/03 KT4KB,EM93,,, KT8O,EN71KI,,,,,,04/08 KT8U,EN80OR,,,,,,01/03 KU0KU,EM28QV,,,,,,01/03 KU2A,FN42DW,EME,,,,144: 12el 1500W,12/07 KU3T,FN20,EME,,,,,04/98 KU4F,EL99AF,EME,,,,,01/03 KU4R,EM86SK,EME,,,,144: 2x18XXX 200W,01/01 KU7Z,DN41AF,EME,,,,144: 2x 12el 600W,10/06 KV4EB,EM66FL,,,,,144: 7el 14el,11/01 KV6J,BK29AQ,,,,,,01/03 KW0A,EM48RI,,,,,144: 1KW 24el,08/01 KW0T,EM19WF,,,,,,01/03 KW1AM,FN41CT,EME,,,,,05/07 KX7V,DM42,,,,,,01/03 KX8XX,EN74HD,,,KB8GC WB8CKZ WN8CKZ,,,01/08 KX9X,EN60AC,,,ex KF9PL,,IC706MKII - 50: 100W 3el - 144: 100W 11el,09/01 KY7B,DM43,,,,,,01/03 KZ2S,FN20XD,,,,,,01/03 LA0BY,JO59FW,,,EX DF9PY,,144: 180W 9el - /p JO59ix: 144: 180W 2x9el MGF1302 - 432: 120W 2x13el Preamp - 1296: 20W 43el Preamp,01/08 LA0FX,JP40LM,,,ex SP9CSO,,,11/95 LA0GE,JO59NJ,EME,,,,Icom IC-7000,03/07 LA1BEA,JO29XB,,,Expedition,,,01/91 LA1K,JP53EK,EME,,,,144: 2x4CX250b MGF1402 preamp 4x17el,01/95 LA1KHA,JO49SE,,,,,,01/93 LA1TV,JO49TQ,,,,,,01/04 LA2AB,JO59FV,EME,,,,,07/02 LA2MOA,JP50HW,,,,,,12/08 LA2PHA,JO38IB,,,,,144: 100W 10el,07/02 LA2RZ,JP30AI,,,,,144: 160W 17el,05/02 LA2YMA,JP32LK,,,,,144: 40W 9el,02/04 LA2Z,JO59EJ,EME,,,,1296: 4.2m dish 300w f-d=0.5 VE4MA feed NF 0.3dB,10/06 LA3BO,JO59CD,,,,,,04/04 LA3EU,JP32BG,,,,,,01/93 LA3HPA,JP50QM,,,,,Icom IC-746pro Icom IC-706MkIIG,09/08 LA3WU,JP20QH,EME,,,,,01/93 LA4DL,JP32EL,,,,,,03/04 LA4XGA,JP33VC,,,LB7ZC,,144: 10 5m ant 800w,10/07 LA4YGA,JO48BE,EME,,SP8DXL SP2DXL,,IC910 / IC706 144: 300W 15el - 432: 17el 100W,04/07 LA5IH,JP20NK,,,,,,01/93 LA5KJA,JP50IV,,,,,,01/98 LA5KO,JO38HC,,,,,144: 300W 17el MGF1302,06/06 LA5NNA,JO38MA,,,,,144: 100W 19el,12/06 LA5PH,JO49XA,,,,,,01/92 LA5SAA,JO29SE,,,,,,01/93 LA5TFA,JP99LQ,,,,,IC751-IC706-FT736r-FT225rd - 50: 2x5el HL166V - 144: 3CX800A7 15el,05/07 LA6CU,JP20QL,,,,,144: TS790e 150W 16el MGF1302,09/99 LA6HL,JO28TW,EME,,,,,01/02 LA6I,JP41,,,Expedition,,,01/93 LA6K,JP33VC,,,,,,05/03 LA6LU,JO28,,,,,,07/96 LA6MV,JO59FJ,,,,,,08/02 LA6QBA,JP61BJ,,,,,50: 100W 2x5el - 144: 600W 4x11el,07/04 LA6TPA,JP54RL,,,,,FT-2000 IC-7000,03/08 LA6VBA,JO48,EME,,,,,01/93 LA7KK,JP50,EME,,,,,01/93 LA7SP,JP99MQ,,,,,,07/05 LA8AE,JO59CC,EME,,,,,01/94 LA8AJA,JP50HP,,,,,,07/06 LA8AV,JO59DS,EME,,,,FT-1000MP + transverter,05/07 LA8G,JP53EJ,,,,,,01/05 LA8GKA,JO59FS,,,ex LC1PAT,,IC706,08/05 LA8KV,JP52QQ,EME,,,,144: IC746 - 1Kw (or 1.8Kw) 4x15 el. Fullelv.,06/06 LA8LF,JO59BS,EME,,,,1500W 4.6M NEC solid Dish Autotracking,05/07 LA8NK,JO48KM,,,,,Ft-736 Ft-897 5 el yagi on 6 9 el yagi on 144,04/07 LA8OW,JP50NC,,,,,,05/02 LA8SMA,JP42GE,,,,,,05/07 LA9BM,JP40CM,,,,,,03/98 LA9DFA,JP60AE,,,,,144: IC-706MKIIG + SLA200 250w + 2M5WL 17el / 50: IC-756 PROII 100w 5el,06/09 LA9DL,JO59KE,EME,,,,,04/04 LA9FY,JP40,,,,,144: 160W 16el,02/09 LA9IY,JP53,,,,,,01/03 LA9NEA,JO59DX,EME,,OP LA2AB,,144: 4x 19el K1FO 1-5KW,02/05 LA9Z,JO38HC,,,,,50: 100W 5 ele Tonna 144: 150w 15 ele CueDee,07/06 LB7FA,JO38LM,,,,,144: IC821 9el 180W,03/05 LM9K75Y,JO48AD,,,SPECIALCALL,,144: 3wl Preamp GS35B,01/09 LU1C,GF05OM,EME,,,,4 x 3WL and 600 Watts,10/08 LU1CGB,GF05OM,EME,,,,144: 4x 14 ele 600 W Pre RX - 432: low Pwr,02/09 LU4HO,FF78RA,,,,,,01/03 LU5BOJ,FG75HF,EME,,,,FT757GXII 144: 2x 12el 600W,03/07 LU6DW,GF05SF,EME,,,,,01/03 LU7DZ,FF78RA,EME,,,,144: 4X16 el 1 KW Pre RX 432: 4X22 el 1KW Pre RX,02/09 LU7FA,FF96,EME,,,,144: 2x 12el 140W Preamp (maybe 4x 12),02/09 LU7FIA,FF97PA,EME,,,,144: 2x 12el 300W Preamp - 432: 1x 19el 100W,02/09 LU8EDR,GF05TF,EME,,,,1296 EME under construction,02/09 LU9AWH,GF05SJ,,,,,,03/07 LU9MBK,FF57NR,EME,,,,144: 4el Quad 100W,10/06 LX1DB,JN39CO,,,,,,10/06 LX1FX,JN29WT,,,,,,07/08 LX1GR,JN39,,,,,,01/93 LX2DX,JN29WO,,,,,,10/02 LX2SM,JN39,,,,,,07/04 LX8M,JN29XX,,,EXPEDITION,,,08/08 LX8X,JN29XX,,,EXPEDITION,,,08/08 LY2AAM,KO23,,,Expedition QSL via DL3BQA,,,06/06 LY2BAW,KO25KA,,,,,FT-736R+home made PA - 144: 24el 2M8WL M2 - 432:-30el KLM - 1296: 44 el KLM,05/03 LY2BIL,KO24PQ,,,ex UP1BWR - not qrv MS nw! (01/01),,144: FT736r 30el 1KW,08/02 LY2BUU,KO15XH,,,,,IC-706MKII,10/07 LY2BW,KO24,,,,,,01/95 LY2CI,KO14WV,,,,,TS-790A- 144: 150W 11el - 432: 25el yagi - 1296: 36el,08/03 LY2FE,KO05NQ,,,not qrv MS nw! (01/01),,144: FT736r 300W 13el,10/02 LY2FR,KO15VR,,,,,,07/04 LY2GC,KO25KA,EME,,,,,10/04 LY2MW,KO24PS,,,,,IC746 + PAs 50: 100W 6el - 144: 100Watt 13el DJ9BV SP2 - 432: 200w 23el DJ9BV SP70,08/04 LY2R,KO15VR,EME,,LY2FR,,FT857D 144: 4x 10el 800 W,09/07 LY2SA,KO14LL,EME,,,,144: IC821H 300W 17el 5wl MGF1502 - 432: 175W 30el,06/07 LY2WR,KO24FO,EME,,UP1BWR,,144: FT736r 11el 1KW+ - 432: 50W 24el - 1296: 10W loopyagi,03/09 LY3BF,KO24OR,,,,,,01/96 LY3GM,KO14LL,,,,,,12/97 LY3W,KO14XW,EME,,LY3BW,,ICOM 706 mk-2g FT1000mp mark-V,10/07 LY4U/P,KO24FO,EME,,LY2BIL,,,03/09 LY8O,KO24OP,,,LY2MW,,IC-275H IC-475H IC-910H,05/08 LY8X,KO24PQ,,,SpecialCall,,,08/99 LZ1AG,KN22ID,EME,,,,144: 14el 100W,12/99 LZ1BB,KN12PQ,EME,,,,,07/09 LZ1DP,KN22TR,EME,,,,144: 4x5 WL DJ9BV cross+MGF1302 FT-736R PA 1-8 KW 2xGU74B,01/05 LZ1DX,KN22,,,,,,01/93 LZ1FG,KN12,,,,,,08/08 LZ1JH,KN32FR,,,,,,06/99 LZ1KDP,KN12SP,EME,,,,,01/98 LZ1KDZ,KN32,EME,,,,,01/93 LZ1KG,KN31CS,,,,,50: 4el transv. 10W - 144: 2x16 F9FT IC275e - 432: 15el FT790r,09/03 LZ1KJ,KN31CS,,,,,50: FT987 4el 15W - 144: FT987 250W 2x8el GaAs Fet,09/03 LZ1KQ,KN22TK,,,,,,12/96 LZ1KRB,KN32,,,,,,01/93 LZ1KSN,KN32SL,,,,,,01/93 LZ1KSW,KN31CS,,,,,,12/95 LZ1KU,KN32,,,,,,01/93 LZ1KWT,KN22TK,,,QSL via LZ1DP or LZ1JH,,144: FT736 1KW 2x16el F9FT GaAsFet 3SK129,11/03 LZ1NO,KN12,,,,,,12/01 LZ1OA,KN22TK,EME,,,,,06/06 LZ1QI,KN12,,,,,,11/01 LZ1QM,KN12,,,,,,01/93 LZ1R,KN42AA,,,Expedition,,,01/93 LZ1UB,KN22TK,,,,,,01/94 LZ1UK,KN22ID,,,,,144: 60W 8el Quagi,06/06 LZ1V,KN12QQ,,,,,,01/90 LZ1VPV,KN32AS,,,,,,08/05 LZ1ZP,KN22ID,,,,,144: 150W 14el DJ9BV,05/03 LZ1ZX,KN32IO,,,,,,12/99 LZ2FO,KN13KX,EME,,,,144: 500W 15el 9BV,10/07 LZ2HM,KN12QP,EME,,,,144: FT847 17el yagi,07/03 LZ2HV,KN23UB,,,,,144: 600W 12el Quad,12/98 LZ2JF,KN23,,,,,,01/93 LZ2KRU,KN33FL,,,,,144: 500W 17el,08/97 LZ2PP,KN33,,,,,,01/93 LZ2US,KN13RJ,EME,,,,144: 4x KLM17LBX 2x 4CX800A 2KW FSC11LF,08/00 LZ2UU,KN12QP,,,,,,08/96 LZ2ZY,KN13OT,,,,,,05/08 LZ3BD,KN12QQ,,,,,432: 250W 32el GaasFet,12/99 LZ3CQ,KN12PQ,,,,,,01/03 LZ3GM,KN32RL,,,,,144: IC735 20W 3wl 10ele BVO2 MGF1302,05/08 LZ3YH,KN22,,,,,,12/95 LZ4KK,KN23XU,,,,,TS-2000 Mirage B2516G 160W 4el DK7ZB,05/08 LZ5GM,KN32QL,,,,,144: IC-720 50W 13eleFT MGF1302,04/03 LZ5N,KN21JX,,,,,,01/95 LZ5UV,KN12PR,,,,,144: FT847 IC271 4cx250 PA 17el DJ9BV,11/02 LZ5Z,KN12PR,,,,,144: 2x15el 1KW,12/99 LZ6T,KN22IS,,,,,,12/99 LZ7A,KN43HL,,,Expedition,,,01/94 LZ7P,KN22,,,,,,12/96 LZ7Y,KN41AX,,,,,,08/99 LZ9M,KN32RL,,,,,,12/03 LZ9W,KN12MO,,,,,IC-746 FT-847,01/05 LZ9X,KN32AS,,,= LZ1KWT,,144: 2x 15el 1KW,08/08 M0AFJ,IO92OB,,,G8GGP,,200W,04/07 M0BCG,IO91DO,EME,,,,144: ic706mk2g 2x4cx250b 4x9el elvation mgf1302 - 50: jst245 p50vdg 2x3-500z 2x6el,04/05 M0BPQ,IO91WP,,,EX G7ACQ G5YC,,50: 400W 5el 144: 7el 400W 432: 13el 120W 1296 19el 50w,05/09 M0CQZ,IN69UW,,,Expedition,,,09/00 M0CTP,IO93,,,,,,03/02 M0EME,IO93GF,EME,,,,432: FT847 4x 19el 100W,09/05 M0IKB,IO94SG,,,,,,11/06 M0ITY,JO01BS,,,OK2ITY OK2IT G6UT,,2m - 15+2x13+4x4el QRO / 70cm - 200w - 23el / 6m - QRO + 5el,11/07 M0MIG,IO90WX,,,,,,10/06 M0VHF,IO82VF,,,,,FT847 JST245 3CX800 8877 - 50: 5el - 144: 10el,10/02 M1DRK,IO93US,,,,,50: TS60 5el 90W,01/02 M1GSM,IO94BU,,,,,144: 150W 8el,08/03 M5FUN,JO00DX,,,ex 2E0ATF+2E1GOM,,144: TR751E 100W 12el,03/04 M5MUF,IO92JP,,,ex GU6AJE,,IC202 IC706 various transverters,09/03 MI/DL1YMK,IO74DU,EME,,EXPEDITION,,,06/09 MI0AYR,IO64VQ,,,,,144: TR9130 150W 19el,04/05 MI0JST,IO65SE,,,,,144: IC910 100W 10el,06/05 MI0KAM,IO65PE,,,,,,06/05 MM0BQI,IO85KX,,,,,50: 100W 5el - 144: 13el,03/00 MM0CCC,IO85MW,,,,,144: FT1000MP TVVF144A 17el 100W,05/04 MM0CEZ,IO75XU,,,,,IC910 IC775DSP Transverter,03/04 MM0DQP,IO88KI,,,,,100W,05/04 MM0KOS,IO85CR,EME,,EX MM3KOS,,ICOM 290D MK2,07/07 MM0MMK,IO85EV,,,,,,06/05 MM1BXF,IO76PA,,,,,,01/03 MM3ENW,IO85BS,,,,,,03/05 MM5AJW,IO88KI,,,,,144: 100W 11el Vargaarda,01/08 MM5DWW,IO89ID,,,ex MM1MVJ,,KENWOOD TR751/TS690 100W 11el,04/04 MS0FNR,IO88KK,,,,,,12/04 MW0HMV,IO71XT,,,2W0CDJ,,FT2000 & EXPERT 1K 6M - IC910X 2M 70CM 23CM - TS2000 with TRC410sl & te 0650g,06/09 N0AB,EM28,,,,,,01/03 N0AE,EN51,,,,,,01/03 N0AJU,EN11,,,,,,01/03 N0AKC,EN44GU,EME,,,,144: 4x 18el 1KW 222: 350W 16el,10/05 N0ATV,EN34JX,,,,,,01/03 N0BTN,EN21,,,,,,01/03 N0CIH,EN42,,,,,,01/03 N0CKK,EN34,,,,,,01/03 N0DAG,EM29QF,,,,,,01/03 N0DQS,EN22GD,,,,,,07/01 N0DY,EN42FA,,,,,,01/03 N0EC,DN70LF,,,,,50: 1KW - 144: 1-5KW - 222: 120W - 432: 1KW - 902: 200W - 1296: 100W - 2304: 15W - 3456: 1W - 10G: 1W,01/01 N0ECI,EM37,,,,,,01/03 N0EOQ,EM24,,,,,,01/03 N0FFO,EM17,,,,,,01/03 N0FQW,EM39,,,,,,01/03 N0GPH,EM48,,,,,,01/03 N0GXA,EN13QH,,,,,144: 1KW preamp 18el,01/98 N0GXN,EM48,,,,,,01/03 N0HJZ,EN34FV,,,,,144: TS700S 200W preamp 12el,01/01 N0HKT,EM17,,,,,,01/03 N0HZ,EN34,,,,,,01/03 N0ICV,EN52XA,,,,,,01/04 N0IDT,EN10,,,,,,01/03 N0IS,EM48,,,,,,01/03 N0IT,EM48RN,,,,,144: 170W,01/01 N0JCF,EN35,,,,,,01/03 N0JEQ,EM27,,,,,,01/03 N0JK,EM17,,,,,,01/03 N0KE,DM69,,,,,,01/03 N0KEV,EM17,,,,,,01/03 N0KIS,EN10QT,,,,,,01/03 N0KM,DM67VR,,,,,,01/97 N0KN,EM28,,,,,,01/03 N0KQY,DM98GK,EME,,,,144: 15/19dbd antenna 1KW,02/01 N0LIK,EM48,,,,,,01/03 N0LL,EM09,,,,,,01/01 N0LNO,EN42,,,,,,01/03 N0LRJ,DM78,,,,,,01/03 N0NAS,EN35,,,,,,01/03 N0NEG,EM29,,,,,,01/03 N0NHS,DN70LF,,,,,,01/03 N0OIB,EN35,,,,,,01/03 N0OYQ,EN25,,,,,,01/03 N0PB,EM39WO,,,,,,11/01 N0PJU,EN41,,,,,,01/03 N0POH,DM79OP,,,,,,01/01 N0QBF,EM48SR,,,,,,01/03 N0REN,EN34,,,,,,01/03 N0RHL,EN10RT,,,,,,01/03 N0RQ,EM13RG,,,,,144: Icom IC-746PRO,06/06 N0SBU,EN35,,,,,,01/03 N0SHR,EN26,,,,,,01/03 N0SRQ,EN18,,,,,,01/03 N0SWV,DM79,,,,,144: 170W 2x16el - 432: 35W 2x18el - 1296: 60W Rhombic Array,05/98 N0TOU,EM29,,,,,,01/03 N0TVJ,FM03UW,EME,,,,,10/05 N0UGY,DM79,,,,,,01/03 N0UK,EN34JV,,,,,50: 10W KLM661 - 144: TS930/DEM Tvtr 300W K1FO-12 - 222: TS820/HB Tvtr Amp,07/01 N0US,EN10,,,,,,01/03 N0UU,EM18,,,,,,01/03 N0VSB,DM79RJ,,,,,50: 1KW 7el - 144: 1.5KW 18el MGF- 222: 200W 23el MGF- 432: 200W 38el MGF- 902: 25W 4x33el - 1296:50W 2x55el,01/02 N0WJY,EN10QT,,,,,,01/03 N0WVU,DM79HV,,,,,,01/03 N0WX,EN34,,,,,,01/03 N0XKS,EM29,,,,,,01/03 N0XPI,EM29,,,,,,01/03 N0YGM,DM78OV,,,,,,01/03 N0YK,DM98MG,EME,,,,144: 18xxx with 350W,05/06 N0YNP,DN81CW,,,,,,01/03 N0ZEB,DM79,,,,,,01/03 N0ZKK,EM29,,,,,,01/03 N1BUG,FN55MF,EME,,,,50: 400W 5el 144: 1500W 20el Yagi 222: 500W 24el 432: 550W 22el,11/04 N1CPE,FN42QH,,,,,,01/03 N1EKV,FN42JK,,,,,,01/03 N1GMV,FM05TU,,,,,,01/04 N1GOD,FN41VQ,,,,,,01/03 N1HOQ,FN41TP,EME,,,,144: 12el 400W,11/06 N1IW,EN75ve,,, N1JEZ,FN34IM,,,,,FT736 FT847 FT920 FT290 DSP10 ACOM1006,05/07 N1KI,EM75WX,EME,,WB4KMH,,144: 4x 12el 1500W - 432: 2x 9wl 1000W,04/07 N1KTM,FN41SR,,,,,144: 1kw- 2x2M9,01/97 N1LDY,FN41JR,,,,,IC-746 IC-910 DEMI-222 DEMI-903,01/04 N1LF,EM63NF,,,,,IC-910H 736R Icom 746 Pro,04/08 N1MIW,FN41EQ,,,,,FT847 FT736,05/08 N1NCO,FN42GL,,,,,,01/03 N1OFZ,FN31HL,,,,,FT-847 SDR-1000 FT-726R,03/07 N1RWY,FN54NO,,,,,50: 100W 3el CC - 144: 800W 18el - 222: 350W FO16 - 432: 350W 2xFO22,01/01 N1RZ,FN44EI,,,,,,07/01 N1SZ,FM19NE,,,,,IC 756Pro,10/07 N1VQR,FN42JJ,,,,,,01/03 N2CEI,FN20,,,,,,01/03 N2FKF,FN30BR,,,,,,01/04 N2HLT,FN12LN,EME,,,,,01/03 N2IQ,FN13TD,EME,,,,,01/03 N2IQU,FN13,,,,,,01/03 N2JDQ,FN20VG,,,KB2GWI,,IC820H,09/07 N2JMH,FN13AF,,,,,,01/03 N2JQR,FN13,,,,,50: 500W 5el,01/01 N2JR,FM18CP,,,,,50: 100W 5el,09/01 N2KW,FN03XE,,,,,,01/03 N2MB,FN30CO,,,,,,01/03 N2MCY,FN30AR,,,,,,01/03 N2MKT,FN13LK,,,,,,01/03 N2MSS,FN31AA,,,,,,01/03 N2NEP,FN13EB,,,,,,01/03 N2NZI,FN32,,,,,,01/03 N2OLA,FN12MM,,,,,,01/03 N2OTO,FN30CR,,,,,144: TS850 LT2SMKII 200W 4el,01/01 N2PC,DM78QX,,,,,,01/03 N2UO,FM06BG,EME,,,,All homebrew,09/07 N2VR,FN12SK,EME,,ex KC2EAL,,144: 4x13B2,08/01 N2WK,FN03XE,EME,,,,144: 1-5kw 4x2.2 wl full elv. MGF1302,10/00 N2WLS,FN02RQ,,,,,,01/03 N2XK,FN20RF,,,K2WKA,,FT1000MP MKV with FTV-1000 6M Icom IC706MKIIG 2M/70CM,11/08 N3AHF,FN20SF,,,,,,01/03 N3AJX,EN71KC,,,,,,01/03 N3FA,FN21,EME,,ex WB3FAA,,144: LT2S 8877 700W 4x12el M2 - 432: FT736 SP7000 3CX800 700W 4x19el,10/99 N3JNP,EN91,,,,,,01/03 N3KKM,EM28,,,,,,01/03 N3LL,EL86,EME,, N3NDY,DM09CJ,,,,,Kenwood TS-60,03/08 N3OPM,FM19PH,,,,,,01/01 N3RN,FN11WH,,,,,144: 500W 16el KLM,07/01 N3TAD,FM28FH,,,,,TS-480HX FT-847,09/07 N3WT,FM19EJ,,,,,,01/04 N3WXW,FN20CE,,,,,,01/03 N3XI,EN90XJ,,,,,,01/03 N3YGA,FN20BI,,,,,50: 160W 4el - 144: 170W 14el,01/98 N4BH,EM95OC,EME,,,,144: 400W 17el,10/08 N4CAG,EM86PI,,,,,,01/03 N4EQT,EM77,,,,,,01/03 N4FRE,EL06LL,,,,,,01/03 N4GJV,EM95PS,EME,,,,,05/98 N4GKO,EM65LO,,,,,144: FT736r 350W 2M18XXX,01/01 N4HN,EM95OE,,,,,TS-2000X,05/09 N4HY,FN20RG,,,,,,01/04 N4IP,EM73WV,,,,,,01/03 N4IPB,EM66,,,,,,01/03 N4IS,EL96UB,,,ex AB6WC- PY2DP....,,FT1000MP+Trsv 144: 350W 18el M2,06/01 N4KWX,FM08WF,,,,,,01/97 N4KZ,EM77GT,,,,,,09/01 N4LXB,EM83VL,,,,,,01/03 N4MW,FM17KN,EME,,,,,01/03 N4OYS,EM65,,,,,,01/03 N4PZ,EN52,EME,,,,,04/97 N4SC,EN72,,,,,,11/04 N4TWX,EL89TW,,,,,50: 5el 75W - 144: 15el 150W Preamp,01/01 N4UK,EM84XP,EME,,,,144: 1KW 13/13el - 222: 750W 23elM2 - 432: 750W 4x19el,01/97 N4WI,FM14IL,,,,,,01/04 N4XD,FM05,,,,,144: TS700SP 160W,01/01 N4ZKR,EM65,,,,,,01/03 N4ZRW,EM17KN,,,,,,01/03 N5AC,EM13QC,,,WD5EMG,,Many,01/08 N5AF,EM20,,,,,,01/03 N5AHD,EL17,,,,,,01/03 N5AMA,EL29,,,,,,01/03 N5ARS,EM26,,,,,,01/03 N5AXJ,EM86,,,,,,01/03 N5BA,EL29FX,,,,,144: 150W 18el,07/05 N5BHO,EM31,,,,,,01/03 N5BHX,EL09,,,,,,01/03 N5BHZ,EM22,,,,,,01/03 N5BLK,EL29,EME,,,,,02/05 N5BLZ,EM20AB,EME,,temp. QRT now 10/05,,144: IC746 to homebrew 8877 PA 1 5/8 Andrews 4x 28 Xpol preamp 0.3db,09/06 N5BO,EM60UR,EME,,,,6M5X/100 2x2m9/400w 70cm 13wl/200w,04/07 N5DL,EM36,,,,,,01/03 N5EIL,EM12UR,EME,,,,144: 15el 50W,05/05 N5EM,EL29,,,,,,01/03 N5FV,EM03,,,,,,01/03 N5HHS,EL29,,,,,,01/03 N5IRM,EM13RC,EME,,,,144: 2x 12el 300W,01/06 N5IS,DM96,,,,,,01/03 N5ITO,EM12MR,EME,,ex KA9JLU,,144: 17el 750W - 432: 4x 18el 250W,11/05 N5JM,EL49,,,,,,01/03 N5KDA,EM41HM,EME,,,,144: 4 x 17el 1.5 KW,09/07 N5KWB,EM32QB,,,,,,01/03 N5MP,EM12,,,,,,01/03 N5MWS,EM13,,,,,,01/03 N5MYH,EM32,,,,,,01/03 N5NDV,EM15,,,,,,01/03 N5NSH,EM14,,,,,,01/03 N5OCP,EM15,,,,,,01/03 N5OSK,EM25FI,EME,,,,144: 26B2 350W,06/05 N5QGH,EM13QC,,,,,,01/03 N5QS,EM45,,,,,,01/03 N5QT,EM45,,,,,,01/03 N5RZ,DM81XW,,,,,,01/03 N5SAL,EM28,,,,,,01/03 N5SIX,EM42XI,EME,,,,144: 500W 9el,06/05 N5TML,EM14,,,,,,01/03 N5TQB,EM31PJ,,,,,,01/03 N5TX,EL09,,,,,,01/03 N5WS,EL09RU,,,,,,01/01 N5XCX,EL09,,,,,,01/03 N5XU,EM10DG,,,,,,01/01 N5YLS,EM54,,,,,,01/03 N5YSM,EM15,,,,,,01/03 N5ZLU,DM95,,,,,,01/03 N5ZWO,EM32,,,,,,01/03 N6CL,EM26,,,,,,01/03 N6CV,DM04UF,,,,,,01/03 N6CW,DM12JT,EME,,,,50: 7el 1KW 144: 4x 9el 1KW,12/07 N6DHN,CM98,,,,,50: 150W 4el - 144: 150W 22el - 432: 100W 40el,01/98 N6ENU,DM04,,,,,144: 270W 13el Yagi - 50: 100W 7el,01/01 N6HV,DM04,,,,,,01/03 N6KBX,CM98,,,,,50: 400W 2x5el - 144: 350W 4x17el - 432: 175W 2x33el,01/97 N6KK,DM03TV,EME,,,,144: 2x 5wl Ant 1500W,10/06 N6KMR,CM97MO,,,,,,01/03 N6NB,DM05,,,,,,01/03 N6OVP,CM87,EME,,,,,01/03 N6PYI,DM05KJ,,,,,,01/03 N6RA,CM87SR,,,,,,01/03 N6RJM,DM14CP,,,,,50: 1KW 9el - 144: 1-5KW 4x18el - 222: 350W 2x7wl - 432: 1KW 2x13wl,01/01 N6RMJ,DM14CP,EME,,,,IC-910H / IC-756Pro,05/07 N6RPM,DM04UA,,,,,,01/03 N6RZ,CM87WB,,,,,144: 1KW 17B2,01/01 N6SPP,CM97AX,EME,,,,10ele 2m IC746 FT857D Elk,10/07 N6TQS,CM87UU,,,,,,01/03 N6TX,FN11LH,EME,,,,,01/03 N6VHF,DM13,,,,,,01/01 N6VMO,CM94SP,EME,,,,144: 2x 17el 350W,08/06 N6YM,CM88XF,,,,,,01/01 N6ZE,DM04NE,EME,,ex K1FJM,,IC756 PRO II 50: 100W 5el - 144: 8930Amp 2M5wl Preamp - 222: 75W 10el - 432: 75W 21el - 1296: 20W 33el,08/03 N7AM,CN87QN,EME,,,,,08/03 N7AMA,DM33,,,,,,01/03 N7ART,CN87,EME,,,,,01/03 N7AVK,CN84,,,,,,01/03 N7BSN,CN87QQ,,,,,,01/03 N7CZ,DN47HM,,,ex KQ7K,,FT736 IC706,01/02 N7DMA,DM42NL,,,,,,01/03 N7EMD,DM26JE,,,,,,01/03 N7EY,CN96QO,,,,,,01/03 N7IJ,DN44GB,,,,,,01/03 N7LQ,DN01FA,EME,,ex WB7TDI,,432: 1.5KW 4 x FO-25's,06/00 N7MWV,CN87VQ,,,,,144: 250W CC3219,01/01 N7QJP,DM33VM,,,,,,01/98 N7SKT,DM33SN,,,,,,01/01 N7WNX,CN83OW,EME,,,,,12/04 N7WS,DM42JH,,,,,144: 8877 17el GaAs,01/01 N7YAG,CN85,,,,,144: FT736r 300W 11el KLM,01/98 N7YAP,DN07HJ,,,,,,08/01 N8AIA,EN82KL,,,,,,01/03 N8ASB,EM89,,,,,,01/03 N8AXA,EM79UP,EME,,,,,01/03 N8BSG,EN82,,,,,,01/03 N8BXP,EN81,,,,,,01/03 N8CGY,EN74OH,,,,,,01/01 N8CJG,EN84FG,EME,,,,,03/05 N8CJK,EN84FG,EME,,,,,11/05 N8CQ,FM05OT,EME,,,,,01/04 N8DJB,EN81FJ,EME,,,,,01/03 N8ITP,EN81XF,,,,,,01/03 N8JMK,EN90,,,,,,01/03 N8KWX,EN62AD,,,,,,01/03 N8LCU,EN72,,,,,,01/03 N8NPX,EM79XR,,,,,,01/03 N8OC,EN83AO,EME,,,,50: 100Watts 7el hb - 144: 1500Watts 17ele M2 5wl,08/05 N8PUM,EN66DL,,,,,144: 200W 2x17B2,01/98 N8PVT,EN64,,,,,,01/03 N8QOD,EN79,,,,,,01/03 N8TDL,EN90BN,,,,,,01/03 N8VES,EM79VT,,,,,,01/03 N8ZAT,EM79,EME,,,,,01/00 N8ZAW,EM79,,,,,,01/03 N8ZM,EM79,,,,,,01/03 N9AB,EN52XG,EME,,,,432: 16x 22el 1KW,09/05 N9AQ,EN51,,,,,,01/03 N9AU,EN62BX,,,,,,01/03 N9AZC,EM68,,,,,,01/03 N9AZZ,EM57MV,,,,,,01/03 N9BD,EM28,,,,,,01/03 N9BJG,EM57,,,,,,01/03 N9BMH,EN62,,,,,,01/03 N9BX,EN52VL,EME,,,,144: 2x 18el 1KW,01/07 N9CIQ,EN44,,,,,,01/01 N9DCA,EN71GG,,,,,,01/03 N9DG,EN53BJ,,,,,,01/03 N9EGT,EN70,EME,,,,,02/05 N9EMC,EN52UI,,,,,,01/03 N9ESH,EN52XB,,,,,,01/03 N9FH,EN63,,,,,,01/03 N9FTC,EL79IX,,,,,IC 756 PRO IC746,10/07 N9GVF,EN62,,,,,,01/03 N9HF,EN52,,,,,,01/03 N9IJ,EN52XI,,,,,,01/03 N9IW,EN65KF,EME,,,,50: 3 yagi,02/09 N9JIM,CM87XI,,,ex WB9AJZ,,50: 9el 150W - 144: 16el 700W - 432: 21el 50W - 1296: 55el 30W - 10G: 1M 8W,11/03 N9KC,EN52,EME,,,,,01/03 N9LAG,EM57,,,,,,01/03 N9LHD,EN62BA,,,,,,01/03 N9LR,EN50DU,EME,,,,144: 4x 8el 1500W,08/05 N9MEH,EN44,,,,,,01/03 N9MSG,EN50ES,,,,,,01/03 N9MYK,EN-53W,,,,,,01/03 N9NHC,EN61DU,,,,,,01/03 N9NJY,EM58AM,,,,,,01/03 N9NOQ,EN51,,,,,,01/03 N9OO,EN62,,,,,,01/03 N9PXI,EN61CU,,,,,,01/03 N9RLA,EM78CQ,,,,,,01/03 N9SBV,EN61UQ,,,,,,01/03 N9SS,EN50DP,EME,,,,TS-2000,08/07 N9SU,EN62BI,EME,,,,2x 3wl 400W,02/09 N9TZL,EN52SH,,,,,,01/03 N9UDO,EN53DL,,,,,,01/03 N9UM,EN52wg,,, N9UUR,EN63,,,,,,01/03 N9VSV,EN63,,,,,,01/03 N9WWR,EN62CS,,,,,,01/03 N9XG,EN60VL,EME,,W9/G4FDX LX2GB,,144: 4x 18el 1.5KW,03/09 N9XIX,EN53,,,,,,01/03 N9YKE,EN62,,,,,,01/03 NA0IA,EN42FB,,,,,,01/03 NA2NY,FN23DV,,,NA1VT,,FT-1000 MP MK5 FTV-1000 IC-910,09/07 NA3T,FM05LW,EME,,,,,10/97 NA4AL,EM63OF,,,,,IC746 FT817,08/01 NA4M,EM10DP,,,,,,01/03 NA4N,FM18,EME,,,,,01/03 NA6E,CN82,EME,,,,,01/03 NA6MF,CM87,EME,,,,,04/08 NA7D,DM43AS,,,,,,01/03 NB2V,FN30,,,,,,01/03 NC1I,FN32OB,EME,,,,,01/05 NC1T,FN32,,,,,,01/03 ND2X,EL09,,,,,,01/03 NE0P,EM04,,,,,,09/01 NE1H,EM84AC,,,,,,01/03 NE7O,FN53HX,,,,,,01/05 NE8I,EN82JM,,,,,,06/04 NF0Q,EM48,,,,,,01/03 NF2V,FN33KT,EME,,,,144: 4x 17el 350W,09/07 NF5B,EL29,,,,,,01/03 NF7P,DM09GH,EME,,,,,01/03 NG9R,EN40LA,,,KC9OA,,,07/08 NG9Y,EM78JT,EME,,,,144: 4x 13el 400W,10/08 NH2CM,QK23KL,EME,,,,144: 4x 13el CushCraft 900W,12/05 NI4Z,EL98HJ,,,,,,01/03 NI6G,DM06,,,,,,01/03 NJ0C,DM78,,,,,,01/03 NJ0U,EN71IB,EME,,,,144: 2x 18el 500W,05/05 NJ0X,EM29,,,,,,01/03 NJ2L,FN13,,,,,,01/03 NJ7A,DN30XP,,,,,144: 170W 16LBX Preamp - 222: 120W 5wL,01/01 NK5F,DM65,,,,,,01/03 NK7J,DM33,,,,,,01/01 NK8Q,FN20KL,,,,,144: 170W 13el - 50: 7W 5el,01/01 NL7F,BP64DV,EME,,,,,01/03 NL7Z,BP51EN,EME,,,,FT920,03/05 NL997,JO22XU,EME,,,,FT726 + Mutek TH F7E 8el 2wl @2m 10 el @70cm,05/09 NM1A,EL96UG,,,,,IC-746,02/08 NM5BB,DM65UV,,,,,,01/03 NM5X,EM26,,,,,,01/03 NM9H,EM59CD,,,,,,01/03 NN5DX,DM80NV,,,,,,01/03 NN6RF,CM87UW,,,,,,01/03 NN7J,CN85,,,ex WA7BJU,,,01/05 NN7K,DM09CN,,,EX K7ZFG,,50 FT847 MK6 7el M2,05/08 NN9K,EN41,,,,,,01/98 NO3I,EN90,EME,,KD3CC,,FT-1000 MP FT-920 FT-736R,05/07 NP4B,FK67,EME,,,,,01/03 NQ2O,FN13,EME,,EX DL1SM,,,05/01 NQ7R,DM42DT,EME,,,,144: 120W 2.5wl Ant,10/06 NR0X,EN42JH,,,ex DL4AT,,144: 12el,07/05 NR5A,DN84LC,,,,,,01/03 NR6E,CM88,,,,,,01/03 NS4W,EM76VC,,,,,500: 1KW - 144: 1kw 2.5wl - 222: 400W - 432: 150W,01/01 NS7K,DN31XC,,,,,,01/04 NS7N,CN87,,,,,,01/03 NT0V,EN08OC,,,,,,01/03 NT0Z,FN31,,,,,,01/03 NT4P,EM95KF,,,,,,01/04 NT9E,EN52VI,,,K9DMW WB9SES,,756ProII (HF+6)-Elecraft XV Series Xvrtrs for 144-220-432,02/09 NU3E,FN20PB,,,WB3GNB,,TS-2000,09/07 NU5O,EM55,,,,,,01/03 NU7Z,CN87RT,,,,,,01/93 NU8I,DM43AN,,,,,144: IC706 1KW,01/99 NV3Z,FM15,,,,,,01/03 NW0X,EM40,,,,,,01/03 NW7O,DM26,,,,,,01/03 NX2Q,FN20WV,,,,,,01/03 NX7U,DM43DI,,,,,,01/03 NX8M,EM79PE,,,,,,01/01 NZ1I,FN41AI,,,KA1KOJ,,Yaesu FT-897 Yaesu FT-736R,04/07 NZ5N,EL96UC,EME,,,,144: 9el 500W,12/07 NZ5P,DM95,,,,,,01/03 OA4CVT,FH17KW,EME,,,,144: 15el 160W,04/06 OA4O,FH17FV,EME,,,,432: 8m dish 400W,07/05 OD5NJ,KM73TW,,,,,,01/03 OD5RAK,KM74WH,,,Expedition - QSL via F6FLV,,50: 6el - 144: 17el+ PA,05/98 OE1ILW/3,JN77XX,EME,,,,,04/09 OE1MCU/P,JN88HE,,,,,144: 700W 13el,01/09 OE1MSB,JN88DF,,,,,,10/03 OE1SMC,JN88DD,,,,,IC7000,03/08 OE1SOW,JN88FF,EME,,,,6m: 100W 5el - 2m: IC-756 Pro II + DB6NT-Transverter 400W 4x13el SP-2000 or IC-821 130W 13-El. Yagi SP-2000,05/08 OE1XVC,JN88ED,,,,,144: 2x11el- 432: 2x21el gd Pwr,03/98 OE3A,JN77XX,EME,,,,,04/09 OE3CEW,JN88,,,,,,01/88 OE3FVU,JN78VE,EME,,= PE0WGA,,144: 4x10el XPol 1500W MGF1302 - No 432 MHz - 50: 100W / 6 ele,07/08 OE3HHB,JN87AQ,,,,,FT847 50: 100W 5el - 144: 50W 17el GaAs - 432: 50W 19el,07/99 OE3JPC,JN88EW,EME,,2ND QTH,,,06/08 OE3JTB,JN78QN,,,,,144: 17B2 160W,08/05 OE3MWS,JN88DC,,,,,50: 100W 7el - 144: TR751 1-2KW 2x17el MGF1302 - 432: TS811 400W,01/05 OE3NFC,JN88,,,,,,01/93 OE3OBC,JN88,EME,,,,,01/94 OE3OKS,JN87AR,,,,,,12/98 OE3R,JN88FD,,,Contest Call,,,01/96 OE3SJA,JN88GH,EME,,= OE1SJA SAME OPERATOR,,144: 1x19 250W 432: 4x19 250W LNA 1296: 2mDish H-feed 80W LNA,01/09 OE3UP,JN87CT,EME,,,,,01/93 OE3XAC,JN88FD,,,,,,11/96 OE3XMU,JN78XD,,,,,144: 150W 15el,06/02 OE4KLU,JN87KS,,,,,,01/96 OE4WHG,JN87BB,,,ex OE6WHG,,50: F850 100W 6el,05/06 OE5EFM,JN78,EME,,,,,01/94 OE5EYM,JN68SK,EME,,,,,08/98 OE5FD,JN68SC,,,,,,01/03 OE5FDM,JN68SC,,,,,50: FT-847 5el-Yagi 100W - 144: FT-847 9el 100W,08/02 OE5JFL,JN68RL,EME,,,,,01/94 OE5KE,JN78,,,,,,05/02 OE5MPL,JN78CJ,EME,,,,FT847 - 50: GS35 100W 5el Y 144: 2x 4CX250R 800W 4x 13elY MGF1302 432: 600W 4x 21 el MGF1302,05/07 OE5VHL,JN68SI,EME,,,,,01/94 OE5VRL,JN78DK,,,,,,01/97 OE5WHN,JN67TR,,,,,IC756 IC970 100W,05/09 OE6AHD,JN76RS,,,,,,12/95 OE6BMG,JN77JE,,,,,,07/00 OE6IWG,JN77PK,EME,,,,144: GS35b 4x10el (2-2wl) MGF1302,06/07 OE6JGD,JN77QC,,,,,,12/95 OE6KDG,JN77JF,,,,,,07/03 OE6NLD,JN76SS,,,,,,01/93 OE6RKE,JN76OT,EME,,,,,03/06 OE6XHF,JN76RS,EME,,,,,01/94 OE75SOW,JN88FF,EME,,SpecialCall,,50: IC736 100W 5el - 144: IC821H 300W 2x13el or 2xBW - 432: 120W 2x19el - 1296: 10W 2x26el,03/01 OE8CIQ,JN76FU,,,,,,08/02 OE8HBQ,JN76KP,,,,,,05/04 OE8HWQ,JN76,,,,,,03/00 OE8OLK,JN76DM,,,,,144: FT817 30W 6el,07/04 OE9ERC,JN47VL,EME,,,,,02/05 OE9HHV,JN47,EME,,,,,01/94 OE9XXI,JN47UL,,,,,,01/03 OF8UV,KP34VJ,EME,,SpecialCall,,144: Ft225RD 130W 2x14el BF981,11/97 OG6MAZ,KP21IG,,,SpecialCall,,144: FT767GX 4CX350 200W 15el,01/00 OG8HDL,KP34VJ,,,SpecialCall,,144: 130W 2x14el BF981,01/00 OG8UV,KP34VJ,EME,,SpecialCall,,144: FT225RD 130W 2x14el BF981,01/00 OH0BT,KO09KW,,,Expedition,,,01/92 OH0JFB,JP90XI,,,,,144: 2x17el 800W,04/04 OH0JN,KP00BB,,,,,IC706MKIIG,02/09 OH0LIZ,KO09KW,,,Expedition,,144: 180W 2x23el,05/98 OH0N,KP00,,,EXPEDITION,,,07/01 OH0V,KP00,,,Expedition,,,07/01 OH10TA,KP10DH,,,EXPEDITION,,,04/07 OH1AK,KP01TE,,,,,,12/03 OH1AYQ,KP12JB,,,,,,08/98 OH1BAP,KP12AA,,,Expedition,,,01/91 OH1CF,KP00TC,,,,,,01/94 OH1FA,KP10PL,EME,,,,,10/02 OH1HSC,KP10CM,,,,,144: TR9130 60W MGF1302 17el,01/01 OH1JCS,KP10AE,EME,,,,144: 2x 10el 20W,03/05 OH1JJC,KP10DK,,,,,,01/04 OH1JV,KP10DK,,,,,144: IC7800 TR144J 4x 6el HL500V Preamp 0.35db,02/07 OH1LEU,KP01UE,,,,,50: 150W 8el,09/03 OH1LSQ,KP03SD,,,,,144: 100W ant-3WL,01/02 OH1MDR,KP01VJ,EME,,= OH1TM,,,07/07 OH1ND,KP00XL,EME,,,,,01/07 OH1NOR,KP00XL,EME,,,,144: 2x 3.9wl antennas,04/05 OH1QC,KP10MU,,,,,,01/89 OH1TM,KP01VJ,EME,,= OH1MDR,,,07/07 OH1XT,KP01UK,,,,,FT736r 50: 8el 150W - 144: 300W 2x15el MGF1302,11/01 OH1XTK,KP01UK,,,,,,01/03 OH1ZAA,KP01,,,,,,01/95 OH2AUK,KO19TX,,,,,,01/94 OH2AV,KP20JD,,,ex OH9NLO,,,01/94 OH2AXH,KP20OK,EME,,,,,08/00 OH2BAP,KP20PP,EME,,,,,01/93 OH2BC,KP20,EME,,,,,03/05 OH2BNH,KP20LG,EME,,,,,05/00 OH2BYJ,KP10QO,EME,,,,144: ft-897 120 wtts ant 6wl yagi,04/08 OH2DG,KP30CK,EME,,,,DISH 8m,03/07 OH2HEJ,KP20ME,,,,,144: 4el 100W,08/05 OH2JRR,KP20HE,,,,,,10/05 OH2KKP,KP20MH,,,,,,11/95 OH2LAK,KP10XL,,,,,50: FT847 FT817,11/01 OH2LHE,KP11MK,EME,,OH1IT,,IC-910 4x 9el 500W,02/08 OH2MFE,KP20JE,,,,,IC-575H IC-275E 170W FT-817 100W FT-736,04/02 OH2MOH,KP30CR,,,,,,05/04 OH2MPH,KP20KD,,,,,,01/04 OH2NHP,KP20IF,,,,,144: IC970E 3CX800 MGF1302 preamp 2x15el,01/01 OH2NY,KP20CM,,,,,144: IC202 RE035XB 320W Preamp 4x9el,04/03 OH2PO,KP10XH,EME,,,,,11/97 OH2TI,KP20KE,EME,,,,,01/01 OH2Z,KP30CR,,,,,,08/04 OH3AWW,KP11VJ,EME,,2nd QTH,,144: 150W 9el,09/04 OH3BHL,KP10RR,,,,,IC746+ACOM1000 144: 100W 4x5el - 50: 200W 6el,08/03 OH3BZY,KP10XP,,,,,,01/92 OH3EX,KP20JR,,,,,,01/94 OH3HOV,KP20MQ,EME,,= OH3JP,,144: ft847 sr-200 17b2 Ant,01/07 OH3JP,KP20MQ,EME,,= OH3HOV,,144: ft847 sr-200 17b2 Ant,01/07 OH3KLJ,KP21PH,EME,,,,144: 300W 4x 10el,08/08 OH3KRH,KP21EB,,,,,,12/05 OH3LPW,KP11WK,EME,,,,,01/94 OH3NWQ,KP11WL,,,,,50: FT847 + GU74b,10/07 OH3QN,KP20TX,,,,,FT-897,02/08 OH3UW,KP21FA,EME,,,,144: 2x 17el 250W,04/06 OH3VJ,KP21,,,SilentKey,,,01/94 OH3XR,KP11TH,,,= OH9XX,,IC746,08/04 OH4EA,KP32MG,EME,,,,144: FT2000D + XV-144 + LNA 0.4 dB ANT 4 x 18 el 5WL,04/08 OH4GGW,KP31PQ,,,,,,12/04 OH4HXK,KP21UM,,,,,,05/02 OH4LA,KP20LG,EME,,,,144: 4x 17el 600W,07/06 OH4MS,KP31WL,EME,,OH8LRB,,IC-910H 144: 15el X 100W 432: 24el X 75W 1296: 4x32el 10W,12/07 OH5A,KP53NE,,,,,,09/99 OH5AG,KP31,,,,,,02/98 OH5HCJ,KP41EC,EME,,,,144: 4x 11el 600W,10/06 OH5HMV,KP41EC,EME,,,,,04/05 OH5IY,KP30HV,EME,,,,144: 1KW 4x15el - 432: 750W 8x21el,12/03 OH5KJQ,KP41JC,,,,,FT847 144: 19el yagi 160W - 50: 4el 100W,10/98 OH5KNG,KP30GU,EME,,,,144: 4x 9el yagis 1.2kw,03/06 OH5LID,KP41KL,EME,,,,,07/09 OH5LIZ,KP30HW,,,EXPEDITION,,144: 180W- 2x23el,08/01 OH5LK,KP30ON,EME,,,,144: 1KW 4x15el,04/04 OH5YW,KP30FU,,,,,,05/98 OH6AA,KP03SD,,,,,144: 2x12el,12/05 OH6AAO,KP14,,,Expedition,,,01/93 OH6AI,KP13MW,,,,,,11/00 OH6AW,KP03,,,,,,06/02 OH6DD,KP22,EME,,qrv only at OH2TI,,,01/94 OH6GDX,KP02QU,,,,,144: 60W 2x12el CueDee,08/03 OH6HFX,KP14RA,EME,,,,FT847 400W 2x12el,06/07 OH6JKW,KP02RN,,,,,FT847,12/06 OH6JW,KP12AJ,EME,,ex OH6MPC,,FT847 IC7400 600W,09/03 OH6JYW,KP22OR,EME,,,,Yaesu FT-817,01/08 OH6KTL,KP02OJ,EME,,,,50: 6el 150W - 144: FT847+GI46B 4x15el 100W,05/06 OH6LRL,KP13,,,,,,11/00 OH6M,KP12KR,,,,,,06/04 OH6MAZ,KP21IG,EME,,ex OH2MAZ,,144: FT847 4CX350 250W 2x15el MGF1302,12/04 OH6MPC,KP12AJ,,,= OH6JW,,FT847 50: 200W - 144: 2KW - 432: 250W,01/02 OH6MRD,KP12EP,,,,,,12/02 OH6MSZ,KP21XU,,,,,,08/99 OH6MW,KP20IM,,,,,144: 200W 11el,08/05 OH6NDD,KP23VH,,,Expedition,,,01/94 OH6NVQ,KP13IP,EME,,,,,02/05 OH6PA,KP02PL,,,,,,08/04 OH6QU,KP03SD,,,,,FT-1000MP + Kuhne TR 144 H + GU-78B 16 el (4.5 WL) at 44 m agl/50 m,09/05 OH6UW,KP22WH,EME,,,,,07/07 OH6ZZ,KP12BO,EME,,,,TS790E 2x 32XPol,02/04 OH7AXB,KP32WH,,,,,,10/05 OH7EU,KP33MQ,,,,,,01/95 OH7HXH,KP53HG,EME,,,,144: 8x 3wl Antenna,08/07 OH7LIX,KP43JQ,,,,,,09/95 OH7MA,KP52EL,,,,,144: 4 x 10el,11/99 OH7PI,KP32XG,EME,,,,,01/05 OH7RJ,KP32TV,,,,,,08/02 OH7TE,KP20IE,,,EX OH9NLO,,JUMA TRX2A 50: 200W - 144: 4el 300W - 1296: 10W - 5600: 3W,04/09 OH7TX,KP32UV,,,,,144: FT847 50W 20el,07/05 OH7UV,KP33MQ,,,,,50:Yaesu FT950 100W Dipole or 4 el (HB9CV 4),05/09 OH7X,KP20IE,,,OH7PS,,IC-7700,06/08 OH8GEJ,KP25QC,,,,,,05/02 OH8HDL,KP34VJ,,,,,144: 130W 2x14el BF981,08/99 OH8HTG,KP34DI,,,,,144: 9el 80W 432: 19el 80w,04/07 OH8LRB,KP24HQ,EME,,OH4MS,,icom ic-910H,10/07 OH8MFH,KP34UG,,,NO MS Skeds!,,144: TR751A 15el 6WU,01/00 OH8MGK,KP23PQ,,,,,,03/08 OH8N,KP34VJ,,,Expedition - QSL via OH8UV,,,12/98 OH8NW,KP24SX,,,,,,01/85 OH8NXE,KP25SB,,,,,144: TM255E Preamp 160W 2x14el,01/02 OH8R,KP24HQ,,,ex OH8LBR,,144: 200W 8el,04/05 OH8SW,KP22UP,,,,,,11/04 OH8UV,KP34VJ,,,,,50: Yaesu FT950 100 W 6el (JP6m6) 144: FT225RD 350W 4CX250R 2x14el (QDee) BF981,05/09 OH8VJ,KP22UN,,,,,,11/04 OH9AB,KP26,,,not qrv now,,,10/05 OH9AEM,KN08AJ,,,Expedition,,,01/93 OH9GDT,KP26VL,,,,,144: 4 Yagis,04/06 OH9MNO,KP46BI,,,Expedition,,,01/91 OH9MTY,KP46BI,,,Expedition,,FT847 - 144: 700W 6x9el,06/04 OH9NDD,KP26UM,,,,,FT847 144: 150W 4x15el preamp,08/03 OH9NMS,KP36GA,EME,,,,,08/06 OH9O,KP12BO,EME,,QSL VIA OH8MSM,,IC7400 gd power 15el 16el 37el loop,12/05 OH9SCL,KP46BI,EME,,Expedition,,TR751/FT847 144: 6x9el LY 700W,06/01 OI7UV,KP33MQ,,,SpecialCall,,,12/95 OI8UV,KP34VJ,EME,,SpecialCall,,144: Ft225RD 130W 2x14el BF981,01/97 OJ0LA,JP90NH,EME,,Expedition,,144: 9el 150W,09/06 OK1AXH,JO70UR,,,,,,01/97 OK1CA,JO70GM,EME,,,,,03/08 OK1CDJ,JO70VA,,,,,144: 250W 17el MGF1302,08/06 OK1COM,JN79GX,,,,,,01/03 OK1CT,JN69TR,,,ex OK1URY,,144: 250W 2x16el CF300 - 50: 20W 5el,05/00 OK1CU,JO80CF,EME,,,,144: 4x 17el 700W,09/06 OK1DCF,JO80BJ,,,,,,04/02 OK1DFC,JN79GW,EME,,,,144: 750W 18elM2 10m dish - 432: 750W 38elM2 10m dish - 1296: 100W 10m dish and up,08/06 OK1DIG,JO60XJ,EME,,,,144: 4x17el M2 GS35 1.5KW MGF1302,04/02 OK1DKZ,JN69XP,,,,,144: IC275H 100W MGF1302 11el,11/01 OK1DO,JO60JD,,,ex OK1DDO,,IC7400 144: 150W 7el 50: 100W 5el,03/06 OK1DQA,JO60TC,,,,,,08/99 OK1DRY,JN79OW,,,,,,07/02 OK1DST,JN79EX,EME,,,,,04/07 OK1DTC,JO60TO,,,,,,08/03 OK1DUO,JO80CA,,,,,HF: TS120S 500W 3el - 144: IC746 PA0MS ant,08/01 OK1FAV,JO60CK,,,,,,01/97 OK1FD,JO60CF,EME,,ex OK1FFD,,50: IC706 5el QUAD - 144: 300W 4CX250 10el 7ZB,08/06 OK1FF,JN78GR,EME,,,,,01/95 OK1FM,JN69QQ,,,not qrv MS now! (01/01),,144: 250W 17el MGF1302,11/02 OK1FXX,JO70WL,,,,,144: TS790E 2xGI7B 3KW 4x17el F9FT 0-4db NF - 432: TS790E GI7B 1-5KW 4x21el 0-9db NF DSP,01/90 OK1FZA,JO70FC,,,,,,01/92 OK1HAG,JN79,,,,,,01/97 OK1IBL,JO60CG,,,,,,01/91 OK1IN,JO60XA,EME,,ex OK1UND,,TS515 FT221 144: 16el 100W Preamp,02/06 OK1KEI,JO60JL,,,,,,01/97 OK1KF,JN79IW,,,OK1DFM,,,01/09 OK1KHI,JO70ED,,,,,,05/02 OK1KIR,JN79,EME,,,,,01/94 OK1KJB,JN79IO,,,,,,08/99 OK1KKH,JN79,,,,,,01/93 OK1KRQ,JN69QR,EME,,,,144: 400W 17el M2 CF300,10/99 OK1KRY,JN69TR,,,,,50: 20W 5el - 144: 250W 2x16el CF300,04/05 OK1KT,JO70WE,,,,,FT 847 - 50: 20W 5 el - 144: 600 W 15 el CueDee - 432: 50W 21 el F9FT,05/07 OK1MAC,JN79PQ,,,,,,08/08 OK1MDK,JN79TO,,,,,,06/08 OK1MS,JO70SL,EME,,,,,10/08 OK1MZM,JN69PR,,,,,144: 300W 9el 360m asl,06/04 OK1NH,JN69UH,,,,,144: 10el 20W,05/04 OK1RK,JO70KD,EME,,,,144: FT847 250W 10el DK7ZB,08/05 OK1TEH,JO70FD,EME,,,,144: FT847 1KW 10el - 432: 500W 23el K1FO,12/06 OK1UGA,JO80DD,,,,,144: Icom 821 + 200W + 5WL,01/07 OK1UWA,JN69QT,EME,,,,1296: par 2.4m 180W 0-45db NF,08/00 OK1VAO,JO70EB,EME,,OL1VAO,,,02/09 OK1VBN,JN78,,,,,,01/97 OK1VHF,JO70EB,,,,,144: 10ml M2 1200W - 432: 6m Tonna 600W - 1296: 5m Tonna 10W,01/05 OK1VHH,JO70CK,,,,,144: 20W,04/02 OK1VKC,JN79OW,,,,,,05/02 OK1VSC,JN79OW,,,,,144: 100W 7el Quad,03/02 OK1VT,JN79IX,,,,,,07/01 OK1VVT,JO60TP,,,OL4VTD,,TS-790,04/07 OK1WCF,JO80BJ,,,,,144: R2CW PA 100W 2x 16el F9FT,04/04 OK1WN,JN69LK,,,,,144: 100W 16el CF300,10/01 OK1XXT,JO70GA,,,,,,04/02 OK1YA,JO70GC,EME,,,,144: 4x 11el 1500W,03/06 OK1YK,JN78GX,EME,,ex OK1AYK,,FT 847 144: 750W 4x 17el MGF1302 - 432: 1kW 5m dish MGF 1801,10/06 OK2AB,JN89TI,,,,,,12/03 OK2BDS,JN79WF,,,,,144: BMT226 100W 10el.7ZB - 432:IC706MKIIG 100W 2x 23el.7ZB - 1296: FT817+transv. 50W 32el.9BV,04/06 OK2BMU,JN99BU,,,EX OL7AVX,,TM255E/TM455E + PA 150W 144: 13 el 432: 21el,04/07 OK2BON,JO70,,,,,,07/02 OK2BRD,JN99ET,,,,,IC706MKIIG,08/03 OK2BXE,JN89SJ,,,,,144: FT847 100W 16el MGF1302 - 10368: 1.5W Dish,07/01 OK2DL,JN89AO,EME,,,,,06/02 OK2GM,JN99GM,,,ex OK2BZQ,,FT897D+LNA,03/07 OK2ILA,JN89WW,,,,,,12/08 OK2IT,JN99BO,,,= M0ITY G6UT - ex OK2ITY,,TRX210 Snezka 750W 2x4el Yagi,07/06 OK2KET,JN89JN,,,,,,03/01 OK2KUB,JN89,,,,,,01/93 OK2KZR,JN89BO,EME,,,,,01/93 OK2MWR,JN99HQ,,,,,144: IC706 100W 14el PBM,08/00 OK2PM,JN99AO,,,ex OK2BGQ,,IC706 FT736,08/03 OK2PMA,JN89HF,,,,,FT-897,10/07 OK2PMG,JN89SJ,,,,,144: FT847 100W 16el MGF1302 - 10368: 1.5W Dish,07/01 OK2PMS,JN89WW,,,,,FT847 300W DK7ZB,04/08 OK2PMX,JN88IW,,,,,IC706,04/04 OK2POI,JN99AJ,EME,,,,,07/08 OK2PTC,JN89MM,,,,,,08/04 OK2PWY,JN89IW,,,,,,05/06 OK2PZW,JN89HI,,,,,,01/03 OK2QI,JO80OC,,,,,,01/95 OK2SBL,JN99HQ,,,,,,08/00 OK2SGY,JN89SS,,,,,,08/96 OK2SLC,JN89ED,,,,,,04/05 OK2TUH,JN89RB,EME,,,,144: 7el 200W,03/06 OK2UGG,JN89EN,,,,,,12/01 OK2UZL,JN79UG,EME,,,,144: 4x 9el 50W,12/05 OK2VMD,JN89HI,,,,,,01/94 OK2VSO,JN99AJ,EME,,,,,03/06 OK2WO,JN89IH,,,,,,04/04 OK2XPJ,JN89,,,,,,04/02 OK2YT,JN88IW,,,ex OK2PMN,,144: 100W 15el,08/06 OK2ZAW,JN79XN,EME,,,,144: IC-706 12el ZZ212 300W GI7bt,02/05 OK2ZC,JN89HI,,,OK2BEE,,ICOM 746-PRO 100W 7EL DK7ZB YAGI,05/08 OK2ZI,JN89AD,,,EX OK2XTE,,,06/08 OK2ZW,JN89HI,,,ex OK2PZW,,,08/02 OK2ZZ,JN89DF,,,,,,08/96 OK3RM,JN69MS,,,,,,12/07 OK5ACR,JO60NX,,,,,,05/00 OK5TK,JO70MB,EME,,OK1UAK,,100W 10el 2.2wl Yagi,05/07 OK6TW,JN89,,,,,,08/08 OK8BXF,JO70VA,,,,,,06/04 OL2O,JN79IO,,,,,,12/01 OL5MS,JN69MJ,,,,,,08/99 OM2TW,JN88UG,,,,,144: IC746 17el LY,07/01 OM3AU,KN08OR,,,SilentKey,,,01/93 OM3BC,JN98VG,EME,,EX OM3WBC,,144: 1KW 4x 12el 432: 1kW 4x 23el,06/08 OM3KDX,KN19DB,,,Expedition,,144: IC-746 GS35b 4x6 el. 18el. M2 - 10368: 5W 60cm dish,06/04 OM3KKF,JN88MD,,,,,144: 700W 13el,07/05 OM3KMY,JN88MK,,,ex OK3KMY,,,01/94 OM3LQ,JN88MK,,,ex OK3LQ,,,08/01 OM3TZZ,JN88TI,,,,,FT847+PA 400W+7el. QUAD,12/08 OM4EX,JN98HS,,,,,,07/04 OM5CM,JN98DF,EME,,EX OK3YCM OM3YCM OM7YCM,,IC910H 144 MHz: 100W 9el 432 MHz: 75W 18el 1296 MHz: 10W 55el,10/07 OM5KM,JN98AH,,,,,,01/02 OM5UM,JN98EO,,,,,,04/02 OM7AC,JN98NN,,,EX OM3YIH OK3YIH,,FT225RD FT780 FT897D/2x10el DK7ZB/2m+17el DK7ZB/70cm+crossyagi for satellite,07/08 OM7AQ,JN98UI,EME,,OL9CQN OK3TEM OM3TEM,,144: FT897D 600W 16el F9FT MGF1302 - 432: 400W 4x18el or 4x21el MGF1302 - 1296/2320: 10W 1m dish,03/07 OM7CM,JN98NR,EME,,OK3CKJ,,144: FT - 847 50W F9FT - 9el,04/07 OM7JG,JN98TI,,,,,,01/02 OM9AAW,JN98EP,,,Expedition,,,07/95 OM9M,KN18AM,,,,,,08/99 ON1AEN,JO10UV,,,,,,01/03 ON1AFN,JO20SW,,,,,144: FT290r 150W,09/98 ON1ALJ,JO10SS,,,,,144: TS790E 3CX800 MGF1302 10el 9BV - 432: TS790E 400W 2x18el 9BV MGF1302,11/01 ON1DDC,JO21UD,,,,,144: 16el 800W,08/97 ON1RR,JO11XA,,,ex ON1AXO,,FT100,09/01 ON2MRT,JO21MB,,,,,,07/03 ON3VHF,JO20EM,,,ex ON2VHF,,144: ft290r microset RV45,08/05 ON4ADC,JO21FA,,,,,,09/03 ON4AMX,JO20KV,,,= OQ4U,,144: IC910 2x8wl GS35b,05/08 ON4ARF,JO10MV,,,,,,05/02 ON4ASL,JO21,,,,,,01/94 ON4AVJ,JO11UB,,,,,144: IC275HE 3CX800A7 17el MGF1302,10/04 ON4BBD,JO21NA,,,ex ON1CBT,,FT736 TS440S,01/04 ON4BG,JO10WM,,,,,,12/01 ON4CHP,JO21JD,,,,,144: 150W B5016G 11el FX224 SP2000,10/07 ON4CJU,JO20,,,,,,11/01 ON4DPX,JO10NT,EME,,ex ON1DPX,,FT736 FT847 144: 4x 3wl 1KW - 432: 2x 26el 9BV - 1296: 4x 44el 6WU,09/06 ON4FI,JO20IV,,,,,144: 3CX800 600W 13el MGF1302,12/99 ON4GG,JO20AR,EME,,,,50: 9el MGF1302,04/05 ON4IMM,JO11UB,,,EX ON1IM,,144: TS440S + LT2S MK2 Preamp PA3BIY design 4x7el 3CX800A7 600W,02/08 ON4IQ,JO20AR,EME,,ex ON4ANT,,50: 4x 6M9KHW FT1000mpMkV FTV1000 - 144: 8x 2M18XXX TS2000X GS35,05/05 ON4KEP,JO10WI,,,,,,08/08 ON4KHG,JO10XO,EME,,EX ON1KHN,,144 : 300W 4 WL MGF1302,10/08 ON4KNG,JO20DU,EME,,,,,01/04 ON4KST,JO20HI,,,,,,05/04 ON4LDP,JO10UM,,,,,50: HM tsvter 2m/6m 30W GP - 144: 150W 13el MGF1302 432: 35W 21el - 1296: tsvter DB6NT 20W FHX35,06/02 ON4LN,JO20IV,EME,,EX ON4CGP,,144: IC-746/IC-7000 GS35b 17ele M� MGF1302,05/07 ON4LUC,JO20TM,EME,,,,144: ft1000mp transverter 800w hf max amplifier 13 el Flexa (soon 4x 13el),01/04 ON4MU,JO20SS,EME,,ex ON1KPW,,Ft847 150W 0.5dB 3wl,08/03 ON4PS,JO20KQ,,,,,Yaesu Ft 847 + 8874,03/07 ON4QQ,JO20FS,,,,,,07/95 ON5AEN,JO10VW,,,EX ON1AEN,,FT225RD TS770e FT690RII,04/08 ON5GS,JO20SS,,,EX ON1DLL,,144: IC821 600W 15el,08/08 ON5LGS,JO10OS,,,ex ON1LGS 3X1SG,,,09/03 ON5UE,JO11LF,,,EX ON1BCD,,TS2000DX,05/07 ON6AB,JO21EC,,,,,TS930S,03/04 ON6JY,JO20WP,EME,,,,HF + Transverters,10/05 ON6NL,JO21UE,,,,,144: IC756PRO 125W 13el DL6WU,04/08 ON6OD,JO20HW,,,,,,01/93 ON7EH,JO20FV,EME,,,,,08/04 ON7KGK,JO20BL,,,ON1KGK,,k3,02/08 ON7RB,JO11VA,EME,,,,144: 8x13el hor. & 8x12e vert. Full Az/El 1KW,11/03 ON7UC,JO11ND,EME,,,,144: 3CX800A7 4x16el 4.2wl,05/07 ON7YK,JO20XL,,,,,TS2000,04/07 OQ1AEN,JO10VW,,,,,FT225RD TS770E,11/01 OQ4U,JO20KV,,,= ON4AMX,,144: IC910 2x8wl GS35b,05/08 OT4G,JO10XO,,,= ON4KHG,,144 : 300W 4 WL MGF1302 - 1296 : 10W 35 el,04/06 OU9S,JO54TU,EME,,= 5P9S OZ9S OV9S 5Q9S,,See www.oz9s.dk (click rig) for actual and updated info,05/07 OV9S,JO54TU,EME,,= 5P9S OU9S OZ9S 5Q9S,,See www.oz9s.dk (click rig) for actual and updated info,05/07 OX2K,GP47TA,EME,,,,144: 4x5wl - 432: 4x28el - 1296: 32m dish,05/00 OY3JE,IP62OA,EME,,,,,03/08 OY4TN,IP62NB,,,,,144: 300W 8el,03/08 OY9JD,IP62OA,,,,,,01/04 OZ0JX,JO54VU,,,,,IC761 IC756 50: 5el F9FT,01/03 OZ1ALS,JO45VA,,,,,144: 2x9el 500W,04/07 OZ1CDE,JO65CO,,,,,50: FT847 6el 850W,02/02 OZ1CLL,JO65GQ,,,,,,06/05 OZ1CTZ,JO46OE,,,,,,01/02 OZ1DJJ,JO65HP,EME,,,,FT847 IC756pro2 transverters,04/07 OZ1DPR,JO45IG,,,,,50: Yaesu FT-920 GS35b 1000W 5el,08/03 OZ1FDH,JO65CS,,,,,,07/99 OZ1FF,JO45BO,,,OZ9KY,,1296: 145W LNA 1 5m dish 2320: 125W LNA 1 5m dish - 5760: 7W 1 5m dish - 10368: 65cm dish 2W- 24048: 65 cm dish 2W,09/07 OZ1FTU,JO55WW,,,,,,01/93 OZ1GEH,JO65AL,EME,,,,,01/93 OZ1HNE,JO57,EME,,,,144: 4x18el crossyagi 8877,12/05 OZ1HTB,JO75,,,,,,11/96 OZ1IEP,JO55XU,EME,,,,50: 100W 6el - 144: FT736 1KW 2x11el - 432: 600W 2x23el,03/05 OZ1IPU,JO57JH,,,,,,01/93 OZ1JFK,JO47WL,,,,,,10/08 OZ1JVX,JO46DS,,,,,,01/96 OZ1LPR,JO44UW,EME,,,,144: IC756PROII LT2SMK2 Transv. 2x M2XP20 Xpol full elevation 1KW YL1050 PA or TH347 PA,04/06 OZ1MAX,JO57GI,,,,,Kenwood TS-2000,03/05 OZ1MFP,JO55SK,EME,,,,kenwood ts 790e ts 2000e,08/08 OZ1PIF,JO65AN,EME,,= 5Q2M,,FT847 50: 100W 4el - 144: 350W 17el Preamp,02/09 OZ2BZQ,JN99GM,,,,,,05/06 OZ2EEZ,JO45,,,,,,01/03 OZ2ELA,JO65,,,,,,01/97 OZ2M,JO65FR,EME,,,,,07/09 OZ2TF,JO46PE,EME,,,,144: IC271h 750W 4x9el Preamp,10/02 OZ3K,JO45TL,,,EX OZ1ELF,,IC746PRO,04/07 OZ3TT,JO66CB,EME,,ex OZ1IUK,,144: ICOM 275H Amp. CS31 M2 18 el MGF130,12/04 OZ4MM,JO55GH,EME,,,,10m dish,10/02 OZ4VV,JO46QU,EME,,,,50:1000w 9el - 144:1000 Watt 15el MGF1302,02/05 OZ50MHZ,JO55EJ,,,OZ1IZB G0DJJ & OZ7M,,,03/08 OZ5AGJ,JO47IA,,,,,144: ICOM 706MK2G 160W 9Elem 2.2wl,05/07 OZ5IQ,JO65AO,EME,,OZ1EME AS WELL STILL OK,,,06/07 OZ5QF,JO45VB,,,,,,10/95 OZ6ABA,JO57DJ,EME,,,,144: FT736r Mutek Preamp 1KW 15el DJ9BV,08/08 OZ6EI,JO45TT,,,,,,08/01 OZ6OL,JO65DJ,EME,,,,,09/06 OZ6OM,JO55EJ,,,OZ1IZB G0DJJ & OZ7M,,,03/08 OZ7LE,JO45,,,= DJ3LE,,144: 9el 400W,03/01 OZ7U,JO45RL,,,ex OZ1BVW,,TS940S FT847,09/06 OZ7Z,JO44VW,EME,,OZ1DSK,,144: FT736 500W WX20 Yagi,03/07 OZ8FR,JO55SK,EME,,,,,03/05 OZ8ZS,JO55RT,EME,,,,144: IC706 GI7b 400W 17 elm,02/08 OZ9AAR,JO45TS,EME,,qrt EME,,8x15el Crossyagis- 1KW,12/99 OZ9FW,JO65CO,,,,,Homebrew 1kW(2m 70cm),04/07 OZ9S,JO54TU,EME,,= 5P9S OU9S OV9S 5Q9S,,See www.oz9s.dk (click rig) for actual and updated info,05/07 PA0AVS,JO22,EME,,,,,01/94 PA0BAT,JO31FX,EME,,,,,01/03 PA0BWL,JO21SS,,,,,,08/08 PA0C,JO22FD,EME,,ex PA0CIS,,Ft 847 QBL 5/3500 0.4 dB NF 2x 17 el,02/06 PA0HIP,JO21JO,,,,,,01/93 PA0JMV,JO21PM,EME,,,,144: 1x12 and 4x10 el 2x 3CX800A7 0.18dB NF,01/08 PA0LPE,JO20WW,,,,,50: FT847 7el - 144: IC202 400W 2x11el,01/01 PA0O,JO33HG,,,ex PA0OOS,,,08/03 PA0PVW,JO22VA,,,,,144: 18el M2 3CX800,07/02 PA0RDY,JO22KJ,,,,,144: 500W 15el MGF1302,10/99 PA0RLS,JO22,,,,,,01/93 PA0TBR,JO22PI,,,ZS4BU,,,05/07 PA0V,JO33II,EME,,ex PA0OOM,,144: 6 x DJ9BV 4 WL Xpol 8 BLF278 Mos fet PA MGF 1801 preamp,04/05 PA0WWM,JO22FE,,,,,144: 160W 9el MGF1302,04/01 PA0ZH,JO33AB,EME,,,,,01/07 PA1AW,JO21GU,EME,,EX PA3DMH PC1A PE1JUP PD0LGF,,144: IC7400 + 11el F9FT. 50: IC756Pro+ACOM10000+5 el.,05/09 PA1BVM,JO21RI,,,ex PE1BVM,,50: IC202 Transv. dipol - 144: FT-225 IC 746 MGF1302 2x17ele,05/03 PA1GYS,JO22WW,EME,,EX PA3BXH PE1DWI PD0HKC,,144: TS850 TR144H 2 x 2MXP20 700W,03/08 PA1LA,JO32LS,EME,,EX PE1RWS,,144: FT857d - LNA atf54143 - 9 ele. vargarda - GS35b QRO.,12/08 PA1T,JO33JF,EME,,EX PA9KT PA3FBN,,144: FT1000MP MV TR144H 8877 4x17el M2- 50: 1y. 70cm: 1y. 23: 1.2dish,08/07 PA1VW,JO22IN,,,EX PE1OLD AND PA3GNF,,FT-897 100 Watt PA 16JXX2 4.4 wave13 m ASL,12/08 PA25FMF,JO22XW,EME,,SpecialCall,,144: 4x 12el DK7ZB 600W no preamp,10/06 PA2CHR,JO32DB,EME,,,,144: 2x 16el XPol,01/08 PA2DW,JO22GD,EME,,ex PA2DWH- PE0DWH- GM5CJF,,144: TenTec Trvt 400W(2x4CX250b) 10el,09/04 PA2GER,JO21EW,EME,,,,,09/99 PA2KW,JO22SB,,,ex PE1FYJ PA3BZL,,144: 1x16el KLM 1.2KW MGF1302,10/04 PA2M,JO21IP,,,ex PA3DYS,,FT847 144: 2x blf278 9el 432: 16 el,11/04 PA2MRT,JO32HI,EME,,PD0HP,,144: 4x 7el DK7ZB ME1500V with GS35B 1200 W Icom 910H icom 7400 YAESU FT1000d,08/07 PA2V,JO22IM,EME,,ex PA2VST,,Homebrew + IC756pro2 & IC706mk2g,03/07 PA2XHF,JO32HN,,,PA2B,,,04/09 PA3BGM,JO33CE,,,,,,08/99 PA3BIY,JO22EB,,,,,144: 400W 2x9el,03/02 PA3BZO,JO21RS,EME,,,,,08/03 PA3CEE,JO33JI,EME,,PE1FMG PD0GIK,,144: 600W 2x 5wl M� MGF1302,08/07 PA3CMC,JO21WI,EME,,ex PA9LB,,144: LT2s mod. MGF1801 PA8877 4x 16el X-pole I0JXX or FT736 Mutek or TS2000 MGF1302 PA 500W 13 el. DJ9BV,04/06 PA3COB,JO32MF,EME,,,,144Mhz only: FT756proIII - Kuhne TR144H +40 - 4X7el - 1Kw,02/08 PA3CPI,JO22JW,,,,,FT847,08/08 PA3CSG,JO21WD,EME,,,,,01/07 PA3CWI,JO11TK,EME,,,,144: FT736 6x12 el M2 MGF1302 8877-Ampl,10/06 PA3CWN,JO33AH,EME,,,,144: 600 W 4x 9el 7ZB,03/07 PA3DOL,JO22MT,EME,,,,144: 17el 3cx800 amplifier abt 700w EME 4x9el DK7ZB abt 700w,09/08 PA3DRL,JO21PS,,,,,K2 + XV144 Elecraft 4x 7el dk7zb GI7-b preamp 20 dB nf 0.8,05/07 PA3DUU,JO21IU,,,,,,01/93 PA3DZL,JO21HM,EME,,,,144: 4x17el 3.6ld MGF1302 EME Pwr - 432: 2x21el EME Pwr - 1296: 2.5m Dish 150W,03/07 PA3EAQ,JO31CI,,,,,FT767 50MHz: 100 watt 3 el 144MHz: 100 watt 7 el,08/08 PA3ECU,JO32CF,EME,,PD0NEN PE1JSB,,144: Ft847 8877 2x8Xpol DK7ZB LNA .19Db,12/08 PA3EON,JO21,,,,,,01/93 PA3EPX,JO22RC,,,,,,01/93 PA3EQS,JO22TI,,,,,,01/93 PA3FOC,JO21FW,EME,,,,144: TenTec Paragon LT2S 17el (2x17el) PA MGF1302,07/05 PA3FPQ,JO22XE,EME,,PE1GXU PD0JNN,,144: TS850 + TR144H 2x10 elem. DJ9BV H + V pol. 1KW,01/08 PA3FSA,JO23RF,EME,,,,,10/05 PA3FVE,JO21WG,,,,,,01/93 PA3FXB,JO33KC,EME,,PE1CIO,,12 el DK7ZB 350 W,06/08 PA3FXW,JO22QD,,,,,,01/93 PA3FYF,JO22DB,,,,,,01/93 PA3FYG,JO22SI,,,PE1GTE,,TS870,01/08 PA3GBR,JO32LH,,,,,,01/93 PA3GCV,JO32LU,EME,,,,50: FT897 7el 9.40 m Boom 21m asl 1kw,02/09 PA3GVC,JO22MU,,,,,,12/04 PA3HJG,JO32BG,,,,,TS2000 50: Dipol - 144: 13el,08/03 PA4EME,JO20WX,EME,,PE1FEY - ON8YA - ON4AUD - PA3GIJ,,144: 0.22 dB 2.5 kW 3.2 wl DJ9BV,12/07 PA4PS,JO33GH,EME,,PD2PS PE2PS,,144: 4x10 from YU7EF,01/09 PA4VHF,JO32JE,,,EX PA3FJY,,50: 100W 7elM2 - 144: TS850 LT2S 400W 17B2,12/08 PA5DD,JO22IC,,,ex PA3HDD OZ1DOQ,,144: GS35b 15ele CUE DEE,01/05 PA5KM,JO11WL,EME,,,,144: IC 910 H +8877 2x12 EME 1x9 TR MS AU ES,09/07 PA5M,JO21BS,,,ex PA5MD PA3GST,,,08/03 PA5MS,JO21RQ,EME,,EX PE1OGF,,144: 11el GS35b 400W MGF1302,05/07 PA60SHB,JO21OS,,,SpecialCall,,,12/04 PA6BN,JO13OF,,,Expedition - QSL via PA3BIY,,,07/98 PA6MS,JO32QF,,,SpecialCall,,,10/96 PA6T,JO32GF,,,SpecialCall,,,12/98 PA7AL,JO23VG,,,,,,12/04 PA7C,JO32GF,,,ex PA2TAB,,50: 100W 6el - 144: R2CW GS31b 400W 14el MGF1302,09/03 PA7FA,JO21PT,EME,,EX PE1OUC,,IC756-III,04/07 PA7FE,JO22OC,,,ex PA3BFM,,50: 6el leg pwr,03/99 PA7FM,JO21,,,ex PE1PZS,,,08/00 PA7N,JO23WB,EME,,PE1LZX,,IC-910H TS-480HX,01/09 PA7PYR,JO21UQ,,,ex PD0PYR,,TS450SAT HF: FB33 - 144: 25W 2x17el Tonna - 432: 25W 23el,09/03 PA7RP,JO22EC,EME,,ex PA3BBA,,144: 400 Watt (GS35b) 17 el F9FT,01/06 PA7WM,JO23TA,,,ex PA3DWD,,,03/99 PA9RX,JO32MT,EME,,,,144: FT847 4x17el 200W,04/07 PA9T,JO22KA,,,PD0TKS,,,06/09 PB0AHX,JO22,EME,,,,icom 910H for 2-70-23 and icom7400 for 50mhz,04/08 PB0ALS,JO21RV,,,,,,01/93 PB1TT,JO22FF,,,ex PA3EFC,,144: 100W 10el CueDee,09/01 PC7M,JO32GF,EME,,ex PA2TAB PE0TAB,,50 MHz : FT847/120W/6el - 144 MHz : FT847/400W/14el,04/06 PD0ANQ,JO31EW,,,,,,11/01 PD0CIF,JO32KT,,,,,FT-847 and FT-817,07/07 PD0HCV,JO31FW,,,,,IC821 144: 15el QD 50W 432: 18el M2,08/05 PD0ORT,JO23RE,,,,,,03/06 PD1AIQ,JO22RM,,,,,144: 25W 4x9el,04/03 PD1ALD,JO32FI,,,,,Yaesu FT897- Kenwood TR9130- Yaesu FT817,06/03 PD2GCM,JO21ET,,,,,FT847,11/04 PD2TW,JO33FI,,,,,,04/09 PD2VDV,JO23RF,,,,,,08/04 PD3AHW,JO32LF,,,,,,05/05 PE1AHX,JO21OS,,,,,,02/05 PE1BTX,JO22XW,EME,,,,144: 4x 12el DK7ZB 600W no preamp,10/06 PE1DAB,JO23RD,,,,,144: 2x 8el JXX 100Wh,12/08 PE1DCD,JO21FU,,,,,,05/03 PE1GNP,JO31IX,,,,,,05/03 PE1GUR,JO22TH,,,,,144: 16el 350W,07/05 PE1HWO,JO21GV,,,,,144: FT101ZD + TRV FT225RD PA 17el MGF1302,04/07 PE1IKX,JO11TM,,,,,144: 400W 15el Quedee,06/05 PE1ITR,JO21QK,EME,,,,144: 2x10el 200W 3SK183 432: 2x16el GS35b 0 35db - 70: rx 5el - 222: rx 10el 3SK183 - 1296: 10W 26el,09/07 PE1L,JO23WF,EME,,EX PE1LCH,,2 x 14 dk7zb,04/07 PE1LWT,JO22VA,EME,,,,144: 300W 2x3wl-Xpol,07/05 PE1M,JO23XE,,,ex PE1MCD,,,08/03 PE1MVJ,JO21FV,,,,,,11/96 PE1OID,JO33KI,EME,,,,144: TR 751e 160W 10el,10/05 PE1OPK,JO23UE,,,PD0NXG,,IC821/IC202,12/08 PE1PQX,JO32LS,,,ex PD0RJH,,,06/06 PE1RBG,JO21,,,,,,11/01 PE1RDP,JO21QK,EME,,,,FT847 144: 2x 10el DK7ZB GS35 MGF1801,09/07 PE1RLF,JO32CG,,,,,144: TS850 LT2S 4CX250F 10el,05/07 PE1RMN,JO11WR,EME,,,,FT857 FT847,08/07 PE1RWS,JO32BM,,,,,,01/05 PE2PE,JO21LU,,,ex PE1BNK,,144: 400W 15el Cue Dee - 50: 20W 6 El Cue Dee - HF: 10W,03/07 PE2RMI,JO23MH,,,,,,01/02 PE2S,JO31AU,EME,,EX PE2SVN,,FT1000 LT2s BLF278/3CX800,03/08 PE9DX,JO33MD,EME,,,,144: TS711 600W 10 elm dk7zb VV atf 54143,10/07 PE9GG,JO33NA,,,ex PE1PJG,,,04/05 PE9HNE,JO22FB,EME,,ex PD1ABZ,,TS711,09/03 PI4NYV,JO32EH,,,,,144: 400W 9el or 17el (/p JO32FI),12/96 PI9CAM,JO32ET,EME,,,,,01/09 PJ4CX,FK52UD,EME,,EXPEDITION,,,05/07 PJ4EME,FK52UD,EME,,EXPEDITION,,,05/07 PJ4LS,FK52UD,EME,,EXPEDITION,,,05/07 PP2KR,GH53IG,EME,,,,TR9130,02/05 PP5XX,GG53QW,EME,,,,144: 150W single yagi,05/08 PR8ZX,GI64GL,EME,,EX CT1DYX,,144: 13 el dl6wu 150w mgf1312,05/07 PT7ZAP,HI06RG,EME,,,,TS-2000,05/08 PT7ZAP,HI06RG,EME,,,,TS-2000,05/08 PT9FH,GH11EA,EME,,,,144: 4x12el 2x4CX250,04/00 PT9PA,GG49DF,,,,,,04/08 PY0FF,HI36TD,EME,,,,144: 4x 12el 100W,05/08 PY1EPU,GG87KD,EME,,,,144: 6 x 16el 160W FT 1000 Mark V Field + Transvert,02/08 PY1IAM,GG87,EME,,,,,04/04 PY1RO,GG87LB,EME,,,,IC706MKIIg 1000W 8 over 8 el,09/06 PY2ALR,GG66UB,EME,,,,,08/08 PY2ANE,GG66SH,EME,,,,,05/05 PY2BL,GG67LE,EME,,ex ZZ2RED,,144: TS2000 IC910 2x 15el 1KW,05706 PY2BS,GG66PJ,,,,,,09/08 PY2BVF,GG66TB,EME,,,,144: 4x 10el 1KW - 432: 2x 28el 800W,08/05 PY2CLL,GG66RF,EME,,,,144: Kachina 505DSP Trvt 4x18el M2 LNA 300W,01/00 PY2NI,GG66RK,EME,,,,,07/01 PY2OC,GG66OT,EME,,,,50: 8el 100W - 144: 12el 160W,08/05 PY2PD,GG66RF,EME,,,,MP1000- LT2S- 4xM2XP28- 3CX800 0-4db,03/99 PY2PLL,GG66RF,EME,,,,144: 750W 16el or 2x15el - TS790A xverters for 432 and 902 and 1.2,03/01 PY2SRB,GG48BC,EME,,,,144: 160W 4x 10el,06/06 PY3CRX,GG66RF,,,,,144: 750W 16el or 2x15el,08/00 PY3FF,GF49IU,EME,,,,,05/05 PY4EPU,GG88PO,EME,,,,YAGI FULL SIZE FOR 14 21 28 50 144 220 440 MHZ,04/06 PY4OG,GG78QQ,EME,,PY4LOG,,4x 12el 1KW,09/07 PY5EW,GG46IP,EME,,,,144: 15el 100W,05/08 PY5ZBU,GG54,EME,,,,,01/00 PY8ELO,GI25AR,,,,,,01/08 PZ5CY,GJ25JT,EME,,,,50: 1x 6el,03/06 R1MVA,KP40GP,EME,,Expedition,,144: 150W,07/99 R1MVW,KP40GP,EME,,EXPEDITION,,144: 2x 9el or 18el 500W - 432: 40el 500W,11/05 R1MVZ,KP40GP,EME,,,,144: 4x14el 1.2KW,10/99 R3VHF,LO16XG,,,SpecialCall,,,01/96 RA0ACM,NO76EB,EME,,,,144: 4x 9el 300W,08/06 RA0CGT,PN78NL,EME,,,,,10/08 RA0FCA,QN16IW,EME,,,,144: 4x 15el Xpol 1KW,11/06 RA0FU,QN16IW,EME,,,,144: 4x 15el Xpol 1KW,04/06 RA0FW,QN16IW,EME,,,,144: 4x 15el Xpol 1KW,11/05 RA1ASA,KP50FB,,,,,,01/76 RA1AY,KP50EA,,,EX UA9KG,,144: 15 el TS2000 GI7B 300 W,04/07 RA1QA,KO99WF,,,,,144: 300W 2 x10el 9BV,12/06 RA1QAX,LO09CC,,,,,144: IC706 10el PA,10/04 RA1QIB,KO99WG,,,,,,11/05 RA1TBH,KO58PN,EME,,,,TS-2000X 100 W 10 el DK7ZB Pre Amp,03/09 RA1TC,KO58ON,,,,,,01/92 RA1TL,KO67,,,,,,05/04 RA1TM,KO67PX,,,,,IC746,11/04 RA1WL,KO47EV,,,,,Kenwood-2000X,03/08 RA1WU,KO47ET,,,,,,05/08 RA1WZ,KO47EV,,,,,,06/09 RA1ZC,KP59JK,EME,,ex UA1ZCG,,IC706MK2 144: 2x10el DJ9BV 1KW,11/01 RA1ZK,KP68MV,,,,,,11/04 RA3AGS,KO85UU,,,,,,01/90 RA3AQ,KO85JE,EME,,,,144: 6x 6.3 wl cross yagi 1500W,05/07 RA3DHK,KO95JH,EME,,,,144: FT-736R Toshiba NB 500W 2x2M12,10/06 RA3DQ,KO85US,,,,,144: IC746 100W 16el,09/01 RA3DQT,KO95JH,,,,,144: FT-736R Toshiba NB 170W 1x2M12,07/06 RA3DRC,KO95AP,,,,,144: FT-847 50Wtts 17el DJ9BV 9.2 m long,03/04 RA3EC,KO82PT,EME,,,,1296: 3m Dish RA3AQ septum feed 200 W output,10/08 RA3EL,KO82AX,,,ex UA3EAT,,144: 50W 16el,03/04 RA3FO,KO86SI,,,,,,01/95 RA3GES,KO92SO,EME,,,,144: 4x 7el 200W,11/05 RA3IM,KO56UM,,,,,,06/04 RA3IS,KO76WU,EME,,EX UA3IFI,,2m: 1 hp 1x19el SM2CEW 5wl crossyagi 70cm: 21F9FT 23cm 2m dish,09/07 RA3LBK,KO65QA,,,,,144: 200W 17el,01/00 RA3LE,KO64AR,EME,,ex UA3LBO,,144: 2x LY Xpols 400W,12/06 RA3LW,KO54MQ,,,UA3LAW,,IC-7000 144:2x7el 432:24el 1296:22el G3JVL and PA,11/08 RA3MR,KO98JC,,,ex UA3MEP,,IC910,08/05 RA3QTT,LO01GQ,,,,,144: GS35 0.5KW 4 x 3.3wl 9BV 0.35db,11/03 RA3TES,LO15WJ,,,,,,11/95 RA3WDK,KO81BR,,,,,144: 60W 11el,04/04 RA3XAL,KO84DM,,,,,,08/05 RA3YCR,KO73DH,EME,,SilentKey,,,01/94 RA4HCN,LO43SL,EME,,,,144: 1KW 4x13el,09/07 RA4HGN,LO53BE,,,,,,08/07 RA4NAK,LO58GH,,,,,,08/08 RA6AAB,KN94UR,EME,,SilentKey,,,01/92 RA6AX,KN95,EME,,,,,04/07 RA6DA,KN96SA,EME,,,,144: 8x 12el 600W,05/06 RA6HHT,LN04WX,EME,,,,144: 16el 1.2KW,06/07 RA6HTT,LN05,,,,,,08/08 RA9CAE,LO97,,,,,,08/08 RA9FMT,LO87BW,EME,,,,,01/06 RA9SO,LO71NS,,,,,,08/96 RA9YDL,MO93HA,EME,,,,,10/08 RA9YMI,NO13VI,EME,,,,144: 16el 250W,01/90 RD3BD,KO85UQ,EME,,,,144: 4x 18el 1500W,04/06 RD3DA,KO85PT,EME,,,,1296: 2m dish 35W,08/06 RD3WAL,KO71IM,,,,,144: 100w 14el yagi(DK7ZB) Kenwood TS-790a,04/09 RK1NA,KP71ET,EME,,ex UN1CD - QSL via DK3WG,,144: FT847 100W 14el circular,04/04 RK1QWA,LO09AC,,,EXPEDITION,,,08/07 RK2FWA,KO04FT,EME,,ex UZ2FWA,,,04/04 RK3AF,KO75WO,,,EX UZ3AF- UA3AJK,,144: IC746 2xGI7B 450W ANT - DK7ZB 5WL,09/07 RK3FG,KO86HP,EME,,,,144: 4x 14el 1200W,03/05 RK3MWI,KO98JB,,,Expedition,,144: 100W 10el,01/07 RK3PWJ,KO83XC,,,QSL via UA3PNO,,,05/04 RK3WKB,KO81BR,,,,,,05/06 RK3WWF,KO72QI,EME,,,,144: 4x 13el 1KW 432: 4x 26el 300W,09/06 RK6GC,LN05AU,EME,,,,144: 50W 2x 12el,02/08 RK6LXN,KN97LE,,,,,,06/06 RK6MC,KN97LE,EME,,ex UA9XEA,,144: 4x 12el 1KW - 432: 8x23 el GS35B/1.1kW PA MGF1302 preamp,08/06 RK9CC,MO06RT,EME,,QSL via DK3WG,,6x4lb 9BV GS35b,03/04 RK9DK,MO09CS,EME,,,,,10/07 RL1P,KO49VW,,,SpecialCall,,144: TR-751 300w 16el DJ9BV,05/03 RL1X,KO59EW,,,SpecialCall,,,05/03 RL3DO,KO85WV,EME,,,,,08/08 RM3T,LO16XG,,,SpecialCall,,,08/97 RN3QKG,KO91OM,,,,,,08/08 RN3QLU,KO91OO,EME,,,,,06/05 RN3QO,KO91OO,,,,,,07/05 RN3QQ,LO00BK,,,,,144: 15el DJ9BV 100W,06/99 RN4AT,LN29LA,EME,,ex RA4AOR,,144: 4x 14elX-Yagi 1.5KW,10/06 RN4HFE,LO42XX,,,,,,09/07 RN4NF,LO58GH,,,,,,08/08 RN6BL,KN95,EME,,,,144: 80W 16el,01/08 RN6BN,KN95LC,EME,,,,144: FT736 16x17el 1KW,04/05 RN6DJ,KN96VC,EME,,RV6AHY,,TS-780 11 EL. 3 WL. 100 W.,01/09 RN6HW,LN05XB,,,,,144: 1KW 13el Yagi,08/07 RN6MT,KN97LN,EME,,EX RA6LDY,,144: 2.3KW 4xYagis,05/07 RP3POT,KO93CD,,,,,,05/05 RP6A,KN95LC,EME,,SpecialCall,,144: FT736 32x15el vertical & 32x15el horizontal 1KW,05/06 RP9JTT,NO01,EME,,= RV9JD,,,05/06 RU1A,KP40HK,EME,,QSL via DK3WG,,144: 6x16el 1KW,01/05 RU1AA,KP40XD,EME,,QSL via DK3WG,,144: >2KW GU93b 4x15el Crossyagi,07/04 RU1AC,KP50EJ,,,,,,07/04 RU1AS,KO59,,,,,,05/03 RU1R,KO82BW,,,Expedition,,,01/93 RU1U,KO72XW,,,Expedition,,,01/93 RU2FM,KO04GQ,,,UB5KCW RA1ACW RV1AB RV1AB/MM R750M UE3QRP/2,,home made transverter+ h.m. HF rig TS790,09/08 RU3ACE,KO85SM,EME,,,,144: 2x 18el Xpole 300W,09/06 RU3EC,KO82TK,,,EX UA3EEN,,144: IC746 15el 9BV,09/07 RU3GX,KO92SO,EME,,QSL VIA DIRECT,,144: more than 1KW Gs35b 4x17el Crossyagi GAS-2020,11/07 RU3ZD,KO81VG,,,ex UW3ZD,,144: 16el 200W,01/96 RU4HU,LO43OM,,,,,144: FT290R 2x10el 50W,04/04 RV1AO,KP50,,,,,,08/04 RV3AO,KO85RR,,,ex RA3AIS,,144: 4x12el 1500W,07/03 RV3APM,KO85RU,,,,,IC910H,03/04 RV3IG,KO87OT,EME,,QSL via DK3WG,,144: 500W 4x15el,11/05 RV3QX,LO00BK,,,,,,08/08 RV3YM,KO63QQ,,,ex UA3YOZ,,FT 897 144: 5.5wl gs15 bf998 432: 11wl gs15 bf998,05/05 RV3ZR,KO80CL,,,,,144: 500W YU0B KT939A,11/03 RV4AQ,LN28GM,EME,,not active,,432: 4x4.2ld BV 2xGI7B 500W,10/99 RV6YY,LN04AO,,,,,,05/08 RV9AX,LO93LK,,,,,144: 600W 17el preamp - 50: 100W- 6el,10/96 RV9JD,MP80GW,EME,,,,144: 4x 16el 1500W,06/05 RV9PP,NO15LB,,,,,144: ft-847 4x 12el klm 350watts 432: 4x 22el,03/06 RV9UV,NO34GA,EME,,,,FT857 4x 12el 50W,10/06 RW1AW,KP50DA,EME,,QSL VIA DK3WG,,144: FT736r 2.4KW 2x19el MGF1302 - 432: 12x15el 1.5KW,11/07 RW1AY,KO59CU,EME,,,,144: 15el 4wl 1500W,04/06 RW1Q,KO99WJ,,,Expedition,,,12/95 RW1ZC,KP69NA,,,,,,08/06 RW2F,KO04PT,,,Expedition,,,12/97 RW3AC,KO86SH,EME,,,,144: IC910H 18el 3AQ LNA-RW3AZ and GS35-RZ3BA,05/07 RW3AZ,KO85TT,,,,,,08/03 RW3DMQ,KO86RI,,,,,,05/05 RW3FH,KO86VK,,,,,,08/07 RW3PF,KO93CD,,,QSL via DK3WG,,144: 1500W 4x10el BVO 3wl Preamp - 432: 700W 4x24el Preamp,08/05 RW3PX,KO83RJ,EME,,,,144: 8x 16el GS35B,11/05 RW3TJ,LO16XG,,,ex UW3TJ,,,11/03 RW3TU,LO25BR,,,UA3TFO UW3TU,,144:100Watts 12el 4wl. MGF1302 - 432: 400Watt 2x23 ele MGF1302,06/09 RW3WR,KO71IM,,,ex UA3XJ,,,07/04 RW3XR,KO73FU,,,UA3XFA,,,10/07 RW4AK,LO20RC,,,ex UW4AK,,,01/96 RW4HM,LO43RM,EME,,,,ICOM-910H,05/05 RW4NQ,LO58,,,,,144: 4x 9el GI7B,08/05 RW4WE,LO66PU,,,,,,04/05 RW9FT,LO89TD,,,ex UW9FU,,,11/04 RW9MD,MO64RX,EME,,,,,06/01 RW9USA,NO33NS,EME,,,,TM255A IC 821H PA 1500W ant 8/6 yagi,05/05 RX0AZ,NO86OD,EME,,,,700W 3wl Antenna,10/07 RX1AS,KO59FX,EME,,QSL via DK3WG,,144: 4x21el LY GS35b linear,03/06 RX1AX,KO59EW,,,,,,12/04 RX3AGD,KO85UR,,,UV3AGD,,FT897d 50 watt 12 ele 3WL dk7zb,09/07 RX3DUR,KO85XM,,,ex UV3DUR,,ICOM 706MK2G + PA GI7B,08/05 RX3PX,KO84SD,EME,,,,144: 2x11el 210W MGF1302 - 432: 2x23el 180W MGF1302,06/99 RX3QFM,KO91FM,EME,,QSL via DK3WG,,144: 2xBVO4wl yagi 0.4 dB LNA PWR 1.5 KW (2xGS35B),07/05 RX6AKO,KN84PV,,,ex UV6AKO,,,06/96 RX9AT,LO93LJ,EME,,,,ts-2000x,07/07 RX9CHW,MO09CS,EME,,,,144: 4x 8el 100W,03/06 RX9JP,MP22RD,EME,,,,144: 4x 18el 45W,10/08 RX9SA,LO71NS,,,,,IC910H,08/04 RY3E,KN75,,,Expedition,,,01/93 RY5I,KP51BM,,,Expedition,,,01/92 RZ1AP,KO49VW,,,,,144: TR-751 300w 16el DJ9BV,05/04 RZ1AWR,KO59DX,,,,,144: 16el DJ9BV 50Watt,08/98 RZ1AWT,KP40XD,,,QSL via DK3WG,,144: 20W 9el,06/98 RZ1QZZ,LO09BC,,,,,,07/04 RZ1ZZZ,KP76EQ,,,,,,08/04 RZ2FWA,KO04FT,,,,,,01/03 RZ3AED,KO86RD,EME,,UW1ZA,,TS2000 144: 4x 3WL F9FT 500W 432: 4x 21el F9FT,09/07 RZ3AF,KO85CO,,,ex UA3AFA,,144: MGF 1302 2x14 el GI-7B,12/02 RZ3DNT,KO86LE,,,,,,08/08 RZ3QD,KO91OO,,,,,144: 4wl 1KW LNA,08/05 RZ3QS,KO91SS,,,,,144: 2wl 100W LNA,08/02 RZ3ZZ,KO80GP,,,,,144: IC-910H 100W 4x 10el A144S10 - 432: 1 A430S15,04/06 RZ4HF,LO43TJ,EME,,,,144: TS-2000 IC-970 4x15el H/V 1500W,11/07 RZ6BU,KN84PV,,,UV6AKO RX6AKO,,FT847 144: 400W 10el DK7ZB Preamp BF998 432: 50W 14el DK7ZB,12/07 RZ6BY,KN84PV,,,ex UV6AIL,,,06/97 RZ6DD,LN04MX,,,RW1ZC,,IC-746,02/09 S50C,JN76JG,,,,,50: 5el 100W - 144: IC275h 2x15el 700W,08/01 S50L,JN75ES,,,,,,08/08 S50TA,JN76HD,,,,,,08/08 S51AT,JN75GW,,,ex YU3FM,,144: 1KW 16el LY,08/05 S51BA,JN75IX,,,,,,01/03 S51DI,JN76VL,,,,,,09/03 S51DX,JN75CC,,,ex YU3HR,,144: IC275H 100W 2x17el F9FT,11/01 S51S,JN75GV,,,,,,08/96 S51SLO,JN76GB,,,,,,03/01 S51TE,JN76BI,,,,,,11/99 S51WV,JN76SN,,,,,,01/03 S51WX,JN75OS,,,,,144: 2x8el dk7zb 1kW,09/08 S51ZO,JN86DR,EME,,,,144: 1.5KW 4x14el 9BV - 432: 800W 8x33el 9BV,04/06 S52CW,JN76CI,EME,,,,,01/01 S52EZ,JN86DT,,,,,,08/01 S52LM,JN65TX,EME,,EX YU3ULM YT3LM,,144: 4X17M2 5WL- FT 1000MP- JAVORNIK 144/14 dual RX - MGF1801-1500W (GS35B homemade ),05/07 S53AC,JN76GB,,,,,IC-746 M2-8wl 600W IC-746 17el,08/03 S53CAB,JN76JG,,,,,,08/97 S53J,JN75EV,EME,,,,144: FT847 4x5wl GS35 MGF1801 - 432: IC820H ATF43143 GS23B 4X9WL - 1296: FT736R SP23 55el F9FT 80W,03/05 S53RM,JN76JCB,EME,,ex YT3RM,,432: 8 x 8.5wl BV OPT X yagi YL1055 Ampl.,04/05 S53T,JN75GV,,,,,,06/01 S53X,JN65WS,,,,,,11/99 S54AA,JN76EG,,,NOT ACTIVE VHF,,144: IC275H 2x4CX250b (650W) 18el DJ9BV MGF1302,01/01 S54M,JN86CL,,,ex 9A4ZM- N1MZ,,FT847 PA,05/02 S54O,JN75NT,EME,,EX S51MQ,,50: 50W 6el 144: TH328 KW 2x17el MGF1302 432: th328 500W 2x24el,09/07 S54T,JN75EW,EME,,,,144: 4x 17el M2 GS35B 1KW - 432: FT847 4x 28el M2 GS23B,05/05 S55AW,JN75DS,,,EX YT3RY,,144: FT1000MP Javornik 14/144 XVRT GS35b 2x15el,05/07 S55M,JN65VM,,,,,,10/07 S55OO,JN76HD,,,,,50: IC706mkIIg 100W 5el - 144: IC706mkIIg 140W 15QD,08/07 S55Z,JN76HB,,,S57TDA,,TS9130,08/08 S560L,JN75ES,,,SPECIALCALL,,,08/07 S57A,JN65TW,,,,,,11/99 S57C,JN76HD,,,,,144: 700W 17el - 432: 400W 8x21,07/96 S57EA,JN76HE,EME,,YT3QW,,144: FT-897D 50W 4x6 loop (full ele) MGF1302,08/07 S57JA,JN76GB,,,,,,11/99 S57LM,JN76HD,,,,,,04/03 S57M,JN76PO,EME,,EX S51WV,,,04/07 S57QM,JN76,EME,,,,,01/94 S57RA,JN75FO,EME,,,,432: 4x 8.5wl dj9bv- 0.3db preamp atf35176- gs35b 800W,08/00 S57S,JN76JB,,,,,144: TS850SAT h.m. transv MGF1302 preamp 300W 17B2,11/00 S57SU,JN76EF,,,EX S57MSU,,144: TM255E 30W 2x13el (2.1L) 5�El 15db,02/08 S57TW,JN75EX,EME,,,,144: IC275H 1500W MGF1302 4x2M28XP,08/07 S57UUU,JN76EC,,,,,,01/03 S58J,JN76EG,,,,,50: IC756 5el,11/99 S58M,JN76ID,,,,,,01/09 S58P,JN76ID,,,,,,04/09 S59A,JN76XP,,,ex YU3ZV,,,11/95 S59AX,JN65UU,,,,,,01/93 S59DCD,JN76NL,,,,,,01/03 S59EA,JN75,,,,,,01/95 S59F,JN65TX,,,ex YU3HNI-YT3ET-S59AM,,50: 350w 6el - 70: 50w 5el - 144: 500w 12el - 432: 50w 23 el,04/03 S59MA,JN76FD,EME,,,,,02/05 S59UN,JN76XP,,,,,,01/03 S79HP,LI75,EME,,Expedition,,,01/06 S9TX,JJ30,,,,,,01/03 SA3AJG,JP93IG,EME,,,,144: 15el 100W,01/08 SA7U,JO65ML,,,,,FT897 144: 50w 2 x 8JXX2 432: 20w 25JXX70,06/07 SC300VL,JO68SD,,,SPECIALCALL,,,04/07 SD5D,JO89JT,,,,,TS-790E + LA-22+15el+mastpreamp,05/08 SF6X,JO67AJ,,,= SM6CEN,,,08/06 SF7WT,JO65QQ,,,SpecialCall,,144: IC-7400 PA 500 W 15 EL,08/06 SG6T,JO68SE,,,ALSO 8S6T & SM6WET,,FT650 847 920,11/08 SK0AR,JO99BT,,,,,,01/93 SK0CC,JO99BD,,,,,,07/02 SK0UX,JO99BM,EME,,,,,01/05 SK2AT,KP03BU,EME,,= 7S2AT,,TS-790E,05/07 SK3AH,JP82XO,,,,,,10/02 SK3JR,JP62WK,,,Expedition,,,01/92 SK3LH,JP93IH,,,,,,01/94 SK3MF,JP92FW,,,,,144: 6x15el 1KW,07/02 SK3SN,JP80IO,,,,,,01/94 SK4BZ,JP61QM,,,,,,01/94 SK4EA,JO79CO,,,,,,01/93 SK6HD,JO68SD,,,,,144: 150W 2x15el,05/07 SK6YH,JO58,,,,,,08/96 SK7AX,JO77DS,,,,,,07/01 SK7CY,JO65RJ,,,,,144:TS850 transverter 130 1000W MGF1302,06/06 SK7JC,JO76KF,,,,,,08/99 SL4BP,JP70TO,EME,,SPECIALCALL FOR MILITARY,,144: 800W 4x9el MGF1601 432: 100W 2x19el MGF1302,05/08 SL4ZYX,JP70TO,EME,,SPECIALCALL FOR MILITARY VOLUNTARAY,,144: 800W 4x9el MGF1601 432: 100W 2x19el MGF1302,05/08 SM0EJY,JO89SC,,,,,144: 500W 10 over 10el Preamp,06/06 SM0EPO,JO89XM,,,,,144: 50W 2x6el,12/03 SM0EPX,JO89SJ,,,,,144:1000 Watt 4CX1500 15el X-Y MGF1802,04/04 SM0FFS,JO99AG,,,,,,01/94 SM0FZH,JO89TG,,,,,,01/97 SM0GWX,JO89XG,,,,,FT-920 + FT-847,01/09 SM0HAX,JO99,EME,,,,144: IC820 6x 12el I0JXX 2x GU74b P-hemt,08/05 SM0IKR,JO99CC,,,,,FT847,02/05 SM0KAK,JO89XK,,,,,50: 100W 6el - 144: 180W 17el,08/03 SM0LQB,JO89XK,,,,,144: 15el 130W - 432: 4W 21el,04/04 SM0MXR,JO89WE,,,,,,01/03 SM0NKZ,JO99IQ,,,,,,03/02 SM0OUG,JO89VG,,,,,,10/96 SM0PYP,JO89XG,EME,,,,,01/94 SM0TSC,JO99CF,,,,,IC-7400 IC-703,10/07 SM1BSA,JO97DP,,,NO SKEDS !!,,144: FT736r 300W 15el,06/06 SM1HPV,JO97HO,,,,,144: 200Watts 2x15ele,01/02 SM1SBI,JO97FK,EME,,,,144: 2x17el 800W,09/06 SM200PAX,KP03BU,,,SPECIAL CALL,,,06/09 SM2A,KP04NP,EME,,SM2ILF (BOTH CALLS ARE VALID),,IC910H 144: 6x16 el I0JXX 1kw 432: 4x32 el HB 1kw,03/08 SM2AZG,KP03,,,,,,03/02 SM2BLY,KP05RJ,,,,,,01/93 SM2BYA,KP07DU,EME,,,,144: FT1000 4x3.2wl CueDee 3CX1000A7 MGF1100,08/00 SM2CEW,KP15CR,EME,,,,144: 6x19el 1KW,04/05 SM2CKR,KP03DQ,EME,,,,1kw 8x15el,10/07 SM2ECL,KP05RH,,,,,144: 200W 4x15el 60m asl,07/03 SM2EKM,KP05UW,EME,,,,,04/03 SM2GCR,JP93TK,,,,,,07/00 SM2GGF,KP05DV,,,SilentKey,,,01/84 SM2ILF,KP04NP,EME,,SM2A (BOTH CALLS ARE VALID),,IC910H 144: 6x16 el I0JXX 1kw 432: 4x32 el HB 1kw,03/08 SM2IUE,JP85,,,,,,01/93 SM2IZV,JP84,,,,,,01/93 SM2LKW,KP15BO,,,,,,01/94 SM2LTA,JP94CW,,,,,,04/98 SM2ODB,KP03EU,,,not qrv MS nw! (01/01),,144: 100W 15el,03/02 SM2VBK,KP15BO,,,,,,08/02 SM3AKW,JP92AO,EME,,,,144: 2x17LB 1KW - 432: 16x21el 1KW - 1296 4x23elLoops/5m dish 1KW- 2320: 6m/5m dish 100W- 10G:0.65/10W,07/07 SM3AZV,JP83,,,SilentKey,,,01/93 SM3BEI,JP81NG,,,EX SM5BEI,,144: 500W 432: 500W 1296: 130W 2320: 120W 5G: 15W 10G: 12W,10/07 SM3BIU,JP73ST,,,,,,01/97 SM3BYA,JP81NX,EME,,2nd QTH SM2BYA,,432: 450W 8x21el Tonna 750W MGF1412,05/05 SM3COL,JP82,,,,,,11/96 SM3GHB,JP72,,,,,,01/93 SM3GHD,JP62,,,,,,01/93 SM3IEK,JP73IT,,,,,144: 100Watt 15el,03/06 SM3JBO,JP93IH,,,,,144: 2x 10el 200W,08/05 SM3JGG,JP71WJ,,,,,,07/02 SM3JGG,JP71TJ,,,,,FT-847 250watt 15el,07/07 SM3JLA,JP93LH,,,,,144: 250W 15el,06/99 SM3JQU,JP82QM,EME,,,,432: 4x 32el 750W 0.4db,09/05 SM3KJO,JP92DX,,,,,,08/97 SM3KYH,JP82NL,,,,,,04/04 SM3LBN,JP80IO,,,,,,08/03 SM3LGO,JP83VB,,,,,144: 1KW 80el Colinear,01/99 SM3MXR,JP80GR,EME,,,,144: 4x17el M2 emepwr,08/01 SM3PWM,JP81GF,EME,,,,,12/99 SM3PXO,JP73GI,,,,,144: 400W 17el 5wl - 50: 50W 9el 2wl,04/03 SM3RLJ,JP93OI,,,,,144: 100W 15el,07/97 SM3RPQ,JP74BT,,,,,,08/08 SM3RWZ,JP82MI,,,,,ICOM IC-275H 200W 9 ele,10/04 SM3TFR,JP93IG,EME,,,,,01/94 SM3VAC,JP83VA,,,,,144: 2x17el 1KW,08/01 SM3VEE,JP81VI,,,,,,03/98 SM3XGV,JP81OF,,,,,TS2000,08/04 SM3YTF,JP81FI,,,,,,12/06 SM4ANQ,JP70OC,,,,,,02/02 SM4DHN,JP60VQ,EME,,,,,01/01 SM4FXR,JO79OF,,,,,,01/05 SM4GRP,JO69HF,,,,,IC-756PROIII DB6NT TR144H transverter + 15el @ 10m 45m ASL.,10/07 SM4IVE,JO79SD,EME,,,,,08/00 SM4KYN,JO79,,,,,,01/93 SM4RPQ,JO79HH,,,,,TS2000,08/05 SM4SJY,JP70OC,EME,,,,IC706MK2G 144: 9el 600W,09/05 SM4VQP,JO79NB,EME,,,,144: 4x17el eme-pwr,01/02 SM5BSZ,JO89IJ,EME,,NO SKEDS !!,,,07/99 SM5CBN,JO78NH,,,,,,08/06 SM5CFS,JO99IQ,EME,,,,144: 4x19el QBL5/3500 1.5KW 1296: 5.6 mtr solid 100w,09/07 SM5CUI,JO89WW,EME,,,,144: 8x 10el 800W,07/05 SM5DCX,JO89OI,,,,,,01/01 SM5DIC,JO89JT,EME,,,,TS-790E+LA-22+4x15el+Mast preamp MGF1302,11/08 SM5DRV,JO77MV,,,= SM0DRV,,144: IC-275H 100W 13el yagi,07/04 SM5FRH,JO88BW,EME,,,,144: 32x19el horz. or 32x10el vert.,10/00 SM5GEP,JO77IP,,,,,,01/03 SM5HUA,JP80WA,EME,,SM3HUA,,Icom IC-910H,04/09 SM5IOT,JO99BX,EME,,,,50: 2x 6el I0JXX - 144: 8x 8el I0JXX 2xGU74B P-hemts - 432: 8x 26 el DJ9BV opt2 GS23B P-hemts,03/06 SM5LE,JO99BD,EME,,,,,04/06 SM5TSP,JP90BD,EME,,,,144: 4x18el 750W,08/08 SM6AEK,JO66,,,,,,01/93 SM6AFH,JO66LQ,,,,,,01/94 SM6CEN,JO67AJ,,,= SF6X,,,08/06 SM6CKU,JO67,EME,,,,,04/05 SM6CMU,JO57XK,,,,,IC7400 100-400W 50: 6el - 144: 9el,08/05 SM6CWM,JO67,EME,,,,,01/94 SM6EAN,JO57WQ,,,,,144: 600W 10el,01/01 SM6EUP,JO57XQ,EME,,,,,01/94 SM6FKF,JO68SA,,,,,,05/07 SM6FUD,JO68JV,,,,,,12/04 SM6KJX,JO67CK,,,,,FT736,07/04 SM6MVE,JO67KW,,,,,50: 10W 3el 144: 25W 4x9el SP2 432: 75W 4x13el SP70,03/06 SM6NET,JO68SD,,,,,144: 300Watt 2x 17el - 432: 50Watt 21el,05/09 SM6SKH,JO66IT,,,SM7SKH,,,06/09 SM6TZX,JO67EE,,,,,,05/02 SM6U,JO67AT,,,SpecialCall,,144: FT290 9el 25W,05/00 SM6UMO,JO68DH,,,,,144: TR751 170W 2x13el SP2000,01/94 SM6USS,JO67AT,,,,,144: FT290 9el 25W,07/97 SM6WET,JO68SE,,,ALSO 8S6T & SG6T,,FT650 847 920,11/08 SM7AED,JO65NI,,,,,144: 50W 5el,06/07 SM7DTT,JO65LJ,EME,,,,,05/07 SM7EAN,JO86,,,,,,07/99 SM7EOI,JO86FP,,,,,IC7400,01/04 SM7FJE,JO65ML,EME,,,,4x9 el,07/08 SM7FMX,JO65KN,,,,,,08/04 SM7FWZ,JO78,,,,,,03/03 SM7GVF,JO77GA,EME,,SM4GVF,,144: 8x8 el 1KW MGF1302,11/08 SM7IWG,JO77IP,,,,,,04/04 SM7JUQ,JO65WX,,,,,50: 100W 5el - 144: 750W 9el - 432: 50W 19el,08/04 SM7KNK,JO75,,,,,,01/93 SM7MRL,JO65NP,,,,,144: TS850 transverter 130 1000W MGF1302,03/03 SM7MXO,JO77,,,,,,07/04 SM7OYP,JO66JA,,,,,50: 100W 5el,09/01 SM7SJR,JO87FB,,,,,,10/08 SM7THS,JO76WR,,,,,144: 15el 170W MGF1302,11/99 SM7TJC,JO67SH,EME,,,,144: FT-225RD 2xGi7b (800W) - 432: FT-757GX Trvt 60W,05/02 SM7TUG,JO65OT,,,,,144: 2x4CX250b 17el MGF1302,08/98 SM7WSJ,JO67WI,EME,,,,144: 2X16 optimized for EME 1KW - 432mhz 2X19el 2.4ghz RX on satellite,10/05 SM7WT,JO65QQ,,,,,144: IC-7400 PA 500 W 15 EL,08/06 SO3Z,JO82KL,,,CONTEST CALLSIGN,,2m: IC-275A - PA 150W - 2x 10el DK7ZB || 70cm: IC-275A + trv MMT432 PWR 10W 16el and 8x10el DK7ZB only contest.,06/09 SO4DFC,KO13AX,,,Expedition,,,01/92 SO4TEC,KO13CW,EME,,Expedition QSL via DL3BQA,,,06/02 SO5AS,KO02JD,EME,,QSL via G4ASL or LOTW,,50: GS31b 5el 144: 150Watts 14el (no ant. elevation),04/06 SO9AN,JO84NG,,,Expedition,,,05/00 SO9FB,JO84NG,,,Expedition,,,05/00 SP1JVG,JO84LL,,,= KG2IS,,,02/01 SP1NQE,JO84LL,,,,,TS746 TS811E,04/04 SP2CHY,JO94GO,,,ex SP4CHY,,,02/05 SP2FAX,JO83VA,,,,,144: 2KW 6x17el,08/03 SP2HAX,JO83,,,,,,12/5 SP2HNF,JO94FK,,,,,,10/05 SP2IQW,JO94GM,,,,,50: IC-746 5el - 144: IC7-46 100W 2M5WL,09/08 SP2JAN,JO94,,,,,,09/94 SP2JYR,JO92GP,,,,,144: 2x 14el 1KW,01/08 SP2MKI,JO93AC,,,,,,03/02 SP2MKO,JO93CB,,,,,icom706mkIIg tm255a,08/05 SP2MSL,JO92NM,,,,,,01/97 SP2NJI,JO92OS,EME,,,,50: IC736 100W 5el - 144: IC271 500 W 4x8 el - 432: IC471 150W 4x25el - 1296: HM 15W 44el - 2320: HM 1W 25el,10/08 SP2OFW,JO93AC,EME,,,,144: 2xGS35b 2x15el,05/05 SP2QBQ,JO94FL,,,,,,06/08 SP2SGZ,JO82UU,,,,,,01/96 SP3EPX,JO83ID,,,,,,11/01 SP3FSM,JO81GU,,,,,,08/02 SP3IYM,JO82KL,,,,,2m: IC-275A - PA 150W - 2x 10el DK7ZB Yagi - LNA || 70cm: IC-275A + trv MMT432 PWR 10W 16el and 8x10el DK7ZB only contest.,06/09 SP3MFI,JO91,,,,,,01/93 SP3RNW,JO81GQ,,,,,50: 100W -144: 200W 11el MGF1302 - 432: 100W MGF1302 21el,08/03 SP3RNZ,JO92DF,EME,,,,IC746 7el TAGI,09/03 SP3SUX,JO72OR,,,,,144: 80W 14el BF981,12/96 SP3TYF,JO82FH,,,,,FT857D TR9000,10/08 SP3VSC,JO92DF,,,,,144: IC746 2X13B2 PA GS35B,01/04 SP4BY,KO13OD,,,,,,07/04 SP4DGN,KO13OD,,,,,,01/88 SP4JCQ,KO13NC,,,,,FT920 IC910H 144: 100W 17el,09/06 SP4MPB,KO03HT,EME,,,,144: TS2000 GS35b ATF54143 4 x 13el 50MHz: 2 x 7el 1296MHz 100W + 200cm dish,06/09 SP5CCC,KO02NF,,,,,,01/09 SP5CJT,KO02OD,EME,,,,,01/94 SP5EFO,KO02,EME,,SilentKey,,,04/97 SP5HEJ,KO02,,,,,,01/97 SP5KVW,KO03SB,,,Expedition,,,01/89 SP5LJX,KO03,,,,,,08/02 SP5QWB,KO02NF,,,,,50: 400W 7el - 144: 1KW 17el - 432: 50W 26el,05/04 SP5XMU,KO02LG,,,,,50: 100W 6el 144: 170W 13el 432: 50W 21el,05/09 SP6A,JO81NG,EME,,ex SP6AZT,,,11/03 SP6ARE,JO81IL,,,,,IC202 + 4cx250 to 7 ele quad,10/07 SP6ASD,JO81LC,,,,,,05/02 SP6AZT,JO81NG,,,,,,01/03 SP6CPH,JO81,,,,,,09/01 SP6GVU,JO81LC,,,,,144: 17el F9FT 200W MGF1302,02/01 SP6GWB,JO80HK,EME,,,,50: FT847 1 kW 9 el (2 lambda) - 144: FT847 4x16 el DJ9BV 1KW CF300,03/05 SP6GZZ,JO80FX,,,,,,10/04 SP6HED,JO80IK,EME,,,,144: 13el 100W,07/05 SP6IWQ,JO80HK,,,,,TR751e FT757gxII Trnsv 100W Pas,11/04 SP6JLW,JO80JK,EME,,,,70cm 8x32el 2xGS35 23cm 6.5m dish 16xBLV958,10/08 SP6NVN,JO81CJ,,,,,IC-910 H,12/08 SP6OJE,JO90CI,EME,,,,TS-711a IC-735 4x 5el,10/06 SP6VGJ,JO81HU,EME,,,,144: 4wl Antenna 1KW,10/06 SP7BUZ,KO00HU,,,ex SQ7IKT,,,04/04 SP7DCS,JO91RT,EME,,,,144: FT736r DSP GS35vb 16x 8el antennas,10/06 SP7EBM,JO91QR,,,,,,01/02 SP7HKK,JO91QI,,,,,IC-746,12/07 SP7JSG,KO01BW,,,,,,03/02 SP7OGP,KO01AM,,,,,IC706MKIIG 12el 7ZB 50W,05/08 SP7SZG,JO91RQ,,,,,144: TS700 + PA 50: TS700+Trsv 10W,12/08 SP7VC,JO91SS,,,,,,10/04 SP8AOV,KO11GG,,,,,144: FT480r 100W 2x10el,03/00 SP8NCJ,KO12NA,,,,,,11/95 SP8RHP,KO10FF,,,,,144: 200W 10el DJ9BV,02/05 SP8SN,KO11GG,,,ex SQ8GKQ,,,07/04 SP8UFT,KO11JI,,,,,,01/02 SP8WJW,KN09SR,,,,,144: 50W 9el,03/06 SP9COO,JO90GA,,,,,144: IC251 + PA 100Watt 44el YU0B MGF1302,04/04 SP9EWO,JN99HW,,,,,,08/06 SP9HWY,JO90NH,,,,,50: 80W 7el,10/06 SP9KUR,KO00MA,,,Expedition,,,01/93 SP9LCV,JO90KF,,,,,IC-756pro IC735 TRC PA GI7 home made,03/06 SP9PRO,JN99,,,,,,03/97 SP9PZU,JO90,,,,,,07/96 SP9QMP,JO90FB,,,,,,08/02 SP9TCE,JO90,,,,,,08/98 SP9TTG,JO90NU,EME,,,,144: 4x 5el ZB 1kW,03/08 SP9UX,KO00XA,,,,,,07/04 SQ5GVY,KO02MQ,,,,,FT817 IC290 IC490 PA,08/08 SQ7DQX,JO91RR,,,,,144: 13el 50W,11/04 SQ8GUP,KN09VQ,,,,,,04/01 SQ9PM,JN99MT,EME,,EX SQ9HYM,,FT847 50: 6el - 144: 14el - 432: 29el,05/07 SQ9PV,JO90KF,,,,,,01/03 SQ9QU,JO90KH,,,ex SP9MRT,,144: TM 255A 40W 15 el yagi LCF 78-50 coax line,07/05 SQ9W,JO90NH,EME,,ex SP9EWU,,,08/06 ST2NH,KK65GP,EME,,,,144: IC910 LNA 160W 6el,12/08 ST2RS,KK65GN,EME,,= ZL1RS,,50: 6el 1KW 144: 4x 8el 140W,01/05 SV0EC,KN10CJ,EME,,,,144: TS770 700W 20el Gruppe,02/99 SV1AAF,KM17VX,EME,,,,,01/92 SV1AWE,KM17VU,EME,,,,432: 4x 21el 1500W,09/05 SV1BJY,KM18UA,,,,,ft897/ft290r w 4x6el.yagi,06/08 SV1BTR,KM18NO,EME,,,,144: FT847 16x 6el X-Pol 1.5KW - 432: 8x 26el 1.5KW,04/06 SV1EEX,KM18UA,,,,,FT897D-FT857D-FT817-IC7400,11/08 SV1OE,KM17VX,,,,,,08/08 SV1WE,KM18VA,,,,,144: 500W 17el,07/98 SV2BFN,KN10LN,EME,,,,ICOM IC-910,09/08 SV2DCD,KN00LI,,,,,,06/06 SV2EVS,KN10KP,,,,,,04/02 SV2JL,KN10LO,,,,,,06/04 SV2KBS,KN20WU,EME,,SW2KBS,,ICOM IC-7000,04/08 SV3AAF,KM17KO,EME,,,,144: 4x 8el. and 8877,05/07 SV3KH,KM07PQ,EME,,,,144: 4x 28el Xpol KW,07/05 SV5BY,KM46CG,,,,,,01/03 SV5BYR,KM46CG,EME,,,,144: FT847 2x 13el 600W MGF1302,01/06 SV6DBL,KM09KO,EME,,,,144: 4x17 el. full elevation 1300W,04/05 SV8ALQ,KM08BD,,,,,,05/08 SV8CS,KM07JS,EME,,= KC2INN,,50: 2x 7el 1KW - 144: IC821 TS2000 4x 16el MGF1302 1KW,04/05 SV8KOM,KM07KS,EME,,ex SW8KOM,,144: 4x 9el 1KW,05/06 SV9CVY,KM25KA,EME,,,,144: 4x 8el. H pol. and 2x 12el. V pol and 3cx800,05/07 SW6IED,KM09KQ,EME,,,,Icom 910H,12/08 SX1FRE,KM18OE,,,SPECIALCALL,,,04/08 SX5AS,KM35JV,,,EXPEDITION,,,08/07 T33C,RI49XC,,,,,,01/03 T49C,EL72,,,CONTESTCALL,,50: 4el 100W - 144: 9el 120W - 432: 17el 100W,06/07 T61AA,MM21OE,EME,,= VK1UN,,50: 600W 8el 144: 9el 1KW,04/08 T77NM,JN63FW,,,,,,04/07 T77WI,JN63FW,,,Expedition - QSL via DJ2QV,,144: 350W 9el 11el,06/98 T90M,JN82TW,,,Expedition,,,08/96 T90N,JN82TW,,,Expedition,,,08/96 T94KU,JN94JF,,,,,144: FT480r 6el 50W,01/00 T94ZQ,JN94FP,,,,,,07/99 T98CHR,JN84AX,EME,,Expedition,,,04/99 T98LWT,JN84AX,EME,,Expedition,,,04/99 T9SO,JN94IM,,,SpecialCall,,144: FT480r 8el 150W,08/98 TA1D,KN41LB,,,,,144: 150W 2x 9el,10/05 TA2ZAF,KM69KV,,,ex TA2/OK1MU,,144: 700W 11el,09/06 TF3EJ,HP84,,,,,,10/95 TF8ITT,HP94CD,,,,,144: 1KW ERP,08/02 TG9AKH,EK44RP,,,,,TX YAESU FT-857 RX ICOM 756PROII,10/06 TI9K,EJ65LM,EME,,EXPEDITION,,50: 100W vertical 144: 10el 350W 432: 27el 120W,01/08 TK1DX,JN42RM,,,,,144: 8el 200W,01/99 TK5EP,JN41IW,,,,,144: 400W 9el or 16el 900m.asl.,11/01 TK5JJ,JN41IW,EME,,EX FC6ABP,,144: 700W 3cx 800 a7 2x 12el M2 LNA PA3BIY,05/07 TM0EME,IN88QM,EME,,Expedition QSL via ON4DPX,,144: 2x 10el 200W,08/05 TM1E,JN32CX,,,EXPEDITION,,,12/07 TM6OLW,JN37,,,SpecialCall,,,01/05 TN5SN,JI75PR,EME,,QSL VIA IZ1BZV,,,10/08 TO4E,LG07EQ,,,,,,01/03 TS7N,JM54NQ,,,Expedition,,144: IC275 HLV600 2x7el FX213,11/00 TV6YGS,IN86,,,Expedition,,,01/87 TZ5A,IK62,EME,,Expedition,,,09/06 UA0COO,PN78MK,EME,,,,144: 4x 9el QRO,11/08 UA0FMU,QN16IW,EME,,,,144: 4x 15el Xpol 1KW,04/06 UA0SNV,OO17IW,EME,,,,432: 21el 50W,10/05 UA1AFA,KO59EV,,,,,,08/02 UA1ALD,KO49KO,,,,,144: 11el 100W,07/06 UA1ARX,KO48VR,,,Expedition,,,08/04 UA1C,KO58BR,,,Expedition,,,01/93 UA1CEA,KO69,,,,,,04/99 UA1CFM,KO69AK,,,,,,10/07 UA1MC,KO59DW,,,,,,08/04 UA1NAN,KP71ES,,,,,IC260,01/03 UA1OLJ,LP03DC,EME,,,,144: 150W 9el,12/99 UA1QV,LO08IW,,,,,144: 300W,06/99 UA1TDZ,KO58UN,EME,,,,144: Kenwood ts2000 100w 10el / ic706mkIIg diamond x510n,08/07 UA1UM,KO68WJ,,,,,,01/88 UA1WER,KO47EU,,,,,144: 50W 4x17el QSL via DL9USA,01/02 UA1ZCG,KP59JK,,,,,,01/03 UA1ZCL,KP78TX,EME,,not qrv MS nw,,,01/92 UA2FF,KO04,,,,,,12/04 UA2FL,KO04FQ,,,,,,06/97 UA3AGU,KO86OB,,,,,4el Quad,10/07 UA3AKJ,KO95AO,EME,,,,,08/06 UA3AOG,KO85SQ,,,,,144: IC706 100W 11el,07/00 UA3ARC,KO85SO,,,,,144 :IC-275H GS-35B MGF1302 2M18XXX,07/04 UA3DHC,KO96CB,,,,,,04/04 UA3DJG,KO95CN,,,,,144: 11el 800W,07/03 UA3GA,KO92GO,,,,,,11/04 UA3IAG,KO77FN,,,,,,07/05 UA3IDQ,KO66JF,,,,,,06/00 UA3MAS,KO97ST,,,,,,01/94 UA3MBJ,KO88SA,EME,,QSL via DK3WG,,,12/06 UA3ME,KO97TS,,,ex UA3MEE,,,07/05 UA3MHJ,KO87SR,,,,,,01/03 UA3OG,LO07KS,,,,,,01/92 UA3PBR,KO93BD,,,,,,01/86 UA3PBT,KO84UF,,,,,,01/82 UA3PC,KO84TF,,,,,144: 13el 1KW,08/05 UA3PI,KO94DA,,,,,,08/08 UA3PTW,KO93BS,EME,,,,144: 16el DJ9BV 1KW - 432: 8 yagis 200W,04/01 UA3QHS,KO91QR,,,,,,01/81 UA3QPA,KO91OO,,,,,,08/06 UA3QR,KO92KA,,,,,,01/92 UA3RAW,LO02RR,EME,,,,FT-857D,06/09 UA3RBO,LO03NG,,,,,,11/03 UA3RFS,LO02SW,,,,,,01/80 UA3T,LO16GM,,,,,,07/03 UA3TCF,LO26IU,EME,,QSL via DK3WG,,144: 300W,03/06 UA3TDB,LO16,,,,,,01/79 UA3TIE,LO16,,,,,,01/97 UA3UBD,LO06GU,,,,,,01/80 UA3UES,LO07MF,,,,,,01/92 UA3WM,KO72QI,,,,,,07/04 UA3WU,KO81BQ,,,,,,11705 UA3XEH,KO73FU,,,,,,08/98 UA3XFA,KO73DU,,,,,,01/96 UA3YCC,KO73EG,,,,,,09/07 UA3YCV,KO62CS,,,,,50W X-Yagi,08/08 UA3ZAT,KO80,,,,,,01/91 UA4AAV,LO21FC,EME,,QSL via DK3WG,,,04/99 UA4ALU,LN29LA,EME,,,,,01/92 UA4API,LO20QC,EME,,QSL via DK3WG,,,12/99 UA4AQL,LO20QB,EME,,QSL via DK3WG,,144: 4x13el DJ9BV Preamp 0.8db 1.2kW(EME) 700W(MS),04/05 UA4CC,LO21XN,EME,,,,,05/05 UA4CDT,LO41AX,,,,,,01/83 UA4FRL,LO23AE,,,,,,10/06 UA4HAK,LO43NM,EME,,,,144: 4x 8el 800W,11/05 UA4LCF,LO44EH,EME,,,,144-2x4wl 200w 432-2x11wl 200w IC-706mkiig lna,03/08 UA4NM,LO48UP,,,,,,03/04 UA4NX,LO48SO,EME,,UA4NDV,,144: 300Watt 14el DJ9BV IC-910H,01/08 UA4PCY,LO45NU,EME,,,,144: 4wl Antenna 700W,11/06 UA4SF,LO36WP,,,,,,01/86 UA4UK,LO14MA,,,,,,11/03 UA6LGH,KN97LF,EME,,,,,07/96 UA9CGP,MO06RT,,,,,,01/03 UA9CS,MO06GU,EME,,,,,10/06 UA9FAD,LO88DA,EME,,QSL VIA DK3WG,,144: 1KW 4x16el - 432: 1KW 8x15el,10/07 UA9FD,LO87DX,,,,,,05/05 UA9FU,LO87DX,,,,,,08/06 UA9HK,MO99DF,EME,,,,144: 4x 9el 600W,06/05 UA9SL,LO71NS,EME,,,,144: 4x 17el 800W,09/06 UA9UIZ,NO46EC,EME,,,,144: 13el 100W,10/07 UA9XQ,LP63UM,,,,,,01/97 UA9YLU,MO92HX,EME,,QSL VIA DK3WG,,,02/08 UB0QF,KN77NU,,,,,,01/88 UB2GA,KN77AB,,,,,,01/90 UE1NLO,KP51IQ,,,Expedition,,,07/06 UE1TWO,KO67PW,,,Expedition,,,07/04 UE3RST,LO03,,,SPECIALCALL,,,08/08 UN6PD,MN69JM,EME,,,,14el 1KW,12/07 UN7LU,MO13TD,,,,,,01/03 UN7PV,MN69MV,,,,,144: 80W 10db Antenna,12/06 UN7TQ,MN52VV,EME,,,,,09/98 UN8AG,LN53PH,,,ex UL7AAX,,,07/96 UN8BA,MO51RD,EME,,,,,01/92 UN9L,MO13tf,EME,, UP7QP,MN83FD,,,,,,10/08 UR3CTB,KN59RS,,,,,IC-820H 40W dk7zb 10 el LNA Gafest,09/07 UR3EE,KN88DC,EME,,,,,11/02 UR3EP,KN78WR,,,ex RB4EE,,,01/96 UR3UW,KO50LI,,,,,,08/08 UR4EWF,KN67OW,,,,,,07/03 UR4LL,KO70XG,,,,,,10/00 UR5BAE,KN29SM,,,ex UB5BAE,,,07/01 UR5LLW,KN89EQ,,,,,,06/03 UR5LX,KO70WK,EME,,QSL via DK3WG,,144: 4x12el ve7bqh 800W 13el BF981,12/06 UR5M,KN99FD,,,Expedition,,,01/94 UR5MID,KN98OO,EME,,,,144: 4x 12el,09/06 UR5NOY,KN48KV,,,,,,07/05 UR5RCP,KO51OM,,,,,,01/92 UR5WET,KN19RG,,,,,144: FT817nd -100W -9el,06/08 UR5ZPV,KN56SN,,,,,10ele 500W,08/08 UR7GN,KN66HP,,,,,,06/96 UR8IDX,KN87TC,,,,,,07/04 US0WA,KN29XT,,,,,,07/95 US1VQ,KN58XA,,,,,,08/95 US5CCO,KN59XG,,,ex RB5CCO,,,05/02 US5II,KN88WA,,,,,FT847,07/05 US5LKW,KN89KL,,,,,,08/08 US5WU,KO20DI,,,,,,06/02 US8ICM,KN87UB,,,,,,08/08 US8IGT,KN87SC,EME,,,,144: 4x 7el 400W,08/06 US8IPB,KN87SD,EME,,,,,08/08 UT1E,KN57XX,EME,,,,,08/03 UT1EA,KN68RA,EME,,ex UT1E UB4EWA,,,08/03 UT1EWA,KN68RA,,,,,,01/03 UT1PA,KO21FC,EME,,,,,06/98 UT1Q,KN77,,,Expedition,,,08/95 UT2CO,KN58CR,,,,,,01/92 UT2HN,KN79OI,,,ex UR5HAX,,144: 100W 16el,11/03 UT2UB,KO40UO,,,,,,08/08 UT2XQ,KO40IG,EME,,,,IC910H 4x 12EL 1.5KW,10/07 UT3BW,KN29UA,,,ex UB5BDC,,,05/99 UT3LL,KO80AC,EME,,,,432: 6x 27el 500W,09/05 UT4EQ,KN78MK,EME,,,,,06/98 UT4NJ,KN48KQ,,,,,FT-897D,02/09 UT4NZ,KN49FF,,,,,,01/09 UT5AO,KO61XQ,EME,,,,,01/94 UT5BN,KO40,,,,,,01/81 UT5CO,KN58CQ,,,,,,01/95 UT5DL,KN18EP,EME,,,,,07/02 UT5EC,KN78MN,EME,,,,,11/99 UT5EG,KN78GJ,EME,,,,,01/94 UT5ER,KN78ER,EME,,UR5EF UB5EFS,,144: 4x4.4L DJ9BV 1KW MGF1302,09/07 UT5GU,KN68,,,,,,01/94 UT5JAX,KN64RQ,,,,,,01/94 UT5JCW,KN64SN,EME,,,,TS-2000X 17b2 M2-9WL 3.7m Dish,04/08 UT5ST,KN28IW,,,ex UR5SKB,,FT847,05/05 UT5UBB,KO50,,,,,,01/04 UT5UCP,KO50DG,,,,,,07/01 UT5VD,KN68MT,,,ex UB5VEP,,,10/04 UT6UG,KO50EI,,,,,Icom 910h 144: 4x7el DK7ZB 432: 4x13el DK7ZB,11/05 UT7GA,KN66HP,,,ex RB5GU,,144: 1KW 16el F9FT,09/99 UT7VF,KN68MQ,EME,,SilentKey,,,06/96 UT8AL,KO61WP,EME,,ex RB5AL - QSL via DJ9YE,,,08/99 UU1AA,KN74BV,,,,,,08/04 UU1DX,KN74BW,,,,,144: 500W,07/05 UU5JJ,KN74AV,,,,,,01/03 UW9AH,LO93KK,,,,,,01/92 UX0FF,KN45NI,,,,,,07/04 UX1AS,KO59FX,,,,,,01/03 UX3LV,KO80EA,EME,,,,,08/05 UX5UL,KO50FL,EME,,,,144: IC910H 900W 432: IC910 75W,11/07 UY0LL,KN89CX,EME,,UB5LMJ,,IC-910H GS35,08/07 UY0UP,KO50FJ,,,,,,10/06 UY5HF,KN66HP,,,= UT7GA,,,06/96 UY5OE,KO80AB,,,,,,01/94 UZ1OVW,KP94VN,,,,,,01/92 UZ2HZ,KN69RA,,,,,,08/08 UZ3DD,KO86JH,EME,,SilentKey,,,01/93 V47YC,FK87,EME,,Expedition,,,07/96 V5/KT6Q,JG73NI,EME,,EXPEDITION,,,01/09 VA2CST,FN35BP,,,,,,01/03 VA2MGL,FN74UQ,,,,,50: 25W 3el,11/01 VA2PRC,FN46,,,,,50: deltaloop 144: IC706 13el,01/98 VA3LK,FN14TO,,,,,,01/03 VA3NFA,FN25BH,,,,,,12/06 VA3TO,FN03BI,EME,,,,144: 2x 12el 300W,04/06 VA3VFO,FN04FC,EME,,,,,09/07 VA5VHF,DO70FJ,,,,,,01/03 VA6DX,DO33IM,,,ex VE6MK,,144: 1KW 4x 2M9,01/01 VA6SZ,DO33AP,EME,,EX VE6AQE,,IC910 IC756proII,10/07 VA7MM,CN89OG,EME,,,,1296: 3m dish 400W 0.4db Rxampl,09/06 VE1ALQ,FN65VH,EME,,,,,10/02 VE1GRT,FN84IQ,,,,,,01/03 VE1JF,FN74cq,EME,, VE1KG,FN84CM,EME,,ex VE4XP FP4RS F8PZ,,144: 4x17el M2 50W,10/06 VE1MQ,FN65,,,,,,01/03 VE1RG,FN65PT,EME,,,,144: 170W longyagi,04/05 VE1SKY,FN74,,,,,50: FT620B 3el,01/01 VE1TAY,FN66,,,,,,01/01 VE1XYL,FN65VH,,,,,,01/03 VE1ZJ,FN96UC,EME,,,,144: 1.8KW 6x18el,12/01 VE2BKL,FN48DJ,,,,,50: 1000W 6el - 144: 150W 19el,04/02 VE2CST,FN35BP,,,,,,01/03 VE2DIV,FN35BP,,,,,,01/03 VE2DSB,FN35hs,EME,, VE2JWH,FN35LM,EME,,,,144: 4 x 18el K1FO 1.5kw,09/07 VE2PEP,FN46HC,,,,,KENWOOD,09/07 VE2PIJ,FN36KA,EME,,,,50: 6el 200W 144: 4 x 18el. K1FO 1.5kw 432: 24el 25W,06/09 VE2PIJ/P,FN35QI,EME,,,,50: 6el 200W 144: 4 x 18el. K1FO 1.5kw 432: 24el 25W,06/09 VE2UG,FN35,,,,,,01/03 VE2WHZ,FN08WN,,,,,,01/03 VE2YAG,FN19ES,,,,,,01/03 VE2ZAK,FN25BK,EME,,,,4 x 13 el. and 100W,10/08 VE3AX,FN02CW,,,ex VE3VD,,1.5KW 50-432 multiple Yagi arays,01/02 VE3BDR,EN98,,,,,,01/03 VE3BFM,FN04AE,,,,,,01/03 VE3CF,FN03,,,,,,01/03 VE3CVG,FN25HM,,,,,,01/03 VE3DBP,EN94EE,,,,,,01/03 VE3DEW,FN04,EME,,,,,01/03 VE3DIR,FN03,,,,,,01/03 VE3DSS,FN03FQ,EME,,= VE3KU,,,07/06 VE3DXP,EN92JW,EME,,,,144: 100W 2x 10el,04/06 VE3FAC,FN03IS,EME,,,,,01/03 VE3FAL,EN58DF,EME,,,,,03/05 VE3FGU,FN04GG,EME,,,,50: 1000KW - 144: 600W 19el,10/06 VE3FOD,EN76,,,,,,01/03 VE3JJX,EN29SS,,,,,,01/03 VE3KH,FN03AJ,EME,,EX VE3KDH,,FLEX-5000A & M2 6M5X,06/09 VE3KRP,EN58IJ,EME,,,,,04/07 VE3KU,FN03FQ,EME,,= VE3DSS,,,07/06 VE3NE,FN03FQ,,,,,,01/03 VE3OQC,FN03,,,,,,01/03 VE3SCP,EN93WV,,,,,,01/03 VE3SPW,FN04GG,EME,,,,144: 100W 17el,04/05 VE3STZ,EN82,,,,,,01/03 VE3WMD,EN92JN,,,,,,01/03 VE4AAZ,EN19,,,,,,01/03 VE4ACX,EN19,,,,,,01/03 VE4AJB,EO00,,,,,,01/03 VE4AP,EN19,,,,,,01/03 VE4AQ,EN19OR,,,,,144: 1KW 4218XL,01/01 VE4CCW,EN19,,,,,,01/03 VE4CT,EN19OW,,,,,,01/03 VE4DK,EN19,,,,,,01/03 VE4FV,EN19,,,,,,01/03 VE4GHR,EN19,,,,,,01/03 VE4GLS,EN19,,,,,,01/03 VE4HAY,EN19,,,,,,01/03 VE4JX,EO00,,,,,,01/03 VE4KQ,EN19,,,,,,01/03 VE4KU,EN19,,,,,,01/03 VE4LAR,EN19,,,,,,01/03 VE4MA,EN19LU,EME,,,,,01/03 VE4MBQ,EN19,,,,,,01/03 VE4MHZ,EN19,,,,,,01/03 VE4MX,EN19,,,,,,01/03 VE4OV,EN19,,,,,,01/03 VE4PQ,EN19,,,,,,01/03 VE4RCJ,EN19,,,,,,01/03 VE4RE,EN19,,,,,,01/03 VE4TOM,EN-19,,,,,,01/03 VE4TV,EN19CX,,,,,,01/03 VE4UD,EN19,,,,,,01/03 VE4ZI,EN19,,,,,,01/03 VE4ZK,EN19,,,,,,01/03 VE4ZV,EO10IH,,,,,,01/03 VE5UF,DO61OV,EME,,,,50: 600W 5EL yagi 144: 325W 4 x 2M12,10/08 VE6AFO,DO21,EME,,,,,01/03 VE6AT,DO33GS,EME,,,,432: 5.5m dish GS23b,03/06 VE6BPR,DO32BG,,,,,50: 150W 5el - 144: 250W 16el crossyagi,01/01 VE6CPP,DN39ER,EME,,,,144: 2x 13el 170W,02/08 VE6EGN,DO23QE,EME,,,,144: 22el Xpol 150W,06/05 VE6LR,DO21,,,,,,01/03 VE6NA,DO20,EME,,,,,01/03 VE6NTT,DO31,,,,,144: 170W 17el,01/98 VE6PY,DO20WW,,,,,,01/03 VE6TA,DO33GS,EME,,,,432: 5m dish 800W,02/05 VE6XT,DO,,,,,,01/03 VE7BBG,CN88DT,EME,,,,,04/05 VE7BEE,DN09HG,,,,,,01/03 VE7BQH,CN89KI,EME,,,,384el Collininar,10/05 VE7CFT,CN79ST,,,,,,01/03 VE7CLD,CN89LD,EME,,,,,01/03 VE7DUB,CO88RT,EME,,,,,09/06 VE7DXG,CN88DT,EME,,ex VE3GBA/7,,50: 150W 5el - 144: 150W 15el,02/05 VE7FYC,CN89,,,,,,01/03 VE7IRA,CN89MF,EME,,,,144: 13el 200W,10/08 VE7KPB,DN29CM,,,,,144: 1KW 5wl M2,06/01 VE7LGF,CO90TQ,EME,,VE5AGJ,,FT100D 144: 17B2 500W,11/06 VE7MDL,CN89,,,,,,01/98 VE7RJ,DN09LL,,,,,,01/03 VE7SKA,CN88GT,,,,,,01/01 VE7TIL,CN89LG,,,,,144 : 4x 7el 500W,11/06 VE7US,CN88IG,,,,,,01/03 VE7VVW,DO00IF,,,,,144: 160W KLM2m22c - 432: 100W MBM88,01/02 VE7ZD,CN89LG,,,,,,01/03 VE9AA,FN66NA,,,,,,06/06 VE9DX,FN75aj,,, VE9PA,FN65SU,,,,,,01/03 VK0MT,QD95KM,EME,,,,,03/05 VK1VP,QF44NR,EME,,,,,03/05 VK1WJ,QF44MS,,,EX DK3SA,,TS 50S IC 706 MK2 IC 490A 80W 2m PAm 50W 70cm PA,05/07 VK2ALU,QF55KN,EME,,,,,01/03 VK2AWD,QF56NG,EME,,,,144: 2x 13el 2.2ld 300W,10/06 VK2CZ,QF56NH,,,,,,01/03 VK2DJG,QF59VK,,,,,,01/04 VK2FLR,QF56OD,,,,,,01/03 VK2IT,QF56OH,EME,,,,144: FT-847 350W 1x 8el 12el coming soon,04/06 VK2JKK,QF69LO,,,,,,01/03 VK2KRR,QF34MR,EME,,,,144: 400W 4x 17el,07/06 VK2KU,QF55AI,EME,,,,144: 600W 4x 12el horz,10/08 VK2SN,QF56OC,EME,,,,432: 4x 28el legal pwr,12/05 VK2XCI,QF27WD,,,,,,01/03 VK2XDE,QF56MG,EME,,,,,04/05 VK2ZT,QF57WF,EME,,,,,12/07 VK2ZZF,QF43JP,EME,,,,144: 8 over 8 100W,10/06 VK3AMZ,QF22IC,EME,,,,,01/93 VK3AXH,QF12WI,EME,,,,144: 4x 18el 400W,08/06 VK3CY,QF13,EME,,,,,04/00 VK3DDU,QF22LG,EME,,,,144: 2x 10el 200W,02/09 VK3HY,QF22PD,,,,,,01/03 VK3HZ,QF22ME,EME,,,,,09/05 VK3II,QF21RN,EME,,,,144: 14el 300W,12/06 VK3OT,QF12AG,EME,,,,,01/94 VK3VHF,QF32SE,EME,,,,IC910 GPS Locked 3WL Horz Antenna,07/08 VK3ZYC,QF31NT,EME,,,,144: 2x 10el 4wl Yagis 300W,03/05 VK4/DL2NUD/QG47,QG47WE,EME,,EXPEDITION,,144: 18el 1500W Preamp,02/09 VK4/DL2NUD/QG49,QG49JR,EME,,EXPEDITION,,144: 18el 1500W Preamp,02/09 VK4/DL2NUD/QG53,QG53WL,EME,,EXPEDITION,,144: 18el 1500W Preamp,02/09 VK4/DL2NUD/QG55,QG55WU,EME,,EXPEDITION,,144: 18el 1500W Preamp,02/09 VK4/DL2NUD/QG56,QG56IV,EME,,EXPEDITION,,144: 18el 1500W Preamp,02/09 VK4/DL2NUD/QG64,QG64NC,EME,,EXPEDITION,,144: 18el 1500W Preamp,02/09 VK4/DL2NUD/QG65,QG65FE,EME,,EXPEDITION,,144: 18el 1500W Preamp,02/09 VK4ABW,QH30GT,EME,,,,144: 4x 17el 300W,10/06 VK4ADC,QG62MJ,,,,,50 and 144: Icom IC-7400 100w PEP,01/08 VK4AFL,QG62OG,EME,,,,432: 16x 15el 100W,10/06 VK4APG,QG62LP,EME,,,,,01/94 VK4CDI,QG52XH,EME,,,,144: 300W 4 x 12El Yagi - 432: 450W 4 x 22El Yagi,02/08 VK4EME,QG63KQ,EME,,VK4KAZ,,TS2000,09/07 VK4JMC,QG62FI,EME,,,,4x 14el 200W,08/08 VK4JSR,QG62NM,,,,,50: 100W 8el - 144: 400W 12el - 432: 100W 28el,10/00 VK4KAZ,QG63KQ,EME,,,,,01/03 VK4KDD,QG62LP,EME,,,,,10/06 VK4KZR,QG62LO,EME,,,,,08/00 VK4WS,QG62OK,EME,,,,144: 12el QRP,12/06 VK5DK,QF02JE,,,,,,01/03 VK5MC,QF02EJ,EME,,,,,01/03 VK5OA,QF02JE,,,,,,01/03 VK5ZLX,PF95MK,EME,,,,,04/07 VK5ZLX,PF95MK,EME,,,,,04/07 VK6KDD,OG99HP,EME,,ex VK4KDD PE1OZH,,LT2S LT6S TS850,03/06 VK6KXW,OF87JR,,,VK6ZDY,,,05/07 VK7JG,QE38NN,EME,,,,144: 2x 12el 500W,07/06 VK7MO,QE37PC,EME,,,,144: 4x 10el,03/05 VK8MS,PH57PK,EME,,EXPEDITION,,,10/08 VK9CD,NH87JU,,,,,,01/03 VK9CMO,NH87KT,EME,,Expedititon,,144: 230W 1Yagi 6wl,08/05 VK9XMO,OH29UN,EME,,Expedititon,,144: 230W 1Yagi 6wl,09/05 VK9XW,OH29TI,,,,,,01/03 VP2EC,FK88LD,,,,,,01/03 VP2EDS,FK88,EME,,= KJ9I,,,05/07 VP2MIS,FK86UV,EME,,,,,11/00 VP2MR,FK86VS,,,,,,01/03 VP5JM,FL31VS,,,,,,01/03 VP8NO,GD18BH,EME,,EX G3VUI,,50: 5el Acom 1000 Ampl.,03/08 VQ9LA,MI62,EME,,,,,09/02 VR2KW,OL72LL,EME,,,,,06/07 VS6BI,OL72CG,,,,,,01/03 VT3AT,RJ38UR,,,,,,01/03 VU2BMS,MK80EA,EME,,,,FT 857,02/08 VU2KGB,MK80EA,EME,,,,144: 2x 5el 160W,02/09 VU7RG,MK61JG,EME,,Expedition,,144: 1KW 28XPol Preamp,01/07 W0AH,EM85WB,EME,,ex W2CRS,,144: 18el 700W,08/06 W0AUS,EN35KA,,,,,,01/03 W0BJ,DN91OD,,,,,,01/03 W0DB,EN11VD,,,,,144: 50W 2x 8el,09/01 W0DEN,EN41,,,,,,01/03 W0DFK,EM47LX,,,,,,01/03 W0DJM,EN25XK,,,,,,01/03 W0DQY,EM48RS,,,,,144: 350W 4x8el - 432: 175W 2x88el - 1296: 10W 45el,01/01 W0EKZ,EM17,,,,,,01/03 W0ETT,DM79,,,,,,01/03 W0FMS,EN42EB,,,,,,01/03 W0FY,EM48,,,,,,01/03 W0GAJ,EN11,,,,,,01/03 W0GC,EN14SQ,,,,,,01/03 W0GHZ,EN34LX,EME,,WA0BWE,,FT-736r TS-440 TS-930 TS-700SP 144: 17B2 1KW Xverters on 902Mhz - 10Ghz,12/07 W0GN,EN42,,,,,,01/03 W0GR,EM38AX,,,,,,01/03 W0HHE,DM79,EME,,,,,01/03 W0HL,EM27,,,,,,01/03 W0HP,EN34IT,EME,,,,,11/06 W0HRG,EM39,,,,,,01/03 W0IC,DM79MR,,,,,,01/03 W0IOH,DM78OU,,,not qrv MS nw! (02/01),,,01/01 W0IPL,DN62UU,EME,,,,,01/04 W0ITB,DM79,,,,,,01/03 W0IZ,EN41,,,,,,01/03 W0JRP,EM27RB,,,,,,01/03 W0KFG,DN96OT,,,,,,09/01 W0KJY,DN71,EME,,,,,09/01 W0KRX,EN34LM,,,,,,01/03 W0KT,EN21,,, W0LD,DM78,,,,,144: 1KW 2x16el,04/01 W0LER,EN35IE,,,,,,01/01 W0LGQ,EN21DJ,,,EX N0EKT,,,05/07 W0LMD,DM79,,,,,,01/03 W0MD,EN36,,,,,,01/03 W0NKN,EN42,,,,,,01/03 W0OF,EM12,,,,,,01/03 W0OHP,EN10,,,,,,01/03 W0OHU,EN34OA,,,,,,01/03 W0OZI,EN35,,,,,,01/03 W0OZL,DN60FM,,,,,,01/03 W0PEC,EN34,,,,,,01/03 W0PHD,EN18OE,,,,,144: 190W 16lbx,09/01 W0PPF,EN41,,,,,,01/03 W0PT,EM28OD,EME,,,,144: 4X 19XXX and 1.2kw,03/06 W0PW,EM26TW,,,,,,01/03 W0QIN,EN34,,,,,,01/03 W0RAP,EN42EB,,,,,,01/03 W0RGU,EN35,,,,,,01/03 W0RKP,EN31,,,,,,01/03 W0RRY,EM26BX,EME,,,,144: 700W 9elM2 0.6db Preamp,01/01 W0RSJ,FN20JQ,,,,,,01/03 W0RTZ,DM79,,,,,,01/03 W0RWH,EM39SX,EME,,,,144: 16x19el,10/98 W0SD,EN13GQ,EME,,,,,10/98 W0SII,DN71,,,,,,01/03 W0TJ,EN10,,,,,,01/03 W0TUP,DN98IF,,,,,144: 13B2,03/06 W0UC,EN35,,,,,,01/03 W0UHF,EN32,,,,,,01/03 W0UN,EL07FV,,,,,,01/03 W0UT,EM17,,,,,,01/03 W0VB,EN34QB,EME,,,,144: 21el 1KW,10/06 W0VD,EM27UD,EME,,,,144: TS790A 8877 (1-5KW) 18elM2,01/01 W0VX,EM12,,,,,,01/03 W0WGZ,EN42,,,,,,01/03 W0WOI,EN22TA,,,,,,01/08 W0WTG,EM48,,,,,,01/03 W0XG,EN34GX,EME,,,,144: 2x 14el 1KW,11/05 W0YPT,EN43,,,,,,01/03 W0ZJY,EM28,,,,,,01/03 W0ZQ,EN34IU,,,,,,01/03 W0ZZQ,EM26,,,,,,01/03 W1CDO,CN87XF,,,,,,01/04 W1COT,FN31ST,,,,,,01/04 W1CQD,FN34MR,,,,,,01/04 W1FIG,FN41GV,EME,,ex PE1FIG,,50: 1KW 2x7el - 144: 9el M2 1KW 0.8db - 222: 450W 10el - 432: 450W 18el,01/01 W1FKF,FN42JK,EME,,WB1FKF,,Kenwood TS 2000 4x6 el 800 watts EME 2 Meter,05/07 W1FM,FN42,,,,,,01/03 W1GHZ,FN42,EME,,ex N1BWT,,,11/06 W1HY,FN41HV,,,,,,01/03 W1IPL,FN54FC,EME,,,,144: 4x 12el 200W,01/09 W1JJ,FN41FO,EME,,,,50: 4x 9el 1500W,05/05 W1JR,FN42HN,EME,,,,,12/00 W1LP,FN41SR,,,,,144: 1KW 2x2M9,01/01 W1PWW,FN53DT,EME,,,,144: 2x 18el 1500W,08/05 W1QA,FN32,EME,,PA3GCQ ZL2GCQ WF1R,,Orion - TS2000,05/07 W1QC,FN42HU,EME,,,,,01/03 W1REZ,FN55,,,,,,10/00 W1RZF,FN42FC,,,,,,01/04 W1TE,FN42EN,,,,,50: 1KW 7el - 144: 1KW 22el - 432: 44el,08/01 W1TMZ,FN41GO,EME,,,,144: 4x 12el 1KW,12/08 W1UHE,FN41,,,,,,01/03 W1VT,FN33KE,,,,,,01/03 W1XE,DM79GW,,,,,,01/03 W1XR,FN42HW,,,,,,01/03 W1ZC,FN42DR,,,,,144: 1KW - 432: 36el,01/02 W1ZX,FM18LG,,,,,,01/03 W2AXU,FN20OG,,,,,,01/03 W2BZY,EL98HR,,,,,50: 700W 7el - 144: 400W 2X17el - 222: 300W 23el - 432: 500W 2X38el MGF - 903: 60W 47el - 1296: 50W 55el - 2304 15W 76el - 3456 45W 116el - 10368 1W 2'Dish,04/07 W2CNS,FN13GA,EME,,,,144: 4x 20XP 1KW,07/06 W2CRS,DM78,,,,,,01/03 W2DBL,FN20TK,EME,,,,144: 4x 13el 700W,10/08 W2DRZ,FN02LA,EME,,,,,01/01 W2ETI,FN21,EME,,,,,01/03 W2HBA,FN31TC,,,,,,01/03 W2MPK,FN23BA,EME,,,,,10/99 W2PU,FN20QI,,,,,,05/07 W2SZ,FN22,,,,,,01/03 W2TSL,FN41AA,EME,,,,144: 4x 9el 600W,12/07 W2UHI,EN73AH,EME,,,,,01/03 W2VU,FN20,,,,,,01/03 W2WD,FN20TP,EME,,,,432: 9wl 600W,09/05 W3ARS,FK88LC,,,,,,01/03 W3BDP,FM29,,,,,,01/03 W3BW,FN30AS,,,,,,01/03 W3EME,CN85BE,EME,,ex K3VGX,,144: Icom 746 MGF2430A MGF1302 4x14el X-Pole 8877,01/05 W3HQT,FN54,,,,,,01/03 W3IKE,FM18SW,,,,,,01/03 W3IOA,EM00,,,,,,01/03 W3IWI,FM19ME,,,,,,10/05 W3KJ,FN20HG,,,,,,01/03 W3MRG,FN10UB,,,,,,01/03 W3RY,FN10LL,,,,,,01/03 W3SDZ,FN11,,,,,,01/03 W3SE,DM03WW,,,,,50: 50W 5el - 144: 150W 12el,04/02 W3SZ,FN20AH,EME,,ex WA3JYM,,144: 1500W 2x 2MXO32 - 432: 100W 9wl. - 1296: 10W 4x22el - 2304: 10W 2x2ft dish,10/06 W3TMZ,EL88SU,,,,,,01/03 W3TWO,FM28CA,,,,,144: 400W M2,07/01 W3TWX,FN33UR,EME,,,,IC275H+8877+LNA145+4x18elM2,02/08 W3TWX,FN33UR,EME,,,,IC275H+8877+LNA145+4x18elM2,02/08 W3UR,FM19LG,,,ex WR3E WB3JRU,,FT1000MP FT847 C3I 7el 22ft 1KW,04/05 W3UUM,EL29PW,EME,,ex WA3UUM,,144: 24el 1000W,08/06 W3VH,FN32HG,EME,,,,,01/03 W3WJR,FN20LL,,,,,,01/03 W3XO,EM00KD,,,,,,01/03 W3XS,FN10,EME,,,,,01/00 W3ZZ,FM19JD,,,,,50: 1-5kw 8el 144: 1-5kw 17 el - 432: 1Kw 33el,07/01 W4ABC,EL87PT,,,,,50: 100W 7el qubical quad,01/01 W4AD,FM18IP,EME,,ex K4HWG,,,07/01 W4AME,EM75FG,,,,,,01/03 W4AS,EL95to,,, W4CHA,EL88QA,,,ex WA4CHA,,50: 150W 9el M2 - 144: 1-5KW 2M18xxx - 432: 500W 424B - 1296: 110W 45el - 2304: 5W 45el - 10G: 2W 10ft,01/01 W4CN,EM17JP,,,,,,09/01 W4DNR,EM64rr,,, W4ET,EM56TP,,,,,,01/04 W4FJ,FM17,,,,,,01/03 W4GHW,EM81EQ,,,,,,01/04 W4HTB,EM66,,,,,,01/03 W4KXY,EM84,,,ex WA4KXY,,,01/01 W4LNG,EM73VK,,,,,,01/03 W4LSC,DM25XF,,,,,ICOM 910 w/23 cm,04/08 W4MOP,EM78,,,,,,01/03 W4OZK,EM73,,,,,,01/03 W4PJV,EM65SU,,,,,,01/03 W4PZA,EM66NC,,,,,,01/03 W4RBO,EL99KF,,,,,,01/03 W4RDI,EL96BQ,EME,,,,,01/03 W4REB,EM78,,,,,,01/03 W4RFR,EM65,,,,,,01/03 W4SM,FM08QA,EME,,,,,01/04 W4SW,FM18IW,EME,,,,144: 4x 10el X-Pol 1.5KW Yaesu 767 and 736 to linears through 1296 Yaesu 817 with trvt on 2304 and above,10/05 W4TJ,FM08,EME,,,,,06/00 W4TNV,FM05XD,,,,,,01/03 W4UDH,EM52AG,,,,,,10/07 W4UDQ,EM55DB,,,,,,01/03 W4UE,EM90GC,,,,,,12/97 W4VHF,EM95,,,,,,01/03 W4WD,DN40AM,,,,,,01/03 W4WDH,EM83,,,,,,01/03 W4WHN,EL94HP,,,,,,09/01 W4WSR,EM85CB,EME,,,,144: 4x 8el 700W,12/05 W4WTA,EM83XJ,,,,,144: 160W 18el,11/01 W4XP,FM18EW,EME,,,,FT-2000 FT-847 DEMI 222 DB6NT 1.2 - 10 GHz,09/07 W4ZPG,EM73WU,,,,,,01/03 W4ZRZ,EM63SS,,,,,,01/03 W5AK,EL29,,,,,,01/03 W5AL,DM95XB,,,,,50: 150W - 144: 1KW 18el M2 - 222: 130W - 432: 100W,01/01 W5CTV,EL49WU,,,,,,01/03 W5DBY,EM12,,,,,,01/03 W5DID,EL29,,,,,,01/03 W5DKE,EM12LL,,,,,,01/03 W5DS,EM15,,,,,,01/03 W5ETG,EM12LS,,,,,,01/03 W5FR,EM12KX,,,,,,01/03 W5FYZ,EM32,,,,,,01/03 W5GDL,EM15GM,,,,,,01/03 W5GEL,EL17,,,,,,01/03 W5GG,EM12,,,,,,01/03 W5GKO,EM35,,,,,,01/03 W5GNB,DM73VB,,,,,,01/03 W5GVE,EM01,,,,,,01/03 W5HES,EM12HQ,,,,,,01/03 W5HPT,EM12,,,,,,01/03 W5HTZ,EM16,,,,,,01/03 W5HUQ,EM35BC,,,,,,07/01 W5ITI,EM32,,,,,,01/03 W5IU,EM12HP,,,,,,01/03 W5IXR,DM76,,,,,,01/03 W5JBP,EM12,,,,,,01/03 W5KDA,EM41HM,EME,,,,144: TS790A 4x 17el 500W,08/06 W5KI,EM36cl,,,,,756ProII Acom 1000,08/05 W5KLF,EM31PJ,,,,,,01/03 W5KQJ,EM12BS,,,,,,01/03 W5LBT,EM40KV,EME,,= WB5LBT,,,08/05 W5LUA,EM13QC,EME,,,,,01/03 W5LUU,EL09QO,EME,,,,144: FT736r 1.5KW 4x5wl - 432: 1.5KW 1x5wl,08/01 W5MRF,EM12,,,,,,01/03 W5NFC,EM10,,,,,,01/03 W5PIC,EM16LJ,,,,,,01/03 W5PLN,EM12,,,,,,01/03 W5RCI,EM44UF,EME,,,,,01/97 W5SNX,EM73WT,,,,,50: 150Watts 6M7JHV @65ft - 144MHz : 500Watts 8wl @65ft,01/02 W5SXD,EM02XS,EME,,,,ic-756 ts2000x commander 1500 w on six,06/09 W5TCD,EM12,,,,,,01/03 W5TVG,EM26,,,,,,01/03 W5UC,EM21PI,EME,,,,144:,11/05 W5UN,EM23MG,EME,,,,144: 32x 2M5WL,04/07 W5UPR,EL29,,,,,,01/03 W5UWB,EL17AX,EME,,,,50: 6el 1000W 144: 21el (8wl) 1500W NO elevation 432: 23el 150W,03/07 W5VUY,EM40,,,,,,01/03 W5WJP,EM12HO,,,,,,01/03 W5YUO,EM12,,,,,,01/03 W5ZN,EM45DH,EME,,,,,12/00 W6CAP,DM14,,,,,144: FT726r 1KW 2yagis,01/01 W6CPL,DM04,,,,,,01/03 W6FC,DM03,,,,,,01/03 W6HD,CM98PF,EME,,,,,01/03 W6IHG,FM09TB,EME,,,,144: 11el 300W,01/06 W6IZU,CM98NO,,,,,,01/03 W6KH,CM97,,,,,,01/03 W6MT,CM87XH,,,,,,01/03 W6NQ,DM13,,,,,,01/03 W6OMF,CM98AK,,,ex WB5OMF,,144: 650W 2x17el - 222: 120W 7wl - 432: 175W 2x9el,01/01 W6OUU,DN22SN,EME,,,,144: 700W 18el MXXX,10/08 W6OYJ,DM12,,,,,,01/03 W6QT,CM87,,,,,,01/03 W6SZ,DM14ED,EME,,,,TS-850 TS-700,02/08 W6TE,DM06CT,EME,,,,,01/03 W6US,DM13JA,,,,,,01/03 W6WE,CM95RD,EME,,,,,11/03 W6YLZ,DM04RF,,,,,50: 80W 4el - 144: 150W 14el,01/01 W6YX,CM87WJ,EME,,,,,01/04 W7ALW,DN36AU,EME,,,,50: 8877 9el - 144: 1KW 2x 18xxx - 432: 1500W 4x13wl,06/06 W7AMI,DN13VO,EME,,ex KJ7F,,432: 4x 28el 750W,09/05 W7ANF,DM43AS,,,,,144: 15W Vertical,07/01 W7AV,CN88MB,EME,,,,144: 4x 20XP 600W,07/06 W7BBM,DM42MB,EME,,,,,01/03 W7CE,CN87OA,EME,,,,50: IC-756 PRO III 1500W 1x7MJHV - 144: FT-736R 500W 1x18MXXX Yagi,05/08 W7CI,DM41UN,EME,,,,,01/03 W7CNK,EM15FI,EME,,,,144: 2x 9el 400W,10/06 W7CQ,CN83JX,,,,,,01/03 W7CS,DM42OO,EME,,ex WA6MGZ,,50: 1.5KW 7el - 144: 500W 4x13el - 432: 500W 2x22el - 1296: 15W,08/01 W7DHH,DM48LL,,,,,,01/03 W7DWW,CN87,,,,,,01/03 W7EME,CN85BE,EME,,,,50: 2x 9el 8877 - 144: FT736r Mutek DSP Preamp GS23B 6x 7wl - 432: 8x 42el Xpol 8877,10/08 W7EME/CN72,CN72,EME,,EXPEDITION,,,02/09 W7EME/CN76,CN76,EME,,EXPEDITION,,,02/09 W7EME/CN86,CN86,EME,,EXPEDITION,,,02/09 W7EME/DN11,DN11,EME,,EXPEDITION,,,02/09 W7EME/DN42,DN42WQ,EME,,EXPEDITION,,,03/09 W7EME/DN53,DN53WV,EME,,EXPEDITION,,,03/09 W7EME/EN17,EN17,EME,,EXPEDITION,,,03/09 W7EW,CN84LV,,,ex W7AT N7AVK,,FT1000MP 144: 1-5KW,08/03 W7FN,CN88SA,EME,,,,,11/03 W7GJ,DN27UB,EME,,ex WA1JXN,,50: 4x 9el 1.5KW 144: 16x 17el 1.5KW MGF1402,08/05 W7GTM,CN87VU,,,,,,01/03 W7GZ,DM42NF,,,,,,01/03 W7ID,DN13UN,EME,,,,,01/02 W7IUV,DN07DG,EME,,,,144: 4x 8el 500W 432: 33el 50W,04/06 W7IXL,DM03US,,,,,,01/03 W7JF,DN55RS,,,,,,01/03 W7JW,EN82HJ,,,,,,01/03 W7KK,DM18,EME,,Expedition,,144: 2 x 18XXX at 40'/50' KW Output FT847,04/01 W7LD,DM78OV,,,,,,01/03 W7MEM,DN17NT,EME,,ex N7EIJ,,50: 600W 9el - 144: FT726r 2002A 800W 4x5wl - 432: 800W 4x30lbx,09/01 W7NS,DM33WP,,,,,,01/03 W7NTF,CN87TB,,,,,50: 160W 6el - 144: 160W 13el,01/01 W7OJT,DM26KB,EME,,,,,10/06 W7PW,DM09JI,,,,,,01/03 W7QX,DM44AR,EME,,,,1296: 10 1/2Dish 75Watt,03/04 W7SZ,CN85UO,EME,,,,432: 4x32el X-pol 1.5KW - 1296: 3m dish 500W,01/00 W7TVF,DM26,EME,,,,,01/03 W7UPF,DM42MF,EME,,,,,08/05 W7VQQ,DM19,EME,,,,,01/03 W7VX,DM03TV,,,,,,01/03 W7XU,EN13LM,,,,,144: 1-5KW,08/03 W7ZRC,DN13,EME,,,,,01/03 W8ATH,EN80,EME,,,,,01/03 W8BYA,EN70JT,EME,,,,144: 2x 17elB2 650W Preamp,02/05 W8CM,EM13,,,,,50: IC575H 800W 7el - 144: IC275H 800W 4x9el - 432: IC475H 500W 4x18el,01/02 W8CRZ,EN80TB,,,,,,01/04 W8DQ,EM79NC,,,,,,01/04 W8HOM,EN71LA,,,,,,01/03 W8IDU,EN83,EME,,,,,01/03 W8ISS,EN82JG,,,KD4DLA,,,10/08 W8KSE,EM80,,,,,,01/03 W8LON,EN73JB,EME,,,,144: 2x 17el 400W,08/05 W8MGJ,EM79,,,,,,01/03 W8MM,EM79SD,,,,,,01/03 W8MQW,EN72UR,EME,,,,,01/03 W8OUD,EM79RJ,,,,,,01/03 W8PAT,EN81VG,EME,,,,144: 350 watts 2x12 V or H,04/05 W8SCA,EM79UN,,,,,,01/04 W8TAH,EN91CD,,,,,,01/03 W8TL,FM09BM,,,,,50: FT767 1KW 11el - 144: FT736 1KW 17B2,01/01 W8TN,EM98AL,,,,,,10/07 W8VHF,EN64,,,,,,01/03 W8WN,EM77BQ,EME,,,,50: 600W 4el - 144: 1.2KW 4x16el KLM - 432: 10W,04/05 W9BLI,EN64DP,EME,,,,144: 14db up 40 200 W 432: 17db up 15 100 W,05/06 W9BN,EM34TT,,,,,,01/03 W9CGI,EN60WC,,,,,,01/03 W9DWP,EN52,,,,,,01/03 W9EQI,EM49,,,,,,01/03 W9FF,EN40,,, W9FX,EM57MX,,,,,144: 1KW 17el,07/01 W9FY,EN52,,,,,,01/03 W9FZ,EN43,,,,,,01/03 W9GIR,EN44OG,,,,,,01/03 W9GKA,EM58CP,,,WB9GKA,,K1FO's at 65 feet 100W on all 4 bands,05/07 W9GM,EN43JU,,,,,50: 100W 6el - 144: 100W 13el,05/02 W9HLY,EN70NT,,,,,,01/03 W9IIX,EN61DR,,,,,,01/03 W9IP,FN24KO,,,,,,01/03 W9JMS,EM69,,,,,,01/03 W9JN,EN54DN,EME,,,,50: 1KW 9el m29khw- 144: 1KW M218XXX,12/07 W9KFB,EN60,,,,,,01/03 W9KHH,EN63AH,,,,,,01/03 W9LT,EN52XG,,,,,,01/04 W9NHE,EN53XB,EME,,,,144: 17el M2 400W,06/06 W9NLP,EN52WN,,,,,,01/03 W9NTP,EM79,,,,,,01/03 W9NWR,EN55FW,,,,,,01/04 W9RM,EN52RB,EME,,,,,10/07 W9RPM,EN43JT,,,,,,05/07 W9RVG,EM57RN,EME,,,,IC746 IC910H FT736,06/07 W9SE,EN90LM,,,,,,03/06 W9VA,EN62,,,,,,01/03 W9VNE,EM79,,,,,,01/03 W9XA,EN51UT,EME,,,,144: 8x 13el 600W,10/06 W9XT,EN53,,,,,,01/98 W9ZIH,EN51NV,,,,,,01/03 WA0AUQ,EN41,,,,,,01/03 WA0BWE,EN34LX,,,,,,01/98 WA0CQG,EN34,,,,,,01/03 WA0DXZ,EN41,,,,,,01/97 WA0ETH,EM38PH,,,,,,01/03 WA0JDU,EN34,,,,,,01/03 WA0JMP,EN34,,,,,,01/03 WA0JYF,EN42,,,,,,01/03 WA0KBZ,EM48HB,EME,,,,FT857D 144: 400W 17elB2,03/07 WA0MWW,EN30VX,,,,,,01/04 WA0NOK,EM28,,,,,,01/03 WA0QII,CM97,,,,,,01/03 WA0RDX,EM17,,,,,,01/03 WA0RJT,EN41,,,,,,01/03 WA0SJR,EM56,,,,,,01/03 WA0TAQ,EN61QU,,,,,,01/04 WA0VSL,DM79OB,,,,,50W,08/04 WA0WPJ,EM29,,,,,,01/03 WA0WQI,EM55AA,,,,,,01/03 WA0WRI,EN10,,,,,,01/03 WA1FVJ,FN31QS,,,,,144: 13B2 40W,08/04 WA1HOG,FN42AS,,,,,144: 100W,01/01 WA1JOF,FN44XV,EME,,,,,01/03 WA1JXN,DN27UB,,,,,,01/03 WA1MBA,FN32SL,,,,,,01/03 WA1MEK,FN42,,,,,,01/03 WA1MKE,EN70GH,,,,,,01/03 WA1OFR,FN42MA,,,,,,01/01 WA1T,FN43LK,EME,,,,144: 15el 500W,06/06 WA1TMQ,FN31OJ,,,,,,01/03 WA2ALV,FN33,,,,,,01/03 WA2FGK,FN21BF,EME,,,,144: 4x 12el 1KW,12/08 WA2FUZ,FN22XJ,,,,,,01/03 WA2GFP,FN20,,,,,,01/03 WA2JGY,DM79,,,,,,01/03 WA2LSE,FN20,,,,,,01/03 WA2LTM,FN20,,,,,,01/03 WA2ODO,EM94NX,EME,,,,144: 4x 12el 300W,11/07 WA2VOI,EN35JA,,,,,,01/03 WA2YJF,FN30FR,,,,,,01/03 WA3BZT,FM29EP,EME,,,,144: Flex-5000A GU78b 1.5KW 4x2MXP20,03/08 WA3FFC,FN01,EME,,,,,01/03 WA3KQA,EM98LL,,,,,,01/03 WA3LTB,EN92TA,EME,,,,144: 100W 17el,04/07 WA3RQD,FM19QK,,,,,,01/03 WA3SIX,FN10UB,,,,,,01/03 WA3TTS,EN90,,, WA3USG,FN10LL,,,,,,01/03 WA4ALJ,EM63,,,,,,01/03 WA4CHA,EL88QA,,,,,,01/03 WA4CQG,EM72fo,,, WA4DFS,EM96,,,,,,01/03 WA4EWA,EM63LL,,,,,,01/03 WA4EWV,EM70CE,EME,,,,TS2000 144: 2x 17 element Yagi - QRO,10/08 WA4HEI,EN65UX,,,,,,01/03 WA4HFN,EM55AB,EME,,,,,08/05 WA4JQS,EM77TA,,,,,144: 2x33el 2.5WL,08/01 WA4LBT,EM95,EME,,,,,01/03 WA4NJP,EM84DG,EME,,,,,03/05 WA4PCS,EM78,,,,,,01/03 WA4PGJ,EM55,,,,,,01/03 WA4PGM,FM07TI,,,,,144. 170W 17el,01/98 WA4VWR,EM55,,,,,,01/03 WA4YRK,EM75WV,,,,,IC910 IC756,05/02 WA4ZTK,EM85,EME,,,,,01/03 WA5CJG,EM15,,,,,,01/03 WA5DJJ,DM62PH,,,,,,01/03 WA5ETV,EM15,EME,,,,,01/03 WA5ICW,EM26,EME,,,,,01/03 WA5IYX,EL09,,,,,,01/03 WA5JAT,EM12ET,,,,,,01/03 WA5JCI,EM21,,,,,,01/01 WA5KBH,EM30HL,,,,,,01/03 WA5NFC,EM45,,,,,,01/03 WA5TKU,EM13II,,,,,,01/03 WA5TNY,EM12,,,,,,01/03 WA5UAJ,EM32,,,,,,01/03 WA5UFH,EL19,,,,,,09/01 WA5VKS,EM13PA,,,,,,01/03 WA5WCP,EM12,,,,,,01/03 WA5YOU,EM53EE,,,,,,01/03 WA5YWC,EM13OB,,,,,,01/03 WA5ZIB,EL29,,,,,,01/03 WA6BJE,DM13,EME,,,,,01/03 WA6BYA,CM86,,,,,,01/03 WA6EIW,EM15DI,,,,,,01/03 WA6ERB,DM79,,,,,,01/03 WA6FXL,CM89OB,,,,,144: 9el 100W,09/06 WA6GXF,DM06DX,,,,,,01/03 WA6IJZ,DM44KM,,,,,,01/03 WA6KBL,CM97AG,EME,,,,,01/03 WA6KOU,DN17,,,,,,01/03 WA6LHD,CM88XF,,,,,,01/97 WA6OWM,DM03TU,,,,,50: 100W Loop - 144: 100W 15el,09/01 WA6PXO,DM13DO,EME,,,,144: 2x 9el 200W,10/06 WA6PY,DM13LA,EME,,,,144: 2x20el VE7BQH 700W,11/06 WA6TTY,DM78,,,,,,01/03 WA6UCT,DM34,,,,,,01/03 WA6YGB,DM04WA,,,,,,01/03 WA6ZKY,CM98,EME,,,,,01/03 WA7ADK,DN31WD,EME,,,,,01/05 WA7BJU,CN85,,,,,,01/05 WA7CJO,DM33XL,EME,,,,,01/03 WA7EPU,DM62,,,,,,01/03 WA7GSK,DN13SO,EME,,,,144: 1KW 4x16el K1FO,11/06 WA7HQD,DN31XA,,,,,,01/98 WA7KHO,DN47,,,,,,01/03 WA7SKT,CN86CX,EME,,,,,11/05 WA7TZY,CN87,EME,,,,,12/00 WA8CLT,EN80LA,EME,,,,144: 1500W 4x9M2,03/05 WA8CXI,EM99WK,EME,,PSE QSL direct,,FT847 - 144: 2x 18el CC with max 68deg elevation 8877ampl with 1500W,04/06 WA8EUU,EN82,,,,,,01/03 WA8MIL,EN63,,,,,,01/03 WA8NLC,EM73,,,,,,01/03 WA8OGS,EM79,,,,,,01/03 WA8RJF,EN91IQ,EME,,,,144: 17el 250W,03/05 WA8VPD,EN82,EME,,,,,01/03 WA8WZG,EN81OM,EME,,,,,01/01 WA8YTB,EN72JH,,,,,,01/03 WA9BTT,EN40,,,,,,01/03 WA9BVS,EM69WV,,,,,,01/03 WA9ENA,EN42,,,,,,01/03 WA9FWD,EN53,EME,,,,,01/03 WA9HCZ,EN43JV,,,,,,01/03 WA9HIR,EN61CU,,,,,,01/03 WA9HUV,EN51,,,,,,01/03 WA9JML,EN51PW,,,,,,01/01 WA9NBU,DM14JG,,,,,FT736R - Mirage 160W,05/07 WA9NRB,EM48,,,,,,01/03 WA9O,EN62BX,,,,,,01/03 WA9OUU,EM89,EME,,,,,01/03 WA9PAM,EN44,,,,,,01/03 WA9PSI,EN51,,,,,,01/03 WA9PZL,EM32DN,,,,,,01/03 WB0CLL,EM28,,,,,,01/03 WB0CQO,EN31,,,,,,01/03 WB0DBS,EM17,,,,,,01/03 WB0DGF,EN10PT,,,,,,01/03 WB0DRL,EM18CT,EME,,,,,01/03 WB0GAZ,DM79,,,,,,01/03 WB0GGM,EN34,EME,,,,,01/03 WB0HXY,EN10,,,,,,01/03 WB0ITA,EM29,,,,,,01/03 WB0IUT,EN10,,,,,,01/03 WB0LJC,EN34JV,,,,,,01/03 WB0MLL,EN35,,,,,,01/03 WB0NCR,EN42,,,,,,01/03 WB0OOL,EM48,,,,,,01/03 WB0QGH,EM84,,,,,,01/03 WB0QIY,EN10,,,,,,01/03 WB0QQS,EN10,,,,,,01/03 WB0SIP,EN10,,,,,,01/03 WB0TEM,EN12RT,EME,,,,,10/05 WB0VGI,EN34LL,,,,,,01/03 WB0YFL,EN42,,,,,,01/03 WB0YRQ,EN12,,,,,,01/03 WB0ZJP,EM48,,,,,,01/03 WB1FLD,FN42IW,,,,,,01/02 WB1GQR,FN33KL,,,,,,01/04 WB2BYP,FN13FF,EME,,,,144: 4x 9el 8877,07/05 WB2LSP,FM29DP,,,,,,01/03 WB2OYC,FM29NN,,,,,,01/03 WB2QLP,EL96DE,,,,,50: 400W- 144: 400W- 432: 170W,01/01 WB2RVX,FM29MT,EME,,,,144: 4XP20 700w 432: 28el kW,10/08 WB2SEB,FN31DD,,,,,144: 175W 13el - 222: 100W 10el,03/02 WB2SIH,FN31DD,EME,,,,144: 13B2 800W FT736R SSB-preamp,09/06 WB2SZR,FN20LL,,,,,144: 100W 16el,01/07 WB2VVV,FN21,EME,,,,,01/00 WB4AXQ,EM64,,,,,,01/03 WB4BKC,EL96,EME,,,,,01/03 WB4ECR,EM66QF,,,,,,01/04 WB4EFZ,EM94,,,,,,01/03 WB4GTB,EM73VW,,,,,,01/03 WB4JEM,EL89QU,,,,,50: 6elQuad 500W - 144: 16x10el preamp 1-5KW - 222: 17el 160W - 432: 24el 500W,01/01 WB4KMH,EM75RV,,,,,,01/01 WB4LHD,EM55DB,EME,,,,,02/05 WB4NFS,FM18HP,,,,,144: 400W,01/97 WB5AFY,EM04ID,EME,,,,,02/05 WB5APD,EM84AK,,,,,144: 1.5kw 17 el,01/01 WB5DSH,EM15,,,,,,01/03 WB5IPM,EM12,,,,,,01/03 WB5KDC,EM15,,,,,,01/03 WB5KYK,EM51JQ,,,,,,01/03 WB5LBT,EM40LK,EME,,= W5LBT,,,01/01 WB5NIF,EM42AM,,,,,,01/03 WB5R,DM93PB,,,,,,01/09 WB5ROR,EM23,,,,,,01/03 WB5TBL,EM12,,,,,,01/03 WB5TCO,EN64,,,,,,01/03 WB5VPC,EM12,,,,,,01/03 WB6WLR,DM13AT,,,,,144: 8877 2x17B2 - 432: 8938 2xFO33,01/01 WB7OSE,CN87XT,,,,,,01/03 WB7UNU,CN85OJ,EME,,,,144: 170W 17el,11/05 WB8AGV,EN34,,,,,,01/03 WB8IFM,EM79WS,,,,,,01/03 WB8NUT,EM79UB,,,,,,01/03 WB8SKP,EN66UC,,,,,,01/04 WB8TFV,FM19AL,,,,,,01/03 WB8TGY,EN72PP,EME,,,,144: 13B2 antenna,03/05 WB8WTB,EN72,,,,,,01/03 WB8XX,EM79,,,,,,12/00 WB9BWP,EN52,,,,,,01/03 WB9F,EM57QQ,,,,,ICOM 756 PRP III,10/05 WB9HLM,EN52IW,,,,,,01/03 WB9IHS,EM69,,,,,,01/03 WB9IIV,EM69ST,EME,,,,144: 11el 150W,02/06 WB9OGM,EN61,,,,,,01/03 WB9OQB,EN44WP,,,,,FT 817,05/08 WB9OWN,EN52,,,,,,01/03 WB9PNU,EM48TN,EME,,,,144: Antenna: 4x M2 2M9 Icom 756Pro DEMI Transverter Lunar Link LA22,09/07 WB9SNR,EN62AC,,,,,,01/03 WB9SPT,EN71AS,,,,,,01/03 WB9USX,EM79,,,,,,01/03 WB9UWA,EN50KK,EME,,,,144: 4x UWA12's 18.5 dbd low temperature MC2K 2x GU74B's MGF1302,10/00 WB9ZAI,EN61GM,,,,,,01/03 WC4N,EM86,,, WC9C,EM69HH,,,,,,01/03 WD0AAD,DM79,,,,,,01/03 WD0ALN,EM32,,,,,,01/03 WD0APF,EN10,,,,,,01/03 WD0BQM,DN81CW,,,,,,01/03 WD0CJM,EN25FH,,,,,,01/03 WD0EDO,EN10TL,,,,,,01/03 WD0FCH,EM48,,,,,,01/03 WD0GML,EM48,,,,,,01/03 WD0HOJ,EN41,,,,,,01/03 WD0L,EM17IH,,,,,,01/03 WD0M,DM67KG,,,,,,01/04 WD4ECK,CN82,,,,,,01/03 WD4FAB,EL98HP,,,,,,01/03 WD4KPD,FM15MM,,,,,,05/02 WD4MUO,DM79GX,,,,,,01/03 WD4OZN,EM55LK,,,,,,01/03 WD5AGO,EM26BD,EME,,,,,03/00 WD5CAN,EM36,,,,,,01/03 WD5CAP,EM36,,,,,,01/03 WD5DJT,EM12OO,,,,,,01/03 WD5EAE,EM22KQ,EME,,,,FT-847,11/07 WD5EWD,EM22,,,,,,01/03 WD5G,EM05,,,,,,01/03 WD6BXE,DM22,,,,,,01/03 WD6DBM,CM97AI,EME,,,,144: 2x 17el 500W,10/06 WD8BYA,FM18IP,,,,,,01/03 WD8SDL,EM79,,,,,,01/03 WD9BGA,EN53BA,,,,,,01/03 WD9EGE,EN64,,,,,,01/03 WD9EXD,EN61,,,,,,01/03 WD9FBL,EN61BV,,,,,,01/03 WD9IIX,EN61,,,,,,01/03 WE2Y,FN02SR,EME,,,,,01/03 WE4K,EM77BQ,,,,,,01/03 WE7L,DM41,,,,,,01/03 WE7P,DN13RP,EME,,,,,01/03 WE9D,EN52,,,,,,01/03 WE9V,EN52XN,,,,,,07/08 WE9Y,EN82EW,EME,,,,IC910H LA22 AM6155 144: 2x 18el 1500W,04/07 WF1F,FN42,,,,,,01/03 WF1R,FN32,,,,,,01/03 WF4R,FM16TS,,,,,,01/03 WF9M,EM79,,,,,,01/03 WH6LR,EM04LL,,,,,,01/03 WI7P,DN40ER,EME,,,,144: 2x 11el 1000W,11/06 WJ6T,DM05HL,EME,,,,144: 4x 9el 500W and new 7/8,04/07 WK9E,EN53,,,,,,01/03 WL7M,BO49IR,,,,,,01/03 WL7U,BP51,EME,,,,50: 150W 5el - 144: 300W 2x10el - 432: 900W- 6x20el,01/98 WM2Z,FN31SA,,,,,IC-746PRO TS-850SAT,10/07 WM5Y,EN31,,,,,,01/03 WN3CDW,FN11XB,EME,,,,50 MHZ: 1200 Watts 5 Element M2 6M5X Yagi,08/08 WN4BML,EL89LL,,,,,,01/03 WN4KKN,EM10,,,,,,01/03 WN4M,EM66,,,,,100W,01/04 WO9S,EN61ET,EME,,,,144: 13el 140W,10/06 WP4G,FK68VG,EME,,,,144: 1KW 2x2MX28P,08/05 WP4O,FK68,,,,,144: FT736r 400W 18ft langyagi preamp,01/01 WQ0P,EM19VF,,,,,,09/01 WQ5S,EM13RC,EME,,EX KA5UIQ KF5FQ,,144: FT847 4x2M12el 1500 432: 1x31 50W,04/07 WQ5W,EM12FW,EME,,,,TS2000,09/06 WR0F,EM29TC,,,,,,01/03 WR0I,EM17,,,,,,01/03 WR6S,DM14CP,,,,,,01/03 WR9W,EM68FA,,,,,,01/03 WS5R,DM95,,,,,,01/03 WT0W,EN34,,,,,,01/03 WU8Y,EN82JW,,,KC8DQH,,,07/07 WV0K,EN13,,,,,,01/03 WV1K,FN41WR,,,,,,01/05 WV2C,FN30,,,,,144: IC706 180W 15el,01/98 WW2R,EM13QD,EME,,,,,04/06 WW4T,EM83,,,,,,01/03 WW8M,EN72XF,EME,,,,144: 4x 18 M2XXX 1KW,03/07 WX9M,EN54FL,,,,,,01/03 WY0C,EM17IT,,,,,,01/03 WY0V,EN12,,,,,,01/98 WY3G,EM55,,,,,,01/03 WY5R,DM95BE,,,,,TS2000,06/08 WZ1V,FN31MP,,,,,50: 600W 5el - 144: 1kw 17el - 222: 500W 15el - 432: 500W 24el,05/07 WZ8D,EM89BI,,,ex WB8IGY,,50: 1.5KW 6el - 144: 1.5KW 2x 17el,03/06 WZ9D,EN51,,,,,,01/03 XE1AVM,DK79UA,,,,,,01/03 XE1GE,EK08,,,,,,01/03 XE1GRR,DL80IP,EME,,,,50: 4x 6 el - 144: FT736 2x 17el H+V 250W - 432: 4x 33el H+V,09/06 XE1XA,EK09,EME,,,,,01/03 XE2AT,DL81UU,EME,,ex XE2YVW,,144: IC820 400W 4x 9el,01/07 XE2NS,EL05AG,EME,,,,144: 2x 17el 160W,11/08 XE2OR,DL98OK,,,,,144: 13B2 160W,08/05 XF4DL,DK48MS,EME,,SpecialCall,,144: 2x 11el 350W,10/06 YB0US,OI33JU,,,,,,01/03 YL1A,KO07UN,,,Expedition,,,05/03 YL27HF,KO27VC,,,SPECIALCALL,,,09/07 YL2AO,KO16DK,,,,,,08/07 YL2GJW,KO06MM,,,AS WELL KO06RM,,TS2000x TE-1452g(400W) 2xEF208 (vert stack) 9el Yagi for additional rx,12/08 YL2GUI,KO06MM,,,,,144: TS-570+FTV-250 9el 30W,03/04 YL2HA,KO26BV,EME,,,,144: 4x 16el 400W,08/08 YL2IV,KO06MM,,,UQ2IV,,FT-817D 144: 7el QYAGI 432: 11el QYAGI,04/08 YL2KA,KO26AX,,,,,,03/02 YL2LW,KO26CW,,,,,,07/05 YL2OK,KO37AS,,,,,,11/04 YL2OW,KO26WL,,,ex UQ2OW,,FT736R IC706MKIIG,01/05 YL3DW,KO26CW,,,,,,11/02 YL3GCT,KO26BW,EME,,,,432: 8x9el DK7ZB 180W,11/05 YL3GDF,KO26XM,EME,,,,144: 8x 13el 1KW,03/07 YL3GDJ,KO26AX,,,,,,01/05 YL3GDR,KO26HT,EME,,,,,03/07 YL3HA,KO26DW,,,,,,12/07 YL90HA,KO26BV,EME,,SPECIALCALL,,,10/08 YM3XC,KN30FC,,,Expedition,,,11/02 YO0IS,KN05PS,,,SpecialCall,,,01/93 YO2AMU,KN06OC,EME,,,,144: 4x16el MGF1302 1KW 432: 4x 21el 1KW,08/05 YO2BBT,KN05WG,,,,,144: FT897 300W 10el,12/08 YO2IS,KN05PS,EME,,,,144: 4CX250B 10el BF981 - 432: 4X150D 17el 3SK97,01/06 YO2KQT,KN05PS,,,,,FT-847 50W 1xF9FT 3WL,09/07 YO2LEA,KN06WK,,,,,144: IC-211 lin.Mirage B 215G - 6m and 70 cm transverters,03/01 YO2NAA,KN05OS,,,YO5QCF,,FT-847 8EL Yagi,05/08 YO3DMU,KN34BJ,EME,,,,144: TS870 +Trsv 1KW MGF1302 16el,03/07 YO3FFF,KN34CJ,EME,,,,144: TS450 Trvtr 100W B-310G GaAs Preamp 16el Tonna,04/05 YO3IZI,KN34BK,EME,,,,TS2000,01/04 YO3JW,KN34CK,,,,,144: 400W 16el F9FT 3P602A-2,04/00 YO3KWJ,KN24,,,Expedition,,,01/93 YO4AUL,KN44HE,EME,,,,144: FT897 200W 1x16el 10m boom,04/07 YO4BZC,KN45AK,,,,,IC 706 5 el delta loop HM PA 70W,07/05 YO4FEI,KN45NB,,,,,144: 50W 9el,11/06 YO4FNG,KN44HD,EME,,,,144:FT847/MGF1302/12 el. DK7ZB/GS35 432:16 el. DL6WU/50W 1296: DB6NT/20W 15 el. DL6WU,05/08 YO4FYQ,KN44HE,EME,,,,FT-847 50: 100W 5el 7ZB - 70: 25W 5el 7ZB - 144: 10el 7ZB 700W - 432: 50W 13el,05/06 YO4GJH,KN35XG,,,,,FT 847 MIRAGE B2518G 2xGI7b DK7ZB 14 el.,10/07 YO4KRB,KN44HE,EME,,,,144: 400 W 10 el 7ZB FT 847 MGF 1302,01/06 YO4RFV,KN45AK,,,,,,08/02 YO4RXX,KN45AK,,,,,,07/03 YO5AVN,KN34,,,,,,01/93 YO5BIM,KN07XB,,,,,,05/04 YO5BIN,KN17WW,EME,,,,HM Transverter + TS 140 800W 4x 9el F9FT MGF1302,05/07 YO5BWD,KN27GD,,,,,,08/00 YO5CFI,KN16WJ,,,,,FT857D HF PSK: 40W 50 MHz: 100W dipole 144 MHz: 150W 2x9el TONNA,06/09 YO5CXI,KN16WJ,,,,,144: 50W 2x 9el,10/06 YO5DJM,KN17,EME,,,,,01/93 YO5KAI,KN16TE,EME,,,,,06/99 YO5KAV,KN16TS,EME,,,,,06/99 YO5KUW,KN17UL,,,Expedition,,,08/06 YO5OCZ,KN17UL,,,,,TS 2000 X TS 700 S TS 820 + TV 502 QRO GI7B,03/09 YO5OHY,KN17SP,,,,,,12/06 YO5TE,KN16TS,EME,,,,144: 1KW 4x10el MGF1302,01/02 YO5TP,KN16SS,,,,,144: 40W 16el,05/06 YO7CGS,KN15OA,,,,,,08/97 YO7CKQ,KN15OA,,,,,,05/01 YO7HLI,KN25EC,,,,,,08/08 YO7IV,KN24MT,,,,,144: TS850 + Tcvr 2x4CX250b 800W 15el 9BV,05/03 YO7NE,KN25EC,EME,,,,FT857 144: 100W 2x17el F9FT,01/08 YO7VS,KN14VH,,,,,50: 2XQB3/300 2xBF981 5el LY J-Pol crossdipole - 144: 2x4CX250b CF300 Swan/Swan,10/98 YO7VT,KN25EC,EME,,,,,12/08 YO8BCF,KN36KN,EME,,,,TS2000X 4x 10el 1KW,04/07 YO8BSE,KN36EW,,,,,,10/95 YO8CLN,KN27QG,,,,,,08/08 YO8CYN,KN36LW,,,,,,08/01 YO8RHI,KN37TE,,,,,,07/05 YO8RTS,KN27SM,,,,,144:FT847 11 el f9ft 150 W RF Concepts,01/07 YO8TNA,KN37EW,,,,,,05/08 YO8TNB,KN37EW,,,,,,06/09 YO9FRJ,KN34AW,EME,,EX YO4FRJ,,144: 2 x3CPX800 + 4x17B2 + MGF1801 - 432: 50W 18el. Yagi CPol - SAT - 1296: 4 x 67el + FT736,03/08 YO9HP,KN35BA,EME,,,,,09/07 YP0A,KN27GD,,,Expedition,,,01/92 YP2U,KN05OS,,,,,,05/08 YR0A,KN16TS,EME,,Expedition,,,06/99 YR5A,KN16TS,EME,,Expedition,,,06/99 YR99E,KN34,,,Expedition,,,08/99 YT1VP,JN94XC,,,,,TS440 FT225,08/08 YT1VV,JN94US,,,ex YU1VG,,,07/00 YT1W,JN91,,,Expedition,,,01/90 YT2ACA,KN03WE,,,,,FT-221r,05/08 YT3I,KN05HP,EME,,EX YU7EW,,144: 500Watt 4x 9el MGF1302,01/09 YT4D,JN94CP,,,,,144: 250W 11el,08/00 YT6A,JN92,,,,,,08/06 YT7AC,JN95,,,,,,03/97 YT7C,KN05FJ,,,YU7AAA 4O9T,,144: GS35B 4x10+2x10 el BVO 3WL,11/08 YT7G,JN94XC,,,= YU7GOL,,144: MGF1302 GS35B 4x10el + 2x10el BVO-3wl,07/06 YT7W,KN05QD,,,,,,08/08 YT7WA,KN05EJ,,,SpecialCall,,144: 1KW 4x4el Loop 11el WU MGF1302,12/01 YU0TESLA,KN03QM,EME,,SpecialCall,,144: 16 x 7el Yagi (by Dual) full elevation 25dBi 1.5Kw MGF1302,04/06 YU150CF,KN03QM,EME,,SpecialCall,,144: 16 x 7el Yagi (by Dual) full elevation 25dBi 1.5Kw MGF1302,04/06 YU150FU,KN05DK,,,SPECIALCALL,,,07/06 YU1ADN,KN03KN,,,,,,06/96 YU1AFS,KN04FT,,,,,,01/92 YU1AGP,KN03WE,,,,,FT-221R,07/07 YU1AZK,KN04,,,,,144: 25W 2x11el,10/98 YU1BT,KN03KN,,,,,,07/06 YU1BW,KN04GT,,,,,,04/02 YU1CF,KN03QM,EME,,ex YU1OYA,,IC746PRO 50: 4x 6el Yagi 1KW preamp 144: 1500W 16x 7el Yagi MGF1302,11/06 YU1EU,KN04DW,,,,,,08/98 YU1EV,KN04CN,,,,,,04/06 YU1EXY,KN04FT,,,,,144: FT225rd 350W 16el F9FT MGF1302,01/02 YU1HFG,KN02XX,,,,,,12/95 YU1IO,KN04IQ,,,,,144: 600W 4x17el,11/97 YU1JB,KN04GT,EME,,EX YU1PTB,,144: 4x 10el 500W,12/07 YU1L,KN02XX,,,,,,12/95 YU1LA,KN04FR,,,,,144: IC910 17B2 LY,10/05 YU1MS,KN04ET,,,,,,11/07 YU1OO,KN02XX,,,,,,01/93 YU1OS,KN04FS,,,,,144: FT225rd 100W 2x9el MGF1302,11/99 YU1S,JN94US,,,,,144: 17el 400W,11/97 YU1WP,JN94OM,,,,,,07/96 YU1ZF,KN03IR,,,,,,01/91 YU3LT,KN05HP,EME,,YZ7RLT YT7RLT,,YAESU FT225RD,01/08 YU4AR,JN94AS,,,= 4O4AR,,144: TR9130 250W 10el PA0MS-ant Preamp,11/02 YU6AO,JN92,,,,,,08/06 YU7AA,JN95NS,EME,,ex YU1NOK,,TS850 - 144: 4x 10el 7ZB 500W - 432: 2x 2x 22el,04/06 YU7AAA,KN05FJ,,,YT7C 4O9T,,144: GS35B 4x10+2x10 el BVO 3WL,11/08 YU7ACO,KN05QC,,,,,144: FT221r PA 200W 2x 10el. DJ9BV,08/00 YU7AJH,JN95WF,,,,,,01/90 YU7AR,KN05BW,,,ex YU7PXB,,IC745- FT225RD- 144: 4x5wl MGF1412 YL1056,12/01 YU7AS,KN05DJ,,,,,144: 150W 8x 6el Loop,08/05 YU7AU,KN04HV,,,,,144: 250W 2x11el,12/01 YU7AZX,KN04AX,,,,,,08/03 YU7BCL,KN05FW,,,,,,12/97 YU7BCX,KN05HP,,,,,,08/96 YU7CV,JN95WK,,,,,,01/95 YU7EF,KN04HV,EME,,EX YU7PFR,,FT847,01/09 YU7FF,KN05EP,,,,,,01/94 YU7FU,KN04,,,EX YU7MJA,,,05/07 YU7GOL,JN94XC,,,= YT7G,,144: MGF1302 GS35B 4x10el + 2x10el BVO-3wl,03/06 YU7KB,JN94XX,,,,,144: IC202 2x11el 800W Preamp (MGF1302),02/04 YU7MS,KN05EF,,,,,144: 400/1KW 2x11el WU MGF1302,11/08 YU7ON,KN04AX,,,,,144. TR751 4x11el 25W,08/00 YU7PAA,KN04AX,,,ex YZ7MON,,MGF1302 GS35B 11el Yagi,12/07 YU7PS,KN05FJ,,,,,144: 400/1KW 2x11el WU MGF1302,11/08 YU7VA,KN05EJ,,,,,144: 100Watt 11el BFT 66,05/00 YU7XL,JN95NT,EME,,YU2JL YU2RTU,,FT897 50: 100W 8el yagi 144: 1000Watt 16x8 yagi my design MGF1802,10/08 YV5KXE,FK60NM,EME,,,,144: 11el Yagi 150W,06/06 YV5LIX,FK60NM,EME,,,,IC-275H FT-100D TS-600 200W 18db Antenna,04/05 YV5ZZ,FK60SM,EME,,,,,01/05 YZ1DO,KN04ER,,,,,,08/99 YZ1KU,KN04EU,,,,,144: 10W 9el F9FT,05/03 YZ7UN,KN05EI,,,,,144: 4x6el Loop 100W,01/01 Z30B,KN01PA,EME,,,,144: 1-5KW 4xYU0B (17-5db) MGF1302,08/00 Z31DX,KN11GD,,,ex YT5G,,,06/99 Z35Z,KN11CR,EME,,EXZ32UC YU5UC - QSLS VIA DL8EBW,,144: IC202 500W 4x4el Loop MGF1302 432: 15W 1296: 10W,11/07 Z37CEF,KN01QA,,,ex YU5CEF,,,11/99 Z38C,KN01QX,,,EX HA1CA,,FT847,10/07 Z38R,KN12AG,,,,,FT847,10/07 ZA0DXC,KN01,,,Expedition,,,01/91 ZB0W,IM76HE,,,Expedition,,,01/93 ZD8B,II22TB,EME,,= W1MRQ,,144: 4x 5el 180W,11/08 ZK1EME,BG08CT,EME,,EXPEDITION,,144: 2x 3.2wl X-Pol yagis 8877 1.5KW,01/08 ZL1BT,RF73LC,EME,,,,144: 12el 400W,03/06 ZL1IU,RF64VR,EME,,,,144: 4x12el 1.2KW,10/05 ZL1PE,RF74DG,,,,,,01/03 ZL1RS,RF64VS,EME,,,,,09/08 ZL1WN,RF73HG,EME,,,,144: 4x 18el 400W,06/06 ZL2DX,RE78RR,EME,,ZL4OY ZL4OY/A ZL4OY/C ZL7OY ZM8OY ZL8OY,,144: 4x 10el 500W full elevation - 432: 18el 100W,04/07 ZL3AAD,RE66GR,EME,,,,,01/03 ZL3AAU,RE66EL,EME,,,,,06/07 ZL3CU,RE66GL,EME,,,,144: 250W 2 by 12 element,03/07 ZL3NW,RE66HO,EME,,,,,03/05 ZL3TY,RE57OM,EME,,,,,05/05 ZP4KFX,GG15LV,,,,,,03/01 ZR1ADI,JF95KU,,,,,,01/02 ZR1AEE,JF96IA,,,,,,01/02 ZR1EV,JF96IC,,,,,50: FT690r 200W 4el,11/96 ZR1L,JF96HD,,,,,,10/02 ZR1TRD,JF96HC,,,,,,01/02 ZR1WZ,KF05QP,,,,,,01/04 ZR2DX,KF26,,,,,,02/02 ZR5ADQ,KG50IA,,,,,,01/02 ZR6ABU,KG33XV,,,,,,01/03 ZR6CRW,KG33,,,ex ZR6ABU,,,10/02 ZR6DXB,KG33XX,,,,,,10/02 ZR6GE,KG43AR,,,,,,10/02 ZR6KHJ,KG43CU,,,,,,02/02 ZS1EK,JF95FU,,,,,,01/02 ZS1LS,JF96FD,EME,,,,IC-910H,05/09 ZS2ACP,KF26SA,EME,,,,144: 2x 8el 150W,12/07 ZS2BWB,KF26TD,,,,,,02/02 ZS2GK,KF47KT,EME,,S83X,,Icom IC-746Pro Yaesu FT-847,03/09 ZS4JJ,KG30FV,EME,,,,Kenwood TR900 144: 16el 60W,10/08 ZS4KB,KG32,,,,,,10/02 ZS4NS,KG32IA,,,,,50: IC551D 6el 80W - QSL via N7RO,02/01 ZS4TX,KG30BW,,,,,,01/02 ZS5AV,KF69GX,,,,,,01/03 ZS5DJ,KG59AA,,,,,,01/02 ZS5LEE,KG50JF,EME,,,,IC821 706MKIIG 144: 4x 2m18XXX QRO 432: 2x 27el 100W,04/05 ZS5Y,KF59JR,EME,,,,1296: 3.7m dish 50W,08/05 ZS6AVP,KG44OD,,,,,,05/02 ZS6AXT,KG33VV,EME,,,,,03/05 ZS6BTE,KG33XV,EME,,,,144: 2x 4wl Yagis 100W,08/05 ZS6BUN,KG43CU,EME,,,,144: 12el 300W,06/06 ZS6DTS,KG43AR,,,,,,10/02 ZS6EGB,KG43BQ,,,,,,10/02 ZS6GER,KG33,,,,,,02/02 ZS6GPM,KG33XU,,,,,,10/02 ZS6HS,KG33XR,,,,,,01/02 ZS6JDE,KG44DG,EME,,,,144: 2x 9el 400W,08/06 ZS6JON,KG33VV,,,,,,10/02 ZS6JR,KG44,EME,,,,,07/05 ZS6MRK,KG34XH,EME,,,,144: 400W 2M7,03/06 ZS6NK,KG46RC,EME,,ex ZS6PJS,,144: 2x 13wl 120W,09/05 ZS6OB,KG44DE,EME,,,,144: 4x 16el 300W,01/07 ZS6RAD,KG44CA,,,,,,10/02 ZS6UT,KG44EF,,,,,,01/02 ZS6WAB,KG46RC,EME,,,,144: 8x 17el 350W,09/06 ZS6WB,KG44DH,EME,,,,144: 2x9 el 350W,11/06 ZS6WI,KG46RC,,,,,,01/03 ZS6Y,KG33WU,,,,,,02/02 ZZZZZZ,End-Of-Call3-Database 2009-07-01 01:15:53 UTC VHF-DATABASE Export � 2009 by DG2KBC & DL8EBW wsjt_9.3.r2792/wrapkarn.c0000664000175000017500000000343110736200035013362 0ustar jtnjtn#include #include #include #include #include #include "rs.h" void *rs; static int first=1; #ifdef CVF void __stdcall RS_ENCODE(int *dgen, int *sent) #else void rs_encode_(int *dgen, int *sent) #endif // Encode JT65 data dgen[12], producing sent[63]. { int dat1[12]; int b[51]; int i; if(first) { // Initialize the JT65 codec rs=init_rs_int(6,0x43,3,1,51,0); first=0; } // Reverse data order for the Karn codec. for(i=0; i<12; i++) { dat1[i]=dgen[11-i]; } // Compute the parity symbols encode_rs_int(rs,dat1,b); // Move parity symbols and data into sent[] array, in reverse order. for (i = 0; i < 51; i++) sent[50-i] = b[i]; for (i = 0; i < 12; i++) sent[i+51] = dat1[11-i]; } #ifdef CVF void __stdcall RS_DECODE(int *recd0, int *era0, int *numera0, int *decoded, int *nerr) #else void rs_decode_(int *recd0, int *era0, int *numera0, int *decoded, int *nerr) #endif // Decode JT65 received data recd0[63], producing decoded[12]. // Erasures are indicated in era0[numera]. The number of corrected // errors is *nerr. If the data are uncorrectable, *nerr=-1 is // returned. { int numera; int i; int era_pos[50]; int recd[63]; if(first) { rs=init_rs_int(6,0x43,3,1,51,0); first=0; } numera=*numera0; for(i=0; i<12; i++) recd[i]=recd0[62-i]; for(i=0; i<51; i++) recd[12+i]=recd0[50-i]; if(numera) for(i=0; i32767) i=32767; if(i<-32767) i=-32767; n=i return end subroutine addnoise wsjt_9.3.r2792/rfile2.f0000664000175000017500000000113411613556251012732 0ustar jtnjtn subroutine rfile2(fname0,buf,n,nr) C Read a wave file. integer RMODE parameter(RMODE=0) integer*1 buf(n) integer open,read,close integer fd character fname0*(*) character fname*80 data iz/0/ !Silence g77 warning fname=fname0 do i=80,1,-1 if(fname(i:i).ne.' ') then iz=i go to 10 endif enddo 10 fname=fname(1:iz)//char(0) fd=open(fname,RMODE) !Open file for reading nr=read(fd,buf,n) i=close(fd) return end wsjt_9.3.r2792/wsjtgen.f900000664000175000017500000001575411562563654013426 0ustar jtnjtnsubroutine wsjtgen ! Compute the waveform to be transmitted. ! Input: txmsg message to be transmitted, up to 28 characters ! samfacout fsample_out/11025.d0 ! Output: iwave waveform data, i*2 format ! nwave number of samples ! sendingsh 0=normal; 1=shorthand; -1=plain text; 2=test file parameter (NMSGMAX=28) !Max characters per message parameter (NSPD=25) !Samples per dit parameter (NDPC=3) !Dits per character parameter (NWMAX=150*11025) !Max length of Tx waveform parameter (NTONES=4) !Number of FSK tones integer itone(84) character msg*28,msgsent*28,idmsg*22,msg22*22 real*8 freq,pha,dpha,twopi,dt character testfile*27,tfile2*80 logical lcwid integer*2 icwid(110250),jwave(NWMAX) integer*1 hdr(44) integer*2 nfmt2,nchan2,nbitsam2,nbytesam2 character*4 ariff,awave,afmt,adata common/hdr/ariff,lenfile,awave,afmt,lenfmt,nfmt2,nchan2, & nsamrate,nbytesec,nbytesam2,nbitsam2,adata,ndata,jwave equivalence (ariff,hdr) data twopi/6.28318530718d0/ include 'gcom1.f90' include 'gcom2.f90' call cs_lock('wsjtgen') fsample_out=11025.d0*samfacout if(abs(samfacout-1.d0).gt.0.02d0) fsample_out=1.d0 if(mode(1:4).eq.'Echo') then dither=ndither call echogen(necho,dither,iwave,nwave,fecho) !### Samfacout ??? goto 999 endif lcwid=.false. if(idinterval.gt.0) then n=(mod(int(tsec/60.d0),idinterval)) if(n.eq.(1-txfirst)) lcwid=.true. if(idinterval.eq.1) lcwid=.true. endif msg=txmsg ntxnow=ntxreq ! Convert all letters to upper case do i=1,28 if(msg(i:i).ge.'a' .and. msg(i:i).le.'z') & msg(i:i)= char(ichar(msg(i:i))+ichar('A')-ichar('a')) enddo txmsg=msg ! Find message length do i=NMSGMAX,1,-1 if(msg(i:i).ne.' ') go to 10 enddo i=1 10 nmsg=i nmsg0=nmsg if(msg(1:1).eq.'@') then if(msg(2:2).eq.'/' .or. ichar(msg(2:2)).eq.92) then txmsg=msg testfile=msg(2:) tfile2=testfile call rfile2(tfile2,hdr,44+2*120*11025,nr) if(nr.le.0) then print*,'Error reading ',testfile stop endif do i=1,ndata/2 iwave(i)=jwave(i) enddo nwave=ndata/2 do i=nwave,NTXMAX iwave(i)=0 enddo sending=txmsg sendingsh=2 go to 999 endif ! Transmit a fixed tone at specified frequency freq=1000.0 if(msg(2:2).eq.'A' .or. msg(2:2).eq.'a') freq=882 if(msg(2:2).eq.'B' .or. msg(2:2).eq.'b') freq=1323 if(msg(2:2).eq.'C' .or. msg(2:2).eq.'c') freq=1764 if(msg(2:2).eq.'D' .or. msg(2:2).eq.'d') freq=2205 if(freq.eq.1000.0) then read(msg(2:),*,err=1) freq goto 2 1 txmsg='@1000' nmsg=5 nmsg0=5 endif 2 nwave=60*fsample_out dpha=twopi*freq/fsample_out do i=1,nwave iwave(i)=32767.0*sin(i*dpha) enddo goto 900 endif dt=1.d0/fsample_out LTone=2 if(mode(1:4).eq.'JT65' .or. mode(1:3).eq.'JT4' .or. & mode(1:5).eq. 'ISCAT' .or. mode(1:4).eq.'JTMS' .or. & mode(1:5).eq. 'Diana') then if(mode(1:4).eq.'JT65') then ! We're in JT65 mode. if(mode(5:5).eq.'A') mode65=1 if(mode(5:5).eq.'B') mode65=2 if(mode(5:5).eq.'C') mode65=4 nfast=1 if((mode(5:5).eq.'B' .or. mode(5:5).eq.'C') .and. & mode(6:6).eq.'2') nfast=2 call gen65(msg,mode65,nfast,samfacout,ntxdf,iwave,nwave, & sendingsh,msg22,nmsg0) msgsent=msg22 else if(mode(1:5).eq.'ISCAT') then call geniscat(msg,nmsg,mode4,samfacout,iwave,nwave,msgsent) sendingsh=0 if(txsnrdb.gt.0.d0 .and. txsnrdb.lt.40.d0) call makepings(iwave,nwave) else if(mode(1:4).eq.'JTMS') then if(shok.eq.1 .and. & (msg(1:4).eq.'R26 ' .or. msg(1:4).eq.'R27 ' .or. & msg(1:4).eq.'RRR ' .or. msg(1:3).eq.'73 ')) go to 100 call genms(msg,samfacout,iwave,cwave,0,nwave) if(txsnrdb.lt.40.d0) call makepings(iwave,nwave) sendingsh=0 msgsent=msg else if(mode(1:3).eq.'JT4' ) then call gen24(msg,mode4,samfacout,ntxdf,iwave,nwave, & sendingsh,msg22,nmsg0) msgsent=msg22 else if(mode(1:5).eq.'Diana') then call gendiana(msg,nmsg,samfacout,iwave,nwave,msgsent,sendingsh) else stop 'Unknown Tx mode requested.' endif if(lcwid) then ! Generate and insert the CW ID. wpm=25. freqcw=800. idmsg=MyCall//' ' call gencwid(idmsg,wpm,freqcw,samfacout,icwid,ncwid) k=nwave do i=1,ncwid k=k+1 iwave(k)=icwid(i) enddo do i=1,2205 !Add 0.2 s of silence k=k+1 iwave(k)=0 enddo nwave=k endif goto 900 endif if(mode(1:2).eq.'CW') then ! We're in CW mode ! wpm=15. wpm=17. freqcw=800. call gencw(msg,wpm,freqcw,samfacout,iwave,nwave) goto 900 endif ! We're in FSK441 mode. if(nmsg.lt.28) nmsg=nmsg+1 !Add trailing blank if nmsg < 28 ! Check for shorthand messages 100 sendingsh = 0 if(shok.eq.1) then if (msg(1:4).eq.'R26 ') then msg='++' nmsg=2 sendingsh = 1 else if (msg(1:4).eq.'R27 ') then msg='**' nmsg=2 sendingsh = 1 else if (msg(1:4).eq.'RRR ') then msg='%%' nmsg=2 sendingsh = 1 else if (msg(1:3).eq.'73 ') then msg='@@' nmsg=2 sendingsh = 1 endif if(sendingsh.eq.1) then i1=index(txmsg,' ') txmsg=txmsg(1:i1) endif endif ! Encode the message call abc441(msg,nmsg,itone,ndits) ndata=ndits*nspd ! Generate iwave k=0 df=11025.0/NSPD pha=0. nrpt=30*11025/(NSPD*ndits) do irpt=1,nrpt do m=1,ndits freq=(LTone-1+itone(m))*df dpha=twopi*freq*dt do i=1,NSPD k=k+1 pha=pha+dpha iwave(k)=nint(32767.0*sin(pha)) enddo enddo enddo nwave=k if(txsnrdb.lt.40.d0) call makepings(iwave,nwave) 900 sending=txmsg if(mode(1:4).eq.'JT65' .and. sendingsh.ne.1) sending=msgsent if(mode(1:3).eq.'JT4' .or. mode(1:5).eq.'ISCAT') sending=msgsent do i=NMSGMAX,1,-1 if(sending(i:i).ne.' '.and. ichar(sending(i:i)).ne.0) go to 910 enddo i=1 910 nmsg=i if(lcwid .and. (mode.eq.'FSK441' .or. mode(1:4).eq.'JTMS')) then ! Generate and insert the CW ID. wpm=25. freqcw=440. idmsg=MyCall//' ' call gencwid(idmsg,wpm,freqcw,samfacout,icwid,ncwid) k=0 do i=ncwid+1,int(trperiod*fsample_out) k=k+1 if(k.gt.nwave) k=k-nwave iwave(i)=iwave(k) enddo do i=1,ncwid iwave(i)=icwid(i) enddo nwave=trperiod*fsample_out endif 999 continue call cs_unlock return end subroutine wsjtgen wsjt_9.3.r2792/wsjt.jpg0000664000175000017500000000221611461555650013076 0ustar jtnjtnJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? xeKy-0!fo#Gswu-mD 4Y `7 %Hoڔ:6 ?wpS>@ Ϸ=]=DZk+$#;6Ãoh v̢^昜wT(6t}]7Hw>].w _xfMH`f@{k0pFBcNJocԵ? #FHr 4SlЗ_L?;d3tr\>6~+nۓ_z_dۇVFɾ9Wlv?uɣF[Nd1$; ZCV]B"@=<67 UE MZ{&^Ԍ>#&qn!eG F;5ߙ޾l~eBkla)Y1c9ca}zkϮnZvAW3<+*m1ex[D1}i^~=4gwsjt_9.3.r2792/ping441.f900000664000175000017500000000262511461555650013117 0ustar jtnjtnsubroutine ping441(dat,jz,nz,MinSigdB,MinWidth,pick,pingdat,nping) ! Decode Multi-Tone FSK441 mesages. real dat(jz) !Raw audio data logical pick real sigdb(3100) !Detected signal in dB, sampled at 20 ms real work(3100) integer indx(3100) real pingdat(3,100) slim=MinSigdB wmin=0.001*MinWidth * (19.95/20.0) dt=1.0/11025.0 ! Find signal power at suitable intervals to search for pings. istep=221 dtbuf=istep/11025. do n=1,nz s=0. ib=n*istep ia=ib-istep+1 do i=ia,ib s=s+dat(i)**2 enddo sigdb(n)=s/istep enddo !##################################################################### if(.not.pick) then ! Remove initial transient from sigdb call indexx(nz,sigdb,indx) imax=0 do i=1,50 if(indx(i).gt.50) go to 10 imax=max(imax,indx(i)) enddo 10 do i=1,50 if(indx(nz+1-i).gt.50) go to 20 imax=max(imax,indx(nz+1-i)) enddo 20 imax=imax+6 !Safety margin base1=sigdb(indx(nz/2)) do i=1,imax sigdb(i)=base1 enddo endif !################################################################## call smooth(sigdb,nz) ! Remove baseline and one dB for good measure. call pctile (sigdb,work,nz,50,base1) do i=1,nz sigdb(i)=dB(sigdb(i)/base1) - 1.0 enddo call ping(sigdb,nz,dtbuf,slim,wmin,pingdat,nping) return end subroutine ping441 wsjt_9.3.r2792/RxWav/0000775000175000017500000000000012102347521012440 5ustar jtnjtnwsjt_9.3.r2792/RxWav/Samples/0000775000175000017500000000000012102347527014052 5ustar jtnjtnwsjt_9.3.r2792/RxWav/Samples/W8WN_010809_110400.WAV0000664000175000017500000117755410476110754016650 0ustar jtnjtnRIFFdWAVEfmt ++data@zz{|}~~|~y|||~zwz~wt|~|{}{{}zxyuxyu||x{|{zx|~~wu}|y}zwzw}{tv|y{{yz||}y|y~{|yw|~~z}~}|}|zv}~{z~}vtwyu{xy}~x}~|rn}~w}|yy}}~~~}~yux~}|txto{||~~~|}{{{|zz~{}}vx}{}~~}~~{~~{{~|z|{}~vv~~|~zv{wx|{x}~vu~w~~|||~~yz{sywvz}~}~y{|w|xty~xw{||}{~}~}}|{|y|~~y~xy}{}~soy}{~~xrx}{~tr|xz~~~yuvy~yx|v{}|~|y|}z||{}~}yqt~yy~{z~|}|uzzv|||y}yx|z{}xu{wsx|wy~|~~|{}~}|}x{{|~|z||}~|}~zx{||x||~tvzz|~{x~z~|vvx{~}}}xwvyyt||x~}vx|yy{{y~}|~{wz~y}{{}y{{z|z{yu{|~{}x}|}y|~tu|z~svz|~}|wsz|yz|}{}}|~|{~}}||{vz|}{y{~}}{ywy}mfxztro~}}|y|~}}z}{{~{{~~y|}}x|||~x{z{~rp~|v|}{}y~}vvxv|zw|~|{|~|x{{}vy~|~xyy~xz}z|}~zsp{zz~}z}}{|}}{{~v}{s~{~{y~}z|}~{y|}~}~|x|{x~xxyty~~{x}z{y|~}{z}}|yuw~{x|~~}}~~}~~z|{}}tr|zzzx|vz}|}wx~~{}ywyy}xzxs{}|~zw}~x~zx|vx}~yqt{}vu|}tw}|~|{x|~}rwv{}~|z~}{~~{}~xxz|uv{|xw||~~}~{tw~{|}~||yxz~~}||~y}xyqs|~{~{}z|}|yw}yv~}{z{z}~ww{}~~}|||y{~|vw~}{}~}|{yy{{x}xxvouylp|vyx}}|yx||x|yy}yv|~yy{}zz~vluzx}zsw}||z}}{~}}xu{~|{xu}}|~xx~~}~}xzyy{xsxyx~yxskv~yv{yz~xy~{~||}{~~~xz{uypyuu~}vqx~{uywx~v{}~{{{z}xy||}zyzww~uxsjt~~~y|~}~zz|~|z~vw{|}}xy~yz~{}~{}}~||~wy}wy}ztrw|xz~vv|~zw{pxwsy||zus|~}xvvx|~up{~tuxms}xmrtpykrzznq~ry~|~z|z{z{}y~}}~zz~||}}}zx}~|w~pwxrvqvtuz}|~}w{uxy{}x{xsx{wz~}|wkm{{z~~z||z}~y{yy|ws|vv{|w|}yv}}yw~u|tp|to{y{wtw|z{}vyxsz{xy|z}~~zu|{~}z}}ssz||~zv{~x{ss}y{|xy~zuy}zyuzzz|sq~}{{{yz}x{|{|}~~|{uv~xuyz}y{}z{tr~{~wx~|}~xru}vs}}x{}~yv~{|y|{y|z{z{y{}{u{}}~zy{~}z{~z{}{~uquyv~yuzzz}xx}yv{yst}|uywuz}}y{}~{wt}|xzxxwv}{{|xs{{y}xvz}yzyu{~|yxzy}|y~yw|}|yw}}z{~|~|z~|{{|~w{{{zq{~wy~|}zy|~}|~zx|~wy}ty{~xy}{z~}}~{~urx~}xuy~}{wv}zwz|~}x|uv~zy~|}~|us|}{{~~y}|w{wvz}{~x|y}vq{x~z}|v{{~vsz~z|}}qqzc[r|t}|}zrt}zx~}z{vrwxz{{|zvmuy||}~|{zy}}~|~vnz}wvzw~{}~{st}~yy|~{vw~yusw~~x{}vu}{}}}|vz}tz|{yx}}|yns{y{yxrp~}~}~~}xz}z~~|ww}{}}}yy|}~}~ww}yv|yy~~|~w{}x|~vvzyz|{st~~voxzu{}x~y|~|{ry~vy~||y}~wy{~~|vnkvw{xr|~{yxv}{zz|~~~~~sr|~xw{}}|{w}xzxoo}|wx~}y}|tw~|}}}z{}wx{{{yvz~~xv{uq|kn|}{}{}{tx}sr}}rtskq{puvoy}}~~ynr~tqxqhqtwnix|vv{xtyvv~~syxt|~uowyz}zyxvv{}z|{tvwo{oey|~vy~}}{xvyxuzwz{vv}xu}}ytv~~}~}}lqz}~xyuuxt|~yz~~~xwxxykqupy~z||nmzzrwsjzpwuup}}vn~pVevw~vouur~ri}~nutw{{{utuyyuvx|wvz|`cnk~vx}rpypjxvvzvhtyty}|hi}x\fyuyzup}~|ngy~zqpz{~}{}|rq~~~vpsywoo{y{wlx{si{uy}w{ouwkxxzyoq~xx|kr{{}tkrwp~ywx~tw|y|sgw}x}|sr{|w|tny|}{tz}~yzz}zv~~zz{srz|}{tswzyy~}uhvll|z|{{{|z{{xx|{z}z|}}}~vu{~|}}sx{z}x}{vqv|y}rx|~|ww}zytyv~}y{z|rquv|~|z}qp{|xu{|vt{pkvv|piys|xlq~|sw{{zuu{so}~wqf}zkx}y~z||{kp~}sxvqmw{vyqdty|}vwuqvmqlf{||a`p~}||xfcp|utu}}vrv~~}ysv|~zy}|tvzvvp{~ryzq{~}{zto|yv{zw{{xz|nbtx|tmpzxzret{~}uyxrrw{|}vsotjisp~}|rbpzzrjzq}dmovv{zpu}sy}lk}{w|rjyzv{~ws{pkt~qv~fhvv|}xz{rvsr{{{nozvyywrgvzrz|pftr_lyyrr|vxwhmwq{suyu~xjt~xu}|}}hgzwou~}wzq\mnZnwmyxssy}y}z{y|rxt]h~vy~w|us~zxxwsry{tu{~ji||{|pv~mm|~~}{||y}vvqq~zxxu||xy{}~xsyqw{x||vtgr{y~z}~tyvkp}{xyx|}}~}}jYhx}pgvz}}|}vy|xrs~{uvknwxqwwpvehx{lgu}rtvk_f{mq~~zxxwyw[ez{qjxvy|nmwjYbx{qgpv]k~wglmnx]cfYmf_ffj~}ylnyyvwn|~z^hef|}f_qy^Xz{Zky{srmjotvtgzv|sb^xw~fCOy|soiTapkv~~tuwmzs}np}}sp{dZipp|qouzz}piw}{zkivyzsdjxwn|vwogoy~fNfnl}uvmgtgfzmmqV\sgrsgjruv~lWZuliz}{xuw~{~{olppuuxytqsshkodosq{^_zzpS_}tx~x{yw~r\cv{_Smw~yfXjmY{}mswtzruqv}xljvvikz|jhwol|pnvvnjrrnzpzvwshxsojroZivkvy}b^egrcq{tbrzppu}|sw{}{twtr}yvvq|}qls{zx~{}}_^|p{rjx~qrntysqw{y{oy}~qku|ut~}rq}~kdl{zrqx}|ylr}x{{{~||}|ljxvio~wtnq|zzz}{zwbjynzwrz|}|{xy~~z~shr~mszuukfz~sqvxywu||z~zqvlg}qzwu~|tm{~tw~~wkn|}rs|n^k}lhy|}~tjZ^xmWjvdy|ht~vxxuwx}ji|whxkcrjxljquv~pix`h^X|_Vsigwizp[qyf~~bwmq~itwZlze_nv}gjvrkwycdytjxrp|m[a{w|ry|qjtml~xq_R]iu|lp{s|ytxw{~z|hl|zx~skfj}vy~rny}v}}rxso{opstz~|tsw}~z}tmw|jjtyw|}}|mqur|liw~wnm~~{wuv}rmz~rzz~|ptsj||{ms~wyzz~z|xy|qnx}{yvw|zwuozxov~xu~~obmzm}svx}wz|xwtxzzwwvmyvpuhfw}xztww~xrt{zuw}~}zifpzeRqswjU`tl_fz|rr|z{yzytvvktuy}sqy{ryvux~zw|zuxkw{{zz~wsyzxvhp|omra`okagucGT{~|npruppru|sqxxukwx}}u{uztv~}}~{~xqvxuz~qny~}}z~}uyvouwgqsnx~{w~yu|y|zw~teoxy}zywzem|||z|zwnjtifonwpo}rv}vzxyx{wz|zyvvxwoap}wtzx{~zmiwzhlwoz|fgwzz}|lqw|}q}}yp~yjmv{yptyyz{rl|y{|cj{rny{tom|twlMRuxuy|~}xxplv|yy{xvuzxt}knzy|hiyklvilzqp|}vq}pxwnwtx~or{vz{y}~tv~}z{zojmy~z|~|vmo~urgt~|ywx}|tgh{}{}xty~~zzyt~umztxxrxsr}~}rox~~}ssyls|{{{wvukwtu|up|qyxtysywq|nbr~{}{xys|~u}t|zy}wlo~vo~tz}yys{~}}tuytztlvnkz}wrxysy}z{zv}|y~{|~{ihwuv{~rqw{~g^tps}{|vuy}wywty}|qpw}ouvxz}wqz}wtwy}{ih|u{~|zz}|y|qvxxz~w}pq~sr~x{xu~~}|||rwyv|{yloz{y{~|umpytv~te`orkv~||}zsw|vs|vnv}~||~|_Nfomsz}or}}x~oxxlu}wvz||{vz~{}uvw}~|w|}xy}|xz~|{~xyrbg~|}xsuxy|}qp~w~vyuwss~{q}|tvsy~zx{||~ytoq}{~vt{{y{qs{{{|z{wv|}y{}{uy~y|}}}{{~wxyxy}yz~~|~zz}~~~~~{|z|}yyqnzzrzy|~uvz{|{xx}zrtyz|smu{u|~~~qs|{y{wqw}{~ut}z{yx~wwyy~~z{{yuz||t_krbywq{~~{ttze_k{k_x~oz~ryvwoi{f[rxarxvmrusy}zoysurww{}yz{uqzzzllokzz~uzk^u{~php}xz|ttuvxwtr~|ymq~}|xnl|zw}|{{||wx~~|~v|~mq}y~|uuwu{}{}{{{yzrx|qwwwy|su|yqx}}xyt_jl^nfXjyrhn}tc]j~wpzwkq{x{~{{yqv~z}yu{}w~|y~w|vtzu|tt}x|z~{stknztohlww~|}~su|x}tjo|{nnzv]Xpzx}}yx~xuyws{zz||xy}~{z|}skt}|styu}}{~zvz}y}yv||yyq|zw~}{~z~yw}|tw}yx{~|z~{y}|}{w|}xswmbq}{ut|yt{{wyxzypyz{s|pp|wszsv|}~|jg~~tvx~~}zwux~||}z~}rr}}~yoryxvpw}||}unt{zxoqz}u{xvwvz}}nfprltzz}xkfqxv{yzz|w|xr}|wuz~}y}uu}}khu}~mk~svw{yr|zw{}zv~{rwyrrx}|po{~{}vv|~|}ups{}{{nlx{~zx|yyzz|}{z~}|uu}|tud\v|yty~zx{~tqw}}|wox}{yw~{mkw{qwql{}rpw}zx{}suml~zt}{pjp{zxuuz{tuz}~}~tkpy~~zz||}|vw~|||y~t|vq~vkqxtsw}{remxgkzrxznkz{uw}xvxyukivd`yomq^k}quzl{{txpvjq}||uux~{w||vx~~tbttj~ps{t~sjwuvvkiq{vx~wy|t{wuvqw}x|{pysw|mrt`jxhtyywjsz}x{{tz{swvv~}zyzz{zywgquvwci|}qrz|{|{{vz|uy}{~{y}~~|}z|~}{{}~|~{{~y{~}w|tt~|y{z~~vwyzxqw~||zz~}x{~}{zz~y|~}|wxsou}~}yz}||wntzy}|t{{~sy~x{zy{yvuou|y~{st~vu||{~~yw~|{~zvtw{{~~~y|}up||}rqy|}|vv{w|~mbm|}usy|~yu|zz~{~~y~ztuy~|y|rw~~zwovsvwluvwzv~~||}z|xu~~zwzyxv{{lm|tz}~||~zppzwxubfz|uooyztv}uzrkq~tjlx|}omwudau{lr|qp|}zz}}z{~utzvlv|ylxtu{z{vyrz~~yuzwsriir{nq~|qoxw~rv|utss~{v|x~xoux{{o{xw}xxirz~{{z}vkt{~vt|yjl}sw|vv{|xxvwzkkw{turxnktsm{}zyjmyslm{rir|w|vquyy|~slzktqjvtnrmqvuq}|wvxjapxsz{mft{psyupz~{zodmz~wsvjvur{wpqv|||vx~}|{}{y}xz}}|usy|qv|rs}|~rt}{wz{y~wrx}~}|v{yuzut{fhsr~|yyols~{u|xgiw~|~wr~~u~ulr~unt~{}}|~to}yy||~|wvz|mswvx{wxwvyy}qs~yvy|~rt~z|~||tjr~xtzwpz}|z~|vx||~zz}|z}zx~}xz|}{}~yxz}~~zusz{~~{x}~wz|xxv||tuytv~~}xzz{~sr}~zhesrsqpnk}odx|~~}vy}zz{z{xz~}y~|~{xy||{{ww}{txzkn~{|}ws{}vvyu|t|~y~{{}wwzohjz{z~mm}}unq~}|yz}w~zpxuv||yvrq}tx}wqn{}}wryzg`iwx{ymjzyZ]|cYowmqys}|lgt~~~|~}zwy|~}oo|~~|y~xrzwo{to{yqpy~zw{zrvxpq|zu~zst{yz}}pt~~|w{|zu}xowqy~to}zln~zjowvy{yz}v{{z|~x~~xwu~z{yx|}|z~~tv~|}v{qpwxpwxx{szvzyuzup|}~zux~tvzrvwu}{~ynryz|z|wsy}utz~~~}~ysxvr|zt{~~wjp~ywnw|yuw|tty~~}xwwuysw}onqkxvp}{tuzfn}t{{ppy~}ywrhu}yry~|~whq~hdw|qpz~vy~|uzwvywsw}qwzms{szmmyz|tu}yvvv|}|yxz|}|}urxqem}}vqturz~xry|~zxzppvs|zy~{{~russ{~{w}}ws}x{zsel|vjk||zkk{~{yqn|nm}no|~qmvs|qsxpyunwzv}|wtqt~z~xr|vwtgo{vwmv~~ws~vpnv~{udswty}{x~wtyxln{|}yz~~yrv|z|znszqexxmz~}}tuyw|w~~trvxz|srx}{y|x{X\t_ry~xwz|}xwz}{ynq}}xzzt~~xx}{y|}{{zy}|z|xzxs}xy}}||yvWZ}ptz}rs|zqvwvxv|vv{~}}{ss|ln{}vsuy{}~tt|~}{|ysz~kh~sw~z|zvv{~tu~~||{y|zlly~{{~|{~}zz~v}odlzwvny}ss|y}wccxlax}xggwb^xk}{to{}rq{oxxklz~kmtsownf|u`bqvpxjQQgzv|jsn_botblrb|fWvuVCmupmawzoheqvxymsolx~t|yj`k}{yoyms~~~yini[|bsmq~vlg^_{sms{s_fx~~TevbvyftozhjuzvfiyypowiVinEO~eRf}pnT(Qu^`qngvsnk{}wh]{tu[Ujjhl_w|bS_u{w|ly{tsw{zwZ^kTunnnoYnqZ[|}ukg~trxlfpgp}qdlsuqbflrxrkbyxy{pt{}{|oefx|guns}xuiznqwozsp|zrwzmp{_czw{|xzwqu~v}vtjhqzr{|{totzy~z~wmr}jh~ypnzx}vqpxu~go`kfatptwv}~{}zx{}y{zt|fVlnjx{{xnsws{|twyrx~zuv}pu~}wzxpsxyztwzvz~~opyr|troqqctwu}toz{zz}{on}{w}}}{yzz||yzr|xqsysps{}gjt}~or}mz|yxdpxwz|wq{}ru{wn~wo~zuz}z}~srx}|so{y{~yxnl}yrrw~su|xret~~}xxyz|os||{}|}wxxuy|~~}wx{sv}xzxt|~y}|y|tx}wkt}}~vrwqpon}~z}ztz~r|xvsv|}|~z~yuwquvsz}y{xqs{{tz{y|wx}pqvwyoxsp}yurtux~xqoyxzpq}|}}{xz~~shtunz}{xvuv~vpnz~{}~|{v|~uqz{nzh^owjlxyqu{u|}|{qqwy{u~wzwt|y~|sz}|}iZdt}|plr{{y~|z}~|oZgyjrsfnxyzs~~x}yzsgk|WV~kev~~qaczz}ncttz|tu{kuuv|yyzwvt|xqr{y|yv}wsvywpvwtsykwwlz~qp{vnr~rwsv}vu|}il~hht{}rtz~}}trves{ty~zv{~||mlx|sx~~}jcotpx~so|xx|sesx}zff}vqxxzaiy|~uy~{~~zv}z}}ydeeg{y{rs~{vz|wyyv}uxtm}sq~{~xqr||txqpzto}{zwv~}pmt|sqz||~|z}tory~xqr|qm{pqup{yz|t{w|vsy~|tu|mo{~~y~vnnm}uwty}qxff~yr~tbj}|sz{t|uu~~ro}}~}qu~~o^joprmmu{{`Uswy|pp~~|~|x|xtz|uxzvrpfwxuz~yw}lgnw~yeofg|{q]bzywxurv}vyhqwm~x_e{|korpnn{nqxy{t|{uz|hkxqzox}fb|zeo}qm~znu~yt}tzyqdj~xqo{wryvonvy]Wqsh{vqymo{lg|wo~urzrrz{xpztwk`oom~trwxv~qcmoluqz{pW`|k|sjiq{v}u`rvisodpqbofk|{xmp||{|}{}~{npvy}u|{xuquzxsj}zmfky{turw~xu{lgu~{{z|~rjsqim{{wuxxsr~mnnhrvyw~rqvww|}nn{}xjg|yijzj^yqis]q~w~}~yqlo}|ov}z{yhmn]|qxj]iihziVtlgzr`iyqs}r`dz{pw}n^mzqlhr}pp~n`kyu|xv}xz~tu}sn~pfx|{wa]k|}pyzrqxtu{ml||opuyz}tu}{]WvssA.la4Vv*4` (ytFLrpOTx|`Qqs /* defines printf for tests */ #include /* defines time_t for timings in the test */ #ifdef Win32 #include "win_stdint.h" /* defines uint32_t etc */ #else #include /* defines uint32_t etc */ #endif //#include /* attempt to define endianness */ //#ifdef linux //# include /* attempt to define endianness */ //#endif #define HASH_LITTLE_ENDIAN 1 #define hashsize(n) ((uint32_t)1<<(n)) #define hashmask(n) (hashsize(n)-1) #define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k)))) /* ------------------------------------------------------------------------------- mix -- mix 3 32-bit values reversibly. This is reversible, so any information in (a,b,c) before mix() is still in (a,b,c) after mix(). If four pairs of (a,b,c) inputs are run through mix(), or through mix() in reverse, there are at least 32 bits of the output that are sometimes the same for one pair and different for another pair. This was tested for: * pairs that differed by one bit, by two bits, in any combination of top bits of (a,b,c), or in any combination of bottom bits of (a,b,c). * "differ" is defined as +, -, ^, or ~^. For + and -, I transformed the output delta to a Gray code (a^(a>>1)) so a string of 1's (as is commonly produced by subtraction) look like a single 1-bit difference. * the base values were pseudorandom, all zero but one bit set, or all zero plus a counter that starts at zero. Some k values for my "a-=c; a^=rot(c,k); c+=b;" arrangement that satisfy this are 4 6 8 16 19 4 9 15 3 18 27 15 14 9 3 7 17 3 Well, "9 15 3 18 27 15" didn't quite get 32 bits diffing for "differ" defined as + with a one-bit base and a two-bit delta. I used http://burtleburtle.net/bob/hash/avalanche.html to choose the operations, constants, and arrangements of the variables. This does not achieve avalanche. There are input bits of (a,b,c) that fail to affect some output bits of (a,b,c), especially of a. The most thoroughly mixed value is c, but it doesn't really even achieve avalanche in c. This allows some parallelism. Read-after-writes are good at doubling the number of bits affected, so the goal of mixing pulls in the opposite direction as the goal of parallelism. I did what I could. Rotates seem to cost as much as shifts on every machine I could lay my hands on, and rotates are much kinder to the top and bottom bits, so I used rotates. ------------------------------------------------------------------------------- */ #define mix(a,b,c) \ { \ a -= c; a ^= rot(c, 4); c += b; \ b -= a; b ^= rot(a, 6); a += c; \ c -= b; c ^= rot(b, 8); b += a; \ a -= c; a ^= rot(c,16); c += b; \ b -= a; b ^= rot(a,19); a += c; \ c -= b; c ^= rot(b, 4); b += a; \ } /* ------------------------------------------------------------------------------- final -- final mixing of 3 32-bit values (a,b,c) into c Pairs of (a,b,c) values differing in only a few bits will usually produce values of c that look totally different. This was tested for * pairs that differed by one bit, by two bits, in any combination of top bits of (a,b,c), or in any combination of bottom bits of (a,b,c). * "differ" is defined as +, -, ^, or ~^. For + and -, I transformed the output delta to a Gray code (a^(a>>1)) so a string of 1's (as is commonly produced by subtraction) look like a single 1-bit difference. * the base values were pseudorandom, all zero but one bit set, or all zero plus a counter that starts at zero. These constants passed: 14 11 25 16 4 14 24 12 14 25 16 4 14 24 and these came close: 4 8 15 26 3 22 24 10 8 15 26 3 22 24 11 8 15 26 3 22 24 ------------------------------------------------------------------------------- */ #define final(a,b,c) \ { \ c ^= b; c -= rot(b,14); \ a ^= c; a -= rot(c,11); \ b ^= a; b -= rot(a,25); \ c ^= b; c -= rot(b,16); \ a ^= c; a -= rot(c,4); \ b ^= a; b -= rot(a,14); \ c ^= b; c -= rot(b,24); \ } /* ------------------------------------------------------------------------------- hashlittle() -- hash a variable-length key into a 32-bit value k : the key (the unaligned variable-length array of bytes) length : the length of the key, counting by bytes initval : can be any 4-byte value Returns a 32-bit value. Every bit of the key affects every bit of the return value. Two keys differing by one or two bits will have totally different hash values. The best hash table sizes are powers of 2. There is no need to do mod a prime (mod is sooo slow!). If you need less than 32 bits, use a bitmask. For example, if you need only 10 bits, do h = (h & hashmask(10)); In which case, the hash table should have hashsize(10) elements. If you are hashing n strings (uint8_t **)k, do it like this: for (i=0, h=0; i 12) { a += k[0]; b += k[1]; c += k[2]; mix(a,b,c); length -= 12; k += 3; } /*----------------------------- handle the last (probably partial) block */ /* * "k[2]&0xffffff" actually reads beyond the end of the string, but * then masks off the part it's not allowed to read. Because the * string is aligned, the masked-off tail is in the same word as the * rest of the string. Every machine with memory protection I've seen * does it on word boundaries, so is OK with this. But VALGRIND will * still catch it and complain. The masking trick does make the hash * noticably faster for short strings (like English words). */ #ifndef VALGRIND switch(length) { case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break; case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break; case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break; case 8 : b+=k[1]; a+=k[0]; break; case 7 : b+=k[1]&0xffffff; a+=k[0]; break; case 6 : b+=k[1]&0xffff; a+=k[0]; break; case 5 : b+=k[1]&0xff; a+=k[0]; break; case 4 : a+=k[0]; break; case 3 : a+=k[0]&0xffffff; break; case 2 : a+=k[0]&0xffff; break; case 1 : a+=k[0]&0xff; break; case 0 : return c; /* zero length strings require no mixing */ } #else /* make valgrind happy */ k8 = (const uint8_t *)k; switch(length) { case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ case 10: c+=((uint32_t)k8[9])<<8; /* fall through */ case 9 : c+=k8[8]; /* fall through */ case 8 : b+=k[1]; a+=k[0]; break; case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ case 6 : b+=((uint32_t)k8[5])<<8; /* fall through */ case 5 : b+=k8[4]; /* fall through */ case 4 : a+=k[0]; break; case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ case 2 : a+=((uint32_t)k8[1])<<8; /* fall through */ case 1 : a+=k8[0]; break; case 0 : return c; } #endif /* !valgrind */ } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) { const uint16_t *k = (const uint16_t *)key; /* read 16-bit chunks */ const uint8_t *k8; /*--------------- all but last block: aligned reads and different mixing */ while (length > 12) { a += k[0] + (((uint32_t)k[1])<<16); b += k[2] + (((uint32_t)k[3])<<16); c += k[4] + (((uint32_t)k[5])<<16); mix(a,b,c); length -= 12; k += 6; } /*----------------------------- handle the last (probably partial) block */ k8 = (const uint8_t *)k; switch(length) { case 12: c+=k[4]+(((uint32_t)k[5])<<16); b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ case 10: c+=k[4]; b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; case 9 : c+=k8[8]; /* fall through */ case 8 : b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ case 6 : b+=k[2]; a+=k[0]+(((uint32_t)k[1])<<16); break; case 5 : b+=k8[4]; /* fall through */ case 4 : a+=k[0]+(((uint32_t)k[1])<<16); break; case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ case 2 : a+=k[0]; break; case 1 : a+=k8[0]; break; case 0 : return c; /* zero length requires no mixing */ } } else { /* need to read the key one byte at a time */ const uint8_t *k = (const uint8_t *)key; /*--------------- all but the last block: affect some 32 bits of (a,b,c) */ while (length > 12) { a += k[0]; a += ((uint32_t)k[1])<<8; a += ((uint32_t)k[2])<<16; a += ((uint32_t)k[3])<<24; b += k[4]; b += ((uint32_t)k[5])<<8; b += ((uint32_t)k[6])<<16; b += ((uint32_t)k[7])<<24; c += k[8]; c += ((uint32_t)k[9])<<8; c += ((uint32_t)k[10])<<16; c += ((uint32_t)k[11])<<24; mix(a,b,c); length -= 12; k += 12; } /*-------------------------------- last block: affect all 32 bits of (c) */ switch(length) /* all the case statements fall through */ { case 12: c+=((uint32_t)k[11])<<24; case 11: c+=((uint32_t)k[10])<<16; case 10: c+=((uint32_t)k[9])<<8; case 9 : c+=k[8]; case 8 : b+=((uint32_t)k[7])<<24; case 7 : b+=((uint32_t)k[6])<<16; case 6 : b+=((uint32_t)k[5])<<8; case 5 : b+=k[4]; case 4 : a+=((uint32_t)k[3])<<24; case 3 : a+=((uint32_t)k[2])<<16; case 2 : a+=((uint32_t)k[1])<<8; case 1 : a+=k[0]; break; case 0 : return c; } } final(a,b,c); return c; } //uint32_t __stdcall NHASH(const void *key, size_t length, uint32_t initval) wsjt_9.3.r2792/four2a.f900000775000175000017500000000602011553116024013111 0ustar jtnjtnsubroutine four2a(a,nfft,ndim,isign,iform) ! IFORM = 1, 0 or -1, as data is ! complex, real, or the first half of a complex array. Transform ! values are returned in array DATA. They are complex, real, or ! the first half of a complex array, as IFORM = 1, -1 or 0. ! The transform of a real array (IFORM = 0) dimensioned N(1) by N(2) ! by ... will be returned in the same array, now considered to ! be complex of dimensions N(1)/2+1 by N(2) by .... Note that if ! IFORM = 0 or -1, N(1) must be even, and enough room must be ! reserved. The missing values may be obtained by complex conjugation. ! The reverse transformation of a half complex array dimensioned ! N(1)/2+1 by N(2) by ..., is accomplished by setting IFORM ! to -1. In the N array, N(1) must be the true N(1), not N(1)/2+1. ! The transform will be real and returned to the input array. parameter (NPMAX=200) parameter (NSMALL=16384) complex a(nfft) complex aa(NSMALL) integer nn(NPMAX),ns(NPMAX),nf(NPMAX),nl(NPMAX) integer*8 plan(NPMAX) !Actually should be i*8, but no matter data nplan/0/ include 'fftw3.f' save plan,nplan,nn,ns,nf,nl if(nfft.lt.0 .or. ndim.lt.1) go to 999 nloc=loc(a) do i=1,nplan if(nfft.eq.nn(i) .and. isign.eq.ns(i) .and. & iform.eq.nf(i) .and. nloc.eq.nl(i)) go to 10 enddo if(nplan.ge.NPMAX) go to 999 nplan=nplan+1 i=nplan nn(i)=nfft ns(i)=isign nf(i)=iform nl(i)=nloc ! Planning: FFTW_ESTIMATE, FFTW_ESTIMATE_PATIENT, FFTW_MEASURE, ! FFTW_PATIENT, FFTW_EXHAUSTIVE npatience=1 nflags=FFTW_ESTIMATE if(npatience.eq.1) nflags=FFTW_ESTIMATE_PATIENT if(npatience.eq.2) nflags=FFTW_MEASURE if(npatience.eq.3) nflags=FFTW_PATIENT if(npatience.eq.4) nflags=FFTW_EXHAUSTIVE call cs_lock('four2a') if(nfft.le.NSMALL) then jz=nfft if(iform.eq.0) jz=nfft/2 do j=1,jz aa(j)=a(j) enddo endif if(isign.eq.-1 .and. iform.eq.1) then call sfftw_plan_dft_1d(plan(i),nfft,a,a,FFTW_FORWARD,nflags) else if(isign.eq.1 .and. iform.eq.1) then call sfftw_plan_dft_1d(plan(i),nfft,a,a,FFTW_BACKWARD,nflags) else if(isign.eq.-1 .and. iform.eq.0) then call sfftw_plan_dft_r2c_1d(plan(i),nfft,a,a,nflags) else if(isign.eq.1 .and. iform.eq.-1) then call sfftw_plan_dft_c2r_1d(plan(i),nfft,a,a,nflags) else stop 'Unsupported request in four2a' endif i=nplan if(nfft.le.NSMALL) then jz=nfft if(iform.eq.0) jz=nfft/2 do j=1,jz a(j)=aa(j) enddo endif 10 continue call sfftw_execute(plan(i)) call cs_unlock return 999 do i=1,nplan call sfftw_destroy_plan(plan(i)) enddo if(ndim.lt.0 .or. nplan.ge.NPMAX) then open(24,file='FFT_plans.txt',status='unknown') do i=1,nplan write(24,1999) i,nn(i),ns(i),nf(i),nl(i) 1999 format(5i12) enddo call flush(24) if(nplan.ge.NPMAX) stop 'Too many FFTW plans requested.' endif return end subroutine four2a wsjt_9.3.r2792/getpfx1.f0000664000175000017500000000515511761710021013123 0ustar jtnjtn subroutine getpfx1(callsign,k,nv2) character*12 callsign0,callsign,lof,rof character*8 c character addpfx*8,tpfx*4,tsfx*3 logical ispfx,issfx,invalid common/pfxcom/addpfx include 'pfx.f' callsign0=callsign nv2=0 iz=index(callsign,' ') - 1 if(iz.lt.0) iz=12 islash=index(callsign(1:iz),'/') k=0 c=' ' if(islash.gt.0 .and. islash.le.(iz-4)) then ! Add-on prefix c=callsign(1:islash-1) callsign=callsign(islash+1:iz) do i=1,NZ if(pfx(i)(1:4).eq.c) then k=i go to 10 endif enddo if(addpfx.eq.c) then k=449 go to 10 endif else if(islash.eq.(iz-1)) then ! Add-on suffix c=callsign(islash+1:iz) callsign=callsign(1:islash-1) do i=1,NZ2 if(sfx(i).eq.c(1:1)) then k=400+i go to 10 endif enddo endif 10 if(islash.ne.0 .and.k.eq.0) then ! Original JT65 would force this compound callsign to be treated as ! plain text. In JT65v2, we will encode the prefix or suffix into nc1. ! The task here is to compute the proper value of k. lof=callsign0(:islash-1) rof=callsign0(islash+1:) llof=len_trim(lof) lrof=len_trim(rof) ispfx=(llof.gt.0 .and. llof.le.4) issfx=(lrof.gt.0 .and. lrof.le.3) invalid=.not.(ispfx.or.issfx) if(ispfx.and.issfx) then if(llof.lt.3) issfx=.false. if(lrof.lt.3) ispfx=.false. if(ispfx.and.issfx) then i=ichar(callsign0(islash-1:islash-1)) if(i.ge.ichar('0') .and. i.le.ichar('9')) then issfx=.false. else ispfx=.false. endif endif endif if(invalid) then k=-1 else if(ispfx) then tpfx=lof k=nchar(tpfx(1:1)) k=37*k + nchar(tpfx(2:2)) k=37*k + nchar(tpfx(3:3)) k=37*k + nchar(tpfx(4:4)) nv2=1 i=index(callsign0,'/') callsign=callsign0(:i-1) callsign=callsign0(i+1:) endif if(issfx) then tsfx=rof k=nchar(tsfx(1:1)) k=37*k + nchar(tsfx(2:2)) k=37*k + nchar(tsfx(3:3)) nv2=2 i=index(callsign0,'/') callsign=callsign0(:i-1) endif endif endif return end wsjt_9.3.r2792/dtrim.f900000664000175000017500000000110011554327350013030 0ustar jtnjtnsubroutine dtrim(d2,jz) ! Remove any transient data at start of record. integer*2 d2(jz) ! real dat(jz),dat2(jz) real ssq(1000) sumsq=0. nz=jz/1000 k=0 do i=1,1000 sq=0. do n=1,nz k=k+1 x=d2(k) sq=sq + x*x enddo ssq(i)=sq sumsq=sumsq+sq enddo avesq=sumsq/1000.0 ichk=11025/nz do i=ichk,1,-1 if(ssq(i).lt.avesq/3.0 .or. ssq(i).gt.3.0*avesq) go to 10 enddo i=0 10 continue ia=(i+1)*nz if(i.eq.1) ia=1 if(ia.gt.1) d2(1:ia)=0 !Zero the bad data return end subroutine dtrim wsjt_9.3.r2792/t72.f900000664000175000017500000000362111461555650012342 0ustar jtnjtnprogram t72 ! Tests experimental FSK441 decoder parameter (NMAX=512*1024) parameter (MAXFFT=8192) real dat(NMAX) !Raw signal, 30 s at 11025 sps character arg*12 !Command-line argument character cfile6*6 !File time character frag*28 !Message fragment to be matched character infile*40 integer dftolerance logical pick real pingdat(3,100) !Detected pings character c*48 common/scratch/work(NMAX) data c/' 123456789.,?/# $ABCD FGHIJKLMNOPQRSTUVWXY 0EZ*!'/ nargs=iargc() if(nargs.ne.3) then print*,'Usage: t72 infile nrec frag' go to 999 endif call getarg(1,infile) call getarg(2,arg) read(arg,*) nrec call getarg(3,frag) open(72,file=infile,form='unformatted',status='old') ! Initialize variables minsigdb=2 minwidth=40 dftolerance=400 pick=.false. nsps=25 nsam=nsps*ndits xn=log(float(nsam))/log(2.0) n=xn if(xn-n .gt.0.001) n=n+1 cfile6='441++' do irec=1,nrec read(72,end=999) jz,nz,cfile6,(dat(j),j=1,jz) if(irec.ne.nrec .and. nrec.ne.999) go to 900 call ping441(dat,jz,nz,MinSigdB,MinWidth,pick,pingdat,nping) !Find pings do iping=1,nping !Process each ping tstart=pingdat(1,iping) width=pingdat(2,iping) peak=pingdat(3,iping) npeak=peak ! Assemble a signal report: nwidth=0 if(width.ge.0.04) nwidth=1 !These might depend on NSPD if(width.ge.0.12) nwidth=2 if(width.gt.1.00) nwidth=3 nstrength=6 if(peak.ge.11.0) nstrength=7 if(peak.ge.17.0) nstrength=8 if(peak.ge.23.0) nstrength=9 nrpt=10*nwidth + nstrength t2=tstart call pp441(dat,jz,cfile6,tstart,t2,width,npeak,nrpt, & dftolerance,frag,1) enddo 900 continue enddo 999 end program t72 wsjt_9.3.r2792/thnix.f900000664000175000017500000000247511336544732013066 0ustar jtnjtnsubroutine cs_init character*12 csub0 integer*8 mtx common/mtxcom/mtx,ltrace,mtxstate,csub0 ltrace=0 mtxstate=0 csub0='**unlocked**' call fthread_mutex_init(mtx) return end subroutine cs_init subroutine cs_destroy character*12 csub0 integer*8 mtx common/mtxcom/mtx,ltrace,mtxstate,csub0 call fthread_mutex_destroy(mtx) return end subroutine cs_destroy subroutine th_create(sub) call fthread_create(sub,id) return end subroutine th_create subroutine th_exit call fthread_exit return end subroutine th_exit subroutine cs_lock(csub) character*(*) csub character*12 csub0 integer fthread_mutex_lock,fthread_mutex_trylock integer*8 mtx common/mtxcom/mtx,ltrace,mtxstate,csub0 n=fthread_mutex_trylock(mtx) if(n.ne.0) then ! Another thread has already locked the mutex n=fthread_mutex_lock(mtx) iz=index(csub0,' ') if(ltrace.ge.1) print*,'"',csub,'" requested mutex when "', & csub0(:iz-1),'" owned it.' endif mtxstate=1 csub0=csub if(ltrace.ge.3) print*,'Mutex locked by ',csub return end subroutine cs_lock subroutine cs_unlock character*12 csub0 integer*8 mtx common/mtxcom/mtx,ltrace,mtxstate,csub0 if(ltrace.ge.3) print*,'Mutex unlocked,',ltrace,mtx,mtxstate,csub0 mtxstate=0 call fthread_mutex_unlock(mtx) return end subroutine cs_unlock wsjt_9.3.r2792/analytic.f900000664000175000017500000000073711545460737013543 0ustar jtnjtnsubroutine analytic(d,npts,nfft,s,c) ! Convert real data to analytic signal parameter (NMAX=512*1024) real d(npts) real s(NMAX) complex c(NMAX) nh=nfft/2 fac=2.0/nfft c(1:npts)=fac*d(1:npts) c(npts+1:nfft)=0. call four2a(c,nfft,1,-1,1) !Forward c2c FFT do i=1,nh s(i)=real(c(i))**2 + aimag(c(i))**2 enddo c(1)=0.5*c(1) c(nh+2:nfft)=0. call four2a(c,nfft,1,1,1) !Inverse c2c FFT return end subroutine analytic wsjt_9.3.r2792/Makefile.in0000664000175000017500000001311111554332063013440 0ustar jtnjtnMV ?= mv CC ?= @CC@ MKDIR ?= mkdir INSTALL= install FFLAGS = @FFLAGS@ LDFLAGS = @LDFLAGS@ LIBS += @LIBS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ PREFIX = @PREFIX@ # WSJT specific C flags CFLAGS += -DBIGSYM=1 -fPIC DEFS = @DEFS@ CFLAGS += ${DEFS} CPPFLAGS += ${DEFS} -I. # WSJT specific Fortran flags #FFLAGS += -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC Audio: WsjtMod/Audio.so # Default rules %.o: %.c ${CC} ${CFLAGS} -c $< %.o: %.f ${FC} ${FFLAGS} -c $< %.o: %.F ${FC} ${FFLAGS} -c $< %.o: %.f90 ${FC} ${FFLAGS} -c $< %.o: %.F90 ${FC} ${FFLAGS} -c $< OS=@OS@ FC=@FC@ FCV=@FCV@ FC_LIB_PATH += @FC_LIB_PATH@ LDFLAGS += -L${FC_LIB_PATH} PYTHON ?= @PYTHON@ RM ?= @RM@ F2PY = @F2PY@ OBJS1 = JT65code.o nchar.o grid2deg.o packmsg.o packtext.o \ packcall.o packgrid.o unpackmsg.o unpacktext.o unpackcall.o \ unpackgrid.o deg2grid.o chkmsg.o getpfx1.o \ getpfx2.o k2grid.o grid2k.o interleave63.o graycode.o set.o \ igray.o init_rs_int.o encode_rs_int.o decode_rs_int.o \ wrapkarn.o cutil.o OBJS4 = t75.o iscat.o four2a.o db.o pctile.o match.o dtrim.o \ sort.o ssort.o thnix_stub.o geniscat.o synciscat.o t75: $(OBJS4) $(FC) -o t75 $(OBJS4) -lfftw3f OBJS5 = t76.o iscat.o four2a.o db.o pctile.o match.o \ sort.o ssort.o thnix_stub.o synciscat.o t76: $(OBJS5) $(FC) -o t76 $(OBJS5) -lfftw3f F2PYONLY = ftn_init ftn_quit audio_init spec getfile azdist0 astro0 chkt0 SRCS2F90 = abc441.f90 astro0.f90 audio_init.f90 azdist0.f90 \ decode1.f90 decode2.f90 decode3.f90 ftn_init.f90 \ ftn_quit.f90 get_fname.f90 getfile.f90 horizspec.f90 hscroll.f90 \ pix2d.f90 pix2d65.f90 rfile.f90 savedata.f90 spec.f90 match.f90 \ wsjtgen.f90 fivehz.f90 chkt0.f90 gran.f90 makepings.f90 \ packpfx.f90 unpackpfx.f90 genms.f90 decodems.f90 setupms.f90 \ thnix.f90 tweak1.f90 tweak2.f90 smo.f90 analytic.f90 dtrim.f90 \ geniscat.f90 iscat.f90 four2a.f90 hipass.f90 synciscat.f90 \ msdf.f90 syncms.f90 lenms.f90 jtms.f90 foldms.f90 avecho.f90 \ echogen.f90 alignmsg.f90 chk441.f90 gen441.f90 tm2.f90 \ gendiana.f90 diana.f90 specdiana.f90 syncdiana.f90 \ decdiana.f90 ana932.f90 OBJS2F90 = ${SRCS2F90:.f90=.o} SRCS2F77 = wsjt1.f astro.f azdist.f coord.f dcoord.f deg2grid.f \ dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f moon2.f \ MoonDop.f sun.f toxyz.f pfxdump.f \ avesp2.f bzap.f spec441.f spec2d.f mtdecode.f stdecode.f \ indexx.f s2shape.f flat2.f gen65.f gen24.f entail.f genmet.f \ wsjt24.f sync24.f ps24.f xcor24.f decode24.f \ chkmsg.f gentone.f interleave24.f \ syncf0.f syncf1.f synct.f avemsg6m.f \ set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f \ ping.f longx.f peakup.f sync.f detect.f avemsg65.f decode65.f \ demod64a.f encode65.f extract.f chkhist.f flat1.f \ gencw.f gencwid.f msgtype.f \ getpfx1.f getpfx2.f getsnr.f graycode.f grid2k.f \ interleave63.f k2grid.f limit.f lpf1.f morse.f \ nchar.f packcall.f packgrid.f packmsg.f packtext.f setup65.f \ short65.f slope.f spec2d65.f sync65.f unpackcall.f \ unpackgrid.f unpackmsg.f unpacktext.f xcor.f xfft.f xfft2.f wsjt65.f \ ftpeak65.f fil651.f fil652.f fil653.f symsync65.f \ rfile2.f encode232.f OBJS2F77 = ${SRCS2F77:.f=.o} deep65.o SRCS2C = init_rs.c encode_rs.c decode_rs.c fano.c tab.c nhash.c \ cutil.c fthread.c tmoonsub.c OBJS2C = ${SRCS2C:.c=.o} SRCS3C = ptt_unix.c igray.c wrapkarn.c OBJS3C = ${SRCS3C:.c=.o} AUDIOSRCS = a2d.f90 jtaudio.c start_threads.c resample.c all: WsjtMod/Audio.so wsjt9 JT65code JT65code: $(OBJS1) $(FC) -o JT65code $(OBJS1) build: WsjtMod/Audio.so WsjtMod/Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS) ${F2PY} -c --quiet --noopt --debug \ --f77flags="${FFLAGS}" --f90flags="${FFLAGS}" \ $(OBJS2C) $(OBJS2F77) -m Audio \ --fcompiler=${FCV} --f77exec=${FC} --f90exec=${FC} \ ${CPPFLAGS} ${LDFLAGS} ${LIBS} \ only: $(F2PYONLY) : $(SRCS2F90) \ ${SRCS3C} ${AUDIOSRCS} ${MV} Audio.so WsjtMod wsjt9: WsjtMod/Audio.so wsjt9.spec python /home/joe/temp/pyinstaller-1.3/Build.py wsjt9.spec wsjt9.spec: wsjt9.py WsjtMod/astro.py WsjtMod/g.py WsjtMod/options.py \ WsjtMod/palettes.py WsjtMod/smeter.py WsjtMod/specjt.py python /home/joe/temp/pyinstaller-1.3/Makespec.py --icon wsjt.ico \ --tk --onefile wsjt9.py wsjt9.py: wsjt.py cp wsjt.py wsjt9.py init_rs_int.o: init_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 -o init_rs_int.o init_rs.c encode_rs_int.o: encode_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 -o encode_rs_int.o encode_rs.c decode_rs_int.o: decode_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 -o decode_rs_int.o decode_rs.c cutil.o: cutil.c $(CC) $(CFLAGS) -c -DSTARNIX=1 cutil.c install: WsjtMod/Audio.so ${RM} -rf build/ ${PYTHON} setup.py install ${MKDIR} -p ${PREFIX}/share/wsjt ${INSTALL} -m 0644 CALL3.TXT ${PREFIX}/share/wsjt/ ${INSTALL} -m 0644 wsjtrc ${PREFIX}/share/wsjt/ ${INSTALL} -m 0644 dmet_*.dat ${PREFIX}/share/wsjt/ ${INSTALL} wsjt ${PREFIX}/bin deb: wsjt.py WsjtMod/Audio.so WsjtMod/g.py WsjtMod/__init__.py \ WsjtMod/options.py WsjtMod/palettes.py WsjtMod/PmwBlt.py \ WsjtMod/PmwColor.py WsjtMod/Pmw.py WsjtMod/smeter.py \ WsjtMod/specjt.py WsjtMod/astro.py DEB/DEBIAN/control \ wsjtrc cp wsjt.py wsjtrc CALL3.TXT dmet_10_-1_3.dat \ dmet_20_-2_2.dat kvasd.dat KVASD_g95 TSKY.DAT \ wsjt.ico wsjt.jpg WSJT_Quick_Reference.pdf WSJT_User_600.pdf DEB/WSJT9 cp WsjtMod/Audio.so DEB/WSJT9/WsjtMod cp WsjtMod/*.py DEB/WSJT9/WsjtMod dpkg-deb --build DEB wsjt_ver_rev_i386.deb .PHONY : clean clean: ${RM} -f *.o *.pyc *.so *~ JT65code wsjt9 WsjtMod/*.pyc WsjtMod/*.pyc \ WsjtMod/*.so wsjt9.py wsjt9.spec t75 ${RM} -rf build/ distclean: clean ${RM} -f config.log config.status Makefile wsjt_9.3.r2792/chkmsg.f0000664000175000017500000000137711015074716013031 0ustar jtnjtn subroutine chkmsg(message,cok,nspecial,flip) character message*22,cok*3 nspecial=0 flip=1.0 cok=" " do i=22,1,-1 if(message(i:i).ne.' ') go to 10 enddo i=22 10 if(i.ge.11) then if((message(i-3:i).eq.' OOO') .or. + (message(20:22).eq.' OO')) then cok='OOO' flip=-1.0 if(message(20:22).eq.' OO') then message=message(1:19) else message=message(1:i-4) endif endif endif ! if(message(1:3).eq.'ATT') nspecial=1 if(message(1:2).eq.'RO') nspecial=2 if(message(1:3).eq.'RRR') nspecial=3 if(message(1:2).eq.'73') nspecial=4 return end wsjt_9.3.r2792/packtext.f0000664000175000017500000000262011015074716013370 0ustar jtnjtn subroutine packtext(msg,nc1,nc2,nc3) parameter (MASK28=2**28 - 1) character*13 msg character*44 c data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./?'/ nc1=0 nc2=0 nc3=0 do i=1,5 !First 5 characters in nc1 do j=1,44 !Get character code if(msg(i:i).eq.c(j:j)) go to 10 enddo j=37 10 j=j-1 !Codes should start at zero nc1=42*nc1 + j enddo do i=6,10 !Characters 6-10 in nc2 do j=1,44 !Get character code if(msg(i:i).eq.c(j:j)) go to 20 enddo j=37 20 j=j-1 !Codes should start at zero nc2=42*nc2 + j enddo do i=11,13 !Characters 11-13 in nc3 do j=1,44 !Get character code if(msg(i:i).eq.c(j:j)) go to 30 enddo j=37 30 j=j-1 !Codes should start at zero nc3=42*nc3 + j enddo C We now have used 17 bits in nc3. Must move one each to nc1 and nc2. nc1=nc1+nc1 if(iand(nc3,32768).ne.0) nc1=nc1+1 nc2=nc2+nc2 if(iand(nc3,65536).ne.0) nc2=nc2+1 nc3=iand(nc3,32767) return end wsjt_9.3.r2792/wsjtrc0000664000175000017500000000035411015074716012637 0ustar jtnjtn*font: Arial 10 *Label*font: Arial 10 *Text*font: "Courier New" 12 *Canvas*font: "Lucida Console" 16 *background: gray85 *Text*background: white *Entry*background: white *foreground: black *Listbox*foreground: RoyalBlue wsjt_9.3.r2792/decode24.f0000664000175000017500000001042511461555650013146 0ustar jtnjtn subroutine decode24(dat,npts,dtx,dfx,flip,mode,mode4, + decoded,ncount,deepmsg,qual,submode) C Decodes JT65 data, assuming that DT and DF have already been determined. real dat(npts) !Raw data character decoded*22,deepmsg*22 character*72 c72 character submode*1 real*8 dt,df,phi,f0,dphi,twopi,phi1,dphi1 complex*16 cz,cz1,c0,c1 integer*1 symbol(207) integer*1 data1(13) !Decoded data (8-bit bytes) integer data4a(9) !Decoded data (8-bit bytes) integer data4(12) !Decoded data (6-bit bytes) integer amp,delta integer mettab(0:255,0:1) !Metric table integer fano integer nch(7) integer npr2(207) include 'avecom.h' data mode0/-999/ data npr2/ + 0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0, + 1,0,0,1,0,0,1,1,1,1,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,1, + 0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1, + 0,1,1,1,0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1, + 0,1,1,1,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,1,1,1,1,1, + 1,0,0,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,0,1/ data nch/1,2,4,9,18,36,72/ save mettab,mode0 if(mode.ne.mode0) call genmet(mode,mettab) mode0=mode twopi=8*atan(1.d0) dt=2.d0/11025 !Sample interval (2x downsampled data) df=11025.d0/2520.d0 nsym=206 amp=15 istart=nint(dtx/dt) !Start index for synced FFTs if(istart.lt.0) istart=0 idfbest = 0 nchips = 0 ich = 0 C Should amp be adjusted according to signal strength? C Compute soft symbols using differential BPSK demodulation c0=0. !### C0=amp ??? k=istart fac=1.e-4 phi=0.d0 phi1=0.d0 ang0=0. ! JT4 mode ich=0 40 ich=ich+1 nchips=nch(ich) nspchip=1260/nchips k=istart phi=0.d0 phi1=0.d0 fac2=1.e-8 * sqrt(float(mode4)) do j=1,nsym+1 if(flip.gt.0.0) then f0=1270.46 + dfx + (npr2(j)-1.5)*mode4*df f1=1270.46 + dfx + (2+npr2(j)-1.5)*mode4*df else f0=1270.46 + dfx + (1-npr2(j)-1.5)*mode4*df f1=1270.46 + dfx + (3-npr2(j)-1.5)*mode4*df endif dphi=twopi*dt*f0 dphi1=twopi*dt*f1 sq0=0. sq1=0. do nc=1,nchips phi=0.d0 phi1=0.d0 c0=0. c1=0. do i=1,nspchip k=k+1 phi=phi+dphi phi1=phi1+dphi1 cz=dcmplx(cos(phi),-sin(phi)) cz1=dcmplx(cos(phi1),-sin(phi1)) if(k.le.npts) then c0=c0 + dat(k)*cz c1=c1 + dat(k)*cz1 endif enddo sq0=sq0 + real(c0)**2 + aimag(c0)**2 sq1=sq1 + real(c1)**2 + aimag(c1)**2 enddo sq0=fac2*sq0 sq1=fac2*sq1 rsym=amp*(sq1-sq0) r=rsym+128. if(r.gt.255.0) r=255.0 if(r.lt.0.0) r=0.0 i4=nint(r) if(i4.gt.127) i4=i4-256 if(j.ge.1) symbol(j)=i4 enddo nbits=72+31 delta=100 limit=100000 ncycles=0 call interleave24(symbol(2),-1) !Remove the interleaving ncount=fano(metric,ncycles,data1,symbol(2),nbits,mettab, + delta,limit) if(ncount.ge.0) go to 100 if(mode.eq.7 .and. nchips.lt.mode4) go to 40 100 do i=1,9 i4=data1(i) if(i4.lt.0) i4=i4+256 data4a(i)=i4 enddo call cs_lock('decode24') write(c72,1100) (data4a(i),i=1,9) 1100 format(9b8.8) read(c72,1102) data4 1102 format(12b6) call cs_unlock decoded=' ' submode=' ' if(ncount.ge.0) then call unpackmsg(data4,decoded) submode=char(ichar('A')+ich-1) endif if(decoded(1:6).eq.'000AAA') then decoded='***WRONG MODE?***' ncount=-1 endif qual=0. deepmsg=' ' C Save symbol spectra for possible decoding of average. return end wsjt_9.3.r2792/abc441.f900000664000175000017500000000206511770624406012704 0ustar jtnjtnsubroutine abc441(msg,nmsg,itone,ndits) character msg*28 integer itone(84) integer lookup(0:91) character cc*43 ! 1 2 3 4 ! 1234567890123456789012345678901234567890123 data cc/' 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.,?/#$'/ data lookup/13, 15, 17, 46, 47, 45, 44, 12, 11, 14, & 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, & 16, 48, 18, 19, 20, 21, 22, 23, 24, 25, & 26, 27, 15, 47, 30, 14, 16, 42, 46, 35, & 36, 37, 21, 0, 11, 41, 10, 13, 43, 1, & 2, 3, 4, 5, 6, 7, 8, 9, 49, 56, & 52, 55, 54, 12, 63, 17, 18, 19, 20, 44, & 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, & 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, & 45, 63/ do i=1,nmsg j=ichar(msg(i:i)) if(j.lt.0 .or. j.gt.91) j=32 !Replace illegal char with blank n=lookup(j) itone(3*i-2)=n/16 + 1 itone(3*i-1)=mod(n/4,4) + 1 itone(3*i)=mod(n,4) + 1 enddo ndits=3*nmsg return end subroutine abc441 wsjt_9.3.r2792/sun.f0000664000175000017500000000570011461555650012362 0ustar jtnjtn subroutine sun(y,m,DD,UT,lon,lat,RA,Dec,LST,Az,El,mjd,day) implicit none integer y !Year integer m !Month integer DD !Day integer mjd !Modified Julian Date real UT !UTC in hours real RA,Dec !RA and Dec of sun C NB: Double caps here are single caps in the writeup. C Orbital elements of the Sun (also N=0, i=0, a=1): real w !Argument of perihelion real e !Eccentricity real MM !Mean anomaly real Ls !Mean longitude C Other standard variables: real v !True anomaly real EE !Eccentric anomaly real ecl !Obliquity of the ecliptic real d !Ephemeris time argument in days real r !Distance to sun, AU real xv,yv !x and y coords in ecliptic real lonsun !Ecliptic long and lat of sun C Ecliptic coords of sun (geocentric) real xs,ys C Equatorial coords of sun (geocentric) real xe,ye,ze real lon,lat real GMST0,LST,HA real xx,yy,zz real xhor,yhor,zhor real Az,El real day real rad data rad/57.2957795/ C Time in days, with Jan 0, 2000 equal to 0.0: d=367*y - 7*(y+(m+9)/12)/4 + 275*m/9 + DD - 730530 + UT/24.0 mjd=d + 51543 ecl = 23.4393 - 3.563e-7 * d C Compute updated orbital elements for Sun: w = 282.9404 + 4.70935e-5 * d e = 0.016709 - 1.151e-9 * d MM = mod(356.0470d0 + 0.9856002585d0 * d + 360000.d0,360.d0) Ls = mod(w+MM+720.0,360.0) EE = MM + e*rad*sin(MM/rad) * (1.0 + e*cos(M/rad)) EE = EE - (EE - e*rad*sin(EE/rad)-MM) / (1.0 - e*cos(EE/rad)) xv = cos(EE/rad) - e yv = sqrt(1.0-e*e) * sin(EE/rad) v = rad*atan2(yv,xv) r = sqrt(xv*xv + yv*yv) lonsun = mod(v + w + 720.0,360.0) C Ecliptic coordinates of sun (rectangular): xs = r * cos(lonsun/rad) ys = r * sin(lonsun/rad) C Equatorial coordinates of sun (rectangular): xe = xs ye = ys * cos(ecl/rad) ze = ys * sin(ecl/rad) C RA and Dec in degrees: RA = rad*atan2(ye,xe) Dec = rad*atan2(ze,sqrt(xe*xe + ye*ye)) GMST0 = (Ls + 180.0)/15.0 LST = mod(GMST0+UT+lon/15.0+48.0,24.0) !LST in hours HA = 15.0*LST - RA !HA in degrees xx = cos(HA/rad)*cos(Dec/rad) yy = sin(HA/rad)*cos(Dec/rad) zz = sin(Dec/rad) xhor = xx*sin(lat/rad) - zz*cos(lat/rad) yhor = yy zhor = xx*cos(lat/rad) + zz*sin(lat/rad) Az = mod(rad*atan2(yhor,xhor) + 180.0 + 360.0,360.0) El = rad*asin(zhor) day=d-1.5 return end wsjt_9.3.r2792/deep65.f900000664000175000017500000001144011756463535013023 0ustar jtnjtnsubroutine deep65(s3,mode65,neme,flip,mycall,hiscall,hisgrid,decoded,qual) parameter (MAXCALLS=7000,MAXRPT=63) real s3(64,63) character callsign*12,grid*4,message*22,hisgrid*6,c*1,ceme*3 character*12 mycall,hiscall character mycall0*12,hiscall0*12,hisgrid0*6 character*22 decoded character*22 testmsg(2*MAXCALLS + 2 + MAXRPT) character*15 callgrid(MAXCALLS) character*180 line character*4 rpt(MAXRPT) integer ncode(63,2*MAXCALLS + 2 + MAXRPT) real pp(2*MAXCALLS + 2 + MAXRPT) common/mrscom/ mrs(63),mrs2(63) common/c3com/ mcall3a data neme0/-99/ data rpt/'-01','-02','-03','-04','-05', & '-06','-07','-08','-09','-10', & '-11','-12','-13','-14','-15', & '-16','-17','-18','-19','-20', & '-21','-22','-23','-24','-25', & '-26','-27','-28','-29','-30', & 'R-01','R-02','R-03','R-04','R-05', & 'R-06','R-07','R-08','R-09','R-10', & 'R-11','R-12','R-13','R-14','R-15', & 'R-16','R-17','R-18','R-19','R-20', & 'R-21','R-22','R-23','R-24','R-25', & 'R-26','R-27','R-28','R-29','R-30', & 'RO','RRR','73'/ save if(mycall.eq.mycall0 .and. hiscall.eq.hiscall0 .and. & hisgrid.eq.hisgrid0 .and. mcall3a.eq.0 .and. neme.eq.neme0) go to 30 mcall3a=0 rewind 23 k=0 icall=0 do n=1,MAXCALLS if(n.eq.1) then callsign=hiscall do i=4,12 if(ichar(callsign(i:i)).eq.0) callsign(i:i)=' ' enddo grid=hisgrid(1:4) if(ichar(grid(3:3)).eq.0) grid(3:3)=' ' if(ichar(grid(4:4)).eq.0) grid(4:4)=' ' else read(23,1002,end=20) line 1002 format (A80) if(line(1:4).eq.'ZZZZ') go to 20 if(line(1:2).eq.'//') go to 10 i1=index(line,',') if(i1.lt.4) go to 10 i2=index(line(i1+1:),',') if(i2.lt.5) go to 10 i2=i2+i1 i3=index(line(i2+1:),',') if(i3.lt.1) i3=index(line(i2+1:),' ') i3=i2+i3 callsign=line(1:i1-1) grid=line(i1+1:i2-1) ceme=line(i2+1:i3-1) if(neme.eq.1 .and. ceme.ne.'EME') go to 10 endif icall=icall+1 j1=index(mycall,' ') - 1 if(j1.le.-1) j1=12 if(j1.lt.3) j1=6 j2=index(callsign,' ') - 1 if(j2.le.-1) j2=12 if(j2.lt.3) j2=6 j3=index(mycall,'/') ! j3>0 means compound mycall j4=index(callsign,'/') ! j4>0 means compound hiscall callgrid(icall)=callsign(1:j2) mz=1 ! Allow MyCall + HisCall + rpt (?) if(n.eq.1 .and. j3.lt.1 .and. j4.lt.1 .and. & flip.gt.0.0 .and. callsign(1:6).ne.' ') mz=MAXRPT+1 do m=1,mz if(m.gt.1) grid=rpt(m-1) if(j3.lt.1 .and.j4.lt.1) callgrid(icall)=callsign(1:j2)//' '//grid message=mycall(1:j1)//' '//callgrid(icall) k=k+1 testmsg(k)=message call encode65(message,ncode(1,k)) if(n.ge.2) then ! Insert CQ message if(j4.lt.1) callgrid(icall)=callsign(1:j2)//' '//grid message='CQ '//callgrid(icall) k=k+1 testmsg(k)=message call encode65(message,ncode(1,k)) endif enddo 10 continue enddo 20 continue ntot=k neme0=neme 30 mycall0=mycall hiscall0=hiscall hisgrid0=hisgrid ref0=0. do j=1,63 ref0=ref0 + s3(mrs(j),j) enddo p1=-1.e30 p2=-1.e30 do k=1,ntot pp(k)=0. ! Test all messages if flip=+1; skip the CQ messages if flip=-1. if(flip.gt.0.0 .or. testmsg(k)(1:3).ne.'CQ ') then sum=0. ref=ref0 do j=1,63 i=ncode(j,k)+1 sum=sum + s3(i,j) if(i.eq.mrs(j)) ref=ref - s3(i,j) + s3(mrs2(j),j) enddo p=sum/ref pp(k)=p if(p.gt.p1) then p1=p ip1=k endif endif enddo do i=1,ntot if(pp(i).gt.p2 .and. pp(i).ne.p1) p2=pp(i) enddo ! ### DO NOT REMOVE ### rewind 77 write(77,*) p1,p2 ! ### Works OK without it (in both Windows and Linux) if compiled ! ### without optimization. However, in Windows this is a colossal ! ### pain because of the way F2PY wants to run the compile step. if(mode65.eq.1) bias=max(1.12*p2,0.335) if(mode65.eq.2) bias=max(1.08*p2,0.405) if(mode65.ge.4) bias=max(1.04*p2,0.505) if(p2.eq.p1 .and. p1.ne.-1.e30) stop 'Error in deep65' qual=100.0*(p1-bias) decoded=' ' c=' ' if(qual.gt.1.0) then if(qual.lt.6.0) c='?' decoded=testmsg(ip1) else qual=0. endif decoded(22:22)=c ! Make sure everything is upper case. do i=1,22 if(decoded(i:i).ge.'a' .and. decoded(i:i).le.'z') & decoded(i:i)=char(ichar(decoded(i:i))-32) enddo return end subroutine deep65 wsjt_9.3.r2792/gcom2.f900000664000175000017500000001760511756463535012753 0ustar jtnjtn! Variable Purpose Set in Thread !------------------------------------------------------------------------- real ps0 !Spectrum of best ping, FSK441/JTMS Decoder real psavg !Average spectrum Decoder real s2 !2d spectrum for horizontal waterfall GUI real ccf !CCF in time (blue curve) Decoder real green !Data for green line GUI integer ngreen !Length of green GUI real dgain !Digital audio gain setting GUI real dlatency !Differential Tx/Rx latency GUI real fecho !Audio tone for echo test Decoder integer iter !(why is this here??) integer iyr !UTC from python GUI integer imo !UTC from python GUI integer ida !UTC from python GUI integer ndecoding !Decoder status (see decode2.f90) GUI,Decoder integer ndecoding0 !Status on previous decode GUI,Decoder integer mousebutton !Which button was clicked? GUI integer ndecdone !Is decoder finished? GUI,Decoder integer npingtime !Time in file of mouse-selected ping GUI,Decoder integer npingtime2 !End time of mouse-selected ping GUI,Decoder integer ntc !Time constant for echo averaging (m) GUI integer necho !0 for CW, 1 for 27x27 Costas GUI integer nfrit !RIT setting for Echo mode (Hz) GUI integer ndither !Dither range for Echo mode (Hz) GUI integer nsumecho !Number of echo transmissions avgd GUI integer ierr !(why is this here?) integer lauto !Are we in Auto mode? GUI integer mantx !Manual transmission requested? GUI,SoundIn integer nrestart !True if transmission should restart GUI,SoundIn integer ntr !Are we in 2nd sequence? SoundIn integer ntxboth !Transmit both sequqnces? GUI integer nmsg !Length of Tx message SoundIn integer nsave !Which files to save? GUI integer nadd5 !Prepend 5 sec of 0's before decoding? GUI integer dftolerance !DF tolerance (Hz) GUI logical LDecoded !Was a message decoded? Decoder logical rxdone !Has the Rx sequence finished? SoundIn,Decoder integer monitoring !Are we monitoring? GUI integer nzap !Is Zap checked? GUI integer nsavecum !(why is this here?) integer minsigdb !Decoder threshold setting GUI integer nclearave !Set to 1 to clear JT65 avg GUI,Decoder integer nfreeze !Is Freeze checked? GUI integer nafc !Is AFC checked? GUI integer nmode !Which WSJT mode? GUI,Decoder integer mode65 !JT65 sub-mode (A/B/C ==> 1/2/4) GUI,SoundIn,Decoder integer mode4 !JT4 sub-mode (A-G) GUI,SoundIn,Decoder integer ndebug !Write debugging info? GUI integer nfmid !Center frequency of main display GUI integer nforce !Force decoding of questionable data GUI,Decoder integer nfrange !Frequency range of main display GUI integer nport !Requested COM port number GUI integer ndtr !DTR=1, RTS=0 GUI integer mousedf !Mouse-selected freq offset, DF GUI integer nlowbeacon !Special for W1JJ GUI integer neme !EME calls only in deep search? GUI integer nsked !Sked mode for deep search? GUI integer naggressive !Is "Aggressive decoding" checked? GUI integer ntx2 !Is "No shorthands if Tx1" checked? GUI integer nslim2 !2nd Decoder threshold for FSK441 GUI integer nagain !Decode same file again? GUI integer nsavelast !Save last file? GUI integer ntxdf !Tx frequency offset GUI integer shok !Shorthand messages OK? GUI integer sendingsh !Sending a shorthand message? SoundIn integer*2 d2a !Rx data, extracted from y1 Decoder integer*2 d2b !Rx data, selected by mouse-pick Decoder integer*2 b !Pixel values for waterfall spectrum GUI integer jza !Length of data in d2a GUI,Decoder integer jzb !(why is this here?) integer ntime !Integer Unix time (now) SoundIn integer idinterval !Interval between CWIDs, minutes GUI integer msmax !(why is this here?) integer lenappdir !Length of Appdir string GUI integer idf !Frequency offset in Hz Decoder integer ndiskdat !1 if data read from disk, 0 otherwise GUI integer nfsam !Sample rate for data read from disk Decoder integer nlines !Available lines of waterfall data GUI integer nflat !Is waterfall to be flattened? GUI integer ntdecode !Time to start decoding in JT65 modes GUI integer ntxreq !Tx msg# requested GUI integer ntxnow !Tx msg# being sent now GUI integer ndepth !Requested "depth" of JT65 decoding GUI integer nspecial !JT65 shorthand msg#: RO=2 RRR=3 73=4 Decoder integer ndf !Measured DF in Hz Decoder real ss1 !Magenta curve for JT65 shorthand msg Decoder real ss2 !Orange curve for JT65 shorthand msg Decoder character mycall*12 !My call sign GUI character hiscall*12 !His call sign GUI character hisgrid*6 !His grid locator GUI character txmsg*28 !Message to be transmitted GUI character sending*28 !Message being sent SoundIn character mode*6 !WSJT operating mode GUI character utcdate*12 !UTC date GUI character*24 fname0 !Filenames to be recorded, read, ... Decoder character*24 fnamea character*24 fnameb character*24 decodedfile character*80 AppDir !WSJT installation directory GUI character*80 AzElDir !Directory for azel.dat GUI character*80 filetokilla !Filenames (full path) Decoder character*80 filetokillb character*80 pttport character*22 t0msg parameter (ND2MAX=120*11025) common/gcom2/ps0(431),psavg(450),s2(64,3100),ccf(-5:540), & green(500),ngreen,dgain,dlatency,fecho,iter,iyr,imo,ida, & ndecoding,ndecoding0,mousebutton,ntc,necho,nfrit,ndither, & nsumecho,ndecdone,npingtime,npingtime2,ierr,lauto,mantx, & nrestart,ntr,ntxboth,nmsg, & nsave,nadd5,dftolerance,LDecoded,rxdone,monitoring,nzap, & nsavecum,minsigdb,nclearave,newdat2,nfreeze,nafc,nmode,mode65, & mode4,ndebug,nport,ndtr,mousedf,nlowbeacon, & neme,nsked,naggressive,ntx2,nslim2,nagain,nsavelast,ntxdf, & shok,sendingsh,d2a(ND2MAX),d2b(ND2MAX),b(60000),jza,jzb,ntime, & idinterval,msmax,lenappdir,idf,ndiskdat,nfsam,nlines,nflat, & ntdecode,ntxreq,ntxnow,ndepth,nspecial,ndf, & nfmid,nforce,nfrange,ss1(-224:224),ss2(-224:224), & mycall,hiscall,hisgrid,txmsg,sending,mode,fname0,fnamea, & fnameb,decodedfile,AppDir,AzElDir,filetokilla,filetokillb, & utcdate,pttport,t0msg !### volatile /gcom2/ wsjt_9.3.r2792/horizspec.f900000664000175000017500000000344511552062174013733 0ustar jtnjtnsubroutine horizspec(x,brightness,contrast,a) real x(4096) integer brightness,contrast integer*2 a(750,300) real y(512),ss(128) complex c(0:256) equivalence (y,c) include 'gcom1.f90' include 'gcom2.f90' save nfft=512 nq=nfft/4 gain=50.0 * 3.0**(0.36+0.01*contrast) offset=0.5*(brightness+30.0) df=11025.0/512.0 if(ntr.ne.ntr0) then if(lauto.eq.0 .or. ntr.eq.TxFirst) then call hscroll(a,nx) nx=0 endif ntr0=ntr endif i0=0 do iter=1,5 if(nx.lt.750) nx=nx+1 do i=1,nfft y(i)=1.4*x(i+i0) enddo call xfft2(y,nfft) nq=nfft/4 do i=1,nq ss(i)=real(c(i))**2 + aimag(c(i))**2 enddo p=0. do i=21,120 p=p+ss(i) n=0 if(ss(i).gt.0.) n=gain*log10(0.05*ss(i)) + offset n=min(252,max(0,n)) j=121-i a(nx,j)=n enddo if(nx.eq.7 .or. nx.eq.378 .or. nx.eq.750) then ! Put in yellow ticks at the standard tone frequencies for FSK441, or ! at the sync-tone frequency for JT65. do i=nx-4,nx if(mode.eq.'FSK441') then do n=2,5 j=121-nint(n*441/df) a(i,j)=254 enddo else if(mode(1:4).eq.'JT65') then j=121-nint(1270.46/df) a(i,j)=254 endif enddo endif ng=140 - 30*log10(0.00033*p+0.001) ng=min(ng,150) if(nx.eq.1) ng0=ng if(abs(ng-ng0).le.1) then if(ng.ge.1 .and. ng.le.300) a(nx,ng)=255 else ist=1 if(ng.lt.ng0) ist=-1 jmid=(ng+ng0)/2 i=max(1,nx-1) do j=ng0+ist,ng,ist if(j.ge.1 .and. j.le.300) a(i,j)=255 if(j.eq.jmid) i=i+1 enddo ng0=ng endif i0=i0+441 enddo return end subroutine horizspec wsjt_9.3.r2792/gnu.py0000664000175000017500000003144611342553257012556 0ustar jtnjtnimport re import os import sys import warnings from numpy.distutils.cpuinfo import cpu from numpy.distutils.fcompiler import FCompiler from numpy.distutils.exec_command import exec_command from numpy.distutils.misc_util import msvc_runtime_library compilers = ['GnuFCompiler', 'Gnu95FCompiler'] TARGET_R = re.compile("Target: ([a-zA-Z0-9_\-]*)") # XXX: do we really need to check for target ? If the arch is not supported, # the return code should be != 0 _R_ARCHS = {"ppc": r"^Target: (powerpc-.*)$", "i686": r"^Target: (i686-.*)$", "x86_64": r"^Target: (i686-.*)$", "ppc64": r"^Target: (powerpc-.*)$",} class GnuFCompiler(FCompiler): compiler_type = 'gnu' compiler_aliases = ('g77',) description = 'GNU Fortran 77 compiler' def gnu_version_match(self, version_string): """Handle the different versions of GNU fortran compilers""" m = re.match(r'GNU Fortran', version_string) if not m: return None m = re.match(r'GNU Fortran\s+95.*?([0-9-.]+)', version_string) if m: return ('gfortran', m.group(1)) m = re.match(r'GNU Fortran.*?([0-9-.]+)', version_string) if m: v = m.group(1) if v.startswith('0') or v.startswith('2') or v.startswith('3'): # the '0' is for early g77's return ('g77', v) else: # at some point in the 4.x series, the ' 95' was dropped # from the version string return ('gfortran', v) def version_match(self, version_string): v = self.gnu_version_match(version_string) if not v or v[0] != 'g77': return None return v[1] # 'g77 --version' results # SunOS: GNU Fortran (GCC 3.2) 3.2 20020814 (release) # Debian: GNU Fortran (GCC) 3.3.3 20040110 (prerelease) (Debian) # GNU Fortran (GCC) 3.3.3 (Debian 20040401) # GNU Fortran 0.5.25 20010319 (prerelease) # Redhat: GNU Fortran (GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) 3.2.2 20030222 (Red Hat Linux 3.2.2-5) # GNU Fortran (GCC) 3.4.2 (mingw-special) possible_executables = ['g77', 'f77'] executables = { 'version_cmd' : [None, "--version"], 'compiler_f77' : [None, "-g", "-Wall", "-fno-second-underscore"], 'compiler_f77' : [None, "-g", "-Wall"], 'compiler_f90' : None, # Use --fcompiler=gnu95 for f90 codes 'compiler_fix' : None, 'linker_so' : [None, "-g", "-Wall"], 'archiver' : ["ar", "-cr"], 'ranlib' : ["ranlib"], 'linker_exe' : [None, "-g", "-Wall"] } module_dir_switch = None module_include_switch = None # Cygwin: f771: warning: -fPIC ignored for target (all code is # position independent) if os.name != 'nt' and sys.platform != 'cygwin': pic_flags = ['-fPIC'] # use -mno-cygwin for g77 when Python is not Cygwin-Python if sys.platform == 'win32': for key in ['version_cmd', 'compiler_f77', 'linker_so', 'linker_exe']: executables[key].append('-mno-cygwin') g2c = 'g2c' suggested_f90_compiler = 'gnu95' #def get_linker_so(self): # # win32 linking should be handled by standard linker # # Darwin g77 cannot be used as a linker. # #if re.match(r'(darwin)', sys.platform): # # return # return FCompiler.get_linker_so(self) def get_flags_linker_so(self): opt = self.linker_so[1:] if sys.platform=='darwin': target = os.environ.get('MACOSX_DEPLOYMENT_TARGET', None) # If MACOSX_DEPLOYMENT_TARGET is set, we simply trust the value # and leave it alone. But, distutils will complain if the # environment's value is different from the one in the Python # Makefile used to build Python. We let disutils handle this # error checking. if not target: # If MACOSX_DEPLOYMENT_TARGET is not set in the environment, # we try to get it first from the Python Makefile and then we # fall back to setting it to 10.3 to maximize the set of # versions we can work with. This is a reasonable default # even when using the official Python dist and those derived # from it. import distutils.sysconfig as sc g = {} filename = sc.get_makefile_filename() sc.parse_makefile(filename, g) target = g.get('MACOSX_DEPLOYMENT_TARGET', '10.3') os.environ['MACOSX_DEPLOYMENT_TARGET'] = target if target == '10.3': s = 'Env. variable MACOSX_DEPLOYMENT_TARGET set to 10.3' warnings.warn(s) opt.extend(['-undefined', 'dynamic_lookup', '-bundle']) else: opt.append("-shared") if sys.platform.startswith('sunos'): # SunOS often has dynamically loaded symbols defined in the # static library libg2c.a The linker doesn't like this. To # ignore the problem, use the -mimpure-text flag. It isn't # the safest thing, but seems to work. 'man gcc' says: # ".. Instead of using -mimpure-text, you should compile all # source code with -fpic or -fPIC." opt.append('-mimpure-text') return opt def get_libgcc_dir(self): status, output = exec_command(self.compiler_f77 + ['-print-libgcc-file-name'], use_tee=0) if not status: return os.path.dirname(output) return None def get_library_dirs(self): opt = [] if sys.platform[:5] != 'linux': d = self.get_libgcc_dir() if d: # if windows and not cygwin, libg2c lies in a different folder if sys.platform == 'win32' and not d.startswith('/usr/lib'): d = os.path.normpath(d) if not os.path.exists(os.path.join(d, "lib%s.a" % self.g2c)): d2 = os.path.abspath(os.path.join(d, '../../../../lib')) if os.path.exists(os.path.join(d2, "lib%s.a" % self.g2c)): opt.append(d2) opt.append(d) return opt def get_libraries(self): opt = [] d = self.get_libgcc_dir() if d is not None: g2c = self.g2c + '-pic' f = self.static_lib_format % (g2c, self.static_lib_extension) if not os.path.isfile(os.path.join(d,f)): g2c = self.g2c else: g2c = self.g2c if g2c is not None: opt.append(g2c) c_compiler = self.c_compiler if sys.platform == 'win32' and c_compiler and \ c_compiler.compiler_type=='msvc': # the following code is not needed (read: breaks) when using MinGW # in case want to link F77 compiled code with MSVC opt.append('gcc') runtime_lib = msvc_runtime_library() if runtime_lib: opt.append(runtime_lib) if sys.platform == 'darwin': opt.append('cc_dynamic') return opt def get_flags_debug(self): return ['-g'] def get_flags_opt(self): if self.get_version()<='3.3.3': # With this compiler version building Fortran BLAS/LAPACK # with -O3 caused failures in lib.lapack heevr,syevr tests. opt = ['-O2'] else: opt = ['-O3'] opt.append('-funroll-loops') return opt def get_flags_arch(self): return [] class Gnu95FCompiler(GnuFCompiler): compiler_type = 'gnu95' compiler_aliases = ('gfortran',) description = 'GNU Fortran 95 compiler' def version_match(self, version_string): v = self.gnu_version_match(version_string) if not v or v[0] != 'gfortran': return None return v[1] # 'gfortran --version' results: # XXX is the below right? # Debian: GNU Fortran 95 (GCC 4.0.3 20051023 (prerelease) (Debian 4.0.2-3)) # GNU Fortran 95 (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) # OS X: GNU Fortran 95 (GCC) 4.1.0 # GNU Fortran 95 (GCC) 4.2.0 20060218 (experimental) # GNU Fortran (GCC) 4.3.0 20070316 (experimental) possible_executables = ['gfortran', 'f95'] executables = { 'version_cmd' : ["", "--version"], #'compiler_f77' : [None, "-Wall", "-ffixed-form", # "-fno-second-underscore"], #'compiler_f90' : [None, "-Wall","-fno-second-underscore"], #'compiler_fix' : [None, "-Wall", "-ffixed-form", # "-fno-second-underscore"], 'compiler_f77' : [None, "-Wall", "-ffixed-form"], 'compiler_f90' : [None, "-Wall"], 'compiler_fix' : [None, "-Wall", "-ffixed-form"], 'linker_so' : ["", "-Wall"], 'archiver' : ["ar", "-cr"], 'ranlib' : ["ranlib"], 'linker_exe' : [None, "-Wall"] } # use -mno-cygwin flag for g77 when Python is not Cygwin-Python if sys.platform == 'win32': for key in ['version_cmd', 'compiler_f77', 'compiler_f90', 'compiler_fix', 'linker_so', 'linker_exe']: executables[key].append('-mno-cygwin') module_dir_switch = '-J' module_include_switch = '-I' g2c = 'gfortran' # Note that this is here instead of GnuFCompiler as gcc < 4 uses a # different output format (which isn't as useful) than gcc >= 4, # and we don't have to worry about g77 being universal (as it can't be). def _can_target(self, cmd, arch): """Return true is the compiler support the -arch flag for the given architecture.""" newcmd = cmd[:] newcmd.extend(["-arch", arch, "-v"]) st, out = exec_command(" ".join(newcmd)) if st == 0: for line in out.splitlines(): m = re.search(_R_ARCHS[arch], line) if m: return True return False def _universal_flags(self, cmd): """Return a list of -arch flags for every supported architecture.""" if not sys.platform == 'darwin': return [] arch_flags = [] for arch in ["ppc", "i686"]: if self._can_target(cmd, arch): arch="i386" arch_flags.extend(["-arch", arch]) return arch_flags def get_flags(self): flags = GnuFCompiler.get_flags(self) arch_flags = self._universal_flags(self.compiler_f90) if arch_flags: flags[:0] = arch_flags return flags def get_flags_linker_so(self): flags = GnuFCompiler.get_flags_linker_so(self) arch_flags = self._universal_flags(self.linker_so) if arch_flags: flags[:0] = arch_flags return flags def get_library_dirs(self): opt = GnuFCompiler.get_library_dirs(self) if sys.platform == 'win32': c_compiler = self.c_compiler if c_compiler and c_compiler.compiler_type == "msvc": target = self.get_target() if target: d = os.path.normpath(self.get_libgcc_dir()) root = os.path.join(d, os.pardir, os.pardir, os.pardir, os.pardir) mingwdir = os.path.normpath(os.path.join(root, target, "lib")) full = os.path.join(mingwdir, "libmingwex.a") if os.path.exists(full): opt.append(mingwdir) return opt def get_libraries(self): opt = GnuFCompiler.get_libraries(self) if sys.platform == 'darwin': opt.remove('cc_dynamic') if sys.platform == 'win32': c_compiler = self.c_compiler if c_compiler and c_compiler.compiler_type == "msvc": if "gcc" in opt: i = opt.index("gcc") opt.insert(i+1, "mingwex") opt.insert(i+1, "mingw32") return opt def get_target(self): status, output = exec_command(self.compiler_f77 + ['-v'], use_tee=0) if not status: m = TARGET_R.search(output) if m: return m.group(1) return "" if __name__ == '__main__': from distutils import log log.set_verbosity(2) compiler = GnuFCompiler() compiler.customize() print compiler.get_version() raw_input('Press ENTER to continue...') try: compiler = Gnu95FCompiler() compiler.customize() print compiler.get_version() except Exception, msg: print msg raw_input('Press ENTER to continue...') wsjt_9.3.r2792/Makefile.ifort0000664000175000017500000001346011233654144014165 0ustar jtnjtnMV ?= mv CC ?= gcc MKDIR ?= mkdir INSTALL= install FFLAGS = -O2 -C -threads -reentrancy threaded -traceback -static LDFLAGS = -L/usr/lib -L/usr/local/lib LIBS += -lpthread -lportaudio -lsamplerate -lfftw3f CPPFLAGS = -I/usr/include -I/usr/local/include CFLAGS = -Wall -O0 -g PREFIX = NONE # WSJT specific C flags CFLAGS += -DBIGSYM=1 -fPIC DEFS = -DPACKAGE_NAME=\"wsjt\" -DPACKAGE_TARNAME=\"wsjt\" -DPACKAGE_VERSION=\"7.04\" -DPACKAGE_STRING=\"wsjt\ 7.04\" -DPACKAGE_BUGREPORT=\"\" -DFC_LIB_PATH=\"/usr/local/g95-install/bin/../lib/gcc-lib/i686-suse-linux-gnu/4.0.3//\" -DFC=\"g95\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SYS_SYSLOG_H=1 -DHAVE_STDDEF_H=1 -DHAVE_LIBGEN_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_WAIT_H=1 -DHAVE_STDIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_LINUX_PPDEV_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DTIME_WITH_SYS_TIME=1 -DSTRING_WITH_STRINGS=1 -DNDEBUG=1 -DHAS_SAMPLERATE_H=1 -DHAS_PORTAUDIO=1 -DHAS_PORTAUDIO_H=1 -DHAS_PORTAUDIO_LIB=1 -DHAS_FFTW3_H=1 -DHAS_FFTW3FLIBS=1 CFLAGS += ${DEFS} CPPFLAGS += ${DEFS} -I. # WSJT specific Fortran flags #FFLAGS += -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC Audio: WsjtMod/Audio.so # The default rules .c.o: ${CC} ${CPPFLAGS} ${CFLAGS} -c -o ${<:.c=.o} $< .f.o: ${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $< .F90.o: ${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.F90=.o} $< OS=Linux FC=ifort FCV=intel FC_LIB_PATH += /usr/local/g95-install/bin/../lib/gcc-lib/i686-suse-linux-gnu/4.0.3// LDFLAGS += -L${FC_LIB_PATH} PYTHON ?= /usr/bin/python RM ?= /bin/rm F2PY = /usr/bin/f2py OBJS1 = JT65code.o nchar.o grid2deg.o packmsg.o packtext.o \ packcall.o packgrid.o unpackmsg.o unpacktext.o unpackcall.o \ unpackgrid.o deg2grid.o chkmsg.o getpfx1.o \ getpfx2.o k2grid.o grid2k.o interleave63.o graycode.o set.o \ igray.o init_rs_int.o encode_rs_int.o decode_rs_int.o \ wrapkarn.o cutil.o F2PYONLY = ftn_init ftn_quit audio_init spec getfile azdist0 astro0 chkt0 SRCS2F90 = abc441.F90 astro0.F90 audio_init.F90 azdist0.f90 \ blanker.f90 decode1.F90 decode2.f90 decode3.F90 ftn_init.F90 \ ftn_quit.f90 get_fname.F90 getfile.F90 horizspec.f90 hscroll.f90 \ pix2d.f90 pix2d65.f90 rfile.f90 savedata.F90 spec.f90 \ wsjtgen.F90 runqqq.F90 fivehz.F90 chkt0.f90 \ genwspr.f90 wqencode.f90 wqdecode.f90 packpfx.f90 unpackpfx.f90 \ packname.f90 unpackname.f90 packtext2.f90 unpacktext2.f90 \ packprop.f90 unpackprop.f90 hash.f90 wsjtwspr.f90 gen64.f90 \ thnix.f90 OBJS2F90 = ${SRCS2F90:.f90=.o} SRCS2F77 = wsjt1.f astro.f azdist.f coord.f dcoord.f deg2grid.f \ dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f moon2.f \ MoonDop.f sun.f toxyz.f pfxdump.f \ avesp2.f bzap.f spec441.f spec2d.f mtdecode.f stdecode.f \ indexx.f s2shape.f flat2.f gen65.f gen24.f entail.f genmet.f \ wsjt24.f sync24.f ps24.f fourt.f xcor24.f decode24.f \ chkmsg.f gen6m.f gentone.f interleave24.f \ syncf0.f syncf1.f synct.f decode6m.f avemsg6m.f \ set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f \ ping.f longx.f peakup.f sync.f detect.f avemsg65.f decode65.f \ demod64a.f encode65.f extract.f chkhist.f flat1.f four2.f \ gencw.f gencwid.f msgtype.f \ getpfx1.f getpfx2.f getsnr.f graycode.f grid2k.f \ interleave63.f k2grid.f limit.f lpf1.f morse.f \ nchar.f packcall.f packgrid.f packmsg.f packtext.f setup65.f \ short65.f slope.f spec2d65.f sync65.f unpackcall.f \ unpackgrid.f unpackmsg.f unpacktext.f xcor.f xfft.f xfft2.f wsjt65.f \ ftpeak65.f fil651.f fil652.f fil653.f symsync65.f \ rfile2.f encode232.f inter_mept.f pack50.f unpack50.f \ filbig2.F mept162a.f twkfreq.f sync162.f decode162.f \ ps162.f fchisq.f fano232.f ccf2.f wsjt64.f sync64.f OBJS2F77 = ${SRCS2F77:.f=.o} deep65.o SRCS2C = init_rs.c encode_rs.c decode_rs.c fano.c tab.c nhash.c \ cutil.c fthread.c OBJS2C = ${SRCS2C:.c=.o} SRCS3C = ptt_unix.c igray.c wrapkarn.c OBJS3C = ${SRCS3C:.c=.o} AUDIOSRCS = a2d.f90 jtaudio.c start_threads.c resample.c all: WsjtMod/Audio.so wsjt7 JT65code JT65code: $(OBJS1) $(FC) -o JT65code $(OBJS1) build: WsjtMod/Audio.so WsjtMod/Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS) ${F2PY} -c --quiet --opt="-O2 ${CFLAGS} \ ${FFLAGS}" $(OBJS2C) $(OBJS2F77) -m Audio \ --fcompiler=${FCV} --f77exec=${FC} --f90exec=${FC} \ ${CPPFLAGS} ${LDFLAGS} ${LIBS} \ only: $(F2PYONLY) \ : $(SRCS2F90) \ ${SRCS3C} ${AUDIOSRCS} ${MV} Audio.so WsjtMod wsjt7: WsjtMod/Audio.so wsjt7.spec python /home/joe/temp/pyinstaller-1.3/Build.py wsjt7.spec wsjt7.spec: wsjt7.py WsjtMod/astro.py WsjtMod/g.py WsjtMod/options.py \ WsjtMod/palettes.py WsjtMod/smeter.py WsjtMod/specjt.py python /home/joe/temp/pyinstaller-1.3/Makespec.py --icon wsjt.ico \ --tk --onefile wsjt7.py wsjt7.py: wsjt.py cp wsjt.py wsjt7.py init_rs_int.o: init_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 -o init_rs_int.o init_rs.c encode_rs_int.o: encode_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 -o encode_rs_int.o encode_rs.c decode_rs_int.o: decode_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 -o decode_rs_int.o decode_rs.c cutil.o: cutil.c $(CC) $(CFLAGS) -c -DSTARNIX=1 cutil.c .PHONY : clean install: WsjtMod/Audio.so ${RM} -rf build/ ${PYTHON} setup.py install ${MKDIR} -p ${PREFIX}/share/wsjt ${INSTALL} -m 0644 CALL3.TXT ${PREFIX}/share/wsjt/ ${INSTALL} -m 0644 wsjtrc ${PREFIX}/share/wsjt/ ${INSTALL} -m 0644 dmet_*.dat ${PREFIX}/share/wsjt/ ${INSTALL} wsjt ${PREFIX}/bin clean: ${RM} -f *.o *.pyc *.so *~ JT65code wsjt7 WsjtMod/*.pyc WsjtMod/*.pyc \ WsjtMod/*.so wsjt7.py wsjt7.spec ${RM} -rf build/ distclean: clean ${RM} -f config.log config.status Makefile wsjt_9.3.r2792/flatten.f0000664000175000017500000000610111131744574013205 0ustar jtnjtn subroutine flatten(s2,nbins,jz,psa,ref,birdie,variance) C Examines the 2-d spectrum s2(nbins,jz) and makes a reference spectrum C from the jz/2 spectra below the 50th percentile in total power. Uses C reference spectrum (with birdies removed) to flatten the passband. real s2(nbins,jz) !2d spectrum real psa(nbins) !Grand average spectrum real ref(nbins) !Ref spect: smoothed ave of lower half real birdie(nbins) !Spec (with birdies) for plot, in dB real variance(nbins) real ref2(750) !Work array real power(750) C Find power in each time block, then get median do j=1,jz s=0. do i=1,nbins s=s+s2(i,j) enddo power(j)=s enddo call pctile(power,ref2,jz,50,xmedian) if(jz.lt.5) go to 900 C Get variance in each freq channel, using only those spectra with C power below the median. do i=1,nbins s=0. nsum=0 do j=1,jz if(power(j).le.xmedian) then s=s+s2(i,j) nsum=nsum+1 endif enddo s=s/nsum sq=0. do j=1,jz if(power(j).le.xmedian) sq=sq + (s2(i,j)/s-1.0)**2 enddo variance(i)=sq/nsum enddo C Get grand average, and average of spectra with power below median. call zero(psa,nbins) call zero(ref,nbins) nsum=0 do j=1,jz call add(psa,s2(1,j),psa,nbins) if(power(j).le.xmedian) then call add(ref,s2(1,j),ref,nbins) nsum=nsum+1 endif enddo do i=1,nbins !Normalize the averages psa(i)=psa(i)/jz ref(i)=ref(i)/nsum birdie(i)=ref(i) !Copy ref into birdie enddo kpk=0 !shut up compiler warnings -db C Compute smoothed reference spectrum with narrow lines (birdies) removed do i=4,nbins-3 rmax=-1.e10 do k=i-3,i+3 !Get highest point within +/- 3 bins if(ref(k).gt.rmax) then rmax=ref(k) kpk=k endif enddo sum=0. nsum=0 do k=i-3,i+3 if(abs(k-kpk).gt.1) then sum=sum+ref(k) nsum=nsum+1 endif enddo ref2(i)=sum/nsum enddo call move(ref2(4),ref(4),nbins-6) !Copy smoothed ref back into ref call pctile(ref(4),ref2,nbins-6,50,xmedian) !Get median in-band level C Fix ends of reference spectrum do i=1,3 ref(i)=ref(4) ref(nbins+1-i)=ref(nbins-3) enddo facmax=30.0/xmedian do i=1,nbins !Flatten the 2d spectrum fac=xmedian/ref(i) fac=min(fac,facmax) do j=1,jz s2(i,j)=fac*s2(i,j) enddo psa(i)=dB(psa(i)) + 25. ref(i)=dB(ref(i)) + 25. birdie(i)=db(birdie(i)) + 25. enddo 900 continue return end wsjt_9.3.r2792/fil653.f0000664000175000017500000000312711015074716012560 0ustar jtnjtn subroutine fil653(c1,n1,c2,n2) C FIR lowpass filter designed using ScopeFIR C fsample = 1378.125 Hz C Ntaps = 45 C fc = 100 Hz C fstop = 172.265625 Hz C Ripple = 0.5 dB C Stop Atten = 50 dB C fout = 172.265625 Hz C BW = 200 Hz parameter (NTAPS=45) parameter (NH=NTAPS/2) parameter (NDOWN=4) !Downsample ratio complex c1(n1) complex c2(n2) C Filter coefficients: real a(-NH:NH) data a/ + -0.000005569862,-0.002503777832,-0.004040335617,-0.005717910288, + -0.006153385485,-0.004446125293,-0.000305215272, 0.005557289511, + 0.011329120672, 0.014496551280, 0.012703875898, 0.004837591829, + -0.008060363689,-0.022474422302,-0.032964876083,-0.033575486327, + -0.019743889907, 0.009895672340, 0.052467109908, 0.101031155027, + 0.146073001698, 0.177927966814, 0.189427119395, 0.177927966814, + 0.146073001698, 0.101031155027, 0.052467109908, 0.009895672340, + -0.019743889907,-0.033575486327,-0.032964876083,-0.022474422302, + -0.008060363689, 0.004837591829, 0.012703875898, 0.014496551280, + 0.011329120672, 0.005557289511,-0.000305215272,-0.004446125293, + -0.006153385485,-0.005717910288,-0.004040335617,-0.002503777832, + -0.000005569862/ n2=(n1-NTAPS+NDOWN)/NDOWN k0=NH-NDOWN+1 C Loop over all output samples do i=1,n2 c2(i)=0. k=k0 + NDOWN*i do j=-NH,NH c2(i)=c2(i) + c1(j+k)*a(j) enddo enddo return end wsjt_9.3.r2792/extract.f0000664000175000017500000000502511461555650013227 0ustar jtnjtn subroutine extract(s3,nadd,ncount,decoded) real s3(64,63) real tmp(4032) character decoded*22 integer era(51),dat4(12),indx(64) integer mrsym(63),mr2sym(63),mrprob(63),mr2prob(63) integer system logical first common/extcom/ntdecode data first/.true./,nsec1/0/ save nfail=0 1 call demod64a(s3,nadd,mrsym,mrprob,mr2sym,mr2prob,ntest,nlow) if(ntest.lt.50 .or. nlow.gt.20) then ncount=-999 !Flag bad data go to 900 endif call chkhist(mrsym,nhist,ipk) if(nhist.ge.20) then nfail=nfail+1 call pctile(s3,tmp,4032,50,base) ! ### or, use ave from demod64a ? do j=1,63 s3(ipk,j)=base enddo go to 1 endif call graycode(mrsym,63,-1) call interleave63(mrsym,-1) call interleave63(mrprob,-1) ndec=1 nemax=30 maxe=8 xlambda=15.0 naddsynd=200 if(ntdecode.eq.48) then xlambda=12.0 naddsynd=50 endif if(ndec.eq.1) then call graycode(mr2sym,63,-1) call interleave63(mr2sym,-1) call interleave63(mr2prob,-1) nsec1=nsec1+1 call cs_lock('extract') write(22,rec=1) nsec1,xlambda,maxe,naddsynd, + mrsym,mrprob,mr2sym,mr2prob call flush(22) call cs_unlock iret=system('KVASD_g95 -q >devnull') call cs_lock('extract') if(iret.ne.0) then if(first) write(*,1000) iret 1000 format('Error in KV decoder, or no KV decoder present.'/ + 'Return code:',i8,'. Will use BM algorithm.') ndec=0 first=.false. go to 20 endif read(22,rec=2,err=20) nsec2,ncount,dat4 decoded=' ' if(ncount.ge.0) then call unpackmsg(dat4,decoded) !Unpack the user message endif 20 call cs_unlock endif if(ndec.eq.0) then call indexx(63,mrprob,indx) do i=1,nemax j=indx(i) if(mrprob(j).gt.120) then ne2=i-1 go to 2 endif era(i)=j-1 enddo ne2=nemax 2 decoded=' ' do nerase=0,ne2,2 call rs_decode(mrsym,era,nerase,dat4,ncount) if(ncount.ge.0) then call unpackmsg(dat4,decoded) go to 900 endif enddo endif 900 return end wsjt_9.3.r2792/decdiana.f900000664000175000017500000000363411554317437013464 0ustar jtnjtnsubroutine decdiana(s0,jsym,ipk,jpk,idfpk,msglen,msg,snrx,worst,avg) parameter (NSZ=646) real s0(1152,NSZ) real fs1(0:41,28) real tmp(1176) real tmp2(1176) character msg*28 character c42*42 data c42/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ /.?+-'/ nblk=24 jb=jsym fs1=0. k=0 n=0 do j=jpk,jpk+4*125,4 !Fold from s0 into fs1, modulo msglen k=k+1 km=mod(k-1,nblk)+1 if(km.gt.6) then !Use only message symbols n=n+1 m=mod(n-1,msglen)+1 iblk=(j-jpk)/(4*nblk) !iblk runs from 0 to 4 ioffset=7*iblk ii=nint(idfpk*float(j-jb/2)/float(jb)) do i=0,41 iii=i+ioffset if(iii.ge.42) iii=iii-42 i3=ipk + 2*iii + ii fs1(i,m)=fs1(i,m) + s0(i3,j) enddo endif enddo k=0 do j=1,msglen do i=0,41 k=k+1 tmp(k)=fs1(i,j) enddo enddo kz=k call pctile(tmp,tmp2,kz,47,base) fs1=fs1/base - 1.0 msg=' ' worst=9999. sum1=0. sum2=0. do m=1,msglen !Read out message contents smax1=0. do i=0,41 if(fs1(i,m).gt.smax1) then !Find highest peak smax1=fs1(i,m) ipk3=i endif enddo sum1=sum1+smax1 smax2=0. do i=0,41 if(fs1(i,m).gt.smax2 .and. i.ne.ipk3) then !Find 2nd highest peak smax2=fs1(i,m) endif enddo sum2=sum2+smax2 rr=smax1/smax2 !Reliability indicator if(rr.lt.worst) worst=rr msg(m:m)=c42(ipk3+1:ipk3+1) !Insert decoded char in msg enddo ave1=sum1/msglen !Average signal ave2=sum2/msglen !Average second-best avg=sum1/sum2 !Average reliability indicator snrx=db(ave1) - 26.7 + 1.0 !Last number is empirical return end subroutine decdiana wsjt_9.3.r2792/fil651.f0000664000175000017500000000405211015074716012554 0ustar jtnjtn subroutine fil651(d,n1,c,n2) C FIR lowpass mixing filter designed with ScopeFIR. Real in, complex out. C fsample = 5512.5 Hz C Ntaps = 31 C fc = 1000 Hz C fstop = 1378.125 Hz C Ripple = 0.5 dB C Stop Atten = 50 dB C fmix = 1378.125 Hz C fout = 2706.25 Hz parameter (NTAPS=31) parameter (NH=NTAPS/2) parameter (NDOWN=2) !Downsample ratio real d(n1) complex c(n2) complex ck(-NH:NH) data ck/ + (-0.000000073578,-0.000859869243), + ( 0.008518289457,-0.000000680308), + ( 0.000000834309, 0.011250152594), + (-0.001061705254, 0.000000072679), + ( 0.000000875897, 0.013958392128), + (-0.010047338711, 0.000000573160), + ( 0.000000770320, 0.015003869984), + (-0.025027880956, 0.000001142192), + ( 0.000000285583, 0.007151700551), + (-0.043634723888, 0.000001493512), + (-0.000000478847,-0.016788108005), + (-0.061886192046, 0.000001412144), + (-0.000001258694,-0.073548459509), + (-0.075261027462, 0.000000858668), + (-0.000001749252,-0.306638863572), + ( 0.419826269508, 0.000000000000), + (-0.000001749252, 0.306638863572), + (-0.075261027462,-0.000000858668), + (-0.000001258694, 0.073548459509), + (-0.061886192046,-0.000001412144), + (-0.000000478847, 0.016788108005), + (-0.043634723888,-0.000001493512), + ( 0.000000285583,-0.007151700551), + (-0.025027880956,-0.000001142192), + ( 0.000000770320,-0.015003869984), + (-0.010047338711,-0.000000573160), + ( 0.000000875897,-0.013958392128), + (-0.001061705254,-0.000000072679), + ( 0.000000834309,-0.011250152594), + ( 0.008518289457, 0.000000680308), + (-0.000000073578, 0.000859869243)/ n2=(n1-NTAPS+NDOWN)/NDOWN k0=NH-NDOWN+1 do i=1,n2 c(i)=0. k=k0 + NDOWN*i do j=-NH,NH c(i)=c(i) + d(j+k)*conjg(ck(j)) enddo enddo return end wsjt_9.3.r2792/int.h0000664000175000017500000000310611015074716012341 0ustar jtnjtn/* Include file to configure the RS codec for integer symbols * * Copyright 2002, Phil Karn, KA9Q * May be used under the terms of the GNU General Public License (GPL) */ #define DTYPE int /* Reed-Solomon codec control block */ struct rs { int mm; /* Bits per symbol */ int nn; /* Symbols per block (= (1<= rs->nn) { x -= rs->nn; x = (x >> rs->mm) + (x & rs->nn); } return x; } #define MODNN(x) modnn(rs,x) #define MM (rs->mm) #define NN (rs->nn) #define ALPHA_TO (rs->alpha_to) #define INDEX_OF (rs->index_of) #define GENPOLY (rs->genpoly) //#define NROOTS (rs->nroots) #define NROOTS (51) #define FCR (rs->fcr) #define PRIM (rs->prim) #define IPRIM (rs->iprim) #define PAD (rs->pad) #define A0 (NN) #define ENCODE_RS encode_rs_int #define DECODE_RS decode_rs_int #define INIT_RS init_rs_int #define FREE_RS free_rs_int void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity); int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras); void *INIT_RS(int symsize,int gfpoly,int fcr, int prim,int nroots,int pad); void FREE_RS(void *p); wsjt_9.3.r2792/gcom1.f900000664000175000017500000000631111015074716012725 0ustar jtnjtn! Variable Purpose Set in Thread !--------------------------------------------------------------------------- integer NRXMAX !Max length of Rx ring buffers integer NTXMAX !Max length of Tx waveform in samples parameter(NRXMAX=2097152) ! =2048*1024 parameter(NTXMAX=1653750) ! =150*11025 real*8 tbuf !Tsec at time of input callback SoundIn integer ntrbuf !(obsolete?) real*8 Tsec !Present time SoundIn,SoundOut real*8 rxdelay !Delay between PTT=1 and Tx audio SoundIn real*8 txdelay !Delay from end of Tx Audio and PTT=0 SoundOut real*8 samfacin !(Input sample rate)/11025 GUI real*8 samfacout !(Output sample rate)/11025 GUI real*8 txsnrdb !SNR for simulations GUI integer*2 y1 !Ring buffer for audio channel 0 SoundIn integer*2 y2 !Ring buffer for audio channel 1 SoundIn integer nmax !Actual length of Rx ring buffers GUI integer iwrite !Write pointer to Rx ring buffer SoundIn integer iread !Read pointer to Rx ring buffer GUI integer*2 iwave !Data for audio output SoundIn integer nwave !Number of samples in iwave SoundIn integer TxOK !OK to transmit? SoundIn ! NB: TxOK=1 only in SoundIn; TxOK=0 also in GUI integer Receiving !Actually receiving? SoundIn integer Transmitting !Actually transmitting? SoundOut integer TxFirst !Transmit first? GUI integer TRPeriod !Tx or Rx period in seconds GUI integer ibuf !Most recent input buffer# SoundIn integer ibuf0 !Buffer# at start of Rx sequence SoundIn real ave !(why is this here?) GUI real rms !(why is this here?) GUI integer ngo !Set to 0 to terminate audio streams GUI integer level !S-meter level, 0-100 GUI integer mute !True means "don't transmit" GUI integer newdat !New data available for waterfall? GUI integer ndsec !Dsec in units of 0.1 s GUI integer ndevin !Device# for audio input GUI integer ndevout !Device# for audio output GUI integer nx !x coordinate for waterfall pixmap GUI integer mfsample !Measured sample rate, input SoundIn integer mfsample2 !Measured sample rate, output SoundOut integer ns0 !Time at last ALL.TXT date entry Decoder character*12 devin_name,devout_name ! GUI common/gcom1/Tbuf(1024),ntrbuf(1024),Tsec,rxdelay,txdelay, & samfacin,samfacout,txsnrdb,y1(NRXMAX),y2(NRXMAX), & nmax,iwrite,iread,iwave(NTXMAX),nwave,TxOK,Receiving,Transmitting, & TxFirst,TRPeriod,ibuf,ibuf0,ave,rms,ngo,level,mute,newdat,ndsec, & ndevin,ndevout,nx,mfsample,mfsample2,ns0,devin_name,devout_name !### volatile /gcom1/ wsjt_9.3.r2792/indexx.f0000664000175000017500000000053311015074716013045 0ustar jtnjtn subroutine indexx(n,arr,indx) parameter (NMAX=3000) integer indx(n) real arr(n) real brr(NMAX) if(n.gt.NMAX) then print*,'n=',n,' too big in indexx.' stop endif do i=1,n brr(i)=arr(i) indx(i)=i enddo call ssort(brr,indx,n,2) return end wsjt_9.3.r2792/WSJT_Quick_Reference.pdf0000664000175000017500000003406210616373015015777 0ustar jtnjtn%PDF-1.4 % 112 0 obj <> endobj xref 112 11 0000000016 00000 n 0000000887 00000 n 0000001142 00000 n 0000001363 00000 n 0000001820 00000 n 0000002278 00000 n 0000002518 00000 n 0000002752 00000 n 0000002829 00000 n 0000000711 00000 n 0000000516 00000 n trailer <<81AD3C130B6BFC40B1F45DF353261601>]>> startxref 0 %%EOF 122 0 obj<>stream xb```b``zb ,  v&0la`8r;302p ~ehŠf`e`~66@lp20iF b0 endstream endobj 121 0 obj<>/Size 112/Type/XRef>>stream xbbbf`b``Ń3 endstream endobj 113 0 obj<>/Metadata 8 0 R/PieceInfo<>>>/Pages 7 0 R/PageLayout/OneColumn/StructTreeRoot 10 0 R/Type/Catalog/LastModified(D:20070503102255)/PageLabels 5 0 R>> endobj 114 0 obj<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 115 0 obj<> endobj 116 0 obj<> endobj 117 0 obj<> endobj 118 0 obj<> endobj 119 0 obj<> endobj 120 0 obj<>stream H]o6+^%hCK;: aMZm)-9&99|y4_|8'O&c`!05z}f( X[7"R? FgS 0WT\wճǷ$LW&iweK(i\ܕ]q`$ y5u-!-rwMjı!2ś%Ë6H8X ȷroKжe Jl҉?׉1OHZ5LP9u/[nEq ;hΒMU[".r {2Z()yiŽ`Nv6}L v>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 2 0 obj<>stream HW]oV}Wԗ.vZ) IdYm>`Xt;6M|Z}ę3g(oG@ݻ5 ( s6 0 | )~3`ܿqSs\<nw"0>g1\o7(]fo?7fѫPM|><F?e%9VV^P :Mphi`N&}N@iI(@kcRu )E4]M*"ZUkqAhIS$䄖9c^:¦!T,oR]'ߵ1<eu-,v.IWT<AOTGW=kh$6xeq[xv_c;߁Cu?paYeD; G;Ҕ(&gڭ{ZM"7~d2KV`Y̚r;,`;z4O=m9/ .lJHw։kmq`E~+۝KJpwz͒S>\?%-A:vaE^׮sy&m ,mShϾsiWfU{2XsUöhtu~7H<*^aG{JpEۤ]|>M1IkLUH>= IKe$e4~/>+M5s3}"J#Vu qquXS#toV9~6"9\zD\=a4 #da[02)Fud34^$ )MV2LO$)CIp9~e V.e^@K'Mӽwyu 7ؓei*K LaiLfCnutp0;29gg'vLq;_>ʵ endstream endobj 3 0 obj<>stream xoO7ƿ?A_)B"PTDċ l)ip($LJTc4oy<]"!g͆$MIPx0JQKAI!Jr1B8DθP:%q Sw`*8\ c>b Ǘ OH}1x%Kה>xd+!~Xl)Kt(Fp>cK!T .0 / Xl/.bĺ$e H>x[6n Ib–a(T%5l%\}-bnz& G&8e ^Ʀd_$X/~94'$ XE>3JDn*8$)PԒ0CST6H"҄+YT"8!aժgĽd-l[P N8iѢ $8czZ-#n޼ijXs֜v5\m[e{25gݲ}?_N!91놝J`X<'x1ALd1e4Y(Y(Y(Y(Y(Y(Y(Y(Y(Y(E(E(E(E(E(E(E(E(E(E(U4Y7YllllNߊeTN29I$4n$N(N(N2PX(, BaPX(^(Qyɓ^{eAYDAYDJJJJ))6漽v|wyf>V^5vp\8mn7_oܓ49_n's0Zŧ|Fy}i4];_6ϫU7ȣteg{ ڪ$=8~~ێaU3ө*krF+G-ݍ~ho`vowm#cѱrác=[%jgvu;Oy;ZJ6XIT&ElVE,YMFr`{MF=GH# it4 :N{nƕWSh3 .+&ΩQuXS}T5gMX?^*^^#5x0^#0xjw?moOv|].n<9iobXnwm ߶}yVX '{u~{aѭƗVzȻ-~>7j()/JDυk;W_[IUAUIUE I:=I'(%ӔtNUSTu:UNUSTu:UNUSTeSWNU֩:UY*TeSTS/e endstream endobj 4 0 obj<>stream x244P0P044T07UI(qIM/J, ,HKI-KI/-AS土_m4 cF9*V03~E9vv:% endstream endobj 5 0 obj<> endobj 6 0 obj<> endobj 7 0 obj<> endobj 8 0 obj<>stream Acrobat Distiller 7.0.5 (Windows) D:20070503142228 2007-05-03T10:22:51-04:00 Acrobat PDFMaker 7.0.5 for Word 2007-05-03T10:23:26-04:00 2007-05-03T10:23:26-04:00 uuid:8021789a-c8fc-4f20-81c8-b0e01ac5d3c0 uuid:33f956b9-e645-4051-b154-968c6dafac3d 3 application/pdf WSJT Keyboard Shortcuts jtaylor endstream endobj 9 0 obj<> endobj xref 0 112 0000000000 65535 f 0000004128 00000 n 0000004345 00000 n 0000005631 00000 n 0000007115 00000 n 0000007333 00000 n 0000007366 00000 n 0000007389 00000 n 0000007447 00000 n 0000011829 00000 n 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f trailer <> startxref 116 %%EOF wsjt_9.3.r2792/coord.f0000664000175000017500000000222711033433544012654 0ustar jtnjtn SUBROUTINE COORD(A0,B0,AP,BP,A1,B1,A2,B2) C Examples: C 1. From ha,dec to az,el: C call coord(pi,pio2-lat,0.,lat,ha,dec,az,el) C 2. From az,el to ha,dec: C call coord(pi,pio2-lat,0.,lat,az,el,ha,dec) C 3. From ra,dec to l,b C call coord(4.635594495,-0.504691042,3.355395488,0.478220215, C ra,dec,l,b) C 4. From l,b to ra,dec C call coord(1.705981071d0,-1.050357016d0,2.146800277d0, C 0.478220215d0,l,b,ra,dec) C 5. From ecliptic latitude (eb) and longitude (el) to ra, dec: C call coord(0.e0,0.e0,-pio2,pio2-23.443*pi/180,ra,dec,el,eb) SB0=sin(B0) CB0=cos(B0) SBP=sin(BP) CBP=cos(BP) SB1=sin(B1) CB1=cos(B1) SB2=SBP*SB1 + CBP*CB1*cos(AP-A1) CB2=SQRT(1.e0-SB2**2) B2=atan(SB2/CB2) SAA=sin(AP-A1)*CB1/CB2 CAA=(SB1-SB2*SBP)/(CB2*CBP) CBB=SB0/CBP SBB=sin(AP-A0)*CB0 SA2=SAA*CBB-CAA*SBB CA2=CAA*CBB+SAA*SBB TA2O2=0.0 !Shut up compiler warnings. -db IF(CA2.LE.0.e0) TA2O2=(1.e0-CA2)/SA2 IF(CA2.GT.0.e0) TA2O2=SA2/(1.e0+CA2) A2=2.e0*atan(TA2O2) IF(A2.LT.0.e0) A2=A2+6.2831853 RETURN END wsjt_9.3.r2792/WSPR_mode.pdf0000664000175000017500000113077011037457303013702 0ustar jtnjtn%PDF-1.4 % 235 0 obj <> endobj xref 235 18 0000000016 00000 n 0000001122 00000 n 0000001380 00000 n 0000001656 00000 n 0000001682 00000 n 0000001834 00000 n 0000002289 00000 n 0000002851 00000 n 0000003370 00000 n 0000003613 00000 n 0000003862 00000 n 0000003939 00000 n 0000004161 00000 n 0000007095 00000 n 0000007131 00000 n 0000009801 00000 n 0000000942 00000 n 0000000668 00000 n trailer <<45618DD5473CEC4EA96FEB1A9C587059>]>> startxref 0 %%EOF 252 0 obj<>stream xb```b`` b`a``[ ĀB@18 6GNXw`)vR(㸙?EChPHe`|@,6Oõoy'g68Ri0uT]` ,5@hE8.c`+  Cg% endstream endobj 251 0 obj<>/Size 235/Type/XRef>>stream xbbg`b``Ń3  endstream endobj 236 0 obj<>/Metadata 21 0 R/PieceInfo<>>>/Pages 20 0 R/PageLayout/OneColumn/StructTreeRoot 23 0 R/Type/Catalog/LastModified(D:20080715132757)/PageLabels 18 0 R>> endobj 237 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 238 0 obj[239 0 R] endobj 239 0 obj<>/A 250 0 R/H/I/StructParent 1/Border[0 0 0]/Type/Annot>> endobj 240 0 obj<> endobj 241 0 obj<> endobj 242 0 obj<> endobj 243 0 obj<> endobj 244 0 obj<> endobj 245 0 obj<> endobj 246 0 obj<> endobj 247 0 obj<>stream HW]wH| KB8L&I {C#5,n)ۭ/cAs&cau;z_Kϟ߼|AW.myxt'ߝ8f|Z_}W'ٖ> r[}x ) '0aS%,޴!AV蓙6%$Nw,*a^I1ԙSf c^PD g4`'93J;IoVgƢƈZ(UWaMj'&Aq;=C u|Ӂi=5s'0} K%$DJq8,Rf&CoxȿZbsEΧ^SwL {![ @ԙY a$W-4Z׹ \\`WrYYz׷r,]d=|WG-rjXRb#Eڗ9-#Qo7X,˭sd`>ul<Ÿ.M9Rn*V_ie zN hDBSQ ̫(Nr['r\atrO ):y\bL&e `;E:2j&eℹSqEvl Ǭp ՘ %oebmԩ2*tU ,d?pBmF3gQW(MPPwM Xq.xE l`[V>&yYfkކ& 0}`ӭ0baU# POϕuz;Ԣ꾵4meJuӀvh"֔j(F;C/ea)ȳ R&^Cz=UB5f6&زK4{WvM0AzW-fqz#߈ޥ5GYNE;U59.m-tÛhCraYG_,]%0WejЭ5"q;+m Kԍ?]ƎPmcRUER7^{;?sO\$"'ώ6<{U;2A|N u.+Kfwr>גPΫ&ƊH,Iͭ2I1&\\n"+sHo&>]’,:^)<]ݦ٬!/GJ2l| ]h}g6J ^Ћ!߯Fdn;0_?֘L3RGnIah |WC#f8h_"U  Ȏq: ޣʨ(o Y |D;wR4J>iFۦLMܬ R)0Jɨ0X0el v"x =:#5=lvE`S$v{(eqύF+kΚЄr.RfVz@og/ILO52 EI:#s` 41t'f*!YNkG 0lku]x4H&<#{?#Ł ԨKuasHbkYBz 2ɩH3kα5{^eeV~ތCX= ঩+LwtjP[.hnQ&签_jvjưؚud$*CsgӾ_=թ'[ \ YoJ|N|UYXzs8fN;6g/yAEM[şJ>[yt2ZnX<RJL༝==<& {wYM7_,`e8ܺt׭43Rg1uE Alv *\L8  7>D&Z1KS $`;;@VP;Z,\7EϋChp/ 3fx̫?U] !"ba?f 7|g vKm%I)ZMVz(Iӄf8.эFFjn𛿦F&\T:-zt'zd/?@JuC Ԉs EC,JSb6~ 0= endstream endobj 248 0 obj[/ICCBased 249 0 R] endobj 249 0 obj<>stream HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 N')].uJr  wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 250 0 obj<> endobj 1 0 obj<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/ExtGState<>>>/Type/Page>> endobj 2 0 obj<>stream HW]wF}WԣZBʎO>dЈh#$&V7Hc/F[Un~7on>}@} ܤGs=ϛP@J5 ?W5 DO(nQ|qaPSQHӴɒRԬVؘl>Fl\L8bU\nD~!?vhj˛ OF;`+Bcj\VVT&4IM~'x$`='o5\zAZZ9TKC滿l4l293آv(n|eU؊몦k6i,É;ǭe(lh=:j8/eH vrP'DV);-/b0r 7bD`\%5l<kN_B~t9+9{mvbnlR1_|$>Xyf+Q-dpcD;dO|7&I2 )L\Oր]{Nύ `D_ @)x п 4}wj:|ݧ_1%"h!dlꪩ̡im5F]5Fr X(FY˼̊-($5 Hujnr8qG5NMk{(c#Ԣldŧ!Ct'7rysycmf=fa΁ش-R]ѥz-(DdUzĝ?ELm=`2um!EqOJ!zjzFt8pnDgG|q͏wd4'gGMs;*'>m!@:}֛8\ AAѿb3@̒^FONil)w_>jXW[qُK ٴܵrL)b mt/ֵ0{JK8<1à#\Dk8t̀$nUh- b ˄.ajl|Pm?%۵V^VwMEwD)#=;A}0 ^p<ϛ.e9[I$5wtPe/tyMFq I7valٓYaMm*A,[v 7 kH ͦ1Oعjr6nl[0Yt:Lz` endstream endobj 3 0 obj<>stream H{PT2(Sd4UQ$R1DeXBX%H}hԐ0:i&3I:թ㘶SG`S2ò6{]{]E]#g.?ٹJ #KIQ_PEl 03H u8,2zlEE : \(R;`~mϛ/,kwtwvDvM 7@16>g_x\cepݓL W@E '7̫_z \p @ _!\s-E!\ j('ϛ@e$ - nsWS5w P}, 8%?@ =3qiE-_y% ɸ_(=o3T2(ۂ EAD}(gE8+V0 .Gd@ )Z &P&S!HԀx%(.@"ߢ5[`[ۏb]K6 x?B33asrB 3D@S=c<69l bhե o1:@E!gъhy7y5!qlU#CK a9I!Ӡ~]`?!-nm[uZ*Va b{E~'L/+<& ` ;Z{9;wpoxiуMZ@̰UWu[tqQZzt&3|Hv=5D^LP &0x q `$g%=Gߘ0AUphr힭dq5#ؕ 6=œ;3;[{z{$O@aVCͻЀFz4j .S˩ʭz>Ľ5y x6qHQmBj@.h&+BkWv]`AlZ#4@ 3 $p8Fm:_eB \Զpѩ ýɋzߟb7drk} c>/l!쮋tqKgƎI\??6w}@+9R|c{fS#iTL-z%j9\F,BTh5HRʟpzkHl4}Ii4Zbl 71u. H]BCNn~GkVdifb24(5=Bj_Ā m ?]8#b >`œ9=uU n60(}`7mj ӹ;51Mg7pk&@@ B`?Si/l`2v1-t6:NEERնՕTp9ZZJQUźE& 4C]&"  -El_rhFGʪ߿"ob qHs45݆Z2Qme4Oac`-ew! q7weW+l|/@ <)&{FS[f*n"Th ZVA/)*rkP?& z6k7*Qnl21ХԽLD+^:^A'#w?@YPIС4=^$:0 l.38ï$k/ b=MU>?əWkhq6ĕ4Ɂ qy,,TI) $@R(op~ua{gT]=Ҡm%D (d2;{ofB,=2s~r?=4׎O·^/!WUr>hf2'Li pf,Lf7͘, E[kRhhh K9K~5L='?Gutkp~VSsKq^Wv00I} &{ Zhjj2U]*3VJ^W%JQ%qb^W<| |l2LG:2Mo򇑜H֐- ؛W@+NNh(oez)ZA-Yd`3Wu3.4G,wS"pGpx3iaOCu'cvbbaJl&!4i0 M!44444?9\%ӥ2"7xR3.:G# 8UUw]yUj4C!2=X^"z @RIz ࣩ<[xwWM0$\+ B?CȘe` ]mT`-jkO4X 3y;zP"+S 5Ufn&4>: Oz{P4Rw>.~ og~Қ|tד %!0LV"ނF2-Dd]F>%CFHe!a |^0#a  hktqbN_ͩ _N1, |AY( +|} ZLtD'nֶ Z­༇ڣqB'f< n#&&ahDRX.+MPFh BG=58wH \I. )O\0=F8~(/[L驖<#+;pWIJg4~eڄoIk <͓3} 2[4 _f2V؋&za_wt-嘎@\hhhhh$цVb #:&p=<8^;RA8al!Jw8.l£&<L8;;$Kd`F2+ ZUo|DG5! $c/s!q`2N@"d ؋f%F ۗNJHT aC٤BU. uݽuNg7 r$x']s9FO/.;\c\zZlwEf ?Ð8||Q61rz_uq]U*J"!TB,Y42^gр5d8LrjP// H}Cy`c) -i i]gs]gbǙ5>>|>{#9LB"Hj?Y;"<8нȭ<:pW^''~aμ~;W{k> ߩ;N]xzJ$'H$(GIG>ӏn?C/h?rg? lr_G_~Eg!E&]w~cޤLCq0 r6_%) J.QWNR==}߽Eg @/D0q+LI$+1Q_Wo|;|g% d5oAa!&   1AAd  $CL@A&b 0AI  L2`[\s׶|wD=+_}턷jǪk,v}Y=VC]Ax20XFJ82o@9Y>b B#1~_ݥ.+؝8` ֻ}nvDDczp 6UAx`8&":Ѓҗ[مZ~vܹ;Wss}*j|A?CqsG p,0Q zo'o/7(7'fnWDږ :SO?i@WUA`L`\ª[>hߪ#,51]مr)5؅ v `\L`PD 5l?.j/Xdz½8+/ -Q\= ѽ* <(2Fa'B[WG~ڱv2N? {ڕs9†=aWd vOvD O:<8uǽfO2Y0:UA +UA SAA8Aa!&   1AAd  $CL@A&b 0L&AAx=,8 F" LsI;έfS%kn*{i} z!ϭYhԸ7/j斬+K_1'l_y1ط-Љaz- `ALĔ5_b A5,Pim/^ t*)2Z= a3^0#ګ+xM2,:0 Bock\% 3x%[&4mS2+Y-xCcȄ>iП<S PހcrBLFF9h~,@yr<㾌격uR.hfKLGh{ Ic €˝yw)f$:0OemH- =h42hC ,MFHГY b#,g̼ ozjUzKb|i(ebOBL0BׇwWׄ%!ݲg64, 0`@// _O }0 {1?fxcF+>)JFVBa޾\W̚Up^hEJrF,0l%>eG˟M1 N@JCT,cV2{/jHP,Xy⦭4$|lLҲҶo崧i3p,&lAjq3L^gJ*{V|7Nݨ46L7~+pXɻH!$Y`mT.*4-c/(Im&On)Y! <+94|}}ŏv KFrNWYeHU 0JOoҙN5pдgpUfTb/7KiHS$1\ GFv)Џva`7#]gّߔ^11T-V/jGrEr-cbya=Cb3҆)֌ݡQ/^.oZ9m+ :<}1I(7!ςzȟyFI3񆒷3SaJ)RA#{녘q-ڋ 4,6mB$r_ uz9͢tyy,+ed"5dBKbÄ Du KG+cV*#/ o.KI9 ɍ9{2T~jx2៲_vcW32Wb(0AA@DHĔΤ|"".((}xDŽ" #}Zk$Mlc0R ;:wg4EX< &mP_`UYסCv$ ,vA6rR7Ua7DtEp*'v/n=!J6{PT# F@55Et ҺZ_k=Ay rP4*Q'¼j-HܮsAm;0N.Gc2[i=WW-`7RE]`0!ؙ^& Qկ,! M4BG.Isw!)@2HBl[ !(>W+֗TJ<򧉆B%*!55Z#ZU^伶X&G ^)iWhF(3tfGQP]lM FnV7Ipgi65!]T%}tjh2Ch@e>ۥ F*%` 2 > [) O8^ sv7/ #/sw$P)7h9C079 䪏 gMTkRT"DnGpTɵe;Z.P%_][)4̕ge긭Oc R>uZ Mu0J}9-$'Q2ÉJ4#y`m{Eo $*fS1hbAn`o{[[Ebع|(irq]CV䦮 [͚jbLcU,<ggA? OkoBfp4X qn#].nb})%P<|^R -*!UF) ԏ-~7/[@eٽw73 3R\S ա uֹՠ#'dG uuh XNs+ :6e@ժnhdUF11A$z `,FY Q [&-L_Y8}|χִ[f mL|t¤2`J'B8_4Tb;93:𿜿/i\C! 5,"׷NK޻fr\2# # +"^A%(7"ؚ"Rm>AB@ &+?^'/:ʵaU8'Yɫ*er>ݻ5y:gZ/X%WSU:-M!)Sp2j`{UQYܴ<- ӕdrG\3g .7gL(f ɷ2`5%{ n fβ]PbL=2pl.dDMEŪ пLoZؒ1$/&+bg?_ |l1}pCH$M$4p3#> bh } (#`}j((+y`"È0zN{ Š o^&oQDQ85"=/]3%A%c쐭5-AbKEV5Ρ?wve9sh6<){EAcr]Y`::\e+Z yEQ X+c Aϊ y@ݯn]65*PALN4EvO.Ei9EIճ"LVG4gL.l-idVաTmVVaj|5Uwݩ_ 0+{_&?g䅔ͧbq{r)yOk|b'@Q|zq%Um[ࢋ~IQ}C|*OnC+h?OM BZV5Hgӡl~o9f֠:(sT5 u=peо,> ͵&`ޢq*?&Ƴ1E >P#rL$c|,Ktʬ 5 @4N_ͤo69}l: (HqPVkrs\;AM܂$@rwlXtB8t5,Wޛݲbz%vhB^=q:ҿiomH/%RNM,髤%]ppa"eO^3A׷\'WT:PڨֺW2$pdEZ f"uwJ>ٞ"|(u'6 HYݝNjLmǓ;wn!W]° w`ȯ@H0À4tB DΘa:dѣ2$yroR(>3%;4TH0~>P#aM.e##H7qbѳX#U=JoLaR".]kfZ¬;,uU9 o9l|/Bc2o,uM!iscs߰gVvȌ;/]SMqF`G;_&z}=B7EޔL)b f"0,72C Є]rI V۽9W߂/u4:hK(G"P *J`2lFʸh$JK.|'LM$*Mgud% n PtЙ-%o)=}U*I{BBkYIiv .}YIIjPrXsU,znH^m(v~jv)M0B\W 2IYG-ow~`MLN'@ ѳLB,罤钃d 'h6@P!gIV$DuXS:5@J@Ml~!Mۜ\_|?jwҸ] >+%2% Y{BQ2'@rD-(]UhEQ[k(&0=( U]hr{iK42$4Ƒ=u FLKmf_AՁpلִH'BiUNJ DCVs-ɋ/T D8LMEq54M;$Z FH[L⥹K\P&ӷȡꮍ4GiΘcIBIB|iW}rB* SyT46B /iry6kƢɷHN%-avqRSɛ CZ.W Z4?phfVON2J!g'sW$Qe<َڥ: \!t DqHvr#a̟veg¹+K_#Szū/DJoP<"< A,RH"X]4 tEU%8ɺ+0m2Ү,"8/F*B8) / ?n#?B I RZ:o WuqxOז #﾿@ Цo)W rc^ !חQJ?9uשhsw$32Vdx c5zѥ6V0!JF/(\z۷B >$w٬fN2l>rr΍lhT!r)}V!-O*l0Yshq&DGl^^F: Й.e2/Ɍ6dF #|FC8;g&ԲٲJ l[LVq.fWښC^5b ZwF^(U0`;hei 3iQ)%$e؅ae^5# k:HXEnwTʢѨk}ڒGXCN]B? lw)@ꋽG۟[LHa욂։'rvtE S+zxY*]T&=BVP/ ~ МzKbs-*WaVS]0Svv@ 鬒[/l|0ou#`.:GgLizaLjz h7ពH.6Єgஏ.m><9{$XKYb96eu,n0.!n3;Q TCyS4MfW., {#'m#5SmG˥dD"ZEWv Ԕ>A cs:dCe0HQmfOx:_l ^iMU4Ԝd?LD+gꎲRgOm/J67mȩ hRU ^E2:8t!9xBKk"zCup/tI0$ɶ֩sMA9 3Qk 0GGPG#p/# .@"fa@ !!"Ӵiew4R@+o6:~/! #9uTxeA^zzbh\9ќ-f";`aVgQ9BdQY6Bt^:z 8OCq׻g">9&h_8" `H@4W *cx%Pq>tVN+9i1tj׋ h}-Mx(* EeixRԓ.*[v+ClSfxd#vwz+,ʪ ߴ/W)+A͕6ͭP uU,rq,"K2:N**rkEgi ՠӛ6CV`&PLAl(:DM 0Ih1em$yy4~.%@J\G8\zaR` ]@Q PXF@=pj-V>4@%@mV5ք16ICՉ1u! skSUU\cdWuӝ݃mWxл?"׾)P *WvoKWF& Hu3xCZ ϷMzJewZ.9 ׋,< iT;W28.EYqT_PoKL\ ,,:}:p^~:[PwU!zujrסɃGTYg|vF {__aR[h U2ךďM6<(' nKSHmmըijjVC'@pd ePҧǠrh1P*3\Sf}4tL R{Dzٚ тڂ$!A Mm84-be or]d|$N58ّYt?->]}%OQ<)OQ}(ʘ£D|vPs2鯽QL~+2Eg0F$@WI\.n&AOkW0/{tNfO eqA1GU| a45'3P&^"L#fr̗q/=Pux7M~b8 )!х׃J¾qFToۦu%2C` &ү䟨4YnUwX*)t~˸ 9Z՚,qd.LhdXyJfrҨ:Yj :DNaP1ԡԮlr@q=ʵ\\.rŻŅw[9J5᰺jE%)E5AN]+! q zmа_YT.RwэGjF XM.r] 'LZ i{5Zm`_'"T*oGj>F #d`_oı]mA*0SIi_髷XjawI_׃QgAL#a/~vbcg^Yj6U֣OAϢt쫃Z vt=0-c1 Xῠf"IZ_Zp ׇBl`W[`l eMևd1YP -SkL̬`zuD+bnC}PEsץa~>hW&F6 M :@FHhHj0{J1\&H*{1 JC޶8Zf6ՎKCi6.S-n?sBOw~X\.?!l`,Y+wրpBM9#BC C f="3ԻJKx '#_)P]oiW䭱A㕛OJ T$NAzb1v nM~#;eh6g}%PG*3vƩP R@8KkP,@7_xmC&{ǏΠ1Ү (ʺ{_2JNjd-Vc5fVAg<€vgnhI003,"oA9/ 5¿Ziv֠¦93&pq^^ Zp(@"!Qx9s6“k ڮ<ń16f DeNHnP&Z7.8ҿRn_ rz]/j${ E83՚SI#0" hjrKK~k̢4Y+$ƈfP2tEv5G''⣿ ==V8^RLȄBNq+<6V:Zs)u{,tS,AE>a'흔?AzEHf@OW^A\)|PZvF3ť;J}׵;e d^umy[) s3R?x ǕPς ᳱq859ƿ(Զbm#3RV˭#2*EuCApM0/x/JdZ\)]1Pߴ5XU'T\Ea'Q!hzuMR[STP:H qě Dfu\%M J!O\8T#|Mxj@I u0h}ի qRDThPGj!ÆzOADebBq0;V-;Slm$ۯൡ=5uK8 nh 6moJ“nF< ='`- hp ۆX5kQ$qKbZ>HZ8尴p2e6%UKceUb(iS*tE&[l6yI[aO%/h⟛Dhʘ:GUX|GRgJ")rwy[őJ$Қ'yRJ2?_(O2 ǠEPѭ^  m֪Tm~.A?2Bd^Tx:A,i8 ]^M&rqTX"5o"%i7iIGEEƙqboC ~yy;:=63널BHN efhzHkD[цt A6mm/=^\5eBG' نEP8#6xzuZ'D?JHfEZͻ+ 7nctEA gҩ M,CWAL޲HʓFx'asL[7c7@; e."HYY+o=ɿ Fдipn XVS (2Y>p^Q[KOeL=O^xgZA*\*,sM5B?NQx+G<7)Ya5r9S>#hd:hJ |A8 jBEY4̆ *[[E7EqkEx)^^]ݽ߬Cu=;5tBO' [DmrDBHqOUkZ;FИ?u`ZZSRq=齔  +zXb / rS?b.3j1b S'*&+$!8׋=N7N{=.&hz]7kLg?d^[#hjAJMX'q`Fh+ ~.MijhԺ-zLa$@! 6 "֣]@UI4 Dܜ/w"z誋$I;xBVB0b\ޱY-N=zjîG/"yu@Θ z>0lϚqgxx^p[!8??{I$K1'*&W1;@FKm0@EnjU!@yN.Wꔶף-'W >]\Fc@T2D% V~}C+/UnoӤhNh#䃳ԦT'W^ŰE|J#>4MϿ)J%l Jx*h^`wJ]u"I?S]ژnf 7-ճ̛I@82hpmA4͝%'@Lvi?Id;xhtLC%ɖ"‚ >qh&!U@)ی'_r8\3GC95.}~b:qxx{BwR ;KKA}RMjtK3X<#$sd=U=~ˀI3M|u:m9E7o{O-6s6r5ݻm4d H Ҡ~AD7Z㓫;8$]֬w>sc@z@>#ޱq|dx>hO2?SH{:/74T zuu1y*Bc t[* ~"lu< li~e##, ]agVzQN%AԆoä]AhXxgoWO nU2^e`zj/4'_J$,^7pvߦIiuvf>c3?|^˝HFP0ɥ#s" NEXov,({F`` Vrt圆-:y yX&8LYik_;9J;%;BM>s0eLyՎ߬+93oeR =;gG^Zх取'ŝ OA#7`0j9)օc3WN_)C+&z{Dk!"T@cBlD+ ;lo1rղ2) ]uV?S?IRӁAΣ'|@= ܱ9%g5菒@<~daHǍWD/>H% *hEW'`ށ%ePо^FҤf3Լ]UA ;+kMI#/;=NjUo.\|aU)Cs dhK4{kY vbcwj&5nji |ldcV Ƨ4-l1ug;x1SEߺ6("h.m̟Iҭl$M|Lm]5c<r4!ZbmSEO{75Q zC XʂO8tz/hZq.ΚȜ\9o2 {w7) $^>{g|* @O'Fnc?]I } 䬟HYeUG \>%#ɲ;SSº/tL*k*NWjR6kTo.Rrv29^R@/|1 `eq֣Kpem0_E12mmPnW= M@{78WU)tz/"(oCͪ@/N;e<UOsRNKtXp04&",_?x&v;C)'4P$q_.<2m"=$uv E ݙpHjyL: wwLb] `/=ڸgE*h:I%lcT(;vYܺ¸ UVlP`(!, rM͘LɌtzMv~,y@^ OwUuӓ a Tsw4E|chyDq"K޼., DMX9nc1hEg0~?y}U6xqh!lK}$?aVg^.Rm4Yjxrֹ 5]{Lf A[\x|7L\s/0kD7#ƹ@[Bo$@!`6E(u P:"<Uja#$8`Lł& x1Sg5+Y)|b}_KRcm*I}(Oڰ*y/0k,F+(ab8kG"F9G]&e>-Csd@k<]?[Z FdSd`>|ptM8,5 }vsueHdD~]\`'SQj_; QP5`$= )yiML!y@#3{#,4)(3AxKB:񞒀|[-w_Ok}=\{^Õdlo&[4I?[]_~w@̩Y>kAZQp)q_^@C5?U/h+PTG{/"zE95FvQxV]3x%_ &k)pҘhS?NYGQ*Pw<{zPK_9x7mB\aP>tF.u[g]j(>aLh>= kn,|(R Mp oyk0bx~gGKEh$ GIimoڂ{+*c%ZzO8Ѻj1i޾b9ya7Jy?  g~]!' #r cp4e#vTQIqVڐ*qr`-=(X|8OQ߁=yԁ(NxL)AVvu-@}~gH&-@ˌ<C>ҲIcQcM:Ldok;6Jr+O:e獠|MWE:1^ϙٿ^课ێ߽i^`<ɓcH7kLeg;eCo' R!(*4[?hjZ.~e`@iN=ZpC1hJ8/ƯZxqM/q #Z^Vnp a_P0/}*P{h:Csw8䪫_58V H$bu8 =!,**ZcvœPѲBMKC8κW7nU)D9 "L/rdk~6NhBad39UU V#uƜ,% %t}#k,{}̽?=gh]%EPN/>p1YYkLvޅ/V8f[;8rInߤŮ3&;t%> z'W!Κf,cEQ*~6'mr`y9מ 3`cj/!E:L6Si᱓^$ijťauO|]fZ])+dzy?Iݵ\$@ x}_P%(j~uUIFꑛD5w0tn>/px9k, [±yS B1w8`4wE֩i%?IiaIM1FPpmC15jS8{M7c >njEo'^Ib&y7Q_z3hdm^/I|7 `muo+ğ#}迦Daml]ouaa$.].siU%YM1)%ɟ9^2@M_cb(gAtlMm^2 Kȴq_b+ ڈ*E&Eu)(ʁ= $ i[ z!ZcJu%/`g3LJ(ppt %Y-k~oԼI_X~98tɏáLZGQ} 9Y3 (?ujMpgϾ|zѿ`T[V/b(!Y]OgɹERx g@}i So*Sƾ -*5ABoZ!4 ~ҕm?yKW(UQ=W9s_P*y`EA0j'6kfeb7Ah6wV#`UMrIa8rK 4q/"Y%JXK n k GN6liBژ='TiIMj$  "x午 "^IEA|`d8,b:sW-/>{k lWj`v:s҇ blˈjrˉ d8 )C8ۖ E֙9HQU+)C}Cb+ڨ̋6(QbHM+Bgu@:(Hb A]8 ,C=O,B/W%<իWEZ )ꎘ\ VtL /T݅P0ߧfp;T{wUXwmxAEUH^X5D.pw/CTF_=@ p@H`GpM T4 ն BhOuN]gڞZfhs}4S@8ԍdQ=ΐFILdT^|)?jvgVO#EWHE=5%٣AUlӿDM)E t j4rHVs@SV6(i7,Ρ`1A_p hJ MvF;RY;@s0-vò FD IX~5h~mT7]yS93\T' Ԥvb|a@:C:( e![t 0jA`:q,e*jPj ')H\EYz!}GڽGߟa+Ki֠?s{FXڭ<ܓ@%@W/ mxf;9ZRA6㒱& Jeq wBc<֘`Q_Ch4_%1yV:*[G3vl>/i Jk~V0kwvD1M9' S{1A kJd-]nڦZvwW8vϰŮkyVPʦ_S;y^6^$逫\cU>00Gj5tfkZ-Nk)R190ZNo2[4~m%p+>7A )]v!t8]ߩGTi^ W޹ +Rby Ys=[rjY1Rwkޝu/zD ~X4㥏P/CbO+鴰/Fx#L `8$P}չ,lv4c1zcWV'B@zQ~ДT@ѳA7wҮl:)n`)O`8Y1 eMJJ,NZYS*拸SR7x=nOo]N̑?MRR F.+%={ =,_ 94Mv|̣?[q{эJdAR9W4>PQe}vKW"6KG.CT?Ygh\#WuЮ De8J~\$ Գj̙K]0]XRZ2q6=Ɏָv2FjjeEҾ zZM`o)$"Э]Ɣv 8W j\_M&\zZrn¯E46JKHhE<wn8֫4}n+[ J@m+} Wp[BثJ+SW.W/L_]^ .78l'͑~xj+e\h"KJ!=ĥWfѿF: r1'i!_Bsڥ9"ɀô%?;AH|gn9]K-H$hc&jeQ6gut:ghTr+/1.O4XGcg V5A+әK, h537' )\ f3p^[5ǕY<kK)JEo| S[)]y@)GH'(<[h)/'=]^63nM/U6*QnhӂH ߸b5&qn$Ek/ɮ*?edRX))yPR)xii;=fbt&tڙ&C 4!`ƽ 7nڅ+rasέ3kG=sշPAm-ZSd|fҡS%H$>XZjG+Z<ZKaѯ9M8 u'ηS<5(BP#u翳uhԢ`%$J9ueA`q2dž  !h&daK a䃬58?8wGalAKT&):gMֶoxáF=#W9\ CRЉNnL;\JqWg@ rk?,>>^?s(r05>Y_:{j;,{,tXi SS !!UM^{W7" eqk7?UtI/[ I=H?-^x ^ 4ڣ>X\BH$R!! ou^50,C6(:JPؔl[P?l!|ơ,to-W('H"Wk0=oJwot 冮Z_E넧)Ҵ T34%чMIn&1)ԿU<M.j'qòkSNۅ(Kp/:EdGL@Ǫ߾XH.azHKHрrg9G ÝئJm.F^F'MFQ9:?`F&v9ڳlű,̣d4Mt!U՜~ 0PzxӀgIք,^%0- pe! <+8N25߰.6-қ$Kg_yŁA͌'QZej< R#^gA2@;zKu@Wi/lLCUts2'vCƖ YS!#|FukۆL8y?@ML`BNQۓwaW:fpm Κ9+|[O6&@BVUQT._Y?X"48Bp]7߯?,dv)_qMLmo%>,^ͽc6MgRSzZ?Ni /ljF薰ex"0Nѯ C뱅aڄ͢/ °37V@ lB zCW6gKoIr`nLp);ֆ&恏;B$ӯP^ Hφݏ; ԸvoubqɸQ:ePY!:ڣC:9/4ٽ_~7؝b́ $O.'Sډ4gր$P.<ϙZDH r>;w4IqnL(ӠY(d E葽ZUq493svpYRjEݼ,,E:b`4 v`A= 5Viy`^.EpMJ"-gʨ^#cVр%O <{~WhVQ|lzjL|`)Kjg:N4o g`yExɇmM ˙ Λ[9C$ lh/&P5_zh~ Ĝ{dG_ьOc'Ϝoq{ьP.Be0|;W.%-[E;M 9Pd5eXwh ayU:|csHxje<_p©&{ ]4)W.i Qem˘:0PR.d2؋hҵi2NLG Bq(Eu9nKm2Z!4=Gzi -d$pimp$їZx꽯4=l-b^.^ eG 2ѠlZȽozѠN =;&tޮX Hz{hyB8 ~pqlf4 zB 8U&50["14JqgkQXֶ 8#&֫{hyUl6E^VhvZE@4J2dP%ҵ^|5EGVG$aK_wxhl:gy:k~i &',yfi9o=F79Z2.4Aup֒{9UL !K(S2u=j9&z 4n8?[u!jѽjd2W+Ld /[AQu]um]REGtӎ+%0VF Vj:^'ǝ/DM,+ 1] MП`$P=::0"V*M&$2-Z(Uڤ$S8<2>,B!PZ)dtsN[˕ Ճ&X&azQ)k /[dA 4M&Gq+Gf@~~r~H+a;F0TWݺu9gwqz3$L  vnҝDB#A_= ;SW.o Daq},fRO% pUl'c%6LkNJ3a n,h爲jc6=WS?)]CGQhu#Q,7_;{&|ɋ<*^ܐMrFꭂ0*J UNd k᠝)^:&pX3t7{Ѕ;c**u\fcAI p? ;/cސ8QPՖu~p??rod[ǟ8ϋyq*z8A4QU/Q< *&,CptgJ^TfW1үKUeլbfuԿbU'o:ͯ00>}ei;-ZV\S, /67N.oi@}}A7A:QdFhA肬~!m40v| -辳Ui8ٵj tUfi w6t Z P\0u#9;kh+E Ih קRt$[#˯\p/]@Fq\]~ՍvMcleY<8 MrF <-$E)ɶ5%9O2h{|d]$r( Elb؎ 8=^[*rfGAc]q,a|=<^ $70,ŃɘKԶ,n,UQˊ68YX~G쪋 ctHU0pAMX;h8\q]D>͓cTm|4ǃ*331*~xuނqg{UNa8;<۔\er䐎 ^C9K }.%'UN ˊН.9 jǪ9Q3;yq5$ye2ϿwyQF_ %&Q.wojҋrƥdR۽}NK+f/Y3%"0;}|gh4fP)=?vt#>yPH3م%b^wU ]ʣڝi>|sN\o d}~)+,OeTb}[?ߞ<|3yg>8 y 8ݎr% ' ̐̋jGSAc*ήGB֖%ŧFkLn: DXPRF0c W%ec֐ b֢-chrXer2|:#(,0{)UVGeat.s\,ށ) ~>a/1&8!cd*1b7_/n)'~bi)/J4XuoUvSbq/سkk̝ ƭደ4 8p)ivGmlV.½Oirpv #:w}~J'TuS>(±M]/`P"}`GͰqY-.w`Z 椗xTGtMTC^/La ]1lΫ`iuE-tc_-ҏfvU!vRՑ41ӥi/.bUH u߇8}h +eU7tկ=5CZ; @(EJ'16\yIqdR^9J+sey*[W#J%3*{ωVY7tY)H;;ɡ0|ۡ<5S)CguQ؎.2!x{$r?>L'-pwrʞZH6.dZ]lϫwNgT!v25(n ëe5%/FI~S=-r ҫb`)s-$VԔ(EQf$ kQHήmW(l" l~OJ2I[[eViBY]@8Ջ+b$^qJ|*#]ueO(C>d\!لHҏCy8"yyiMX_B؏b2;{7wZq~N M L> ݍ ̬{6 oQ:D"ѵ,{YЋ!ĩyGh⴯H$C([O D17̊0CH hޣOƋi ~ veU_S<i}#F⨽0'3y>3/'ʓ>BUm0+𜅟jBE8 ͆sЅ[On9#99b^IQqBS/])8'Ps?C'@%P˜nKh$,dbU>ON`6ZIRu4T</UǍ$278`0"!xx8;ٝ2m>>Jj{2a/rm84|`as.XՎyԡ7hs;G;A9KIֺƘkM%" A֠UM@vq ::psT (fdۘ <j`qù(6Sn!Pl y|Ά= %̵t*Ą] iH.x}v<)WxiQCUbڝ==윚b@Tړz-m۠0ݕ$\j&GoBteѴC:fa׋5_Sf ʼnZ]̨E9 wv;$xz̫t:6EoVZ@D# oy^^2J 쪯mZ] zyr[!+E1ypbk7yy5Cѻ\py}Wwg%0\}Ø5(ϵ9`c;]V6"<%1Bcͣ6nCKH]l8= L2y_48H.vGftpHֻ"܍Mgf.W`` "BhqxzppH,MiSz"h^VSg+6̓!PgF5]$_S+*mg!(Wf5xsl#B/Pg|[$J9^|k-]$vI', 21T%u!JN^~jͣwgU(F]}dtʜqz၆j!>dH.!TJ#COuYT_|"y"$42;[O0PPڲy>[Ig՛  Q`l U6U|0/*;^8Zg>Fѿ #%p}~fі<8G|"qF@ V푒@ K6K+C -kBҞ%]Ʌ^\Op?>:ǤsWu;SD5~~Qr 0Hz] q2%pM$`$'8x稙Ud*o!k’EMy4-Cm#ƨ(P{ymjf.+HLnZgeBKfqƇCsB1V!? g5}oe6a׉\l}(s9'YzvrKVlINFܟr#zИ%CCku^C1@Z@_,Dmh_m4aJj6 &/.7ׯV>%Sq(BĹw^8tN^U)0>@eO<Pk.3SJ719Կ4E ~MBsA2g]Czwvyqt- FkޚצY1Q6ɥ ( K1#Va-u=[ב^ds%ȏ66!9@i0GNt/vfB aC KP<&Bގ^h(3ž1-əRd!*)8%37ABh>p(9;byq- u@.}Fl). ɻwq+%]oI Do+ 8YB:]ۈiC@ΑjoRnZ:Wթxŵws%Mr!/ ֎C'_oT*F d!.E~KV tMd2`}颚 ņ8+E vMDl~RNCٷQ0@+ia6_X\OJsP_(*Ux=ZG3f*xTq־;{ a[Za-Cд1R ҿ C@{hwHnUcXG˕m P$KM^)fyļYJ@Nx3#ZbgyӢ Lߑg.YGtCJ7JxN`"ZH@ CJʓY 4&'ǚ&'%O(/Ʋ :^!S]Yd佼_iS]y:W=X , (<_+vP\wsYn\{&P UhIaH]. djnqEjB~H}z 2U&=eEE[k!*9%췄hwUAgti]Y0B%Ք)LGVOrzQ?5  (ʰT gQ/QA9 :k`$!f؇H`j>kg'?SNkFgKaTk7#Tb 5?EP$e;l\E+<)dTh"!H}^25 nO21sŹ][zGѧRoEExvTHI0~y0BS[zMP05`)iM1om!甼 HcQ @98]fy WEQHT?/OOW>z^Ȫ8^ h4  EaQXzgcL &!ɚ{">gſdasw3c>Hfhs= >}/7ݼu i8'%GӿYcF X>dBqFeyu{k/^Q4Tnk>M} 1",$Πը_D60 dA+Cu6,?X'=S''S9YJsmB?wUx"FD*A*&ŇB!_mv{҆)#ـ>8NO(kQ)?w~Tx < _[-[C6EEW[і.^~cN PG_ӓ\y,hm@?_POb{Pb'R-QT.ilW`U}.CM5vQ.EhfEr]'?>!UM""'ҙխ`M`J،go͠0uw'n'~DvǓtdN.Q>d3狐Fyyu#'̕JGClC1O -$"~&taP+rV>D7d-ȏ")Y*qޮQu}m;OS ?_ O7뻪fa*8)wu𷧛Zz>P4*! 1,k4~!U`Qqf,Ug* @l8>Oop:cՐz-̹<%a l`$Oo᧯D?kn#&g.m[>Mrd_ku8y軰FwA1 ʦưuMi}F吲`]M0ʎԊ?3Q}(m94%Wtj0>B$~lj0ʰˮ@6;ūS5 ^:P_֥GaVa֡c˓oJ צUSareJ`a- ~p uW@tL!AcNlմ!]&Kv0$Fޜ|b_0,N0=k@$i'|S}Qqoȩ̀"ˎQp+ho҂]z"Ua1΄9uaW1jW,QGm>˘hUѻ ;@B?1YBUU( +>{eT%O.WUXU뮌 SS|-i'H&NabEQ8v+W)%7 ~)ZwݫWM ~_WdE(ҷE3oV&VLPU*&W?3)K\d:C">i0o'0Զ4*xYw|rUaԄ]SUNKފz2CXtΑN0WeI!PbTQwJ݈:$M g~/s0lIIO&{dX%n;˟0z@&Y7^)V[ˡ ߝPOsZQJ- ~<%9]hw&kuvh6}𜙝ק46VKGS6 K&{zv8( PN_~Yt# Y d9>]^_ښ<u٩rބdAl7X\gP8 :#;bF.BQk&p?tĘqCzU8!;@]J$iCh\&y{,.rt殮WKOE}}2Yǝ:̂DR4]ѽژ~,ʹӐ((N%UKmvW;fo{6ElMsrc덝 ."/l%Ns%Z5c8;z &]:FO6ڗ(Z^WY~E<3h'|I[3ؖ)&zm,3&~,ZtK4.;( HU( 02&lA *21%`_u{U{pUwԊ h!3H"iSSU9`4}dgp1e^a^,g soZE]"|kG`66hp WW$&UR s;)^@@tQU_8c;+j&_S}@n9t~<:,'SRsJAL|' `cp hk#}lSwgqm/Ug+Ĵ. w 8u ɞ$~U9FE!aEƞ߄6c) 8PQJʖhJUpyaU<:/=|RGo$錤UلvmrYThKZ^BGF6r` ޯϡ{O_9V.NL("Z0F!hb0pgv]c˾%}6rh:(F킙zJLi9-`фWNl?J@aB uJ4t3,``.z>:>%.k##ax<QpYaZaMJeQ及.Δ9m `gYRXk͒ @م! D[ǎ(Q :SGah@ po6SWTDaMYikl}A._Nvf&^p X+s;l tG h=W-گhNJHob lVGq6ͧpGoK1l]]N\ d5,\'f9D#RdCLGg-B!)/C H2A=Pi$&sGꁋQl&auE'3z CZҿ/Ɋ+ _$Dqb`@illgwinjc6nX^  1$H4F4yNՌn~|ٰMܾnթSy4xՠeSGޤtYoߎ݉ٻ5r1>E0.v),w rTв|U-ա7G6InfǷA tw쥑X=ӠJ%Di@pWUǟQ/Igs ,H`IÕNISrAf+&%ML#2mr9_`Qr-3(+]2w1|H7 US~- l^Ii'5>1ϲzINdH8ޣ._OJYԾ*KOWi6V2xzUF4>%GfCT?MxYWs6huUFBx|˘Z?#.wj;J΋8JE\X=I. &1e&e}jn1PYwCtf1FT:8j~1j9q] _יuSѳYvH46hfĀ3.4 $+,ѝJӥ}7J6)zuSh^z1CE I' f(;aUeqAFmK r%(r!ўzl@It`)z>$Xq:𕛮K\^h QtCqnn^;TL9^t!tNm7Y,կ.lfTdŃC0(> 4U-3#`Y:_|-yLvXŞevv};RݚBQ,I诟~{gVB6uw0M&$_F8D7qDrZ6G̼PǨԎBNQWOtp!= qZ%pB̛"9ʢک`֝HQ![Dž.Pl"1H:p!MTkl oZErT[2#͆/@-Pۑ* cUHQqs]57QHA5ՐU%X,2',tbS Ic6 r$O v2 jwY4:E|ԧ71-D[T+OJSH́aJ/$>i'!(^?l`Ֆ}J< Qsw8dXzR7s͗//~2(Vqr{?*}$y>Q({͢C28UW24 ۿUC*|ef5ɁJ9\Um.U2}1Hl6, 6r2$'jSδ?j˰3tA:ԮVW#j~iHnX'Sך y! !c8bگ;B<6==毞.' 0t,6a6J$4jyhVYb6ez?\{ᷙ,q(@Ӹ g2Ke0gQPrO LwZ6b]-Qh'ڍRO>˂ZYkZY6\u]$UBN{ Z hxjz{`1fCws ܍; 9).h-AԻOa`/LSo]*Nr?-MOè.p'UG}6VyQ2rlcڑlYkrQ)v ]<&ٞHF+f(רR#WLjɷ;fThBu]. p +K7z(;} q4~<["?ܭ_Rv"W ۔xvc#,tr#;u-^(ˡ  _/sQ~A_-,we|Hv!6Q-@&CAXW} *`Nzޙ>X^傐VE `RbfKynP#c_|H,g#ÚUZ9My2 $L 79u'1mZP>TpәWð= e5(BU6 q:I`(؂koXwHϦ1A{55|q>pFy֡w8 /')s뀄D˜ft>NKH'ֶv~2d1z,dN#ixd㘤J洏U\jRq~q]a|˔RzQpP! !":OPe'&NjLb+3~B{B5ͣQ(oo1n{Ya={^{o%&*@wAܤ7sRSmFURG.V)8.ARcRS$lpzIz\ hWQ ]8 1SUB*δ(dk)m\c_>a 043BCQM:1jj=6lO\ adj W8|J!?v3D%q# {I$Vfr(1 ϛo+Ǩ@^`Gi܌`2.Ln,B5{9 `3?Ry*P2R[U\»4DMQR䈉.u,\E.]8gL/~fGXagkb5CWd.Gbz0(" S2'yy! {kzgU]'9LCb PD3ȨU>D.s*"g"Nn }~Vu a1p.䇼 MOp,Bٹ(x,CkfzRۧ~R"G ݤkEKI?ɏrIՋ%_x8)" "OSxX éARr6)LrK XM*^I7"ugf2JOB49?g T "6Σfmx4]XI.ĞEc|.eGq%/ s pr. 2YN1 4] $)ʠJiJE4_,+JA(XV!lH7gʶ͐0XsP?0fL  n( _hb %%gy_JH?U>ֲn|*%,؂ : h Ts/<ꖺkg9XG-qT.zܖm{+^oi#IH맙bFKqѮUiTWH!:Y5ZB.^8w DRv`XEEKU"VMN& W6ת*Jvf?jԓ#A'<+I[7q Bd 7JC bJMa>^SvV8g!HH'bȢwQ)u/U!EݐcjXpm`[Ej[5H7FtDo dUV.iFoA !TR>$ԍE)ɖP1:7O3!.Ʈ_0 #G(@.3n)&c-b \¾mǙ..N[-7Lϲoҥ.#\6z?DsD{!c+$#ĺZ!G#RڹcBIՄjBq$8UcKCuݲPS 5[ч>3((l*KCVӲ4E5)Iǯ<>~:T|к1NdF lSzC1dj&oI?]45sv@gk.2? rR3R y!Yj>WYImD†[Js=bm+Ng\ŸXMU6Wݺ(~JjV}ROnK!'(Ɇ_%主? V$Ss]RN@˦6>WR}zB暚&ՂZX6 }޶lwCScj\y'*orR*+9ajT^Vq@vm֔dĊYqt)uk4ht<35?az:g8yۙ`fi3,l䓝 Pѽy:(xbk3?bZWtȲ3Y1-Fx^g[QӔ|0F[,Jgg\>`Oeh9vkQril׹4tZvΔ?~\:m3"!͛ղ~žC,u$ߏj<8Ţ2@ T;׹$Gۄ>)(7בPF@3̮O,J=O68n_G%ٞaT?c>O=u[<>*Urs+E9mB^/%𬪾zٿƷ<2{Vy^w՝龻Lͳz?@%̨:*;S [S>u"W_'GSb4/,QZn!#‹\!ϵm[9tp+WelV}rnJml=EXh)v8NJ7hϬ D"4&> ԶK.jb'ϟ')W!ݮ* \0evQ]ׅn2ѣ/S xL3S96,7ٍ5[s_-e%"Thp48 !44e:nw 9KEJTTTjvۏϢs$v5p~nSet2xFIgӝde>V\NZ扲ͣ@-{i!+]X 9sqsҬ z8@ƞAYe·/m7$Lq 0 сN֦ 3t On5[[T؎^ͧsbO}>nmCASK @7@0|m;P`G ?s3k(w҆%~VtIfA@P/2N4,ŶKh zA6 nQv]rLyJBaAa i$[Y(umeT|ۓ+7pD³.UA;qk%/]Lq(Πv.bkTɮ'6+"]XĨy vMӸsn%`NJJxq+sY[$KgSCd ϟF@9{OV@oل#xŇyff;eoypd`mr< Ksq( #:;iB5^Dd2u5t .W{u*.TH "f!0 [,J8U,~\kCK<[b3|h/o4a;A8Σus ezBsCa3Vq[ިymf-KI~ XgzSEqָɊ/o2,qc'M~&s6ODe44A,:Α|o~ńqr8S]ԬNuD"ɏfRjRzӼ~L> <ķR8۪Rr`I3`* gkڞLUnr~VHH>Q϶B3@? %HgD$#BQx9\nbۿ3 ?־ٵdiJ6358$]v6JYԂP5 vfڰɪ?8 AWHe 05CmpDB7(2qIyҤvm;u,ìN(`AqF֐|'J|`OFsYxV4(=L֫҉l |TAQsdB{Sp2P,=Yv _J@/3&q7i1jTQ|v1DdПb-b)L-|eUOB}BEW1HM/ܹrqh-괙s$ >U4[$3RR* !k}K9dzfAІsJM[p,aI8-^&'e Ķ?ʡuw%L`ceުQԽ(P_|/o]Nu*jm:9j0V|kDW4+[eℒdwl2os;XjM ͛0AxQQ 3gwYF6" ά `m#,鴘%ؙ)m \wF)!86쫗0JuJMh WxrͪOw n2]w-h쐽,gYk#W9 ~=*K#a:;dvUy?2|#&.OIRXPhq;{;6'u~Z $`0hE<0mq8妱J@ѵh;m zR 09,3'u2s, ϣPndS&\=&T1߇} ޲D~ 3+̃v_ ûs(<2+^EpS>mWx'Հ0bD.;u 'ovCYJq_ _omY>ST_Ka'*D8ZTLp.&3 UG?M=~Ae%?9Jy?Qߟ?Nxd?Bs=gO)g TO Icc$sل6\&\h=΋-E cΑ]'9ғ]& Q i|]p!Ѷ4j|R; Q;NvҼ:l*\lâd0RADe5 4 $K}F@[ k 3J480۱IA~Kdɬ"81ؕjKr*.N9gဢh~ LS?,Kʶ΋PI={Eqe/1k1qYLIɃqiHv`ub7N+SHjPM2sx528lGT˳*y$4g/m`#_FB16P\i?r$LZ^TyE ڮK1Ж7nez՝\L0fC=) v#63jUv"Ĉu[m.qkn:F`U}Y)\}n1!AÈ ?GuRZ&v%6¸O$ҰOGAs+JUZ |$plƆBeU>AXxM}S&Ɇ6M#̴QV22m- >l '[lkZ 6X^{=:']~ZvW,iŋBĎ͆N6~vO#0/؏(]VE>N ,WMKA̻R)mk6K81G3PͰVQ=zFWJȏ6UK(!S;K؅x(K&/"G\T/8R;L>&,vؑg6δK 3 ' fBD/dLN"PZ]8~r%hMZZ5,ަr|x]ʤ|ץŃN%pRϙ5U0>rVxyX`6sYjU]nCa, dYXgOC]Rp}8oߡͥB0semNaߖ9/%48uYfX3%i~J@h!d R\DIP&ۼ: Tn_Eadkñy]2$:*XMaS^3BmT]R[Hql$G29R J ecvcx8֢ 5Hu_w?0ݗ9M_j,ϻ,W}P[ŦB}iPd"SK^zI4ن<vt|hJ6 KЙLYe<<똨)k5R47FQպ쓼FHIu9_Rc<,]  5>J>Ӣb R:+=77dvѽ'j33p֥ F]5p]Aa|)`[biVМy) 2˯"'AJt~l!6ef8,4+7;\mӼ:ȸw*HƜR}6l"IeiegeEo1?]V'RfhDđY A@m3 Gh>_ȀϔG~M#9Hr;oj-bfմ*@yqgfԅYR/RswMAit»vgW%KTex+yR<\ J*CZRgOrY HKrƁyCI[," 6x/" #2F@v.QPwzaYXGokCx{%z {4P:#T &#'9ch78=X1,Ϊ}G!ϴn 4SMlp.5 P;W11BPf䶒DU9p ˚uY ](_Yh˾PWPXC2u<73 vZuVp‘P_{7Y*{Ri-$1&V(^y#Y9 uK*:ݔ"64~&9Zc0>.n!hp66lʼnCL`|[$;0^o /44&6mkg2f\73{CEE_h@(AGSwNMم% .{iT VǁvFܚBZ4m]?;ema6 j:vC=L@0h&j`4gP94@}-*⍩oCPu( eS@fZKVne֬NQ];GA75Vu>t2U -kRY'< O¶vlu>տ,7R?9;ȈT P Ҏi91]$ -+K9YYk0M~RWA6\:V/$t'jSa, ,8e\q qGW 0"c)TPmF9;iBuF]PJ[SZ}ky,EN%DXuM.47Ϳ2)SJEʙgKJZ\7?r%۪,##)慼&!;!yC4A6 Si%*G('b-U$ODQh66ccʽHx4 LZòvM;gQGy%0 y &l=GwD͕r=GC@pp~Cl[C`)#t  H։ !i;.e Rq.I'\5LZ|A`ynK .HNVlItB4M9bt |=o\٘yb$2[O= ZhO3r+y:w7ґa8,ڳN<wh3疷!jID҇RY-r:(R$r&Kd٣ h4};I]p@5 -헝.t/k$*.յQEƶʱ E?­Y>y)8PVu@JT5z[{JX†TDl0$"E)x[/YnһTVl}l"Ƞm j JGB f4Yh$%1*= ƒ~4FFt͹P·- )E026/m]fa !ҔsX[#ْR}!*Z;rv)VFڹ>\JQ(d$42d> -'`B)Agx5 ptVYړYT} C?7;ɳ>x5e' WYP7{;/p$sCJ@%Ҝ JDh$ U+H%pXicHg [_z6˦R<.??lG>NYTFV_|%x&&As{e]C}C* UN匴kʃ/ "P{6Q%,5$μ/_#^f.s[ Qhz)b{([ IQ,JZFphm=סѱAtU*wsAKG&|:L7%vrX8B1_?qB!0E ӄeKC4:/U M}UaRK("( ݺ48,n.CcdY4Օ$ %ZkKGB9=MMmmQ/ss{y7HfVּKBǵ=X0iT7 2WeX-l|~ xv׷S_a)c/-\l`WA[y6]F,ݕY"KRDT lCmNm&]"Tyugce1dܯkeG5rͭח PGnp~w_-nٻ?aOSkϰ_{s/(}BBg}W|. Q%cjuv4\4;w |\B?BǏϐY`S߿'}Ơ 9׾]|Q͹2 ` Z?zΣ)bOXZik#c+_Hڬ5$.D/:s6+K`.B%w4d b}Ue2|Ū枠ݓS85+dzk'l[.yҥ/H(jkRSDz^.Jz`KsoV,q46tհ_9}PRt<)|@fzbVD^])8|@?5 c̊ 04DXYvq|bރ?.>mHLWւ7#ECDٌʤzw/<cH!m5؀)؋!6FO`ETMA4 _0C}@@{]=_-DDqyoo@6dؑ|SMV%S P܎3rn1qdJ1f{ ]Ob;z&SQ&զt}|Z2 y'nzyTMp+\8,~#؀pdzrZpa\M'P({[]gNK[#\ҝ|5@-F,22YPg WNmThZ/ *!ge`uɥ_O'ziS8}9DtX)V+sjlTFw%*^%I"Ԫݛ+ĻFmZۈӯYh*(+BPXCpe9VFY= c5R1"5W/,$rXҬ4bLFvUsDZ&  T=21\f@ ٞ 9I{ëo\_QDu `'}7]1~*b p~{4?/]s^bLwȪK͒AŇ!dPO  @>L_B&mժ9.S\]˩8 xN@ %:; 866! A ͒VqtDgMj+M/ ʔE~5Bh\Si]v_ə+"s[ NLJ"R h$I$6({icy)ۧ(7'+_[CC2esix9  @-7>+W M(yS_6Da@0 =Xfkee6л;Fk\Wң͡<0LҬ~ҋ]>Qt!"|xPi{BX'phR(4)Ԕr, kf!ƣI5OT2?\ɫ cWbYR-J/VIJd"R:e'=Z}ůJI,c~L#7jZo+~rm'_L—‚ak&mK]kKtHYv'RC1̅kG<_CvJj&ԭHq&VM0mzQ1usO]| vy lI^Eư$pPuD:%i8,#o+)\ 4YJ1R(ͿI#S^}UT$AUMkBXF-6T7E64i$dz6H,Fylum(JmLLhj"aQLJ 7'O> Av{3p[gr)W lT'KTD`oXAU70%&FGD|.K;e$Up!葟(Rw[ hLf!pDMۍSu`bpi:7Ee6Ʊݗi+&}.: Qp{TQ"mO%llxH }İr d7ga-ɚOO"۽Ild>3pN{EJ{j.HK J1a6H[qxd*-@"ٽj1P +*Ԭ~Bc}-<ϨچAH4Nq+H}2c,ެWc,QSpJEA82RLY/Jp=]S?r8RyhNJ?G̻~M>k8|&v\M#siQ7u 7[Z{@DChw^'p>_k'P;Ź /Qɒ ZJno,7yCR] |"~4;i%n ְj]v%y!¡P7b*RdE0H@C^ج,jlt9,MϜ za՞ȩ{ |n!%QR"g6Տ^c>pM:.x_~rdUWaWAFt X44 McQXܡ;wbbLrouy|S]h}oDHSUs[IN] 5/?ImaK5~f(ۇ1.|a Qj I>|!'v.u }A6y\}ZBe^4r<ΡUpڙt@ٔ6X闪{cqo-6 073s)NT ^t4XR;rٛYqMUyP,ɋTӑ Qnw9F"W&T6V$H^$ګA)j>sL `+ZT_*IrQ?HOekP$1-%L911/BӃ}~s!{Ɛ[DK\6wK a "i@HmRW7ۿ22_z J@ɣAS0&݀/VwM9L^ȅy[i]@,5P4bXDk gݫj <ѬC)Op) :wzX 6l y:G]{ EM 72"Eׄ0[.n$S2O$uG&LRaE]dVȕPH 6/Mpbr?p P8!8CW^|< V; u_Ơ**](ck: A7EQ˰6'-LGW'eƅͭwtT;ܻvZXO/?{< v7|kJX~adc='oAJ3Ξ"_Y7Ƴ`Kl4VHqvIh;JJO /{Mݺ8B?eUY~4(T&:o QA`N m{OF.4b06z"hehfPn# j^L>Vugu`: w{OȢ44}>UE ; $'&1ZGY}UPɐ -ħQw1Ys2Hn *#Mlxv 3/<$)1W'W%@0rEވN9@RTGՐPs:XME`nvPe%TϞ]u(!so t+'e\ט4b2`kqrq8$_3{# I%$:yfvlѵN 2"jZp+4@KcckjJuJJ6PIRJ ovzے$9,GC9WʋƖk00B=y<;ߏ 2>u@B47t02!#ꃪQWդήJs69ضKP'A ` * )WVGZBٚ5Bc{*/@,s-k  7G! ίL !-J( "";;:yє!u4 qg!kL4PiIϨбͣ^>~>ShPPֶAL:ؚg Ys)%M*A$mE1\=?dk.a\|'jdm~ۊxeo{cPX,dSƉzoeF|%^@]rNZZ$WKp2I)M(X,5F'yQ-=Zr~:7(Xtx.49;4$_qgIoX}?/ m SNh`S/T hv z:Pu$SZ4yMЍW'x'R3Go}tz) Y`L4u9EV!~Pu)+AF򢭱dI'}C׳M^s8Jcjԓt"G.itT]+wz JFzmI*W'%`;DwK.E'\C@&#>vA E1.+ Ax- 1 /=gE6F4U~ T]59G^8NeBKaB{]:0$~[ ]{PNC&9BLє 혚XWlMrg/1TbECϟ~e|9GzSOÜ}ZEסTq@UET-A9N0AR\DSs h"vmR?͋DxZKx҆-D#Hy]Rzr}fvޛBדk*BphXz]*X6B3ˁ}zi^D[Ӯy'"uq=G hb MzB DLf6͘fsbr owɣQԯto!W CttNc zRJ2h}rubmRV4 Ԧ` [dg QUr[,@Eb )T: GE1k~땚Lk.} Aq)<֔]BXmmLb[áϐaA0ڦ0f YCD$Gl!wNP}ˆpe1>gk(^P({d tuFd|!]-5Il飙1 ٙTY?Q/qH uA`N[n3iofkIN-XWŨP0,!eh Bt!CQPC]37LCg\BeM&y#0 -!PI!&MK׊xU UK&?ڍу9'ۗ..9#ja(\8eYTKD{N|Ȯ;?)%rדx'P!ȀҮ X2Ÿ@0_mr@n13z _75ֻfpe}M,A h>3OF xAa0ԗŨ> pm/fu/B Ʉ.b\ p u#]O+:]3V'g.~Ǔ^jүFuk*!:`8Qd'+'WgTv8qom+cpk1vjxrFn5GfptVDE5 1p}=Hg˔X¿ڍ%uu5S5 TR\hV1q!,St*>P{DF;trُ@.'%OK UQC+*C8Q MLj_ؿ@N pa;s lF&y˴8dQboס=V\T!Y;i5%i 9i)d#3`La(Q ~g0c$/AcYK1:^08Z֭#sN倈iI9;6!4ۡ 9;g`m JQ^Ӣבu4U.ɭt!*xuegSAzK<=πW8v G:TGJRQWoLz,rIX ԿC آk}c dXB edtlb%y0{{)|}~A- !`b=!9%A7!IaLQR>'(WkJBSVE*4v&2'ҿU/VfZ{K%żqf)mj1W((eg) r5T}]緁-|MI ߟ@ T YO&l%Gi~!=5yAUMW 馫B!0(_}=Z[n %Qac`Oۯm,?$tq}ޅME­b6ĀV'OJϰq :0s1(@oosgBuѰ %5B?[Ƃ\Do[G{NPťWǓϡa\ PI]"UUGUj&]0kC{9P>rrWΊFa/$$I_T1u: Ov WBZ ;z^y[!Դ' F.ij, CNPרw.FQnCiymz'*E4?=CGnƲem8=_'t֝U*]5b{x@M=j\r1;` uqsYQP^˨+"zBQù~ꛋ QxJ~i{ О h`ON](D"7w(*{+&k I3,"ZT6%|0bX ]+$+g[(~|ЛO+K2K> 5Cu]H;1kEڤ %N 6<fpQ4_!x^^(ў,D(Mra9Q`nesN VB91ŀx2# %ku7q($xG9$\uˮ|>$lkSYx?v~^-F $̼ՒtA.9x|}fI{+lU,z{@z^ͫ} Sp"2GDvCғ\Sg@TZ֫bN%!p@֙bǮQTiF As,tԑT"oa )>4D]mr q5piK.$D:c7hb`ֆ {03Ar2G7(*²Rd$ĤݾxpO0,޻^%ez}OtnwQh`6Һ3.%tX4%)#&ypVq.Jzg4Ko.{ek*WzL6(Mޒ>oLQ}HE< @QVހst7cdR!#gPYQC`b2?_9#/χ'T^}q+x (Y*`M,ctmMg27}!bq-OSs<7c۽\ͽyyί`u"|8 YQ^6H*8@ɏR{\b~ &< wL:Pq);7×3"T>1{t@>|نp_^\*p~[mg~v4lgE3@R/J蜬L!Mi;hۉZ8z`9"һUvTAٙQȓD3^'$;amMn,"n j8}XuXk Gˤߎ$3%i-5@ԩμJl_eߦ_cYD#l>҈le2½4.G12jpnaC!zEF#;0ⱽH cRDlǏ)A|\B G֟RMIݧwDF&N4L$Iۋ4g|H@iV@ADeR˩V]'f^m(̖77-Z>L6=b\&Y-S2"HWIWs(CQ1A)4 H,1S0b:SCcP0YÂM1\G٭evDq ~1[h6۟;߽SwxX:]70VrXwokn iGaN<0ZPSt.Na8$r6Ј:K1LP\PFCUvyGfid?8,VCɧG'O7 "0 & Xچ!// |0_&k0~k瑔 ˤc픯`A*S+^;fƅJ7 iJPH h캬wKwuܰߎyjj&N6IaB %) =6Eݦa6:9Yg;h`l|uv`fkm^lt֭"X@@0R8 :89Ϊ$ox%@Cَ鮷^d –1Bf+y*ќ[;M-Q^ th4>%iӋړ-J 9_ t:&TIiʜT9b1,=8&U|ΜƓΰȱE$n!;IUd}VHlB-"RӘZX0S,ح U)W/ŦISQjy.ԷGةr%TCOB@XQPA¬,j;S>@*l=&̃I\8 'OKC/tp5SWNt$e0XЧr(=y4 =R \Ph@Ai}i!Z]ёd2[ǛV)dZ%pE>4XvT'^Ni4m&6mAxߊu4Y! ]rd8՝b!RrȻOaQtVe2_~A=Сzٓf+NY=):Iؿ_xlJ`ࣙyqRidtHj 2v$iX|U'DP)XDb'\ح@E;yܘxW,A*~KJ̉˘#ʸnq0:f;f$xVcl( fz2L(=2ːW L̃IQpElXSP'z+2m۲a<֏#s^,LsϣЅj6mzd ~Y˃gǐBF52i93z$CF @ = : 䫟]s%/1c4qI &P/|y%sgW].{J׽LѠQV`GiyĦv4:gCK>(7$f)߶:~ދ|݋ѦuXxF9ZE]p9q7^'0 DҢPw Il)6 U0;ڣѮmIxWSյ:fJImZqPx5^g{PQ{k;\MW\hiEpW)?-">\3&d,{!*0@麅!v'|asrI]&$R ." ٿmE["J-\jUf7颔RUW\㸵LKclTJF.7 ˱M-ӠINI?.(qmz0V$Bz?#ՐU!:ξ`v7bf~8n]Q\e`Xj#jp)3^OfKG߽OJ]&me1t}9nME&]c'l,w3*">->Zz]^Nq)Dl }H޺0&PxR " .!mH_rt 8ə6Ov2hs{r} P/S^ZtXӡ@-h?)@E|qo ZXmB,DYB*{CZW ?U|{vK(z: ^JE^Jԫ6gښd;+Œ蓇5WCޔttwm)XХ]4 l"5{@)@8s 2XZrLW.aI(~%PBlb xX*(}Q toU)@-@o aMmV_D f_2\ruW;6tTPY=gZAG~|Y!땽8M1$"ǘP8N+u4CV " F?0ρͣ#5 6vS`4 I-eyN;6(=Ko=RY T}eqoN*i$vR"6: ,Y3d k[`+ GW;D0uP ]1O9uD(dQ+[ӭzHhvgHMh@!b 0;jS,1an=n@zeRYӳ'̑> p:RTq>.д;ӫ)rb.ўvS0t!}057~RJk2 M1pF;V'ky&N6<zjJ@g-͎1,̶cC iˣ#`:dSPBUkf 4$;I`͠ >ކٖ1nbHs}TvN FF as'gkC6g}f [+hNP !Gk(I9Gcv?jh tXyLN@ VZxT5(dP Zl$0Y>rZ ȅ^TH1 O'S$Igp.r\l6auˣSe21yB <-/PBzkQMPΰ J☺!ڈ% .eC VoŐ(2C憶B[vϛ/H S"v(]tژsDySc %*S\Lh@4&WߴY^EW_'z>vg +7YZ>X  T G`%V/*-OňjggũXUfYY5,SlgB`prmnKkX{J.K ں ɑm0Y/ .ǘ&(6Ly0bTib`2yeoAcRwF˼pi轟WV/B qtٝl,tDSB͓2M@%ਜ਼'7]r~~OF6y{X ;\?)I V Q98.P$%O_;g U7L02b0={m[&g)6f46D;Spn;;Wಬj''QYWc&0Dp . Fk(9`o7 NŒ0;->dLQU$KaF=/v2>9!K:Â+VQE85t$R@r@:4 :b:Cp^JC*a + AZTRe2ksɚ>R m"!#d4/O{AUEz+bǓ%j3eBba"Eb) ګO30Rz]w Kj=亵|QC_]Zv>1`"+ӱQ9FUJ )S*%6R\CQ.VׯI )jij Qɲ8;P3KOJLq#&}᫝D,t4cNF;o2$BhLFGiP^)00VBC_)-쀪{= |fS^R|ʴxHv; ޅGChu1k6 @:SrB$2E!mV=x4ݬV1Hkzavsct5@F.[0=dA6FܧG(vFJ`OsF?uAe2BT}׃e b! O/yٔ_-rdU% YpƁPh(Rlӡq&f,Nݰ.HDEůe?<ޞdɠl@")y>' }ENQƦ3Ja'%+Y Ϋj3>K)f)IEf3u4n'8e֢Wڇ*-){=Cځ::&68`QxmZrjN&۸@"OL;p<;S}t1@O uHTkQK*zW5vNbA=x?^t9x"HhDQFy>8 .l"\y$޾&WjJblb'xt*A}DPG/16$s)~ enR\(ԕVE*SD{>qU{MfJH4 iB7(j12UCֈSTaq6Cw*ZڏLpp-_YMؘM|vë>9&Y3LrkVoYBox עEB3Y8Ǻo")S&:bfNV֭fui lKKV$sEEɨ@砩Ҷ.t(޺yzfR$}jC7؍(6?*Jp9Y5~wճv0o'$(hAɉݱ'dF*{CNI"C wl Ho|{),D` [LlmpH\ԞL|#fKޭmh5Z41t_2)aӠڴ2SI6Y2Xba_= +C96oMH O f iV3W= ]ٜʄ҅M\W_^ ̢Gd4V^GGt|GETva\r-TYt Yҟ,^(!*ABp]=yjwx:?i_IX=K@]O|"ɯ\a迸]EGvfRiEk^O'aɢnJ kPЅ~pXopp9>BuPcukȲ($V_f߯mVlǤєy.3ytPGsd9,P!5@ۿM􂋝gx \&:aL{|hCb}~*3OҦlO&͙e"L'RYȇ†oq[19wΨd:~ʞAkL -(3+&k`:]R?TWHf+n+Zmoٍd';OߺiOiOo%ZhD/>!31QPDNJR㍍[+d19"ں 3E:HRD|t&W? xȤf_HOLݠ@Ӡw}H}wVMuͣ +Q tV D͎/\575XdnԀ(:UBSSD lnE-Wevߪᑱzg2X r+J1 r D¥kp18h ێiD~3l5TVR(u=BQut$)3I.Mw[FZxtʫ|4;,Qj2bc[ƃ .B$g$4m!NVeC-O x9η&ksaRCQf0爳f)mNUc=|4hU4B P>j:Uk')B;{{l(5T}bUmZJ?J`irqRږ:;ue3g( _ |I{$0ۚD+[4Wm=P4J3!nצ4:e6\$n 3ڷgN_ Ky?nx, ͺ8K\WSa Ykx8QQ@VqY Q6qo)\/%-Ye,›LUG!0QNI Pcg2bhyfKfqhuVٞ%^۲Nt;'!$c$ovHdDm:"J٢p# `|w BVcC?X?nDtCBzz$\W<&$DU> {WOޗl ߻<塻w}is'BȭV7jA});ƦiʗfUO*OLM/.{ŠM(:ImymG2ɓq=HkA6gYH+yfTKOdnS}<7vY a*[}pǜvz@81 gt5McQ"Y1{ԦN}5O_4-^L]Ȯl$3F>0+pؤi蘆g?nb;ܚz]v1tlB?ysm}M;Q2\~fJ%`~~߹/ ZWy_~TnRλ珞}{2n) \,R-=A1 ,zwڞLyݩֶ,ȥ 31aP ìoMaW$s΃@PK )5XqA?9a%Alea$> Bf5{5}6L< o'NB {Fh x3T`>T8`|ShANԐo%sO:IYZjʣme ƉM_eB N?Y0]s6%daēq pL=V6\'{;P7WU?Npgݦ䷢]"z,(&Z\2hl܄8F| Զ`{d$bU!Kyw:PbS*0ȷv\^94|vwJ f-@yx%UaPLm(aБiB2~0%^{;Ew¸Maai?/,s.]p hIWo|T;,yȬ{|EOdy8YtdxaaA^$edE#n5XFgh*{ X +#]M"zM 3FqVB93羟6$;pB3{y69T^,KxilL+b &/3y%adTTw$DM>V;1I"= ; @s-ro\OVU p,K̪ i:pM"-3*12I*Pljk>HuO"5B0 RIfWFCo.iU0EXx|XcaE令#eWؠnE P;Nb3eu )jJ7 ܃k0-sxo_*mbUZ93%@oPUҽ2@umvyi_6)xӤpԣa15t]jdm`!#k#OiBXR5[ɿ}ߎ-ɹ++5ELਔ-$g}=0j޲$%[)0do.&6JB)QJʢyb9k|[{oWd ˧=h,@(=Ç1Cg]ArWn rwIXN:twP /_I:z&xaYʠZc/_Fl|Ń1 =3ʰa~IN1. x7 *L˱6n]iC$PZ c$3߹XUϫZ='AߺRjI*GA{vNUWHf( 0QL" #K{:l;z .AhJTDEaE0_HF-OГWà:S/&k4_/R ,ɼg?HR|1~Լxt?H+~`lkVh@pΰ}KXJlgS/JY+e?0ځ=[ |SԾ ++@;Vlr)W۰X-ʛ۱55޺m@}~\fSLQ"M1 (%i6 ի15?N=A@VZ)5 J C!Eǫ,LfRl5*2r+\DQs ?]Q0lB#V).Q!GOZKp:G$ ^q Ai[xjJAW]mdՠ!N#拪NM5pa#«N޲6m䧰Z{LÕg3^ 2GAjACI^~\IjſN]ed9ag P.{dǭSNSn*JF%%>#f*?}Uyne6v=LvVG*p`&̺TzF_-E *earjVQ(? b u0YJ._hD(G͙CK`e=᭯ ʝTQu+URT(ld,Ө\ƛP|3شuϕŸD[0ZrnmI "X<_<ܮu' 0~! t{>6sF!g*w*u you Bκ$y(S vI]a`5> >bPE1-hQs.) w4ASmN#DvImugm;i#(?rz ׸U٫bܞqJZvhmaKN&.(I@ rD)Yt1'mxp25b>~:^Ipʏ&fed`KQ:hT=,(MȗIIi21tOe) Y+or4HQiPkQõ"jb&RUWE7qLVD"Oӊ.vQI_OϢ7WUo[w7ခ2I~nc TFP$0ꥶK7pǠF]J#-x +=ȤUκ,+juriX֬B/Tč?-E ri_JV4?j~8a"/_-aC!p1/ s7%fݣKؓGQDeEE]YQU|NN}2!{OΩsNaDoڏo6?T8*Z$e*)Y5Vv[c+ӌkS ,n+}b9!g{%i4k&f.<ϒ7J͠F!kXXqS=xU~~? A9|`ʱ0TfQU? "u4_פָ+i :hVk /hԧDL?~ZuE'FCH>N.kp^q7+nqm H_&fh62.O٪G7ɟhϪ/4uH{;խdx4PE$-}W7&g5Hq.srX(M#iUU08$ͯ ,L/ld\4Guue,Ap*v)Zy-"3-C4X{_X$ﭸ;( V4 :ڐu4,G :CkbD3iB] / l5AUj1alJT+|&]h BDhMl3ΎPjI!23|8[WGr׋s/n(DxmP$2zZ:^ '"r;E-h9kv!`<9y q~SC6FN68苐5i#um!~YD:>_qvnӠ: .oLN:t⦅H $"֡Q *|wSwDH)9MqEXʝ&,'X^`D֦& rOd~סГRXqeזۃNu %tܢژI~Q/_| AnrX& 80IښsK$MZ~)1e"F2S[0]rL 'ZZd W_յ %pA (ih6WǶK yvJBaU-T1ָPU@Ѻ)JO*vM/Du̇&"鉪VkPK5,ϓN4Ak& ML!M52*@k*"` ݛ/"EQ!$3['4tF~}!D=8@>cEj( p 1Nʈ}qk&4"wQo=+ٵ;]r؄mOqQY9)"ύ}j𬘙㓠n=|l<CDItl~Q}[o'G͓ Hu.Qz\0V5Tw^2i "i]rBSeYhe@A؜Ea. ~E(os(hf5ZQM;&tc qH`@Eʑd~-X$apvDKI$Jy,Ca+n~^(sP`&4# E8`SGj Mr]*^4 j 'es ]=8h H5U8+̠w/o6MZC hd_jmkp>6[\:@FOM;ȣ.}7SFo Y2>39NIn5At]UsKi` `[6iG PUKoy'f2:%$4S˱yh ƒ'SC][5tgUg([r Qk\gk!>Z۪q0nΓ1JmMHC:M6#m!y{Ar,h+KӵQ35%W>JL]ubgYNgaݹ;E*@kiMרJM[QT^U&«>:G!{XV7Ѵa$\믓KoPtĄyrVu6 :AsySi28i YXcB2R4VZ/@X!Bt*99bB-+w>T/˿4z|,9t*>rRS#~;qts7"Yr  RKN.LF!Cf7+kI`w6#UVSk5 ^x#"Ћx!y3_`0 gμ}?cYbF[QzUUmGA7d`s/h7\{ ya՜kQ;˯ȌqcQ,&Fl:6Z$,v=)u4s|;K>ţ[)Xlegx?/@ P?.e OQƀ9-Cw O0F:h PE jG lsت2Cd=xKD4T3L s;k6 qƷ^rBlHS 2=5Vo N[+~W'^}*(7zwp7)HpE\PD< VqDUw(gw+O3v@0$#GVMzjIլ*,GۜNYi( *?!\X1Ƈ=dAp3M1T xW6) \͠{BG}%{g">?N( .Ǣ&Bɴ{_lb=7<)& 91: ~UC :;B"-;7%Yoa[<< G> -J]_Z"Уǜ%n$ir|#"er6k>gG*jϖԂފ1I~`|,_fRa')ځb5SA3>̋.X[HcmyB Gy+y˒ =q6*0a#eN41׳VHVJǜ۹ӗ]yJuS3| |[6hF/S<2{`4#zinx7`BpY-XϿ`xW͸ n<=ў45b5m8UbѰE,ٍE(oV]m2X–"c?SX “''t c#|zYy ʋeč %H.0lBVq]L.@j$y¶(~ϞP(kG#ب̒ɴRxL4 . , GHÓxaHA).=v?XuHe%~U 蛇|])GYFYi/B$2-!6lN؁Zs6 _x/YB4haoy[/2.=5)ra3j'>I[e6v#mW]Vw#iBk*uӭxWL(Ć<ǘ2 '| -Xk97 +ٕmęWRʪ9WYR&9+uLpCտ$j^ͬ'"Eζ4 ~-D@7?_c> Zfc+杔rW6ؐvIP*hCzf4z2qX@Ys(j$R~~NJv=)Ni2YWNiN񚡾͌ޡ;*õ1a =V'Ay@{gVp>8x @h$=kE>4f~1dPOYoHiY*Xޔؙ`'o/etU" Nd3Y)#@T_t hEtmtDDZy]QR5I챺$o)*ih*8&A{e${Z;g _HRɻAZYVı ~a0WKd_L<5TB҅lmOBog#WiGz`FV gAbOs8ɞ/w}??,Pu-ITsj.cA_$تӇ1*vޖƬQ]d-uw[Q$K>PʚZ y&}(|$_ֆb6<ޔ#d֔t/BU$n_p"YC,z^_ |^o{/g ~;VWd7c4 χN/5r]H~BWj \@RЅi^P!$i//vyXH6na :fQWq&  ;@12`zh N@dI@9hw1/QVl yhJppS'{i;ǖwv,&*#dS֎to CI4FsJg[OtvJٳlՔ 2T[X.HYaJ]_mW[Us]&ZW_le `WTG⭐ |!CN{7DS[b9d-ԏ9/ ;b^ ys1!ǙU)<Tpa;ݘm\;}y92NJl [U\ECiі.>kZw8zҎ+2c3մ;NGZY5\Jܤ@upe~9m/JEH[##am4F6OKhڢ:\er:7fh N˙V-覱#x`H `}fX˜pMq[XLJQբIvU>aƖ\r X; R:a[ bDHQ!3gGƃԲĽ6 -U[f;i$ l}JXkH)_:T-\*#08vEbƑ%?l;,H#Nmڮ>d!$$^v_}!z& pエZc2w'\c%xC?A4zyϙIbт( 12[vEC5ly gï_1~o_/Z M ` N瓓,S6 '@@Dɏɏcw2^*R* Z5ZE_Cǃ]z- Pid1ܘ(+=>3e4Vⷐ@`/7WiaD#ڒJm5o9nq~/Ct# @?e'B^75I¡G ΅>ق cZ̥*y$L%ٗr}WkZ[+R:b~#3~!"iJuXR(cN#YRcJBi'mi;ֻ&O)tWi(XQʢ Q#I\xU1h#WI0!{@)YܰSXw>j:`ھS̗Dۖ"WFCG.@FC`p)&ܤBZ>:;&Ex8>ylؓkN4"!fDrs_! '!-=dXN$4u{cD+wFV_[,.dž᙭F 'LeֆӎE;#O]I17$PܫWSn?Pըpu xoH`P})|_||/0bǑ H@[< v0@?5A;,F,yJR N7#Q|?'vhg!􋤔oF$V$7OI +Z}2KU{XKLU%IKjLZzy E#?P;"*f벪4wB}re}؋բU}E*[$U%Μ c LY=lxz`v^aLX̫U49 H\fsl[XoKzs,7ydPyVT-n)҆UIpidƢ?eZ.:+Kʧ]XUj'墠c6SIo kx]9=hT5*mjEB:Y0c>=H.!4_W+RnmKkDy\T@K+dìf)fZz`8DR.n-(`.9- љ@?,Cp 7zz Hɺ74@пnKC+4(YF*_LX*GC`6t(>J)uFA`j(1]48 S8V87Ib'1/7bgmQv,Fa=C3⦑ 9Ƞ x{m. /\y~$0@J?}'$w-WlE +4H(@ LO7`]g?@@;Dk{,07)wpz>f$b&1'ك-" Qɢk=ig H/+SS4.Ĵ1+( &dzQ)HݒWx-cnKgH˓9J^$[WWBJEH "hiC3]q%",fr)ּ }'hc qhe4ғCp9t8YlK:b6gN!?pTlp(U|L'It%R :'osՖJ]JnFO@UqJ2 +>t:RqU9ْZbbOdUMJNҳ4;Ka*Nnp@٣hz#[M[D-y9G]wD2 0-+ndxodKt\""&e&wl&k8 '7E! FqF|u[޸#矷l[HOoy`BNkwT'?a Fan*ZTO 0gG ,Wr`aɢl*R+ h/hU?ʺ 䣄j|7vq%0Iq6$[҂eIO؀p)H^!| `m8#l@^˷ō } mS6DhYT,,!f#gqXqM mCcޮ_s~~n~s@g_QWSd:W>}`=-,@xt@bI I z@=8 _[cl4tp'sKمwD u)*<p۸|;2y(hCNu-dűz6&f&`m8iP &uqҔ׶,v `'C;LYsuR=тzӞx-m0._]kw)#^lr57XޗPAO23D5D YNX(Fٖ352 h'j=^@|̍pB>6 Cy Ar#/hGA+q(TQ'.XI6ER: > N7=5<\N *!Egf<&uWŚxPs14E:D줢RJf-H:dPa15l΂M:Aw:5Pt!ϸ]v*\y^h9$ow }S4*TZAgLGg*'lxR@7d*(J"ZQBL6-9$/u.QU1>BW Q βى+QYkX IIE:g<-:%-Δq2)CQdVwDю.h"&k]SJ@aܫD5L!ϬÜNh!D5hF>q&$T^H̏XsvqE^c3P?xʫ P)Yvr8+ ; ?fJyA"`a %̹N t HNm7;<л0m/C=!})_fX`T"KWR )<+לp5r~Y`(ԄOi}G|L/v`"QʳR*^#AuEt#=sA祝(Wq"}` .3>{ԚU1<3L]_QE~ns2 /L9j{oZ-?$3xכ0Bz<Y*/ba*ֆU3[LלIT%Ô(~;j­>d3 *ҢhaZc4bfLfb"RN̮$KܴF'dJFx!Mx_vשh6蔡B'nz HUOPĒ/,޿kŞ ⡨Lcgfܺ27,oAȶU Hw̔-hvlT".E|dRV< WG^+WB*yFIjNbgwȦnK{(fAE2#w1uNdBbd$1R}MP8Ӡ *+v v6`= 70[GKU4?Tكbx^sdS!ɼ-co&Yߓ_ȝ}#a\ KaAL٧RŹ)f\;2:j]z%bL&DrfVܼdis-BvcSUw @8,D pI?'e;ٚ]%R8.ϢŚcP`ţDu\]4bťBBDc'ٖv/QQDvR08-lyv E}W"#޾Ͼ層]]74k=TVH^_\=`jնtTĸ 2`9{5L>8>}wʀ}<=~l'ho1.㈍yU|5+fjvx"Ux̓^iڻK䒥UPEe tRhL'2W0'딢]Z"ϔ'<?Gq@gE $g),U jyfҙ~v:XTdJ.%`ԼJL2Ue=U#(8 vʤ1 U&*.HeN6ښI (HXK{UX ?U4[c/grD&S܁zb#`7O'%TpM幋kB [4fOeM̥ ̠ #@{'xJ7)K;s''xԀ$}s|*HUі*%-RW)?L ,[eCồqϡ9j2:ĝJ2Mv(HkR768vd^KM[{d'/ؤBюvrf /&tji<wC *@.oYW.%8.Ǝ+L!9cEjFlJ6WpN:T(NkTFe'ųf:^1Ō4L "覽w#_"/Vɱ**BABB XjpҴ"3MWA+{*đni!sZ0 L Lr6] jvIq$o"p5Yk&I'ʶwhn%e![CsjnmMj1+sD@k;ł|.+c>4{4:#5e.x4Vf49BՈ-c ! OBj6:]T7׳Wڨ&p2"h@=z(-^D@f&WsrɢU•01 Ɓ.:;uF@"\FjסC I$:G}9~ց+0A6Ϋ7`:j)H'lW(1@hSq:B֬N%ѽl7jgZ0乡xg^ܷ_}_ۭ6a[ȗ  q,D)7@rL!v|ٌ+Wm[p D3؅!z,h65~gk5_ LS(*?W >$[PSrJԋV@j֦5Ɋ- ZZ  (1ZdDCe  hR<z#@ g*JLoQAC]\(Dy_t¥:1s&#A9E1&YZxTژ9x\WoDiݽ.DW4Brb Q(|W5M`\¿/#JTpÜ<J9=XX5#!ߚ*G>z4\>VY;KoJ}_)p1A0s2锼rṕ؅nB"ՏO zefySڼ))Ԇg8 iV,kNN _!c ;̛B=h㓻]~**<\pvWymA_^-AcA=.9B8 &) pꞀ>n*a\t~}$BTvꂿa;>/^2H@]d /\m6%q%:JѮ+5UXYo*r ^:&NrM!F #BN"r&5c6szg AAۇ&]io[(""^CVPd-Wf^m iHY\P¤z@fjel̵_GwM]ȏ[ *>+O i`j aLcJBʙB+P&kPSMt* } V~uḌ `mИUhFvCuU} Q;Cs߆)a̗m^R2TJ@StX0m)'1 C@iďF;^:>yŦWYޅٸ74n}~ DFL GcA$Bi}']@vu u2B4|pmʆ]Dc R4"]=]8a/r8YHwo-8Nz|rnA(4M~*t2_hPb,?է~RHf+y&2dsNdN.JRzbDْ<7ջt|@乹]J{rW %])ŒK9] 4}rⰉ|NoUϰmM`MȴgmJz})mr~W#?d|A}UWo)vF[ٶ@~@Cw.{Rٹh"kF=jDL'n;+SqQ%f0C$dG}BRጢU@E;iu@^{}FI/˯ű}|aG1b p K t&]CYCQ4=:t۝>ѧ\g䖌- Bq{ޛp8ԇ v=`͵mz( B|twBB[^Ơ{}iP1 >&7Nz+PBjsӥi bfE12l~t) 0ؔ\,-I-z':SmAˉr,J(ڗ:BM׷^Ȕv0rU_wH 5T󥧠N)+`iNAr,IYNSz/099ѸAʿje BDCsk:E6,H:HCy )h׬+C&΍+Aɍ.;6@py8*G |io4^"-~?=9~x6Qs" K ~Df7H/.z `Ar4=tӱ uޑ.cYeZD%yJn@5:صmr͙VW p̌͛/\- lPCk_~ WYlcUnD4pVoWɚTwFZ_/Mٙq}v[J^]9;K|:dBAwz@YeGvmӾ:FWU.T0Cq}}lc{ۍnIt>7,h^35Lmj}|"9@K":Q|c)Yg<3r_tyamDP`51]uИ,[)vj[N coFAֳVFYX<+؍5ftov0tbPnr=5VEM~&[-'')~['@ C>k-Ki(,/h5pNG4^VԱ3h:zZÇk(2k`FiA>pJ2?w(by P(8G[QB.17ێ|ccOڢ8QEVPZu~H-m1Tcx B ja+\Z(1mWz7yҧF򵷈a)Ɖa{^EuN*9]FSPڏ!)}"hkHg)~󶀁e*r~%PJoX$׋⦠kIZpn)y DOKF"^ Vś))ƹmg/\KV%2E1EpM+V T0xK3S n9o 0{KЪ8**ۏ^t! %srH AK/:lQ@ )ovvRL&=&_un7G`@>U<9O*Ue]X8{fc%d4X3n]f_l]} aF_^㵩ߵ 4QMʹU秛35Q.u cDNGJēha)ɽ:$kl?9Bz~u=aF Vn_m~عo^u CL_) mN1ٱ{Do̵I &#Cw>X؏7ՔuQR}~[ś+*xLEg>ue4r vsvrlu𑘱Ivh"vh6]P%JnnvbsJx/7MxP( Fc-Yvvf23oN[{ n (}z})8vzܱ#9:R68$6V zƽt@y $X8-g톱 uMwo3t_y‰ż3Y:c}uDq M_̀>3FG| @kXu\gh[_ɘgp Viܬsm'}kI-"_2K)0 y]]kfkxk:DS dG'7>d?Ih5וїVK/QgL)7x\XUd5G1OӢGx qOLW<^ {l}PeMަF@)3V زw}P(1͉#Lա.5,,γe6®c/ޚ7~p\2|B΢yq~r5GEѕѧ?s2Dg")[';|o#'Kv2%M:`\ qȝqn]}0ǝLcw@2qGiJF-@_uuXol<ԅE]>J]to924y:Z%:|dqAրTD!8!AՁX|o}+][#0b 0E8n|::mX WO;+ʣM R!B7`Ɛ {s-މϠss'ҫ4P%3v, ; CT[/O$y.AUu=J^Ϝ۷|ZV"`1ņQ Q^a w{: 3DUY͋{)+_ȥq~> ͹T{!qya[5m;EŮ!8[x!sLP"{Xb&_SKg-YC"BN9qLQcCnbgrf]CnP:=j4\ +&oKO?|j5.ćP-ǩdXtMvPϻ|s™j٩Yitԏ~e~TU(;蟆1UU ZU(%ƐA,]t3gCͽP "@} MbB(X:'Sy"6lN;i {$\ğי |;ݏ"A3eί+i\bxeh(uxxXj*5 `4<SjBk%|5$7x8jSڱ)׋QkF{xyERIF&:hs=btb2JܨO-+́RJ D\ҍ/_vՋo(dž:T_G*#]'>b#~(݆?`"NXQylF[IAFMp6O3^-bqϿRŚ1F2XT('!ڈIM)`(3S.YX|;tSf5)rlW;%-2?WBsȽxkY5cّ }"ꂝ>g65LY ߀RrNeժMWi#e6Yn4x"Ifz[@!TWJfBT:k*ǁR nn +,m Yl7QL 5-R .pXzAny@+!9J|t*$QA9*.7$jㆯitPeuj`Y:3~7~_&Ц: -յo p3-}& 3qn|Ux꛱4Cfn3l2{ e'ɗ4|E]thx~kClDt>6 v;ĩcWQ:r~!D\P 9LC¿R@̗ 0+?8_CsI$:sP cS]&rmx>"#u!! Hrl/u4'RO ;=,$$Q ?i8pNE& (p~>M-c|aS(o ɍ1= =e*ז'K[ͶʺOɑF5.X V#/ `\^oBʖEPZVdY Z}jcEv : Vhn2s 4~Hb  <-Zn$hS ^Wb=#;6bĠYZW(2gFՈ$D4@833%Te能?!"ՋJtTGAuJD{Lc?fm*1|XꪔԚcAo`|l@^1U,Ox׋A\zM$$$ ԡ{X!$.XN$LUt轪+6:]"$SR9!xzdER0Dnii˃5m\G4jo W!51ȳ(W-^PX !3`Xzsk:Mijvi^Bу>Qɦ(k` )?`?H:Q5O~^싢`yԆ5U!BN-䗔U^aSKCb ؂7t^̽࣪at@b&zvuIإ6RUvŲD?D@ܐ.V2F3U@kJ"rz1~Wvՠ5EiUb=< K'F*D;˂Tkfz1|M P`IMbAWīU&ng&pf|u>i@t]&GZ K/}^'"BN0Oig?c稤=[f/ԥ߬_5 ,3߿KK2Av*$7&($`0H4H  - Q0H`!{pn0H\(`UU89eB$,0_:Q&:pLҲ2U:k $p9a:) Ϣn:>E: | L@<*F048*FyB&P&?LEf/(!dL`*F048 Tü&ଜCK,Qn,;-?m*qAPTgi}!`gwWy -{ڎ2f1}9\ÈD,j^&L@="& M񮩹Z=ͥ Vu5>Uaip"66gk]vRΊ~o%^%/xEkPi&+:ithN6ocP P0898 N&,hj[T -zv7% Og O0_.d*jjwF By#rd&O#sq4&mL@EY&w?>sM໗@}"& e1,Ae>[ZGm𱷛# SF'b ͋[nm۬v?> KKL`*F048KMlL6FVræmC_ ` T1r>Xn>-h\9`T1r>{0 ->Uaip"i,0Hm/L R#sq$ A`F9\Y`xHM ]\G؁&Pdd22`. \@<0`!{n% w_ pzL`W2 &pe0+ \L`W2LDxovne,z}߯Gʇic^(Sp&&\;.U=WQ p׊:nl[,O.;j}Xg7v5,ocLw3r'XGV^qnRXGS5ϮLQz3aq\jİ\A=uNe&`6kMU^asѬ9&znz2+Yy FI}{Ø@ Q)SU8̔W8]xF=4Խ"b{4uN1X De T0w;K˭㲊k[zC&GvF>;~m]mQu7^i~ϛna=m\c}ib8 L};w&z!2$hM6@*po `+fzFyhKkpN &nQێ^Un65vK@XW4 1=L@*Mqp rNu =sj? p 0fPM4RaWpܤxo4 *(Tww.pR@ՍPb:SWs \;D 6**$1cL`>BŁ\,j`.ɁM& M&̧3&L4OgL h2Θ@ 0d>Oi5wL'uvh2g5?N!bS@t> Tg@&:U`̧3&p\0|`̧3&p\0|Hnk^ c06Ey & M[ A>peDͼzniR$vMZ릦gXhY|~˳T ݬ5M?_ɜ||lV]1J$oQ'$9=]o^T&2n q:+_dL:֩u<_Vъk'Zrdu߸rA& ?xegOU>m+ISR`lJ:2u~`Dg-:ZR&aKxK}5]DI} _\ G}loVG-D۲x\(R+Keyou;^dž>r_bhrFx7&`uvhݟ4V.M#zް=b.nsfaFcw'9QNt8y[1=; mf(JDK}}#J@dK"^Ǘ=XDD )ySaxQ@rM*>ϯmryD%u4:L=Zll:;V|CJ=چ^F}p>@rr7^N{<L%O!ߌ]KFCU PfQX/[ ĐO/ 9hA젪@ RYh2T^Ϥ&lp< 4;\,w8^p6{%^ 3pFf@7SP$(@ +믿d[(3cW'^ lϟ)੠J~(xiJु+JJ^IJ@67iFlx~}9ΟigO͟ZhҨ5_m~(u ηu!!\uOly;%^fbufCS;wkJJ$h8<΄ѽx\Ik߽/C]cg~/WCS 5~7 L\vD_J|ک?=l{J|~\vfi̺AMgL0РJ[rʢS;i?\QƄI] Ip$QRbQ0_AYȎQό^f헲p5T?*o=$3c4U_ E8LͺwD%H@ '1'o48>ZY,)oR%jin'O-dUCHN?3p߯~չYx|W۩\cɭx+Օ@,ȳPN+օZHA J{n)biL 3嚧rǍ/IvRԢ4%)m*?9J T $``d)29PP+(AnIcڴ$SfWUSi?(ɶ+; 1Ry4N [:"ےXAx]χeްΥ@+,kAPwf oh:ԛfM2 ;j!<|UW2Q~FD$%;X뿶hvƎ)* |K\Z߭HZPX( W^ l};g?~PX(P8%`+{J`5P){o?Z`V%(%()G%(@ (@ 8L 0>(@ 8JeD |ޚ@ou{#kKw>ڜv ϴֿt\ юo260nr?kXO#h{xHHxv}|C4?@-Ypcy+;3GK̼]agk02oΣn &JqKǻm?v{־{;^ZP?ֿt\ Pd.M;}-T9N_V(M|vht e|0dUK}WUwa;cv~k{=(sZ%qn;d-4\>~P,e>Io|2ю~X7&L2|B&T2/Qfe͸Pd(~k90;!\6V40-c֍+~Őȿ/}\%k+3SP^yǕESrP k/IxO%BHb&qL&ez]F-TY&U1KƝIh4]d+uY5h~fؗ_ϴ{ڱ/W ۙ ;숸[};~Y Pw)eR#iz/#S2Z`Σ Oy' P[9oq}D7HJ(v )ep}NKqFjt;~7d+uY=n-%9c_)CY]\fY"% vglB6@P^^GFF8%` eJOQ^}0,wQ;h> _kO1S'rX[gl*@4*~ȳFS`;m_AmWN,mphZYGa]7v_xxjJe@ Ч$Z; 0:&.D ]}<4*LHYk!Yoz~ֹBSF $OĿ#jب!Ŀ\V\o #iN-TzWٴj{=02oΣ]EJ?ni_n7Q`ۥ#ҟCN1cxCkס޸nǕP #Ru\}?$_g1L4?[7[~"sbƿ4=\C[.\/VJeD l(SP^9@3@P)R`i-0P%02hV%(%()G%(@ (@ 8L 0>V?B)R`i-0}9zK@ӝ}ovxGӮvk~}dc|ߢPh,'a' h1 ^1az⺼XO*nW}xC՛6huQ?0fLsK/Ko: 0 a/ly &#ަ?J)wo{i`%KxJc)N^S+>Qu̫ݗHgbľ)?'9J|;Tm?0r%ח63jWb |B>g-tOACD;MҸ=eo~OVJ]rT}]5`^'g@|3&~\33?cXKOStIOT_|;j;HI-*dcqɭPF<[&H}OZO7۶_C={_K?+5k5*'9M-87y>\' 8_l>^Wb |j$*zE]R#7OѦ㒭F89rhũ miOu߼'wK?wץG|j ;YE3%G@;. rq/F_.XXfnG@hEi\wˤ!Ly6Hg9#_FH@- aH;gEגOIDE'?G^~m iE}R1Ut(-CaUWE< ~]}igI|ʳy%aT>: 8hZ" %ѐNQ1q}'[N h1  |~65I hmIMມ4P2FR \F_p9_ d_s~P9x繼$};8OԂP8\:@v7b})E˝J {#oE=\G=yU74. G7hƩU5 i.Tkȼ&}ow:y6d`F oc, Yb@x7!d2- x%x8(!^ L&g H@HKd$`2L- O[7\ L&g H@HKd$`2L- O[7\ L&g H@$ާ9Ll.gG&] k9-50LWbLЪ{<[6Yw;mShHϗ9cF&b@x LEz>6|$bQ ->kR?]bpH9F= 8_|dhk\ϸ$48QV5`R>AGSͿC_)Iޑ~1d ~ز]&1u~㎹z7EaG®1zD/WbIACOl` 4кM)x-kH NnpߢxBrW%#Ku:++A q rT`? rټ+.c<癐~B<$%* O[x٣!b*fE#X 8@襮Bύ$*A)C>]VƸd[/8rhũՈuhz$й}ߟH_ؗ'<0Ms sI[v<.s"DȒ Ғ@ٳϜ!$ŀ^ =j1-*|$ϮDM{H1r]#m?vj:xL<'&hkV9Hpn攞=y-_4Cػ`ʏA:'s9o%P@Z &e+TG֠{l4)``ɴ$o _Â#%U0L&WbL{{1t "l,l7g>K1g_8`2d&1d2}_GFlOZg>"7Ԍ;>ʐm0RxkHd2LM x%x$[$8~eݭdž!9 4'}20L&SS@Z /"IՖ|j% H#U6j|rQ1*20L&SS@^~ f:20L»4M `$`2L. O[7A`{#dt h1  ܭi1`\i'-K!:͟gzr'i;pĶaH]v,CH,8Ah6;Mh&ul'@(d(ȟ|~zry5.wxc\SOp^*d\8ph d<48&`4o <2&UO{^:'oZ u?-?e[R!{Ef*i3ѓɫ!q =l=NM)?oZpv4"h?QWOD~Ҁ[7 VjX|낊/.Vߑ H:q@W?c V\`+c)g!>(c̝I X! x[eES 9V7$)NJQ)pL@Joec:wpO[-7ÉKN^GzFޟn4L pƽc]g{GPL`_;t\IpL iţ*x.L.ԩN> Y<()n=;%^H&d`kԟn?j7eboգn`C1t.Ld]WN&AgYO 8& }EeOG(e E4K!b;yrl$؇BOz6@!(f՘zpWrC2&IvxyOΐoX<-LOf&0b4kvin M|zȣ=c:|3nasK;ȟ}%^?W=(=$z~|.XbD6 )\ˆnf\_4`.1~sT w7gs! 9Vx5ލ (deL@P(cVH,5y 9:Glka^Zɡs pL@J07CX_juSU+"Xb<e Bl8&`4o? @0'&B5+ђH9ޕgE#2Bx6ҀL`>f.5d}|REV&P(z8&`4o4J fi-t9H*P( E=ҀLM1Mi_e]"ee Bl8&`4oejRk&m鮓@BV&2Bx6ҀyL=;c oލ]B%H780V:^&ŧԬspœ|ncru&3rWϸ erOokY,n/ՙhT| X<#*r~ )syC5 -n, luu\M2C\?<v.?+Y :pH:o@?l# QgP^5a2.vm9F2qET[ FpL@J10hdy]$!Nx @ JV7,N[D8LZ XM3"=ɟj=X8$lWB5qa<8~B`gnfzeBbYs+w2P(t1PYkvPnf3õ_I[ξ86%?6o`HGmyL2#󧠿ZO!Ox~=Cά?LG)׮gwj|% sT| HiH&y=43R)ٵ{Fb Xg_cf '7n8\6e9-1 !'w\iT{1.L qI/æet*J!`.ϓvN3FG`eV~*y4`.3U e BB` e Bl8& ۷2oe Bl8&`4o1?+> pL?a8P|2 ( S@/Ùw2Bx Ͽ g|SBBP<2B5 (:1L/y/rS s~r=pUws")/_ yG`+ j.yE=2P }/2E'^ l{ @5;웖e~yn:ǝ㟲gy\ޟP9yl>HI󧐟w!yr ODr̀FNa'OL@ Pق* qW|;$]&vt$R>ZC9p&pBm'R)ķb;T[<.݅Kx&'sW=qP&D ީ ́f3哌:'k!b4ϓ?~؄FSlӼQZ?2=\WǷ"?wLgQyXƮ> g1ώ":wT|b,sRyVE :˄ްL&Eңcbg/?R&ŷ0osELOڙ 0ԯ2e +ţڸ&#lɅ.=)2{TOb|7ķI 3,o5@Kg J'Cޠ!.d@ l>SSmR> /jrd'%5w>\HCMK|C?Q[C|;{1mH޲]rjAA4)BNPHPbƅ?~(Pt1Nwxȣ=: vMV?lrsQq.6=.e '^[|IRdA-od/-׸w_CI2NA\gT|ߍw3_'e 3BP b |(P([C P&2B5 (:L@P(n eN(P([3mwCBP?{&@BP(M =Ko<B2xEtfd~@2h_II[{ULQEPG?Ͼǵ%>?1g\c8YS}Y1ֻO͎o|В8Xm;(J`=<:{~ 'hóOi8JJ*ar:__]G?_9V{ڏ_u_e I0m?4JJ'Ն~/W=19"1x;Ήߜ3C :? ZGv3Pe 'n)Pk/W7ҲY_ %}iɃO,*)fռA6\Ȩ1^Qme_&THE̟%pN mI SypGWw4%KP HN }F]Z <{qm>;(MZאJ -ba?nW6}sȋC~8˭EήWQ/Fru=*-I)>9l\~Lv>(Y چݢݒh;OE9 .T8mMY/``1h;,(mu=o- Vg>  J@[.Š4JB] J@s.Š4JB] J@sWV'ʹg߉|wØ3sُo@W/š|k<Oَ}+Ď/܈7XȏX"Ĕ~<>ͯV?^w,J`?ܟN(W旆AF56}X?j?>m9j7131)Y*`J)ٗm]z ͐sD\wpqf{IBμI1gׇJCtXy].jO PeBHED/9Y lXmSG̟ޕ}_օi{Svjyj&TbUs.gׇĔѳTЮ9F{EܦqmtA3~/NVG>ȌIؗ5v+lGW,+W9Gu+͕@(3~U,@%YJٻk6}PnJҤq 0L :4ǂ֊/*5]J@W&%Ǔhr%RۅR[ +*Ah=iEXU{~l2g)xFFE%@b>`Co?V;},qm:uy*Θ7s)0\ήg%*J`^-*y'uCm?1g\c8YS߀菳mZ*#jںxFGo=_-Oʟ;{dF}P5?1@2}.V\7EewA%(USWrr|N / Ã.kl %㞪C7?i8D^hQ2_~ W3҉2dYDW7 Mì Ojy^t^yF@%T LnSpH\1[Ь$tA юܦe4Rں'~ؚ,l`aƶW !){}(3$x vA:~V{Ǎ^SzlQL*dHSX]W7"*)m^ˑ@!PobnFGGg_Z]W )[?ULCʑXT6͊>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 5 0 obj<>stream HW[wH ~W) {rrN M4 x^>8x nMmS+ vZ?=}$k$yx gg t8?=BOMC%ާno:pp=>wx{@]pS:On=[ww\!n]e"/A~3g&vCytj<p:fqvFH\R1hgsk ټ= ڱ"Qv(haJ_ѐA:aC X!wb9-B AE@μ_\Y*L'B•$ /G\'l(_&53aXR^ȑJRG5ㄨ>ڳR FmiP%8go?4Ir,./ av@K] üAԬ-TZ rzQ7zOxA׳~\ZR:1x}rw/NOxkع;+AA3 ÆoS8QQxs]E;"OG?b^Y֏H7˝lvlL8}D7wɡv!?0m=B 6 TEJaA?Xq4IS| ;O0! {0>n*~E)x&M}۟h" q놌U}զpfrڴuirM5IȫIFwwtJ|u}JAd( L ;/ɞ!މ DDyŒUGeZ$9zӈsNL " ra CH(f*=%gDD4/a̚\T!*y=0j >9粤:{))HS&A+*pT}_~`I Ҹ}rRj[y=b$SeX䋄"}'D@&E.(U$ui>z#F/o S%ҚJ@Yk~tdݨcWy !cLz_քM endstream endobj 6 0 obj<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 7 0 obj<>stream HWr}Wt ŞL&e-񢑘RR RB 4|}N_ j<$Ǘ/O/Ȣ_=9;%tp5˃lf2- h6q Y$,/ x) ==IVVjQLbT=*DiJOPe=(UY?3*虪32SS*U@dJKbUI1_OPT&M={_cuyX%UJZ6 $-w8W1l,TQ{Y*a 'sIoR5Haz}H*;懣P<ՒOk~#~/M+˃[gXRnի}(4#>Iy%|uϾ6G1xb[dqԞVߞ7='S21KyǪ/JǴ.1LJ/ +4&ܑ\((eʋfM72S+W #&<ZnFIiM[DzPvܻ5"Y'z+٦z"ƽA`t4ߞ_8\\NOj;@lNLھ[oË UIΉ;ggMetgTlpjs[Soz*Z+n:)ycgv`n,knCĔ󨂃yT $b:T,wn 4_bqR)ܯ/! xi.'SXC+- ;+ׅ >DI6l56Ys "Q˱q{AhHgC"ާl(-ۗj̙1o=VKko: ®kn$SO:xt_4ᱢRƖG>;8ḽ&mkRcNΑђu. W IAg'gMux dxP#G虠k`7G𩰹(WUJEghbܰ;!g}8=,p`jߍb F- B|vq9ʞ;|iw4Cԋrkd5^&kON"Jrɇk}ۮyj vV~isp%0=?/d1cVuf&P`fvuzA#⫗іJeX%Ww>Z8қ4.hYU>ݹ A nZ(",U̲g^ԙ_4fE{~D7OIicDfgD#7Wt Pouս眍G] N; v?ُZ^[%+Bf-~7x.Ɵ˥SVi }c *?@"f OyK޳ UW[RbK]Aږv2D.e>1:EuFe=݅D]/-D(p )$4PH%a߻[Wz0%g)(SU7@zu G?Gmnb#/<_-|Ί &P7ȳ` >m ia&]tˎ;>#{զhsE 6f+N`YRO(O94>Gŋ8 rzgDa.8"B|}B_$^>\Kjaso۷ɕf6Je7}Z_K:-'HxfUL9xY?jcM3(ŀ)S$a5BAEtѫA '';'lBwU6oRκLEW4k#uFeިE'a endstream endobj 8 0 obj<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/ExtGState<>>>/Type/Page>> endobj 9 0 obj<>stream HWMo8Wh1!Ivk=4=(xXYi%˖a[3p摏z\1'oL. #ޝd׌*Sɽ̈RZrpΨ{# Ř#Eo v1xNd4Mi-¥EҊp~W%ᢞ hƩaC2"}ڋ-M(ބڳI)lQ/iEe6P im(GBiOϝbr-!0Ե!fAiV-z<,uEn0Mx]KAEuT}N>Fl _~4OgXb^*JҏX:MgF9C )p*فd;j;$cݒ0SOpJ6N/3(K$G0iw ,""րf5_e@Jk꺠VipgDZAB  C[p0ۢ\Ud6ztTX9Ǘ HTXmcir%%]S3TKd (žaPEjaPą Au&#MCQ>(+$/ˢ$,yp]pL7OE៖QnbX=`\℔oTDĝ&s ,?#O8Z; RPeQVEjeQ++m {T/7j]o~,m ' erN (9&PdPePVEjeP~4 2y^sv!KHZ #"^ӧÆ-v1}d8 jpy.? VxZeEj7 qU5}#|]FzT%thm"ji 4eAZ޶Q2YHmY+byPoxׄ[DyX%#I}`735AZ&Ƥ}nò†5zYXճ663JӪKAĂ&Ĝקfl8‘ t.t|3?=.K؎-jwqxA$No$EouیKGL?[{RNj51nowuq o 3.Ȏ3NqaQ㎐n Un#\:v> endstream endobj 10 0 obj<>stream Adobed     $$''$$53335;;;;;;;;;;  %% ## ((%%((22022;;;;;;;;;;_"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?LO` -:>#6C c<ĺ5d8l>nFxC3+=8?ԀX1_h:Z\<&q<7]u.^lQ OSk6b]iunk<Ķ|T[7b\ܚ[+mi'pÌm2[k5h] 2Fx匜x8֙#Odǐ]JDԼEbKonC c #&"G9 I/MfJ*[/0m,4kǸ&dnl;hqRx*kܗ&mֹvD8dN?oM W*kܗ*'p>//K& +/n r\<7F48AN$=7Z&/KoʋE  q[c] $ 8 Cʢo[+q+ {*5QI}kv ܴ髮=}}_r]ԶMmm87v*$"Gͱ}}_r B<#>KoxJl}_r_kܫP쯫co[^Ge}[kܗ*%;+[/W._V&[JO}}_r% p[/Ge}S_r_k܁ B\#//@._Tkܗ BP쯪Ko!(KvW?%}%;+o[JO}}_r% p[/Ge}S_r_k܁ B\#//@._Tkܗ BP쯪Ko!(KvW?[% pO B\#/ BPkKo%;)?[% pO B\#/ BPkKo%;)?[% pO B\#/ BPkKo%;)̋`@RO'9-n x5ָ B_ o7fnӫCD{AXO{CaG#@uP7~ K73NuCCurx~%+ʫĺ*c~ox,zMdtCkXI$T8F2 pdָ7Zid{A*&?Wk XOұYR4̮Iɍ1<"x6r0Y,ݴdliye?R5T/!_p~JL9,y$@+/-xg~UgtѺ>vYdOcI|';ɅW릲]i'tϯwE[9 d\e niFX(G{>,&Y=_epv=߻]Y^ȨȪbD =x~R}ȣ񽫃'd9OmޖG[Xg zj߫wE/߿W#6 +#٥髿3~dg~_{){|+۟fR}ȥn}^^#;KFw"½izizj߫wE/߿W^/ ٥髿3~dg~_{){|+۟fR}ȥn}^^#;K>w"½izizjz&qnm-$x0In}M/Mh~OG [1.gQ k}f@ۻhen%fR~W>}45w>w"|߯wE/{sցy7_H${1VXvޟ}Fjc4L6X2½At,ָ@ [7&Tn޽V$Sy` %n}^Ixbbc>nuV\\2>){|+۟d>^;K>w"½izizj|߯wE/߿_^/ ٥髿~c~{){|+۟fRȥn}^^;K>w"½izizj|߯wE/߿_^/ ٥髿~c~{){|+۟fRȥn}^^;K>w"½izizj|߯wE/߿_^/ ٥髿~c~{){|+۟fRȥn}^^;K>w"½izizj|߯wE/߿_^/ ٥髿~c~{){|+۟fRȥn}^^;K>w"½izizj|߯wE/߿_^/ ٥髿~c~{){|+۟fRȥn}n%Ks>bnHQ$+{GedtxdX:~n5ޤ_UвMAv>mT2jqkwwa Lp O fǫIr`f'eYl,=䛝-vct~}g c-[ik >LTj75K%W}=;Z1 DKa~%ZH$I)I$JRհ@asK6a.ubvrD+1ӗ2@WX3ka:מS񨱸mc}u&k7LS>.L6>[5K3 ~#]~[>K1m{7y5tn'8Y}ZjW5̲SIs]-]t"R<ޯ7ܫ뵯kucRd|||`G7NnsHUZ`sI?7@rE}۳kDíK:m}vEg>kcY!Y[X6Jqq8vaC1./}EknXǾ]ѤTu\N'\[8>.iVWKfK*ve5`1{<4}nꙎ?9w-`oͥ5ޔ}G佗 % c8_zMXSVW]\zmlqk@"\Gһ<>ocl7nSK m{4,:f{zNi]W[v9`}z͗4k,ާϱ0UkuaK|\[mtlpk V5uu{jcry8[XQ1zGW[$Wm6]v;k|o 2RkYcH"uk,mu@$@%a[џ~M3qm: 7?zg軖ेM=_+t,ۘXWaβ'WNUs^ ANtcѵᳰh&ZI%3y k?V=XjZLv:Tl;}RJ#nN> ^]9%jOէ/gs s fx~:WuٕYe؁XS8m?s p ϭWcԐxNg,INI$]YRkU5 qi Lw _՝C.k,cA-??gP׶g26`Ѡl|/։?Lx*XLӦ1%:څ\A`HYc]c#mnVKgRsi͢H}~'VO47_hm$-ܓINI$I$$I)I$JRI$I$*Uf_cR15*s;ˋ=78A:&cל_Yq,ae{cfa`$_bԗrAv.#*_ZúǁgYwa&z]qk 椷DH짭umML O&5W2(Cm?(5zd or[YWi>0a.k^ UYo5bs_Z jζc h6YdR׺OНѬB2rc, om/fd¿k^`x\.saúE_xpyRS^ UYo5bs_Z j .q>BJF%ɍٵ [ni;KC]{ywWtY S ,nv>oN6SmKY.}{ #eSC/%$y5$ S*x1: uFu]lHJlcdWKn=t jZPwf丶v@$}* Xq5s[Xl}Ʋ} Gۍevc`ˬO'??]>ݏeuǘcsW]̻BgJcZ繎9޹ǻޞ0ȩku#M$~UUˋA{Cm-h"{vANsZӡVC m}L$7տxiVp/P\?E|˟s2m{͖z6=&no%:=W 1bQmZ[{ln;CZ9U>#z~RO/9UKs}\\/&BJ~U320ɍ.f rvֱ?eiI>NժZE_47؊jUYC]H궺El{mfMC^fvtI-f,n{w7}gi ;N_WM/s-p"= w*T 3*^*n-enwkw7 -TokW? b*ɫl9VN'E% {n]zk oe|?cĢlٜwӶsGګ}PGj_WM/s-p"= w)z~RO/9UKs}\\/&_PXTYe6:^*549IS'%X3#2.`!nk[6T$Z9UKs}\\/&:vMd`cW]WEκ]3vԺF؈Κ_SokW? b*ɮЫwWԝ1s[C{|*Q&擳x7rN?Qub>᫟c31+h'OT`Br=2 OU֋~KێS1%ܺ5AW]:~6},sj˦kpmhp▪xoGūrЅ/}C*l*ö3K<0^UY_Xz][6cS/ [vm9)j3s}\\/&_WMX[M_<{ޣr}qدa2,cW6;ɿi6Sԧ`kX~f,q: ;VyϯM{(d5@nd4V_\_T}=S[jum{H1?ЫW%-T7 g\3ZN~0N>UFۍ-m}j@w9St)u<>Ɵm-eVg&l580wg_f ZާK/aq3[}.@ U8?W0?Ww|N:]|*pm7 E *Ny>2jȡea]d2 5{Mv9e`GUKU<_WM/s-p"= w+ #߅cjܦ`V]~>(nICL#tL U5?7؊iokնurLjuߒk e=ķ. CnbuKڲcC"`s}\\/&_WMu__5P+roso[D]c42Gi!jW? b*ɥ9UE_]^ \ޙK6r1[cĝSed߃xM޿S5?fi8U9ZE_47؊k*ĥUKU<_WM/s-p"hq%v1Ƿ!n{6?u -c?>i<}e=`tqq{m5;띞 ܵR/s-p"_ZE_5>2jȡea]d2 5{Mv9e`GUKU<_WM/s-p"= w+u[*mtfg֚(q==c&kowe;=H[}dՑCh»evkksks[22S9UKs}\\/&BJղc*ucKSqC[l2Z7؊iokշLmuBْc̛}憽7Gu "Z_T[`ƊؖFNF$Z_WM/s-p"= w)z~RO/9UKs}\\/&se{{hF].t"4+%Yl31(--g7sT`nZ9UKs}\\/&:OW}FWQvviƆgico٣\κ *ĥ_s}\\/&_WMu_11:N"[oPsiUm6rfSxql%s-p"_ZE_4V}e=`tqq{m5;띞 ݭ>2jȡea]d2 5{Mv9e`GZW? b*ɥ9U]GW%TzVgQ_ۑ-1ۻXN_WM/s-p"mȦQNUYe8ξcj&u^HjȺ2-,mVc1zv%ӑ;VE9UKs}\\/&BJ^_SokW? b*ɭmX88eWm_sWIú"uGu6|k{,c k5PAIN}#_YH Xګͪ]qc?CwW[Zm, ֻ&2\Ƹ\lۺ;6[ukȵ:u|ͫJl.͸Ql@sj"]$iIMzAϦS빵l]P.. 5 O#mՍv%6fh 9[.4Qڙ)!ޮE6Cc33764INB>gш׷׭-j+bϣkq-Z }W8/["ܷ2ֻpǵϱw6j]hɁH{O{.eA->%[fmO`W{m-1]:x$J3jPz{cim,lڲn˦+D:%Nm4 7=m5[e͵gi{9ߜ4FVo~gKj*issٖ͎,cZ+azvoAVu.浗]Awcw кJ뭻Xᛞ㵙 cdkZ )]7~Y즋r)QchmcˍmۤrgM5_f:~6}!ͫ.ﭯ W>Olz~7mݷQ=Sk#O67ѱӱKo]-=pbcSF=xbPK~f5ݖS=7~GRQژuG6suX}d@*V㛀ӵ{dvs\A )ϫu:uY{:SmxUKr;> zCltٽ+o~ǏV?wzLk7mJNmXbS`qvmƊbU#MY9c]Mٷ*-mVK6~i)0nm72Feo6.e~ X~mLW"ocm Աxڙ)!ޮE6Cc33764IO8UVw~Ƿ5{oŻ:*wC98zynWP:Xk>}ޣodϤƦaav> ?6 wMW6 .<SaBuO4ŎsviB6mY7eXpv‹K UY'MX9gRkYuv=yН 1䒜{Y_ d5dWeY:ceqfG*~uWc`c|'5w}끩 #qoͫ:]PsZˮ@;~;΄]Y%SosmcK:9:JJg0fN`!c+M82'Aged'۶@=?OQͫV%6_cYŵ&Je^G[?swŮs=d.bcd3s灛f=?$h,n ڰimև9l"cF U>m8>4c#IN}]#Q_p Xژkª[1 cOocX};'Y1/P7z?b^׸c'Rk `gڏt#w=֟,7Nۚpcglڲn˦+D:%Nm4PSypm-qcCak|VMtpUVD mmYԺꃚ]u:ݏkt'By$׳V"ǹk\ù.tϊoՎl,v;bՏO~C]p57 !n+3?KٮCUcP^eKwWO9:JlƲ ki{A LIWͫhs;-f;h`$jZhNYéX'%56VUq:;%t*{K~] rhh`}cۑk/6a7z;^@KCݽV5ؔ]q؀nDHmGd]hɁH{O{.eA->%%5:'EvDU0S^VQaZk6u pwM6XL͍Olz~7mݷQ=SoHWu+Ư6R*m:jdvUVw~Ƿ5{oŻ:*wC98u}[RUmXY5ͩkfՃKn9}`R4OJl$fՃKn9}`R4OY9c]Mٷ*-mVK6~i)V&g:kg{k9ޫ_o6juWz O{r0s{&ⴏGkS qvS:8;ȦChu,p&ffƞ*E֏T,ǾN[ h{RSSt^nE]# ?=uq-ul/ʻ3jPz{cim&fvqsӧJl,|nm}q;L{ x⍍kn:sٵdݗMaW -..uUdK`6>icfՓv]5a\( U-th*SqȥԁU̩MD:3\CvG KjXk+^^3:Kfd1٭h,)}~?n]>Zo*r-vS_Uei /t?nX=l˾w4h}Wg_V9G&z̵Dw_xZ>bVjx c>Y]aXy{KGlJXOuZGk>>/y+kkG@TA:a;Ç\y/}hN7SK>Y։uߩ߲cow}&exElq0=a2\f=aw'ܥtٗn-y=O|UMcs \%$dhX#=@McKug`xŬ:X:n[) qkcq"RWޣw֏E<?m5,}$f5JUmx~-k^XI}8jM7IU[Z&9_rqc}V~Uyx"쪷iF;GgWr)ʫkіjjoܼEQ鱛d LvA'}#qԴ4Ɛ8ܧ_z/GfeYާ2.kՕhmwޓ~}VfUx"YQF}ľ͏es c ;Em!bx%)~௽KhEWSk~YRi쭣D}VĬՏYe}Kŭ-t i8N|v1sx:w@S}~}GlJXOuZGk>>/y)b}hN7SK>Y։u7ccKkZ;왘8HlKc^92~~*5}5|%ۿSe~S?l:L._֏ٸa< 1kuW35x-p{/v>;vV<۸O8Apc{d `~y)~/dhX#=@McKug`+}V-9h?imyc'K5X/C@m#'q⓱j{<m%ǖd/W۾}V-9h?imyc'K5XNYU;ke3*<uuc^#CkZ/X-ጤl[FĝulAAy'yҪLL4KR_l[V?SceϾJXZ>bVjx c>Y]aXy{^&(k`{Iwci[Z?HvAȇp׉-8xO|jU,MgkZ%`_~~Gg'3ٿtg=6 Ս n '/6~, =ۿO~}/Gl[z5<KlH=[.VGS{evǾ϶ Gcc6Dl{߅cPY5T~$O}P۾}V-9h?imyc'K5XW}h}[oSsl6~XNkUMXƸ@xN VWxD~?Wޅ }Z>?*u<MvU[^#SS~wS9eU5MnxR557^$j@p$ xO1js&L/K¾}Z>3*<uuc^#Ck2oSW]V?5ʍ`R46^'f.( aQ=P6d%#aC|~}V5V o?ixc)[4VѢXZ>bVjx c>Y]aXy{^%Ͼl: B`oŠ8AO}m_k[V?SceϾJXZ>abӇ+ƭRϴv5]a&Iuoi aopOQq{ݶ p}xjܥtwwp>z?jg;=-]GIE[7Mn}ej iJ6ь1@rR:qsq&K?Z>e*xcl>XY8{K'GlYOmk^۫>`+W ځ x-V+ƐAk`i ܧ_zuZ>_e[ 6,p'}hE5UoMz2[#ԍMMlw]lI:DcKwZ@ )~/GgWr)ʫkіjjoܓ~}VfUx"YQF}.#fo{wETG,50 /Wh̫3EUMzc#ԍ ҧGj,ں_`2uOem/-mfH.@8b`uF(}_+qu?Z>Qew<1{+h,oU+5c<1Yii{<v5@ ;)5pw.l5׉ܥ%>RWRn%U vWٻUh}E? U5.Nrֳa Z<'#:3_*V,LFT>~s?,dh}E?щ`wIԵk AcXpLC_X 89- }_cK%C/ر )?D]Kuifl։ p'K8b/u1% Zc}g_cK%C/ر݌ =d9Ռ&3p$p>oĸh}E?_>Yxqu }m: fbᱻ"wi08K1a\%>Ձ>Pȳմ}esǵ"S_m]Oʰ[yMgsH:٧ٍCvR #~*"\H I1:4yZ 3Ǚ cPoU+5c<1Yii{<䥉-8xO|jU,MgkZ%`lX%L:{qh}Jgn'K?~~Gg'3ٿt\UqnxcgkZ- ^"qsCL@x!Emt;K}?_l[.VGS{evǾ϶ Y?Z>e*xcl>XY8{^'|ySI֏_g@y+ h??W۾}V-9h?imyc'K5XNYU;keOGLgg3+ō5X ԍH)dCD@ =<_{}VŻ'Y[inckD,Udu<Whi{{nl=8YĴuLj$W]`؉<9~tۓ]b65}/m՟mZ(ާm古,c1hc8>٨Xf]sj ܧmw֏ʯ1OS]Vף-5=H߹'}hE5UoMz2[#ԍMM}jdLkӞ'S@n]d @y|)~௽GKYVf7 eF0G]߭UfczȺiVTlszz3hmrCA'5CkF@@!&|#q]?Z>Qew<1{+h*~}V5V o?ixc)[4VѢCBe@΁7Qy$7#)~K_X~0 <.Mͩ {nEGI.OT?gmNCjѶY-_7^b?ۄp1ɒWxJu7<_H? sInt?nX_XZP ̈>?x<9V?܏ZgOiY]utL =g)1l/p.tc?ZݣIgvax1 ᵭ1lh>Z|FA孟McGcMu-ςvAhisu:]; 9kcE=i \n.n~k)?IHFD*XhC'CA{{CCq`H{r*v RDmvV6@#A O{pN xxoBA@,#Py|&;5pxMX\׏s$)ӓU99j'@$6Osd ).hM0>ޚΆlF&;&!-uqAΤk1"IMc-< xJwUtWh  p۹qq:=Iև5&u:% #̣޾mhK% m}5*|A />\ǚi{}/v5 m. oG$gk)旆nӦ؃/xt#ğޠfjtײ5z`sȸ@Z8|ڥkCvGэdɎ&:vL<$v4m!ǑxH|kON5Q #N/=;Z[,.35hZ|SCdA!Жǔ!<XHoZf6Sy4ŻI4Ȅk-:w_7R5>:kG kckH4i5;Avp> j L%0um0`D3Mq;C#Ml 2 І|I_, |4ΓLF6ub, ac9{Φ%?졕AsIk|<4]#Cm`?HgDp Dff'XPD|5DkS{<67Xƪ,љ q.<%ߵw<%o/1q| 2-a&ð2Z#Ytt;A5Qwj<';Oe 5Lfc6ݔ[lxԈoO=vHױ(CF$8-ytD*'@~lC k^ #ht'FD& q`$}>uS Adc%h5I!IM:wή/k@ %| R-,lI2#c)kݷd"d{罤2 yqb9tEo-ű<>EG}eg#p{;skNd:L=`ѣP!:~E+Feѷ~wOi/:4w䨘:<*N,l?8QS0n Ii^t ټ:۴m \v,Luԏʥ[ :!g!r:y%tk(KFA;@#B O-vvcQw:IQ< В։G$#WિNlLjHhlC @s ts[ vçu=Zh>"Hԓ?zWz,sR|sgvkV=s!cgZ(ҁ5<|!y"mq@P[$ }I)D4a2HIHh6%caیvDwEjtڧ.qt5I)xt\`H ^/;A "#iz68~i &5&N!;,ms]ygnhH#({kK!rΚ%ZkA5qOF#Ze%iHHS=˄0f5ΣN6Y11k0GnyC_Ѯ6%h#I=% li1x?3H OS Z<1FWMdhFPyTy0h?F6#8;Yf-f5 ǃ'Ӎ9HQCZ=:Z&%wRoφ˞ӣb9l |#gU;Ynbe@ӿd%]uꛤ5Rn맨8= ,GYpXcXC ڍkrG\?u,SxW}ߑk?nY]h_YV|~u{-s _o$#/k+YrLqJq%"cPz@#tX؇9"D. ]H&cNQet+{ˢڄAGLӋ]N4|pp܄F`dAln2`IX$C-}ԸgucCK=Gr><:^PΉJK7W7r)a,Lx'|R#`AId 'D y;Fw~@_Li~̊5Mt?NTx5q>܆'f\LA-Pn4DGmoh;o?98]}N}] wB1NLGS֘%4Rkp ޵@kgI׫txOCOpKOLf qՃho:|ۡ]#Q)SƑ}C:/ Ͳv`~ }.?>1UP"|kZ\l{hqAsZ/%茮I(B=zv|TO3q!2 #:-vDO&OT1.qGav :u3?Œ'` ޶@cGL$ct@YuNjc:C@$ELv?*w1FVh /;qU/?ca:qvǨ , ubZe#Ԉ⑪ os<~ g0 ~n`,A3F<~8HF; hmǁ֫]|=DޓYH~}Cwpu¸%'c]Z`=71']ǴBƾ ?Hskq2}G)}.?gF-}3x.~f28*Mcyuv;*%V6$]Oy _+۞!lhL#/mG74(A:$io>5Õ:Zՠ}9$ Y< yqF>TsۯNS$Ǐ$WG`zgS X"?OP>swDsD8sCj"5xx=[CGJM/#"Hw?y_JS~K H`A[#Bc5`44(eת#NAL tկ:xC:eG>?P{k%GuoH׈1('}zUȋlqg;xe: acF" O"6ΰdCq'$&m";~gC4?,( AFZy"zm.3~8hTdyO7cgwc}g?%  )Xw $΂{u06 i8 dUT?Pt/gݦ=;)9[hk gR7Kӭ]uM#`ЯF[m?kv1ǑB[ ö##hqhh֖WXc>_yu>dƈq :&G* pmhGmJqLSxpU2pk?9u9v@h0@;nN-kHb> |®78_=ߧR|=ks}ze>\O^cl4N§ P6 q,m.-6n$ؙ=m Z=7}K5P vc;8*8w ZZG\閝#S΃EۏKgq$ @9Dk0m?[発g\pWp\`̹4?E[O1TW4GARxx$knEƏmpf/;D 7FeD]2?KcK_L.`v?ʓkC_Nžp\C⣸5H#cܷ]{DНwrIRһbzS,`4QWi%yp?)?൘#y/H-t39}&q}^\7PdUȏdyv;\z3(k3?~~3PA lV`zm/lG#S`_qOZOTƼ7Lq: x#_~nt.$߽ۙ)= DGCm,uI9|yquP > }pOhݍĒ|w:Cupw#E sF#CSv=@< I}+ZM1`ԋp<DvݠhAo =l} >/e&&Nt\+DkN=" k <ü> oٺ(;MNS5ݮڤ{o/`ka@L~h[;}-.!fZy<&kFv!"'%L45ޥ~ECdo|}Msz}? u9\= I=DT@q yӲ u;iiNN[}"fLhp>SoI!HC=\7$vF2cg2斛hkfZNN Kh]uMSdx; ƞwD8 PuRcK [U!]3ԡh!\sa&mM}yCxLح"D: o!V+66w;^˪iΥƉ{$_I<)gkp ~/GuΌfO _p:Xy_OzFp#ceo 0Ǹ#,LŖ9Dc$4lFA:}/EwRCҤ;y>SSmt?nX}{o-Ï\U&lp1눝@P0GEh qFUʚ4ӹhvȘ8\w s.@'^}>9:xǣCFѤjxF8_1ST `y)>jys7I1ǀ?z_wˀ(|xxz5k: W;= QEC@ |T8LcO!`5HgڝϭM*{5㋎&`z5mӹCÚ[! <渰mi|(WxwHEI*we!Y]:AǨh4VuL[[[ncTA/xݫCLWhNlP+ܑJC7lpeI ?QmݘAT"gb β~ICsd4 WG,!c@D??$FPӏ+* e๛@g5x6#+zz/R1ݨz5 IWa0@ecfMN"IS"{iݹPg.z "\T$xk 5RK@h?L 1F#Xts UXZ6ͺs'#úwݰWX=FgNMQ;5m`Cs%gz_vl{Pq+L]d=cLENh*>IDzGv(9y-sN>gvu'LICM 9\;X ]+6yVCGQ69hx)::3_ hAF D5sYV10$9|KeKi EZ-r}l9Q;ЪOv\F j|"|5c/qsA H{rpU X 3^o Pkf?լ4ghi3(-sAKo=-c߄C/>jf]K=EФIt29А4h#_KCy:p dldKjhRLi38ǂ}Я?sQhwI:y:4 @f$sπG68(]-ڔ;m:8` (Kk815fn-{_=*Kv=1!l7~:@4fa/`ڇ\rHՁ[} 3'Rh{GEt[Tn׵uFuhIL%&j;DkBGf(-|Yl gPiw{%m?ASyXZ+haf=nL k0bGH[5 ?'/&Y6uTRbma9NG'Z*y IP-suq.{0'S %-Hwsݰoc']$~BvDEGw|kF9;E5i-;s`4y8I1i"bG ?S -5:s7ϡKʉ{L{} wx8FeA-6]F#H"Fb,JCBS"~F}T'] J 5:#P}QӼέ>*>f-ln{j n\JZdN><8h|%DK8a2(ٲƗגGf;ld׼kBpBs]R9ye4(]u&kQgAup = ;G j!T{奼4"'晓"+>hld/A01[p |g2C#ѯѲ;B4:fjD40{@ jry}0;eP7}MhU/s46Lo1kDxSRAԐ< oGjqOy1ƺu7c iH8 ۻE[&#=6IlFNT/_FO_Q+ʚaig)ӍΎxnېeihO/^%D@@;;wK?CP9~Y-k(ǐ}Ѧ`|M}eE/`1EڑmcP!"I P$4 WGj$i;!i6BZ~w魤m:cs! ˝}KC~zi-z5m;} tQcDzTӴE>!DLk.0㣈3.ݨLN@Lxolqڙ5Hҭv4G܅eΖQCGǩ:9) & OdjZ^qdLaߵG2~ҿSu5E ?V9ETM& sߊikAYP k vZ"a| i@9o-:0)f5x.&]^= = }:ԊM m#d㵭FpnjM4@2Fk{@inؗc$G+g*ښC_' Fۓ 53M+4S'M6JIsucJZ][w G#4@r+\X|BsRom9=C]:=!`F1jcC|xP+:Ai/0[3:ΚT]E yW53G:mc~=/<(GĩYcA!̀'}Lpl?I Qc&F< jO~#[T Sí,cJs/(l-1cMs&cqn i6#"p]:/EwRHCecޣD-K'y;)?X}?&gH"%ę!0swK{q|SwnqŰb1dI0%8w=J//!9p*$ɇ;,>Fs /d9?#D\xp$I9h.&5. fH52*%p hW;%m Dlww#zHY Cd5Jx(h<a 0Nb5Rh>{1bGMen$[>ajE!3s9 I5ĀL{JX `8Z4k DJ`5vq3#YO%w dVY2?7 q4Lm?^>SڤK ÓN UmU[tf+k%e&lk7} 12~ {uԴH##h:F@keh1pP67FRy^&C&-$;ĔM\hYfiAxOiԁǐIOVɞtk5]|^{O;d#ÎU;gKt-5I5"\-'X?ܠ{@SJFR@: =P{\A3'I0 )= ~MRUG_yo.ob46Ƃ `yykcHs {M$I;\ X-$]42 $7i/E-`@2 "gS1P86Ho`u| tkH#Ȅ揄JCG'?ӸvLƠqH[-$蓩6Lnυ9kߴ" a8cKcBFO)]]p׆ƍAkHȃ0n8FN]5jiY kOxDvVpa%~x4i$8H-:5T3!s۵a H %|9'"8jdv·OsHNYDt8\ѫdZѤ::8P=I, GGtke2HGxiւ}6tT=yv χWp h|tӺPlPl}sY#Xn@SqIcĴDΩnA">h>/.k$IgyDv2 h$wxù*!̗ot3:涳X]Y-yM;(~oEkCߴH:a'>sM i -ks] HHǺ~޻@21zň?ntzFGR 1']XA&hmDc/G\?u,~92X?OaaQ2 n#v1y'L_|čdaۤ-׎B3fwW:+j_<$p`)Q j4c}L8<*1ީk'aƮ.&~*Nfnx[LKm3)?'"qLS40e͎F\@5!c)ˋH9#_Z ˉa3>zZ[2x׸n7LSoS nXnac@<E`ss1?_x+lC b[s^ ƍtAo7y옻IϹ 7cO+t/obZK*}N$G~ !S9w gkzo^Z߸yQ964,R>(?x&(O:۪G?L}%zy|swJ lvk>?c ~NJa;r.#cn|}0>NJ~ O:N?ke@d|*{: ͂ZO_%#Xȑ1XtOޠ_4 Ӻ}ST98p#RN #QLR ;E35'uK+/{BËlڹӧG$gm̝pO}Z?jm۸gM/d|H[|ȼS>܁uϓ~NJO}{{_}C`Hk79;-|Rdz]  zȹ͏Y@.a<|!8 pFK:/ԜC[,:s)ke7FGߓ 9;>ˉSm>%3/ 9.3ወOn@G̚en/{?#7qc]`7OlHH 7_)z}GN7t}\$ LGwO;=/_b}<^;š٧#2@{|8&)9hm~f)$HcC!r?jk٠GbLTN0L6|rRvMrux[#m5<]5=_9ިbzu1.`'6|{~JxhspO=̟%OC9kL{#!Mp[@ dQUz c|t'Nny$7였uD9 Tq"c2ht` IQ2.pyb4x&9[: գt QO'zhmfŧk ԞִSo[AZcwxۨ}!!?ezE\>񮳨:&<>ϵu̕!lo|tjzCƏ%1?_ŖkD8Fײ5ԝ$˴<m2G1O:M9L8bb9̛'z?#ۚcAnX3x44F;rnso~0gNZwl7ٸc_d쎓@;On4üwL׉ $A@Nn$ c9׽4pt?U/d؟?{Corkk>.~05$.kAӰj9)">蘰v{&6,X2mzh~om ,f4HyݒDH>jC" ͽtz+.s?S";ARKbdU r?j[E{t>Z5*kZ=Cds-'7#v_Ӽצ-1) /LKO@2@Wpq.u%Lr4Ql;Iɟ2nȓ7>@~ɋu(zzώZӇ>lOJb_C!KK!ñF=lе ܞN |7nbKۜgQ쇀v&(υ^ߤmx2pA16kQ%x`v-!h;Ÿ ;P#pyLˬm{b\k<h'bc/Q4!Γ'Q'ӑܴ5K׺cΞgfZ!D11H|-? #{fC̞=M87g0"x3 ۑ}?K2kqH)s%H)ޫ`kΆD*@4 4jNrӐX@s1N}%1? 'zhڱ/h-p4: sCF߈T4 tL:BUِpShFnNIsܗcw긠>9:#ؗ ӈV(M4 j$Z4V醙vM[eϖ^O7m"9{ ޤb A#kB{ˁ']vIZs8 xZQ?GFcYLA@&}D~I3/vM{aX奊n\hLS!'T1R:@pqcNϲCs ZkxR7Zntv߱ۼÈ2'[OKy?O얿UX77j;cg).ԝgHo5S].tGdқ׽͏Vͬ,hD=?Q=<'zj??I{5CrO#,^Q]cH%oRikϨ#^b?ۄp唲䙁zWJq V5'^?Obuo]v`f^GӨXyV׵!AttG*L \Nl8?JDo-{5|wNFZ+iĖ#5uZH0WNղՀC7S4yGG$L&؁əXh{#-tl;# 6gHwS.H- pi}g&sZb f=I;sdiƈi4ޘֻF`c &C`g13g?ڜ ԁ@(O_g8q>NTɭ\5-?D Gh۴sbƒZ5&YD$5=^HF~ :cLv$',7{Av HItct o4ڷ Fw%\}ۥųOvzOkW8&{i2yLA!w3w0_2͠8i${ uV]V / kIAw1 #)5W$;_Qn mn :AǗމ:zF$">^KZ78LĘӔCs\ ᦍ?Pp!;@@=/PK!ݮ`P"Ek j<$fHw|HzgqsL 'lkr>^Mqs\us!Ē$AzZӊAsCXUR6#}tɰnT̷B.,5΅}uwF;ea;0Ϗ@87sNg5}$/kui뻯ee?H u mcGv#^nkӷ$!s$5|!ӭ kꐑv h#N{.oO}w{ExI.sͣtjZI~@BJt`׾בL_!k, _:♠-#[@4OB{wjN~_Hcv<"[wIb#o`#pGA&&NfvѦLi]UɋW“4uۑfW{dATl.}=8#N!տp{Af?;CPM\IO♤l {d ޓѠ;x-4950~FDiG7}07γSQC} Ʌ$j`I>2PxlKÉ3w9ՀÛ0?!;dK}Oqx`Ѭ $O>I}U}mNɖL3R xNѾ" cq^)ݵvi vu$7< ½msJU<0fF@?HODA?8N駖@{N]ɈC{:1Li:T w 'Htid8Fv7todT%6]0IOfx˛ k'ͱ)͏q0[Fp+{3ft+^4@B; ogj$9dI?*b!l|zPZ>raӺ Cyk5q i;@ H F LO><'0ݺ9Ǹkqx!6Kvia=C4<>\ş K^:G/vqXC>1ۯŵ>xK'u"Z~ّ ?Ǻp'Ա*RiqejmM0A_vif'K#,1L@$nX 5ln2Dj'B%=ޠ$HƮս(6AG^ӮGٔM倖D[DhJO%X I#u'%h6mɁuLN$Ao+/i8hãG^ -x` 2@e= "{SH&5`x甋FLeV|]%: xT1Ʈ2Z1tr|nmqZuޘs 24e/Zyx(;hAhL❍%߃oqL {Ly<r7GXz_Q_Ed8| [ aI>7L4q;xCKF1KOј j&tYH8۪0 m %@&tmTlt^Xl$CG3^~"9Gt4qA2w=2ݭ @ dgD%յۻ8<<{<#N@ogp cZ9=;\pcف?]Pm,h} x|{!7K@{pJt{Ka:sۿ{Fk.hخ@l5!M xtɐ8j֎}qzw]C ?Jk59߄!̩8v@09=a`:84=qFtB{uSZagV6t1p\'Y1$.'lZO'}% A' n 1q$8 /-kAѦƜi<%icĶ%frN~y66vFڟW8մkh$4D1h\O~d΂ D:Oq /dl>}4H @8k iŁ\aGC!.$q$ƛc;-3ɂcP#Z*#{ÚӸ1D6x;K$>]R5aoς^ӫAׁ'ģ}}dK:Gx D\vS=7`vI@6L:6{}XQ}gY"fX:k?k ;d.eӾ]Äݠ@LۜǖKu#;ȥEtѐ uhZ|&IQwy; ;\qq nhZD|cF/gm,7 cFTt#Nֹ i;6K-l̏c4A'~i]hκO)_ Z)@kΒ h05Ő\LZ$#IN\89Iu0AD5R ޘsD|[.f-nIѿH |Uf-uC=ocYX"NiOܢU~5TbcXѴ9iԙltOw]^CXt!e02%3 cA`l52ۚiݯ1ʡ p#V5';}bC}CP:fD4ߚ\]s!IcC':)=uN-"> XO pG<"6t2$ A:ܢȀ#R5{ItsLs"A3Cf4:A%-Q]}9Ň4PL!|NC@ԧhqHE mK@ 䁮?:Jwa4ɈO S4mF؍hoSM@ْZyHҍ/.u\l4(!9oa= &{IЀmkCv Z4v4ВH%ۺ/Ais0xE7=Q$li2O̤h#kv᠏IGu:Ǵwvأv`2uOKN&$a ~jMDw7on~>~ 9:k-L(Ei;kIȦ7kKh.̈9 j$DnQ%pqu{"8̱C,ۺG3S$ .`8t?!*Z08h`R%6Apd0><%+\Ἕp (SW65 m~Z-b`"9ymv\8pT:L1yw˄m(t,l-k H:q最GҒDpǺgH1=I xOed WF' 5>;KxH7VCuȍKfGLj ]pLt1PiJ5q&l#p< ͗m0CA ||"_N2xߏhn}w:"uݳovG>~ ֏,GYpp8;^b?ۅ ?R 1S<_H?֥X̴p.C!x0zG\?u,;SkNmquGb\0xZ]ĝ7Y@\Agϸb@@@#왧pNϫ*v7qth$QYjhw<粊<26>k! A|=;0LR$zP^};RLP~V4n3x85OUwXA-QQC1نx66})v~zyL,tnhw~lͭoNs\6y[8ڇDL1+qfښNۮՍAC>wyHXkaŶk.v8H2l#o;.Zch7o>I:fMU1&'n/g_qW-6E`h 6Ԙ4|ō~>|y 4,v<=Chx<9R5Vŋneo`?UֻL8ӻq?e?KTnemk;cu糖` 9Nޗ?,_{ڋIFqS4†K;V8ژudZ: }Io{Oܗ?,__Tg``h8- FZAdi |h.eMӶHΚ;1N΄s.*D߫h03'F xid~ Dqc:D[ܪg3kl_w:jI0%\I |?I#Li'ﴠTa[ ;{J1\7VH>w$KȤ̻8~>6=n.k]`MƠ2I ĝS}~@Ikt~ K9GX~)Xibn8 UDhn6s] *ލh5u#k~zBmͭg-{sau1#<9nx't0+~]qƟc]3`-Pv%F50yR_,]`G] N8#Ԅ>84@v} RƸqH?A~k6>?w,'S@cu8k̏SUP ǹƘԍPIkȆ~Tގ4I9 9,+0q:- 3|#5],ژNZ|`wr4Sqsk4u#9KXW!" |۴c 񸸷< gu_zd <4-kcR{i2-) 47{5xC XI~5v&qA`)D@ƀc&1p, \hl5#xfӎȭyhHxar= ac}xk?j@@Έ8q_$²ׇ88j ŝ|U]@ o lo='&яd[A -{}Ȝ<EqW!I3@ :+2?V2OUۏ=έ` H3cka ۯ<)XH??ovk?0F&qt8TLj h|"Ơ49%c;|89R?𸠜_{'8?y 0s1"9Uc?D50I>9P55{_\ΟK XW#'b [?{c<>RumtCV|8|*C53t>zIhkִ##@,[-Q >w~x?N8: _EUb鴸:;j F;-{#XO+KkӀCqZZVN7l_մ=HUTMeqhve ip~{Stm>9F.{G7hð5!|QcS YS}x(k7u <+ׯGٱÇ9'C6t]CGa]lhatlGsKum}-hƚ#qW/-P.yi›hϑf*ͯmL̵L6Ot9ǝx{9c~dzexwsCA߲m=M&oG}z {UczM A( z}CP ]{C9@aBXtnA?g;L"DO9`\'H:nU@ @:9ڂ|@N) c &KZ9S0+1k0Fﲙ~폇@`[\ K1]&ˁ1!ieg?$a\X?ɨL;Z4W}4 Wml:AC)m۽:ãy ȗqbmoJk^>yt}/xq_=:A'S߷(`oSh  <x\Bo~l.kI1Lig ŀx6fy%vD߲ N ;_,Z + *ʬE^wWXy'F}`Qw ,GYperFY8FUOpcX,xKG}wh'ot?nX?XG]KDpi8e3VG;1(l"D1{$O9c p`àf18k=r9wa5`uX6[!>&g8Mp$9L6:$vV]Md<05= Q$pNx\4iHqt}Tp`-D7;(@@'p:MKD:mݽ~K]>]@1q Ԅ^8ǵ7] ^ 7i?y4h_}ʆ.kvF<J^+mEc:x2 ͒ ݫ[+_mr4todh7H|bc\utCßqSn#_0_$OB;I"= ] kD::5MK5s& #hd4~]-|La("4D[-w ZoO5nku?yMcDӻHd#Gi;dAǘ!i7z}ZыA0\69 y{.6h;@{$=h 0 >KDDLuJvױpX x;xsLA-7Zo; 'qH<R hnnLmpH2'q&|A㤣nkvE\'l2ؘQ'۵ &bG#2ԓ,ĉ.p&OGw\$6t%RKH!'R $:cLt;!2 Aב:p% I'`NZx!w Z4mk@p)mtD8S 7{ jt@?q $6Aמ1[Ek.kK4%3 kHsd]SkCksBf;? wnq%:OpCWCs-s\ ݨ|9MMcv́Yx V5p2kƷS*M W; DA$Wzl^NLI>_v%c kE5Y< 9N89IC ΐ c綡;ƵO Ak`i{\>< \{tq9 !o ;|S6kV@oJX7k\D%87O⧵cgsKH"7v k&`xƑοHYOsAN4(ʼnHL^z&{m|2y<^lS$Lq(Yv- UN1.sb߻Ο \4>D`w=h$s׹O4Ы} 'Ca0;E| w!'~)<@p?KM5y*!jt;x~jF- {CAe$ǜ+c'P 0H#NKC 7I8Ek9h]|  uL@h >;lH~I2'os[}@Zx#w~4:<*H74I$ B'`%? l91.ICvOC$BG]Ru\y $'~EΐLGb;ϒ滂;(8vkOƿȐ/Q-5Lu׿tk/hj͙T $4)Ob iCs{;[uc> $nl]@fMwI왬qh;D0Qy1.qsioD(;O襷\؍DF3mC $>h'_l #9 GBò=ĵn'^甋hs}rvE݂t2 :$'hCduk0" ԝDh֓"#S|SavN1Iw=[{#j7h#yCA>:zFfZ'I:@|jKN1thGCCPuӺGo-w9IyߕD[$w'gXK'id iD9E |}78 `l@:~i,#{~%Ђ3|2JXtŮN7 Gڰ{2=@u-$u(Hh湒{|yIsXhC`ɍu?FV|Rop6Zӡ=[]L6}*;qAm:MAE$ ЗvCW_{WVNp2b4&9I\w3$),s^CA'akw9~]4V4kwF$LN89ZԻL8"wxKg'}UzKLOIA ;mKZ&D . xȎfzF=hcO2li^b?ۅ-HcK`%zň?nlƾ}#.ۺ\cZyxnt?nY_'qu =+v7k%LsY} Ku6tda!ᘘ2HHDꕛ?k i1.Pc\CfvH qX,Q{$Nt*sg85:|8!LʎE,pa.Yw>\Lt}Uk[?Q>H%xY Dӣ@#RDfXIw]Ndas ;@<,Y,"'VG?r9GOr#A kkZ9Av h5iYvmR߲>iq0C#>C#.w.I,q't[n2BYIf۸55|Yf`>^_#sk6m  gO'w#-q>DF)N!%mHpi?;nҚE~6dIѢHE0g57cyY zc8HDp$}ɣ6'æ:hu%N:5qQyqZ=;5q-k@2`QxC˜@ٵ9a9B"CD-aߺx-F˝<H1e 3|[^1fAhT~vZ}`/Ii{t<:J9Sc`9} ;yCYnu9}4ls<3a!8P4Hg.1)h`t I:~skEVntĴ ) \= @sI@O itpp%ma@K 1|tV_s0n!M0Qw`w0uad'ƽ[AoCy?ݥ'.$cdKN" Έ']u"!`@ưI1L4܍x w[<-q'%2y.po<5q; k:TU1'pIBGBvX0I&A:j .x v> ̧flͨIPx-v5y#DlW~;|B&؍;6]bͮ328E&kƵlOfϚs[3UΆk>$lrCˈ }c$ȈR{\ôΝ}xF9_Mqե.&ui `sZψa_ n A;y'-q@twy;ۏcHq+wx7Tc=$Gxз > -6Ж 'gi>i= Ac1NHp|ފL׾EYH>i[ny9嗀>]r@?Н?T/ ;l(fkw`'@{W{+pf4p,}7 |wӺ#>JXg]A'I$ŭ|48 ",Qhyt+-cۋsE8Kr Uq%C;K&t2K$F:~c 807SǏA8sw83k`=H{̐Lh\A>č/dz{gcSN({tI;)'зlfFxy% }OQ7v4Վ.2?z|ݰZX A>E`t׷qFs3 =P6rQµ ot0t#|Sm&IG8-k835?-~aku۵^/W脸nh dͻa3;X8p v:3hʛ3C:LZ :NCH^AsH6ÝB I ۫HƳ8' ͮ$@2vS*nbnDz^Cd6c}BI;8k>1“y'tS-xYm̒@x}r:6f< xpHQM}v (c/W{nLk;$3b9OdN!A#C2UUYp78a ;uَ$n }ȧ1S-sdlpɓ18rCq~tvDkE-@v"4hw0@2OVlNnCÎtHa7yv-Inִ:0}k!8d:$õ'N`:xw&;vof |G4[>/-N,ټunƞP|;(ShlA7XÆ{75ޙ\v;n}ו6g9C -է_4 u!U6`1'F8vLvEk {v<5yZ('pv-Gr;"6<76;qLRs`GD;"cÔcn;|{YW{ciLq?|#Az R]$H?I%"gpq*s vmkַrADaf4ųp5}b\~pN ! 'Ud`<5}ͦtAydǡp6Nh>k,> @=4kF'Lq;82@}#Bdp?5_s"H yvsZ(xS'? }#v;s3=qځ.0g<߉ ưH1q'Ǹiin=M]s{ثFk6Xiku9G$5 qՠh>2<ODz7H״@/Ayuvtst;F3)t+/0m.sPa$h@&y<+MFǁ)^}<:Z[1?*Dٻiƺ$"uH݆4&~ AZ斸Df?/4 a:8}u4;' M znw Ai>-{ 8lάyozm\|??"aQ ;\ZBL:$Ea8nIyU46$S4m)ڝ~+_=9.3m-{L=x~ )S?c8[\80af:ƏCCM~`~}VIi!C'8?H;-{%1#6>*5``h`~>-i5U_6}%w]ۿ4AvWXygOGKi8\i'zň?nXrpGQTُu:}/EwR羱Q~u=9˼J$'>?nX_XX:WL: `"GSh&'-4v- q뤑aN#cΟQki pzph@t F7s3x;K Y,ơΏㆈMk<~ g .8@8D3mx㝢 ӰPxui"t|_s{HOB!([A}gJLpq=lNЄZ#px: 9it?s/ⓟ&_e#b>'8tķ$?"8;7x%h%NQhROM/.Gk8;G$hv5鴙r!%9Dq 1B#7=F9 2G>@>d x$~𙘴8ţp3"Kj$)miѡ "v}Hvdٱ7n3ΊpN\wžЄmKr`7bQC{ZH0 vӍؗ'? +A^.;f.RI ǟ{`9qѺ-:vQk 5$4Qݗ*X;mj=O\'.7Iw` &ڗtǟW2t%ƥΆIAHbnzOmhJ ?;VV̉ 㡃$y<-?/ⓛ QM`N6?7Hթn.;xx> 駖NZݭl .࿔*_̌cczcn ? Ȣ5.'DFupݸu}c;L u CXoA/2_K \whZ\"?0T} bHn5x΂DGdK_N h9Dow49/ᯖ^G$}|V69'69vb?ӎr!Mn%`9dIjx{kH"!*~#[z"cDj \ i:v?hTጝZ 4Ɏ|NoisG{r_߃]cl/_;dicSTd91OU)c;R;k1G2_G>N?ӧKMH}/C$c@| 8cH_ipՁX&ԆӺb7yc\ݻ 9<:/P3? i$ѩGDv>c91Dҧc_.$%D;$Ȑ$<< Z^_G>M=UhF>1t73i~D)=#uXүƻn6;Ƣ\^ؔ5͜j6BsI'lĀc'. GsZ DO#] <_R1G iHv2*/1MϐF AN]'5/eyvj~ǗHϓCۻnA9!G?gƍd_QXIh a?zOtWNu_^N(Qna 4{z5xcshCx&Li94s"禊nakD!b'̼(@$2PseףID>(1{žƵ vN񴵂'< _dN|?g^qi8?II~эD|51< tN HӒ=;#`/Tsd#-:.8ONk8m?n?7>9gҫp.O>H}c<=oޟX@:(Ok64Kpo}%SeTc?4nb} ɏpƤxȍTٵqsyvôD̤y<=<|_DA cH:ǭ98tm;E;9^8C;l]?8t炾Y)9WQ;ۧ|O-_ 44s8 c``DAKx5_ɯN%M#v.;A>~L^{64٨$ "8%@ә) {<=QպbPOξ2!K'65s#`ik :@?P%Cٯ_>O`1G04BVcf$܎DBIG^6v ;)}%<_jbݏCcbHZ񿘘}5< Υp,i%G $(K/⡛%ه񷹣/9/㊅ƠKt|?Dct~}op;}O kˬ;!u~0h*_ɧ$F >Izc@\yPCF!v})cGL$%<ԿǟG@(j@'H1j><$s?9{ecN 'B״xy<5 I͒ǃv);j'_iGhB&K^b%ZF HuCx?v_}ϧwE޿aDñin/iD`kZ^eCFfyMvC}s(OSj9kR?c.C*]_f駂/%Nw svuiozň?nņ8?N6'#V/EwR:RsUjqH?ޢkȒ׸3s\Hq<H1R{AclZ LvQ۴ 2ZI<ù ՋΖcc@ "$;1t;Pk;N;'Io{ǖ#"YK fg鉏3QUZ6oҶ0:{Z`"BS0kwA|ݶ&Ѽ=-ŽEP[tsZD8NR;Z_.GF?ok$M۷w:{@!cZEW`6{'Oᢛְ hӡ0ap {'{DiY1/ i行ܗbOzD Lh\y8˃rg<4:4ǃ0GnGxR$l@% ߲7nniq7T^׆r:ƾi8h<׈rf]2K&H9Z۷obbI< 5Ϲ3c$: #塶5 1;tٴg\i ;ȕ\AI't9#j7{Cnw1|{qד1g@! ;71'ִ<|[* CH֘SOciinh߼9.3&OAk$L׺:5s\-#AR P5Ѝ< Ȁ~CR%ܨ8kKFvԨjiNA"˾Ilk@:5A k. Y!F|n{@3#Ot;%[VN{e >(060ߣi&|fN`l&Oё883:64p>HhDAK5R,o}~K[-%كn<3ڹH0{{6a.7DxwRc`ǘ(_5y5`3@LNkpNu`jDYmd7HqNJ>k3+9eo=Kc7Vii0hpx$kADhtOQY#2$OnD#ڵ[U[AǺݦF@Q&[/`s@̒=ith3ʔ>&"$ZDh#4kgQ3 ;$4"5J\؝{$ d:;-ϊ,K\ 7@OxO,ٱ7{S ylHi i߷~M-i$9@ hݧu>Z R׾hm.mq$|{~v=I;/ވ;k:t0I Zѷvgh:&8'ٲFtNgUW@A:6 kx [K_ @&|)6xKy#^NINo y xKl#H#t$)zIupwLj./lG9H@nt _[5v3',';A-,t7F2;‰d<}0L~= гi;NO#;upۨG~v> <t"3NIt@x4?uzݶ\ߛ4AԝxwH{s~#ZkXA4 c]?ܗ;E-縵c@y(;H_oN3X-kL]Ē`j͐$IK jOߢ+W 1I*"|YvӦ${ NvdM4>Nq:v V*(AD&|4{K K %=ʗ[.0}q@<PsN^k5tHIƶN{t5!9melck̉?؇5!$k^DOo#YhA{d4sȅfdۡ<%y2H Ek憓!u&k{CdnLQ-%sZtױL5qhn㰸fh6lH Me!c[Oa#f*L:cC_&ӟt1>|%a-Os\?FN!|~X[ w0w`|DIDrHIyRah0~*MU$7@n$^9Q /tlϴ3Mo{Ǘ*-8 4 @meifJ,=W~ƞg[㮫,GYp ;hc"rS(!>=P?G\?u,IN#2A,|VH?}eoYơ2f]g?*Rf>MOY)r 3  5FK[p3HwMMm}/%] wO<,44 JӸOuuI~|1d-AH&g ~Q8lt30 4eD#q;a {6{~ 4h}"yT[spvbɟ]q(v1DQ҇f8@`. NF@ٗFV[KKKK-%DŽGc ƾgЋfG|6v<09{]$] ͯ_m_O~گT:ȃ{d@!3v8Z< kBW }SI/ 3O4-suׂ_m_?__G7sŎi 0ӖvN?_m_櫏J?kϘխ ;BbD63ɀWCڿU`K<O󥶐;ti❎k 4ĈDjAW/yHjO3{PƭhRx;n:_m_j>=cC56㧐O^HC$+m_*0%ڿU`K}yKIL( KHD&{jAW!s??k/!q$M4 ˙nsFH'QkJ>W }G?_x^wsq2w;t"øiԴ~wИ+m_*0%ڿU`Ko?y֖={$ipTD]P_m_W?~ןaI0D͒!.pp>mm_*0%ڿU`K}y͇;t8\wa!鱍8ݱ:~W }GyL`':HƝ‹Z]iq"IXHkD|dp"GU`KڟZ KFƀInD$e^;H'iU`K8~wGp 6v{Ɏ[1dt?n_W I~ןkgC Sǔ=7h=H]۪AW/U_x,e[[ӎ]>qr={؍Ilyi*W }S7{ .fRIΝt?n_W }Jy`28ǜ%u$xu_*0%?_OW?GK HuNӒ{?W vat?n_W y4z@PxsK$92~|<GU`Kyڡ~/?2ַiHvk$#W9U`K<O4Cߠ2uQ g$Liu_*0%U`KwƷ1@$n-fA{U{YȈ 3۪AW/Wob%׺OXׇ4\ w4*)O:Π}5uj0#=f?|ho$Hϴl A3:W_n _j>N1N:pAΊo {{Ơ.۫CW/yx&t΁N Mv֑yruj0%`K}KyY?s[˵_n|/W_n _zo:k౏6<Ԩ1'3}uj0%`H|>]r}相d;Fr!Kԉm@b@۫CW/yS~/:ZAk3p"COI~ ;#tn __ }VښMpgʀh'I%>W_n _?@(|9 #a{t0[>F30'uj0%`GԞcy eC[LQna`4WWuxI6']6?.8_/P~k}͠q| L2 9X?}̝qKxs q n.$=Ӡ h&8]^&~uFlJM@P$rms&}F{ZC\Hj<;89xۛ55g[{'n-:tڳ;sY+v.I,=Db@G^b?ۅBs񝽛ˌZ4%w/`?gmXs eɓ@ gC\Z~ G\?u.#G)ϯ]H?}h7W?şj>CsI%UI$JRsX"Ik+cW:nKnHm$sB(&y~n <|on-]3z=y=Cv8lIfRUkv6NT6Mv"v?U0rrWm8]jkGݢGZMslsLvi#~wse_!"q8ˈHAn:s}C&A)X~6 ONtdٍmul:xDB j\ٯv{K쬋Xtm~ɝ _?qPaRDyLm/M-bL|WCo7l~>ݶgf7LG_kisef/s$h5h^=hj1Nm`SmM{ߟޗfۇٳi} [c; 2s@aMUcvٵ(rQ h7;h_MWdt {?~ꆻΙҳlr2)-qh~~j&~N3vMƳf7[u1- c=fV dj98C⸾ǖ0!KXܤ15tEgHчEX}S!α:\\眆: ~ޓ鼍͝LHZTtjqv{`f0wFyC)$q"1 m1NX(h8dWz?L=S=Aϱ|!Z_WlHֹA}n`;'sqÒP$cZM19 %DKhY:O5ۉ}vK[XG蹕ksj}'m0tΥޗhګUcX 6Rs+q.>ؕOH~/M`ä驯[_wX]?<%c0xŨ4|xYa)/i eoэ܌^q*umsB:%Y쵍c\]XCYke[*C/]N]mt\GdcdcW3\.ʷ45ڶLit(Ϛ1&V$2p2'{J8Q2<_>Od[i&2={k|Ιqn.xۅX ?j |%ع'2Uma{vi׺J~N='annRƹ6O2XxxC',ǤzO, Q]W:s,MԻtA1nےbtZmck+oǹX}luu'"LwӨw)[`KIt 6hLu?Q9NXb:iUKqnPsقCjF^mՆ^hgRȫv7ٳ=;6>w#y[nϏZ? L6Ks6\IUkUM?7}b/nXM|/EwR>⛫?n\G֏Su=^cĒIUfRI$???`<3qU+GeH`ksP-%o _-_5/uX7"ZvyyY7r*ױvC-?qOM?SXp[DŽ?V/oסon}pZiͿ &,q,Ʊ208粰snY? WMz+p{kdx )*F/<Y? WM/סڛc*s,m/3?_Y? WMwizz~pݨ.u '䈗on֪_Sl[$A6B~ch P-_5!n1^ju[o'jɥ6/ .1X:l8\.JXך k;khon}pZiͿ &W[wX@L*I9)*FͿ &pZk33pX,ɫ}m``_gqѸ?cͿ &pZkjmԽ`e!p<F)%w|md_-_4O^+[%Ӹ)9)*FͿ &pZkK9~?OW7y}pZiͿ &~򭲜\oW]{f!i$j; 9)*F/<_Y? WM/סsn_Y? WMz Mn綺{kZt ?:nEYUs{lh<,'TӜp[ǃ_Y? WM/סZ󵀐$0"~%}-<MؓzG]nF>C59-{dv1C)!x88~n5e6m,;A0eO_] o{l'5 3+R7"q'f2㈄9ьt(etz1_cMndXᡁ0/U[EڞYcdsd#NBu?]3o[),x`"%Xd䌎lsI喱4$gt⛤og#,^)_#c/k?gm›/)_H?}h7W?p'Ը{'>IS}+Kdz[\nn2#X]*J3mLZ뮫p_I{fu|`x-I@SǧkfGu g~׋|WhcKy\-Z+P7{r5;7PJ/)fv.>-5fma̼s.?i烲#m";);)FSݶQ oW]m[C%:x(fIUҼ*]Z̚Z]~\,cG.hWRAO7WWreyٶu 2֚lm,{}~L~nMVd־_NEN{KK-hfe\:#E$~ \~WRfK} θ7k06I)_i}5Qs`@Y.ȯ*{كZ-1ô8WNJyK/f;s[Ym-Duc3ٱ7\}:AouHIF_y~ Y^я]UU 5YqXKik|I)iꞕ.bZeTdX,P{1n얒aàev`uf5N8ݸ]I ^WuCُCyC~>CT mǥ/ٔG*ۜl {K86K{UؤEgzZ(\wZP.L45*NդD$⡣Phs0ɹضcz9rVǏlC"wy7\+{2+7SeLkfSڞGeԤ"SW:"[[w]BI$@>Ɨ\etlkQ`kX78Zs=,~vCmf5G&E,]Qkƾ}puI$ǣ˟E9Ƨ4R=s-{#V2l>eŇzyti#zݨǧK?QvFjc4 XKs^hQ A$;x~⛫?n\G֏Su=^cĒIUfRI$3X=yawcf?66/Ա&6E}'fߟ={s1ů>[p-<:5\Z_M_w|??R%>2TZ}mxt_RcnڙCJeqȹ.k{c`h<+j Q.+Tkϟ'DC`"RB^|??R%>2T[:Cm 1i{aUC`"VN׸5b@.wq ;ZJ;-EعdP[s29,Z'c!R z/D?H\HPKϟ'DC`"RJ|??R+]W}x]S3MxS qkZ&5qed[{{e%;`@BxM:Sϟ'DC`"RB^|??R%>2T[t]C1XUC`"mȺS]v4ƜNh:"<@z/|??R%>2Z}nyt_R詣cnY{>D!qȹl{,{`j<,r Z?Oԉϟ'E̤7K|??R.e$)0~>u;Xb ªϟ'EӬQpkkk\:vE%'wZyp?Oԉϟ'E̤M>ީo@袼`85 1/:L|r*ɡ.@00drXOB&A_/D?H?Oԉϟ'E̤=7V2U}{IvQ]M0K.xnsX=10iր A4lxOE>?OԋI zoD?H\IPSf}o|Y:)vUp maU?Oԋ"YMv;sqk@[sy:@7zoD?H\HPKϟ'Ejf}JometǢ7":)큫k Ȁ:\DzMk|??R%>2/D?H[}Vt2-bwSE770J+}[nޑWEx_Fu ih. ƹ. .W~8872 Ybc|$w2 WE/Waȫ+^?/߹h WE/Waȫ%Яs_dw)?_>>UWK_~ɣS5_`}]|">΅պu?b7znIJ^IʷԲ_|\&Mw߀L\"F4*χVԥ̓ 3U!q!DgORw)?r_קo4*o/~[X2/%{}ctcq-ϣXa#enADZ뇮,+⹂xGORw)?s7WgQ6ۋK[lGFWO>oQ Q]lS]5@m`m6̤c`I2sg_$㺭/^j)~ WEK;tL@5q?yhYXѣS5_`}]|"$BGj)~ WE^I/g};%oM{p6[kݷ~Wmz6C]3o[br2-)2$I$6?{>{Yň?n}W7H,GYpke>o?OqZ?MO}zG\?u.#G)ϯRs̱G~NbI$)$IJ^,?wRzg{AUJ1oܿ&;?poJýcoe$HI$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRO+~|ؾߟO>S_L tI]y$I)I$Jqn%Rd1]>G 9?W~ۓ>SELNUP鸏δSToyɁA'c5ekel^Lt]x#<ݽ^ٙHʭ}[صߣCVo}~uiӳoG }'/CO}}7-XmsHmi#%վtN3e%Þ 9)w jǟ@c X_5ŧz/YׯVq1L=Kt,m}n{Ksk-ԴE̬K[ue28n?Y9џ[K5v;q=ڤc?fttmt<zGRZKD${$OSjId/W^PeY&~Ƹ7ZmR2c]Ao-v";7DiN9b@HɚJX}Biʯ)S{etq ض Xߗ}v?Ϳo^c3mzo/9tx!RI%EW7H,GYpS)GϬ^b?ۅ7/_S[/xjn#Ӯ{y;2+~ֲ=sk@o?gԬ*cYcl|U;;sq] Ï ґϽII GXoǐ;QGYLG0>܎^d${c;/? _#= /2Ju>w0>܎V>cыs1ݏ@M[S[kt Ah.=IqUZ1"ܹG+ܝ{޿oJýco&;?pfRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$/7͋<_5>% \|yv oZ`7W\_hq=W5Km+6enk]ksC^tZ魞>19/hHҴ'z2zFoZ6 "K b{.Zp?i]Zj}Gҏ*b]dяSK7׌sݱ8;hpm}"S,m?h6OB{Gcud!>c _R_Kg8BD̵0*ۖ/5#FOxˮߵL|1'A1}Ti}4v߲2U8KnXp-NH?w \Wwe}mzVxuxXE'} >i2}Zko{:9 '[[Tz/\un~1~ ^Ll6muu!,΍1:GRv0poլ hs%(c'kW3~6-7@ϴ5lqMç56LfC-}`=i'ӾOJ},ϸ ``G 4]ѓ_DGc}meUd[Ax%F=eD7{.1o/X::u_oiaStuth33hn=Ef[0fsn[khhX>Jbl+Zf#Ʀz8?Ri#eC*N{/B nF&>]hi )>t܌ V̦_C;%- >Oċrw>;u~vTpc |NlOrFqjij_Z c@ kCp!c,tvkkm'#`DU7vѾ7@OxN˨"́eq1 XߗOWqkcfv-qoznϮLˢ!}v>3<_܏`}Ega2?r:d=t^?aޔ*6LR3[Yum~Iiunр H]!ɫs~fko?7n(k]qq /t*ngX즶_V?ۚY'(k1\fcR7 Ev&?EgA:??2ly2ICȥvVU*,P;?)z՟>Ⳬe.Ȯ깟}X&ܽ >_ُ̓?͋11?ޕz.wM_w@ʤI)$IJI$RI$I%)$IJI$RI$I%)$IJI$RI$I%)$IJDum]{GhhaHhWe5 wdRGGRI$XԒI$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)K<bO+~?MO2H5Iy8ԺTuc ݣ 㺷)QM HG|b/P^^~d__'#XwⵎNnFxLmُn?HZq.Uk1\$N#}% 3hx(m8GU:}Jޟu}.Q= l֙2Df[0fsn[khhX>HޤvbX޸z'I%Ouٸh.Fg7įճYmȀ5%.Ѷ~m2㲰F*7/ X>V?P:y߶vKT,8CiǬCZ?H [)]l^.n^5﷨ g;ۋ`.mDk+;լ၍2\ֶ !9uޭҺլ܋K1.9e/=t^ AT}gsғ4##xx]C8(^I$ڮ?Po}39׿ls5VOQ"wn#ߝδ0pв,7gj}ܓNAwaUCaznMεhA 12bN鮚xnK8NjhYNR`nsgܣ5y45"7mG;G]Wk7 cWEAt6/~ |,\QѴcW#?z#Έ;T DZ_s17r?C$Y^︪-U??*s?'%Gc|x ~_)WC] sѶs2C ij-kɭ>/r,HҴic^reM/ڽ+7r_oJ1~~}[JM2&^reMyO?ҹ/r_p?տj-k??T{:̢j$U3+C/\]Բ.uv|͕)cC/̘n4}e0N/zWxuO7ޱXI)$IJI$RI$I%)$IJI$RI$I%)$IJI$RI$I%)$IJV[gmӼ=އ.N'U<.GemCjJ}#{->ƧV[3mZ"fZH f {mmmt'$R{qzxhowZI".{+a99W,Cm7}n_p1~<@!DHXp+w+d}9mnٽ;ZUt>YEޑvcwD$|^9$EKsNWR]_Jg8BD̵0*ۖ2,fst'$k./O kyL~UoMYxn=2[c)mdn >7)݌2`۫w,zTX/\(jkA'h~EUl6=L4 ׄE*[}ϚF2q#nOsu ;>_n`Ȫ6llF}Xx?]u 3}LZ1<tj7+sH{t=1ɴcUb|[ŏ{ha`' Xߗu{6{qk N`&9+O;Z]}[-%s~}3+~gW'}K {_Ys  +/6CEsy/;~gW%O'qQ&&v&:kI$I$I%)tP.0w(]o]Idssܿq'ҿXîbɽ+\:ìS'kD">& #oEg$?VۍItœڇ}B6?VۍIoEg$?W'z$m߇qI+?jO HYn7I%Vt^?CoK~+?$??)#oEg$?VۍIY{P=RF߇qI-*zdP[Yn7I%gOUC>ޡI~+?$oJڇ}B6?VۍIoEg$?W'z$m߇qI+?jO HYn7I%Vt^?CoK~+?$??*mA߇qILR[障i L܎ef'BFl?r׎P'6?VۍIoEg$gOX}?)#oEg$?VۍIY{P=RF߇qI-*zdP[Yn7I%gOUC>ޡI~+?$oJڇ}B6?VۍIoEg$?W'z$m߇qI+?jO HYn7I%Vt^?CoK~+?$??)#oEg$?VۍIY{P=RF߇qI-*zdP[Yn7I%gOUC>ޡI~+?$oJڇ}B6?VۍH.۸6tɏ}[88_$HRO+~|ؾߟO>S_L c\?\κ>PkkǴn-<.?t_]7q:m8. sC^49HV-4̌S1H ^4a}Vs#7SE=._WGQJleYx),87}OWO^1_Ee.WxvTIUWO]Ycu6^mfԹՐZכ $pX'ѯJӋ &DpLJ>v)_Y:sk9e-ccku+zInFWKS-֗@5o_ݎװb (coVQ>FVV^}]Aܫ+X6%^ sFz, jbF12$]RQ]ֱnɭ%ppZ}3i,ܪ:-5x{KO|8-$s٭>_|^*I$XI%9_~mn^wH:R؏lLt:Ϩ[wL:5ێU"u 7w_ ~~>zv~[1atOUpxm1 vW>3$_eu:5sK 8Ҳ1~>] ͤ8c Ta^nʱcڃβZлL51.{ldˌH0OhNe? gN[5/FƃUҮnu,L6Vl!d>j6'ȂeO/CW&<^6 XߗuRg 6Cs¤v'j\D5I%qI%)$IJI$RI$B\w]u%srGoJýco-n?M{m5c`cV67koJýco'tyﳰ, XOkpٔcdi#pGtfqe-;_s,ۮcλ7{vm;R?I%ϵ緯xZG{_ן?vJ[:;շOnk?*[]:H*\{R9=?ro^)tQݓlk+u87O-u4=g/+=g37=>4]:O1wH W&鲙zGi%~_Wz䟎OsG3E#_Y"83#o-ݯ>===OogtM$YY ͝W&zsi3볞b4O&Ip힙&;l1}08_w6cx;ICN;:?\6?ӷlf>m4 r~;@7qO$ RzSI+[k{7n IpK7+ۗnz]!^MkW6ˠG)?=nIph9ʹK) q77WG 鯡Y`mdYc, L9u,?8 !Y/=4qHw~nMscl}n:OсҎwd'u>1#Iu4JC}Әm͝W&zd5ۻǫvvލvi%~_~m#X3} gtWM$KWiz@Aա$=h| ́&7h̠ed 0zq| IpߗGgEcnEmkX$lvt~OoKo?~;5&E4itOi<~D=1ߙ=淪ͽ hoո6\&9$"2cedR .u xuLqIlB$0[ŝr*/&kKcMAgMfR4v0d]kOi,y0 !E$=>}5帽/{C׹e"}đ Q΍ۣ{~_OO Cjks=6}b dm9]N v̏_lxC@i9~^ܺdEi0Tּ?s`L ;tr^H_S{ǻc4iA.\{g゚Ss9|S\ͶehݰS:7 =!ͬ" @m9/ ͝7'e\k[yi3m+gG:z-WDi}VϷwTGl:;շOnk?*L c$m%K9?76Is^vH0FgE .rZCC6Wo^םE$Uߟ?s+'a)z}#YcwXŦ M-]h O.??挽+tmumt7YcHot vt&4mtn:}!>i%ߗ?s+'a*C! GckHW{5g]$*I-J121t-F"` ֝ 5W}'?bv_ɋ_L t M=O6uԽem{\^=vlV7/w8Js #Ŭ=K԰~]uG)>?x~9d~qR.ѫúVeyTS{~[YlNCd8(ýic1멌h~ ᩁĢ,GbҍfWt ݶ/pip ۩cuޞzRoQmaK)sk"= t F=4<nbxEǢ eLs0&vu]CCVKcp0HW&>n[fu8z[ooP8v[T3?(FDȊ5[]; 4j$zv.o[ȯ*Z]KkLW^(K/bY{@>.?Q:;xwR30NvU,~r>ŋVFHkkC]Cuw.έ,ÿ.o"5i^6>/\z1jeY7a@_غJ6oj[Rn;vAs8WZ}bMnEm0Lx_ÙY[qn| 1xXܞ8٬jݯ{{nZv5@┽BQOFP+ WUn = 5I$~Ifey?Fh_t[sINësk2k-G;7~j\ZjT02qKDYccitĝA꜑g  |tm7/>m??:)3nυINܸ?kJMI$JRI$I$$I)KvԹBK'f1?ޕz.Of/cQzgZâeoͺ:ܼ^J]n;*WvMa85^KN9\0{ PĜAi/`ƃ>CT}N`}i0~Xq2rt JB13gMKYxU#.W,ͭs iq;OϩX\nv昒4n1<.c'`r$ IT*K?wˌϸ"_;Zg7C7?ٿպo$_-?3?ȧW/kU_0 DltjqǏcSۯG^3ŧ\f}y.3>~?h[6o*_tiqDwˌϸ"^?ߏ6o*_u;鸶x0gO#3(5[0ݑd5 txX r27Jht|%}TAS_MAS_O}Ε++37txC'Okss"q_O}ΐ'ߧj^+c2 ni匇_1XD.oed7GfC2Wm,>C]}F:Y\渙-)6\.Gq'9҉ /U/Yf}yR/Yf}yQ/{+>?dI/`ƃ>K73Mmȫ{,tǦ.k ؙ)>1h̋?WJ4U?ng:@o\5gS/`ƃ>K73+ZWT<Ę^O}ΥWUpp:D5ExK?ss?ϯyƃ>J־>h>tss?ϯyҵ>>u~fetWAS_Y)>XfHk[Z??Vop7\k[73/h>tk/`ƃ>K73+SVWgn9OU4Em=qv)G73 O_N_/`ƃ>K73+Z3?_Mֿss?ϯyԇ*u_m5dCBZ1HFDݘ$R^O}Η4U?ng:6? e?ss?ϯy1G|{ %̲/dEuN7 2܂e9o(>k[1 {ྐߟ\un.nnd9dniE?r -q{P1# ]M|N; ha#vsc o"9n1!"%X~o%o+.? s:Ubeu< Kl.Θt>ba[[c-sH-_<9TQsVH%ӖWU>f1Cx:iEاǴ( is& .9[?m}/OzD-C/ȥcl`esr:[q2XcdΒ8eQm->M]c݁c^[,iǍG-C/ȥctA6̓UGN7}d7⳯; b_74lq ]2c o"߹Y>ά@MιLۿ^Izlvp=@^7?Iw|*M`o恆 P;'EI+$I)I$JRI$I$.]WRO. ,ncr?~I,YK?Dg`rUz%T68;1G`|U~r/1Rt _cNS4 8(Ve3sl4|$@o/8K?'f;/(tokn&N ۨ<͓֏|xn+ r͓X;q买dO/?T4uzW TU *^AsfHRJ:cd(xe[ d*Q؈ꤒIJΥŮ Knͥ^י|2q HlrS9^r<1\r=SikJC-0@% u#MDKI~),]~E0: { $5T'~PƇad{'d7Ԡ js ڱ΍ӻR~P:y?=ILxMDޠ+5Y.zIO?tb'v$?Oy<3i'w@:[rÛ1h&Ոn1i^+;`O8Bxx[LMC^yi-1k kcMd:77P9>+wo~+ y<FHRk~:8\/?fC/:~<^AXZl>Ld8z6Z7" q͝Nkt}@aP}'1}4~af\ک9 tDbcF}rb3?z/LzƿOڤKETI$$I)K/4,{vqՖ}_VMFmOuӮ7G<ǂ:M*[ho'>* shs0$ 6`0ybwS\4yaLST7\QkXڜ,%ͫk{h=Νkmne{-6Auvh\HK3 ?5Vߍ_)geckd5C.S9\i52RBZ\GgU} Y2.0nHX75U2h@?GI@w&e̢K'e"Km}_dI:=jO)yttVNC1"_vߝ0zv+k{Hik)9_m=_l۴doDotd'u61sJ~.=ki YmeV춗\'x< WX]J-/-:M7 xu[t0N?1&z[gfݳDv clƗVǷO_Þv5׵}TJKa-U_Q̃}7%rekmn 5t,44y t'BdPq185/$$2JMֶ^捡:i>ԪpJDzKAmm9 %0a\{@n/T)f6ƀ"cߊh9kcEv8K&5㧚]P6-~c*<˲E>ύFET2 s/237 O.mmYi>vk]ǭ̤Yc\ys[*xU][) U5ց<< O ;GVeŘl7Vyys+=+s+tAy[zVfb/ muL{]: 0܊譗@ֱAK>.&."Jkǥ]M h'Sh/RI)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$/!>z)3nυi|3lݏ>XI$9I$JRI$I$$I)KvԹBK'f߮R1S~yfnjV{Ɯl v}lλt#=a^Hk2CS Ν$om6uNFSqȧmmiɸ<6\";@3`߳ݾ#ou8>wijI%8>wijI%ҿGS1Otؖ$Otؖ$c3:sv}،kEuN5۠2;50ӪYn&5ԳSX &y.ߩΝ$So~=0Nd4;XY$?mzVս%Wj5Ƴe[=6i.3^CnZ[] ԡ1~B]?ӻbY]?ӻbYQL>循KKns}>Ci݉;[=:wK?_:wK?In(VX-hGwsm 26DLU,I,HޔY_Y~:zdN?Y:wK?_:wK??b\f>65X >+]LF%,ǥ&L5,I,I)\Ν$Ν$r]8tZ}g]~xG]?ӻbY]?ӻbY"هөk)F+GE7ϲ?f^ݾ~txj8>wijI%8>wijI"MR}>Rx:>c{noV9FM5C좮2YERe.e[-{ᮨ:wK?_:wK?W-ҿ/'Is?:wK?_:wK? zd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$Is?:wK?_:wK?Jzd38>wijI%8>wijI$IsM]\Nq9L_k Yiw-$褳} c-$ c-$$} c-$ c-$$} c-$ c-$$} c-$ c-$$~Xᅂ1mt}gxg%jn/!>wg31Dz:}_Siy^W?Iw|+K{g69]$W\$I)I$JRI$I$.]WRO. ,ncr?9XcE1.# euxG2[hpS\ ^{fc\m9pPZ d|Kz>&E6gm[El{umݽy`t?GȦɶCi~5>$3D +Ǫ_eVE,}%ͱջsv pDf|]@~BL+WM*6mS,-#جuAke 6ut~Ck >ZMLk겺rrM\. vn\؝%'XWFS[ۉeL^{ݩfi+lsScn͖Zַm掗I e׎RܜheVY4ˀqs>F4̬lv]5mV)ò-{)WP0q~ɋ]^q.{XRgu^=\|6c:[ce, ~;h_gtԶ~ELl{LL*:̬Wdcaa 0,u6ƟmU@ F ǟहlSht}d9# PچX^@kUde'MW^I1^lPAxW_Mcۑlt>5;Z7^in-k-ml7;c!#̡B ^MMu71a`gۗ]v2i55fcNu%]u,pߑUlSjk9ƎHi>I^q>_'k]71tK]D?uf)oPk 2졦Hf} znCٹݍ/Y.vN]WoŴI$!^6=ϧKcSq &d[gйT*yvƲ=Pkpis2,pp<ʼ,,ȱ>KEu-]m̙+ȔQ}T`+*5Y2<2ˀ7̬jk6y Un{j`}:YpiXeYf.-8 > PU*gVV[i7`c ԖFiyq5eWL\iuo@_$o6vcIC^ߢ}W6܊1v6Q3c68P^9׉7V¢!Woc kUƚQu1?X 6.a"(DkK< kB5Uo׺Ϩb˳-ՖG!s>捬=nwcU)k}ixp9>G.}[NSh6nvkx+5[ӬϽ/Hm{Kqyl8FOQۯӷ;C2=;jƯ"cmslpo}5So_ ˿;5yK:ig2n9XчcƵv~(u i»c)9k^)yl`L8NnoA}Qc90ւ5+h~M=Yvj[M/ w mms% W+_MѕeY¦a6ɀ8:fMb}Gak`}w~Iz/}o;?SkÜ׷}-Q'YY ȷuN-?f-kIkm/ ҿ>?U?x5.sm_AnuDteܖ?31αW[\XښYQ@̔_-<:_}|?L˷3m/XǛ@s^XC:)k&PI$JRI$I$$I)I$JRI$I$$I)I$JRI$I$2}£Ymdc8@g;|YZk2cUfE8 E\m-sHw*I$SG10lm~J7{Z\t(.0W[em,ݷmn{+uGh7c9݇ծI+jI$I%)$IJI$RO. s vԖO719{q}bf`q %K]?гVC뤺X16!?%}Ni.ָ]E=-' FD0|^f>-Yw lm40E|oh uy 6u~oBˤG=KiVPq;\@:Vqb/)h>O}xBB9[]sÚ+- kh}W1oS0\1{;K?4O ~_2Umb몃kq4Zѻg#g75S{:׺<=`gZׄ\O~e"NIhͻu&&]J%振Z˙ezVY\l{˪6HߢGK/žI 5[`X0l5U=ku+uMsk; -#>^.=x[X<:#Ru)wWEպWMG7ԟONzzesZYu{K{ݝ5Y}CޡWPf~N-0[*9" Hn<˷)v/uWilk޻Z6?F{xB@t ~EY$_@>%.NmYͷ('F8NuEԾ治v9 {vyqiUwTlo\ Sf\,˿*r-cXvU7۸"uK/.~Q/yYA$y6t\R,n4Ε]]l edX\ ]1sljj7ItGN%kƒ$EL5.zy+m$IJA9ѡ!.B꫺`],{|Z$V/fM^_sY]v;Ɔ[}OZ OuWf[`kM׊;X= l 'Uq,.:.moccYVF>KYxTe_[lnBv溷oYeo=1FANmr=oٟiv5ETONV_3F2wTu˺Cp}lƪ{4YmdA0buz]WYea8=;h6?1Ph,B2nC]ew7hz6U5~xh?p?_b(UnFc/f=y;dhITjۙk(,Y]vmz6;qٻGKxYs{,@=e\K uFEIW(z/ȶzCws^Nlut%+3Yf6Utgdz08kknnZKwo*OxA48ڈmjq+v˱ ] vd3iY[LfEb{.P|f쭤\縹s缗9&I&J?}h&Rq=ywyſ46+vyןzM؏{ÞꬴK@`əO.?'յ#-xqi7"#n_#Y]8lm"K\7i'kHxIuRL)$IJI$RI$I%)$IJI$RI$I%)$IJI$SOQ~sH`]}VX>:`6xݖWImyjE9׈E^,EB;ԫvQܩQY6K֥Ü4XZ\LG>FOPóZ(Z|%$Qu ctS^E}ײF>KiYֿ_Sjfp\w>-kCvjLϗr[-h"fj @/3pkS]k]Xq#P6z?kd)KHVw?I$I$$I)I$Jm6_{o?t?٧tgCs½/WRg ^ٿͩ|I$5I$JRI$I$$I)KvԹBK'f8au4}^tc]ru'"pq~:^XvyXut qa/d2kZS~ϹZFqkuvbbdfqS cwgKii~D°Egx}W4SF~xotuv}YΣ#qK8H4_cf?kjfis? y| Q֙V;4[Wn$H)mߎcbǹ8m̒ D9'ÑfXmVw]lM${xZtQV=,L'RuOġqgͼT:NSٍ~u^u6Ə0I'igf3ْe9LHCq榆U=o~M[].f mοs#0%T899Umlc]g=ioĺ}JSc?)d1212ha1ߔʟK9d߇6ai0 Ѵ']IZk^ k*'IĦj9u8۴>GKzV#}Nnuk+kÞ!]f}aeK4>!p375U_[5f̩aу^&0p9R秒~)I$_?!ظ99M΢x%.+ .k^ k)$n-g2U׵-6SZ6\d+IU鸽=n?w\뮶h ;aZD9L]/Ukhk}fM{|ՎesC&鸽AfG6k7:°26 ` h:vdWRʲ&zxuyoѪjfUTݔ0%5{sA^jsw$:`5INBLcVriiEsMnK~8ܛYӣ;)Z2-%qM~;~oNh4b^\h4\F>D&KVӐCm9CZn;6 :WA_U:y[iauX]AbZ7&GSQNӢTk+XCApLӟӏM-bm.$}ͰXӮjgG콏˭Ȉu9K\ ~lbו^EAesEuoXyٕ:j"X,s}heq5t(/~Uyn`9tkKq. x}W'/csUsκ]uckHݏ %k7}bec۞nƲ 2Cj]:SK/qZ]a!w7"t,r(ٖCeš ]OkXڱ=]QH;^I^FNNC?6C nii4hGĽ_cZ(!ii 6@xp< Ӭ>Oc5=>Ǿ-s O$6]~>܏dcCVk-sñ-l8ɐ<©zT.܊rc1iq]c2$"n-zskmf  OվI~ʬ,_uϫ%_a4 >?e~.mٵ`~3s\~]u:}e C hBVc>}{n{rv}Loi=Gti#ҕI$RI$I%)$IJI$RI$I%)$IJI$RI$ѕs~CvpXH,NxVҧ_Jï9z " Iy>!t ;,K#ozoC߳ퟢ墫g`b*kkc̲50H_)ʺ̻;sj9d{Mxl&*\ш33 g*k5*=cGAב V^#0VZ85ަ9ĹĻR\uҰm܁fmMpcj{[c|GKt])I)c;XG⒖I$RI$I%)$IMO_x`b6_{49h~BW?6We3 ^LۿZ 7c9ϔ}Z$$IJI$RI$I%)tP.0w(]o]Idssܿw4Sc\k.ؖp"G]΍n=} ʲ֏ӾV?}N}buE{$zPyuUu8?["5SGw_oQzX7]i%dȳvmwe8;2uwieekfEN٩-NA ? /í4jk^ݠ{$_gac:Mqsk-GoٙܛqzuY6!&[c}V2η/չbQE o18"OLo̬Jo}泡ˁ+:oN1bʆڲ][M6.뭫6RI$7}ז:Sed8LA©i=Ͳ*OmVe{pn{%10KavnN.C#;|;n_O>R:oƮ2cUnFOCpC昆JTszE~6]cF7j Lڸײ_"4d)mt\ю׊\Z][$ޝ{śFֺ I.NMW;-æea,o8i{ZK[]']b{ȵ֐E}0J PU|Npi}XSa.kmmq" sX:%]g;cnT}}ao&U+u=q]vWruVzuCًK GFjiQEmmuַ@]ٚI$um]FUMI5N)A4!T\YuSv},6 Cv;+QW?1iĭQ[kiw`"PΫIò۩{.Qcqu~`6TZ=:ǂ.uYMoH9zwO s˩ﭶ48i'TphCWeE*r}HBuOsK[Ru];Cp X9s\A=]owp>s oȺb=FU>׺a/he#km[]VY v~iwё5DwetUf3 xeLiXx }O6ڬV4Ct zx~:ުz_psN-XV+Mm}M1='ʮ8tmŕ̜PcQm$OfỦbV8 aApfݠAV~TM2fR[qM6cg^0] LýktRϯcNcZܷe85U[KuMos:VzC`حmՊm}mբeӱj!cG x QQo,ڎFV^6nKEOmٗ_[[PKgջ"4 >t ca阔jӢcZ{?A~}Yv}vYkZos>D ^}o1,pԽ=X綱c{w>zWM; ՏS2f7lh\LLMy4>7kC`ȖuH]7jMY6嵶8oU#OO>؏v$?ۆl>#.$gdcwvM6gѰ5:cccbP|ZEeU41ZV]3 ee\u~'D~jtہaͭecʳ%dcm7?q 8Cto*m׊/O}nYfhd3nҋp˳ed<-;}4}^U[EAC&Qۿ]>|oׄrEr+s丆=~}%5/or.}d[S7>_v㈖tJ 5XknI-=‹~]e6cᶛKM zY;K0M,fCm~FN_EysmSI{|941Yk/9ekۜD4XYO7~쟳0_~ۿfJK1e6Um cGZDI)$IJI$RI$I%)$IJI$RI$hUmߗ~56Ż6;DӺ7 Uzuyf--Ͱm)Z飬q]w*YXj},qU>ky,kѽ&>t } zJ6Hx"RH4mg}Wu& >n?~1Y%vTz]UPy{1YnM޽5ҥnFL>gV53c*u3y-<%qv5cb祈K}p[t n$I)KHVw?I$I$$I)I$Jm6_{o?t?٧tgCs½/WRg ^ٿͩ|I$5I$JRI$I$$I)KvԹBK'fG}gzu}#~ͭ7E~;QC1Z[$WUٱ;5k/}f=.&_B~N.W8u[*x aw,WMX@ui$7gt~gXn%.ζߴ۔Xpe l#sFL@?m9N])^>wbeqȢE6]g?ܫ :5o˳YUNkSs&lٳtt[%]n:B.;,5ߐC&ѓl 9!1eo`c]S{VFVIw*ऒI%)VFӲ<=-vYI$D_'#~Nc9a'\6NJI$I@'/>(뎡0)m&gm߷h_f'$shVCWe.SLg^ơ<|ln{/W`,}p 1&h*|"wNo1dCcF+ٻ۸< K[H$̟G{q+* +e9 cE}-n#qOU:GCehqR iKoZ2H +~$htooߝ6蹇꫺ehTt1;ِ̌g}!mu\W;>$ 7 oOcSlջhA$+i$I$$I)I$JRI$I$$I)I$JRI$I$$I)oZe`b_TjlŸG剟rujKɺֶpԘsX`]JI m]Ev?SGծI+jI$I%)$IJI$RO. s vԖO719W)zMS \/ԯRte$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRw?%,I$$I)I$JRI$x͟x^l[]LJi(rx\&mjgCs´ojs(I%yRI$I$$I)I$JRw]u.atP.?Y#J/Q}AwK^wI%)$IJI$RI$I%)$IJI$RI$I%)$IJI$RI$I%)$IJI$RI$I%)$IJI$RI$I%)$IJI$RI$I%)$IJI$RI$I%)$IJI$RI$I%)$IJXGV3I$I%)$IJI$Soo?t?͟x^;_?>Yh~BW?6VmNsVI$9I$RI$I%)$IJ]?..]WRY??k7/_?7O.pRKnP]uI$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)I$JRI$I$$I)KHVw?I$I$$I)I$Jm6_{WvIyy|=SuK?!^+?Iw|+ٟ[}:?Ey'\&mO|ͩI$5I$JRI$I$$I)KvԹBK'f+G&).; · 0uV^C}ύ ,1? HYR\_aWE-X`Jz=XbK/+"%ow$R,1? HIs']P/Cf!/Ƴ)֜; 즠ϫ<DIs']b O))R\_aWE-X`Jz=XbK/+"%0fbTs߱e5w1[,1? HIs']b O))R\_aWE-X`Jz=XbK/+"%/W,xuq8h孽X`Jz=XbK/+"%ow$R,1? HIs']S}bf`@0{8w{G E\-R%ow$R,1? HIs']b O))R\_aWE-X`Jz=XbTTVWQ9X+@ѻhS֤mqirAJQMXbIOBb O)ow$RSФX`[']).{/+"`u/Y38;ymT]4$Is']b O))R\_aWE-X`Jz=XbK/+"%ow$R,1? HIs']Su/]G3˘(?9i)\_aWE-X`Jz=XbK/+"%ow$R,1? HIs']S}bf`@0{8w{G E\-R%ow$R,1? HIs']b O))V3']3W[&~م7E%6U=.s0Hu7E%6Y=++u *.c[+b8;y~[_w$RSm%S3 `n^[_w$RSm%S3 `n^[_w$RSG=;dwt~O:K;D1rZ>u0aeܬoiM5]CSrLۿ^KK槜vbXmI>.ѻ4 J~LۿZ 3v?SGծI+jI$I%)$IJI$RO. s vԖO719qy}N?o?oU5d`ŷҙ2izJom sƗ5mn`6Y; yWO2[Kq2hC+:&^>ꜼvS^j!^sZO.Bj6l']+sEck=S2şo(~M-TF:Y^G..czMyY}nkesi 3iQ,M@e5\CiŞq,#7T_Z~'ߣYEV07y ȪH0XYQ?{`x`u7&Ȯmnc˃K^VfXdc]k/ȯwj= +{-/p#Es &̽6uk\Z>2$-Y'Z$⾿58)TzT6aBݯ`{L 6JWڭĻc)mcY܍tХ1):ű}eLm%U۵.ĉ*g-`BM}MNpp akfE6k/,~ENoJͶɩ/ъZCho:]>)آ)eYUcH*h8Pg0Ƹp>hWo d:V=nSƛ[w*YcssЗA޿o3Xzu>綳Q!eV D;] NW_Mlc]Pg3sitn:fjg?f?KBKUG1]5dIqu~60=zy+:xC1ַǸnpkAiEao,b?G'Ў>2ֲX-k$;[0ǩYɻ @.7o-/2/ :[;,>˴{)uLܖ_Uls\˩ȧשwCtQP7!V+=Pڃǵ tHt(\<a8XA )1d⥇:Ùmoxkr3jˢN3D2m'{ lG,q\ &;qƹ'̸=: '⏭`~Lzw(VINV]x8d=>u 9dJ#3U(}WMf8l#T⮟gۯ2K]ӑN0c9ݞGuS-_O;UUUmL:Yt!t=7/Ku?.岱[w$v6?en|NL|5YcU|gkc:E nnV-YvnKYHi췵֘k,c)akjt^}m7kWc;gK7cׁ*uzULO;$#_qu7__Y45MBXb;C"|SYZ.޿}wYU溛Xv[!A.Uu $H!s9ȅ_,][K1qAf3}d!'ktΝ1*\kd̓['?tmV-|T!LJ1φTXMmvi/)3 A=Zg_'8Bv.rhjh~j2ƾvΜ?qB8KMB~hh) REӿG?&ZY=;}o+eY-Gb\iڭU=(׻#wG}%<?:7_~U̺^^ߴ>%CNW2}{;)zwRS~U̗?:7_ˡHEyIO-ӝ:~ xu]s˝tu_qGX'Fثt>{;))h}aIѿ*KbewRHD'Fث/XtoyD8,09%ĩNO_SU̗?:7_ˤ %9?AIO'Fnfh3[v֌[gzX'Fثt$ϰݙk5N$IN?:7_~U̺^^ߴ>'no7.#&CdatW!~f>Fȓ?%9>*ffA5p9wmhV}ޯSyK׻#{bdh}aIѿ*]wG}/^JyXtoy'Fثt>{;))h}aIѿ*KbewRHD'FثTî>쿣̚eʸ=]gwG}/^Jp-]}Fk\CN]OQ?r?:7_ˡHEyIO=CNW2_>.׻#wG}%<?:7_~U̺^^7`yG@woDHva;awHs_컠M[@S[ۮ~V]cZ\\ִI%JyXtoy'FثlGזYHAIN?:7_~U̺^^ߴ>%CNW2}{;)zwRS~U̗?:7_ˡHEyIO=CNW2ӝ:~ xu]s˝tu_qGkըv>6졍mVywDׯӿ팏INg?:7_~U̴c#zRׯӿ팏INg?:7_~U̴c#zRׯӿ팏INg?:7_~U̴c#zRׯӿ팏INg?:7_ʾ;ln;]Z1n?Uwy_?җ>ldJJs?h}aIѿ*Kbe_?җ>ldJJs?h}aIѿ*Kbe_?җ>ldJJs?h}aIѿ*Kbe_?җ>ldJJs?h}aIѿ*Kbe_?җ>ldJJq:sOC[ysnb=H+>-?}z;ޕr4T2nHkNֽ: 9~U̗?:7_vLzf<$zwRS~U̗?:7_ˣM H?IO7CNW2_>.?K?IND}CY1cp}]suj߮?6W}S7deX~~^Ɇ5y\&m/mڜ>tI]sI$$I)I$JRI$w(]o]K]?.~n_x=<<Јe$I)^v b܊kqs[I%kX9՛p*ʭkKcA a:eĹԒAX]Imde± !o}?g%¿oWoYBֱקg}D7ur?jʲX[|1̱N˜)%̒M̸kZu=_(=/Q7 ۶;u)LVKSsZSц@'>A%K)}>׿MG]di}5XX_S[&8 i#BGֿ?7G{:Psj.mB hGt#kvQgihuߴ KHnl|B12uXռonK4iPU_.ꆫ20Ak袿։۬./؁'}`u:Uys_/¶>tckhOaлsᾤˆO#.{s̈́,s4ۧI3fS[Kcp~3z^n&_iis_`pT$H)J(b+ (b$;hs!{@>-ͿkJ*u1mt"&{$f[; XX(veM7^2{q dL)3\)ui>7l)~"lKqGooA[\u\)s֊ǼyrX9i6%vqv6׷{s5;w3rMleWs*%T!QK5+}ds\6FҰz?H8YrᎤ4:56h&$IaWS)}:}'kZ8& X-:)*HG*4,8S*l>t--0AǴI$JkKS?OSJlwpQ;,ikCARSOՏw[7]p,wcsT9ŒI+MU7sSSC q$KabӇW[j։sI0tԍ $ x$ΛY~˲[4ӕkoMbݿulł7+;Cs:E+k˚kv =fc潕1c=&9~oC< ̯+CJÛcq:Qm"e]Ul5ݓQ5z='S~NK'T+wOɣFJn$LJW%B_k\wZC6Ll!WU+eR׵E`G*%N_Xz2ٙJ'06 ^dž0\40*Ce`l6odst?j=G#/˙[H˱-4?2 -7 ~["6߉}66Riu.xn[FoKk-WP!u c{)oLWUs E`q5%G'_WCvtddX/ˮˬMMyp*x 3e߶Ú^ˬmֳ֭Ͱ8i ;K% nZhtl(/u6װŮi&e/bclJUZjn4$-ԙ3L?(}%2?*UkMUS9#m61zʄ|ohvpG]G]!ǫQZXm}09s_]u~rFGR"d:@ cGh.1uV}OmN{1i 79 M-~m>eh.h5<$<{Wԟ ?uRg ?3>/>>ͳv?WGծI+jI$I%)$IJI$RO. s vԖO719ǟB"<I%)$IJI$RI$WuQk][dOeif}d/Ezŭ qht BJz-E~5<9?Rg))?z_[X[ÓE/|_"-E~5<9?Rg))?zksƛ¥5<9?UQ)/ul~ Fl l JjOO )Ƚָmn5^@h2]5ygΌoԿ cڞZKN vro^JpF7_A/эp:_[{;))q:\ð'b{;+ET'A0TI%)We۬EaWe۬DnEv5:Cʋ-òoe`w9<9ǕZl;K^ˋA?|&?gR:,8Xnu{6u_07Fq9k#scx?b0r_b0r_}_ntޙOOt36cXZzuV?5awn|·_,?cv?/cv?%:Xu:n%sE_9v. Z?ީ |z  !$uVMF{ii1ĨΞϲS]7w`NJ2I)# j91vURbv! ڞ-uKb|;BI)I$JkKSzn'L,4_S.~9W]T:i+/Xٳz=OO"gnlnny9_'춁{ƩѶM]Ud;Ngts#(zw(6Zi<%_S@܎Eј^Z0cHulY۾,g94-K^h52)n8kiNsݛzx5d.Kic-O(ִi$AMrp^&;r3r5uIK,G(cP?sgxWQڇ/쭿k'#ۥQD);});}gVG}۟_Z[^]UsC*wLp5pmcc;fMZ^GER >xMo\c-\cs:۳ƹgyë-iDz5q:5ӟGP9.muU}whc ~ZvQ_j;or7}q|od}q|oes?~?Tf K,=gmY8- 'L]E {q:A߳繧xk^'~_DN~?O?Osoֲ~Xѻ}M'qQŧWszFcpWxŮYN xD& -\c-\cntGW9-]ڝ;Y]>mv6vm*ǥ?In47kd-{HH7}q|od}q|oeЭɶbzvY[ӵD'Q%[("lZW:ss)-[Y}ͺˬ2@8׸|ru 7۔X\ 'ntREO. 9hviBжzʱyϿ[].É~?8KWs_jtofB_S{33zgUފ[fz罺]cߦ.}o~~=`5׽ "U10:kF~f˝nysĒWuRg ?3>/>>ͳv?Sc]$W\$I)I$JRI$I$.]WRO. ,ncr?wG?D:?Gy4",YI$JRվ3+웾?m1ZI%<ȳ1kõư:`e4/~fdaݞh̤cj 4H]"It9W^tAn٪.AnSI",18uBTcY7c\گk y,wSާ#=cE sX4O?d>etGQ:qSx~ؘWSnfܯgz5a=/_]K?&#~^%V:+Ny$IJUG?XUG?%7pʷשf%\ӿ-?Wү墒GL6mL,TVͻ#Ƿ$ʺ3(:6L;*ɬ۳.swCvݱg7 &醱s Ojޝqi6Vp?Gsl;[?5Z~5vlI26;v5Jӿ-?S8;Щnي Uguɵ[k`9%VP۝V/OmYU2ppmAmf1ýis[ZKLf'DыMV& lvIIpicMs X6ÞO>?xX@?z08ЈM9Đ@%S66H1Ȋ1X!qxD<|UI$?8(=#WכQ98Ě5cJ׍ӡ )t7;U2}=μ];vviczYMv2 6X92INVkp ARI%9' c5P\vcC H7SƿuvŎXl 9}V$I)x:)6\8cF@.q$ouXwtmX}S76h*̫@ayyc:P?(ބt[H{k˜O{q8S]׎miYv6{?@6k@\펣=O?/G(zB_J^ KAЉ (}Z1=YvMk*wҮHM8Y?:P?(ބluQ )pQmk̟_"܂#MEVJx}r:P?(ބluQ )=Jx}/Rx\펣=O?/G(zBJzRxKԯ'cS2KQeВԯvaAP?luQ Fe,,{Ě.7]7zo{u~lV+m{ݡsI$:GJIGX~T h힣wzo3R!:?YsdyG\OwyRSfc-umېsa"L:[c 6*et%a&6NfC@HkG?\OwyR˞n*JA'Bs½HX\Z3/ SZ?> Ϻ)3nυi|3lݏ>XI$9I$JRI$I$$I)KvԹBK'fj?yQRI$I$$I)I$JRI$K }c~]E/{7k\w~Cv)uIP;=R:鲇\cMuw`~.~Cz{xWu ӛKmgzϳ&Xs}[^KCDq;Z!h ujc Ɓ.s!q@I$IMlΙs}N}?^ٷtnۼ X_WAO_20盛,xݴ1tPfcM溱Q[߸4{v3Jcl\ʬ/ X_WATſ(8 ׇM0hc}& \c]$M_=Y`2ݒ C1~p|4It:gUa=_z m]#(atRK{j6 'Tg Lk<̆c\lCRꮖI)J(b+ (b$s^]]pp8԰>o.&=y6׽\g8x އK۝+>ֻMccILeܻݗrV1zv63um4 &f'/oM%9]? nv+9tnnml~&އV%ۯ۰9yQ%wt ]? .esm[bH-֏l{:&Ve4[k)ݸ5a cc8öRcVqj$oEFM~'hXXz^5YX !^S|a,x INH86da'"esaD˛΄X$`L} )I$I$?8*YspsIk[#BiQww&v=fpbRS~pm]AcsHhuklLI]!®_nSߺu$NֵqQ=7md=MnMiEmhpq %5]mݲֶ@Oz/;\ cNJLI#Oښ7GoKφ2l5M''cē2gR44I0d4R,0F1=SA:@kD"/Nl Pϱ:fz{v#wfufGI |O.SGU%ް`G=h9|7ud2/ټdž-~֮ kͻ eg`>Tj>1ljĩau8uv>&'atkڬtNr^jݙY"{HZ>c%]6sΩcXPMfQOS]_*΃ӺmbϲztMP~.ɧ s}vٽ!}cH#~׃Krr?Oelnf}Te,-hA&_9km qdѵ≭H^]wV/Q̦1˷W;붷cOmZhus6Z'$;m6:L̝~䔪?򬞭oV zR[uvdT#>kZF5yGcmlxQ>Iub5ѩ_Uېޟs9I{߶W:&鹙edbZ5vkl F3 wF]]pdl r>Pz>U%u?GNGEp11\\R?3>/>>?R+?g|^}?Iw|+Kg69&I$I$RI$I%)$IJ]?..]WRY??k7/QtڏhDXI$I%)%b..kqi`ĉxC=&'߾⦅4F}ɤm%,ѿ}{?iIM. Y_k}Ɔ7u~h;L]'tJ԰:1ʹ`Xs̀rW5*Qhҩ(<.5zfP㚱[^.M5/ѿOp<_bƻ=C4UWd[F997 :5JJa')%fLLNiuL&;nsjc\:yY#B8*~47FyUm`] n >N{]IMGcã}nߥ|BAt &7+)!Jjz$W lՠQaepA4"$ kKSl5 L܏ ?8*Bߜ$w$f4dWպ2/nn%"گ k.]RS$w$2z6UOLeyi:EfUU2~>hUA1_Kh4KOE$w$ <YoPȧƱ;Z<]x-ۖ.,f>Ǎu glR/E?GIBSs[[K  O~^?e~{궰>;k H04쥟')%%4ޠ]u˝mT X;zG&_Y_gԿOukd׌[mր-Kuhtn쒜?+a2_~WeԺ12k3TƂ];@3*z^}vtzrqY&S-{]͛)xIN/E/?+a2œu,f8eQeE`24c<&3,mŕ闾'saS%%9~WeoH+vi6\Ӳ y6 sLjWX!]^=skl[%ĖmjIIO?;zG&_KvL"oyXؔdd`=Ȫ]2{5DZbHVS03մѾ\ڭXI$9I$JRI$I$$I)KvԹBK'fj?yQRI$I$ȿ W,un,>cu ^Wk??޺>UjS/n,=.VOm=|z^陣9Ӕcm[h݅IڋFwX?;_ck;}y{+y}d,tj7K]cic-h|2!(F9gDRU]|@V>tՋs@ ys4A7\.W|7uek}GӓVKs:9 $:]#DcF4R.̫dž7tshyvR e#8Fdl<1/d5\lnk=\\I06't#>}q_nƾa5堉2@3U?k/m"A{1ߡsɕk371`xs}_In %<=2&93qБ)h$_o+5V0+G2,7nMmudR[P_?OC1$hpqem%΄=Ѻ}][U-ɸ]~ ^8+^}S̫ kscqnϒpz +ّ;af x*ٹ 3bxDXˮ.?i pCKMH0}՜~ ջ:|.q.p ?\ɿ tUN>-=/., e$c͓D4p^\>;tNӍ8z4I;^V~|Ou*pf];;?t+C͸oǠTi;hqU,/dOeOsf>p~NY[-?'3<a)KS A͚]eU^jT%ē.W8_tV-}}$IJI$R{QV{QIMYGVr=BnvUV\@.>Xp<򬮪2~N>5b^+յ:Y[y>))F] ȡ۫| 0Ak $&ek.7 qhi$ & dkI)2I$૖} ~r.N {5`6싮m-n}#䒛W˷UMcZ6&7 :UY?ʔoGIH*M[]n;2*uw̱s tqkk}ޭeӷh{{,s];}/T>o*W3 ukNi { HY];n-6XmS^^պˤK)?ʗnGcvYZl q{]L'NYrRU ?ʇ:5tX d65?Od>b˴xعR'kɤk ;6>\E_V.Nu qsXaoψqapӴ'IMʾo3k8Jqp[z>\l4˜6:{voobjɥ;\M_4*;tBfyf˾+01sx- \G&E^,*Z*6kɳuoVN+RM>) g96/a6I<b!;\M_4wC˜O&_jӇF-tcnFYC@n6#="/ex6Xm l@8.q?&_'J.cwt?ؚi8WM%=:K.q?&_'IONs+wt?ؚj9ܜ{MA-00D$V#kyuF-W08{}GOnf#S`I)%WaUL_힕cʰ KZF,iw85堞OdO}/Ta_EWuMkV6cD5˵\5` JN:RٌG+%TrXħ#)e23\B-ťPzW737su@^zCNøn8Tg[WtVt_4d:[vNgR7[oiV6?L͢\ ӑnv$x#un{x{ kGmykD<+L!Ye@z}Gm)>']zf1z:\ꌵx>qQwIOSm ugqnh07rέzFO֑ůa-wȪ9믴 $>Vx(\21 2|JL4Fղ6B n~VwRoCyǢϲC}1f>;/G_PuXƹI<ʇHR쎛al.em'7tw>1yNj 1"u HւN#znN[sO^"\[۱6 [kNY >t*z@"N2c65rYx6bfT2*;_[*IWd~7:!hSZ=d%s1!)V?\=.ī[/Mұ9ÇGk}\*5X7a]骫պ/T?exƸ8{ kE_wԏMzuf,X_O*\9iy`1/q+=G✜n<:~KeP] tfd̩ͅ:RN+Y=edax ‚"6R~3J%k]ԯpWNI$I%)We۬EaWe۬DѿN!.0ᅑO: K`-9= NƟfJqF7_A/эp:_[; n?m$tcWٷ fJqF7_Ag}bC<lo2;.< غͿᥠsa쒙!9BxQ=g7rpc'cOKqGooA%3upsQMٷ fJ]$ۏ; n?m$Mٷ lcX\f!ys@IHq]V2_s*>ǞZ\IU]K:Mlk,s9: IHqzN[0Saccq1zA`.Op[7MGݏe_ES{81>:&ȵ{~ёvlE:hWonduӣ+m?1eo=|:V|7trCbXn6=hsGLƽY<cP1-}6Kh 5[S4 cyNȯн̸]_3~fadD%T[4;wC,hn($Gwi5c]2kmcZ6&7? YxWrn;\V569=V[÷PR0VK(m ^4YU->zi]ݿ];ֶSP7]W^ٖ鮨vbft"]YSi0sf;M8̌kd<<5s*= : {ȇ^}@ Zib5_SX[Ө ]]0[fʟpc\h/' Dpϩ؟gr+˪ޡVrr\߳sZkXǁ1*EMwN⸲{kF:cʅ}cWe_o] bn~hp[_?&2Z9D/sujAY(afW[_]ek]k^8 w>ZCA^?kN-O؋ swkcUll΅YinFE(k,cnq:93 ga?}09Ķȍ_JGE85g 1hԾ!t<̮_z$+n[s_CYaxIfՍD`~p?OvWF[wy%zWteݖou{vՓm5-cդx-?YQLcc]ۋç uT}<&EUuGFv[Ym31[[?EB{w3 Oڬ-4pL V].OX^K1l}Z1T`gv&E}97ݐvC曠>I+g\u.vGHֶӏm4z _WX y }/;d3 {eLcqc!ñ#zW_׋DMnE5ciq67Dd~YEd5OPn5RMƻ0UcGr^k";Zn?7sUp ]8UaiqQg'Bs½OgϋϺ)3nυi|3lݏ>XI$9I$JRI$I$$I)KvԹBK'fj?yQRI$I$?/?OU]giq)I$J{\ԾugUN6.|vlf\t9v$t(="̿XNJ4'mG]_k^mLUF@*]aӺ׋k UfcbD"?$.q܉Y_w :ZḱԺVR㹶 f$~M?XRek/:%D=k_DT^n9W]Zoݻk[RtߩSj)v75XLŌ×ɋ&_%+dA#Vy tKvOA]G3==ga༝rX'i?JtZX(.?Y4b c@X_7Ny6e5  pktLof E9X&T'km~hPI2cÆ<XK5ؿG7gUq>f[\~q ۘO&g/>z6R=knص jh-uͦd:iqq*}0:/VVUdUck^a%/`xg"=-] Fw(Usr٥F<1XK2KwBOo!kɶǹ2#k6CEɳ/*cȱ־4K|܍kZKsJg N~J_үZ(}}$IJI$R{QV{QINMU_W*VuN^FVFc2INJ[llǧ<ޟȹѦ'@HuP]1ݙfC8\ܛ0fIE^Ƙ"|Hol~QNH,vi-tc&0zF {wmkI졇çgc0##cJulx“rɷ!e, [eqk.emO=ȧ1eڳ\}F84 `S\A/w࡛ԔG:lŲQ8b\2oOE6tu~.6=>=Otp}๋:Js1+sl߷tj}M˪gMs$n¤&,?mpK# ^[=cjv@uS#s+oєzz{mճgu<)0;w=nG_mp\-[ΙU5唽hƵuU~>0Mv ]QI>vkCQ'?# }#}sԑお1K݄H?4 z/;:uu::mvϧsvcA#@4tOp_mpK# _,8_Aa>F%#Hl̿Wb9?& rc ӈz*I϶x%܏2^?̿WbgUKw>ۑ>rۑ>e۝U? S(ǫFUX hNęVy38$+tD%*K1c*OM; ScZ:Wr>ӌ́U&+Ş,en6mq{>dO WaVvwX>6﹤8IMo}(mج?.>6VZuZjm< s50c=>-t[4sd$3HpVk~f]nasOuRg ?3>/>>ͳv?Sc]$W\$I)I$JRI$I$.]WRO. ,ncr?wG?EYX:[s+N8u|߃rj=ްd }{/ܚo }{/ܚo7>g9EGi?P4,Ok>߃rj=ޗM_S*?T.m&c?&}{%>O2]SM/Ok>߃rj=ޗM_S*?T.m&c?&}{%>O2]SM/Ok>߃rj=ޗM_S*?T.m&c?&}{%>O2]SM/Ok>߃rj=ޗM_S*?T.m&c?&}{%>O2]SMjNڛUY}DkNh{/ܚo }{/ܚo }{/ܚo꽿(b'~ɫz _[s 4}Wӄ~>;\Ih%71hܚoW옿k4r_dC_~߃rj=ޗM_S/b} Q~ɫz_o5ILɋG'f>;ʘhC?&}{%3~>;\Ih%71hܚoW옿k4r_dC_~߃rj=ޗM_S/b} Q~ɫz_o5ILɋG%L_5?G?&}{%-.N O Ve^\Iۅ3;oΧV54_zv 9EDE_|re#r; ˵0U[} fw5 VOnF-piiǎJ_idCPΏM>w#Dq~ޕ[N3$ӽs6fݺõҳ쭮= }'+?풗r3(yz&#\}bQ?jz#¢ʞI%{^ެ:~IӓK9?_l<ه 9 ZޤKqEp\^'9Q3JEVSp34I"D XØ_Z4?7Omg]_Wqmtj=R9T:M}>މІUͮU-n9ku:xX&IQ#gaI2OQSӺYyWCmȡcť>Z m{@WV.NX$α~]It33ri8ri8dIDŽֿN;N/vOrw?tQc.e%W{[ãh$Hn%8/s21d>~4?I~4?IoťWT W~*'teS|_&9vhڪәkr/ǵ\h/ecG~4?I~4?J/7쟻!2=ȍGSC[:vYxc>ьme&ڥgSȧd쿳dlc:; W6׊KnV,OO$,OO$|R6~ \SA5G*8?V.Y=`m,/lR3^tr}y=.ȭ#okv`]h%'ɧC7r !Non$4?I~4?JĿOĕ?X&I/X&I/ĿWĕ?X&I/X&I/ĿW'}7|@ri8} I95I[i\-͌pCBu>EfIƁq_&0oϿ^uU?Ym@J#oKWB;>7 dfQ{ e8A=|[}B͔YKsӵezC{{B3_[)_wQ՟ԟ ?uRg `8rZxsIk"A^}?Iw|+Kg69&I$I$RI$I%)$IJ]?..]WRY??k7/zF'MGko5XkO}UٟV5yKfgWcN.kH׵տqp.ѣ۴y1gWKg畟 _Ahuk+uV_M Ǥ]]a'`Y{=n9aS=NwN W5C3c +?z:V-ȱeET[kkEx1x˲ðX}Ym"C7nsX] dk?_ٟV5fyYHʷܷ9nEWXƆLhTc/:KYnǠrl`><]k._G3c +?%TYkv:X=@!xb:nqKq~ǵ Mѿ~ѷ֫4?/U:_cɭPn.u?H?wg3Y1<4"{}U ?~j>xAk5uQ呈p,&,{7a%?&=_rMmeCzf9+,Td5W]-,muT4zq; >lՆyj }yOxgQ~CY5Ml]C Z#snȽid){l2KCET6տ4W}-C剮|ړ&؝˺mThmU{j.qAg畟 _An54-N~U86[M`+6CcH?w?afccٟV5fyYYgDzn}},su|Ukkl>O&85qv+Ndaq)(?fyY1gWW[/&ybxwSck6^,-0ll&[3c +?,/9fَzeޡ}n|{\ad,y/n-V45g]}eݒ *m?ٟV5fyYMYkCl okIsAleuX+7vSû|K TS}~v]-{EzgP #W9~}r뙝?[bMP2%4ro Do,txLYWGԢg(c&:]n(J25dl,lu}˯&_ _Mcu<89ca?/mW ~L g¾)RKnZ=^_ _M/.9l6nKwl108hxk -s[){'"-8K'οu_Is I.0%C͖7 Ѧ7$ssC_1$`i_I:WYvU;v>㩏dHhlc05aקd^8 K?6_I:WYoWkZ:u$F8z0^#l׿t|CE_ r&6%>A]{]svGNY]jS*{tohZt[eƮaubv.暬]w?ڃ Ǫ[)|_Ŋ<0 'qgRa%3c B,;yUUE6ֱu-?%n~dgsX.4Cd4ia%3c ޻r-s{(v׺[c@lDyg^˲^#e8"XU.@k+I< diM?ٟV5fyYf$cg{C75,hf}ӘV:n_R#)USsXX754zm/)1gWKg畟 _Algf:s*s}ή@,FrUs= m]b5v"RkƯ+?_??<j cٔ×sc^f+k  ! u쾛)n=m.{wk*lai◗kGKVL@&܇=qƭ6YENFUyewjJh}݉}݉I)v'%v'+$:^؟ȗ:^؟ȯ`{b"_`{b"Jh}݉}݉I)v'%v'+$:^؟ȗ:^؟ȯ^γssj뙮ۘR$*4u,YcC88NխW d秫Se*uUZb|w9Qؘ-∕ہ#c 3?GS]/Rʷ3s}zMk[][i.#?g.fb9 L/nEle/w'$W* 8`>.3?_??<j {0i+u]_Xְlp~ӻVĝfֵ۝mku#G_\y",t v-#c 3?Ҳ:Ǧ:HGf6ݶ })UzgRybߓeۊ-fͩ\GG |[fwVYMm7:z]+3#XMsmM{X7lۼGcB[oSñә#c 3?ӆEn_KnpcE^<ܟdsD !OXSߵzK&Z cd8Mty_\&mbw?6Ww/'d;v \Iq9%$$+?Ke#?_iLgKz~ ,} .s˵`ZҫIߴ<,$mn. .Op/)q2E/^Oؾާ~(];,3`:{5q_VoAi ~&V(_bK"?d>lrdžRbh:S:ѐDt+2C!hlCS\ԅ8/Ļa*)q.Jg/(~9&?ߍ6:JqHHlZX+.d& v\H8/Ļa*)r??O.Zkvƴ9x$㮆*sZct!pL2wO#wmJ//aTNH=:xǓ$GK{wcېͬck]Sg@L[SX5&Ө O4&_3H8ƗFy?aezv?l?L{jl^NדǓdo/{-kLrQGHC/ckenc/鸍k?Ke#?_iLgK_>z쮋Mpk^k+{XIklj~JV=U:Vݮ2uvֲuFq2E/4&_3H{/}cu[I-` .t8OU^P9s%v7s{q2E/4&_3H{/}=_^[OmKSp/*X~>#݉L4|&HEߋ98>!%3,2H@phH2Is&uZ? GKpua(*pno/{r}&I1pq š  & IO`_"qQRN/G8r5.q>ߒu2 RI$uH8~C_w}o"A$cZ *{ 4$g`m5L@'0'k%E/H'm?l+|_s7w|pz44Ʀ,@.sA?]!J?_? GKOXR+ܥ'7]\:ZAЂ%oO&op?*{ ޸>oq CDpDf+-k cϧSs:ʈca_2Km{_l}"_/aT輟iyٵâoս=m9n ]=KjjX]my\_/aR?Oe#?_輟W?lַts޸{^9`l-f󫶁'L^>?{msqiLgKp/)4Uv?lۏMϩ7sQ!ŮtʧGA66˽Ae6_u;$5Yc$\_/aR?Ke#?_輟O!/eӱ0u0찗Xl{s95{5fidnį҇87Ŀa+)_{/$poWR?_y?aezñc_BIyH87Ŀa+)_{c1% _KpoWRE=c_BIyH87Ŀa+)_{/$poWR?_y?aezñc_BIyH87Ŀa+)_{/$poWR?_y?aez~Ϋ?֖ \,v0t bƸHq-JX B< ~q2c$ߌ#HsisC;ZL;;(QuʪEG{cZp\_H8ķa*+/CGC .;kk Q/x[D]m;.%WeaK"_H?N1^B;|WK2c1Ǥ5IDqU_[A1IŬKdA9%paK"_H/p~q~c_ESYLT\ IIJ^ efmV"s2;ku;,+pc FVp}Msiu}{7/=? [%_EĎz@|C q~c_Hw?6V126H=K+ifCto.KDFKGårD# } >k]@#I$RI$ endstream endobj 11 0 obj<>/ProcSet[/PDF/Text]/ExtGState<>>>/Type/Page>> endobj 12 0 obj<>stream HWrF}WV[$;M*Ue[mmm 1SD_gpP~H }gWɢ_~~E]ؔbZYdj{a~uZI-d;o 0VhF/4"i>L#-5=;Ӗl'/E]|b6$4ۈTۉg-,?Ny"-bg# rZqP^DAG%ᎌ-M\3Fm9sl3ÙmھNHJ% A)J3Z rMߥ*1F&WGx%)%).،o$I.-+)8 sJ1,CiS:Sf[mTs{$zL{!%;;¸]NVmlٱL9=Vlૠ@pReN}!)waFeK >_J6rByq'3Q(Dzow/jvMEc 4ig>E86Pkhf=(0u^ jC\$]^;}b0;j?ҧ7:w7oj/9l$.EUHSzx B0nAkAS ]d

Notes by John Nelson G4KLA
9 August 2009
(with acknowledgment to Joe Large W6CQZ for breaking the ground.)


This guide is intended for use with Mac OS X 10.4 or 10.5 on either PowerPC or Intel CPUs. There is a separate guide for Snow Leopard (10.6)
Current Macs arrive with Python 2.5 already installed but with old versions of other infrastructure. We will come to this later. Hint: I suggest you ensure that your path environment parameter contains the current directory as "." Please note that you will most likely find later versions of software than those mentioned here. Use them.

Step 1. You need to install the Mac Developer Tool - Xcode. Visit http://developer.apple.com/support/mac/tools and create a (free) ADC account then visit the Developer Tools in the downloads section and get the latest release of Xcode Developer Tools. You now have most compilers, but not Fortran.

Step 2. There are several versions that are available but I recommend http://r.research.att.com/tools. At the time of writing the latest version is gfortan-4.2-5566-darwin9.tar.gz. Download this and copy to the root directory / and, after logging in as root (type su), untar the file. Exit from root (type exit).

Step 3. Now you have the basic Mac infrastructure. Next you need support for python and WSJT code. I suggest you make an installation directory such as WSJT/Installation into which these various downloads will be kept.

Fast Fourier Transform library Visit http://www.fftw.org and get the latest release which is currently fftw-3.2.2.tar.gz. A useful way to untar a file and to keep the original download is: "gzip -dc fftw-3.2.2.tar.gz | tar -xvf -" (without the quotes, of course). Then:
cd fftw-3.2.2
configure --enable-float
make
sudo make install

Numpy Change back to the Installation directory and get numpy as follows: Visit http://www.scipy.org/Download and get the official release from SourceForge. This is 1.3.0 and select numpy-1.3.0.tar.gz. Untar this and then: cd numpy
python setup.py build
sudo python setup.py install
This will create /Library/Python/2.5/site-packages/numpy.

Scipy Before you install scipy, there is a fix that needs to be made to the basic Mac OS X installation. An older version of numpy (1.0.1) is installed in the /System/Library and scipy cannot be built against this version. Login as root (type su) cd to /System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python and rename the numpy directory: mv numpy numpy_old and then link to the new version like this: "ln -s /Library/Python/2.5/site-packages/numpy numpy" without the quotes. Exit from root (type exit). Now you can get scipy. Change back to the Installation directory. Visit http://www.scipy.org/Download and get the official release from SourceForge. This is scipy-0.7.1.tar.gz. Untar this and then:
cd scipy
setenv MACOSX_DEPLOYMENT_TARGET 10.5
python setup.py build_src build_clib --fcompiler=gnu95 build_ext --fcompiler=gnu95;
sudo python setup.py install
(Other advice can be found at http://www.scipy.org/Installing_SciPy/Mac_OS_X)

Imaging Change back to the Installation directory and visit http://www.pythonware.com/products/pil/ and download the Imaging library (version 0.1.6) for all platforms. Untar this file and then:
cd Imaging-1.1.6
python setup.py build
sudo python setup.py install

libsamplerate Change back to the Installation directory and visit http://www.mega-nerd.com/SRC/download.html and download libsamplerate-0.1.7.tar.gz. Untar this file and then:
cd libsamplerate-0.1.7
configure
make
sudo make install

portaudio Change back to the Installation directory and visit http://www.portaudio.com/archives/ and download pa_snapshot_v19.tar.gz This is the version I use. There is another v19 issue at http://www.portaudio.com/download.html but I havn't tested this.
Untar this file and then:
cd portaudio
configure
make
sudo make install

Step 4 Hopefully you will not have to repeat these procedures again. Next step is to compile WSJT code. To get the latest version change back to the Installation directory and then svn co svn://svn.berlios.de/wsjt/trunk I suggest you use an editor (e.g.vi) to look at trunk/wsjt.py and find Version. This is currently 7.04 revsion 1316 and then rename trunk:
mv trunk wsjt-v7.04-r1316
Now
cd wsjt-v7.04-r1316
configure --with-portaudio-lib-dir=/usr/local/lib --with-portaudio-include-dir=/usr/local/include
make
This should generate the complete package without errors. If you are successful, the final line will read: mv Audio.so WsjtMod Finally (!!!!) type python wsjt.py and you should be in business.
I use the SignaLink USB interface to a TS870 (for HF) and TS790 (for 2m EME) and this works perfectly with WSJT/WSPR

Last point If you find errors or omissions in this document, or improvements, please let me know. g4kla at rmnjmn dot demon dot co dot uk

wsjt_9.3.r2792/timeval.h0000664000175000017500000000267411015074716013221 0ustar jtnjtn/* * timeval.h 1.0 01/12/19 * * Defines gettimeofday, timeval, etc. for Win32 * * By Wu Yongwei * */ #ifndef _TIMEVAL_H #define _TIMEVAL_H #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include #include #ifndef __GNUC__ #define EPOCHFILETIME (116444736000000000i64) #else #define EPOCHFILETIME (116444736000000000LL) #endif //struct timeval { // long tv_sec; /* seconds */ // long tv_usec; /* microseconds */ //}; struct timezone { int tz_minuteswest; /* minutes W of Greenwich */ int tz_dsttime; /* type of dst correction */ }; __inline int gettimeofday(struct timeval *tv, struct timezone *tz) { FILETIME ft; LARGE_INTEGER li; __int64 t; static int tzflag; if (tv) { GetSystemTimeAsFileTime(&ft); li.LowPart = ft.dwLowDateTime; li.HighPart = ft.dwHighDateTime; t = li.QuadPart; /* In 100-nanosecond intervals */ t -= EPOCHFILETIME; /* Offset to the Epoch time */ t /= 10; /* In microseconds */ tv->tv_sec = (long)(t / 1000000); tv->tv_usec = (long)(t % 1000000); } if (tz) { if (!tzflag) { _tzset(); tzflag++; } tz->tz_minuteswest = _timezone / 60; tz->tz_dsttime = _daylight; } return 0; } #else /* _WIN32 */ #include #endif /* _WIN32 */ #endif /* _TIMEVAL_H */ wsjt_9.3.r2792/k2grid.f0000664000175000017500000000036611015074716012734 0ustar jtnjtn subroutine k2grid(k,grid) character grid*6 nlong=2*mod((k-1)/5,90)-179 if(k.gt.450) nlong=nlong+180 nlat=mod(k-1,5)+ 85 dlat=nlat dlong=nlong call deg2grid(dlong,dlat,grid) return end wsjt_9.3.r2792/moon2.f0000664000175000017500000001446711057527465012625 0ustar jtnjtn subroutine moon2(y,m,Day,UT,lon,lat,RA,Dec,topRA,topDec, + LST,HA,Az,El,dist) implicit none integer y !Year integer m !Month integer Day !Day real*8 UT !UTC in hours real*8 RA,Dec !RA and Dec of moon C NB: Double caps are single caps in the writeup. real*8 NN !Longitude of ascending node real*8 i !Inclination to the ecliptic real*8 w !Argument of perigee real*8 a !Semi-major axis real*8 e !Eccentricity real*8 MM !Mean anomaly real*8 v !True anomaly real*8 EE !Eccentric anomaly real*8 ecl !Obliquity of the ecliptic real*8 d !Ephemeris time argument in days real*8 r !Distance to sun, AU real*8 xv,yv !x and y coords in ecliptic real*8 lonecl,latecl !Ecliptic long and lat of moon real*8 xg,yg,zg !Ecliptic rectangular coords real*8 Ms !Mean anomaly of sun real*8 ws !Argument of perihelion of sun real*8 Ls !Mean longitude of sun (Ns=0) real*8 Lm !Mean longitude of moon real*8 DD !Mean elongation of moon real*8 FF !Argument of latitude for moon real*8 xe,ye,ze !Equatorial geocentric coords of moon real*8 mpar !Parallax of moon (r_E / d) real*8 lat,lon !Station coordinates on earth real*8 gclat !Geocentric latitude real*8 rho !Earth radius factor real*8 GMST0,LST,HA real*8 g real*8 topRA,topDec !Topocentric coordinates of Moon real*8 Az,El real*8 dist real*8 rad,twopi,pi,pio2 data rad/57.2957795131d0/,twopi/6.283185307d0/ d=367*y - 7*(y+(m+9)/12)/4 + 275*m/9 + Day - 730530 + UT/24.d0 ecl = 23.4393d0 - 3.563d-7 * d C Orbital elements for Moon: NN = 125.1228d0 - 0.0529538083d0 * d i = 5.1454d0 w = mod(318.0634d0 + 0.1643573223d0 * d + 360000.d0,360.d0) a = 60.2666d0 e = 0.054900d0 MM = mod(115.3654d0 + 13.0649929509d0 * d + 360000.d0,360.d0) EE = MM + e*rad*sin(MM/rad) * (1.d0 + e*cos(MM/rad)) EE = EE - (EE - e*rad*sin(EE/rad)-MM) / (1.d0 - e*cos(EE/rad)) EE = EE - (EE - e*rad*sin(EE/rad)-MM) / (1.d0 - e*cos(EE/rad)) xv = a * (cos(EE/rad) - e) yv = a * (sqrt(1.d0-e*e) * sin(EE/rad)) v = mod(rad*atan2(yv,xv)+720.d0,360.d0) r = sqrt(xv*xv + yv*yv) C Get geocentric position in ecliptic rectangular coordinates: xg = r * (cos(NN/rad)*cos((v+w)/rad) - + sin(NN/rad)*sin((v+w)/rad)*cos(i/rad)) yg = r * (sin(NN/rad)*cos((v+w)/rad) + + cos(NN/rad)*sin((v+w)/rad)*cos(i/rad)) zg = r * (sin((v+w)/rad)*sin(i/rad)) C Ecliptic longitude and latitude of moon: lonecl = mod(rad*atan2(yg/rad,xg/rad)+720.d0,360.d0) latecl = rad*atan2(zg/rad,sqrt(xg*xg + yg*yg)/rad) C Now include orbital perturbations: Ms = mod(356.0470d0 + 0.9856002585d0 * d + 3600000.d0,360.d0) ws = 282.9404d0 + 4.70935d-5*d Ls = mod(Ms + ws + 720.d0,360.d0) Lm = mod(MM + w + NN+720.d0,360.d0) DD = mod(Lm - Ls + 360.d0,360.d0) FF = mod(Lm - NN + 360.d0,360.d0) lonecl = lonecl + -1.274d0 * sin((MM-2.d0*DD)/rad) + +0.658d0 * sin(2.d0*DD/rad) + -0.186d0 * sin(Ms/rad) + -0.059d0 * sin((2.d0*MM-2.d0*DD)/rad) + -0.057d0 * sin((MM-2.d0*DD+Ms)/rad) + +0.053d0 * sin((MM+2.d0*DD)/rad) + +0.046d0 * sin((2.d0*DD-Ms)/rad) + +0.041d0 * sin((MM-Ms)/rad) + -0.035d0 * sin(DD/rad) + -0.031d0 * sin((MM+Ms)/rad) + -0.015d0 * sin((2.d0*FF-2.d0*DD)/rad) + +0.011d0 * sin((MM-4.d0*DD)/rad) latecl = latecl + -0.173d0 * sin((FF-2.d0*DD)/rad) + -0.055d0 * sin((MM-FF-2.d0*DD)/rad) + -0.046d0 * sin((MM+FF-2.d0*DD)/rad) + +0.033d0 * sin((FF+2.d0*DD)/rad) + +0.017d0 * sin((2.d0*MM+FF)/rad) r = 60.36298d0 + - 3.27746d0*cos(MM/rad) + - 0.57994d0*cos((MM-2.d0*DD)/rad) + - 0.46357d0*cos(2.d0*DD/rad) + - 0.08904d0*cos(2.d0*MM/rad) + + 0.03865d0*cos((2.d0*MM-2.d0*DD)/rad) + - 0.03237d0*cos((2.d0*DD-Ms)/rad) + - 0.02688d0*cos((MM+2.d0*DD)/rad) + - 0.02358d0*cos((MM-2.d0*DD+Ms)/rad) + - 0.02030d0*cos((MM-Ms)/rad) + + 0.01719d0*cos(DD/rad) + + 0.01671d0*cos((MM+Ms)/rad) dist=r*6378.140d0 C Geocentric coordinates: C Rectangular ecliptic coordinates of the moon: xg = r * cos(lonecl/rad)*cos(latecl/rad) yg = r * sin(lonecl/rad)*cos(latecl/rad) zg = r * sin(latecl/rad) C Rectangular equatorial coordinates of the moon: xe = xg ye = yg*cos(ecl/rad) - zg*sin(ecl/rad) ze = yg*sin(ecl/rad) + zg*cos(ecl/rad) C Right Ascension, Declination: RA = mod(rad*atan2(ye,xe)+360.d0,360.d0) Dec = rad*atan2(ze,sqrt(xe*xe + ye*ye)) C Now convert to topocentric system: mpar=rad*asin(1.d0/r) C alt_topoc = alt_geoc - mpar*cos(alt_geoc) gclat = lat - 0.1924d0*sin(2.d0*lat/rad) rho = 0.99883d0 + 0.00167d0*cos(2.d0*lat/rad) GMST0 = (Ls + 180.d0)/15.d0 LST = mod(GMST0+UT+lon/15.d0+48.d0,24.d0) !LST in hours HA = 15.d0*LST - RA !HA in degrees g = rad*atan(tan(gclat/rad)/cos(HA/rad)) topRA = RA - mpar*rho*cos(gclat/rad)*sin(HA/rad)/cos(Dec/rad) topDec = Dec - mpar*rho*sin(gclat/rad)*sin((g-Dec)/rad)/sin(g/rad) HA = 15.d0*LST - topRA !HA in degrees if(HA.gt.180.d0) HA=HA-360.d0 if(HA.lt.-180.d0) HA=HA+360.d0 pi=0.5d0*twopi pio2=0.5d0*pi call dcoord(pi,pio2-lat/rad,0.d0,lat/rad,ha*twopi/360, + topDec/rad,az,el) Az=az*rad El=El*rad return end wsjt_9.3.r2792/encode65.f0000664000175000017500000000041311015074716013153 0ustar jtnjtn subroutine encode65(message,sent) character message*22 integer dgen(12) integer sent(63) call packmsg(message,dgen) call rs_encode(dgen,sent) call interleave63(sent,1) call graycode(sent,63,1) return end wsjt_9.3.r2792/pkg.bat0000664000175000017500000000040711464303171012646 0ustar jtnjtn"C:\Program Files\ResHacker\ResHacker.exe" -addoverwrite WSJT9.EXE,WSJT9.EXE,wsjt.ico,ICONGROUP,MAINICON,0 "C:\Program Files\ResHacker\ResHacker.exe" -addoverwrite WSJT9.EXE,WSJT9.EXE,wsjt.ico,ICONGROUP,101,0 "c:\Program Files\Inno Setup 5\iscc.exe" wsjt9.iss wsjt_9.3.r2792/toxyz.f0000664000175000017500000000101511015074716012737 0ustar jtnjtn subroutine toxyz(alpha,delta,r,vec) implicit real*8 (a-h,o-z) real*8 vec(3) vec(1)=r*cos(delta)*cos(alpha) vec(2)=r*cos(delta)*sin(alpha) vec(3)=r*sin(delta) return end subroutine fromxyz(vec,alpha,delta,r) implicit real*8 (a-h,o-z) real*8 vec(3) data twopi/6.283185307d0/ r=sqrt(vec(1)**2 + vec(2)**2 + vec(3)**2) alpha=atan2(vec(2),vec(1)) if(alpha.lt.0.d0) alpha=alpha+twopi delta=asin(vec(3)/r) return end wsjt_9.3.r2792/astro0.f900000664000175000017500000001104711547136727013144 0ustar jtnjtnsubroutine astro0(nyear,month,nday,uth8,nfreq,grid,cauxra,cauxdec, & AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00, & dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,sd8,poloffset8,xnr8,dfdt,dfdt0, & RaAux8,DecAux8,AzAux8,ElAux8,width1,width2,w501,w502,xlst8) !f2py threadsafe !f2py intent(in) nyear,month,nday,uth8,nfreq,grid,cauxra,cauxdec !f2py intent(out) AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00,dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,sd8,poloffset8,xnr8,dfdt,dfdt0,RaAux8,DecAux8,AzAux8,ElAux8,width1,width2,w501,w502,xlst8 parameter (DEGS=57.2957795130823d0) character grid*6 character*9 cauxra,cauxdec real*8 AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,AzAux8,ElAux8 real*8 dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,xnr8,dfdt,dfdt0,dt real*8 sd8,poloffset8,day8,width1,width2,w501,w502,xlst8 include 'gcom2.f90' data uth8z/0.d0/,imin0/-99/ save call cs_lock('astro0a') auxra=0. i=index(cauxra,':') if(i.eq.0) then read(cauxra,*,err=1,end=1) auxra else read(cauxra(1:i-1),*,err=1,end=1) ih read(cauxra(i+1:i+2),*,err=1,end=1) im read(cauxra(i+4:i+5),*,err=1,end=1) is auxra=ih + im/60.0 + is/3600.0 endif 1 auxdec=0. i=index(cauxdec,':') if(i.eq.0) then read(cauxdec,*,err=2,end=2) auxdec else read(cauxdec(1:i-1),*,err=2,end=2) id read(cauxdec(i+1:i+2),*,err=2,end=2) im read(cauxdec(i+4:i+5),*,err=2,end=2) is auxdec=abs(id) + im/60.0 + is/3600.0 if(cauxdec(1:1).eq.'-') auxdec=-auxdec endif 2 nmode=1 if(mode(1:4).eq.'JT65') then nmode=2 if(mode(5:5).eq.'A') mode65=1 if(mode(5:5).eq.'B') mode65=2 if(mode(5:5).eq.'C') mode65=4 endif if(mode(1:4).eq.'Echo') nmode=3 if(mode(1:2).eq.'CW') nmode=5 if(mode(1:3).eq.'JT4') nmode=7 if(mode(1:4).eq.'JTMS') nmode=8 if(mode(1:5).eq.'ISCAT') nmode=9 uth=uth8 call cs_unlock call astro(nyear,month,nday,uth,nfreq,hisgrid,2,nmode,1, & AzSun,ElSun,AzMoon,ElMoon,ntsky,doppler00,doppler, & dbMoon,RAMoon,DecMoon,HA,Dgrd,sd,poloffset,xnr,auxra,auxdec, & AzAux,ElAux,day,xlon2,xlat2,xlst) AzMoonB8=AzMoon ElMoonB8=ElMoon call astro(nyear,month,nday,uth,nfreq,grid,1,nmode,1, & AzSun,ElSun,AzMoon,ElMoon,ntsky,doppler00,doppler, & dbMoon,RAMoon,DecMoon,HA,Dgrd,sd,poloffset,xnr,auxra,auxdec, & AzAux,ElAux,day,xlon1,xlat1,xlst) day8=day xlst8=xlst call tm2(day8,xlat1,xlon1,xl1,b1) call tm2(day8,xlat2,xlon2,xl2,b2) call tm2(day8+1.d0/1440.0,xlat1,xlon1,xl1a,b1a) call tm2(day8+1.d0/1440.0,xlat2,xlon2,xl2a,b2a) fghz=0.001*nfreq dldt1=DEGS*(xl1a-xl1) dbdt1=DEGS*(b1a-b1) dldt2=DEGS*(xl2a-xl2) dbdt2=DEGS*(b2a-b2) rate1=2.0*sqrt(dldt1**2 + dbdt1**2) width1=0.5*6741*fghz*rate1 rate2=sqrt((dldt1+dldt2)**2 + (dbdt1+dbdt2)**2) width2=0.5*6741*fghz*rate2 fbend=0.7 a2=0.0045*log(fghz/fbend)/log(1.05) if(fghz.lt.fbend) a2=0.0 f50=0.19 * (fghz/fbend)**a2 if(f50.gt.1.0) f50=1.0 w501=f50*width1 w502=f50*width2 RaAux8=auxra DecAux8=auxdec AzSun8=AzSun ElSun8=ElSun AzMoon8=AzMoon ElMoon8=ElMoon dbMoon8=dbMoon RAMoon8=RAMoon/15.0 DecMoon8=DecMoon HA8=HA Dgrd8=Dgrd sd8=sd poloffset8=poloffset xnr8=xnr AzAux8=AzAux ElAux8=ElAux ndop=nint(doppler) ndop00=nint(doppler00) if(uth8z.eq.0.d0) then uth8z=uth8-1.d0/3600.d0 dopplerz=doppler doppler00z=doppler00 endif dt=60.0*(uth8-uth8z) if(dt.le.0) dt=1.d0/60.d0 dfdt=(doppler-dopplerz)/dt dfdt0=(doppler00-doppler00z)/dt uth8z=uth8 dopplerz=doppler doppler00z=doppler00 imin=60*uth8 isec=3600*uth8 if(isec.ne.isec0 .and. ndecoding.eq.0) then call cs_lock('astro0b') ih=uth8 im=mod(imin,60) is=mod(isec,60) do i=80,1,-1 if(AzElDir(i:i).ne.' ') goto 700 enddo 700 jz=i open(14,file=AzElDir(:jz)//'/azel.dat',status='unknown',err=930) write(14,1010,err=800) ih,im,is,AzMoon,ElMoon, & ih,im,is,AzSun,ElSun, & ih,im,is,AzAux,ElAux, & nfreq,doppler,dfdt,doppler00,dfdt0 1010 format(i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Moon'/ & i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Sun'/ & i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Source'/ & i5,',',f8.1,',',f8.2,',',f8.1,',',f8.2,',Doppler') close(14) 800 isec0=isec elmoon2=elmoon call cs_unlock endif return 930 print*,'Error opening azel.dat' stop end subroutine astro0 wsjt_9.3.r2792/gencw.f0000664000175000017500000000414011035431676012653 0ustar jtnjtn subroutine gencw(msg,wpm0,freqcw,samfac,iwave,nwave) C Generates array iwave() containing an audio signal corresponding C to an EME CW message. parameter (NMAX=150*11025) character*22 msg,s1,s2,s3 integer*2 iwave(NMAX) integer*1 idat(5000),idat1(460),idat2(200),idat3(200) real*8 dt,t,twopi,pha,dpha,tdit,samfac data twopi/6.283185307d0/ call msgtype(msg,ntype,nrpt1,nrpt2,s1,s2) call morse(s1,idat1,nz1) !Encode string 1 nz2=0 if(ntype.ge.2) call morse(s2,idat2,nz2) !Encode string 2 s3='KK' call morse(s3,idat3,nz3) !Encode 'KK' b4=58.0*wpm0/1.2 b3=0.75*b4 ! b1=0.25*b4 nr1=1 nr2=0 if(nrpt1.eq.100) then nr1=nint((b4-nz3)/nz1) else if(nrpt1.eq.1) then nr2=nint((b4-nz1-nz3)/nz2) else if(nrpt1.eq.75) then nr1=nint(b3/nz1) nr2=nint((b4-nr1*nz1-nz3)/nz2) endif nbits=nr1*nz1 + nr2*nz2 + nz3 j=0 do n=1,nr1 do i=1,nz1 j=j+1 idat(j)=idat1(i) enddo enddo if(nr2.gt.0) then do n=1,nr2 do i=1,nz2 j=j+1 idat(j)=idat2(i) enddo enddo endif do i=1,nz3 j=j+1 idat(j)=idat3(i) enddo jz=j do i=jz+1,5000 idat(j)=0 enddo wpm=wpm0 * nbits/b4 tdit=1.2d0/wpm !Key-down dit time, seconds dt=1.d0/(11025.d0*samfac) ! write(*,3001) msg,ntype,nr1,nz1,nr2,nz2,nz3,nbits,wpm,b4,1.d6*dt ! 3001 format(a22,i3,6i5,f7.2,f8.2,f9.3) nwave=jz*tdit/dt pha=0. dpha=twopi*freqcw*dt t=0. s=0. u=wpm/(11025*0.03) j0=1 nsign=1 do i=1,nwave t=t+dt pha=pha+dpha j=nint(t/tdit) + 1 s=s + u*(idat(j)-s) if(idat(j0).eq.0 .and. idat(j).ne.0) nsign=-nsign iwave(i)=nsign*nint(s*32767.d0*sin(pha)) j0=j enddo do i=nwave+1,NMAX iwave(i)=0 enddo nwave=nwave+11025 return end wsjt_9.3.r2792/interleave24.f0000664000175000017500000000157111461555650014063 0ustar jtnjtn subroutine interleave24(id,ndir) integer*1 id(0:205),itmp(0:205) integer j0(0:205) logical first data first/.true./ save first,j0 if(first) then k=-1 do i=0,255 m=i n=iand(m,1) n=2*n + iand(m/2,1) n=2*n + iand(m/4,1) n=2*n + iand(m/8,1) n=2*n + iand(m/16,1) n=2*n + iand(m/32,1) n=2*n + iand(m/64,1) n=2*n + iand(m/128,1) if(n.le.205) then k=k+1 j0(k)=n endif enddo first=.false. endif if(ndir.eq.1) then do i=0,205 itmp(j0(i))=id(i) enddo else do i=0,205 itmp(i)=id(j0(i)) enddo endif do i=0,205 id(i)=itmp(i) enddo return end wsjt_9.3.r2792/tweak1.f900000664000175000017500000000065111461555650013122 0ustar jtnjtnsubroutine tweak1(ca,jz,f0,cb) ! Shift frequency of analytic signal ca, with output to cb complex ca(jz),cb(jz) real*8 twopi complex*16 w,wstep data twopi/0.d0/ save twopi if(twopi.eq.0.d0) twopi=8.d0*atan(1.d0) w=1.d0 dphi=twopi*f0/11025.d0 wstep=cmplx(cos(dphi),sin(dphi)) x0=0.5*(jz+1) s=2.0/jz do i=1,jz x=s*(i-x0) w=w*wstep cb(i)=w*ca(i) enddo return end subroutine tweak1 wsjt_9.3.r2792/s2shape.f0000664000175000017500000000177211015074716013121 0ustar jtnjtn subroutine s2shape(s2,nchan,nz,tbest) C Prepare s2(nchan,nz) for plotting as waterfall. real s2(nchan,nz) common/fcom/s(3100),indx(3100) C Find average of active spectral region, over the whole file. sum=0. do i=1,44 do j=1,nz/4 k=indx(j) sum=sum+s2(i+8,k) enddo enddo ave=sum/(44*nz) C Subtract the average and normalize. do i=1,64 do j=1,nz s2(i,j)=s2(i,j)/ave - 1.0 enddo enddo nzz=nz nxmax=500 !Was 494, then 385 if(nz.lt.nxmax) go to 900 ! fac=float(nz)/nxmax ! nadd=fac + 0.999999 ! nzz=nxmax nadd=3 nzz=nz/3 do i=1,64 do k=1,nzz sum=0. ! j=(k-1)*fac j=(k-1)*nadd do n=1,nadd sum=sum+s2(i,j+n) enddo s2(i,k)=sum/nadd enddo enddo 900 s2(1,1)=nzz s2(2,1)=tbest return end wsjt_9.3.r2792/start_threads.c0000664000175000017500000000073011232414513014403 0ustar jtnjtn#include #include #ifdef CVF #include "pthread_w32.h" #else #include #endif #include #include extern void decode1_(int *iarg); extern void a2d_(int *iarg); int start_threads_(void) { pthread_t thread1,thread2; int iret1,iret2; int iarg1 = 1,iarg2 = 2; iret1 = pthread_create(&thread1,NULL,(void *)a2d_,&iarg1); iret2 = pthread_create(&thread2,NULL,(void *)decode1_,&iarg2); return (iret1 | iret2); } wsjt_9.3.r2792/igray.c0000664000175000017500000000047310736200035012653 0ustar jtnjtn#ifdef CVF extern int __stdcall IGRAY(int *n0, int *idir) #else int igray_(int *n0, int *idir) #endif { int n; unsigned long sh; unsigned long nn; n=*n0; if(*idir>0) return (n ^ (n >> 1)); sh = 1; nn = (n >> sh); while (nn > 0) { n ^= nn; sh <<= 1; nn = (n >> sh); } return (n); } wsjt_9.3.r2792/audio_init.f900000664000175000017500000000136311461555650014053 0ustar jtnjtnsubroutine audio_init(ndin,ndout) !f2py threadsafe integer start_threads include 'gcom1.f90' include 'gcom2.f90' nmode=1 if(mode(1:4).eq.'JT65') then nmode=2 if(mode(5:5).eq.'A') mode65=1 if(mode(5:5).eq.'B') mode65=2 if(mode(5:5).eq.'C') mode65=4 endif if(mode(1:4).eq.'Echo') nmode=3 if(mode(1:2).eq.'CW') nmode=5 if(mode(1:3).eq.'JT4') nmode=7 if(mode(1:4).eq.'JTMS') nmode=8 if(mode(1:5).eq.'ISCAT') nmode=9 ndevin=ndin ndevout=ndout TxOK=0 Transmitting=0 nfsample=11025 nspb=1024 nbufs=2048 nmax=nbufs*nspb nwave=60*nfsample ngo=1 f0=800.0 do i=1,nwave iwave(i)=nint(32767.0*sin(6.283185307*i*f0/nfsample)) enddo ierr=start_threads() return end subroutine audio_init wsjt_9.3.r2792/jtms.f900000664000175000017500000000535211461555650012706 0ustar jtnjtnsubroutine jtms(dat,npts,cfile6,t2,mswidth,ndb,nrpt,Nfreeze, & DFTolerance,MouseDF,pick,mycall,hiscall) ! Decode a JTMS ping parameter (NZ=30*11025) real dat(npts) !Raw data complex cdat(NZ) !Analytic form of signal character*6 cfile6 !FileID integer DFTolerance logical pick character*12 mycall,hiscall real s(NZ) !Power spectrum real s2(0:63,400) real r(60000) complex cw(56,0:63) !Complex waveforms for all codewords complex cwb(56) !Complex waveform for logical first character msg*400,msg29*29 character*90 line common/ccom/nline,tping(100),line(100) data first/.true./ save first,cw,cwb save cdat !Fix its address, for four2 if(first) call setupms(cw,cwb) !Calculate waveforms for codewords first=.false. nsps=8 !Samples per symbol f0=1155.46875 !Nominal frequency for bit=0 n=log(float(npts))/log(2.0) + 1.0 nfft1=2**n !FFT length call analytic(dat,npts,nfft1,s,cdat) !Convert to analytic signal call msdf(cdat,npts,t2,nfft1,f0,nfreeze,mousedf,dftolerance, & dfx,snrsq2) !Get DF sq2lim=7.0 if(pick) sq2lim=5.0 if(snrsq2.lt.sq2lim) go to 900 !Reject non-JTMS signals call tweak1(cdat,npts,-dfx,cdat) !Mix to standard frequency ! DF is known, now establish character sync. call syncms(cdat,npts,cwb,r,i1) !Get character sync call lenms(r,npts,msglen) !Find message length s2=0. nchar=(npts-55-i1)/56 if(nchar.gt.400) nchar=400 call decodems(cdat,npts,cw,i1,nchar,s2,msg) !Decode the message ! ia=1 ! if(nchar.ge.40) ia=min(nchar/3,nchar-28) ! ib=min(ia+28,nchar) !Can better limits ia, ib be found? ! print*,'A',ia,ib,nchar ! print*,msg(1:nchar) ! msg29=adjustl(msg(ia:ib)) msg=adjustl(msg) ib=min(nchar,45) ndf=nint(dfx) nchk=max(20,nint(1.5*msglen)) if(msglen.eq.0 .or. nchar.lt.nchk .or. pick) then if(nline.le.99) nline=nline+1 tping(nline)=t2 call cs_lock('decodems') write(line(nline),1110) cfile6,t2,mswidth,ndb,nrpt,ndf,msg(1:45) 1110 format(a6,f5.1,i5,i3,1x,i2.2,i5,5x,a45) call cs_unlock endif if(msglen.gt.0 .and. nchar.ge.nchk) then call foldms(s2,msglen,nchar,mycall,msg,msg29) !Decode folded message if(nline.le.99) nline=nline+1 tping(nline)=t2 call cs_lock('decodems') write(line(nline),1120) cfile6,t2,mswidth,ndb,nrpt,ndf,msg29 1120 format(a6,f5.1,i5,i3,1x,i2.2,i5,5x,a29,11x,'*') call cs_unlock endif 900 continue return end subroutine jtms wsjt_9.3.r2792/techo.f900000664000175000017500000000440111461555650013025 0ustar jtnjtnprogram techo parameter (NDZ=28672) parameter (NSYNC=24030) parameter (LAGMAX=NDZ-NSYNC) parameter (NFFT=32768,NH=NFFT/2) real d(NDZ) complex cd(NFFT) complex c(NFFT) complex csync(NSYNC) real s(NH) real s2(NFFT) character infile*40,arg*12 character*24 fname real*8 dt,pha,dpha,twopi,f,df integer ic27(27) data ic27/1,3,7,15,2,5,11,23,18,8,17,6,13,27,26,24,20,12,25,22, & 16,4,9,19,10,21,14/ nargs=iargc() if(nargs.ne.3) then print*,'Usage: techo nrec nw' go to 999 endif call getarg(1,infile) call getarg(2,arg) read(arg,*) nrec call getarg(3,arg) read(arg,*) nw twopi=8*atan(1.d0) dt=1.d0/11025.d0 df=11025.d0/890.d0 pha=0.d0 f=1500.d0 k=0 do j=1,27 if(nw.ne.0) f=1500.d0 + (ic27(j)-14)*df dpha=twopi*f*dt do i=1,890 pha=pha+dpha k=k+1 csync(k)=cmplx(cos(pha),-sin(pha)) enddo enddo open(26,file=infile,form='unformatted',status='old') npts=NDZ df1=11025.0/NFFT fac=1.e-4 do irec=1,999 read(26,end=999) fname,ntime,dop0,doppler,d if(irec.lt.nrec) cycle if(irec.gt.nrec) go to 999 print*,fname,ntime,dop0,doppler,irec,nrec d=fac+d call analytic(d,npts,NFFT,s,cd) cd(NDZ+1:)=0. sbest=0. do lag=0,LAGMAX,10 do i=1,NSYNC c(i)=fac*cd(i+lag)*csync(i) enddo c(NSYNC+1:)=0. call four2a(c,NFFT,1,-1,1) smax=0. do i=1,NFFT s2(i)=real(c(i))**2 + aimag(c(i))**2 if(s2(i).gt.smax) then smax=s2(i) ipk=i endif enddo write(14,3002) lag,smax 3002 format(i6,e15.3) if(smax.gt.sbest) then sbest=smax ibest=ipk lagbest=lag rewind 13 do i=1,NFFT f=(i-1)*df1 if(i.gt.NFFT/2) f=(i-NFFT-1)*df1 if(abs(f).lt.200.0) write(13,3001) f,s2(i),db(s2(i)) 3001 format(3f12.3) enddo endif enddo call flush(13) call flush(14) fbest=(ibest-1)*df1 if(ibest.gt.NH+1) fbest=(ibest-1-NFFT)*df1 print*,lagbest,fbest,sbest enddo 999 end program techo wsjt_9.3.r2792/gran.f900000664000175000017500000000024111461555650012650 0ustar jtnjtnreal function gran(idum) real r(12) if(idum.lt.0) then call random_seed idum=0 endif call random_number(r) gran=sum(r)-6.0 end function gran wsjt_9.3.r2792/JT65code_all.f0000664000175000017500000000066211015074716013724 0ustar jtnjtn include 'JT65code.f' include 'nchar.f' include 'grid2deg.f' include 'packmsg.f' include 'packtext.f' include 'packcall.f' include 'packgrid.f' include 'unpackmsg.f' include 'unpacktext.f' include 'unpackcall.f' include 'unpackgrid.f' include 'deg2grid.f' include 'chkmsg.f' include 'getpfx1.f' include 'getpfx2.f' include 'k2grid.f' include 'grid2k.f' include 'interleave63.f' include 'graycode.f' include 'set.f' wsjt_9.3.r2792/avesp2.f0000664000175000017500000000264411223442313012744 0ustar jtnjtn subroutine avesp2(dat,jza,nadd,mode,NFreeze,MouseDF, + DFTolerance,fzap) real dat(jza) integer DFTolerance real psa(1024) !Ave ps, flattened and rolled off real ref(557) !Ref spectrum, lines excised real birdie(557) !Birdie spectrum (ave-ref) real variance(557) real s2(557,323) real fzap(200) iz=557 !Compute the 2d spectrum df=11025.0/2048.0 nfft=nadd*1024 jz=jza/nfft do j=1,jz k=(j-1)*nfft + 1 call ps(dat(k),nfft,psa) call move(psa,s2(1,j),iz) enddo C Flatten s2 and get psa, ref, and birdie call flatten(s2,557,jz,psa,ref,birdie,variance) call zero(fzap,200) ia=300/df ib=2700/df n=0 fmouse=0. if(mode.eq.2) fmouse=1270.46+MouseDF if(mode.eq.4) fmouse=1076.66+MouseDF do i=ia,ib if(birdie(i)-ref(i).gt.3.0) then f=i*df C Don't zap unless Freeze is OFF or birdie is outside the "Tol" range. if(NFreeze.eq.0 .or. + abs(f-fmouse).gt.float(DFTolerance)) then if(n.lt.200 .and. variance(i-1).lt.2.5 .and. + variance(i).lt.2.5.and.variance(i+1).lt.2.5) then n=n+1 fzap(n)=f endif endif endif enddo return end wsjt_9.3.r2792/dcoord.f0000664000175000017500000000230611033433544013016 0ustar jtnjtn SUBROUTINE DCOORD(A0,B0,AP,BP,A1,B1,A2,B2) implicit real*8 (a-h,o-z) C Examples: C 1. From ha,dec to az,el: C call coord(pi,pio2-lat,0.,lat,ha,dec,az,el) C 2. From az,el to ha,dec: C call coord(pi,pio2-lat,0.,lat,az,el,ha,dec) C 3. From ra,dec to l,b C call coord(4.635594495,-0.504691042,3.355395488,0.478220215, C ra,dec,l,b) C 4. From l,b to ra,dec C call coord(1.705981071d0,-1.050357016d0,2.146800277d0, C 0.478220215d0,l,b,ra,dec) C 5. From ecliptic latitude (eb) and longitude (el) to ra, dec: C call coord(0.d0,0.d0,-pio2,pio2-23.443*pi/180,ra,dec,el,eb) SB0=sin(B0) CB0=cos(B0) SBP=sin(BP) CBP=cos(BP) SB1=sin(B1) CB1=cos(B1) SB2=SBP*SB1 + CBP*CB1*cos(AP-A1) CB2=SQRT(1.D0-SB2**2) B2=atan(SB2/CB2) SAA=sin(AP-A1)*CB1/CB2 CAA=(SB1-SB2*SBP)/(CB2*CBP) CBB=SB0/CBP SBB=sin(AP-A0)*CB0 SA2=SAA*CBB-CAA*SBB CA2=CAA*CBB+SAA*SBB TA2O2=0.0 !Shut up compiler warnings. -db IF(CA2.LE.0.D0) TA2O2=(1.D0-CA2)/SA2 IF(CA2.GT.0.D0) TA2O2=SA2/(1.D0+CA2) A2=2.D0*atan(TA2O2) IF(A2.LT.0.D0) A2=A2+6.2831853071795864D0 RETURN END wsjt_9.3.r2792/JT65code.f0000664000175000017500000000315511015074716013074 0ustar jtnjtn program JT65code C Provides examples of message packing, bit and symbol ordering, C Reed Solomon encoding, and other necessary details of the JT65 C protocol. character*22 msg0,msg,decoded,cok*3 integer dgen(12),sent(63),recd(12),era(51) nargs=iargc() if(nargs.ne.1) then print*,'Usage: JT65code "message"' go to 999 endif call getarg(1,msg0) !Get message from command line msg=msg0 call chkmsg(msg,cok,nspecial,flip) !See if it includes "OOO" report if(nspecial.gt.0) then !or is a shorthand message write(*,1010) 1010 format('Shorthand message.') go to 999 endif call packmsg(msg,dgen) !Pack message into 72 bits write(*,1020) msg0 1020 format('Message: ',a22) !Echo input message if(iand(dgen(10),8).ne.0) write(*,1030) !Is the plain text bit set? 1030 format('Plain text.') write(*,1040) dgen 1040 format('Packed message, 6-bit symbols: ',12i3) !Display packed symbols call rs_encode(dgen,sent) !RS encode call interleave63(sent,1) !Interleave channel symbols call graycode(sent,63,1) !Apply Gray code write(*,1050) sent 1050 format('Channel symbols, including FEC:'/(i5,20i3)) call graycode(sent,63,-1) call interleave63(sent,-1) call rs_decode(sent,era,0,recd,nerr) call unpackmsg(recd,decoded) !Unpack the user message write(*,1060) decoded,cok 1060 format('Decoded message: ',a22,2x,a3) 999 end wsjt_9.3.r2792/syncf0.f0000664000175000017500000000315711015074716012755 0ustar jtnjtn subroutine syncf0(data,jz,NFreeze,NTol,jstart,f0,smax) C Does 512-pt FFTs of data with 256-pt step size. C Finds sync tone and determines aproximate values for jstart and f0. real data(jz) !Raw data real s2(128,6) !Average spectra at half-symbol spacings real x(512) complex cx(0:511) complex z equivalence (x,cx) ps(z)=real(z)**2 + aimag(z)**2 !Power spectrum function call zero(s2,6*128) !Clear average df=11025./512. ia=(f0-400)/df ib=(f0+400)/df + 0.999 if(NFreeze.eq.1) then ia=(f0-NTol)/df ib=(f0+Ntol)/df + 0.999 endif C Most of the time in this routine is in this loop. nblk=jz/256 - 6 do n=1,nblk !Accumulate avg spectrum for j=256*(n-1)+1 !512-pt blocks, stepping by 256 call move(data(j),x,512) call xfft(x,512) do i=ia,ib x(i)=ps(cx(i)) enddo k=mod(n-1,6)+1 call add(s2(ia,k),x(ia),s2(ia,k),ib-ia+1) !Average at each step enddo C Look for best spectral peak, using the "sync off" phases as reference. smax=0. do i=ia,ib do k=1,6 k1=mod(k+1,6)+1 k2=mod(k+3,6)+1 r=0.5*(s2(i,k1)+s2(i,k2)) s=s2(i,k)/r if(s.gt.smax) then smax=s jstart=(k-1)*256 + 1 !Best starting place for sync f0=i*df !Best sync frequency endif enddo enddo return end wsjt_9.3.r2792/astro.f0000664000175000017500000000557411547136727012723 0ustar jtnjtn subroutine astro(nyear,month,nday,uth,nfreq,Mygrid, + NStation,mode,MoonDX,AzSun,ElSun,AzMoon0,ElMoon0, + ntsky,doppler00,doppler,dbMoon,RAMoon,DecMoon,HA,Dgrd,sd, + poloffset,xnr,auxra,auxdec,azaux,elaux,day,lon,lat,LST) C Computes astronomical quantities for display in JT65, CW, and EME Echo mode. C NB: may want to smooth the Tsky map to 10 degrees or so. character*6 MyGrid,HisGrid logical ltsky real LST real lat,lon real ldeg integer*2 nsky common/sky/ nsky(360,180) common/echo/xdop(2),techo,AzMoon,ElMoon,mjd data rad/57.2957795/ save ltsky=nsky(1,1).eq.192 call grid2deg(MyGrid,elon,lat) lon=-elon call sun(nyear,month,nday,uth,lon,lat,RASun,DecSun,LST, + AzSun,ElSun,mjd,day) freq=nfreq*1.e6 if(nfreq.eq.2) freq=1.8e6 if(nfreq.eq.4) freq=3.5e6 call MoonDop(nyear,month,nday,uth,lon,lat,RAMoon,DecMoon, + LST,HA,AzMoon,ElMoon,ldeg,bdeg,vr,dist) C Compute spatial polarization offset xx=sin(lat/rad)*cos(ElMoon/rad) - cos(lat/rad)* + cos(AzMoon/rad)*sin(ElMoon/rad) yy=cos(lat/rad)*sin(AzMoon/rad) if(NStation.eq.1) poloffset1=rad*atan2(yy,xx) if(NStation.eq.2) poloffset2=rad*atan2(yy,xx) techo=2.0 * dist/2.99792458e5 !Echo delay time doppler=-freq*vr/2.99792458e5 !One-way Doppler t408=ftsky(ldeg,bdeg) !Read sky map tsky=t408*(408.0/nfreq)**2.6 !Tsky for obs freq if(ltsky.and.(tsky.lt.3.0)) tsky=3.0 !Minimum = 3 Kelvin xdop(NStation)=doppler if(NStation.eq.2) then HisGrid=MyGrid go to 900 endif doppler00=2.0*xdop(1) if(mode.eq.2 .or. mode.eq.5) doppler=xdop(1)+xdop(2) if(mode.eq.3) doppler=2.0*xdop(1) dBMoon=-40.0*log10(dist/356903.) sd=16.23*370152.0/dist ! if(NStation.eq.1 .and. MoonDX.ne.0 .and. ! + (mode.eq.2 .or. mode.eq.5)) then if(NStation.eq.1 .and. MoonDX.ne.0) then poloffset=mod(poloffset2-poloffset1+720.0,180.0) if(poloffset.gt.90.0) poloffset=poloffset-180.0 x1=abs(cos(2*poloffset/rad)) if(x1.lt.0.056234) x1=0.056234 xnr=-20.0*log10(x1) if(HisGrid(1:1).lt.'A' .or. HisGrid(1:1).gt.'Z') xnr=0 endif tr=80.0 !Good preamp tskymin=13.0*(408.0/nfreq)**2.6 !Cold sky temperature tsysmin=tskymin+tr tsys=tsky+tr dgrd=-10.0*log10(tsys/tsysmin) + dbMoon 900 AzMoon0=Azmoon ElMoon0=Elmoon ntsky=nint(tsky) auxHA = 15.0*(LST-auxra) !HA in degrees pi=3.14159265 pio2=0.5*pi call coord(pi,pio2-lat/rad,0.0,lat/rad,auxha*pi/180.0, + auxdec/rad,azaux,elaux) AzAux=azaux*rad ElAux=ElAux*rad return end wsjt_9.3.r2792/deg2grid.f0000664000175000017500000000210411015074716013231 0ustar jtnjtn subroutine deg2grid(dlong0,dlat,grid) real dlong !West longitude (deg) real dlat !Latitude (deg) character grid*6 dlong=dlong0 if(dlong.lt.-180.0) dlong=dlong+360.0 if(dlong.gt.180.0) dlong=dlong-360.0 C Convert to units of 5 min of longitude, working east from 180 deg. nlong=60.0*(180.0-dlong)/5.0 n1=nlong/240 !20-degree field n2=(nlong-240*n1)/24 !2 degree square n3=nlong-240*n1-24*n2 !5 minute subsquare grid(1:1)=char(ichar('A')+n1) grid(3:3)=char(ichar('0')+n2) grid(5:5)=char(ichar('a')+n3) C Convert to units of 2.5 min of latitude, working north from -90 deg. nlat=60.0*(dlat+90)/2.5 n1=nlat/240 !10-degree field n2=(nlat-240*n1)/24 !1 degree square n3=nlat-240*n1-24*n2 !2.5 minuts subsquare grid(2:2)=char(ichar('A')+n1) grid(4:4)=char(ichar('0')+n2) grid(6:6)=char(ichar('a')+n3) return end wsjt_9.3.r2792/Makefile_10.60000664000175000017500000001517211630364163013511 0ustar jtnjtnMV ?= mv CC ?= gcc MKDIR ?= mkdir INSTALL= install FFLAGS = -arch i386 -Wall -fbounds-check -fPIC LDFLAGS = LIBS += -lpthread -lportaudio -lsamplerate -lfftw3f CPPFLAGS = -I/usr/local/include -I/usr/local/include CFLAGS = -arch i386 -Wall -O0 -g -m32 -arch i386 -Wall -O0 -g -m32 PREFIX = /usr/local # WSJT specific C flags CFLAGS += -DBIGSYM=1 -fPIC DEFS = -DPACKAGE_NAME=\"wsjt\" -DPACKAGE_TARNAME=\"wsjt\" -DPACKAGE_VERSION=\"7.04\" -DPACKAGE_STRING=\"wsjt\ 7.04\" -DPACKAGE_BUGREPORT=\"\" -DFC_LIB_PATH=\"/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64/\" -DFC=\"gfortran\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SYS_SYSLOG_H=1 -DHAVE_STDDEF_H=1 -DHAVE_LIBGEN_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_STDIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DTIME_WITH_SYS_TIME=1 -DSTRING_WITH_STRINGS=1 -DNDEBUG=1 -DHAS_SAMPLERATE_H=1 -DHAS_PORTAUDIO=1 -DHAS_PORTAUDIO_H=1 -DHAS_PORTAUDIO_LIB=1 -DHAS_FFTW3_H=1 -DHAS_FFTW3FLIBS=1 CFLAGS += ${DEFS} CPPFLAGS += ${DEFS} -I. # WSJT specific Fortran flags #FFLAGS += -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC Audio: WsjtMod/Audio.so # Default rules %.o: %.c ${CC} ${CFLAGS} -c $< %.o: %.f ${FC} ${FFLAGS} -c $< %.o: %.F ${FC} ${FFLAGS} -c $< %.o: %.f90 ${FC} ${FFLAGS} -c $< %.o: %.F90 ${FC} ${FFLAGS} -c $< OS=Darwin FC=gfortran FCV=gnu95 FC_LIB_PATH += /usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64/ #LDFLAGS += -L${FC_LIB_PATH} PYTHON ?= /usr/bin/python RM ?= /bin/rm F2PY = /usr/local/bin/f2py OBJS1 = JT65code.o nchar.o grid2deg.o packmsg.o packtext.o \ packcall.o packgrid.o unpackmsg.o unpacktext.o unpackcall.o \ unpackgrid.o deg2grid.o chkmsg.o getpfx1.o \ getpfx2.o k2grid.o grid2k.o interleave63.o graycode.o set.o \ igray.o init_rs_int.o encode_rs_int.o decode_rs_int.o \ wrapkarn.o cutil.o OBJS4 = t75.o iscat.o four2a.o db.o pctile.o match.o dtrim.o \ sort.o ssort.o thnix_stub.o geniscat.o synciscat.o t75: $(OBJS4) $(FC) -o t75 $(OBJS4) -lfftw3f OBJS5 = t76.o iscat.o four2a.o db.o pctile.o match.o \ sort.o ssort.o thnix_stub.o synciscat.o t76: $(OBJS5) $(FC) -o t76 $(OBJS5) -lfftw3f F2PYONLY = ftn_init ftn_quit audio_init spec getfile azdist0 astro0 chkt0 SRCS2F90 = abc441.f90 astro0.f90 audio_init.f90 azdist0.f90 \ decode1.f90 decode2.f90 decode3.f90 ftn_init.f90 \ ftn_quit.f90 get_fname.f90 getfile.f90 horizspec.f90 hscroll.f90 \ pix2d.f90 pix2d65.f90 rfile.f90 savedata.f90 spec.f90 match.f90 \ wsjtgen.f90 fivehz.f90 chkt0.f90 gran.f90 makepings.f90 \ packpfx.f90 unpackpfx.f90 genms.f90 decodems.f90 setupms.f90 \ thnix.f90 tweak1.f90 tweak2.f90 smo.f90 analytic.f90 dtrim.f90 \ geniscat.f90 iscat.f90 four2a.f90 hipass.f90 synciscat.f90 \ msdf.f90 syncms.f90 lenms.f90 jtms.f90 foldms.f90 avecho.f90 \ echogen.f90 alignmsg.f90 chk441.f90 gen441.f90 tm2.f90 \ gendiana.f90 diana.f90 specdiana.f90 syncdiana.f90 \ decdiana.f90 ana932.f90 OBJS2F90 = ${SRCS2F90:.f90=.o} SRCS2F77 = wsjt1.f astro.f azdist.f coord.f dcoord.f deg2grid.f \ dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f moon2.f \ MoonDop.f sun.f toxyz.f pfxdump.f \ avesp2.f bzap.f spec441.f spec2d.f mtdecode.f stdecode.f \ indexx.f s2shape.f flat2.f gen65.f gen24.f entail.f genmet.f \ wsjt24.f sync24.f ps24.f xcor24.f decode24.f \ chkmsg.f gentone.f interleave24.f \ syncf0.f syncf1.f synct.f avemsg6m.f \ set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f \ ping.f longx.f peakup.f sync.f detect.f avemsg65.f decode65.f \ demod64a.f encode65.f extract.f chkhist.f flat1.f \ gencw.f gencwid.f msgtype.f \ getpfx1.f getpfx2.f getsnr.f graycode.f grid2k.f \ interleave63.f k2grid.f limit.f lpf1.f morse.f \ nchar.f packcall.f packgrid.f packmsg.f packtext.f setup65.f \ short65.f slope.f spec2d65.f sync65.f unpackcall.f \ unpackgrid.f unpackmsg.f unpacktext.f xcor.f xfft.f xfft2.f wsjt65.f \ ftpeak65.f fil651.f fil652.f fil653.f symsync65.f \ rfile2.f encode232.f OBJS2F77 = ${SRCS2F77:.f=.o} deep65.o SRCS2C = init_rs.c encode_rs.c decode_rs.c fano.c tab.c nhash.c \ cutil.c fthread.c tmoonsub.c OBJS2C = ${SRCS2C:.c=.o} SRCS3C = ptt_unix.c igray.c wrapkarn.c OBJS3C = ${SRCS3C:.c=.o} AUDIOSRCS = a2d.f90 jtaudio.c start_threads.c resample.c all: WsjtMod/Audio.so wsjt9 JT65code JT65code: $(OBJS1) $(FC) -o JT65code $(OBJS1) build: WsjtMod/Audio.so WsjtMod/Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS) ${F2PY} -c --quiet --noopt --debug \ --f77flags="${FFLAGS}" --f90flags="${FFLAGS}" \ $(OBJS2C) $(OBJS2F77) -m Audio \ --fcompiler=${FCV} --f77exec=${FC} --f90exec=${FC} \ ${CPPFLAGS} ${LDFLAGS} ${LIBS} \ only: $(F2PYONLY) : $(SRCS2F90) \ ${SRCS3C} ${AUDIOSRCS} ${MV} Audio.so WsjtMod wsjt9: WsjtMod/Audio.so wsjt9.spec python /home/joe/temp/pyinstaller-1.3/Build.py wsjt9.spec wsjt9.spec: wsjt9.py WsjtMod/astro.py WsjtMod/g.py WsjtMod/options.py \ WsjtMod/palettes.py WsjtMod/smeter.py WsjtMod/specjt.py python /home/joe/temp/pyinstaller-1.3/Makespec.py --icon wsjt.ico \ --tk --onefile wsjt9.py wsjt9.py: wsjt.py cp wsjt.py wsjt9.py init_rs_int.o: init_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 -o init_rs_int.o init_rs.c encode_rs_int.o: encode_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 -o encode_rs_int.o encode_rs.c decode_rs_int.o: decode_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 -o decode_rs_int.o decode_rs.c cutil.o: cutil.c $(CC) $(CFLAGS) -c -DSTARNIX=1 cutil.c install: WsjtMod/Audio.so ${RM} -rf build/ ${PYTHON} setup.py install ${MKDIR} -p ${PREFIX}/share/wsjt ${INSTALL} -m 0644 CALL3.TXT ${PREFIX}/share/wsjt/ ${INSTALL} -m 0644 wsjtrc ${PREFIX}/share/wsjt/ ${INSTALL} -m 0644 dmet_*.dat ${PREFIX}/share/wsjt/ ${INSTALL} wsjt ${PREFIX}/bin deb: wsjt.py WsjtMod/Audio.so WsjtMod/g.py WsjtMod/__init__.py \ WsjtMod/options.py WsjtMod/palettes.py WsjtMod/PmwBlt.py \ WsjtMod/PmwColor.py WsjtMod/Pmw.py WsjtMod/smeter.py \ WsjtMod/specjt.py WsjtMod/astro.py DEB/DEBIAN/control \ wsjtrc cp wsjt.py wsjtrc CALL3.TXT dmet_10_-1_3.dat \ dmet_20_-2_2.dat kvasd.dat KVASD_g95 TSKY.DAT \ wsjt.ico wsjt.jpg WSJT_Quick_Reference.pdf WSJT_User_600.pdf DEB/WSJT9 cp WsjtMod/Audio.so DEB/WSJT9/WsjtMod cp WsjtMod/*.py DEB/WSJT9/WsjtMod dpkg-deb --build DEB wsjt_ver_rev_i386.deb .PHONY : clean clean: ${RM} -f *.o *.pyc *.so *~ JT65code wsjt9 WsjtMod/*.pyc WsjtMod/*.pyc \ WsjtMod/*.so wsjt9.py wsjt9.spec t75 ${RM} -rf build/ distclean: clean ${RM} -f config.log config.status Makefile wsjt_9.3.r2792/wsjt65.f0000664000175000017500000001573711563256730012732 0ustar jtnjtn subroutine wsjt65(dat,npts,cfile6,NClearAve,MinSigdB, + DFTolerance,NFreeze,NAFC,mode65,nfast,Nseg,MouseDF,NAgain, + ndepth,neme,idf,idfsh,mycall,hiscall,hisgrid, + lumsg,lcum,nspecial,ndf,nstest,dfsh, + snrsh,NSyncOK,ccfblue,ccfred,ndiag,nwsh) C Orchestrates the process of decoding JT65 messages, using data that C have been 2x downsampled. The search for shorthand messages has C already been done. real dat(npts) !Raw data integer DFTolerance logical first logical lcum character decoded*22,cfile6*6,special*5,cooo*3 character*22 avemsg1,avemsg2,deepmsg character*67 line,ave1,ave2 character*1 csync,c1 character*12 mycall character*12 hiscall character*6 hisgrid real ccfblue(-5:540),ccfred(-224:224) integer itf(2,9) include 'avecom.h' data first/.true./,ns10/0/,ns20/0/ data itf/0,0, 1,0, -1,0, 0,-1, 0,1, 1,-1, 1,1, -1,-1, -1,1/ save if(first) then call setup65 !Initialize pseudo-random arrays nsave=0 first=.false. ave1=' ' ave2=' ' endif naggressive=0 if(ndepth.ge.2) naggressive=1 nq1=3 nq2=6 if(naggressive.eq.1) nq1=1 if(NClearAve.ne.0) then nsave=0 !Clear the averaging accumulators ns10=0 ns20=0 ave1=' ' ave2=' ' endif if(MinSigdB.eq.99 .or. MinSigdB.eq.-99) then ns10=0 !For Include/Exclude ? ns20=0 endif C Attempt to synchronize: look for sync tone, get DF and DT. call sync65(dat,npts,DFTolerance,NFreeze,MouseDF, + mode65,nfast,dtx,dfx,snrx,snrsync,ccfblue,ccfred,flip,width) csync=' ' decoded=' ' deepmsg=' ' special=' ' cooo=' ' ncount=-1 !Flag for RS decode of current record ncount1=-1 !Flag for RS Decode of ave1 ncount2=-1 !Flag for RS Decode of ave2 NSyncOK=0 nqual1=0 nqual2=0 if(nsave.lt.MAXAVE .and. (NAgain.eq.0 .or. NClearAve.eq.1)) + nsave=nsave+1 if(nsave.le.0) go to 900 !Prevent bounds error nflag(nsave)=0 !Clear the "good sync" flag iseg(nsave)=Nseg !Set the RX segment to 1 or 2 nsync=nint(snrsync-3.0) nsnr=nint(snrx) if(nsnr.lt.-30 .or. nsync.lt.0) nsync=0 nsnrlim=-32 C Good Sync takes precedence over a shorthand message: if(nsync.ge.MinSigdB .and. nsnr.ge.nsnrlim .and. + nsync.ge.nstest) nstest=0 if(nstest.gt.0) then dfx=dfsh nsync=nstest nsnr=snrsh dtx=1. ccfblue(-5)=-999.0 if(nspecial.eq.1) special='ATT ' if(nspecial.eq.2) special='RO ' if(nspecial.eq.3) special='RRR ' if(nspecial.eq.4) special='73 ' NSyncOK=1 !Mark this RX file as good (for "Save Decoded") if(NFreeze.eq.0 .or. DFTolerance.ge.200) special(5:5)='?' width=nwsh idf=idfsh go to 200 endif if(nsync.lt.MinSigdB .or. nsnr.lt.nsnrlim) go to 200 C If we get here, we have achieved sync! NSyncOK=1 nflag(nsave)=1 !Mark this RX file as good csync='*' if(flip.lt.0.0) then csync='#' cooo='O ?' endif call decode65(dat,npts,dtx,dfx,flip,ndepth,neme, + mycall,hiscall,hisgrid,mode65,nfast,nafc,decoded, + ncount,deepmsg,qual) if(ncount.eq.-999) qual=0 !Bad data 200 kvqual=0 if(ncount.ge.0) kvqual=1 nqual=qual if(ndiag.eq.0 .and. nqual.gt.10) nqual=10 if(nqual.ge.nq1 .and.kvqual.eq.0) decoded=deepmsg ndf=nint(dfx) if(flip.lt.0.0 .and. (kvqual.eq.1 .or. nqual.ge.nq2)) cooo='OOO' if(kvqual.eq.0.and.nqual.ge.nq1.and.nqual.lt.nq2) cooo(2:3)=' ?' if(decoded.eq.' ') cooo=' ' do i=1,22 c1=decoded(i:i) if(c1.ge.'a' .and. c1.le.'z') decoded(i:i)=char(ichar(c1)-32) enddo jdf=ndf+idf if(nstest.gt.0) jdf=ndf call cs_lock('wsjt65') write(line,1010) cfile6,nsync,nsnr,dtx-1.0,jdf, + nint(width),csync,special,decoded(1:19),cooo,kvqual,nqual 1010 format(a6,i3,i5,f5.1,i5,i3,1x,a1,1x,a5,a19,1x,a3,i4,i4) C Blank all end-of-line stuff if no decode if(line(31:40).eq.' ') line=line(:30) C Blank DT if shorthand message (### wrong logic? ###) if(special.ne.' ') then line(15:19)=' ' line=line(:35) ccfblue(-5)=-9999.0 else nspecial=0 endif if(lcum) write(21,1011) line 1011 format(a67) C Write decoded msg unless this is an "Exclude" request: if(MinSigdB.lt.99) write(lumsg,1011) line call cs_unlock if(nsave.ge.1) call avemsg65(1,mode65,ndepth, + avemsg1,nused1,nq1,nq2,neme,mycall,hiscall,hisgrid,qual1, + ns1,ncount1) if(nsave.ge.1) call avemsg65(2,mode65,ndepth, + avemsg2,nused2,nq1,nq2,neme,mycall,hiscall,hisgrid,qual2, + ns2,ncount2) nqual1=qual1 nqual2=qual2 if(ndiag.eq.0 .and. nqual1.gt.10) nqual1=10 if(ndiag.eq.0 .and. nqual2.gt.10) nqual2=10 nc1=0 nc2=0 if(ncount1.ge.0) nc1=1 if(ncount2.ge.0) nc2=1 C Write the average line ! if(ns1.ge.1 .and. ns1.ne.ns10) then if(ns1.ge.1) then call cs_lock('wsjt65') if(ns1.lt.10) write(ave1,1021) cfile6,1,nused1,ns1,avemsg1, + nc1,nqual1 1021 format(a6,i3,i4,'/',i1,20x,a19,i8,i4) if(ns1.ge.10 .and. nsave.le.99) write(ave1,1022) cfile6, + 1,nused1,ns1,avemsg1,nc1,nqual1 1022 format(a6,i3,i4,'/',i2,19x,a19,i8,i4) if(ns1.ge.100) write(ave1,1023) cfile6,1,nused1,ns1, + avemsg1,nc1,nqual1 1023 format(a6,i3,i4,'/',i3,18x,a19,i8,i4) if(lcum .and. (avemsg1.ne.' ')) + write(21,1011) ave1 ns10=ns1 call cs_unlock endif C If Monitor segment #2 is available, write that line also ! if(ns2.ge.1 .and. ns2.ne.ns20) then !***Why the 2nd part?? *** if(ns2.ge.1) then call cs_lock('wsjt65') if(ns2.lt.10) write(ave2,1021) cfile6,2,nused2,ns2,avemsg2, + nc2,nqual2 if(ns2.ge.10 .and. nsave.le.99) write(ave2,1022) cfile6, + 2,nused2,ns2,avemsg2,nc2,nqual2 if(ns2.ge.100) write(ave2,1023) cfile6,2,nused2,ns2,avemsg2, + nc2,nqual2 if(lcum .and. (avemsg2.ne.' ')) + write(21,1011) ave2 ns20=ns2 call cs_unlock endif if(ave1(31:40).eq.' ') ave1=ave1(:30) if(ave2(31:40).eq.' ') ave2=ave2(:30) call cs_lock('wsjt65') write(12,1011) ave1 write(12,1011) ave2 call flush(12) if(lumsg.ne.6) end file 11 call cs_unlock 900 continue return end wsjt_9.3.r2792/ps.f0000664000175000017500000000070111015074716012165 0ustar jtnjtn subroutine ps(dat,nfft,s) parameter (NMAX=16384+2) parameter (NHMAX=NMAX/2-1) real dat(nfft) real s(NHMAX) real x(NMAX) complex c(0:NHMAX) equivalence (x,c) nh=nfft/2 do i=1,nfft x(i)=dat(i)/128.0 !### Why 128 ?? enddo call xfft(x,nfft) fac=1.0/nfft do i=1,nh s(i)=fac*(real(c(i))**2 + aimag(c(i))**2) enddo return end wsjt_9.3.r2792/configure_10.6.ac0000664000175000017500000001271011342752226014333 0ustar jtnjtndnl $Id: configure.ac 1322 2009-08-18 21:19:47Z va3db $ dnl Process this file with autoconf to produce a configure script. dnl AC_PREREQ(2.61) dnl Sneaky way to get an Id tag into the configure script AC_COPYRIGHT([$Id: configure.ac 1322 2009-08-18 21:19:47Z va3db $]) AC_INIT([wsjt],[7.04]) fail=0 AC_PREFIX_DEFAULT("/usr/local") OLD_CFLAGS="$CFLAGS" dnl Checks for programs. AC_PROG_CC AC_LANG(C) AC_PROG_F77 dnl Make sure autoconf doesn't interfere with cflags -jmallett CFLAGS="$OLD_CFLAGS" dnl Lets guess at some likely places for extra libs/includes XXX -db CPPFLAGS="-I/usr/local/include ${CPPFLAGS}" LDFLAGS="-L/usr/local/lib ${LDFLAGS}" LIBS=" -lpthread ${LIBS}" FFLAGS_GFORTRAN="${FFLAGS} -Wall -fbounds-check -fPIC" FFLAGS_G95="${FFLAGS} -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC" #-Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC AX_CHECK_GFORTRAN AX_CHECK_PORTAUDIO if test "$ac_cv_c_compiler_gnu" = yes; then AC_MSG_CHECKING(if $CC is Apple GCC) if expr "`$CC -v 2>&1 | tail -1`" : ".*Apple" >/dev/null; then AppleGCC=yes else AppleGCC=no fi AC_MSG_RESULT($AppleGCC) CFLAGS="$CFLAGS -Wall -O0" fi dnl If we support -g, use it! if test "$ac_cv_prog_cc_g" = yes; then CFLAGS="$CFLAGS -g -m32" fi dnl jdc -- If CFLAGS is defined, best use it everywhere... dnl NOTE: jv says it must be added to the *END*, because things like dnl "gcc -O9 -O2" will result in -O2 getting preference. How stupid. if test ! -z "$CFLAGS"; then CFLAGS="$CFLAGS $CFLAGS" fi AC_ISC_POSIX AC_C_INLINE AC_PROG_GCC_TRADITIONAL AC_PROG_MAKE_SET AC_PROG_INSTALL AC_PATH_PROG(RM, rm) AC_PATH_PROG(CP, cp) AC_PATH_PROG(MV, mv) AC_PATH_PROG(LN, ln) AC_PATH_PROG(SED, sed) AC_PATH_PROG(AR, ar) AC_PATH_PROG(LD, ld) AC_PATH_PROG(TEST, [test], [test]) AC_PATH_PROG(PYTHON, python) AC_PATH_PROG(F2PY, f2py) AC_SUBST(VERSION, "${version}") AC_MSG_CHECKING([OS]) OS=`uname` AC_SUBST(OS, "${OS}") dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([inttypes.h stdint.h sys/resource.h sys/param.h errno.h \ sys/syslog.h stddef.h libgen.h sys/wait.h wait.h stdio.h termios.h \ sys/resource.h linux/ppdev.h dev/ppbus/ppi.h sys/stat.h fcntl.h sys/ioctl.h ]) AC_HEADER_TIME AC_CHECK_HEADER([fftw3.h], [HAS_FFTW3_H=1], [HAS_FFTW3_H=0]) AC_CHECK_HEADER([samplerate.h], [HAS_SAMPLERATE_H=1], [HAS_SAMPLERATE_H=0]) dnl See whether we can include both string.h and strings.h. AC_CACHE_CHECK([whether string.h and strings.h may both be included], gcc_cv_header_string, [ AC_COMPILE_IFELSE( [#include #include ], [gcc_cv_header_string=yes], [gcc_cv_header_string=no]) ]) if test "$gcc_cv_header_string" = "yes"; then AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h]) fi dnl check for a fortran shim entry point AC_CHECK_LIB(fftw3f, sfftw_destroy_plan_, \ [HAS_FFTW3FLIBS=1], [HAS_FFTW3FLIBS=0]) dnl Check for stdarg.h - if we can't find it, halt configure AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - wsjt will not compile without it **])]) dnl Debug-related options dnl ===================== AC_ARG_ENABLE(clobber, AC_HELP_STRING([--enable-clobber], [Don't preserve old binaries on make install]), [clobber=$enableval], [clobber=no]) if test "$clobber" = yes; then AC_SUBST(CLOBBER, yes) fi AC_ARG_ENABLE(assert, AC_HELP_STRING([--enable-assert],[Enable assert().]), [assert=$enableval], [assert=no]) if test "$assert" = no; then AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.]) fi if test "$prefix" = "NONE"; then prefix=${ac_default_prefix} else dnl Don't get bitten by Cygwin's stupidity if the user specified dnl a custom prefix with a trailing slash prefix=`echo ${ac_default_prefix} | sed 's/\/$//'` fi dnl sanity tests. dnl ============= if test -z $FC ; then fail=1 echo "You need g95 or gfortran to compile this program!" fi if test $HAS_FFTW3_H -eq 0; then fail=1 echo "You need to install the fftw3 libraries" fi if test $HAS_SAMPLERATE_H -eq 0; then fail=1 echo "You need to install the samplerate library" else AC_DEFINE(HAS_SAMPLERATE_H, 1, ) LIBS="${LIBS} -lsamplerate" fi if test $HAS_PORTAUDIO -eq 1; then AC_DEFINE(HAS_PORTAUDIO, 1, ) AC_DEFINE(HAS_PORTAUDIO_H, 1, ) AC_DEFINE(HAS_PORTAUDIO_LIB, 1, ) else fail=1 echo "This program needs portaudio v19 to compile." echo "Please use --with-portaudio-include-dir= and" echo " --with-portaudio-lib-dir= to set the paths." fi if test $HAS_FFTW3_H -eq 1; then AC_DEFINE(HAS_FFTW3_H, 1, ) else fail=1 echo "You are missing the fftw3.h include file" fi if test $HAS_FFTW3FLIBS -eq 1; then LIBS="${LIBS} -lfftw3f" AC_DEFINE(HAS_FFTW3FLIBS, 1, ) else fail=1 echo "You are missing the fortran shim libs in libfftw3." fi if test "$F2PY" = ""; then echo "You are missing f2py, trying local copy." F2PY="python f2py.py"; fi dnl dnl If fail a pre-requisite then fail dnl if test $fail -eq 1; then AC_MSG_ERROR([Please check error messages and install missing packages.]) fi dnl AC_SUBST(PREFIX, "${prefix}") AC_SUBST(CPPFLAGS, "${CPPFLAGS}") AC_SUBST(LDFLAGS, "${LDFLAGS}") AC_SUBST(LIBS, "${LIBS}") AC_SUBST(CFLAGS) AC_SUBST(FFLAGS) AC_SUBST(F2PY, "${F2PY}") AC_CONFIG_FILES(Makefile) AC_OUTPUT dnl do summary echo echo "***************" if test $g95 = "yes"; then echo "Using g95 as fortran compiler."; elif test $gfortran = "yes"; then echo "Using gfortran as fortran compiler."; fi echo echo "Compiling $PACKAGE_NAME $version" echo echo "Installing into: $prefix" echo wsjt_9.3.r2792/sort.f0000664000175000017500000000012211015074716012527 0ustar jtnjtn subroutine sort(n,arr) call ssort(arr,tmp,n,1) return end wsjt_9.3.r2792/ftsky.f0000664000175000017500000000105011232412004012664 0ustar jtnjtn real function ftsky(l,b) C Returns 408 MHz sky temperature for l,b (in degrees), from C Haslam, et al. survey. Must have already read the entire C file tsky.dat into memory. real*4 l,b integer*2 nsky common/sky/ nsky(360,180) save j=nint(b+91.0) if(j.gt.180) j=180 xl=l if(xl.lt.0.0) xl=xl+360.0 i=nint(xl+1.0) if(i.gt.360) i=i-360 ftsky=0.0 if(i.ge.1 .and. i.le.360 .and. j.ge.1 .and. j.le.180) then ftsky=0.1*nsky(i,j) endif return end wsjt_9.3.r2792/limit.f0000664000175000017500000000116111015074716012662 0ustar jtnjtn subroutine limit(x,jz) real x(jz) logical noping common/limcom/ nslim2 noping=.false. xlim=1.e30 if(nslim2.eq.1) xlim=3.0 if(nslim2.ge.2) xlim=1.0 if(nslim2.ge.3) noping=.true. sq=0. do i=1,jz sq=sq+x(i)*x(i) enddo rms=sqrt(sq/jz) rms0=14.5 x1=xlim*rms0 fac=1.0/xlim if(fac.lt.1.0) fac=1.0 if(noping .and. rms.gt.20.0) fac=0.01 !Crude attempt at ping excision do i=1,jz if(x(i).lt.-x1) x(i)=-x1 if(x(i).gt.x1) x(i)=x1 x(i)=fac*x(i) enddo return end wsjt_9.3.r2792/diana.f900000664000175000017500000000252011556016735013000 0ustar jtnjtnsubroutine diana(cdat,npts,cfile6,MinSigdB,DFTolerance,NFreeze, & MouseDF,nafc,ccfblue,ccfred) ! Decode a Diana signal parameter (NSZ=646) !Quarter-symbols in 30 s complex cdat(93024) !Raw signal, 30 s at 11025*9/32 sps character cfile6*6 !File time character msg*28 real s0(1152,NSZ) real ccfblue(-5:540) real ccfred(-224:224) integer dftolerance complex cfft common/down932/cfft(147456),nfft2,df932 data nsps/576/,nsync/4/,nlen/2/,ndat/18/ nsym=npts/nsps !Total symbol intervals in file nblk=nsync+nlen+ndat !Frame size df=11025.0/4096.0 kstep=nsps/4 ! Get symbol spectra, fold for sync call specdiana(cdat,npts,s0,jsym) ! Get sync: DF, DT, msglen call syncdiana(s0,jsym,kstep,nfreeze,mousedf,dftolerance,minsigdb, & nafc,xsync,ipk,jpk,idfpk,dfx,dtx,msglen,msg,nsnr,nworst,navg, & ccfblue,ccfred) jdf=nint(dfx) nfdot=nint(idfpk*df) isync=xsync call cs_lock('iscat') ! write(*,1020) cfile6,isync,nsnr,dtx,jdf,nfdot,msg,msglen,nworst,navg write(11,1020) cfile6,isync,nsnr,dtx,jdf,nfdot,msg,msglen,nworst,navg write(21,1020) cfile6,isync,nsnr,dtx,jdf,nfdot,msg,msglen,nworst,navg 1020 format(a6,i3,i5,f5.1,i5,i4,7x,a28,i5,2i3) call cs_unlock return end subroutine diana wsjt_9.3.r2792/dmet_10_0_3.dat0000664000175000017500000002640011015074716013764 0ustar jtnjtn 0 0.999391 -9.965784 517 1224389 1 0.999920 -9.965784 68 1224389 2 0.998977 -9.461832 58 81742 3 0.998865 -9.311896 69 87639 4 0.999074 -9.605819 60 93442 5 0.998880 -9.331062 77 99109 6 0.998865 -9.311898 83 105421 7 0.998853 -9.296916 89 111873 8 0.998682 -9.097175 109 119284 9 0.998413 -8.829258 140 127219 10 0.998600 -9.009508 131 134900 11 0.998474 -8.885104 152 143581 12 0.998508 -8.917674 158 152660 13 0.998501 -8.911383 169 162577 14 0.998296 -8.726394 204 172605 15 0.998042 -8.525905 250 184049 16 0.998306 -8.735070 230 195779 17 0.998299 -8.729231 244 206856 18 0.997987 -8.486456 308 220624 19 0.997953 -8.462070 332 233824 20 0.998050 -8.531781 336 248373 21 0.997856 -8.395662 393 264316 22 0.997599 -8.232006 468 280953 23 0.997524 -8.187819 513 298663 24 0.997339 -8.083947 583 315797 25 0.997422 -8.129858 600 335534 26 0.997277 -8.050694 672 355697 27 0.997180 -8.000114 739 377659 28 0.997026 -7.923845 829 401795 29 0.996711 -7.778638 972 425902 30 0.996713 -7.779378 1030 451548 31 0.996521 -7.697649 1153 477568 32 0.996433 -7.661639 1255 506971 33 0.996267 -7.596181 1397 539239 34 0.996182 -7.563525 1508 569023 35 0.996139 -7.547523 1615 602658 36 0.995971 -7.486032 1788 639300 37 0.995758 -7.412047 1990 675857 38 0.995267 -7.254162 2356 716970 39 0.995110 -7.207230 2573 757862 40 0.995053 -7.190574 2756 802414 41 0.994792 -7.116529 3077 850900 42 0.994629 -7.072137 3360 900903 43 0.994139 -6.946458 3872 951247 44 0.994182 -6.956913 4065 1005955 45 0.993827 -6.871611 4553 1061770 46 0.993360 -6.766586 5189 1124761 47 0.993132 -6.718064 5663 1186719 48 0.992972 -6.684972 6120 1253265 49 0.992573 -6.605530 6840 1325297 50 0.992218 -6.538363 7572 1400044 51 0.991889 -6.478642 8315 1474742 52 0.991418 -6.397473 9296 1558023 53 0.991149 -6.353189 10123 1645036 54 0.990653 -6.274652 11268 1733491 55 0.990229 -6.210960 12416 1827072 56 0.989766 -6.144404 13730 1928723 57 0.989354 -6.087690 15069 2034638 58 0.988894 -6.026810 16551 2141714 59 0.988276 -5.949053 18410 2256307 60 0.987677 -5.877481 20370 2374706 61 0.987040 -5.805040 22598 2504320 62 0.986409 -5.736809 24922 2633137 63 0.985722 -5.665976 27545 2769513 64 0.984754 -5.571791 30918 2910235 65 0.984196 -5.520204 33731 3062307 66 0.983488 -5.457372 37061 3219655 67 0.982464 -5.371037 41332 3379721 68 0.981493 -5.293783 45883 3553842 69 0.980760 -5.238120 50067 3729245 70 0.979824 -5.170088 55141 3915460 71 0.978576 -5.084124 61497 4110633 72 0.977442 -5.010267 67940 4311273 73 0.976205 -4.933858 75111 4516581 74 0.975070 -4.867170 82601 4738870 75 0.973498 -4.779758 91952 4959796 76 0.972181 -4.710423 101197 5197589 77 0.970564 -4.629748 112010 5433990 78 0.968867 -4.549708 124069 5687479 79 0.967072 -4.469723 137321 5948059 80 0.965235 -4.392315 151821 6224653 81 0.963366 -4.317721 167174 6500317 82 0.961203 -4.236045 184907 6783923 83 0.958944 -4.155513 204395 7080687 84 0.956532 -4.074358 225967 7387440 85 0.953933 -3.991869 249995 7704888 86 0.951326 -3.913749 275740 8035879 87 0.948394 -3.830809 305023 8375601 88 0.945222 -3.746334 337189 8713097 89 0.941819 -3.661077 372938 9062466 90 0.938305 -3.578202 411851 9426366 91 0.934352 -3.490566 455850 9791628 92 0.930410 -3.408401 503024 10178904 93 0.925929 -3.320597 556367 10560709 94 0.921357 -3.236445 613795 10955859 95 0.916089 -3.145517 679687 11349434 96 0.910736 -3.058947 750579 11759530 97 0.904996 -2.971870 828441 12170665 98 0.898782 -2.883548 915190 12592337 99 0.891702 -2.789503 1013962 13006937 100 0.884621 -2.701617 1118352 13432099 101 0.876682 -2.609534 1236340 13854591 102 0.868189 -2.517623 1366614 14284888 103 0.858948 -2.424423 1510378 14705470 104 0.849336 -2.334039 1664750 15123088 105 0.838168 -2.236357 1846528 15555368 106 0.826652 -2.142831 2038365 15965604 107 0.814004 -2.047419 2253419 16376312 108 0.800445 -1.952536 2488453 16774875 109 0.785375 -1.854861 2750725 17148944 110 0.769092 -1.757291 3042690 17529711 111 0.751467 -1.659740 3361845 17882297 112 0.732514 -1.562909 3713802 18230985 113 0.711407 -1.463548 4107307 18547437 114 0.688920 -1.366154 4535014 18845917 115 0.663623 -1.265538 5016372 19104040 116 0.636709 -1.167404 5540218 19347245 117 0.606557 -1.066792 6126542 19540859 118 0.574524 -0.969129 6764386 19720332 119 0.538222 -0.868230 7484190 19839412 120 0.499584 -0.770550 8260200 19922280 121 0.455961 -0.670467 9135344 19944062 122 0.408376 -0.571731 10101679 19926682 123 0.356081 -0.473819 11161428 19840131 124 0.298543 -0.376886 12332166 19695345 125 0.234642 -0.280360 13636091 19485926 126 0.164222 -0.185345 15063279 19193302 127 0.085623 -0.091028 16657157 18826871 128 0.000000 0.000000 18220659 18220659 129 -0.091028 0.085623 18826871 16657157 130 -0.185345 0.164222 19193302 15063279 131 -0.280360 0.234642 19485926 13636091 132 -0.376886 0.298543 19695345 12332166 133 -0.473819 0.356081 19840131 11161428 134 -0.571731 0.408376 19926682 10101679 135 -0.670467 0.455961 19944062 9135344 136 -0.770550 0.499584 19922280 8260200 137 -0.868230 0.538222 19839412 7484190 138 -0.969129 0.574524 19720332 6764386 139 -1.066792 0.606557 19540859 6126542 140 -1.167404 0.636709 19347245 5540218 141 -1.265538 0.663623 19104040 5016372 142 -1.366154 0.688920 18845917 4535014 143 -1.463548 0.711407 18547437 4107307 144 -1.562909 0.732514 18230985 3713802 145 -1.659740 0.751467 17882297 3361845 146 -1.757291 0.769092 17529711 3042690 147 -1.854861 0.785375 17148944 2750725 148 -1.952536 0.800445 16774875 2488453 149 -2.047419 0.814004 16376312 2253419 150 -2.142831 0.826652 15965604 2038365 151 -2.236357 0.838168 15555368 1846528 152 -2.334039 0.849336 15123088 1664750 153 -2.424423 0.858948 14705470 1510378 154 -2.517623 0.868189 14284888 1366614 155 -2.609534 0.876682 13854591 1236340 156 -2.701617 0.884621 13432099 1118352 157 -2.789503 0.891702 13006937 1013962 158 -2.883548 0.898782 12592337 915190 159 -2.971870 0.904996 12170665 828441 160 -3.058947 0.910736 11759530 750579 161 -3.145517 0.916089 11349434 679687 162 -3.236445 0.921357 10955859 613795 163 -3.320597 0.925929 10560709 556367 164 -3.408401 0.930410 10178904 503024 165 -3.490566 0.934352 9791628 455850 166 -3.578202 0.938305 9426366 411851 167 -3.661077 0.941819 9062466 372938 168 -3.746334 0.945222 8713097 337189 169 -3.830809 0.948394 8375601 305023 170 -3.913749 0.951326 8035879 275740 171 -3.991869 0.953933 7704888 249995 172 -4.074358 0.956532 7387440 225967 173 -4.155513 0.958944 7080687 204395 174 -4.236045 0.961203 6783923 184907 175 -4.317721 0.963366 6500317 167174 176 -4.392315 0.965235 6224653 151821 177 -4.469723 0.967072 5948059 137321 178 -4.549708 0.968867 5687479 124069 179 -4.629748 0.970564 5433990 112010 180 -4.710423 0.972181 5197589 101197 181 -4.779758 0.973498 4959796 91952 182 -4.867170 0.975070 4738870 82601 183 -4.933858 0.976205 4516581 75111 184 -5.010267 0.977442 4311273 67940 185 -5.084124 0.978576 4110633 61497 186 -5.170088 0.979824 3915460 55141 187 -5.238120 0.980760 3729245 50067 188 -5.293783 0.981493 3553842 45883 189 -5.371037 0.982464 3379721 41332 190 -5.457372 0.983488 3219655 37061 191 -5.520204 0.984196 3062307 33731 192 -5.571791 0.984754 2910235 30918 193 -5.665976 0.985722 2769513 27545 194 -5.736809 0.986409 2633137 24922 195 -5.805040 0.987040 2504320 22598 196 -5.877481 0.987677 2374706 20370 197 -5.949053 0.988276 2256307 18410 198 -6.026810 0.988894 2141714 16551 199 -6.087690 0.989354 2034638 15069 200 -6.144404 0.989766 1928723 13730 201 -6.210960 0.990229 1827072 12416 202 -6.274652 0.990653 1733491 11268 203 -6.353189 0.991149 1645036 10123 204 -6.397473 0.991418 1558023 9296 205 -6.478642 0.991889 1474742 8315 206 -6.538363 0.992218 1400044 7572 207 -6.605530 0.992573 1325297 6840 208 -6.684972 0.992972 1253265 6120 209 -6.718064 0.993132 1186719 5663 210 -6.766586 0.993360 1124761 5189 211 -6.871611 0.993827 1061770 4553 212 -6.956913 0.994182 1005955 4065 213 -6.946458 0.994139 951247 3872 214 -7.072137 0.994629 900903 3360 215 -7.116529 0.994792 850900 3077 216 -7.190574 0.995053 802414 2756 217 -7.207230 0.995110 757862 2573 218 -7.254162 0.995267 716970 2356 219 -7.412047 0.995758 675857 1990 220 -7.486032 0.995971 639300 1788 221 -7.547523 0.996139 602658 1615 222 -7.563525 0.996182 569023 1508 223 -7.596181 0.996267 539239 1397 224 -7.661639 0.996433 506971 1255 225 -7.697649 0.996521 477568 1153 226 -7.779378 0.996713 451548 1030 227 -7.778638 0.996711 425902 972 228 -7.923845 0.997026 401795 829 229 -8.000114 0.997180 377659 739 230 -8.050694 0.997277 355697 672 231 -8.129858 0.997422 335534 600 232 -8.083947 0.997339 315797 583 233 -8.187819 0.997524 298663 513 234 -8.232006 0.997599 280953 468 235 -8.395662 0.997856 264316 393 236 -8.531781 0.998050 248373 336 237 -8.462070 0.997953 233824 332 238 -8.486456 0.997987 220624 308 239 -8.729231 0.998299 206856 244 240 -8.735070 0.998306 195779 230 241 -8.525905 0.998042 184049 250 242 -8.726394 0.998296 172605 204 243 -8.911383 0.998501 162577 169 244 -8.917674 0.998508 152660 158 245 -8.885104 0.998474 143581 152 246 -9.009508 0.998600 134900 131 247 -8.829258 0.998413 127219 140 248 -9.097175 0.998682 119284 109 249 -9.296916 0.998853 111873 89 250 -9.311898 0.998865 105421 83 251 -9.331062 0.998880 99109 77 252 -9.605819 0.999074 93442 60 253 -9.311896 0.998865 87639 69 254 -9.461832 0.998977 81742 58 255 -9.965784 0.999920 1224389 68 wsjt_9.3.r2792/avemsg6m.f0000664000175000017500000000623011231655622013274 0ustar jtnjtn subroutine avemsg6m(s2db,nz,nslim,NFixLen,cfile6,lcum, + f0,lumsg,npkept) C Attempts to find message length and then decodes an average message. real s2db(0:43,nz) real s2dc(0:43,22) real wgt(22) real acf(0:430) logical lcum character*43 pua character*6 cfile6 character*22 avemsg,blanks data pua/'0123456789., /#?$ABCDEFGHIJKLMNOPQRSTUVWXYZ'/ data blanks/' '/ data twopi/6.283185307/ data offset/20.6/ C Adjustable sig limit, depending on length of data to average. nslim2=nslim - 9 + 4.0*log10(624.0/nz) !### +10 was here k=0 sum=0. nsum=0 do j=1,nz if(mod(j,3).eq.1) then sum=sum+s2db(0,j) !Measure avg sig strength for sync tone nsum=nsum+1 else k=k+1 call move(s2db(0,j),s2db(0,k),44) !Save data spectra endif enddo sig=sum/nsum !Signal strength estimate nsig=nint(db(sig)-offset) C Most of the time in this routine is in this loop. kz=k do lag=0,kz-1 sum=0. do j=1,kz-lag do i=0,43 sum=sum+s2db(i,j)*s2db(i,j+lag) enddo enddo acf(lag)=sum enddo acf0=acf(0) do lag=0,kz-1 acf(lag)=acf(lag)/acf0 enddo lmsg1=NFixLen/256 lmsg2=NFixLen-256*lmsg1 if(mod(lmsg1,2).eq.1) lmsg1=lmsg1+1 if(mod(lmsg2,2).eq.1) lmsg2=lmsg2+1 smax=-1.e9 do ip=4,22,2 !Compute periodogram for allowed msg periods if(NFixLen.ne.0 .and. ip.ne.4 .and. ip.ne.lmsg1 + .and. ip.ne.lmsg2) go to 5 f=1.0/ip s=0. do lag=0,kz-1 s=s+acf(lag)*cos(twopi*f*lag) enddo if(s.gt.smax) then smax=s msglen=ip !Save best message length endif 5 continue enddo C Average the symbols from s2db into s2dc. call zero(s2dc,44*22) call zero(wgt,22) do j=1,kz k=mod(j-1,msglen)+1 call add(s2db(0,j),s2dc(0,k),s2dc(0,k),44) wgt(k)=wgt(k)+1.0 enddo ipk=0 !Shut up compiler warnings. -db do j=1,msglen !Hard-decode the avg msg, smax=-1.e9 !picking max bin for each char do i=1,43 s2dc(i,j)=s2dc(i,j)/wgt(j) if(s2dc(i,j).gt.smax) then smax=s2dc(i,j) ipk=i endif enddo k=mod(ipk,3) i=ipk avemsg(j:j)=pua(i:i) enddo ndf0=nint(f0-1076.66) do i=1,msglen if(avemsg(i:i).eq.' ') goto 10 enddo go to 20 10 avemsg=avemsg(i+1:msglen)//avemsg(1:i) 20 if(nsig.gt.nslim2) then npkept=npkept+1 avemsg=avemsg(1:msglen)//blanks call cs_lock('avemsg6m') write(lumsg,1020) cfile6,nsig,ndf0,avemsg,msglen if(lcum) write(21,1020) cfile6,nsig,ndf0,avemsg,msglen 1020 format(a6,8x,i6,i5,7x,a22,19x,'*',i4) call cs_unlock endif return end wsjt_9.3.r2792/ftpeak65.f0000664000175000017500000001044511563244773013210 0ustar jtnjtn subroutine ftpeak65(dat,jz,nfast,istart,f0,flip,pr,nafc,ftrack) C Do the the JT65 "peakup" procedure in frequency and time; then C compute ftrack. parameter (NMAX=30*11025) parameter (NS=1024) real dat(jz) real pr(126) real ftrack(126) complex c2(NMAX/2) complex c3(NMAX/4) complex c4(NMAX/16) complex c5(NMAX/64) complex c6(NMAX/64) complex z real s(NMAX/64) real ccf(-128:128) real c(-50:50,8) real*8 pha,dpha,twopi,dt,fsyncset twopi=8*datan(1.d0) fsyncset=-300.d0 dt=2.d0/11025.d0 !Input dt (WSJT has downsampled by 2) n2 = NMAX/2 call fil651(dat,jz,c2,n2) !Filter and complex mix; rate 1/2 dt=2.d0*dt !We're now downsampled by 4 dpha=twopi*dt*(f0-fsyncset) !Put sync tone at fsyncset pha=0. do i=1,n2 pha=pha+dpha c2(i)=c2(i) * cmplx(cos(pha),-sin(pha)) enddo n3 = NMAX/4 call fil652(c2,n2,c3,n3) !Low-pass at +/- 500 Hz; rate 1/2 dt=2.d0*dt !Down by 8 dpha=twopi*dt*fsyncset !Mix sync tone to f=0 pha=0. do i=1,n3 pha=pha+dpha c3(i)=c3(i) * cmplx(cos(pha),-sin(pha)) enddo n4 = NMAX/16 call fil653(c3,n3,c4,n4) !Low-pass at +/- 100 Hz; rate 1/4 dt=4.d0*dt !Down by 32 n5 = NMAX/64 call fil653(c4,n4,c5,n5) !Low-pass at +/- 25 Hz; rate 1/4 dt=4.d0*dt !Down by 128 C Use f0 and istart (as found by sync65) and do CCFs against the C pr(126) array to get improved symbol synchronization. C NB: if istart is increased by 64, kpk will decrease by 1. k0=nint(istart/64.0 - 7.0) nsps=32 if(nfast.eq.2) nsps=16 call symsync65(c5,n5,k0,s,flip,pr,nsps,kpk,ccf,smax) C Fix up the value of istart. (The -1 is empirical.) istart=istart + 64.0*(kpk-1.0) C OK, we have symbol synchronization. Now find peak ccf value as a C function of DF, for each group of 16 symbols. C What about using filter fil657? df=0.25*11025.0/4096.0 !Oversample to get accurate peak idfmax=50 iz=n5-nsps+1 do idf=-idfmax,idfmax dpha=twopi*idf*df*dt pha=0. do i=1,iz pha=pha+dpha c6(i)=c5(i) * cmplx(cos(pha),-sin(pha)) enddo z=0. do i=1,nsps z=z + c6(i) enddo s(1)=real(z)*real(z) + aimag(z)*aimag(z) do i=nsps+1,n5 z=z + c6(i) - c6(i-nsps) s(i-nsps+1)=real(z)*real(z) + aimag(z)*aimag(z) enddo do n=1,8 ia=nint((n-1)*126.0/8.0 + 1.0) ib=ia+15 sum=0. do i=ia,ib j=nsps*(i-1) + k0 + kpk if(j.ge.1 .and. j.le.iz) sum=sum + flip*pr(i)*s(j) enddo c(idf,n)=sum/smax enddo enddo C Get drift rate and compute ftrack. ! call getfdot(c,nafc,ftrack) jmax=0 if(nafc.eq.1) jmax=25 ssmax=0. jpk=0 !Silence compiler warnings. -db ipk=0 do j=-jmax,jmax do i=-25,25 ss=0. xj=j/7.0 do n=1,8 k=nint(i+(n-4.5)*xj) ss=ss + c(k,n) enddo if(ss.gt.ssmax) then ssmax=ss ipk=i jpk=j endif enddo enddo df=0.25*11025.0/4096.0 dfreq=ipk*df fdot=jpk*df*60.0/(0.875*46.8) do i=1,126 ftrack(i)=dfreq + fdot*(46.8/60.0)*(i-63.5)/126.0 enddo pha=0. i0=k0 + kpk + 2000 do i=1,iz k=nint(63.5 + float(i-i0)/nsps) if(k.lt.1) k=1 if(k.gt.126) k=126 dpha=twopi*dt*ftrack(k) pha=pha+dpha c6(i)=c5(i) * cmplx(cos(pha),-sin(pha)) enddo z=0. do i=1,nsps z=z + c6(i) enddo s(1)=real(z)*real(z) + aimag(z)*aimag(z) do i=nsps+1,n5 z=z + c6(i) - c6(i-nsps) s(i-nsps+1)=real(z)*real(z) + aimag(z)*aimag(z) enddo sum=0. do i=1,126 j=nsps*(i-1)+k0+kpk if(j.ge.1 .and. j.le.iz) sum=sum + flip*pr(i)*s(j) enddo return end wsjt_9.3.r2792/ptt_unix.c0000664000175000017500000001744011544130713013417 0ustar jtnjtn/* * WSJT is Copyright (c) 2001-2006 by Joseph H. Taylor, Jr., K1JT, * and is licensed under the GNU General Public License (GPL). * * Code used from cwdaemon for parallel port ptt only. * * cwdaemon - morse sounding daemon for the parallel or serial port * Copyright (C) 2002 -2005 Joop Stakenborg * and many authors, see the AUTHORS file. * * 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if HAVE_STDIO_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_UNISTD_H # include #endif #if HAVE_SYS_IOCTL_H # include #endif #if HAVE_FCNTL_H # include #endif #ifdef HAVE_LINUX_PPDEV_H # include # include #endif #ifdef HAVE_DEV_PPBUS_PPI_H # include # include #endif int lp_reset (int fd); int lp_ptt (int fd, int onoff); #ifdef HAVE_SYS_STAT_H # include #endif #if (defined(__unix__) || defined(unix)) && !defined(USG) # include #endif #include /* parport functions */ int dev_is_parport(int fd); int ptt_parallel(int fd, int *ntx, int *iptt); int ptt_serial(int fd, int *ntx, int *iptt); int fd=-1; /* Used for both serial and parallel */ /* * ptt_ * * generic unix PTT routine called from Fortran * * Inputs * unused Unused, to satisfy old windows calling convention * ptt_port device name serial or parallel * ntx pointer to fortran command on or off * iptt pointer to fortran command status on or off * Returns - non 0 if error */ /* Tiny state machine */ #define STATE_PORT_CLOSED 0 #define STATE_PORT_OPEN_PARALLEL 1 #define STATE_PORT_OPEN_SERIAL 2 int ptt_(int *unused, char *ptt_port, int *ntx, int *ndtr, int *iptt) { static int state=0; char *p; /* In the very unlikely event of a NULL pointer, just return. * Yes, I realise this should not be possible in WSJT. */ if (ptt_port == NULL) { *iptt = *ntx; return (0); } switch (state) { case STATE_PORT_CLOSED: /* Remove trailing ' ' */ if ((p = strchr(ptt_port, ' ')) != NULL) *p = '\0'; /* If all that is left is a '\0' then also just return */ if (*ptt_port == '\0') { *iptt = *ntx; return(0); } if ((fd = open(ptt_port, O_RDWR|O_NONBLOCK)) < 0) { fprintf(stderr, "Can't open %s.\n", ptt_port); return (1); } if (dev_is_parport(fd)) { state = STATE_PORT_OPEN_PARALLEL; lp_reset(fd); ptt_parallel(fd, ntx, iptt); } else { state = STATE_PORT_OPEN_SERIAL; ptt_serial(fd, ntx, iptt); } break; case STATE_PORT_OPEN_PARALLEL: ptt_parallel(fd, ntx, iptt); break; case STATE_PORT_OPEN_SERIAL: ptt_serial(fd, ntx, iptt); break; default: close(fd); fd = -1; state = STATE_PORT_CLOSED; break; } return(0); } /* * ptt_serial * * generic serial unix PTT routine called indirectly from Fortran * * fd - already opened file descriptor * ntx - pointer to fortran command on or off * iptt - pointer to fortran command status on or off */ int ptt_serial(int fd, int *ntx, int *iptt) { int control = TIOCM_RTS | TIOCM_DTR; if(*ntx) { ioctl(fd, TIOCMBIS, &control); /* Set DTR and RTS */ *iptt = 1; } else { ioctl(fd, TIOCMBIC, &control); *iptt = 0; } return(0); } /* parport functions */ /* * dev_is_parport(fd): * * inputs - Already open fd * output - 1 if parallel port, 0 if not * side effects - Unfortunately, this is platform specific. */ #if defined(HAVE_LINUX_PPDEV_H) /* Linux (ppdev) */ int dev_is_parport(int fd) { struct stat st; int m; if ((fstat(fd, &st) == -1) || ((st.st_mode & S_IFMT) != S_IFCHR) || (ioctl(fd, PPGETMODE, &m) == -1)) return(0); return(1); } #elif defined(HAVE_DEV_PPBUS_PPI_H) /* FreeBSD (ppbus/ppi) */ int dev_is_parport(int fd) { struct stat st; unsigned char c; if ((fstat(fd, &st) == -1) || ((st.st_mode & S_IFMT) != S_IFCHR) || (ioctl(fd, PPISSTATUS, &c) == -1)) return(0); return(1); } #else /* Fallback (nothing) */ int dev_is_parport(int fd) { return(0); } #endif /* Linux wrapper around PPFCONTROL */ #ifdef HAVE_LINUX_PPDEV_H static void parport_control (int fd, unsigned char controlbits, int values) { struct ppdev_frob_struct frob; frob.mask = controlbits; frob.val = values; if (ioctl (fd, PPFCONTROL, &frob) == -1) { fprintf(stderr, "Parallel port PPFCONTROL"); exit (1); } } #endif /* FreeBSD wrapper around PPISCTRL */ #ifdef HAVE_DEV_PPBUS_PPI_H static void parport_control (int fd, unsigned char controlbits, int values) { unsigned char val; if (ioctl (fd, PPIGCTRL, &val) == -1) { fprintf(stderr, "Parallel port PPIGCTRL"); exit (1); } val &= ~controlbits; val |= values; if (ioctl (fd, PPISCTRL, &val) == -1) { fprintf(stderr, "Parallel port PPISCTRL"); exit (1); } } #endif /* Initialise a parallel port, given open fd */ int lp_init (int fd) { #ifdef HAVE_LINUX_PPDEV_H int mode; #endif #ifdef HAVE_LINUX_PPDEV_H mode = PARPORT_MODE_PCSPP; if (ioctl (fd, PPSETMODE, &mode) == -1) { fprintf(stderr, "Setting parallel port mode"); close (fd); return(-1); } if (ioctl (fd, PPEXCL, NULL) == -1) { fprintf(stderr, "Parallel port is already in use.\n"); close (fd); return(-1); } if (ioctl (fd, PPCLAIM, NULL) == -1) { fprintf(stderr, "Claiming parallel port.\n"); fprintf(stderr, "HINT: did you unload the lp kernel module?"); close (fd); return(-1); } /* Enable CW & PTT - /STROBE bit (pin 1) */ parport_control (fd, PARPORT_CONTROL_STROBE, PARPORT_CONTROL_STROBE); #endif #ifdef HAVE_DEV_PPBUS_PPI_H parport_control (fd, STROBE, STROBE); #endif lp_reset (fd); return(0); } /* release ppdev and close port */ int lp_free (int fd) { #ifdef HAVE_LINUX_PPDEV_H lp_reset (fd); /* Disable CW & PTT - /STROBE bit (pin 1) */ parport_control (fd, PARPORT_CONTROL_STROBE, 0); ioctl (fd, PPRELEASE); #endif #ifdef HAVE_DEV_PPBUS_PPI_H /* Disable CW & PTT - /STROBE bit (pin 1) */ parport_control (fd, STROBE, 0); #endif close (fd); return(0); } /* set to a known state */ int lp_reset (int fd) { #if defined (HAVE_LINUX_PPDEV_H) || defined (HAVE_DEV_PPBUS_PPI_H) lp_ptt (fd, 0); #endif return(0); } /* SSB PTT keying - /INIT bit (pin 16) (inverted) */ int lp_ptt (int fd, int onoff) { #ifdef HAVE_LINUX_PPDEV_H if (onoff == 1) parport_control (fd, PARPORT_CONTROL_INIT, PARPORT_CONTROL_INIT); else parport_control (fd, PARPORT_CONTROL_INIT, 0); #endif #ifdef HAVE_DEV_PPBUS_PPI_H if (onoff == 1) parport_control (fd, nINIT, nINIT); else parport_control (fd, nINIT, 0); #endif return(0); } /* * ptt_parallel * * generic parallel unix PTT routine called indirectly from Fortran * * fd - already opened file descriptor * ntx - pointer to fortran command on or off * iptt - pointer to fortran command status on or off */ int ptt_parallel(int fd, int *ntx, int *iptt) { if(*ntx) { lp_ptt(fd, 1); *iptt=1; } else { lp_ptt(fd, 0); *iptt=0; } return(0); } wsjt_9.3.r2792/pix2d65.f900000664000175000017500000000074411546660372013134 0ustar jtnjtnsubroutine pix2d65(d2,jz) ! Compute data for green line in JT65 and JT4 modes. integer*2 d2(jz) !Raw input data include 'gcom2.f90' sum=0. do i=1,jz sum=sum+d2(i) enddo nave=nint(sum/jz) nadd=nint(53.0*11025.0/500.0) ngreen=min(jz/nadd,500) k=0 do i=1,ngreen sq=0. do n=1,nadd k=k+1 d2(k)=d2(k)-nave x=d2(k) sq=sq + x*x enddo green(i)=db(sq/nadd)-64.0 enddo return end subroutine pix2d65 wsjt_9.3.r2792/dmet_20_-3_2.dat0000664000175000017500000002640011015074716014044 0ustar jtnjtn 0 0.999395 -9.965784 518 1234137 1 0.999919 -9.965784 69 1234137 2 0.998867 -9.315446 65 82762 3 0.998814 -9.248816 72 87534 4 0.998835 -9.274439 76 94054 5 0.998698 -9.114841 90 99706 6 0.998623 -9.033463 101 105750 7 0.998840 -9.281523 91 113172 8 0.998778 -9.205865 102 120366 9 0.998554 -8.963099 128 127634 10 0.998623 -9.033677 130 136134 11 0.998497 -8.907461 150 143907 12 0.998367 -8.788099 174 153663 13 0.998188 -8.638109 205 163143 14 0.998190 -8.639656 218 173675 15 0.998067 -8.544526 247 184206 16 0.998323 -8.749862 228 196079 17 0.998154 -8.611204 267 208553 18 0.997907 -8.429964 321 221094 19 0.997837 -8.382318 354 235891 20 0.997789 -8.351043 385 251038 21 0.997602 -8.233912 443 266297 22 0.997799 -8.357695 431 282333 23 0.997578 -8.219689 502 298798 24 0.997541 -8.197926 544 318941 25 0.997253 -8.038089 641 336331 26 0.997187 -8.003989 699 358180 27 0.997030 -7.925554 784 380436 28 0.997241 -8.031541 773 403751 29 0.996755 -7.798001 963 427673 30 0.996972 -7.897804 952 453139 31 0.996622 -7.740163 1128 481220 32 0.996610 -7.734952 1201 510511 33 0.996365 -7.634301 1366 541427 34 0.996215 -7.576271 1501 571421 35 0.995991 -7.493301 1690 607321 36 0.996018 -7.503023 1777 642915 37 0.995695 -7.390712 2029 678957 38 0.995649 -7.375486 2178 721142 39 0.995316 -7.269173 2479 762317 40 0.995050 -7.189519 2767 805026 41 0.995109 -7.206918 2898 853404 42 0.994586 -7.060549 3389 901382 43 0.994286 -6.982992 3790 955079 44 0.994017 -6.916666 4200 1010653 45 0.993847 -6.876345 4564 1067848 46 0.993591 -6.817681 5032 1130233 47 0.993258 -6.744719 5583 1191875 48 0.992899 -6.670152 6214 1259446 49 0.992691 -6.628536 6748 1328596 50 0.992246 -6.543540 7572 1405104 51 0.991932 -6.486294 8316 1482807 52 0.991539 -6.417874 9200 1564024 53 0.991163 -6.355383 10138 1649996 54 0.990729 -6.286496 11217 1739962 55 0.990305 -6.222186 12391 1837733 56 0.989836 -6.154236 13684 1935499 57 0.989374 -6.090316 15086 2040672 58 0.988765 -6.010197 16804 2149364 59 0.988272 -5.948582 18499 2266467 60 0.987629 -5.871810 20547 2385862 61 0.987028 -5.803695 22672 2510159 62 0.986338 -5.729313 25146 2642905 63 0.985874 -5.681301 27351 2779667 64 0.985177 -5.612213 30178 2922152 65 0.984224 -5.522797 33791 3073333 66 0.983548 -5.462585 37035 3229176 67 0.982665 -5.387622 41032 3394456 68 0.981674 -5.307865 45564 3564197 69 0.980699 -5.233578 50357 3738897 70 0.979728 -5.163225 55550 3925519 71 0.978688 -5.091609 61339 4121718 72 0.977507 -5.014398 67953 4324658 73 0.976356 -4.942954 74914 4533701 74 0.975105 -4.869195 82591 4745066 75 0.973620 -4.786363 91869 4978478 76 0.972192 -4.711009 101354 5207806 77 0.970771 -4.639814 111600 5452789 78 0.969060 -4.558589 123709 5706757 79 0.967419 -4.484838 136087 5958125 80 0.965452 -4.401259 151044 6232247 81 0.963451 -4.321025 167072 6511626 82 0.961230 -4.237039 185324 6804037 83 0.959146 -4.162521 204123 7106692 84 0.956963 -4.088526 224340 7408845 85 0.954308 -4.003472 248616 7726269 86 0.951514 -3.919238 275031 8046818 87 0.948647 -3.837774 304014 8389769 88 0.945645 -3.757303 335035 8726065 89 0.942151 -3.669160 371825 9088280 90 0.938614 -3.585294 410637 9446914 91 0.934881 -3.501978 453235 9816371 92 0.930621 -3.412679 502226 10194429 93 0.926302 -3.327688 554476 10579404 94 0.921549 -3.239883 612676 10963440 95 0.916419 -3.151030 678008 11367344 96 0.911112 -3.064845 747894 11768534 97 0.905366 -2.977321 826591 12192590 98 0.898973 -2.886171 913880 12598855 99 0.892149 -2.795246 1010309 13015795 100 0.884828 -2.704108 1117094 13442096 101 0.877017 -2.613290 1233890 13866390 102 0.868626 -2.522206 1362494 14291471 103 0.859256 -2.427421 1507613 14712225 104 0.849446 -2.335032 1665024 15137133 105 0.838641 -2.240346 1841684 15562612 106 0.827097 -2.146322 2033791 15973300 107 0.814316 -2.049691 2248711 16371394 108 0.800382 -1.952109 2487491 16762694 109 0.785767 -1.857303 2746143 17154033 110 0.769720 -1.760914 3035795 17541593 111 0.752107 -1.663149 3352910 17884902 112 0.732812 -1.564370 3707267 18221097 113 0.712001 -1.466237 4094431 18531415 114 0.689370 -1.368027 4524910 18834238 115 0.664210 -1.267777 5002830 19089826 116 0.637233 -1.169238 5527003 19332667 117 0.607304 -1.069179 6110407 19531789 118 0.574326 -0.968552 6759490 19695477 119 0.538762 -0.869664 7464907 19815413 120 0.499845 -0.771180 8245827 19899902 121 0.456283 -0.671170 9117312 19918839 122 0.408854 -0.572674 10071501 19886740 123 0.356829 -0.475151 11133719 19819431 124 0.298940 -0.377520 12301126 19659836 125 0.234680 -0.280415 13604870 19442563 126 0.164571 -0.185791 15027234 19157933 127 0.086839 -0.092403 16604608 18801217 128 0.000000 0.000000 18190010 18190010 129 -0.092403 0.086839 18801217 16604608 130 -0.185791 0.164571 19157933 15027234 131 -0.280415 0.234680 19442563 13604870 132 -0.377520 0.298940 19659836 12301126 133 -0.475151 0.356829 19819431 11133719 134 -0.572674 0.408854 19886740 10071501 135 -0.671170 0.456283 19918839 9117312 136 -0.771180 0.499845 19899902 8245827 137 -0.869664 0.538762 19815413 7464907 138 -0.968552 0.574326 19695477 6759490 139 -1.069179 0.607304 19531789 6110407 140 -1.169238 0.637233 19332667 5527003 141 -1.267777 0.664210 19089826 5002830 142 -1.368027 0.689370 18834238 4524910 143 -1.466237 0.712001 18531415 4094431 144 -1.564370 0.732812 18221097 3707267 145 -1.663149 0.752107 17884902 3352910 146 -1.760914 0.769720 17541593 3035795 147 -1.857303 0.785767 17154033 2746143 148 -1.952109 0.800382 16762694 2487491 149 -2.049691 0.814316 16371394 2248711 150 -2.146322 0.827097 15973300 2033791 151 -2.240346 0.838641 15562612 1841684 152 -2.335032 0.849446 15137133 1665024 153 -2.427421 0.859256 14712225 1507613 154 -2.522206 0.868626 14291471 1362494 155 -2.613290 0.877017 13866390 1233890 156 -2.704108 0.884828 13442096 1117094 157 -2.795246 0.892149 13015795 1010309 158 -2.886171 0.898973 12598855 913880 159 -2.977321 0.905366 12192590 826591 160 -3.064845 0.911112 11768534 747894 161 -3.151030 0.916419 11367344 678008 162 -3.239883 0.921549 10963440 612676 163 -3.327688 0.926302 10579404 554476 164 -3.412679 0.930621 10194429 502226 165 -3.501978 0.934881 9816371 453235 166 -3.585294 0.938614 9446914 410637 167 -3.669160 0.942151 9088280 371825 168 -3.757303 0.945645 8726065 335035 169 -3.837774 0.948647 8389769 304014 170 -3.919238 0.951514 8046818 275031 171 -4.003472 0.954308 7726269 248616 172 -4.088526 0.956963 7408845 224340 173 -4.162521 0.959146 7106692 204123 174 -4.237039 0.961230 6804037 185324 175 -4.321025 0.963451 6511626 167072 176 -4.401259 0.965452 6232247 151044 177 -4.484838 0.967419 5958125 136087 178 -4.558589 0.969060 5706757 123709 179 -4.639814 0.970771 5452789 111600 180 -4.711009 0.972192 5207806 101354 181 -4.786363 0.973620 4978478 91869 182 -4.869195 0.975105 4745066 82591 183 -4.942954 0.976356 4533701 74914 184 -5.014398 0.977507 4324658 67953 185 -5.091609 0.978688 4121718 61339 186 -5.163225 0.979728 3925519 55550 187 -5.233578 0.980699 3738897 50357 188 -5.307865 0.981674 3564197 45564 189 -5.387622 0.982665 3394456 41032 190 -5.462585 0.983548 3229176 37035 191 -5.522797 0.984224 3073333 33791 192 -5.612213 0.985177 2922152 30178 193 -5.681301 0.985874 2779667 27351 194 -5.729313 0.986338 2642905 25146 195 -5.803695 0.987028 2510159 22672 196 -5.871810 0.987629 2385862 20547 197 -5.948582 0.988272 2266467 18499 198 -6.010197 0.988765 2149364 16804 199 -6.090316 0.989374 2040672 15086 200 -6.154236 0.989836 1935499 13684 201 -6.222186 0.990305 1837733 12391 202 -6.286496 0.990729 1739962 11217 203 -6.355383 0.991163 1649996 10138 204 -6.417874 0.991539 1564024 9200 205 -6.486294 0.991932 1482807 8316 206 -6.543540 0.992246 1405104 7572 207 -6.628536 0.992691 1328596 6748 208 -6.670152 0.992899 1259446 6214 209 -6.744719 0.993258 1191875 5583 210 -6.817681 0.993591 1130233 5032 211 -6.876345 0.993847 1067848 4564 212 -6.916666 0.994017 1010653 4200 213 -6.982992 0.994286 955079 3790 214 -7.060549 0.994586 901382 3389 215 -7.206918 0.995109 853404 2898 216 -7.189519 0.995050 805026 2767 217 -7.269173 0.995316 762317 2479 218 -7.375486 0.995649 721142 2178 219 -7.390712 0.995695 678957 2029 220 -7.503023 0.996018 642915 1777 221 -7.493301 0.995991 607321 1690 222 -7.576271 0.996215 571421 1501 223 -7.634301 0.996365 541427 1366 224 -7.734952 0.996610 510511 1201 225 -7.740163 0.996622 481220 1128 226 -7.897804 0.996972 453139 952 227 -7.798001 0.996755 427673 963 228 -8.031541 0.997241 403751 773 229 -7.925554 0.997030 380436 784 230 -8.003989 0.997187 358180 699 231 -8.038089 0.997253 336331 641 232 -8.197926 0.997541 318941 544 233 -8.219689 0.997578 298798 502 234 -8.357695 0.997799 282333 431 235 -8.233912 0.997602 266297 443 236 -8.351043 0.997789 251038 385 237 -8.382318 0.997837 235891 354 238 -8.429964 0.997907 221094 321 239 -8.611204 0.998154 208553 267 240 -8.749862 0.998323 196079 228 241 -8.544526 0.998067 184206 247 242 -8.639656 0.998190 173675 218 243 -8.638109 0.998188 163143 205 244 -8.788099 0.998367 153663 174 245 -8.907461 0.998497 143907 150 246 -9.033677 0.998623 136134 130 247 -8.963099 0.998554 127634 128 248 -9.205865 0.998778 120366 102 249 -9.281523 0.998840 113172 91 250 -9.033463 0.998623 105750 101 251 -9.114841 0.998698 99706 90 252 -9.274439 0.998835 94054 76 253 -9.248816 0.998814 87534 72 254 -9.315446 0.998867 82762 65 255 -9.965784 0.999919 1234137 69 wsjt_9.3.r2792/slope.f0000664000175000017500000000144011015074716012666 0ustar jtnjtn subroutine slope(y,npts,xpk) C Remove best-fit slope from data in y(i). When fitting the straight line, C ignore the peak around xpk +/- 2. real y(npts) real x(100) do i=1,npts x(i)=i enddo sumw=0. sumx=0. sumy=0. sumx2=0. sumxy=0. sumy2=0. do i=1,npts if(abs(i-xpk).gt.2.0) then sumw=sumw + 1.0 sumx=sumx + x(i) sumy=sumy + y(i) sumx2=sumx2 + x(i)**2 sumxy=sumxy + x(i)*y(i) sumy2=sumy2 + y(i)**2 endif enddo delta=sumw*sumx2 - sumx**2 a=(sumx2*sumy - sumx*sumxy) / delta b=(sumw*sumxy - sumx*sumy) / delta do i=1,npts y(i)=y(i)-(a + b*x(i)) enddo return end wsjt_9.3.r2792/prcom.h0000664000175000017500000000011111015074716012660 0ustar jtnjtn common/prcom/pr(135),mdat(126),mref(126,2),mdat2(126),mref2(126,2) wsjt_9.3.r2792/fano.h0000664000175000017500000000055711015074716012501 0ustar jtnjtnint fano(unsigned long *metric, unsigned long *cycles, unsigned char *data,unsigned char *symbols, unsigned int nbits,int mettab[2][256],int delta, unsigned long maxcycles); int encode(unsigned char *symbols,unsigned char *data,unsigned int nbytes); double gen_met(int mettab[2][256],int amp,double noise,double bias,int scale); extern unsigned char Partab[]; wsjt_9.3.r2792/wsjt9.iss0000664000175000017500000000303412023670042013170 0ustar jtnjtn[Setup] AppName=WSJT AppVerName=WSJT Version 9.3 r2574 AppCopyright=Copyright (C) 2001-2012 by Joe Taylor, K1JT DefaultDirName={pf}\WSJT9 DefaultGroupName=WSJT9 [Files] Source: "c:\Users\joe\wsjt\trunk\WSJT9.EXE"; DestDir: "{app}" Source: "c:\Users\joe\wsjt\trunk\UpdateHistory.txt"; DestDir: "{app}" Source: "c:\Users\joe\wsjt\trunk\CALL3.TXT"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "c:\Users\joe\wsjt\trunk\wsjt.ico"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "c:\Users\joe\wsjt\trunk\TSKY.DAT"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "c:\Users\joe\wsjt\trunk\libsamplerate.dll"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "c:\Users\joe\wsjt\trunk\KVASD_g95.EXE"; DestDir: "{app}"; Source: "c:\Users\joe\wsjt\trunk\kvasd.dat"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "c:\Users\joe\wsjt\trunk\wsjtrc.win"; DestDir: "{app}"; Source: "c:\Users\joe\wsjt\trunk\WSJT_User_600.pdf"; DestDir: "{app}"; Source: "c:\Users\joe\wsjt\trunk\WSJT_Quick_Reference.pdf"; DestDir: "{app}"; Source: "c:\Users\joe\wsjt\trunk\rxwav\samples\W8WN_010809_110400.WAV"; DestDir: "{app}\RxWav\Samples\"; Flags: onlyifdoesntexist Source: "c:\Users\joe\wsjt\trunk\dmet_10_-1_3.dat"; DestDir: "{app}"; Flags: onlyifdoesntexist [Icons] Name: "{group}\WSJT9"; Filename: "{app}\WSJT9.EXE"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" Name: "{userdesktop}\WSJT9"; Filename: "{app}\WSJT9.EXE"; WorkingDir: {app}; IconFileName: "{app}\wsjt.ico" wsjt_9.3.r2792/unpackgrid.f0000664000175000017500000000151211234124556013674 0ustar jtnjtn subroutine unpackgrid(ng,grid) parameter (NGBASE=180*180) character grid*4,grid6*6,digit*10 data digit/'0123456789'/ grid=' ' if(ng.ge.32400) go to 10 dlat=mod(ng,180)-90 dlong=(ng/180)*2 - 180 + 2 call deg2grid(dlong,dlat,grid6) grid=grid6(1:4) !XXX explicitly truncate this -db go to 100 10 n=ng-NGBASE-1 if(n.ge.1 .and.n.le.30) then grid(1:1)='-' grid(2:2)=char(48+n/10) grid(3:3)=char(48+mod(n,10)) else if(n.ge.31 .and.n.le.60) then n=n-30 grid(1:2)='R-' grid(3:3)=char(48+n/10) grid(4:4)=char(48+mod(n,10)) else if(n.eq.61) then grid='RO' else if(n.eq.62) then grid='RRR' else if(n.eq.63) then grid='73' endif 100 return end wsjt_9.3.r2792/sync.f0000664000175000017500000000432111015074716012521 0ustar jtnjtn subroutine sync(y1,y2,y3,y4,npts,jpk,baud,bauderr) C Input data are in the y# arrays: detected sigs in four tone-channels, C before decimation by NSPD. parameter (NSPD=25) real y1(npts) real y2(npts) real y3(npts) real y4(npts) real zf(NSPD) real tmp1 real tmp2 complex csum integer nsum(NSPD) real z(65538) !Ready for FSK110 complex cz(0:32768) equivalence (z,cz) data twopi/6.283185307/ do i=1,NSPD zf(i)=0.0 nsum(i)=0 enddo do i=1,npts a1=max(y1(i),y2(i),y3(i),y4(i)) !Find the largest one if(a1.eq.y1(i)) then !Now find 2nd largest a2=max(y2(i),y3(i),y4(i)) else if(a1.eq.y2(i)) then a2=max(y1(i),y3(i),y4(i)) else if(a1.eq.y3(i)) then a2=max(y1(i),y2(i),y4(i)) else a2=max(y1(i),y2(i),y3(i)) endif z(i)=1.e-6*(a1-a2) !Subtract 2nd from 1st j=mod(i-1,NSPD)+1 zf(j)=zf(j)+z(i) nsum(j)=nsum(j)+1 enddo n=log(float(npts))/log(2.0) nfft=2**(n+1) call zero(z(npts+1),nfft-npts) call xfft(z,nfft) C Now find the apparent baud rate. df=11025.0/nfft zmax=0. ia=391.0/df !Was 341/df ib=491.0/df !Was 541/df do i=ia,ib z(i)=real(cz(i))**2 + aimag(cz(i))**2 if(z(i).gt.zmax) then zmax=z(i) baud=df*i endif enddo C Find phase of signal at 441 Hz. csum=0. do j=1,NSPD pha=j*twopi/NSPD csum=csum+zf(j)*cmplx(cos(pha),-sin(pha)) enddo tmp1=aimag(csum) tmp2=real(csum) pha=-atan2(tmp1,tmp2) jpk=nint(NSPD*pha/twopi) if(jpk.lt.1) jpk=jpk+NSPD C The following is nearly equivalent to the above. I don't know which C (if either) is better. c zfmax=-1.e30 c do j=1,NSPD c if(zf(j).gt.zfmax) then c zfmax=zf(j) c jpk2=j c endif c enddo bauderr=(baud-11025.0/NSPD)/df !Baud rate error, in bins return end wsjt_9.3.r2792/jtaudio.c0000664000175000017500000002677711461555650013232 0ustar jtnjtn#include #include #include void fivehz_(void); void fivehztx_(void); void addnoise_(short int *n); // Definition of structure pointing to the audio data typedef struct { double *Tsec; double *tbuf; int *iwrite; int *ibuf; int *TxOK; int *ndebug; int *ndsec; int *Transmitting; int *nwave; int *nmode; int *trperiod; int nbuflen; int nfs; short *y1; short *y2; short *iwave; } paTestData; typedef struct _SYSTEMTIME { short Year; short Month; short DayOfWeek; short Day; short Hour; short Minute; short Second; short Millisecond; } SYSTEMTIME; #ifdef Win32 extern void __stdcall GetSystemTime(SYSTEMTIME *st); #else #include #include void GetSystemTime(SYSTEMTIME *st){ struct timeval tmptimeofday; struct tm tmptmtime; gettimeofday(&tmptimeofday,NULL); gmtime_r((const time_t *)&tmptimeofday.tv_sec,&tmptmtime); st->Year = (short)tmptmtime.tm_year; st->Month = (short)tmptmtime.tm_year; st->DayOfWeek = (short)tmptmtime.tm_wday; st->Day = (short)tmptmtime.tm_mday; st->Hour = (short)tmptmtime.tm_hour; st->Minute = (short)tmptmtime.tm_min; st->Second = (short)tmptmtime.tm_sec; st->Millisecond = (short)(tmptimeofday.tv_usec/1000); } #endif // Input callback routine: static int SoundIn( void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ) { paTestData *data = (paTestData*)userData; short *in = (short*)inputBuffer; unsigned int i; static int ia=0; static int ib=0; static int ncall=0; static int nsec0=0; static double stime0=86400.0; int nsec; double stime; SYSTEMTIME st; // Get System time GetSystemTime(&st); nsec = (int) (st.Hour*3600.0 + st.Minute*60.0 + st.Second); stime = nsec + st.Millisecond*0.001 + *data->ndsec*0.1; *data->Tsec = stime; nsec=(int)stime; ncall++; // NB: inputBufferAdcTime and currentTime do not work properly. /* if(nsec!=nsec0) { printf("%f %f %f %f\n",stime,timeInfo->inputBufferAdcTime, timeInfo->currentTime,timeInfo->outputBufferDacTime); } */ // if((inputBuffer==NULL) & (ncall>2) & (stime>stime0)) { if((statusFlags!=0) & (ncall>2) & (stime>stime0)) { if(*data->ndebug) printf("Status flags %d at Tsec = %7.1f s, DT = %7.1f\n", (int)statusFlags,stime,stime-stime0); stime0=stime; } if((statusFlags&1) == 0) { //increment buffer pointers only if data available ia=*data->iwrite; ib=*data->ibuf; ib++; //Increment ibuf if(ib>1024) ib=1; *data->ibuf=ib; data->tbuf[ib-1]=stime; for(i=0; iy1[ia] = (*in++); data->y2[ia] = (*in++); ia++; } } if(ia >= data->nbuflen) ia=0; //Wrap buffer pointer if necessary *data->iwrite = ia; //Save buffer pointer fivehz_(); //Call fortran routine nsec0=nsec; return 0; } // Output callback routine: static int SoundOut( void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ) { paTestData *data = (paTestData*)userData; short *wptr = (short*)outputBuffer; unsigned int i,n; static short int n2; static int ic=0; static int TxOKz=0; int nsec; double stime; SYSTEMTIME st; // Get System time GetSystemTime(&st); nsec = (int) (st.Hour*3600.0 + st.Minute*60.0 + st.Second); stime = nsec + st.Millisecond*0.001 + *data->ndsec*0.1; *data->Tsec = stime; nsec=(int)stime; if(*data->TxOK && (!TxOKz)) { n=nsec/(*data->trperiod); // ic = (int)(stime - *data->trperiod*n) * data->nfs/framesPerBuffer; // ic = framesPerBuffer*ic; if(*data->nmode == 3) { ic = 0; } else { ic = (int)(stime - *data->trperiod*n) * data->nfs; ic = ic % *data->nwave; } } TxOKz=*data->TxOK; *data->Transmitting=*data->TxOK; if(*data->TxOK) { for(i=0 ; i < framesPerBuffer; i++ ) { n2=data->iwave[ic]; addnoise_(&n2); *wptr++ = n2; //left *wptr++ = n2; //right ic++; if(ic >= *data->nwave) { /* FSK441 JT6M JT41 */ if((*data->nmode != 1) && (*data->nmode != 4) && (*data->nmode != 9)) { *data->TxOK = 0; ic--; } else { ic = ic % *data->nwave; //Wrap buffer pointer if necessary } } } } else { memset((void*)outputBuffer, 0, 2*sizeof(short)*framesPerBuffer); } fivehztx_(); //Call fortran routine return 0; } /*******************************************************************/ int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[], int *nbuflen, int *iwrite, short iwave[], int *nwave, int *nfsample, int *nsamperbuf, int *TRPeriod, int *TxOK, int *ndebug, int *Transmitting, double *Tsec, int *ngo, int *nmode, double tbuf[], int *ibuf, int *ndsec) { paTestData data; PaStream *instream, *outstream; PaStreamParameters inputParameters, outputParameters; // PaStreamInfo *streamInfo; int nSampleRate = *nfsample; int ndevice_in = *ndevin; int ndevice_out = *ndevout; double dSampleRate = (double) *nfsample; PaError err_init, err_open_in, err_open_out, err_start_in, err_start_out; PaError err = 0; data.Tsec = Tsec; data.tbuf = tbuf; data.iwrite = iwrite; data.ibuf = ibuf; data.TxOK = TxOK; data.ndebug = ndebug; data.ndsec = ndsec; data.Transmitting = Transmitting; data.y1 = y1; data.y2 = y2; data.nbuflen = *nbuflen; data.nmode = nmode; data.nwave = nwave; data.iwave = iwave; data.nfs = nSampleRate; data.trperiod = TRPeriod; err_init = Pa_Initialize(); // Initialize PortAudio if(err_init) { printf("Error initializing PortAudio.\n"); printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_init), err_init); Pa_Terminate(); // I don't think we need this but... return(-1); } // printf("Opening device %d for input, %d for output...\n",ndevice_in,ndevice_out); inputParameters.device = ndevice_in; inputParameters.channelCount = 2; inputParameters.sampleFormat = paInt16; inputParameters.suggestedLatency = 0.2; inputParameters.hostApiSpecificStreamInfo = NULL; // Test if this configuration actually works, so we do not run into an ugly assertion err_open_in = Pa_IsFormatSupported(&inputParameters, NULL, dSampleRate); if (err_open_in == 0) { err_open_in = Pa_OpenStream( &instream, //address of stream &inputParameters, NULL, dSampleRate, //Sample rate 2048, //Frames per buffer paNoFlag, (PaStreamCallback *)SoundIn, //Callback routine (void *)&data); //address of data structure if(err_open_in) { // We should have no error here usually printf("Error opening input audio stream:\n"); printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_in), err_open_in); err = 1; } else { // printf("Successfully opened audio input.\n"); } } else { printf("Error opening input audio stream.\n"); printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_in), err_open_in); err = 1; } outputParameters.device = ndevice_out; outputParameters.channelCount = 2; outputParameters.sampleFormat = paInt16; outputParameters.suggestedLatency = 0.2; outputParameters.hostApiSpecificStreamInfo = NULL; // Test if this configuration actually works, so we do not run into an ugly assertion err_open_out = Pa_IsFormatSupported(NULL, &outputParameters, dSampleRate); if (err_open_out == 0) { err_open_out = Pa_OpenStream( &outstream, //address of stream NULL, &outputParameters, dSampleRate, //Sample rate 2048, //Frames per buffer paNoFlag, (PaStreamCallback *)SoundOut, //Callback routine (void *)&data); //address of data structure if(err_open_out) { // We should have no error here usually printf("Error opening output audio stream!\n"); printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_out), err_open_out); err += 2; } else { // printf("Successfully opened audio output.\n"); } } else { printf("Error opening output audio stream.\n"); printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_open_out), err_open_out); err += 2; } // if there was no error in opening both streams start them if (err == 0) { err_start_in = Pa_StartStream(instream); //Start input stream if(err_start_in) { printf("Error starting input audio stream!\n"); printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_start_in), err_start_in); err += 4; } err_start_out = Pa_StartStream(outstream); //Start output stream if(err_start_out) { printf("Error starting output audio stream!\n"); printf("\tErrortext: %s\n\tNumber: %d\n",Pa_GetErrorText(err_start_out), err_start_out); err += 8; } } if (err == 0) printf("Audio streams running normally.\n******************************************************************\n"); while( Pa_IsStreamActive(instream) && (*ngo != 0) && (err == 0) ) { // printf("CPU: %.1f\%\n",100*Pa_GetStreamCpuLoad(instream)); Pa_Sleep(200); } Pa_AbortStream(instream); // Abort stream Pa_CloseStream(instream); // Close stream, we're done. Pa_AbortStream(outstream); // Abort stream Pa_CloseStream(outstream); // Close stream, we're done. Pa_Terminate(); return(err); } int padevsub_(int *idevin, int *idevout) { int numdev,ndefin,ndefout; int nchin[41], nchout[41]; int i, devIdx; int numDevices; const PaDeviceInfo *pdi; PaError err; Pa_Initialize(); numDevices = Pa_GetDeviceCount(); numdev = numDevices; if( numDevices < 0 ) { err = numDevices; Pa_Terminate(); return err; } if ((devIdx = Pa_GetDefaultInputDevice()) > 0) { ndefin = devIdx; } else { ndefin = 0; } if ((devIdx = Pa_GetDefaultOutputDevice()) > 0) { ndefout = devIdx; } else { ndefout = 0; } printf("\nAudio Input Output Device Name\n"); printf("Device Channels Channels\n"); printf("------------------------------------------------------------------\n"); for( i=0; i < numDevices; i++ ) { pdi = Pa_GetDeviceInfo(i); // if(i == Pa_GetDefaultInputDevice()) ndefin = i; // if(i == Pa_GetDefaultOutputDevice()) ndefout = i; nchin[i]=pdi->maxInputChannels; nchout[i]=pdi->maxOutputChannels; printf(" %2d %2d %2d %s\n",i,nchin[i],nchout[i],pdi->name); } printf("\nUser requested devices: Input = %2d Output = %2d\n", *idevin,*idevout); printf("Default devices: Input = %2d Output = %2d\n", ndefin,ndefout); if((*idevin<0) || (*idevin>=numdev)) *idevin=ndefin; if((*idevout<0) || (*idevout>=numdev)) *idevout=ndefout; if((*idevin==0) && (*idevout==0)) { *idevin=ndefin; *idevout=ndefout; } printf("Will open devices: Input = %2d Output = %2d\n", *idevin,*idevout); Pa_Terminate(); return 0; } wsjt_9.3.r2792/decode1.f900000664000175000017500000000441311461555650013232 0ustar jtnjtnsubroutine decode1(iarg) ! Get data and parameters from gcom, then call the decoders when needed. ! This routine runs in a background thread and will never return. character sending0*28,mode0*6,cshort*11 character fnamex*24 integer sendingsh0 integer*8 mtx include 'gcom1.f90' include 'gcom2.f90' include 'gcom3.f90' include 'gcom4.f90' common/mtxcom/mtx,ltrace,mtxstate,csub0 data sending0/' '/ ntr0=iarg !Silence compiler warning ntr0=ntr ns0=999999 sendingsh0=-3 10 ltrace=ndebug if(mode(1:4).eq.'Echo' .and. ndecoding.eq.1) then nt=ntime/86400 nt=86400*nt + tbuf(ibuf0) call get_fname(mycall,iyr,imo,ida,nt,lauto,fnamex) i1=index(fnamex,'.WAV') fnamex=fnamex(1:i1-3)//'.eco' call avecho(fnamex,ntime,y1,ibuf0,ntc,necho,nfrit,ndither,dlatency, & nsave,fecho,nsumecho,nclearave,ss1,ss2) ndecoding=0 ndecdone=1 endif if(mode(1:4).eq.'JT65' .or. mode(1:3).eq.'JT4' & .or. mode(1:2).eq.'CW') then if(rxdone) then call savedata newdat2=1 rxdone=.false. endif else if(ntr.ne.ntr0 .and. monitoring.gt.0) then if(ntr.ne.TxFirst .or. (lauto.eq.0)) call savedata ntr0=ntr endif endif if(ndecoding.gt.0) then ndecdone=0 call decode2 ndecdone=1 if(mousebutton.eq.0) ndecoding0=ndecoding ndecoding=0 endif if(ns0.lt.0) then rewind 21 ns0=999999 endif n=Tsec if(n.lt.ns0 .and. utcdate(1:1).eq.'2') then call cs_lock('decode1a') write(21,1001) utcdate(:11) 1001 format(/'UTC Date: ',a11/'---------------------') call flush(21) call cs_unlock ns0=n endif if(transmitting.eq.1 .and. (sending.ne.sending0 .or. & sendingsh.ne.sendingsh0 .or. mode.ne.mode0)) then ih=n/3600 im=mod(n/60,60) is=mod(n,60) cshort=' ' if(sendingsh.eq.1) cshort='(Shorthand)' call cs_lock('decode1b') write(21,1010) ih,im,is,mode,sending,cshort 1010 format(3i2.2,' Transmitting: ',a6,2x,a28,2x,a11) call flush(21) call cs_unlock sending0=sending sendingsh0=sendingsh mode0=mode endif call usleep(100*1000) go to 10 end subroutine decode1 wsjt_9.3.r2792/syncdiana.f900000664000175000017500000001003411555027163013670 0ustar jtnjtnsubroutine syncdiana(s0,jsym,kstep,nfreeze,mousedf,dftolerance,minsigdb, & nafc,xsync,ipk,jpk,idfpk,dfx,dtx,msglen,msg,nsnr,nworst,navg, & ccfblue,ccfred) parameter (NSZ=646) !Quarter-symbols in 30 s real s0(1152,NSZ) real fs0(1152,96) !Folded-for-sync spectra real fs00(1152,96) real ccfblue(-5:540) real ccfred(-224:224) character msg*28,msgbest*28 integer dftolerance integer isync(4) data isync/8,16,32,24/ df=11025.0/4096.0 nblk=24 i0=2*236 xsyncbest=0. bigworst=0. ipk=9999 jpk=9999 nq=1024 jb=(jsym-4*nblk+1)/4 jb=4*jb idfmax=0 if(nafc.eq.1) idfmax=10 do idf=-idfmax,idfmax,2 fs0=0. do j=1,jb !Fold s0 into fs0, modulo 4*nblk k=mod(j-1,4*nblk)+1 ii=nint(idf*float(j-jb/2)/float(jb)) i1=max(1,1-ii) i2=min(nq,nq-ii) fs0(i1:i2,k)=fs0(i1:i2,k) + s0(i1+ii:i2+ii,j) enddo ia=nint(-600.0/df) ib=nint(600.0/df) if(nfreeze.eq.1) then ia=nint((mousedf-dftolerance)/df) ib=nint((mousedf+dftolerance)/df) endif smax=0. do i=ia,ib !Search over DF range sm1=0. do j=0,4*nblk-1 !Find sync pattern, lags 0-95 ss=0. do n=1,4 !Sum the four sync tones k=j+4*n-3 if(k.gt.4*nblk) k=k-4*nblk ss=ss + fs0(i0+i+2*isync(n),k) enddo if(ss.gt.sm1) then sm1=ss jpk1=j+1 endif enddo if(sm1.gt.smax) then smax=sm1 ipk=i0+i !Frequency offset, DF jpk=jpk1 idfpk=idf endif enddo ref=fs0(ipk+2,jpk) + fs0(ipk+4,jpk) + fs0(ipk+6,jpk) j=jpk+4 if(j.gt.96) j=j-96 ref=ref + fs0(ipk,j) + fs0(ipk+4,j) + fs0(ipk+6,j) j=jpk+8 if(j.gt.96) j=j-96 ref=ref + fs0(ipk,j) + fs0(ipk+2,j) + fs0(ipk+4,j) j=jpk+12 if(j.gt.96) j=j-96 ref=ref + fs0(ipk,j) + fs0(ipk+2,j) + fs0(ipk+6,j) ref=ref/3.0 !Reference level near (DF,DT) xsync=smax/ref - 1.0 smax=0. j1=jpk+16 if(j1.gt.4*nblk) j1=j1-4*nblk j2=jpk+20 if(j2.gt.4*nblk) j2=j2-4*nblk do i=ipk+2,ipk+56,2 !Find User's message length ss=fs0(i,j1) + fs0(i+10,j2) if(ss.gt.smax) then smax=ss ipk2=i endif enddo msglen=(ipk2-ipk)/2 call decdiana(s0,jsym,ipk,jpk,idfpk,msglen,msg,snrx,worst,avg) if(worst.gt.bigworst) then bigworst=worst bigavg=avg xsyncbest=xsync ipkbest=ipk jpkbest=jpk idfpkbest=idfpk msglenbest=msglen msgbest=msg snrbest=snrx fs00=fs0 endif enddo worst=bigworst avg=bigavg xsync=xsyncbest ipk=ipkbest jpk=jpkbest idfpk=idfpkbest msglen=msglenbest msg=msgbest snrx=snrbest dfx=(ipk-i0)*df dtx=jpk*kstep/(11025.0*9.0/32.0) - 1.4 nsnr=nint(snrx) nsnr=max(nsnr,-26) if(int(xsync).lt.MinSigdB) msg=' ' nworst=10.0*(worst-1.0) navg=10.0*(avg-1.0) if(nworst.gt.10) nworst=10 if(navg.gt.10) navg=10 if(navg.le.0) msg=' ' ! Compute ccfred do i=ia,ib !Search over DF range sm1=0. do j=0,4*nblk-1 !Find sync pattern, lags 0-95 ss=0. do n=1,4 !Sum the four sync tones k=j+4*n-3 if(k.gt.4*nblk) k=k-4*nblk ss=ss + fs00(i0+i+2*isync(n),k) enddo if(ss.gt.sm1) then sm1=ss jpk1=j+1 endif if(abs(i).le.224) ccfred(i)=sm1 enddo enddo ccfred=0.5*ccfred/ref - 1.0 ! Compute ccfblue using idfpk and ipk do j=0,4*nblk-1 ss=0. do n=1,4 k=j+4*n-3 if(k.gt.4*nblk) k=k-4*nblk ss=ss + fs00(ipk+2*isync(n),k) enddo jj=mod(j+80,96) - 5 ccfblue(jj)=0.5*(ss/ref - 1.0) enddo return end subroutine syncdiana wsjt_9.3.r2792/rfile.f900000664000175000017500000000030711231655622013020 0ustar jtnjtnsubroutine rfile(lu,ibuf,n,ierr) integer*1 ibuf(n) call cs_lock('rfile') read(lu,end=998) ibuf ierr=0 go to 999 998 ierr=1002 999 continue call cs_unlock return end subroutine rfile wsjt_9.3.r2792/getpfx2.f0000664000175000017500000000113111015074716013120 0ustar jtnjtn subroutine getpfx2(k0,callsign) character callsign*12 include 'pfx.f' character addpfx*8 common/gcom4/addpfx k=k0 if(k.gt.450) k=k-450 if(k.ge.1 .and. k.le.NZ) then iz=index(pfx(k),' ') - 1 callsign=pfx(k)(1:iz)//'/'//callsign else if(k.ge.401 .and. k.le.400+NZ2) then iz=index(callsign,' ') - 1 callsign=callsign(1:iz)//'/'//sfx(k-400) else if(k.eq.449) then iz=index(addpfx,' ') - 1 if(iz.lt.1) iz=8 callsign=addpfx(1:iz)//'/'//callsign endif return end wsjt_9.3.r2792/fil652.f0000664000175000017500000000245011015074716012555 0ustar jtnjtn subroutine fil652(c1,n1,c2,n2) C FIR lowpass filter designed using ScopeFIR C fsample = 2756.25 Hz C Ntaps = 31 C fc = 500 Hz C fstop = 689.0625 Hz C Ripple = 0.5 dB C Stop Atten = 50 dB C fout = 1378.125 Hz parameter (NTAPS=31) parameter (NH=NTAPS/2) parameter (NDOWN=2) !Downsample ratio complex c1(n1) complex c2(n2) C Filter coefficients: real a(-NH:NH) data a/ + -0.000859869246,-0.008518289484,-0.011250152625,-0.001061705256, + 0.013958392156, 0.010047338728,-0.015003870003,-0.025027880982, + 0.007151700557, 0.043634723913, 0.016788108012,-0.061886192062, + -0.073548459520, 0.075261027466, 0.306638863577, 0.419826269508, + 0.306638863577, 0.075261027466,-0.073548459520,-0.061886192062, + 0.016788108012, 0.043634723913, 0.007151700557,-0.025027880982, + -0.015003870003, 0.010047338728, 0.013958392156,-0.001061705256, + -0.011250152625,-0.008518289484,-0.000859869246/ n2=(n1-NTAPS+NDOWN)/NDOWN k0=NH-NDOWN+1 C Loop over all output samples do i=1,n2 c2(i)=0. k=k0 + NDOWN*i do j=-NH,NH c2(i)=c2(i) + c1(j+k)*a(j) enddo enddo return end wsjt_9.3.r2792/char.h0000664000175000017500000000311111015074716012460 0ustar jtnjtn/* Include file to configure the RS codec for character symbols * * Copyright 2002, Phil Karn, KA9Q * May be used under the terms of the GNU General Public License (GPL) */ #define DTYPE unsigned char /* Reed-Solomon codec control block */ struct rs { int mm; /* Bits per symbol */ int nn; /* Symbols per block (= (1<= rs->nn) { x -= rs->nn; x = (x >> rs->mm) + (x & rs->nn); } return x; } #define MODNN(x) modnn(rs,x) #define MM (rs->mm) #define NN (rs->nn) #define ALPHA_TO (rs->alpha_to) #define INDEX_OF (rs->index_of) #define GENPOLY (rs->genpoly) #define NROOTS (rs->nroots) #define FCR (rs->fcr) #define PRIM (rs->prim) #define IPRIM (rs->iprim) #define PAD (rs->pad) #define A0 (NN) #define ENCODE_RS encode_rs_char #define DECODE_RS decode_rs_char #define INIT_RS init_rs_char #define FREE_RS free_rs_char void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity); int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras); void *INIT_RS(int symsize,int gfpoly,int fcr, int prim,int nroots,int pad); void FREE_RS(void *p); wsjt_9.3.r2792/gcom3.f900000664000175000017500000000107511015074716012731 0ustar jtnjtn! Variable Purpose Set in Thread !------------------------------------------------------------------------- integer*2 nfmt2 !Standard header for *.WAV file Decoder integer*2 nchan2 integer*2 nbitsam2 integer*2 nbytesam2 integer*4 nchunk integer*4 lenfmt integer*4 nsamrate integer*4 nbytesec integer*4 ndata character*4 ariff character*4 awave character*4 afmt character*4 adata common/gcom3/ariff,nchunk,awave,afmt,lenfmt,nfmt2,nchan2,nsamrate, & nbytesec,nbytesam2,nbitsam2,adata,ndata !### volatile /gcom3/ wsjt_9.3.r2792/wsjt1.f900000664000175000017500000002407611613564145013003 0ustar jtnjtnsubroutine wsjt1(d,jz0,istart,samfacin,FileID,ndepth, & MinSigdB,DFTolerance,MouseButton,NClearAve,nforce, & Mode,NFreeze,NAFC,NZap,mode65,nfast,mode4,idf,ntdecode0, & MyCall,HisCall,HisGrid,neme,ntx2,ndebug,s2, & ps0,npkept,lumsg,nslim2,psavg,ccf,Nseg, & MouseDF,NAgain,LDecoded,nspecial,ndf,ss1,ss2) parameter (NP2=120*11025) integer*2 d(jz0) !Buffer for raw one-byte data integer istart !Starting location in original d() array character FileID*40 !Name of file being processed integer MinSigdB !Minimum ping strength, dB integer DFTolerance !Defines DF search range integer NSyncOK !Set to 1 if JT65 file synchronized OK character*12 mycall character*12 hiscall character*6 hisgrid real ps0(431) !Spectrum of best ping integer npkept !Number of pings kept and decoded integer lumsg !Logical unit for decoded.txt integer nslim2 !Minimum strength for single-tone pings, dB real psavg(450) !Average spectrum of the whole file integer Nseg !First or second Tx sequence? integer MouseDF !Freeze position for DF logical pick !True if this is a mouse-picked ping logical stbest !True if the best decode was Single-Tone logical STfound !True if at least one ST decode logical LDecoded !True if anything was decoded real s2(64,3100) !2D spectral array real ccf(-5:540) !X-cor function in JT65 mode (blue line) real ss1(-224:224) !Magenta curve (for JT65 shorthands) real ss2(-224:224) !Orange curve (for JT65 shorthands) real fzap(200) real sumsq(600) integer resample real*8 samfacin,samratio real dat2(NP2) complex cdat(262145) character msg3*3 character cfile6*6 logical lcum integer indx(100) character*90 line ! complex cfft ! common/down932/cfft(147456),npts2,df932 common/avecom/dat(NP2),labdat,jza,modea common/ccom/nline,tping(100),line(100) common/limcom/ nslim2a common/extcom/ntdecode save lcum=.true. jz=jz0 ntdecode=ntdecode0 modea=Mode nslim2a=0 !### Is this OK ??? ### MinWidth=40 !Minimum width of pings, ms call zero(psavg,450) rewind 11 rewind 12 do i=1,40 if(FileID(i:i).eq.'.') go to 3 enddo i=4 3 ia=max(1,i-6) cfile6=FileID(ia:i-1) nline=0 ndiag=0 ! If file "/wsjt.reg" exists, set ndiag=1 open(16,file='/wsjt.reg',status='old',err=4) ndiag=1 close(16) 4 if(mode.lt.8 .and. jz.gt.655360) jz=655360 if(mode.eq.4 .and. jz.gt.330750) jz=330750 !### Fix this! sum=0. do j=1,jz !Convert raw data from i*2 to real, remove DC dat(j)=0.1*d(j) sum=sum + dat(j) enddo ave=sum/jz samratio=1.d0/samfacin if(samratio.eq.1.d0) then do j=1,jz dat(j)=dat(j)-ave enddo else do j=1,jz dat2(j)=dat(j)-ave enddo ! Resample ntype: 0=best, 1=sinc_medium, 2=sinc_fast, 3=hold, 4=linear ntype=2 ierr=resample(dat2,dat,samratio,jz,ntype) if(ierr.ne.0) print*,'Resample error.',samratio endif ! if(ndiag.ne.0 .and. nclip.lt.0) then ! Intentionally degrade SNR by -nclip dB. ! sq=0. ! do i=1,jz ! sq=sq + dat(i)**2 ! enddo ! p0=sq/jz ! p1=p0*10.0**(-0.1*nclip) ! dnoise=sqrt(4*(p1-p0)) ! idum=-1 ! do i=1,jz ! dat(i)=dat(i) + dnoise*gran(idum) ! enddo ! endif if(mode.ne.2 .and. nzap.ne.0) then nfrz=NFreeze if(mode.eq.1) nfrz=0 if(jz.gt.100000) call avesp2(dat,jz,2,mode,nfrz,MouseDF, & DFTolerance,fzap) nadd=1 call bzap(dat,jz,nadd,mode,fzap) endif sq=0. do j=1,jz !Compute power level for whole array sq=sq + dat(j)**2 enddo avesq=sq/jz basevb=dB(avesq) - 44 !Base power level if(avesq.eq.0) go to 900 nz=600 nstep=jz/nz sq=0. k=0 do j=1,nz sum=0. do n=1,nstep k=k+1 sum=sum+dat(k)**2 enddo sum=sum/nstep sumsq(j)=sum enddo pick=.false. if(mousebutton.ne.0) pick=.true. !This is a mouse-picked decoding if(.not.pick .and. nforce.eq.0 .and. & (basevb.lt.-15.0 .or. basevb.gt.20.0)) goto 900 nchan=64 !Save 64 spectral channels nstep=221 !Set step size to ~20 ms nz=jz/nstep - 1 !# of spectra to compute if(.not.pick) then MouseButton=0 jza=jz labdat=labdat+1 endif tbest=0. NsyncOK=0 ! If we're in JT65 mode, call the decode65 routines. if(mode.eq.2) then ! Check for a JT65 shorthand message nstest=0 if(ntx2.ne.1) call short65(dat,jz,NFreeze,MouseDF, & DFTolerance,mode65,nspecial,nstest,dfsh,iderrsh, & idriftsh,snrsh,ss1,ss2,nwsh,idfsh) ! Lowpass filter and decimate by 2 call lpf1(dat,jz,jz2,MouseDF,MouseDF2) idf=mousedf-mousedf2 jz=jz2 nadd=1 fzap(1)=0. if(nzap.eq.1) call avesp2(dat,jz,nadd,mode,NFreeze,MouseDF2, & DFTolerance,fzap) if(nzap.eq.1.and.nstest.eq.0) call bzap(dat,jz,nadd,mode,fzap) i=index(MyCall,char(0)) if(i.le.0) i=index(MyCall,' ') mycall=MyCall(1:i-1)//' ' i=index(HisCall,char(0)) if(i.le.0) i=index(HisCall,' ') hiscall=HisCall(1:i-1)//' ' i1=4096 !Offset data by about 0.8 s. jztest=11025*ntdecode/2 - 2755 if(nfast.eq.2) then jztest=jztest/2 i1=0 endif ! write(74) jz,cfile6,(dat(j),j=1,jz) if(jz.ge.jztest) call wsjt65(dat(i1+1),jz-i1,cfile6, & NClearAve,MinSigdB,DFTolerance,NFreeze,NAFC,mode65,nfast,Nseg, & MouseDF2,NAgain,ndepth,neme,idf,idfsh, & mycall,hiscall,hisgrid,lumsg,lcum,nspecial,ndf, & nstest,dfsh,snrsh,NSyncOK,ccf,psavg,ndiag,nwsh) goto 900 endif if(mode.eq.5) then ! We're in CW mode. ! call decodecw(dat,jz,cfile6,DFTolerance,NFreeze, ! + MouseDF2,mycall,hiscall,hisgrid) go to 900 endif ! If we're in JT4 mode, call the decode24 routines. if(mode.eq.7) then ! Lowpass filter and decimate by 2 call lpf1(dat,jz,jz2,MouseDF,MouseDF2) idf=mousedf-mousedf2 jz=jz2 nadd=1 fzap(1)=0. if(nzap.eq.1) call avesp2(dat,jz,nadd,mode,NFreeze,MouseDF2, & DFTolerance,fzap) if(nzap.eq.1.and.nstest.eq.0) call bzap(dat,jz,nadd,mode,fzap) i=index(MyCall,char(0)) if(i.le.0) i=index(MyCall,' ') mycall=MyCall(1:i-1)//' ' i=index(HisCall,char(0)) if(i.le.0) i=index(HisCall,' ') hiscall=HisCall(1:i-1)//' ' ! Offset data by about 1 s. jztest=165000 if(jz.ge.jztest) call wsjt24(dat(4097),jz-4096,cfile6, & NClearAve,MinSigdB,DFTolerance,NFreeze,mode,mode4, & Nseg,MouseDF2,NAgain,idf,lumsg,lcum,nspecial,ndf, & NSyncOK,ccf,psavg,ndiag) goto 900 endif if(mode.eq.9) then !ISCAT mode nz=jz/nstep - 1 !# of spectra to compute call spec2d(dat,jz,nstep,s2,nchan,nz,psavg,sigma) t2=0. if(pick) t2=(istart+0.5*jz)/11025.0 + 0.5 !### +0.5 is empirical jz=min(jz,30*11025) call ana932(dat,jz,cdat,npts) !Make downsampled analytic signal ! write(74) npts,cfile6,(cdat(j),j=1,npts) ! Now cdat() is the downsampled analytic signal. ! New sample rate = fsample = BW = 11025 * (9/32) = 3100.78125 Hz ! NB: npts, nsps, etc., are all reduced by 9/32 call iscat(cdat,npts,t2,pick,cfile6,MinSigdB,DFTolerance, & NFreeze,MouseDF,mousebutton,mode4,nafc,ndebug,psavg) psavg(65:)=0. go to 800 endif if(mode.eq.10) then jza=min(jz,11025*30) ! call dtrim(dat,jza,dat2,jzb) call ana932(dat,jza,cdat,npts) !Make downsampled analytic signal ! write(74) npts,cfile6,(cdat(j),j=1,npts) ! write(75) npts2,cfile6,(cfft(j),j=1,npts2) call diana(cdat,npts,cfile6,MinSigdB,DFTolerance,NFreeze,MouseDF, & nafc,ccf,psavg) go to 900 endif ! We're in FSK441 or JTMS mode. Compute the 2D spectrum. df=11025.0/256.0 !FFT resolution ~43 Hz dtbuf=nstep/11025.0 stlim=nslim2 !Single-tone threshold jz=min(30*11025,jz) nz=jz/nstep - 1 !# of spectra to compute call spec2d(dat,jz,nstep,s2,nchan,nz,psavg,sigma) if(sigma.lt.0.0) basevb=-99.0 if(sigma.lt.0.0) go to 900 nline0=nline STfound=.false. npkept=0 ! Look for single-tone messages if((.not.pick) .or. MouseButton.eq.1) then call stdecode(s2,nchan,nz,sigma,dtbuf,df,stlim, & DFTolerance,cfile6,pick,istart) endif if(nline.gt.nline0) STfound=.true. !ST message(s) found ! Now the multi-tone decoding ! write(72) jz,nz,cfile6,(dat(j),j=1,jz) call mtdecode(dat,jz,nz,MinSigdB,MinWidth,NFreeze,DFTolerance, & MouseDF,istart,pick,cfile6,mycall,hiscall,mode,ps0) npkept=nline !Number of pings that were kept smax=0. stbest=.false. if(npkept.gt.0) then call indexx(npkept,tping,indx) !Merge the ST and MT decodes do i=1,npkept j=indx(i) if(pick .and. STFound .and. line(j)(29:31).eq.' ') goto 10 call cs_lock('wsjt1') write(lumsg,1050) line(j) !Write to decoded.txt 1050 format(a79) if(lcum) write(21,1050) line(j) !Write to ALL.TXT read(line(j),1060) sig,msg3 1060 format(16x,f3.0,9x,a3) call cs_unlock if(sig.gt.smax) then smax=sig tbest=tping(j) stbest = (msg3.ne.' ') endif 10 continue enddo endif dt=1.0/11025.0 !Compute spectrum for pink curve if(stbest) then jj=nint(tbest/dt) call spec441(dat(jj),1102,ps0,f0) endif 800 continue if(nz.ge.1) call s2shape(s2,nchan,nz,tbest) 900 LDecoded = ((NSyncOK.gt.0) .or. npkept.gt.0) endfile (11,err=901) 901 call flush(11) call flush(12) call flush(21) return end subroutine wsjt1 wsjt_9.3.r2792/rs.h0000664000175000017500000000253111015074716012174 0ustar jtnjtn/* User include file for the Reed-Solomon codec * Copyright 2002, Phil Karn KA9Q * May be used under the terms of the GNU General Public License (GPL) */ /* General purpose RS codec, 8-bit symbols */ void encode_rs_char(void *rs,unsigned char *data,unsigned char *parity); int decode_rs_char(void *rs,unsigned char *data,int *eras_pos, int no_eras); void *init_rs_char(int symsize,int gfpoly, int fcr,int prim,int nroots, int pad); void free_rs_char(void *rs); /* General purpose RS codec, integer symbols */ void encode_rs_int(void *rs,int *data,int *parity); int decode_rs_int(void *rs,int *data,int *eras_pos,int no_eras); void *init_rs_int(int symsize,int gfpoly,int fcr, int prim,int nroots,int pad); void free_rs_int(void *rs); /* CCSDS standard (255,223) RS codec with conventional (*not* dual-basis) * symbol representation */ void encode_rs_8(unsigned char *data,unsigned char *parity,int pad); int decode_rs_8(unsigned char *data,int *eras_pos,int no_eras,int pad); /* CCSDS standard (255,223) RS codec with dual-basis symbol representation */ void encode_rs_ccsds(unsigned char *data,unsigned char *parity,int pad); int decode_rs_ccsds(unsigned char *data,int *eras_pos,int no_eras,int pad); /* Tables to map from conventional->dual (Taltab) and * dual->conventional (Tal1tab) bases */ extern unsigned char Taltab[],Tal1tab[]; wsjt_9.3.r2792/db.f0000664000175000017500000000016411022616637012135 0ustar jtnjtn real function db(x) db=-99.0 if(x.gt.1.259e-10) db=10.0*log10(x) return end wsjt_9.3.r2792/synciscat.f900000664000175000017500000001143411554332063013721 0ustar jtnjtnsubroutine synciscat(cdat,npts,s0,jsym,df,DFTolerance,NFreeze, & MouseDF,mousebutton,mode4,nafc,psavg,xsync,nsig,ndf0,msglen, & ipk,jpk,idf,df1) ! Synchronize an ISCAT signal ! cdat() is the downsampled analytic signal. ! Sample rate = fsample = BW = 11025 * (9/32) = 3100.78125 Hz ! npts, nsps, etc., are all reduced by 9/32 parameter (NMAX=30*3101) parameter (NSZ=4*1400) complex cdat(NMAX) complex c(288) real s0(288,NSZ) real fs0(288,96) !108 = 96 + 3*4 real savg(288) real psavg(72) !Average spectrum of whole file integer dftolerance integer icos(4) data icos/0,1,3,2/ data nsync/4/,nlen/2/,ndat/18/ ! Silence compiler warnings: nsigbest=-20 ndf0best=0 msglenbest=0 ipkbest=0 jpkbest=0 ipk2=0 idfbest=mousebutton fsample=3100.78125 !New sample rate nsps=144/mode4 nsym=npts/nsps - 1 nblk=nsync+nlen+ndat nfft=2*nsps !FFTs at twice the symbol length, kstep=nsps/4 ! stepped by 1/4 symbol df=fsample/nfft fac=1.0/1000.0 !Somewhat arbitrary savg=0. ia=1-kstep do j=1,4*nsym !Compute symbol spectra ia=ia+kstep ib=ia+nsps-1 if(ib.gt.npts) exit c(1:nsps)=fac*cdat(ia:ib) c(nsps+1:nfft)=0. call four2a(c,nfft,1,-1,1) do i=1,nfft s0(i,j)=real(c(i))**2 + aimag(c(i))**2 savg(i)=savg(i) + s0(i,j) !Accumulate avg spectrum enddo enddo jsym=4*nsym savg=savg/jsym do i=1,71 !Compute spectrum in dB, for plot if(mode4.eq.1) then psavg(i)=2*db(savg(4*i)+savg(4*i-1)+savg(4*i-2)+savg(4*i-3)) + 1.0 else psavg(i)=2*db(savg(2*i)+savg(2*i-1)) + 7.0 endif enddo do i=1,nfft !Normalize the symbol spectra fac=1.0/savg(i) if(i.lt.11) fac=1.0/savg(11) do j=1,jsym s0(i,j)=fac*s0(i,j) enddo enddo nfold=jsym/96 jb=96*nfold ttot=npts/fsample !Length of record (s) df1=df/ttot !Step size for f1=fdot idf1=-25.0/df1 idf2=5.0/df1 if(nafc.eq.0) then idf1=0 idf2=0 else if(mod(-idf1,2).eq.1) then idf1=idf1-1 endif dts4=nsps/(4.0*fsample) xsyncbest=0. do idf=idf1,idf2 !Loop over fdot fs0=0. do j=1,jb !Fold s0 into fs0, modulo 4*nblk k=mod(j-1,4*nblk)+1 ii=nint(idf*float(j-jb/2)/float(jb)) ia=max(1-ii,1) ib=min(nfft-ii,nfft) do i=ia,ib fs0(i,k)=fs0(i,k) + s0(i+ii,j) enddo enddo ref=nfold*4 i0=27 ia=i0-400/df !Set search range in frequency... ib=i0+400/df if(mode4.eq.1) then i0=95 ia=i0-600/df !Set search range in frequency... ib=i0+600/df endif if(nfreeze.eq.1) then ia=i0+(mousedf-dftolerance)/df ib=i0+(mousedf+dftolerance)/df endif if(ia.lt.1) ia=1 if(ib.gt.nfft-3) ib=nfft-3 smax=0. ipk=1 jpk=1 do j=0,4*nblk-1 !Find sync pattern: lags 0-95 do i=ia,ib !Search specified freq range ss=0. do n=1,4 !Sum over 4 sync tones k=j+4*n-3 if(k.gt.96) k=k-96 ss=ss + fs0(i+2*icos(n),k) enddo if(ss.gt.smax) then smax=ss ipk=i !Frequency offset, DF jpk=j+1 !Time offset, DT endif enddo enddo xsync=smax/ref - 1.0 if(nfold.lt.26) xsync=xsync * sqrt(nfold/26.0) xsync=xsync-0.5 !Empirical nsig=nint(db(smax/ref - 1.0) -15.0) if(mode4.eq.1) nsig=nsig-5 if(nsig.lt.-20 .or. xsync.lt.1.0) nsig=-20 ndf0=nint(df*(ipk-i0)) smax=0. ja=jpk+16 if(ja.gt.4*nblk) ja=ja-4*nblk jj=jpk+20 if(jj.gt.4*nblk) jj=jj-4*nblk do i=ipk,ipk+60,2 !Find User's message length ss=fs0(i,ja) + fs0(i+10,jj) if(ss.gt.smax) then smax=ss ipk2=i endif enddo msglen=(ipk2-ipk)/2 if(msglen.lt.2 .or. msglen.gt.29) msglen=3 if(xsync.ge.xsyncbest) then xsyncbest=xsync nsigbest=nsig ndf0best=ndf0 msglenbest=msglen ipkbest=ipk jpkbest=jpk idfbest=idf endif enddo xsync=xsyncbest nsig=nsigbest ndf0=ndf0best msglen=msglenbest ipk=ipkbest jpk=jpkbest idf=idfbest if(nafc.eq.0) idf=0 return end subroutine synciscat wsjt_9.3.r2792/spec.f900000664000175000017500000001243211461555650012660 0ustar jtnjtnsubroutine spec(brightness,contrast,logmap,ngain,nspeed,a) !f2py threadsafe ! Called by SpecJT in its TopLevel Python code. ! Probably should use the "!f2py intent(...)" structure here. ! Input: integer brightness,contrast !Display parameters integer ngain !Digital gain for input audio integer nspeed !Scrolling speed index ! Output: integer*2 a(225000) !Pixel values for 750 x 300 array real a0(225000) !Save the last 300 spectra integer nstep(5) integer b0,c0 real x(4096) !Data for FFT complex c(0:2048) !Complex spectrum real ss(2048) !Power spectrum logical first include 'gcom1.f90' include 'gcom2.f90' include 'gcom3.f90' include 'gcom4.f90' data jz/0/ !Number of spectral lines available data nstep/15,10,5,2,1/ !Integration limits data first/.true./ equivalence (x,c) save call cs_lock('spec') if(first) then istep=2205 nfft=4096 nh=nfft/2 do i=1,nh ss(i)=0. enddo df=11025.0/nfft fac=2.0/10000. nsum=0 iread=0 first=.false. b0=-999 c0=-999 logmap0=-999 nspeed0=-999 nx=0 ncall=0 jza=0 rms=0. endif nmode=1 if(mode(1:4).eq.'JT65') nmode=2 if(mode(1:4).eq.'Echo') nmode=3 if(mode(1:2).eq.'CW') nmode=5 if(mode(1:3).eq.'JT4') nmode=7 if(mode(1:4).eq.'JTMS') nmode=8 if(mode(1:5).eq.'ISCAT') nmode=9 nlines=0 newdat=0 npts=iwrite-iread if(ndiskdat.eq.1) then npts=jzc/2048 npts=2048*npts kread=0 if(nspeed.ge.6) then call hscroll(a,nx) nx=0 endif endif if(npts.lt.0) npts=npts+nmax if(npts.lt.nfft) go to 900 !Not enough data available 10 continue if(ndiskdat.eq.1) then ! Data read from disk k=kread do i=1,nfft k=k+1 x(i)=0.4*d2c(k) enddo kread=kread+istep !Update pointer else ! Real-time data dgain=2.0*10.0**(0.015*ngain) k=iread do i=1,nfft k=k+1 if(k.gt.nmax) k=k-nmax x(i)=0.5*dgain*y1(k) enddo iread=iread+istep !Update pointer if(iread.gt.nmax) iread=iread-nmax endif sum=0. !Get ave, rms of data do i=1,nfft sum=sum+x(i) enddo ave=sum/nfft sq=0. do i=1,nfft d=x(i)-ave sq=sq+d*d x(i)=fac*d enddo rms1=sqrt(sq/nfft) if(rms.eq.0) rms=rms1 rms=0.25*rms1 + 0.75*rms if(ndiskdat.eq.0) then level=0 !Compute S-meter level if(rms.gt.0.0) then !Scale 0-100, steps = 0.4 dB dB=20.0*log10(rms/800.0) level=50 + 2.5*dB if(level.lt.0) level=0 if(level.gt.100) level=100 endif endif if(nspeed.ge.6) then call horizspec(x,brightness,contrast,a) ncall=Mod(ncall+1,5) if(ncall.eq.1 .or. nspeed.eq.7) newdat=1 if(ndiskdat.eq.1) then npts=jzc-kread else npts=iwrite-iread if(npts.lt.0) npts=npts+nmax endif if(npts.ge.4096) go to 10 go to 900 endif call xfft2(x,nfft) do i=1,nh !Accumulate power spectrum ss(i)=ss(i) + real(c(i))**2 + aimag(c(i))**2 enddo nsum=nsum+1 if(nsum.ge.nstep(nspeed)) then !Integrate for specified time nlines=nlines+1 do i=225000,751,-1 !Move spectra up one row a0(i)=a0(i-750) ! (will be "down" on display) enddo if(ndiskdat.eq.1 .and. nlines.eq.1) then do i=1,750 a0(i)=255 enddo do i=225000,751,-1 a0(i)=a0(i-750) enddo endif if(nflat.gt.0) call flat2(ss,nh,nsum) ia=1 if(nfrange.eq.2000) then i0=182 + nint((nfmid-1500)/df) if(i0.lt.0) ia=1-i0 else if(nfrange.eq.4000) then i0=nint(nfmid/df - 752.0) ! if(i0.lt.0) ia=1-i0/2 if(i0.lt.0) ia=2-i0/2 endif do i=ia,750 !Insert new data in top row if(nfrange.eq.2000) then a0(i)=5*ss(i+i0)/nsum else if(nfrange.eq.4000) then a0(i)=(5.0/nsum) * max(ss(2*i+i0),ss(2*i+i0-1)) endif enddo nsum=0 newdat=1 !Flag for new spectrum available do i=1,nh !Zero the accumulating array ss(i)=0. enddo if(jz.lt.300) jz=jz+1 endif if(ndiskdat.eq.1) then npts=jzc-kread else npts=iwrite-iread if(npts.lt.0) npts=npts+nmax endif if(npts.ge.4096) go to 10 ! Compute pixel values iz=750 ! logmap=0 if(brightness.ne.b0 .or. contrast.ne.c0 .or. logmap.ne.logmap0 .or. & nspeed.ne.nspeed0 .or. nlines.gt.1) then iz=225000 gain=40*sqrt(nstep(nspeed)/5.0) * 5.0**(0.01*contrast) gamma=1.3 + 0.01*contrast offset=(brightness+64.0)/2 b0=brightness c0=contrast logmap0=logmap nspeed0=nspeed endif do i=1,iz n=0 if(a0(i).gt.0.0 .and. logmap.eq.1) n=gain*log10(0.001*a0(i)) + offset + 20 if(a0(i).gt.0.0 .and. logmap.eq.0) n=(0.01*a0(i))**gamma + offset n=min(252,max(0,n)) a(i)=n enddo 900 continue if(ndiskdat.eq.1) ndecoding=4 call cs_unlock return end subroutine spec wsjt_9.3.r2792/Wsjt_Howto_Mandriva_2007_Free.html0000664000175000017500000002766211223071501017630 0ustar jtnjtn Wsjt_Howto_Mandriva_2007_Free.html
Compiling WSJT596r309 on Mandriva 2007 Free

by Harry Popov LZ1BB
version 0.2.1
       / thanks DL3LST, G8JMV, K1JT, VK3SB /


I did fresh Install of Mandriva 2007 Free. Used downloaded 4 ISO disks available from Mandriva for free download. It is very important to install all Development packages while installing Mandriva. They are too numerous to collect them later. If one missed this it is better to use Disk 1 and when prompted - chose Upgrade Mandriva 2007. Check Development tools. They will be installed.

Next step is to chose a ftp server which has all the rest packages of Mandriva 2007. They are about 10Gb so impossible to have all them on CDs. Use "easy urpmi" or "Configure your computer" for that.

Next install one by one listed below packages. To satisfy dependences many of them will need more additional packages but URPMI /or RPMDRAKE/ will do the job. Just say "Yes" on all URPMI /or RPMDRAKE/ requests.

gcc-gfortran-4.1.1-3mdk
libtcl8.4-devel-8.4.13-1mdk
libtk8.4-devel-8.4.13-1mdk
libalsa2-devel-1.0.12-2mdv2007.0
libpython2.4-devel-2.4.3-3mdv2007.0
python-imaging-1.1.4-10mdk.i586
python-imaging-devel-1.1.4-10mdk
python-numeric-devel-24.2-2mdv2007.0
libsamplerate0-devel-0.1.2-2mdk
libf2c0-3.3.6-3mdk

Create as root symbolic link:
ln -s /usr/lib/libg2c.so.0.0.0 /usr/lib/libg2c.so

Next you need some more packages. As we do not have RPMs for them you have to download and install by yourself:

---------------------------------------------------------
F2PY  ( Fortran to Python )

Download: http://cens.ioc.ee/projects/f2py2e/2.x/F2PY-2-latest.tar.gz
untar, then as root:
python setup.py install

---------------------------------------------------------
Scipy_Distutils

Download:  http://cens.ioc.ee/projects/f2py2e/2.x/scipy_distutils-latest.tar.gz
untar, then as root:
python setup.py install

---------------------------------------------------------

Download WSJT source code:

http://lz1bb.bfra.org/wsjt/wsjt596r309.tar.gz

As ordinary user:

tar xzvf wsjt596r309.tar.gz
cd wsjt596r309
./configure --enable-portaudio
make clean; make

That is all!! Next just start it. IMPORTANT!!! Alwais cd to wsjt596r309 folder before running wsjt:

cd wsjt596r309
python -O wsjt.py

I use simple script to start WSJT. Useful in case of bad memory like mine:

Create a text file,called wsjt, and copy/paste the following:

--------Copy bellow me------------
#!/bin/sh
#
# wsjt     This shell script starts WSJT596r309
cd ~/wsjt596r309
python -O wsjt.py
--------Copy above me------------

Save file in your home folder and make it executable:
chmod +x wsjt

If you like you could make symbolic link as root:

ln -s ~/wsjt /usr/bin/wsjt

Now you could start WSJT by simply typing wsjt in terminal.



Be aware! Until today, October 24th 2006, the official link for WSJT archive contains broken package. So use the link above for downloading WSJT596r309.



I have problems while using default Audio Device /dev/dsp/ of WSJT program. Problems are:

1. Bad decode on FSK441
2. Programs crashes every 8 of 10 times when try to transmit on JT65. The last was confirmed by F1EBK too.

These two problems might be connected with our local hardware but might be /dev/dsp fault. If you encounter the same behaviour just use direct card access. Usually Audio Device 1 from WSJT Setup>Options.

Some modern sound cards do not suport sample rate 11025 requested by WSJT . If you have such card you will receive errors during direct access try. If so use the clue suggested by Hamish Moffatt VK3SB:

1. Create in your home directory empty hidden file with name:
.asoundrc

2. Copy in it the following code:

pcm.radio {
        type hw
        card 0
        device 0
}
pcm_slave.radioslave {
        pcm radio
        rate 48000
}
pcm.radioconv {
        type rate
        slave radioslave
}


3. Use appropriate Audio Device number for device called "radioconv".


Have fun!

73, Harry LZ1BB wsjt_9.3.r2792/demod64a.f0000664000175000017500000000363611756463535013175 0ustar jtnjtn subroutine demod64a(signal,nadd,mrsym,mrprob, + mr2sym,mr2prob,ntest,nlow) C Demodulate the 64-bin spectra for each of 63 symbols in a frame. C Parameters C nadd number of spectra already summed C mrsym most reliable symbol value C mr2sym second most likely symbol value C mrprob probability that mrsym was the transmitted value C mr2prob probability that mr2sym was the transmitted value implicit real*8 (a-h,o-z) real*4 signal(64,63) real*8 fs(64) integer mrsym(63),mrprob(63),mr2sym(63),mr2prob(63) common/mrscom/ mrs(63),mrs2(63) afac=1.1 * float(nadd)**0.64 scale=255.999 C Compute average spectral value sum=0. do j=1,63 do i=1,64 sum=sum+signal(i,j) enddo enddo ave=sum/(64.*63.) i1=1 !Silence warning i2=1 C Compute probabilities for most reliable symbol values do j=1,63 s1=-1.e30 fsum=0. do i=1,64 x=min(afac*signal(i,j)/ave,50.d0) fs(i)=exp(x) fsum=fsum+fs(i) if(signal(i,j).gt.s1) then s1=signal(i,j) i1=i !Most reliable endif enddo s2=-1.e30 do i=1,64 if(i.ne.i1 .and. signal(i,j).gt.s2) then s2=signal(i,j) i2=i !Second most reliable endif enddo p1=fs(i1)/fsum !Normalized probabilities p2=fs(i2)/fsum mrsym(j)=i1-1 mr2sym(j)=i2-1 mrprob(j)=scale*p1 mr2prob(j)=scale*p2 mrs(j)=i1 mrs2(j)=i2 enddo sum=0. nlow=0 do j=1,63 sum=sum+mrprob(j) if(mrprob(j).le.5) nlow=nlow+1 enddo ntest=sum/63 return end wsjt_9.3.r2792/unpackmsg.f0000664000175000017500000000525611761710021013537 0ustar jtnjtn subroutine unpackmsg(dat,msg) parameter (NBASE=37*36*10*27*27*27) parameter (NGBASE=180*180) integer dat(12) character c1*12,c2*12,grid*4,msg*22,grid6*6,psfx*4,junk2*4 logical cqnnn cqnnn=.false. nc1=ishft(dat(1),22) + ishft(dat(2),16) + ishft(dat(3),10)+ + ishft(dat(4),4) + iand(ishft(dat(5),-2),15) nc2=ishft(iand(dat(5),3),26) + ishft(dat(6),20) + + ishft(dat(7),14) + ishft(dat(8),8) + ishft(dat(9),2) + + iand(ishft(dat(10),-4),3) ng=ishft(iand(dat(10),15),12) + ishft(dat(11),6) + dat(12) if(ng.gt.32768) then call unpacktext(nc1,nc2,ng,msg) go to 100 endif call unpackcall(nc1,c1,iv2,psfx) if(iv2.eq.0) then ! This is an "original JT65" message if(nc1.eq.NBASE+1) c1='CQ ' if(nc1.eq.NBASE+2) c1='QRZ ' nfreq=nc1-NBASE-3 if(nfreq.ge.0 .and. nfreq.le.999) then write(c1,1002) nfreq 1002 format('CQ ',i3.3) cqnnn=.true. endif endif call unpackcall(nc2,c2,junk1,junk2) call unpackgrid(ng,grid) if(iv2.gt.0) then ! This is a JT65v2 message n1=len_trim(psfx) n2=len_trim(c2) if(iv2.eq.1) msg='CQ '//psfx(:n1)//'/'//c2(:n2)//' '//grid if(iv2.eq.2) msg='QRZ '//psfx(:n1)//'/'//c2(:n2)//' '//grid if(iv2.eq.3) msg='DE '//psfx(:n1)//'/'//c2(:n2)//' '//grid if(iv2.eq.4) msg='CQ '//c2(:n2)//'/'//psfx(:n1)//' '//grid if(iv2.eq.5) msg='QRZ '//c2(:n2)//'/'//psfx(:n1)//' '//grid if(iv2.eq.6) msg='DE '//c2(:n2)//'/'//psfx(:n1)//' '//grid if(iv2.eq.7) msg='DE '//c2(:n2)//' '//grid go to 100 else endif grid6=grid//'ma' call grid2k(grid6,k) if(k.ge.1 .and. k.le.450) call getpfx2(k,c1) if(k.ge.451 .and. k.le.900) call getpfx2(k,c2) i=index(c1,char(0)) if(i.ge.3) c1=c1(1:i-1)//' ' i=index(c2,char(0)) if(i.ge.3) c2=c2(1:i-1)//' ' msg=' ' j=0 if(cqnnn) then msg=c1//' ' j=7 !### ??? ### go to 10 endif do i=1,12 j=j+1 msg(j:j)=c1(i:i) if(c1(i:i).eq.' ') go to 10 enddo j=j+1 msg(j:j)=' ' 10 do i=1,12 if(j.le.21) j=j+1 msg(j:j)=c2(i:i) if(c2(i:i).eq.' ') go to 20 enddo if(j.le.21) j=j+1 msg(j:j)=' ' 20 if(k.eq.0) then do i=1,4 if(j.le.21) j=j+1 msg(j:j)=grid(i:i) enddo if(j.le.21) j=j+1 msg(j:j)=' ' endif 100 return end wsjt_9.3.r2792/decode2.f900000664000175000017500000000712011554672346013236 0ustar jtnjtnsubroutine decode2 ! Get data and parameters from gcom, then call the decoders character fnamex*24 include 'gcom1.f90' include 'gcom2.f90' include 'gcom3.f90' include 'gcom4.f90' ! ndecoding data Action !-------------------------------------- ! 0 Idle ! 1 d2a Standard decode, full file ! 2 y1 Mouse pick, top half ! 3 y1 Mouse pick, bottom half ! 4 d2c Decode recorded file ! 5 d2a Mouse pick, main window lenpick=22050 !Length of FSK441 mouse-picked region istart=1.0 + 11025*0.001*npingtime - lenpick/2 if(npingtime2.ge.npingtime+1000) then lenpick=11025*0.001*(npingtime2-npingtime) istart=1.0 + 11025*0.001*npingtime endif if(istart.lt.2) istart=2 if(ndecoding.eq.1) then ! Normal decoding at end of Rx period (or at t=53s in JT65) istart=1 call decode3(d2a,jza,istart,fnamea) else if(ndecoding.eq.2) then ! Mouse pick, top half of waterfall if(mode(1:5).eq.'ISCAT' .and. MouseButton.eq.3) then lenpick=istart istart=1 endif ! The following is empirical: k=2048*ibuf0 + istart - 11025*mod(tbuf(ibuf0),dble(trperiod)) -3850 if(k.le.0) k=k+NRxMax if(k.gt.NrxMax) k=k-NRxMax nt=ntime/86400 nt=86400*nt + tbuf(ibuf0) if(receiving.eq.0) nt=nt-trperiod call get_fname(hiscall,iyr,imo,ida,nt,lauto,fnamex) do i=1,lenpick k=k+1 if(k.gt.NrxMax) k=k-NRxMax d2b(i)=dgain*y1(k) enddo call decode3(d2b,lenpick,istart,fnamex) else if(ndecoding.eq.3) then !Mouse pick, bottom half of waterfall if(mode(1:5).eq.'ISCAT' .and. MouseButton.eq.3) then lenpick=istart istart=1 endif ib0=ibuf0-161 if(lauto.eq.1 .and. mute.eq.0 .and. transmitting.eq.1) ib0=ibuf0-323 if(ib0.lt.1) ib0=ib0+1024 k=2048*ib0 + istart - 11025*mod(tbuf(ib0),dble(trperiod)) - 3850 if(k.le.0) k=k+NRxMax if(k.gt.NrxMax) k=k-NRxMax nt=ntime/86400 nt=86400*nt + tbuf(ib0) call get_fname(hiscall,iyr,imo,ida,nt,lauto,fnamex) do i=1,lenpick k=k+1 if(k.gt.NrxMax) k=k-NRxMax d2b(i)=dgain*y1(k) enddo call decode3(d2b,lenpick,istart,fnamex) else if(ndecoding.eq.4) then ! Recorded file jzz=jzc if(mousebutton.eq.0) istart=1 if(mousebutton.gt.0) then if(mode(1:5).eq.'ISCAT' .and. abs(npingtime2-npingtime).lt.1000) & lenpick=lenpick*2.24 if(mousebutton.eq.1 .or. (mode.eq.'FSK441' .and. & mousebutton.eq.3)) jzz=lenpick if(abs(npingtime2-npingtime).lt.1000) then istart=istart + 3300 - jzz/2 if(istart.lt.2) istart=2 if(istart+jzz.gt.jzc) istart=jzc-jzz endif endif if(mode(1:5).eq.'ISCAT' .and. mousebutton.eq.3) then lenpick=11.025*npingtime if(lenpick.gt.jzz) then lenpick=jzz npingtime=jzz/11.025 endif if(lenpick.lt.24586) lenpick=24586 istart=1 call decode3(d2c,lenpick,istart,filename) else call decode3(d2c(istart),jzz,istart,filename) endif else if(ndecoding.eq.5) then ! Mouse pick, main window (but not from recorded file) istart=istart - 1512 if(istart.lt.2) istart=2 if(istart+lenpick.gt.jza) istart=jza-lenpick if(mode(1:5).eq.'ISCAT' .and. MouseButton.eq.3) then lenpick=istart istart=2 call decode3(d2a,lenpick,istart,fnamea) else call decode3(d2a(istart),lenpick,istart,fnamea) endif endif fnameb=fnamea return end subroutine decode2 wsjt_9.3.r2792/pfxdump.f0000664000175000017500000000060111231655622013226 0ustar jtnjtn subroutine pfxdump(fname) character*(*) fname include 'pfx.f' open(20,file=fname,status='unknown') write(20,1001) 1001 format( + 'Supported Suffixes: /0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /A /P') write(20,1002) 1002 format(/'Supported Add-On DXCC Prefixes:') write(20,1003) pfx 1003 format(15a6) close(20) return end wsjt_9.3.r2792/spec2d65.f0000664000175000017500000000527511563244773013123 0ustar jtnjtn subroutine spec2d65(dat,jz,nsym,flip,istart,f0, + ftrack,nafc,mode65,nfast,s2) C Computes the spectrum for each of 126 symbols. C NB: At this point, istart, f0, and ftrack are supposedly known. C The JT65 signal has Sync bin + 2 guard bins + 64 data bins = 67 bins. C We add 5 extra bins at top and bottom for drift, making 77 bins in all. parameter (NMAX=2048) !Max length of FFTs real dat(jz) !Raw data real s2(77,126) !Spectra of all symbols real s(77) real ref(77) real ps(77) real x(NMAX) real ftrack(126) real*8 pha,dpha,twopi complex cx(NMAX) include 'prcom.h' equivalence (x,cx) data twopi/6.28318530718d0/ save C Peak up in frequency and time, and compute ftrack. call ftpeak65(dat,jz,nfast,istart,f0,flip,pr,nafc,ftrack) nfft=2048/mode65 !Size of FFTs mz=mode65 if(nfast.eq.2) mz=mode65/2 dt=2.0/11025.0 df=0.5*11025.0/nfft call zero(ps,77) k=istart-nfft C NB: this could be done starting with array c3, in ftpeak65, instead C of the dat() array. Would save some time this way ... do j=1,nsym call zero(s,77) do m=1,mz k=k+nfft if(k.ge.1 .and. k.le.(jz-nfft)) then C Mix sync tone down to f=5*df (==> bin 6 of array cx, after FFT) dpha=twopi*dt*(f0 + ftrack(j) - 5.0*df) pha=0.0 do i=1,nfft pha=pha+dpha cx(i)=dat(k-1+i)*cmplx(cos(pha),-sin(pha)) enddo call four2a(cx,nfft,1,-1,1) do i=1,77 s(i)=s(i) + real(cx(i))**2 + aimag(cx(i))**2 enddo else call zero(s,77) endif enddo call move(s,s2(1,j),77) call add(ps,s,ps,77) enddo C Flatten the spectra by dividing through by the average of the C "sync on" spectra, with the sync tone explicitly deleted. nref=nsym/2 do i=1,77 C First we sum all the sync-on spectra: ref(i)=0. do j=1,nsym if(flip*pr(j).gt.0.0) ref(i)=ref(i)+s2(i,j) enddo ref(i)=ref(i)/nref !Normalize enddo C Remove the sync tone itself: base=0.25*(ref(1)+ref(2)+ref(10)+ref(11)) do i=3,9 ref(i)=base enddo C Now flatten the spectra for all the data symbols: do i=1,77 fac=1.0/ref(i) do j=1,nsym s2(i,j)=fac*s2(i,j) if(s2(i,j).eq.0.0) s2(i,j)=1.0 !### To fix problem in mfskprob enddo enddo return end wsjt_9.3.r2792/gcom4.f900000664000175000017500000000101511461555650012732 0ustar jtnjtn! Variable Purpose Set in Thread !------------------------------------------------------------------------- character addpfx*8 !Add-on prefix, as in ZA/PA2CHR GUI integer*2 d2c !Rx data recovered from recorded file GUI integer jzc !Length of data available in d2c GUI character filename*24 !Name of wave file read from disk GUI parameter (ND2CMAX=120*11025) common/gcom4/addpfx,d2c(ND2CMAX),jzc,filename !### volatile /gcom4/ wsjt_9.3.r2792/decodems.f900000664000175000017500000000177411461555650013520 0ustar jtnjtnsubroutine decodems(cdat,npts,cw,i1,nchar,s2,msg) ! DF snd sync have been established, now decode the message complex cdat(npts) complex cw(56,0:63) !Complex waveforms for codewords real s2(0:63,400) character msg*400 complex z,zmax character cc*64 ! 1 2 3 4 5 6 ! 0123456789012345678901234567890123456789012345678901234567890123 data cc/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ./?- _ @'/ msg=' ' do j=1,nchar !Find best match for each character ia=i1 + (j-1)*56 smax=0. do k=0,40 kk=k if(k.eq.40) kk=57 z=0. do i=1,56 z=z + cdat(ia+i)*conjg(cw(i,kk)) enddo ss=abs(z) s2(k,j)=ss if(ss.gt.smax) then smax=ss zmax=z kpk=kk endif enddo msg(j:j)=cc(kpk+1:kpk+1) if(kpk.eq.57) msg(j:j)=' ' enddo return end subroutine decodems wsjt_9.3.r2792/cutil.c0000664000175000017500000000313511022605713012657 0ustar jtnjtn#include #include #include #include #include #include #ifdef STARNIX #include #include #include #else #include "sleep.h" #include "timeval.h" #endif /* FORTRAN: fd = close(filedes) */ int close_(int *filedes) { return(close(*filedes)); } /* FORTRAN: fd = open(filnam,mode) */ int open_(char filnam[], int *mode) { return(open(filnam,*mode)); } /* FORTRAN: fd = creat(filnam,mode) */ int creat_(char filnam[],int *mode) { return(creat(filnam,*mode)); } /* FORTRAN: nread = read(fd,buf,n) */ int read_(int *fd, char buf[], int *n) { return(read(*fd,buf,*n)); } /* FORTRAN: nwrt = write(fd,buf,n) */ int write_(int *fd, char buf[], int *n) { return(write(*fd,buf,*n)); } /* FORTRAN: ns = lseek(fd,offset,origin) */ int lseek_(int *fd,int *offset, int *origin) { return(lseek(*fd,*offset,*origin)); } /* times(2) */ //int times_(struct tms *buf) //{ // return (times(buf)); //} /* ioperm(2) */ //ioperm_(from,num,turn_on) //unsigned long *from,*num,*turn_on; //{ // return (ioperm(*from,*num,*turn_on)); // return (i386_get_ioperm(*from,*num,*turn_on)); //} /* usleep(3) */ int usleep_(unsigned long *microsec) { usleep(*microsec); return(0); } /* returns random numbers between 0 and 32767 to FORTRAN program */ int iran_(int *arg) { return (rand()); return(0); } int exit_(int *n) { printf("\n\n"); exit(*n); } time_t time_(void) { return time(0); } /* hrtime() */ double hrtime_(void) { struct timeval tv; gettimeofday(&tv,NULL); return(tv.tv_sec+1.e-6*tv.tv_usec); } wsjt_9.3.r2792/echogen.f900000664000175000017500000000237711461555650013345 0ustar jtnjtnsubroutine echogen(mode_echo,dither,iwave,nwave,f1) parameter (NMAX=44100) !Length of wave file, 4.0 seconds real dither !Amount to dither f1 integer*2 iwave(NMAX) !Wave file to be generated integer nwave !Length of wave file real f1 !Generated audio frequency real*8 dt,pha,dpha,twopi,f,df integer ic27(27) data ic27/1,3,7,15,2,5,11,23,18,8,17,6,13,27,26,24,20,12,25,22, & 16,4,9,19,10,21,14/ twopi=8*atan(1.d0) dt=1.d0/11025.d0 df=11025.d0/890.d0 if(mode_echo.ne.0) then pha=0.d0 k=0 do j=1,27 f=1500.d0 + (ic27(j)-14)*df dpha=twopi*f*dt do i=1,890 pha=pha+dpha k=k+1 iwave(k)=nint(32767.0*sin(pha)) enddo enddo do i=1,20 pha=pha+dpha k=k+1 iwave(k)=nint(32767.0*sin(pha)) if(abs(iwave(k)).lt.3000) go to 10 enddo 10 iwave(k+1:)=0 f1=1500.0 else call random_number(r) f1=1500 + dither*(r-0.5) !Define the TX frequency dpha=twopi*dt*f1 pha=0. do i=1,NMAX pha=pha+dpha iwave(i)=nint(32767.0*sin(pha)) enddo endif nwave=NMAX return end subroutine echogen wsjt_9.3.r2792/Makefile.MinGW.gf0000664000175000017500000000723111205137770014415 0ustar jtnjtn# Makefile for Windows # !include #Some definitions for Compaq Visual Fortran CC = /mingw/bin/gcc #FC = /mingw/bin/g95 FC = gfortran # FFLAGS = -O2 CFLAGS = -I. -fbounds-check all: JT65code.exe WSJT7.EXE OBJS1 = JT65code.o nchar.o grid2deg.o packmsg.o packtext.o \ packcall.o packgrid.o unpackmsg.o unpacktext.o \ unpackcall.o unpackgrid.o deg2grid.o packdxcc.o \ chkmsg.o getpfx1.o getpfx2.o k2grid.o grid2k.o \ interleave63.o graycode.o set.o igray.o \ init_rs.o encode_rs.o decode_rs.o \ wrapkarn.o JT65code.exe: $(OBJS1) $(FC) $(FFLAGS) -o JT65code.exe $(OBJS1) OBJS2C = init_rs.o encode_rs.o decode_rs.o jtaudio.o fano.o \ tab.o nhash.o F2PYONLY = ftn_init ftn_quit audio_init spec getfile azdist0 astro0 chkt0 SRCS2F90 = a2d.f90 abc441.F90 astro0.F90 audio_init.F90 azdist0.f90 \ blanker.f90 decode1.F90 decode2.f90 decode3.F90 ftn_init.F90 \ ftn_quit.f90 get_fname.F90 getfile.F90 horizspec.f90 hscroll.f90 \ pix2d.f90 pix2d65.f90 rfile.f90 savedata.F90 spec.f90 \ wsjtgen.F90 runqqq.F90 fivehz.F90 msgparms.f90 chkt0.f90 \ genwspr.f90 wqencode.f90 wqdecode.f90 packpfx.f90 unpackpfx.f90 \ packname.f90 unpackname.f90 packtext2.f90 unpacktext2.f90 \ packprop.f90 unpackprop.f90 hash.f90 wsjtwspr.f90 gen64.f90 SRCS2F77 = wsjt1.f avesp2.f bzap.f spec441.f spec2d.f mtdecode.f \ stdecode.f indexx.f s2shape.f flat2.f gen65.f gen24.f entail.f \ genmet.f wsjt24.f sync24.f ps24.f fourt.f xcor24.f decode24.f\ chkmsg.f gen6m.f interleave24.f \ gentone.f syncf0.f syncf1.f synct.f decode6m.f avemsg6m.f \ set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f ping.f \ longx.f peakup.f sync.f detect.f avemsg65.f decode65.f demod64a.f \ encode65.f extract.f chkhist.f flat1.f four2.f gencw.f \ gencwid.f msgtype.f getpfx1.f \ getpfx2.f getsnr.f graycode.f grid2k.f interleave63.f k2grid.f \ limit.f lpf1.f deep65.f morse.f nchar.f packcall.f packgrid.f \ packmsg.f packtext.f setup65.f short65.f slope.f spec2d65.f \ sync65.f unpackcall.f unpackgrid.f unpackmsg.f unpacktext.f \ xcor.f xfft.f xfft2.f wsjt65.f astro.f azdist.f coord.f dcoord.f \ deg2grid.f dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f \ moon2.f MoonDop.f sun.f toxyz.f pfxdump.f \ ftpeak65.f fil651.f fil652.f fil653.f symsync65.f \ rfile2.f encode232.f inter_mept.f pack50.f unpack50.f \ filbig2.F mept162a.f twkfreq.f sync162.f decode162.f \ ps162.f fchisq.f fano232.f ccf2.f wsjt64.f sync64.f SRCS2C = resample.c ptt.c igray.c wrapkarn.c start_portaudio.c \ cutil.c w21.c azelout.c WSJT7.EXE: WsjtMod/Audio.pyd wsjt.spec c:/python25/python c:/python25/pyinstaller-1.3/Build.py wsjt.spec mv wsjt.exe WSJT7.EXE WsjtMod/Audio.pyd: $(OBJS2C) $(SRCS2F90) $(SRCS2F77) $(SRCS2C) c:/python25/python c:/python25/scripts/f2py.py -c -I. \ --quiet --fcompiler=$(FC) \ --opt="-fbounds-check -O2 -DUSE_PORTAUDIO -fno-range-check" \ --compiler=mingw32 \ $(OBJS2C) \ libportaudio.a libfftw3f.a libsamplerate.a libpthreadGC2.a -lwinmm \ -m Audio \ only: $(F2PYONLY) : \ $(SRCS2F90) $(SRCS2F77) $(SRCS2C) mv Audio.pyd WsjtMod/Audio.pyd wsjt.spec: wsjt.py WsjtMod/astro.py WsjtMod/g.py WsjtMod/options.py \ WsjtMod/palettes.py WsjtMod/smeter.py WsjtMod/specjt.py c:/python25/python c:/python25/pyinstaller-1.3/makespec.py --icon \ wsjt.ico --tk --onefile wsjt.py jtaudio.o: jtaudio.c $(CC) $(CFLAGS) -c -DWin32 jtaudio.c init_rs.o: init_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 init_rs.c encode_rs.o: encode_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 encode_rs.c decode_rs.o: decode_rs.c $(CC) $(CFLAGS) -c -DBIGSYM=1 decode_rs.c .PHONY : clean clean: rm *.o JT65code.exe wsjt7.exe WsjtMod/Audio.pyd wsjt_9.3.r2792/dmet_10_-1_3.dat0000664000175000017500000002640011015074716014042 0ustar jtnjtn 0 0.998460 -8.872242 644 602925 1 0.999856 -9.965784 60 602925 2 0.997634 -8.253104 70 42643 3 0.997579 -8.220426 77 45855 4 0.997304 -8.065124 92 49187 5 0.997518 -8.184021 90 52259 6 0.997080 -7.949903 114 56262 7 0.997009 -7.915258 125 60224 8 0.996900 -7.863917 138 64158 9 0.996705 -7.776095 156 68234 10 0.996615 -7.736920 173 73638 11 0.996580 -7.722078 185 77938 12 0.996364 -7.633907 211 83609 13 0.996645 -7.749724 208 89327 14 0.996808 -7.821879 212 95725 15 0.995865 -7.448860 293 102090 16 0.996115 -7.538671 294 109037 17 0.996262 -7.594225 300 115642 18 0.995953 -7.479582 347 123515 19 0.995327 -7.272605 429 132237 20 0.995472 -7.318034 444 141253 21 0.994856 -7.134197 538 150616 22 0.994669 -7.082885 593 160192 23 0.995052 -7.190126 590 171726 24 0.994525 -7.044331 694 182514 25 0.994431 -7.019804 754 194938 26 0.994312 -6.989451 822 208077 27 0.994006 -6.914042 919 220737 28 0.993518 -6.801259 1063 236045 29 0.993221 -6.736843 1180 250532 30 0.993254 -6.743960 1256 267993 31 0.992980 -6.686596 1391 285174 32 0.992864 -6.662932 1509 304308 33 0.992665 -6.623349 1653 324281 34 0.992076 -6.512322 1895 344079 35 0.992048 -6.507266 2025 366390 36 0.991415 -6.396963 2331 390540 37 0.991439 -6.400972 2476 415995 38 0.990973 -6.324881 2776 442294 39 0.990427 -6.240433 3130 470165 40 0.990074 -6.188259 3460 501152 41 0.989961 -6.172013 3720 532736 42 0.989323 -6.083427 4204 565943 43 0.988822 -6.017572 4678 601444 44 0.988489 -5.975313 5120 639121 45 0.988153 -5.934033 5601 679284 46 0.987538 -5.861314 6254 720888 47 0.987122 -5.814171 6881 767441 48 0.986504 -5.746824 7645 813413 49 0.986150 -5.709613 8343 864864 50 0.985760 -5.669756 9124 919804 51 0.984601 -5.557445 10458 974542 52 0.984468 -5.545110 11190 1033782 53 0.983628 -5.469531 12506 1095753 54 0.982927 -5.409438 13844 1162934 55 0.982570 -5.379771 14998 1233925 56 0.981782 -5.316376 16590 1305512 57 0.980815 -5.242204 18528 1384025 58 0.979951 -5.179106 20548 1468353 59 0.978908 -5.106448 22897 1554724 60 0.978130 -5.054569 25131 1645254 61 0.977351 -5.004469 27561 1741816 62 0.976092 -4.927051 30834 1845240 63 0.974915 -4.858332 34164 1947830 64 0.973849 -4.798794 37782 2065492 65 0.973000 -4.753164 41296 2186025 66 0.971857 -4.693922 45416 2305570 67 0.970247 -4.614430 50842 2439934 68 0.969009 -4.556219 55977 2577916 69 0.967748 -4.499323 61611 2725276 70 0.966050 -4.426163 68487 2876247 71 0.964662 -4.369033 75203 3032755 72 0.962668 -4.290835 83924 3201462 73 0.961435 -4.244558 91536 3378718 74 0.959435 -4.172639 101530 3560432 75 0.957147 -4.094594 113237 3755900 76 0.955384 -4.037302 124320 3958123 77 0.953045 -3.964769 137882 4167901 78 0.950829 -3.899341 152341 4394035 79 0.948283 -3.827770 168598 4619424 80 0.945711 -3.759019 186490 4863180 81 0.942850 -3.686354 206645 5113924 82 0.940523 -3.629931 226297 5376785 83 0.937302 -3.555432 250972 5650319 84 0.934010 -3.483245 277642 5932140 85 0.930606 -3.412380 307167 6233667 86 0.927162 -3.344197 338642 6539551 87 0.923292 -3.271427 374705 6861604 88 0.919204 -3.198553 414039 7188027 89 0.914947 -3.126583 457288 7530291 90 0.910225 -3.050958 506779 7893204 91 0.905306 -2.976443 560444 8261428 92 0.900464 -2.906893 617467 8644550 93 0.894901 -2.831175 683168 9040408 94 0.889109 -2.756644 754913 9448829 95 0.883046 -2.682830 832736 9861498 96 0.876384 -2.606195 920887 10293596 97 0.869270 -2.528975 1018540 10738701 98 0.861789 -2.452376 1125302 11192630 99 0.853896 -2.376139 1243334 11666090 100 0.845404 -2.298801 1372803 12136916 101 0.835993 -2.218161 1519003 12616837 102 0.826400 -2.140855 1677584 13119486 103 0.815926 -2.061464 1854253 13625410 104 0.804498 -1.980161 2051889 14139035 105 0.792828 -1.902210 2264278 14662803 106 0.779810 -1.820639 2502657 15178000 107 0.766069 -1.739996 2766483 15715513 108 0.751077 -1.657665 3057665 16236538 109 0.734802 -1.574192 3382382 16760963 110 0.717848 -1.492998 3736720 17299010 111 0.699299 -1.410105 4130677 17824407 112 0.679332 -1.326978 4565240 18341000 113 0.657886 -1.243897 5043643 18846820 114 0.635067 -1.161685 5565089 19335185 115 0.609226 -1.075340 6166786 19822746 116 0.582593 -0.992914 6807300 20288489 117 0.553462 -0.909428 7518821 20726383 118 0.521588 -0.825043 8312106 21139138 119 0.486853 -0.740298 9187067 21507302 120 0.449589 -0.656652 10154305 21860603 121 0.408910 -0.572786 11226721 22170368 122 0.364790 -0.489432 12402655 22421326 123 0.316364 -0.405812 13711341 22619162 124 0.264298 -0.323825 15147698 22771371 125 0.206701 -0.241349 16745350 22843931 126 0.143872 -0.159825 18507029 22843297 127 0.075048 -0.079168 20451843 22759151 128 0.000000 0.000000 22341681 22341681 129 -0.079168 0.075048 22759151 20451843 130 -0.159825 0.143872 22843297 18507029 131 -0.241349 0.206701 22843931 16745350 132 -0.323825 0.264298 22771371 15147698 133 -0.405812 0.316364 22619162 13711341 134 -0.489432 0.364790 22421326 12402655 135 -0.572786 0.408910 22170368 11226721 136 -0.656652 0.449589 21860603 10154305 137 -0.740298 0.486853 21507302 9187067 138 -0.825043 0.521588 21139138 8312106 139 -0.909428 0.553462 20726383 7518821 140 -0.992914 0.582593 20288489 6807300 141 -1.075340 0.609226 19822746 6166786 142 -1.161685 0.635067 19335185 5565089 143 -1.243897 0.657886 18846820 5043643 144 -1.326978 0.679332 18341000 4565240 145 -1.410105 0.699299 17824407 4130677 146 -1.492998 0.717848 17299010 3736720 147 -1.574192 0.734802 16760963 3382382 148 -1.657665 0.751077 16236538 3057665 149 -1.739996 0.766069 15715513 2766483 150 -1.820639 0.779810 15178000 2502657 151 -1.902210 0.792828 14662803 2264278 152 -1.980161 0.804498 14139035 2051889 153 -2.061464 0.815926 13625410 1854253 154 -2.140855 0.826400 13119486 1677584 155 -2.218161 0.835993 12616837 1519003 156 -2.298801 0.845404 12136916 1372803 157 -2.376139 0.853896 11666090 1243334 158 -2.452376 0.861789 11192630 1125302 159 -2.528975 0.869270 10738701 1018540 160 -2.606195 0.876384 10293596 920887 161 -2.682830 0.883046 9861498 832736 162 -2.756644 0.889109 9448829 754913 163 -2.831175 0.894901 9040408 683168 164 -2.906893 0.900464 8644550 617467 165 -2.976443 0.905306 8261428 560444 166 -3.050958 0.910225 7893204 506779 167 -3.126583 0.914947 7530291 457288 168 -3.198553 0.919204 7188027 414039 169 -3.271427 0.923292 6861604 374705 170 -3.344197 0.927162 6539551 338642 171 -3.412380 0.930606 6233667 307167 172 -3.483245 0.934010 5932140 277642 173 -3.555432 0.937302 5650319 250972 174 -3.629931 0.940523 5376785 226297 175 -3.686354 0.942850 5113924 206645 176 -3.759019 0.945711 4863180 186490 177 -3.827770 0.948283 4619424 168598 178 -3.899341 0.950829 4394035 152341 179 -3.964769 0.953045 4167901 137882 180 -4.037302 0.955384 3958123 124320 181 -4.094594 0.957147 3755900 113237 182 -4.172639 0.959435 3560432 101530 183 -4.244558 0.961435 3378718 91536 184 -4.290835 0.962668 3201462 83924 185 -4.369033 0.964662 3032755 75203 186 -4.426163 0.966050 2876247 68487 187 -4.499323 0.967748 2725276 61611 188 -4.556219 0.969009 2577916 55977 189 -4.614430 0.970247 2439934 50842 190 -4.693922 0.971857 2305570 45416 191 -4.753164 0.973000 2186025 41296 192 -4.798794 0.973849 2065492 37782 193 -4.858332 0.974915 1947830 34164 194 -4.927051 0.976092 1845240 30834 195 -5.004469 0.977351 1741816 27561 196 -5.054569 0.978130 1645254 25131 197 -5.106448 0.978908 1554724 22897 198 -5.179106 0.979951 1468353 20548 199 -5.242204 0.980815 1384025 18528 200 -5.316376 0.981782 1305512 16590 201 -5.379771 0.982570 1233925 14998 202 -5.409438 0.982927 1162934 13844 203 -5.469531 0.983628 1095753 12506 204 -5.545110 0.984468 1033782 11190 205 -5.557445 0.984601 974542 10458 206 -5.669756 0.985760 919804 9124 207 -5.709613 0.986150 864864 8343 208 -5.746824 0.986504 813413 7645 209 -5.814171 0.987122 767441 6881 210 -5.861314 0.987538 720888 6254 211 -5.934033 0.988153 679284 5601 212 -5.975313 0.988489 639121 5120 213 -6.017572 0.988822 601444 4678 214 -6.083427 0.989323 565943 4204 215 -6.172013 0.989961 532736 3720 216 -6.188259 0.990074 501152 3460 217 -6.240433 0.990427 470165 3130 218 -6.324881 0.990973 442294 2776 219 -6.400972 0.991439 415995 2476 220 -6.396963 0.991415 390540 2331 221 -6.507266 0.992048 366390 2025 222 -6.512322 0.992076 344079 1895 223 -6.623349 0.992665 324281 1653 224 -6.662932 0.992864 304308 1509 225 -6.686596 0.992980 285174 1391 226 -6.743960 0.993254 267993 1256 227 -6.736843 0.993221 250532 1180 228 -6.801259 0.993518 236045 1063 229 -6.914042 0.994006 220737 919 230 -6.989451 0.994312 208077 822 231 -7.019804 0.994431 194938 754 232 -7.044331 0.994525 182514 694 233 -7.190126 0.995052 171726 590 234 -7.082885 0.994669 160192 593 235 -7.134197 0.994856 150616 538 236 -7.318034 0.995472 141253 444 237 -7.272605 0.995327 132237 429 238 -7.479582 0.995953 123515 347 239 -7.594225 0.996262 115642 300 240 -7.538671 0.996115 109037 294 241 -7.448860 0.995865 102090 293 242 -7.821879 0.996808 95725 212 243 -7.749724 0.996645 89327 208 244 -7.633907 0.996364 83609 211 245 -7.722078 0.996580 77938 185 246 -7.736920 0.996615 73638 173 247 -7.776095 0.996705 68234 156 248 -7.863917 0.996900 64158 138 249 -7.915258 0.997009 60224 125 250 -7.949903 0.997080 56262 114 251 -8.184021 0.997518 52259 90 252 -8.065124 0.997304 49187 92 253 -8.220426 0.997579 45855 77 254 -8.253104 0.997634 42643 70 255 -9.965784 0.999856 602925 60 wsjt_9.3.r2792/set.f0000664000175000017500000000073111015074716012341 0ustar jtnjtn subroutine set(a,y,n) real y(n) do i=1,n y(i)=a enddo return end subroutine move(x,y,n) real x(n),y(n) do i=1,n y(i)=x(i) enddo return end subroutine zero(x,n) real x(n) do i=1,n x(i)=0.0 enddo return end subroutine add(a,b,c,n) real a(n),b(n),c(n) do i=1,n c(i)=a(i)+b(i) enddo return end wsjt_9.3.r2792/unpackpfx.f900000664000175000017500000000146611461555650013732 0ustar jtnjtnsubroutine unpackpfx(ng,call1) character*12 call1 character*3 pfx if(ng.lt.60000) then ! Add-on prefix of 1 to 3 characters n=ng do i=3,1,-1 nc=mod(n,37) if(nc.ge.0 .and. nc.le.9) then pfx(i:i)=char(nc+48) else if(nc.ge.10 .and. nc.le.35) then pfx(i:i)=char(nc+55) else pfx(i:i)=' ' endif n=n/37 enddo call1=pfx//'/'//call1 if(call1(1:1).eq.' ') call1=call1(2:) if(call1(1:1).eq.' ') call1=call1(2:) else ! Add-on suffix, one character i1=index(call1,' ') nc=ng-60000 if(nc.ge.0 .and. nc.le.9) then call1=call1(:i1-1)//'/'//char(nc+48) else if(nc.ge.10 .and. nc.le.35) then call1=call1(:i1-1)//'/'//char(nc+55) endif endif return end subroutine unpackpfx wsjt_9.3.r2792/a2d.f900000664000175000017500000000141611204555747012376 0ustar jtnjtnsubroutine a2d(iarg) ! Start the PortAudio streams for audio input and output. include 'gcom1.f90' include 'gcom2.f90' ! This call does not normally return, as the background portion of ! JTaudio goes into a test-and-sleep loop. idevin=iarg !Silence compiler warning idevin=ndevin idevout=ndevout call padevsub(idevin,idevout) ierr=jtaudio(idevin,idevout,y1,y2,NMAX,iwrite,iwave,nwave, & 11025,NSPB,TRPeriod,TxOK,ndebug,Transmitting, & Tsec,ngo,nmode,tbuf,ibuf,ndsec) if(ierr.ne.0) then write(*,1005) ierr 1005 format('Error ',i2,' in JTaudio, you will only be able to work offline.') else write(*,1006) 1006 format('Audio streams terminated normally.') endif return end subroutine a2d wsjt_9.3.r2792/lpf1.f0000664000175000017500000000264411015074716012415 0ustar jtnjtn subroutine lpf1(dat,jz,nz,mousedf,mousedf2) parameter (NMAX=1024*1024) parameter (NMAXH=NMAX) real dat(jz),x(NMAX) complex c(0:NMAXH) equivalence (x,c) C Find FFT length xn=log(float(jz))/log(2.0) n=xn if((xn-n).gt.0.) n=n+1 nfft=2**n nh=nfft/2 C Load data into real array x; pad with zeros up to nfft. do i=1,jz x(i)=dat(i) enddo if(nfft.gt.jz) call zero(x(jz+1),nfft-jz) C Do the FFT call xfft(x,nfft) df=11025.0/nfft ia=70/df do i=0,ia c(i)=0. enddo ia=5000.0/df do i=ia,nh c(i)=0. enddo C See if frequency needs to be shifted: ndf=0 if(mousedf.lt.-600) ndf=-670 if(mousedf.gt.600) ndf=1000 if(mousedf.gt.1600) ndf=2000 if(mousedf.gt.2600) ndf=3000 if(ndf.ne.0) then C Shift frequency up or down by ndf Hz: i0=nint(ndf/df) if(i0.lt.0) then do i=nh,-i0,-1 c(i)=c(i+i0) enddo do i=0,-i0-1 c(i)=0. enddo else do i=0,nh-i0 c(i)=c(i+i0) enddo endif endif mousedf2=mousedf-ndf !Adjust mousedf call four2a(c,nh,1,1,-1) !Return to time domain fac=1.0/nfft nz=jz/2 do i=1,nz dat(i)=fac*x(i) enddo return end wsjt_9.3.r2792/BUGS0000664000175000017500000000752011022557451012065 0ustar jtnjtn$Id:$ Please make sure you have ulimit -c not set to 0, if it is set to 0 we will not get a core file and that makes our debugging job harder. i.e. ulimit -c unlimited please. If you have a problem we need the following: 1) The name of the OS, distribution 2) What mode wsjt was in, what were you doing? Does it just immediately core when you run it? 3) What version of g95 and/or gfortran you have? Sending a copy of the config.log would tell us all that. Heres a sample from a FreeBSD 7.0 system. ... configure:2827: checking for g95 configure:2843: found /usr/local/bin/g95 configure:2854: result: g95 configure:2884: checking for Fortran 77 compiler version configure:2892: g95 --version >&5 G95 (GCC 4.0.3 (g95 0.91!) May 19 2008) Copyright (C) 2002-2005 Free Software Foundation, Inc. ... So now we know which compiler it is. 4) You can get an error in several ways, it can be an error noticed by the python interpreter, it can be a error noticed by the fortran libraries, it can be some other error. Here are several examples. a) I messed up a file on purpose here: diff -u gcom2.f90.orig gcom2.f90 --- gcom2.f90.orig 2008-06-07 11:26:16.000000000 -0400 +++ gcom2.f90 2008-06-07 11:26:20.000000000 -0400 @@ -75,7 +75,7 @@ integer ndf !Measured DF in Hz Decoder real ss1 !Magenta curve for JT65 shorthand msg Decoder real ss2 !Orange curve for JT65 shorthand msg Decoder -character mycall*12 !My call sign GUI +character mycall*1 !My call sign GUI character hiscall*12 !His call sign GUI character hisgrid*6 !His grid locator GUI This results in a run time error in python: ... 0-th dimension must be fixed to 1 but got 12 Exception in Tkinter callback Traceback (most recent call last): File "/usr/local/lib/python2.5/lib-tk/Tkinter.py", line 1403, in __call__ return self.func(*args) File "/usr/local/lib/python2.5/lib-tk/Tkinter.py", line 498, in callit func(*args) File "wsjt.py", line 1831, in update Audio.gcom2.mycall=(options.MyCall.get()+' ')[:12] SystemError: error return without exception set ... b) I changed the size of iwave in gencw.f using gfortran42 diff gencw.f.orig gencw.f 8c8 < integer*2 iwave(NMAX) --- > integer*2 iwave(1) and sent some cw This results in a fortran runtime error as noted by gfortran: Array reference out of bounds for array 'iwave', upper bound of dimension 1 exceeded (in file 'gencw.f', at line 81) c) Same change to iwave in gencw.f using g95 and sent some cw This results in a fortran runtime error as noted by g95: At line 81 of file gencw.f Traceback: (Innermost first) Called from line 0 of file zsh: segmentation fault (core dumped) python wsjt.py If you have a core file, please run gdb bt on it. It might have further information we can use. Don't be afraid to send us the entire log if you don't understand what bits we need. In this case, I have only shown the bit that the developers need to debug this, provided you mentioned the g95 runtime error as well. From the g95 runtime error we know it was in gencw.f at line 81. Sometimes the core does not occur in the fortran code at all, so the gdb bt will tell us that as well. gdb `which python` python.core ... loads of load information elided (gdb) bt #0 0x28250171 in strlen () from /lib/libc.so.7 #1 0x29393581 in _g95_st_printf (format=0x293ad048 "s\n") at runtime/error.c:135 #2 0x293937c6 in _g95_show_locus () at runtime/error.c:278 #3 0x2939390c in _g95_runtime_error ( message=0xbf7c523c "Array element out of bounds: 2 in (1:1), dim=1") at runtime/error.c:323 #4 0x29391b03 in _g95_array_oob2 (value=2, dim=1, lbound=1, ubound=1) at runtime/array.c:604 ... elided Hope this helps. - 73 Diane VA3DB wsjt_9.3.r2792/wsjt.py0000664000175000017500000031373712025702173012752 0ustar jtnjtn#!/usr/bin/env python #----------------------------------------------------------------------- WSJT # $Date: 2012-09-17 13:13:47 -0700 (Mon, 17 Sep 2012) $ $Revision: 2589 $ # from Tkinter import * from tkFileDialog import * from WsjtMod import Pmw import tkMessageBox from WsjtMod import g import os,time from WsjtMod import Audio from math import log10 try: from numpy.oldnumeric import zeros # print "importing from numpy" except: from Numeric import zeros # print "importing from Numeric" import dircache import Image,ImageTk #, ImageDraw from WsjtMod.palettes import colormapblue, colormapgray0, colormapHot, \ colormapAFMHot, colormapgray1, colormapLinrad, Colormap2Palette from types import * import array import thread import webbrowser root = Tk() Version="9.3 r" + "$Rev: 2589 $"[6:-1] print "******************************************************************" print "WSJT Version " + Version + ", by K1JT" print "Revision date: " + \ "$Date: 2012-09-17 13:13:47 -0700 (Mon, 17 Sep 2012) $"[7:-1] print "Run date: " + time.asctime(time.gmtime()) + " UTC" #See if we are running in Windows g.Win32=0 if sys.platform=="win32": g.Win32=1 try: root.option_readfile('wsjtrc.win') except: pass else: try: root.option_readfile('wsjtrc') except: pass root_geom="" #------------------------------------------------------ Global variables appdir=os.getcwd() Audio.gcom2.appdir=(appdir+(' '*80))[:80] Audio.ftn_init() addpfx0="" first=1 g.appdir=appdir isync=0 isync441=1 isync_iscat=1 isync65=1 isync_save=0 itol=5 #Default tol=400 Hz ntol=(10,25,50,100,200,400,600) #List of available tolerances idsec=0 #irdsec=0 lauto=0 ltxdf=0 altmsg=0 cmap0="Linrad" fileopened="" font1='Helvetica' hiscall="" hisgrid="" isec0=-99 jtol=IntVar() k2txb=IntVar() kb8rq=IntVar() loopall=0 mode=StringVar() mode.set("") mrudir=os.getcwd() MyCall0="" nafc=IntVar() naz=0 ndepth=IntVar() nel=0 ncall=0 ncwtrperiod=120 ndmiles=0 ndkm=0 ndebug=IntVar() neme=IntVar() nfreeze=IntVar() nhotaz=0 nhotabetter=0 nmeas=0 nlowbeacon=IntVar() nlowbeacon.set(0) nmonitor=IntVar() nopen=0 nshrx=IntVar() noshjt65=IntVar() noshjt65all=IntVar() nsync=IntVar() nzap=IntVar() qdecode=IntVar() setseq=IntVar() ShOK=IntVar() slabel="Sync " textheight=7 ToRadio0="" tx6alt="" txsnrdb=99. TxFirst=IntVar() xypm=[] green=zeros(500,'f') im=Image.new('P',(500,120)) im.putpalette(Colormap2Palette(colormapLinrad),"RGB") pim=ImageTk.PhotoImage(im) balloon=Pmw.Balloon(root) g.freeze_decode=0 g.mode="" g.ndevin=IntVar() g.ndevout=IntVar() g.DevinName=StringVar() g.DevoutName=StringVar() #------------------------------------------------------ showspecjt def showspecjt(event=NONE): if g.showspecjt==0: g.showspecjt=1 #------------------------------------------------------ restart def restart(): Audio.gcom2.nrestart=1 Audio.gcom2.mantx=1 #------------------------------------------------------ restart2 def restart2(): Audio.gcom2.shok=ShOK.get() Audio.gcom2.nrestart=1 #------------------------------------------------------ toggle_freeze def toggle_freeze(event=NONE): nfreeze.set(1-nfreeze.get()) #------------------------------------------------------ toggle_zap def toggle_zap(event=NONE): nzap.set(1-nzap.get()) #------------------------------------------------------ btx (1-6) def btx1(event=NONE): ntx.set(1) Audio.gcom2.txmsg=(tx1.get()+(' '*28))[:28] Audio.gcom2.ntxreq=1 restart() def btx2(event=NONE): ntx.set(2) Audio.gcom2.txmsg=(tx2.get()+(' '*28))[:28] Audio.gcom2.ntxreq=2 restart() def btx3(event=NONE): ntx.set(3) Audio.gcom2.txmsg=(tx3.get()+(' '*28))[:28] Audio.gcom2.ntxreq=3 restart() def btx4(event=NONE): ntx.set(4) Audio.gcom2.txmsg=(tx4.get()+(' '*28))[:28] Audio.gcom2.ntxreq=4 restart() def btx5(event=NONE): ntx.set(5) Audio.gcom2.txmsg=(tx5.get()+(' '*28))[:28] Audio.gcom2.ntxreq=5 restart() def btx6(event=NONE): ntx.set(6) Audio.gcom2.txmsg=(tx6.get()+(' '*28))[:28] Audio.gcom2.ntxreq=6 restart() #------------------------------------------------------ quit def quit(event=NONE): root.destroy() #------------------------------------------------------ testmsgs def testmsgs(): for m in (tx1, tx2, tx3, tx4, tx5, tx6): m.delete(0,99) tx1.insert(0,"@A") tx2.insert(0,"@B") tx3.insert(0,"@C") tx4.insert(0,"@D") tx5.insert(0,"@1000") tx6.insert(0,"@2000") #------------------------------------------------------ textsize def textsize(): global textheight if textheight <= 9: textheight=21 else: if mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4': textheight=7 else: textheight=9 text.configure(height=textheight) #------------------------------------------------------ logqso def logqso(event=NONE): t=time.strftime("%Y-%b-%d,%H:%M",time.gmtime()) tf=str(g.nfreq) if g.nfreq==2: tf="1.8" if g.nfreq==4: tf="3.5" t=t+","+ToRadio.get()+","+HisGrid.get()+","+tf+","+g.mode+"\n" t2="Please confirm making the following entry in WSJT.LOG:\n\n" + t result=tkMessageBox.askyesno(message=t2) if result: f=open(appdir+'/WSJT.LOG','a') f.write(t) f.close() #------------------------------------------------------ monitor def monitor(event=NONE): bmonitor.configure(bg='green') Audio.gcom2.monitoring=1 #------------------------------------------------------ stopmon def stopmon(event=NONE): global loopall loopall=0 bmonitor.configure(bg='gray85') Audio.gcom2.monitoring=0 #------------------------------------------------------ dbl_click_text def dbl_click_text(event): t=text.get('1.0',END) #Entire contents of text box t1=text.get('1.0',CURRENT) #Contents from start to mouse pointer if mode.get()=='Diana': report.delete(0,END) report.insert(0,'OOO') dbl_click_call(t,t1,'OOO',event) #------------------------------------------------------ dbl_click3_text def dbl_click3_text(event): if mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4': t=text.get('1.0',END) #Entire contents of text box t1=text.get('1.0',CURRENT) #Contents from start to mouse pointer n=t1.rfind("\n") rpt=t1[n+12:n+15] if rpt[0:1] == " ": rpt=rpt[1:] if rpt[:1]=='-' and len(rpt)==2: rpt=rpt[0:1]+'0'+rpt[1:2] dbl_click_call(t,t1,rpt,event) elif mode.get()[:5]=='ISCAT' or mode.get()=='Diana': t=text.get('1.0',END) #Entire contents of text box t1=text.get('1.0',CURRENT) #Contents from start to mouse pointer n=t1.rfind("\n") rpt=t1[n+12:n+15] if mode.get()=='Diana': rpt=t1[n+12:n+16] if rpt[0:1] == " ": rpt=rpt[1:] report.delete(0,END) report.insert(0,rpt) dbl_click_call(t,t1,rpt,event) elif mode.get()=='FSK441' or mode.get()=='JTMS': t=text.get('1.0',END) #Entire contents of text box t1=text.get('1.0',CURRENT) #Contents from start to mouse pointer n=t1.rfind("\n") rpt=t1[n+21:n+23] report.delete(0,END) report.insert(0,rpt) dbl_click_call(t,t1,rpt,event) #------------------------------------------------------ dbl_click_ave def dbl_click_ave(event): t=avetext.get('1.0',END) #Entire contents of text box t1=avetext.get('1.0',CURRENT) #Contents from start to mouse pointer dbl_click_call(t,t1,'OOO',event) #------------------------------------------------------ dbl_click_call def dbl_click_call(t,t1,rpt,event): global hiscall i=len(t1) #Length to mouse pointer i1=t1.rfind(' ')+1 #index of preceding space i2=i1+t[i1:].find(' ') #index of next space hiscall=t[i1:i2] #selected word, assumed as callsign if hiscall[0:1]=='<' and hiscall [i2-i1-1:]=='>': hiscall=hiscall[1:i2-i1-1] ToRadio.delete(0,END) ToRadio.insert(0,hiscall) i3=t1.rfind('\n')+1 #start of selected line if i>6 and i2>i1: try: nsec=60*int(t1[i3+2:i3+4]) + int(t1[i3+4:i3+6]) except: nsec=0 if setseq.get(): TxFirst.set((nsec/Audio.gcom1.trperiod)%2) lookup() GenStdMsgs() if (mode.get()[:4]=='JT65' or \ mode.get()[:3]=='JT4') and rpt <> "OOO": n=tx1.get().rfind(" ") t2=tx1.get()[0:n+1] tx2.delete(0,END) tx2.insert(0,t2+rpt) tx3.delete(0,END) tx3.insert(0,t2+"R"+rpt) tx4.delete(0,END) tx4.insert(0,t2+"RRR") tx5.delete(0,END) tx5.insert(0,t2+"73") if t[i3:i1].find(' CQ ')>=0: ntx.set(1) else: ntx.set(2) if event.num==3 and not lauto: toggleauto() def textkey(event=NONE): text.configure(state=DISABLED) def avetextkey(event=NONE): avetext.configure(state=DISABLED) #------------------------------------------------------ force_decode def force_decode(event=NONE): Audio.gcom2.nforce=1 if event.keysym == 'd': Audio.gcom2.ntx2=0 if event.keysym == 'D': Audio.gcom2.ntx2=1 decode() #------------------------------------------------------ decode def decode(event=NONE): if Audio.gcom2.ndecoding==0: #If already busy, ignore request Audio.gcom2.nagain=1 Audio.gcom2.npingtime=0 #Decode whole record n=1 Audio.gcom2.mousebutton=0 if Audio.gcom2.ndecoding0==4: n=4 Audio.gcom2.ndecoding=n #Standard decode, full file (d2a) #------------------------------------------------------ decode_include def decode_include(event=NONE): global isync,isync_save isync_save=isync isync=-99 Audio.gcom2.minsigdb=-99 decode() #------------------------------------------------------ decode_exclude def decode_exclude(event=NONE): global isync,isync_save isync_save=isync isync=99 Audio.gcom2.minsigdb=99 decode() #------------------------------------------------------ openfile def openfile(event=NONE): global mrudir,fileopened,nopen nopen=1 #Work-around for "click feedthrough" bug try: os.chdir(mrudir) except: pass fname=askopenfilename(filetypes=[("Wave files","*.wav *.WAV")]) if fname: Audio.getfile(fname,len(fname)) if Audio.gcom2.ierr: print 'Error ',Audio.gcom2.ierr, \ 'when trying to read file',fname mrudir=os.path.dirname(fname) fileopened=os.path.basename(fname) os.chdir(appdir) #------------------------------------------------------ opennext def opennext(event=NONE): global ncall,fileopened,loopall,mrudir if fileopened=="" and ncall==0: openfile() ncall=1 else: # Make a list of *.wav files in mrudir la=os.listdir(mrudir) la.sort() lb=[] for i in range(len(la)): j=la[i].find(".wav") + la[i].find(".WAV") if j>0: lb.append(la[i]) for i in range(len(lb)): if lb[i]==fileopened: break if ihc1 and hchc1 and modified==0: stmp.append(NewEntry+"\n") try: f=open(appdir+'/CALL3.TMP','w') f.writelines(stmp) f.close() except: print 'Error in opening or writing to CALL3.TMP' if modified: if os.path.exists("CALL3.OLD"): os.remove("CALL3.OLD") os.rename("CALL3.TXT","CALL3.OLD") os.rename("CALL3.TMP","CALL3.TXT") #------------------------------------------------------ setrpt def setrpt(event): # report.delete(0,END) report.focus_set() #-------------------------------------------------------- clrToRadio def clrToRadio(event): ToRadio.delete(0,END) HisGrid.delete(0,99) ToRadio.focus_set() if kb8rq.get(): ntx.set(6) nfreeze.set(0) #------------------------------------------------------ whois def whois(hiscall): whodat="" try: f=open(appdir+'/CALL3.TXT','r') s=f.readlines() f.close() except: print 'Error when searching CALL3.TXT, or no such file present' s="" for i in range(len(s)): if s[i][:2] != '//': i1=s[i].find(',') if s[i][:i1] == hiscall: return s[i] return "" #------------------------------------------------------ cleartext def cleartext(): f=open(appdir+'/decoded.txt',mode='w') f.truncate(0) #Delete contents of decoded.txt f.close() f=open(appdir+'/decoded.ave',mode='w') f.truncate(0) #Delete contents of decoded.ave f.close() #------------------------------------------------------ ModeFSK441 def ModeFSK441(event=NONE): global slabel,isync,isync441,textheight,itol if g.mode != "FSK441": if lauto: toggleauto() mode.set("FSK441") cleartext() Audio.gcom1.trperiod=30 lab2.configure(text='FileID T Width dB Rpt DF') lab1.configure(text='Time (s)',bg="green") lab4.configure(fg='black') lab5.configure(fg='black') lab6.configure(bg="green") isync=isync441 slabel="S " f5b1.grid(column=0,row=0,padx=2,sticky='EW') lsync.configure(text=slabel+str(isync)) iframe4b.pack_forget() textheight=9 text.configure(height=textheight) bclravg.pack_forget() binclude.pack_forget() bexclude.pack_forget() cbfreeze.grid_forget() cbafc.grid_forget() lsync.grid(column=0,row=0,padx=8,sticky='EW') ltol.grid(column=0,row=1,padx=8,sticky='EW') cbzap.grid(column=1,row=0,padx=2,sticky='W') nfreeze.set(0) shrx.grid(column=1,row=1,sticky='W',padx=2) shmsg.grid(column=1,row=0,sticky='W',padx=2) report.grid(column=1,row=1,sticky='W',padx=7) labreport.grid(column=0,row=1,sticky='E',padx=0) if ltxdf: toggletxdf() graph2.configure(bg='black') btxdf.grid_forget() report.delete(0,END) report.insert(0,'26') itol=4 inctol() ntx.set(1) GenStdMsgs() erase() #------------------------------------------------------ ModeJT65 def ModeJT65(): global slabel,isync,isync65,textheight,itol cleartext() lab2.configure(text='FileID Sync dB DT DF W') lab4.configure(fg='gray85') lab5.configure(fg='gray85') Audio.gcom1.trperiod=60 iframe4b.pack(after=iframe4,expand=1, fill=X, padx=4) textheight=7 text.configure(height=textheight) isync=isync65 slabel="Sync " f5b1.grid(column=0,row=0,padx=2,sticky='EW') lsync.configure(text=slabel+str(isync)) lsync.grid(column=0,row=0,padx=2,sticky='EW') ltol.grid(column=0,row=1,padx=2,sticky='EW') cbzap.grid(column=1,row=0,padx=2,sticky='W') btxstop.pack_forget() bclravg.pack(side=LEFT,expand=1,fill=X) binclude.pack(side=LEFT,expand=1,fill=X) bexclude.pack(side=LEFT,expand=1,fill=X) btxstop.pack(side=LEFT,expand=1,fill=X) cbfreeze.grid(column=1,row=2,padx=2,sticky='W') cbafc.grid(column=1,row=1,padx=2,sticky='W') if ltxdf: toggletxdf() btxdf.grid_forget() shmsg.grid_forget() shrx.grid_forget() report.grid_forget() labreport.grid_forget() graph2.configure(bg='#66FFFF') itol=4 inctol() nfreeze.set(0) ntx.set(1) GenStdMsgs() erase() # graph2.pack_forget() #------------------------------------------------------ ModeJT65A def ModeJT65A(event=NONE): if g.mode != "JT65A": if lauto: toggleauto() ModeJT65() mode.set("JT65A") btxdf.grid(column=1,row=0,sticky='EW',padx=4) #------------------------------------------------------ ModeJT65B def ModeJT65B(event=NONE): if g.mode != "JT65B": if lauto: toggleauto() mode.set("JT65B") ModeJT65() #------------------------------------------------------ ModeJT65B2 def ModeJT65B2(event=NONE): if g.mode != "JT65B2": if lauto: toggleauto() mode.set("JT65B2") ModeJT65() Audio.gcom1.trperiod=30 #------------------------------------------------------ ModeJT65C def ModeJT65C(event=NONE): if g.mode != "JT65C": if lauto: toggleauto() mode.set("JT65C") ModeJT65() #------------------------------------------------------ ModeJT65C2 def ModeJT65C2(event=NONE): if g.mode != "JT65C2": if lauto: toggleauto() mode.set("JT65C2") ModeJT65() Audio.gcom1.trperiod=30 #------------------------------------------------------ ModeJTMS def ModeJTMS(event=NONE): if g.mode != "JTMS": if lauto: toggleauto() ModeFSK441() cbfreeze.grid(column=0,row=2,padx=4,sticky='W') mode.set("JTMS") #------------------------------------------------------ ModeISCAT_A def ModeISCAT_A(event=NONE): ModeISCAT_B() mode.set("ISCAT-A") Audio.gcom2.mode4=1 #------------------------------------------------------ ModeISCAT_B def ModeISCAT_B(event=NONE): global isync,isync_iscat,slabel if g.mode != "ISCAT-B": if lauto: toggleauto() cleartext() ModeFSK441() slabel="Sync " mode.set("ISCAT-B") lab2.configure(text='FileID Sync dB DT DF F1') isync=isync_iscat lsync.configure(text=slabel+str(isync)) cbafc.grid(column=1,row=1,padx=2,sticky='W') cbfreeze.grid(column=1,row=2,padx=2,sticky='W') itol=3 ltol.configure(text='Tol '+str(ntol[itol])) inctol() nfreeze.set(0) report.delete(0,END) report.insert(0,'-15') shrx.grid_forget() shmsg.grid_forget() ntx.set(1) Audio.gcom2.mousedf=0 Audio.gcom2.mode4=2 GenStdMsgs() erase() #------------------------------------------------------ ModeDiana def ModeDiana(event=NONE): global isync,isync_iscat if g.mode != "Diana": if lauto: toggleauto() ModeJT65() Audio.gcom1.trperiod=30 mode.set("Diana") lab2.configure(text='FileID Sync dB DT DF F1') isync=1 lsync.configure(text=slabel+str(isync)) report.delete(0,END) report.insert(0,'-20') #------------------------------------------------------ ModeCW def ModeCW(event=NONE): if g.mode != "CW": if lauto: toggleauto() cleartext() ModeJT65B() mode.set("CW") Audio.gcom1.trperiod=ncwtrperiod iframe4b.pack_forget() text.configure(height=9) cbfreeze.grid_forget() cbafc.grid_forget() lsync.grid_forget() ltol.grid_forget() cbzap.grid_forget() f5b1.grid_forget() if ltxdf: toggletxdf() ntx.set(1) GenStdMsgs() erase() #------------------------------------------------------ ModeJT4 def ModeJT4(): global slabel,isync,isync65,textheight,itol ModeJT65() bclravg.pack_forget() binclude.pack_forget() bexclude.pack_forget() #------------------------------------------------------ ModeJT4A def ModeJT4A(): global slabel,isync,isync65,textheight,itol ModeJT4() mode.set("JT4A") Audio.gcom2.mode4=1 btxdf.grid(column=1,row=0,sticky='EW',padx=4) #------------------------------------------------------ ModeJT4B def ModeJT4B(): global slabel,isync,isync65,textheight,itol ModeJT4() mode.set("JT4B") Audio.gcom2.mode4=2 #------------------------------------------------------ ModeJT4C def ModeJT4C(): global slabel,isync,isync65,textheight,itol ModeJT4() mode.set("JT4C") Audio.gcom2.mode4=4 #------------------------------------------------------ ModeJT4D def ModeJT4D(): global slabel,isync,isync65,textheight,itol ModeJT4() mode.set("JT4D") Audio.gcom2.mode4=9 #------------------------------------------------------ ModeJT4E def ModeJT4E(): global slabel,isync,isync65,textheight,itol ModeJT4() mode.set("JT4E") Audio.gcom2.mode4=18 #------------------------------------------------------ ModeJT4F def ModeJT4F(): global slabel,isync,isync65,textheight,itol ModeJT4() mode.set("JT4F") Audio.gcom2.mode4=36 #------------------------------------------------------ ModeJT4G def ModeJT4G(): global slabel,isync,isync65,textheight,itol ModeJT4() mode.set("JT4G") Audio.gcom2.mode4=72 #------------------------------------------------------ ModeEcho def ModeEcho(event=NONE): ModeCW() mode.set("Echo") if lauto: toggleauto() lab2.configure(text=' N Level Sig DF Width Az El Q') Audio.gcom1.trperiod=6 tx1.delete(0,99) tx2.delete(0,99) tx3.delete(0,99) tx4.delete(0,99) tx5.delete(0,99) tx6.delete(0,99) #------------------------------------------------------ ModeMeasure def ModeMeasure(event=NONE): ModeEcho() mode.set("Measure") #------------------------------------------------------ msgpos def msgpos(): g=root_geom[root_geom.index("+"):] t=g[1:] x=int(t[:t.index("+")]) # + 70 y=int(t[t.index("+")+1:]) # + 70 return "+%d+%d" % (x,y) #------------------------------------------------------ about def about(event=NONE): global Version about=Toplevel(root) about.geometry(msgpos()) if g.Win32: about.iconbitmap("wsjt.ico") t="WSJT Version " + Version + ", by K1JT" Label(about,text=t,font=(font1,16)).pack(padx=20,pady=5) t=""" WSJT is a weak signal communications program. It supports these operating modes: 1. FSK441 - meteor scatter 2. ISCAT - for tropo- and iono-scatter, weak Es/F2 on 50 MHz (replaces JT6M) 3. JT65 - for HF, EME, and troposcatter 4. JT4 - HF, microwave beacons, 10 GHz EME and rainscatter 5. CW - 15 WPM Morse code, messages structured for EME 6. Echo - EME Echo testing Copy (c) 2001-2011 by Joseph H. Taylor, Jr., K1JT, with contributions from additional authors. WSJT is Open Source software, licensed under the GNU General Public License (GPL). Source code and programming information may be found at http://developer.berlios.de/projects/wsjt/. """ Label(about,text=t,justify=LEFT).pack(padx=20) t="Revision date: " + \ "$Date: 2012-09-17 13:13:47 -0700 (Mon, 17 Sep 2012) $"[7:-1] Label(about,text=t,justify=LEFT).pack(padx=20) about.focus_set() #------------------------------------------------------ shortcuts def shortcuts(event=NONE): scwid=Toplevel(root) scwid.geometry(msgpos()) if g.Win32: scwid.iconbitmap("wsjt.ico") t=""" F1 List keyboard shortcuts Shift+F1 List special mouse commands Ctrl+F1 About WSJT F2 Options F3 Tx Mute F4 Clear "To Radio" Alt+F4 Exit program F5 What message to send? Shift+F5 Examples of minimal JT65 QSOs F6 Open next file in directory Shift+F6 Decode all wave files in directory F9 Online Supplement to User's Guide F10 Show SpecJT Shift+F10 Show astronomical data F11 Decrement Freeze DF F12 Increment Freeze DF Alt+1 to Alt+6 Tx1 to Tx6 Alt+A Toggle Auto On/Off Alt+C Clear average Alt+D Decode Ctrl+D Force Decode Shift+Ctrl+D Force Decode, no JT65 shorthands Alt+E Erase Alt+F Toggle Freeze Alt+G Generate standard messages Ctrl+G Generate alternate JT65/JT4 Messages Alt+I Include Alt+L Lookup Ctrl+L Lookup, then Generate Standard Messages Alt+M Monitor Alt+O Tx Stop Alt+Q Log QSO Alt+R Enter report Alt+S Stop Monitoring or Decoding Alt+V Save Last Alt+X Exclude Alt+Z Toggle Zap """ Label(scwid,text=t,justify=LEFT).pack(padx=20) scwid.focus_set() #------------------------------------------------------ mouse_commands def mouse_commands(event=NONE): scwid=Toplevel(root) scwid.geometry(msgpos()) if g.Win32: scwid.iconbitmap("wsjt.ico") t=""" Click on Action -------------------------------------------------------- Waterfall FSK441, JTMS: click to decode region JT65: Click to set DF for Freeze Double-click to Freeze and Decode Main screen, FSK441, JTMS, ISCAT: click to decode ping graphics area JT65: Click to set DF for Freeze Double-click to Freeze and Decode Main screen, Double-click puts callsign in Tx messages text area Right-double-click also sets Auto ON Sync, S, Left/Right click to increase/decrease Tol, ... """ Label(scwid,text=t,justify=LEFT).pack(padx=20) scwid.focus_set() #------------------------------------------------------ what2send def what2send(event=NONE): screenf5=Toplevel(root) screenf5.geometry(root_geom[root_geom.index("+"):]) if g.Win32: screenf5.iconbitmap("wsjt.ico") t=""" To optimize your chances of completing a valid QSO using WSJT, use the following standard procedures and *do not* exchange pertinent information by other means (e.g., internet, telephone, ...) while the QSO is in progress! FSK441, JTMS, or ISCAT: If you have received ... less than both calls from the other station, send both calls. ... both calls, send both calls and your signal report. ... both calls and signal report, send R and your report. ... R plus signal report, send RRR. ... RRR, the QSO is complete. However, the other station may not know this, so it is conventional to send 73 to signify that you are done. (Outside of North America, the customary procedures may be slightly different.) JT65, JT4: If you have received ... less than both calls, send both calls and your grid locator. ... both calls, send both calls, your grid locator, and OOO. ... both calls and OOO, send RO. ... RO, send RRR. ... RRR, the QSO is complete. However, the other station may not know this, so it is conventional to send 73 to signify that you are done. (Sending grid locators is conventional in JT65, but numerical signal reports may be substituted.) """ Label(screenf5,text=t,justify=LEFT).pack(padx=20) screenf5.focus_set() #------------------------------------------------------ minimal_qso def minimal_qso(event=NONE): screenf5s=Toplevel(root) screenf5s.geometry(root_geom[root_geom.index("+"):]) if g.Win32: screenf5s.iconbitmap("wsjt.ico") t=""" The following are recommended sequences for minimal QSOs using the standard JT65/JT4 messages: Station #1 Station #2 ---------------------------------------------------------- CQ K1JT FN20 K1JT DL3XYZ JO61 DL3XYZ K1JT FN20 OOO RO RRR 73 ---------------------------------------------------------- CQ K1JT FN20 K1JT VK7ABC QE37 VK7ABC K1JT -22 K1JT VK7ABC R-23 VK7ABC K1JT RRR TNX JOE 73 """ Label(screenf5s,text=t,justify=LEFT).pack(padx=20) screenf5s.focus_set() #------------------------------------------------------ usersguide def usersguide(event=NONE): url='http://physics.princeton.edu/pulsar/K1JT/WSJT_User_600.pdf' thread.start_new_thread(browser,(url,)) #------------------------------------------------------ wsjt9supp def wsjt9supp(event=NONE): url='http://physics.princeton.edu/pulsar/K1JT/WSJT_9.0_Supplement.pdf' thread.start_new_thread(browser,(url,)) #------------------------------------------------------- browser def browser(url): webbrowser.open(url) #------------------------------------------------------ prefixes def prefixes(event=NONE): pfx=Toplevel(root) pfx.geometry(msgpos()) if g.Win32: pfx.iconbitmap("wsjt.ico") f=open(appdir+'/prefixes.txt','r') s=f.readlines() t2="" for i in range(3): t2=t2+s[i] t="" for i in range(len(s)-3): t=t+s[i+3] t=t.split() t.sort() t1="" n=0 for i in range(len(t)): t1=t1+t[i]+" " n=n+len(t[i])+2 if n>60: t1=t1+"\n" n=0 t1=t1+"\n" if options.addpfx.get().lstrip(): t1=t1+"\nOptional prefix: "+(options.addpfx.get().lstrip()+' ')[:8] t2=t2+"\n"+t1 Label(pfx,text=t2,justify=LEFT).pack(padx=20) pfx.focus_set() #------------------------------------------------------ azdist def azdist(): if len(HisGrid.get().strip())<4: labAz.configure(text="") labHotAB.configure(text="",bg='gray85') labDist.configure(text="") else: if mode.get()[:4]=='JT65' or \ mode.get()[:3]=='JT4' or mode.get()[:2]=="CW": labAz.configure(text="Az: %d" % (naz,)) labHotAB.configure(text="",bg='gray85') else: labAz.configure(text="Az: %d El: %d" % (naz,nel)) if nhotabetter: labHotAB.configure(text="Hot A: "+str(nhotaz),bg='#FF9900') else: labHotAB.configure(text="Hot B: "+str(nhotaz),bg='#FF9900') if options.mileskm.get()==0: labDist.configure(text=str(ndmiles)+" mi") else: labDist.configure(text=str(int(1.609344*ndmiles))+" km") #------------------------------------------------------ incsync def incsync(event): global isync if isync<10: isync=isync+1 lsync.configure(text=slabel+str(isync)) #------------------------------------------------------ decsync def decsync(event): global isync if isync>-30: isync=isync-1 lsync.configure(text=slabel+str(isync)) #------------------------------------------------------ inctol def inctol(event=NONE): global itol maxitol=5 if mode.get()[:4]=='JT65': maxitol=6 if itol0 : itol=itol-1 ltol.configure(text='Tol '+str(ntol[itol])) #------------------------------------------------------ incdsec def incdsec(event): global idsec idsec=idsec+5 bg='red' if idsec==0: bg='white' ldsec.configure(text='Dsec '+str(0.1*idsec),bg=bg) Audio.gcom1.ndsec=idsec #------------------------------------------------------ decdsec def decdsec(event): global idsec idsec=idsec-5 bg='red' if idsec==0: bg='white' ldsec.configure(text='Dsec '+str(0.1*idsec),bg=bg) Audio.gcom1.ndsec=idsec #------------------------------------------------------ toggle_shift ##def toggle_shift(event): ## Audio.gcom2.nadd5=1-Audio.gcom2.nadd5 ## if Audio.gcom2.nadd5: ## bg='red' ## lshift.configure(text='Shift 5.0',bg=bg) ## else: ## bg='white' ## lshift.configure(text='Shift 0.0',bg=bg) #------------------------------------------------------ inctrperiod def inctrperiod(event): global ncwtrperiod if mode.get()=="CW": if ncwtrperiod==120: ncwtrperiod=150 if ncwtrperiod==60: ncwtrperiod=120 Audio.gcom1.trperiod=ncwtrperiod elif mode.get()=="FSK441" or mode.get()=="JTMS" or mode.get()[:5]=="ISCAT": if Audio.gcom1.trperiod==15: Audio.gcom1.trperiod=30 #------------------------------------------------------ dectrperiod def dectrperiod(event): global ncwtrperiod if mode.get()[:2]=="CW": if ncwtrperiod==120: ncwtrperiod=60 if ncwtrperiod==150: ncwtrperiod=120 Audio.gcom1.trperiod=ncwtrperiod elif mode.get()=="FSK441" or mode.get()=="JTMS" or mode.get()[:5]=="ISCAT": if Audio.gcom1.trperiod==30: Audio.gcom1.trperiod=15 #------------------------------------------------------ erase def erase(event=NONE): graph1.delete(ALL) if mode.get()[:4]!="JT65" and mode.get()[:2]!="CW" and \ mode.get()[:3]!='JT4' and mode.get()!='Diana': graph2.delete(ALL) text.configure(state=NORMAL) text.delete('1.0',END) text.configure(state=DISABLED) avetext.configure(state=NORMAL) avetext.delete('1.0',END) avetext.configure(state=DISABLED) lab3.configure(text=" ") Audio.gcom2.decodedfile=" " #------------------------------------------------------ clear_avg def clear_avg(event=NONE): avetext.configure(state=NORMAL) avetext.delete('1.0',END) avetext.configure(state=DISABLED) f=open(appdir+'/decoded.ave',mode='w') f.truncate(0) #Delete contents of decoded.ave f.close() Audio.gcom2.nclearave=1 #------------------------------------------------------ delwav def delwav(): t="Are you sure you want to delete\nall *.WAV files in the RxWav directory?" result=tkMessageBox.askyesno(message=t) if result: # Make a list of *.wav files in RxWav la=dircache.listdir(appdir+'/RxWav') lb=[] for i in range(len(la)): j=la[i].find(".wav") + la[i].find(".WAV") if j>0: lb.append(la[i]) # Now delete them all. for i in range(len(lb)): fname=appdir+'/RxWav/'+lb[i] os.remove(fname) #------------------------------------------------------ del_all def del_all(): Audio.gcom1.ns0=-999999 #------------------------------------------------------ toggleauto def toggleauto(event=NONE): global lauto lauto=1-lauto Audio.gcom2.lauto=lauto if lauto and mode.get()!='Echo': monitor() else: Audio.gcom1.txok=0 Audio.gcom2.mantx=0 if lauto==0: auto.configure(text='Auto is OFF',bg='gray85',relief=RAISED) if lauto==1: auto.configure(text='Auto is ON',bg='red',relief=SOLID) #------------------------------------------------------ toggletxdf def toggletxdf(event=NONE): global ltxdf ltxdf=1-ltxdf if ltxdf: Audio.gcom2.ntxdf=Audio.gcom2.mousedf t=" TxDF =%4d" % (int(Audio.gcom2.mousedf),) btxdf.configure(text=t,bg='red',relief=SOLID) else: Audio.gcom2.ntxdf=0 t=" TxDF =%4d" % 0 btxdf.configure(text=t,bg='gray85',relief=RAISED) if Audio.gcom1.transmitting: txstop() #----------------------------------------------------- dtdf_change # Readout of graphical cursor location def dtdf_change(event): if mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4' or mode.get()=='Diana': if event.y<40 and Audio.gcom2.nspecial==0: lab1.configure(text='Time (s)',bg="#33FFFF") #light blue if mode.get()=='Diana': t="%.1f" % (4.458*event.x/500.0-0.6,) else: t="%.1f" % (12.0*event.x/500.0-2.0,) lab6.configure(text=t,bg="#33FFFF") elif (event.y>=40 and event.y<95) or \ (event.y<95 and Audio.gcom2.nspecial>0): lab1.configure(text='DF (Hz)',bg='red') idf=Audio.gcom2.idf t="%d" % int(idf+1200.0*event.x/500.0-600.0,) lab6.configure(text=t,bg="red") else: lab1.configure(text='Time (s)',bg='green') if mode.get()=='Diana': t="%.1f" % (event.x*30.0/500.0,) else: t="%.1f" % (53.0*event.x/500.0,) lab6.configure(text=t,bg="green") elif mode.get()=='Echo': lab1.configure(text='DF (Hz)',bg='red') ## t="%d" % int((event.x-250),) t="%d" % int(0.3365*(event.x-250),) lab6.configure(text=t,bg="red") else: t="%.1f" % (event.x*30.0/500.0,) lab6.configure(text=t,bg='green') #---------------------------------------------------- mouse_click_g1 def mouse_click_g1(event): global nopen if not nopen: if mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4' or \ mode.get()[:5]=='Diana': Audio.gcom2.mousedf=int(Audio.gcom2.idf+(event.x-250)*2.4) else: if Audio.gcom2.ndecoding==0: #If decoder is busy, ignore Audio.gcom2.nagain=1 Audio.gcom2.mousebutton=event.num #Left=1, Right=3 Audio.gcom2.npingtime=int(195+60*event.x) #Time (ms) of mouse-picked ping if mode.get()[:5]!='ISCAT' or event.num==3: if Audio.gcom2.ndecoding0==4: Audio.gcom2.ndecoding=4 #Decode from recorded file elif Audio.gcom2.ndecoding0==1: Audio.gcom2.ndecoding=5 #Decode data in main screen nopen=0 #------------------------------------------------------ double-click_g1 def double_click_g1(event): if (mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4' or \ mode.get()[:5]=='Diana') and Audio.gcom2.ndecoding==0: g.freeze_decode=1 #------------------------------------------------------ mouse_up_g1 def mouse_up_g1(event): if mode.get()[:5]=='ISCAT' and Audio.gcom2.ndecoding==0: Audio.gcom2.nagain=1 Audio.gcom2.mousebutton=event.num #Left=1, Right=3 Audio.gcom2.npingtime2=int(195+60*event.x) #Time (ms) of mouse-picked ping if Audio.gcom2.ndecoding0==4: Audio.gcom2.ndecoding=4 #Decode from recorded file elif Audio.gcom2.ndecoding0==1: Audio.gcom2.ndecoding=5 #Decode data in main screen #------------------------------------------------------ right_arrow def right_arrow(event=NONE): n=5*int(Audio.gcom2.mousedf/5) if n!=0: n=n+5 if n==Audio.gcom2.mousedf: n=n+5 Audio.gcom2.mousedf=n #------------------------------------------------------ left_arrow def left_arrow(event=NONE): n=5*int(Audio.gcom2.mousedf/5) if n==Audio.gcom2.mousedf: n=n-5 Audio.gcom2.mousedf=n #------------------------------------------------------ GenStdMsgs def GenStdMsgs(event=NONE): global altmsg,MyCall0,addpfx0,ToRadio0 t=ToRadio.get().upper().strip() ToRadio.delete(0,99) ToRadio.insert(0,t) if k2txb.get()!=0: ntx.set(1) Audio.gcom2.hiscall=(ToRadio.get()+(' '*12))[:12] for m in (tx1, tx2, tx3, tx4, tx5, tx6): m.delete(0,99) if mode.get()=="FSK441" or mode.get()[:5]=="ISCAT" or \ mode.get()=='JTMS' or mode.get()=='Diana': r=report.get() tx1.insert(0,setmsg(options.tx1.get(),r)) tx2.insert(0,setmsg(options.tx2.get(),r)) tx3.insert(0,setmsg(options.tx3.get(),r)) tx4.insert(0,setmsg(options.tx4.get(),r)) tx5.insert(0,setmsg(options.tx5.get(),r)) tx6.insert(0,setmsg(options.tx6.get(),r)) if tx3.get()=='ROOO': tx3.delete(0,END) tx3.insert(0,'RO') elif mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4': if options.MyCall.get()!= MyCall0 or \ options.addpfx.get()!= addpfx0 or ToRadio.get()!=ToRadio0: MyCall0=options.MyCall.get() addpfx0=options.addpfx.get() ToRadio0=ToRadio.get() t0=("SM5BSZ "+options.MyCall.get()).upper() Audio.gcom2.t0msg=(t0+' '*22)[:22] nplain,naddon,ndiff=Audio.chkt0() if nplain==1: MsgBox("Bad 'MyCall' or bad prefix/suffix?\nPlease check on Setup | Options screen.") options1() t0=("SM5BSZ "+ToRadio0).upper() Audio.gcom2.t0msg=(t0+' '*22)[:22] nplain,naddon,ndiff=Audio.chkt0() if nplain==1: MsgBox("Bad callsign in 'To Radio'?\nPlease check.") t0=(ToRadio.get() + " "+options.MyCall.get()).upper() Audio.gcom2.t0msg=(t0+' '*22)[:22] nplain,naddon,ndiff=Audio.chkt0() if nplain==0 and naddon==0 and ndiff==0: t0=t0 + " "+options.MyGrid.get()[:4] tx1.insert(0,t0.upper()) tx2.insert(0,tx1.get()+" OOO") tx3.insert(0,"RO") tx4.insert(0,"RRR") tx5.insert(0,"73") t0="CQ " + options.MyCall.get().upper() Audio.gcom2.t0msg=(t0+' '*22)[:22] nplain,naddon,ndiff=Audio.chkt0() if nplain==0 and naddon==0 and ndiff==0: t0=t0 + " "+options.MyGrid.get()[:4] tx6.insert(0,t0.upper()) altmsg=0 elif mode.get()[:2]=="CW": tx1.insert(0,"[" + ToRadio.get() + " " +options.MyCall.get() + "]") tx2.insert(0,tx1.get()+" [OOO]") tx3.insert(0,ToRadio.get() + " " + options.MyCall.get()+" [RO]") tx4.insert(0,ToRadio.get() + " " + options.MyCall.get()+" [RRR]") tx5.insert(0,ToRadio.get() + " " + options.MyCall.get()+" [73]") tx6.insert(0,"[CQ " + options.MyCall.get() + "]") #------------------------------------------------------ GenAltMsgs def GenAltMsgs(event=NONE): global altmsg,tx6alt t=ToRadio.get().upper().strip() ToRadio.delete(0,99) ToRadio.insert(0,t) if k2txb.get()!=0: ntx.set(1) Audio.gcom2.hiscall=(ToRadio.get()+(' '*12))[:12] if (mode.get()[:4]=='JT65' or mode.get()=='Diana' or \ mode.get()[:3]=='JT4') and ToRadio.get().find("/") == -1 and \ options.MyCall.get().find("/") == -1: for m in (tx1, tx2, tx3, tx4, tx5, tx6): m.delete(0,99) t=ToRadio.get() + " "+options.MyCall.get() tx1.insert(0,t.upper()) tx2.insert(0,tx1.get()+" OOO") tx3.insert(0,tx1.get()+" RO") tx4.insert(0,tx1.get()+" RRR") tx5.insert(0,"TNX 73 GL ") tx6.insert(0,tx6alt.upper()) altmsg=1 #------------------------------------------------------ setmsg def setmsg(template,r): msg="" t=options.MyCall.get() n=len(t) MySuffix=t[n-3:] n2=MySuffix.find('/') if(n2>=0): MySuffix=t[n-5:n-2] if MySuffix[0:1].isdigit()or MySuffix[1:2].isdigit(): MySuffix=MySuffix[1:] t=ToRadio.get() n=len(t) HisSuffix=t[n-3:] n2=HisSuffix.find('/') if(n2>=0): HisSuffix=t[n-5:n-2] if HisSuffix[0:1].isdigit()or HisSuffix[1:2].isdigit(): HisSuffix=HisSuffix[1:] npct=0 for i in range(len(template)): if npct: if template[i]=="M": msg=msg+options.MyCall.get().upper().strip() if template[i]=="T": msg=msg+ToRadio.get().upper().strip() if template[i]=="R": msg=msg+r if template[i]=="G": msg=msg+options.MyGrid.get()[:4] if template[i]=="L": msg=msg+options.MyGrid.get() if template[i]=="S": msg=msg+MySuffix if template[i]=="H": msg=msg+HisSuffix npct=0 else: npct=0 if template[i]=="%": npct=1 else: msg=msg+template[i] return msg.upper() #------------------------------------------------------ plot_echo def plot_echo(): "Plot red and blue curves for Echo mode." graph1.delete(ALL) y1=[] y2=[] for i in range(446): #Find ymax for magenta/orange curves ss1=Audio.gcom2.ss1[i+1] y1.append(ss1) ss2=Audio.gcom2.ss2[i+1] y2.append(ss2) ymax=max(y1+y2) yfac=0.5 if ymax>80.0/yfac: yfac=80.0/ymax xy1=[] xy2=[] fac=500.0/446.0 for i in range(446): #Make xy list for magenta/orange curves x=i*fac ss1=Audio.gcom2.ss1[i+1] n=int(90.0-yfac*ss1) + 20 xy1.append(x) xy1.append(n) ss2=Audio.gcom2.ss2[i+1] n=int(90.0-yfac*ss2) xy2.append(x) xy2.append(n) graph1.create_line(xy1,fill='#33FFFF') #Light blue graph1.create_line(xy2,fill="red") #------------------------------------------------------ plot_meas def plot_meas(nmeas,db): global xypm graph1.delete(ALL) if nmeas<2: xypm=[] xypm.append(nmeas) n=int(60.0-3.0*db) xypm.append(n) if nmeas>=2: graph1.create_line(xypm,fill="green") #------------------------------------------------------ plot_large def plot_large(): "Plot the green, red, and blue curves." ngreen=Audio.gcom2.ngreen graph1.delete(ALL) y=[] if ngreen>0: for i in range(ngreen): #Find ymax for green curve green=Audio.gcom2.green[i] y.append(green) ymax=max(y) if ymax<1: ymax=1 yfac=4.0 if ymax>75.0/yfac: yfac=75.0/ymax xy=[] for i in range(ngreen): #Make xy list for green curve green=Audio.gcom2.green[i] n=int(105.0-yfac*green) if mode.get()=='Diana': xy.append(2*i) else: xy.append(i) xy.append(n) graph1.create_line(xy,fill="green") if Audio.gcom2.nspecial==0 or mode.get()[:3]=='JT4': y=[] for i in range(446): #Find ymax for red curve psavg=Audio.gcom2.psavg[i+1] y.append(psavg) ymax=max(y) yfac=30.0 if ymax>85.0/yfac: yfac=85.0/ymax xy=[] fac=500.0/446.0 for i in range(446): #Make xy list for red curve x=i*fac if mode.get()[:3]=='JT4': x=i*500.0/548.571 + 47 #empirical psavg=Audio.gcom2.psavg[i+1] n=int(90.0-yfac*psavg) xy.append(x) xy.append(n) graph1.create_line(xy,fill="red") else: y1=[] y2=[] for i in range(446): #Find ymax for magenta/orange curves ss1=Audio.gcom2.ss1[i+1] y1.append(ss1) ss2=Audio.gcom2.ss2[i+1] y2.append(ss2) ymax=max(y1+y2) yfac=30.0 if ymax>85.0/yfac: yfac=85.0/ymax xy1=[] xy2=[] fac=500.0/446.0 for i in range(446): #Make xy list for magenta/orange curves x=i*fac ss1=Audio.gcom2.ss1[i+1] n=int(90.0-yfac*ss1) xy1.append(x) xy1.append(n) ss2=Audio.gcom2.ss2[i+1] n=int(90.0-yfac*ss2) - 20 xy2.append(x) xy2.append(n) graph1.create_line(xy1,fill="magenta") graph1.create_line(xy2,fill="orange") x1 = 250.0 + fac*Audio.gcom2.ndf/2.6916504 x2 = x1 + Audio.gcom2.mode65*Audio.gcom2.nspecial*10*fac graph1.create_line([x1,85,x1,95],fill="yellow") graph1.create_line([x2,85,x2,95],fill="yellow") t="RO" if Audio.gcom2.nspecial==3: t="RRR" if Audio.gcom2.nspecial==4: t="73" graph1.create_text(x2+3,93,anchor=W,text=t,fill="yellow") if Audio.gcom2.ccf[0] != -9999.0: y=[] iz=65 if mode.get()=='Diana': iz=96 fac=500.0/iz for i in range(iz): #Find ymax for blue curve ccf=Audio.gcom2.ccf[i] y.append(ccf) ymax=max(y) yfac=40.0 if ymax>55.0/yfac: yfac=55.0/ymax xy2=[] for i in range(iz): #Make xy list for blue curve x=(i+0.5)*fac if mode.get()[:3]=='JT4': x=(i+0.5)*500.0/105.0 + 15 #15 is empirical ccf=Audio.gcom2.ccf[i] n=int(60.0-yfac*ccf) xy2.append(x) xy2.append(n) graph1.create_line(xy2,fill='#33FFFF') # Put in the tick marks for i in range(13): x=int(i*41.667) j2=115 if i==1 or i==6 or i==11: j2=110 graph1.create_line([x,j2,x,125],fill="red") if Audio.gcom2.nspecial==0: # x=int((i-0.8)*41.667) j1=9 if i==2 or i==7 or i==12: j1=14 graph1.create_line([x,0,x,j1],fill="#33FFFF") #light blue else: graph1.create_line([x,0,x,125-j2],fill="red") #------------------------------------------------------ plot_small def plot_small(): graph2.delete(ALL) xy=[] xy2=[] df=11025.0/256.0 fac=150.0/3500.0 for i in range(81): x=int(i*df*fac) xy.append(x) psavg=Audio.gcom2.psavg[i] n=int(150.0-2*psavg) xy.append(n) if mode.get()=='FSK441' or mode.get()=="JTMS": ps0=Audio.gcom2.ps0[i] n=int(150.0-2*ps0) xy2.append(x) xy2.append(n) graph2.create_line(xy,fill="magenta") if mode.get()=='FSK441' or mode.get()=="JTMS": graph2.create_line(xy2,fill="red") for i in range(4): x=(i+2)*441*fac graph2.create_line([x,0,x,20],fill="yellow") for i in range(7): x=i*500*fac ytop=110 if i%2: ytop=115 graph2.create_line([x,120,x,ytop],fill="white") ###------------------------------------------------------ plot_yellow ##def plot_yellow(): ## nz=int(Audio.gcom2.ps0[215]) ## if nz>10: ## y=[] ## for i in range(nz): #Find ymax for yellow curve ## n=Audio.gcom2.ps0[i] ## y.append(n) ## ymax=max(y) ## fac=1.0 ## if ymax>60: fac=60.0/ymax ## xy2=[] ## for i in range(nz): ## x=int(2.34*i) ## y=fac*Audio.gcom2.ps0[i] + 8 ## n=int(85.0-y) ## xy2.append(x) ## xy2.append(n) ## graph1.create_line(xy2,fill="yellow") #------------------------------------------------------ update def update(): global root_geom,isec0,naz,nel,ndmiles,ndkm,nhotaz,nhotabetter,nopen, \ im,pim,cmap0,isync,isync441,isync_iscat,isync65, \ isync_save,idsec,first,itol,txsnrdb,tx6alt,nmeas utc=time.gmtime(time.time()+0.1*idsec) isec=utc[5] if isec != isec0: #Do once per second isec0=isec t=time.strftime('%Y %b %d\n%H:%M:%S',utc) Audio.gcom2.utcdate=t[:12] Audio.gcom2.iyr=utc[0] Audio.gcom2.imo=utc[1] Audio.gcom2.ida=utc[2] Audio.gcom2.ihr=utc[3] Audio.gcom2.imi=utc[4] Audio.gcom2.isc=utc[5] ldate.configure(text=t) root_geom=root.geometry() utchours=utc[3]+utc[4]/60.0 + utc[5]/3600.0 naz,nel,ndmiles,ndkm,nhotaz,nhotabetter=Audio.azdist0( \ options.MyGrid.get().upper(),HisGrid.get().upper(),utchours) azdist() g.nfreq=nfreq.get() if tx1.get()[0:2]=='GO' and mode.get()=='Echo': try: nmin=int(tx1.get()[3:5]) except: nmin=10 if isec==0 and (utc[4]%nmin)==0 and lauto==0: toggleauto() if isec==4 and (utc[4]%nmin)==1 and lauto==1: toggleauto() Audio.gcom2.nsumecho=0 if Audio.gcom2.ndecoding==0: g.AzSun,g.ElSun,g.AzMoon,g.ElMoon,g.AzMoonB,g.ElMoonB,g.ntsky, \ g.ndop,g.ndop00,g.dbMoon,g.RAMoon,g.DecMoon,g.HA8,g.Dgrd, \ g.sd,g.poloffset,g.MaxNR,g.dfdt,g.dfdt0,g.RaAux,g.DecAux, \ g.AzAux,g.ElAux,g.w1,g.w2,g.w501,g.w502,g.xlst = Audio.astro0( \ utc[0],utc[1],utc[2],utchours,nfreq.get(), \ options.MyGrid.get().upper(), \ options.auxra.get()+(' '*9)[:9], \ options.auxdec.get()+(' '*9)[:9]) if len(HisGrid.get().strip())<4: g.ndop=g.ndop00 g.dfdt=g.dfdt0 if (ntx.get()==1 and noshjt65.get()) or noshjt65all.get(): Audio.gcom2.ntx2=1 else: Audio.gcom2.ntx2=0 if mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4'\ or mode.get()[:2]=='CW' or mode.get()=='Echo' \ or mode.get()=='Diana' or mode.get()=='Measure': graph2.delete(ALL) graph2.create_text(80,13,anchor=CENTER,text="Moon",font=g2font) graph2.create_text(13,37,anchor=W, text="Az: %6.2f" % g.AzMoon,font=g2font) graph2.create_text(13,61,anchor=W, text="El: %6.2f" % g.ElMoon,font=g2font) graph2.create_text(13,85,anchor=W, text="Dop:%6d" % g.ndop,font=g2font) graph2.create_text(13,109,anchor=W,text="Dgrd:%5.1f" % g.Dgrd,font=g2font) if mode.get()=='Measure' and Audio.gcom2.monitoring: nmeas=nmeas+1 if nmeas>500: nmeas=1 db=20.0*log10(g.rms/770.0+0.01) t="%5d %6.1f\n" % (nmeas,db,) text.configure(state=NORMAL) text.insert(END,t) text.see(END) plot_meas(nmeas,db) else: nmeas=0 if (mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4' \ or mode.get()=='Diana') and g.freeze_decode: itol=2 ltol.configure(text='Tol '+str(50)) Audio.gcom2.dftolerance=50 nfreeze.set(1) Audio.gcom2.nfreeze=1 if Audio.gcom2.monitoring: Audio.gcom2.ndecoding=1 Audio.gcom2.nagain=0 else: Audio.gcom2.ndecoding=4 Audio.gcom2.nagain=1 g.freeze_decode=0 n=-99 g.rms=g.rms+0.001 if g.rms > 0: n=int(20.0*log10(g.rms/770.0+0.01)) else: print "RMS noise:", g.rms, " out of range." t="Rx noise:%3d dB" % (n,) if n>=-10 and n<=10: msg4.configure(text=t,bg='gray85') else: msg4.configure(text=t,bg='red') t=g.ftnstr(Audio.gcom2.decodedfile) # i=t.rfind(".") i=g.rfnd(t,".") t=t[:i] lab3.configure(text=t) if mode.get() != g.mode or first: if mode.get()=="FSK441": msg2.configure(bg='#FFFF00') elif mode.get()[:4]=="JT65": msg2.configure(bg='#00FFFF') elif mode.get()=="CW": msg2.configure(bg='#00FF00') elif mode.get()[:5]=="ISCAT": msg2.configure(bg='#CCFFFF') elif mode.get()[:5]=="Diana": msg2.configure(bg='#CCFF00') elif mode.get()[:4]=="JTMS": msg2.configure(bg='#CC4444') elif mode.get()[:3]=="JT4": msg2.configure(bg='#88FF88') elif mode.get()=="Echo": msg2.configure(bg='#FF0000') elif mode.get()=="Measure": msg2.configure(bg='#FF8800') g.mode=mode.get() if first and mode.get()!='Echo': GenStdMsgs() first=0 if options.genmsg.get(): GenStdMsgs() options.genmsg.set(0) samfac_in=Audio.gcom1.mfsample/110250.0 samfac_out=Audio.gcom1.mfsample2/110250.0 xin=1 xout=1 try: xin=samfac_in/options.samfacin.get() xout=samfac_out/options.samfacout.get() if xin<0.999 or xin>1.001 or xout<0.999 or xout>1.001: lab8.configure(text="%6.4f %6.4f" \ % (options.samfacin.get(),options.samfacout.get()), \ fg='black',bg='red') else: lab8.configure(fg='gray85',bg='gray85') except: pass msg1.configure(text="%6.4f %6.4f" % (samfac_in,samfac_out)) t=mode.get() msg2.configure(text=t) t="Freeze DF:%4d" % (int(Audio.gcom2.mousedf),) if abs(int(Audio.gcom2.mousedf))>600: msg3.configure(text=t,fg='black',bg='red') else: msg3.configure(text=t,fg='black',bg='gray85') bdecode.configure(bg='gray85',activebackground='gray95') if (sys.platform == 'darwin'): bdecode.configure(text='Decode') if Audio.gcom2.ndecoding: #Set button bg=light_blue while decoding bdecode.configure(bg='#66FFFF',activebackground='#66FFFF') if (sys.platform == 'darwin'): bdecode.configure(text='*Decode*') msg5.configure(text="T/R Period: %d s" % (Audio.gcom1.trperiod,)) if mode.get()=="CW": color='white' elif mode.get()=='FSK441' or mode.get()=='JTMS' or mode.get()[:5]=='ISCAT': if(Audio.gcom1.trperiod==15): color='yellow' else: color='white' else: color='gray85' msg5.configure(bg=color) tx1.configure(bg='white') tx2.configure(bg='white') tx3.configure(bg='white') tx4.configure(bg='white') tx5.configure(bg='white') if len(tx5.get())>13 and \ (mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4'): Audio.gcom2.t0msg=(tx5.get()+' '*22)[:22] nplain,naddon,ndiff=Audio.chkt0() if nplain==1: tx5.configure(bg='pink') tx6.configure(bg='white') if tx6.get()[:1]=='#': try: txsnrdb=float(tx6.get()[1:]) if txsnrdb>-99.0 and txsnrdb<40.0: Audio.gcom1.txsnrdb=txsnrdb tx6.configure(bg='orange') except: txsnrdb=99.0 else: txsnrdb=99.0 Audio.gcom1.txsnrdb=txsnrdb if Audio.gcom2.monitoring and not Audio.gcom1.transmitting: bmonitor.configure(bg='green') if (sys.platform == 'darwin'): bmonitor.configure(text='*Monitor*') else: bmonitor.configure(bg='gray85') if (sys.platform == 'darwin'): bmonitor.configure(text='Monitor') if Audio.gcom1.transmitting: nmsg=int(Audio.gcom2.nmsg) t=g.ftnstr(Audio.gcom2.sending) if mode.get()=='Echo': t='ECHO TEST' nmsg=9 Audio.gcom2.ntxnow=0 t="Txing: "+t[:nmsg] bgcolor='yellow' if Audio.gcom2.sendingsh==1: bgcolor='#66FFFF' #Shorthand (lt blue) if Audio.gcom2.sendingsh==-1: bgcolor='red' #Plain Text if Audio.gcom2.sendingsh==2: bgcolor='pink' #Test file if txsnrdb<90.0: bgcolor='orange' #Simulation mode if Audio.gcom2.ntxnow==1: tx1.configure(bg=bgcolor) elif Audio.gcom2.ntxnow==2: tx2.configure(bg=bgcolor) elif Audio.gcom2.ntxnow==3: tx3.configure(bg=bgcolor) elif Audio.gcom2.ntxnow==4: tx4.configure(bg=bgcolor) elif Audio.gcom2.ntxnow==5: tx5.configure(bg=bgcolor) elif Audio.gcom2.ntxnow==6: tx6.configure(bg=bgcolor) else: bgcolor='green' t='Receiving' msg7.configure(text=t,bg=bgcolor) if Audio.gcom2.ndecdone==1 or g.cmap != cmap0: if Audio.gcom2.ndecdone==1: if isync==-99 or isync==99: isync=isync_save Audio.gcom2.minsigdb=isync try: f=open(appdir+'/decoded.txt',mode='r') lines=f.readlines() f.close() except: lines="" text.configure(state=NORMAL) for i in range(len(lines)): text.insert(END,lines[i]) text.see(END) # text.configure(state=DISABLED) if mode.get()[:4]=='JT65': try: f=open(appdir+'/decoded.ave',mode='r') lines=f.readlines() f.close() except: lines[0]="" lines[1]="" avetext.configure(state=NORMAL) avetext.delete('1.0',END) if len(lines)>1: avetext.insert(END,lines[0]) avetext.insert(END,lines[1]) # avetext.configure(state=DISABLED) Audio.gcom2.ndecdone=2 if g.cmap != cmap0: im.putpalette(g.palette) cmap0=g.cmap if mode.get()=='Echo': plot_echo() elif mode.get()[:4]=='JT65' or mode.get()[:3]=='JT4' or \ mode.get()=='Diana': plot_large() else: im.putdata(Audio.gcom2.b) pim=ImageTk.PhotoImage(im) #Convert Image to PhotoImage graph1.delete(ALL) # NB: top two lines are probably invisible ... graph1.create_image(0,0,anchor='nw',image=pim) t=g.filetime(g.ftnstr(Audio.gcom2.decodedfile)) graph1.create_text(100,80,anchor=W,text=t,fill="white") if mode.get()[:5]=='ISCAT' and Audio.gcom2.npingtime>0: if Audio.gcom2.npingtime2-Audio.gcom2.npingtime >= 1000: x1=(Audio.gcom2.npingtime - 195)/60.0 x2=(Audio.gcom2.npingtime2 - 195)/60.0 else: if Audio.gcom2.mousebutton==3: x1=2 x2=(Audio.gcom2.npingtime - 195)/60.0 else: if mode.get()[:5]=='ISCAT': x1=(Audio.gcom2.npingtime - 195 - 2240)/60.0 x2=(Audio.gcom2.npingtime2 - 195 + 2240)/60.0 else: x1=(Audio.gcom2.npingtime - 195 - 1000)/60.0 x2=(Audio.gcom2.npingtime2 - 195 + 1000)/60.0 graph1.create_line([x1,90,x2,90],fill="yellow") graph1.create_line([x1,85,x1,95],fill="yellow") graph1.create_line([x2,85,x2,95],fill="yellow") Audio.gcom2.npingtime=0 Audio.gcom2.npingtime2=0 plot_small() if loopall: opennext() nopen=0 # Save some parameters g.mode=mode.get() g.report=report.get() if mode.get()=='FSK441' or mode.get()=='JTMS': isync441=isync elif mode.get()[:5]=="ISCAT": isync_iscat=isync elif mode.get()[:4]=='JT65': isync65=isync Audio.gcom1.txfirst=TxFirst.get() try: Audio.gcom1.samfacin=options.samfacin.get() except: Audio.gcom1.samfacin=1.0 try: Audio.gcom1.samfacout=options.samfacout.get() except: Audio.gcom1.samfacout=1.0 # if Audio.gcom1.samfacin>1.01: Audio.gcom1.samfacin=1.01 # ... etc. Audio.gcom2.mycall=(options.MyCall.get()+(' '*12))[:12] try: Audio.gcom2.hiscall=(ToRadio.get()+(' '*12))[:12] except: MsgBox("Bad callsign: "+ToRadio.get()+".\nPlease re-enter.") clrToRadio(None) Audio.gcom2.hisgrid=(HisGrid.get()+(' '*6))[:6] Audio.gcom4.addpfx=(options.addpfx.get().lstrip().upper()+(' '*8))[:8] Audio.gcom2.ntxreq=ntx.get() tx=(tx1,tx2,tx3,tx4,tx5,tx6) Audio.gcom2.txmsg=(tx[ntx.get()-1].get()+(' '*28))[:28] Audio.gcom2.mode=(mode.get()+(' '*6))[:6] Audio.gcom2.shok=ShOK.get() Audio.gcom2.nsave=nsave.get() Audio.gcom2.nzap=nzap.get() Audio.gcom2.ndebug=ndebug.get() Audio.gcom2.minsigdb=isync Audio.gcom2.nafc=nafc.get() Audio.gcom2.nfreeze=nfreeze.get() Audio.gcom2.dftolerance=ntol[itol] Audio.gcom2.neme=neme.get() Audio.gcom2.ndepth=ndepth.get() Audio.gcom2.ndtr=options.ndtr.get() if mode.get()=='CW': Audio.gcom2.ntdecode=56 elif mode.get()=='JT65B2' or mode.get()=='JT65C2': Audio.gcom2.ntdecode=26 else: if qdecode.get(): Audio.gcom2.ntdecode=48 else: Audio.gcom2.ntdecode=52 ## if mode.get()=='Diana': ## Audio.gcom2.ntdecode=26 try: Audio.gcom2.idinterval=options.IDinterval.get() except: Audio.gcom2.idinterval=0 # Audio.gcom1.rxdelay=float('0'+options.RxDelay.get()) # Audio.gcom1.txdelay=float('0'+options.TxDelay.get()) Audio.gcom2.nslim2=isync-4 if nshrx.get()==0 and (mode.get()=='FSK441' or mode.get()=='JTMS'): Audio.gcom2.nslim2=99 try: Audio.gcom2.nport=int(options.PttPort.get()) except: Audio.gcom2.nport=0 Audio.gcom2.pttport=(options.PttPort.get() + (' '*80))[:80] try: Audio.gcom2.ntc=options.ntc.get() if int(options.ntc.get()<=0): Audio.gcom2.ntc=1 Audio.gcom2.nfrit=options.fRIT.get() Audio.gcom2.ndither=options.dither.get() ## Audio.gcom2.necho=options.necho.get() ## Audio.gcom2.dlatency=options.dlatency.get() except: pass if options.iregion.get(): options.cb1.configure(state=DISABLED) options.cb2.configure(state=DISABLED) else: options.cb1.configure(state=NORMAL) options.cb2.configure(state=NORMAL) if altmsg: tx6alt=tx6.get() Audio.gcom2.nlowbeacon=nlowbeacon.get() # Queue up the next update ldate.after(100,update) #------------------------------------------------------ Top level frame frame = Frame(root) #------------------------------------------------------ Menu Bar if (sys.platform != 'darwin'): mbar = Frame(frame) mbar.pack(fill = X) else: mbar = Menu(root) root.config(menu=mbar) # Tearoff menus make less sense under darwin use_tearoff = (sys.platform != 'darwin') #------------------------------------------------------ File Menu if (sys.platform != 'darwin'): filebutton = Menubutton(mbar, text = 'File') filebutton.pack(side = LEFT) filemenu = Menu(filebutton, tearoff=0) filebutton['menu'] = filemenu else: filemenu = Menu(mbar, tearoff=0) filemenu.add('command', label = 'Open', command = openfile, \ accelerator='Ctrl+O') filemenu.add('command', label = 'Open next in directory', command = opennext, \ accelerator='F6') filemenu.add('command', label = 'Decode remaining files in directory', \ command = decodeall, accelerator='Shift+F6') filemenu.add_separator() filemenu.add('command', label = 'Delete all *.WAV files in RxWav', \ command = delwav) filemenu.add_separator() filemenu.add('command', label = 'Erase ALL.TXT', command = del_all) filemenu.add_separator() filemenu.add('command', label = 'Exit', command = quit, accelerator='Alt+F4') if (sys.platform == 'darwin'): mbar.add_cascade(label="File", menu=filemenu) #------------------------------------------------------ Setup menu if (sys.platform != 'darwin'): setupbutton = Menubutton(mbar, text = 'Setup') setupbutton.pack(side = LEFT) setupmenu = Menu(setupbutton, tearoff=0) setupbutton['menu'] = setupmenu else: setupmenu = Menu(mbar, tearoff=0) setupmenu.add('command', label = 'Options', command = options1, \ accelerator='F2') setupmenu.add_separator() setupmenu.add('command', label = 'Toggle size of text window', command=textsize) setupmenu.add('command', label = 'Generate messages for test tones', command=testmsgs) setupmenu.add_separator() setupmenu.add_checkbutton(label = 'F4 sets Tx6',variable=kb8rq) setupmenu.add_checkbutton(label = 'Double-click on callsign sets TxFirst', variable=setseq) setupmenu.add_checkbutton(label = 'Gen Msgs sets Tx1',variable=k2txb) setupmenu.add_separator() setupmenu.add_checkbutton(label = 'Monitor ON at startup',variable=nmonitor) setupmenu.add_checkbutton(label = 'Low-Duty Beacon Mode',variable=nlowbeacon) setupmenu.add_separator() setupmenu.add_checkbutton(label = 'Enable diagnostics',variable=ndebug) if (sys.platform == 'darwin'): mbar.add_cascade(label="Setup", menu=setupmenu) #------------------------------------------------------ View menu if (sys.platform != 'darwin'): viewbutton=Menubutton(mbar,text='View') viewbutton.pack(side=LEFT) viewmenu=Menu(viewbutton,tearoff=0) viewbutton['menu']=viewmenu else: viewmenu=Menu(mbar,tearoff=0) viewmenu.add('command', label = 'SpecJT', command = showspecjt, \ accelerator='F10') viewmenu.add('command', label = 'Astronomical data', command = astro1, \ accelerator='Shift+F10') if (sys.platform == 'darwin'): mbar.add_cascade(label="View", menu=viewmenu) #------------------------------------------------------ Mode menu if (sys.platform != 'darwin'): modebutton = Menubutton(mbar, text = 'Mode') modebutton.pack(side = LEFT) modemenu = Menu(modebutton, tearoff=0) modebutton['menu'] = modemenu else: modemenu = Menu(mbar, tearoff=use_tearoff) # To enable menu item 0: # modemenu.entryconfig(0,state=NORMAL) # Can use the following to retrieve the state: # state=modemenu.entrycget(0,"state") modemenu.add_radiobutton(label = 'FSK441', variable=mode,command = ModeFSK441, state=NORMAL) modemenu.add_radiobutton(label = 'ISCAT-A', variable=mode, command = ModeISCAT_A) modemenu.add_radiobutton(label = 'ISCAT-B', variable=mode, command = ModeISCAT_B) modemenu.add_radiobutton(label = 'JT65A', variable=mode, command = ModeJT65A) modemenu.add_radiobutton(label = 'JT65B', variable=mode, command = ModeJT65B) modemenu.add_radiobutton(label = 'JT65C', variable=mode, command = ModeJT65C) modemenu.add_radiobutton(label = 'JT65B2', variable=mode, command = ModeJT65B2) modemenu.add_radiobutton(label = 'JT65C2', variable=mode, command = ModeJT65C2) modemenu.add_radiobutton(label = 'JT4A', variable=mode, command = ModeJT4A) modemenu.add_radiobutton(label = 'JT4B', variable=mode, command = ModeJT4B) modemenu.add_radiobutton(label = 'JT4C', variable=mode, command = ModeJT4C) modemenu.add_radiobutton(label = 'JT4D', variable=mode, command = ModeJT4D) modemenu.add_radiobutton(label = 'JT4E', variable=mode, command = ModeJT4E) modemenu.add_radiobutton(label = 'JT4F', variable=mode, command = ModeJT4F) modemenu.add_radiobutton(label = 'JT4G', variable=mode, command = ModeJT4G) modemenu.add_radiobutton(label = 'CW', variable=mode, command = ModeCW) modemenu.add_radiobutton(label = 'Echo', variable=mode, command = ModeEcho) modemenu.add_radiobutton(label = 'Measure', variable=mode, command = ModeMeasure) try: f=open(appdir+'/experimental','r') modemenu.add_separator() modemenu.add_radiobutton(label = 'JTMS', variable=mode, command = ModeJTMS) modemenu.add_radiobutton(label = 'Diana', variable=mode, command = ModeDiana) except: pass try: f=open(appdir+'/txboth','r') Audio.gcom2.ntxboth=1 except: Audio.gcom2.ntxboth=0 if (sys.platform == 'darwin'): mbar.add_cascade(label="Mode", menu=modemenu) #------------------------------------------------------ Decode menu if (sys.platform != 'darwin'): decodebutton = Menubutton(mbar, text = 'Decode') decodebutton.pack(side = LEFT) decodemenu = Menu(decodebutton, tearoff=use_tearoff) decodebutton['menu'] = decodemenu else: decodemenu = Menu(mbar, tearoff=use_tearoff) ##decodemenu.ISCAT=Menu(decodemenu,tearoff=0) ##decodemenu.ISCAT.add_checkbutton(label='Exhaustive',variable=iscat_ex) decodemenu.JT65=Menu(decodemenu,tearoff=0) decodemenu.JT65.add_checkbutton(label='Only EME calls in Deep Search',variable=neme) decodemenu.JT65.add_checkbutton(label='No Shorthand decodes',variable=noshjt65all) decodemenu.JT65.add_checkbutton(label='No Shorthands if Tx 1',variable=noshjt65) decodemenu.JT65.add_checkbutton(label='Quick Decode',variable=qdecode) decodemenu.JT65.add_separator() decodemenu.JT65.add_radiobutton(label = 'No Deep Search', variable=ndepth, value=0) decodemenu.JT65.add_radiobutton(label = 'Normal Deep Search', variable=ndepth, value=1) decodemenu.JT65.add_radiobutton(label = 'Aggressive Deep Search', variable=ndepth, value=2) decodemenu.JT65.add_radiobutton(label ='Include Average in Aggressive Deep Search', variable=ndepth, value=3) ##decodemenu.add_cascade(label = 'ISCAT',menu=decodemenu.ISCAT) decodemenu.add_cascade(label = 'JT65',menu=decodemenu.JT65) if (sys.platform == 'darwin'): mbar.add_cascade(label="Decode", menu=decodemenu) #------------------------------------------------------ Save menu if (sys.platform != 'darwin'): savebutton = Menubutton(mbar, text = 'Save') savebutton.pack(side = LEFT) savemenu = Menu(savebutton, tearoff=use_tearoff) savebutton['menu'] = savemenu else: savemenu = Menu(mbar, tearoff=use_tearoff) nsave=IntVar() savemenu.add_radiobutton(label = 'None', variable=nsave,value=0) savemenu.add_radiobutton(label = 'Save decoded', variable=nsave,value=1) savemenu.add_radiobutton(label = 'Save if Auto On', variable=nsave,value=2) savemenu.add_radiobutton(label = 'Save all', variable=nsave,value=3) nsave.set(0) if (sys.platform == 'darwin'): mbar.add_cascade(label="Save", menu=savemenu) #------------------------------------------------------ Band menu if (sys.platform != 'darwin'): bandbutton = Menubutton(mbar, text = 'Band') bandbutton.pack(side = LEFT) bandmenu = Menu(bandbutton, tearoff=use_tearoff) bandbutton['menu'] = bandmenu else: bandmenu = Menu(mbar, tearoff=use_tearoff) nfreq=IntVar() bandmenu.add_radiobutton(label = '1.8', variable=nfreq,value=2) bandmenu.add_radiobutton(label = '3.5', variable=nfreq,value=4) bandmenu.add_radiobutton(label = '7', variable=nfreq,value=7) bandmenu.add_radiobutton(label = '10', variable=nfreq,value=10) bandmenu.add_radiobutton(label = '14', variable=nfreq,value=14) bandmenu.add_radiobutton(label = '18', variable=nfreq,value=18) bandmenu.add_radiobutton(label = '21', variable=nfreq,value=21) bandmenu.add_radiobutton(label = '24', variable=nfreq,value=24) bandmenu.add_radiobutton(label = '28', variable=nfreq,value=28) bandmenu.add_radiobutton(label = '50', variable=nfreq,value=50) bandmenu.add_radiobutton(label = '70', variable=nfreq,value=70) bandmenu.add_radiobutton(label = '144', variable=nfreq,value=144) bandmenu.add_radiobutton(label = '222', variable=nfreq,value=222) bandmenu.add_radiobutton(label = '432', variable=nfreq,value=432) bandmenu.add_radiobutton(label = '1296', variable=nfreq,value=1296) bandmenu.add_radiobutton(label = '2304', variable=nfreq,value=2304) bandmenu.add_radiobutton(label = '3456', variable=nfreq,value=3456) bandmenu.add_radiobutton(label = '5760', variable=nfreq,value=5760) bandmenu.add_radiobutton(label = '10368', variable=nfreq,value=10368) nfreq.set(144) if (sys.platform == 'darwin'): mbar.add_cascade(label="Band", menu=bandmenu) #------------------------------------------------------ Help menu if (sys.platform != 'darwin'): helpbutton = Menubutton(mbar, text = 'Help') helpbutton.pack(side = LEFT) helpmenu = Menu(helpbutton, tearoff=0) helpbutton['menu'] = helpmenu else: helpmenu = Menu(mbar, tearoff=0) helpmenu.add('command',label="Online User's Guide",command=usersguide) helpmenu.add('command',label="Online WSJT9 Supplement", \ command=wsjt9supp,accelerator='F9') helpmenu.add('command', label = 'Keyboard shortcuts', command = shortcuts, \ accelerator='F1') helpmenu.add('command', label = 'Special mouse commands', \ command = mouse_commands, accelerator='Shift+F1') helpmenu.add('command', label = 'What message to send?', \ command = what2send, accelerator='F5') helpmenu.add('command', label = 'Examples of minimal JT65 QSOs', \ command = minimal_qso, accelerator='Shift+F5') helpmenu.add('command', label = 'Available suffixes and add-on prefixes', \ command = prefixes) helpmenu.add('command', label = 'About WSJT', command = about, \ accelerator='Ctrl+F1') if (sys.platform == 'darwin'): mbar.add_cascade(label="Help", menu=helpmenu) #------------------------------------------------------ Graphics areas iframe1 = Frame(frame, bd=1, relief=SUNKEN) graph1=Canvas(iframe1, bg='black', width=500, height=120,cursor='crosshair') Widget.bind(graph1,"",dtdf_change) Widget.bind(graph1,"",mouse_click_g1) Widget.bind(graph1,"",double_click_g1) Widget.bind(graph1,"",mouse_up_g1) if (sys.platform != 'darwin'): Widget.bind(graph1,"",mouse_click_g1) else: Widget.bind(graph1,"",mouse_click_g1) graph1.pack(side=LEFT) graph2=Canvas(iframe1, bg='black', width=150, height=120,cursor='crosshair') graph2.pack(side=LEFT) g2font=graph2.option_get("font","font") if g2font!="": g.g2font=g2font iframe1.pack(expand=1, fill=X, padx=4) #------------------------------------------------------ Labels under graphics iframe2a = Frame(frame, bd=1, relief=FLAT, height=15) lab1=Label(iframe2a, text='Time (s)') lab1.place(x=250, y=6, anchor=CENTER) lab3=Label(iframe2a, text=' ') lab3.place(x=400,y=6, anchor=CENTER) lab4=Label(iframe2a, text='1 2 3') lab4.place(x=593,y=6, anchor=CENTER) iframe2a.pack(expand=1, fill=X, padx=1) iframe2 = Frame(frame, bd=1, relief=FLAT,height=15) lab2=Label(iframe2, text='FileID Sync dB DT DF W') lab2.place(x=3,y=6, anchor='w') lab5=Label(iframe2, text='Freq (kHz)') lab5.place(x=580,y=6, anchor=CENTER) lab6=Label(iframe2a,text='0.0',bg='green') lab6.place(x=40,y=6, anchor=CENTER) lab7=Label(iframe2a,text='F3',fg='gray85') lab7.place(x=495,y=6, anchor=CENTER) lab8=Label(iframe2a,text='1.0000 1.0000',fg='gray85') lab8.place(x=135,y=6, anchor=CENTER) iframe2.pack(expand=1, fill=X, padx=4) #-------------------------------------------------------- Decoded text iframe4 = Frame(frame, bd=1, relief=SUNKEN) text=Text(iframe4, height=6, width=80) text.bind('',dbl_click_text) if (sys.platform != 'darwin'): text.bind('',dbl_click3_text) else: text.bind('',dbl_click3_text) text.bind('',textkey) root.bind_all('', shortcuts) root.bind_all('', mouse_commands) root.bind_all('', about) root.bind_all('', options1) root.bind_all('', txmute) root.bind_all('', clrToRadio) root.bind_all('', quit) root.bind_all('', what2send) root.bind_all('', minimal_qso) root.bind_all('', opennext) root.bind_all('', decodeall) root.bind_all('', wsjt9supp) root.bind_all('', showspecjt) root.bind_all('', astro1) root.bind_all('', left_arrow) root.bind_all('', right_arrow) root.bind_all('',btx1) root.bind_all('',btx2) root.bind_all('',btx3) root.bind_all('',btx4) root.bind_all('',btx5) root.bind_all('',btx6) root.bind_all('',toggleauto) root.bind_all('',toggleauto) root.bind_all('',clear_avg) root.bind_all('',clear_avg) root.bind_all('',decode) root.bind_all('',decode) root.bind_all('',force_decode) root.bind_all('',force_decode) root.bind_all('',erase) root.bind_all('',erase) root.bind_all('',toggle_freeze) root.bind_all('',toggle_freeze) root.bind_all('',GenStdMsgs) root.bind_all('',GenStdMsgs) root.bind_all('', GenAltMsgs) root.bind_all('', GenAltMsgs) root.bind_all('',decode_include) root.bind_all('',decode_include) root.bind_all('',lookup) root.bind_all('',lookup) root.bind_all('',lookup_gen) root.bind_all('',lookup_gen) root.bind_all('',monitor) root.bind_all('',monitor) root.bind_all('',txstop) root.bind_all('',txstop) root.bind_all('',openfile) root.bind_all('',openfile) root.bind_all('',logqso) root.bind_all('',logqso) root.bind_all('',setrpt) root.bind_all('',setrpt) root.bind_all('',stopmon) root.bind_all('',stopmon) root.bind_all('',savelast) root.bind_all('',savelast) root.bind_all('',decode_exclude) root.bind_all('',decode_exclude) root.bind_all('',toggle_zap) root.bind_all('',toggle_zap) text.pack(side=LEFT, fill=X, padx=1) sb = Scrollbar(iframe4, orient=VERTICAL, command=text.yview) sb.pack(side=RIGHT, fill=Y) text.configure(yscrollcommand=sb.set) iframe4.pack(expand=1, fill=X, padx=4) iframe4b = Frame(frame, bd=1, relief=SUNKEN) avetext=Text(iframe4b, height=2, width=80) avetext.bind('',dbl_click_ave) avetext.bind('',avetextkey) avetext.pack(side=LEFT, fill=X, padx=1) iframe4b.pack(expand=1, fill=X, padx=4) #------------------------------------------------------- Button Bar iframe4c = Frame(frame, bd=1, relief=SUNKEN) blogqso=Button(iframe4c, text='Log QSO',underline=4,command=logqso, padx=1,pady=1) bstop=Button(iframe4c, text='Stop',underline=0,command=stopmon, padx=1,pady=1) bmonitor=Button(iframe4c, text='Monitor',underline=0,command=monitor, padx=1,pady=1) ##bsavelast=Button(iframe4c, text='Save',underline=2,command=savelast, ## padx=1,pady=1) bdecode=Button(iframe4c, text='Decode',underline=0,command=decode, padx=1,pady=1) berase=Button(iframe4c, text='Erase',underline=0,command=erase, padx=1,pady=1) bclravg=Button(iframe4c, text='Clear Avg',underline=0,command=clear_avg, padx=1,pady=1) binclude=Button(iframe4c, text='Include',underline=0, command=decode_include,padx=1,pady=1) bexclude=Button(iframe4c, text='Exclude',underline=1, command=decode_exclude,padx=1,pady=1) btxstop=Button(iframe4c,text='TxStop',underline=4,command=txstop, padx=1,pady=1) blogqso.pack(side=LEFT,expand=1,fill=X) bstop.pack(side=LEFT,expand=1,fill=X) bmonitor.pack(side=LEFT,expand=1,fill=X) ##bsavelast.pack(side=LEFT,expand=1,fill=X) bdecode.pack(side=LEFT,expand=1,fill=X) berase.pack(side=LEFT,expand=1,fill=X) bclravg.pack(side=LEFT,expand=1,fill=X) binclude.pack(side=LEFT,expand=1,fill=X) bexclude.pack(side=LEFT,expand=1,fill=X) btxstop.pack(side=LEFT,expand=1,fill=X) iframe4c.pack(expand=1, fill=X, padx=4) #-----------------------------------------------------General control area iframe5 = Frame(frame, bd=1, relief=FLAT,height=180) #------------------------------------------------------ "Other station" info f5a=Frame(iframe5,height=170,bd=2,relief=GROOVE) labToRadio=Label(f5a,text='To radio:', width=9, relief=FLAT) labToRadio.grid(column=0,row=0) ToRadio=Entry(f5a,width=12) ToRadio.insert(0,'W8WN') ToRadio.grid(column=1,row=0,pady=3) ToRadio.bind('',lookup) bLookup=Button(f5a, text='Lookup',underline=0,command=lookup,padx=1,pady=1) bLookup.grid(column=2,row=0,sticky='EW',padx=4) labGrid=Label(f5a,text='Grid:', width=9, relief=FLAT) labGrid.grid(column=0,row=1) HisGrid=Entry(f5a,width=12) HisGrid.grid(column=1,row=1,pady=1) bAdd=Button(f5a, text='Add',command=addtodb,padx=1,pady=1) bAdd.grid(column=2,row=1,sticky='EW',padx=4) labHotAB=Label(f5a,bg='#FFCCFF',text='HotA: 247') labHotAB.grid(column=0,row=2,sticky='EW',padx=4,pady=3) labAz=Label(f5a,text='Az 257 El 15',width=11) labAz.grid(column=1,row=2) labDist=Label(f5a,text='16753 km') labDist.grid(column=2,row=2) #------------------------------------------------------ Date and Time ldate=Label(f5a, bg='black', fg='yellow', width=11, bd=4, text='2005 Apr 22\n01:23:45', relief=RIDGE, justify=CENTER, font=(font1,16)) ldate.grid(column=0,columnspan=2,row=3,rowspan=2,padx=2,pady=2) ldsec=Label(f5a, bg='white', fg='black', text='Dsec 0.0', width=8, relief=RIDGE) ldsec.grid(column=2,row=4,ipadx=3,padx=2,pady=0) f5a.pack(side=LEFT,expand=1,fill=BOTH) #------------------------------------------------------ Rx parameters f5b=Frame(iframe5,bd=0) f5b1=Frame(f5b,bd=2,relief=GROOVE) f5b1.grid(column=0,row=0,padx=2,sticky='EW') lsync=Label(f5b1, bg='white', fg='black', text='Sync 1', width=8, relief=RIDGE) lsync.grid(column=0,row=0,padx=2,sticky='EW') Widget.bind(lsync,'',incsync) if (sys.platform != 'darwin'): Widget.bind(lsync,'',decsync) else: Widget.bind(lsync,'',decsync) cbzap=Checkbutton(f5b1,text='Zap',underline=0,variable=nzap) cbzap.grid(column=1,row=0,padx=2,sticky='W') shrx=Checkbutton(f5b1,text='Rx ST',variable=nshrx,command=restart2) shrx.grid(column=1,row=2,sticky='W',padx=2) cbfreeze=Checkbutton(f5b1,text='Freeze',underline=0,variable=nfreeze) cbfreeze.grid(column=0,row=2,padx=2,sticky='W') cbafc=Checkbutton(f5b1,text='AFC',variable=nafc) cbafc.grid(column=1,row=1,padx=2,sticky='W') ##lspace=Label(f5b1, text='') ##lspace.grid(column=0,row=5,padx=2,pady=5,sticky='W') ltol=Label(f5b1, bg='white', fg='black', text='Tol 400', width=8, relief=RIDGE) ltol.grid(column=0,row=1,padx=2,sticky='EW') ##sbsync=Spinbox(f5b,from_=-20,to=10,bg='white',width=4,textvariable=nsync) ##sbsync.grid(column=0,row=4) ##nsync.set(1) ##sbtol=Spinbox(f5b,values=(10,20,50,100,200,500,1000),bg='white', \ ## width=4,textvariable=jtol) ##sbtol.grid(column=0,row=5) ##jtol.set(200) Widget.bind(ltol,'',inctol) Widget.bind(ldsec,'',incdsec) if (sys.platform != 'darwin'): Widget.bind(ldsec,'',decdsec) Widget.bind(ltol,'',dectol) else: Widget.bind(ldsec,'',decdsec) Widget.bind(ltol,'',dectol) #------------------------------------------------------ Tx parameters f5b2=Frame(f5b,bd=2,relief=GROOVE) f5b2.grid(column=0,row=1,padx=2,sticky='EW') txfirst=Checkbutton(f5b2,text='Tx First',justify=RIGHT,variable=TxFirst) txfirst.grid(column=0,row=0,sticky='W',padx=2) shmsg=Checkbutton(f5b2,text='Tx ST',justify=RIGHT,variable=ShOK, command=restart2) shmsg.grid(column=1,row=0,sticky='W',padx=2) report=Entry(f5b2, width=4) report.insert(0,'26') report.grid(column=1,row=1,sticky='W',padx=7) report.bind('',GenStdMsgs) labreport=Label(f5b2,text='Rpt:',width=4,underline=0) labreport.grid(column=0,row=1,sticky='E',padx=0) btxdf=Button(f5b2,text=' TxDF = 0 ',command=toggletxdf,padx=1,pady=1) btxdf.grid(column=1,row=0,sticky='EW',padx=2) f5b3=Frame(f5b,bd=2,relief=GROOVE) f5b3.grid(column=0,row=2,padx=2,sticky='EW') genmsg=Button(f5b3,text=' Gen Msgs ',underline=1,command=GenStdMsgs, padx=1,pady=2) genmsg.grid(column=0,row=0,sticky='W',padx=2) auto=Button(f5b3,text='Auto is Off',underline=0,command=toggleauto, padx=2,pady=2) auto.focus_set() auto.grid(column=1,row=0,sticky='EW',padx=2) f5b.pack(side=LEFT,expand=0,fill=BOTH) #------------------------------------------------------ Tx params and msgs f5c=Frame(iframe5,bd=2,relief=GROOVE) ##f5c2=Frame(f5c,bd=0) ##f5c2.grid(column=0,row=1,sticky='W',padx=8) ntx=IntVar() tx1=Entry(f5c,width=32) rb1=Radiobutton(f5c,value=1,variable=ntx) b1=Button(f5c, text='Tx1',underline=2,command=btx1,padx=1,pady=1) tx1.grid(column=1,row=0) rb1.grid(column=2,row=0) b1.grid(column=3,row=0) tx2=Entry(f5c,width=32) rb2=Radiobutton(f5c,value=2,variable=ntx) b2=Button(f5c, text='Tx2',underline=2,command=btx2,padx=1,pady=1) tx2.grid(column=1,row=1) rb2.grid(column=2,row=1) b2.grid(column=3,row=1) tx3=Entry(f5c,width=32) rb3=Radiobutton(f5c,value=3,variable=ntx) b3=Button(f5c, text='Tx3',underline=2,command=btx3,padx=1,pady=1) tx3.grid(column=1,row=2) rb3.grid(column=2,row=2) b3.grid(column=3,row=2) tx4=Entry(f5c,width=32) rb4=Radiobutton(f5c,value=4,variable=ntx) b4=Button(f5c, text='Tx4',underline=2,command=btx4,padx=1,pady=1) tx4.grid(column=1,row=3) rb4.grid(column=2,row=3) b4.grid(column=3,row=3) tx5=Entry(f5c,width=32) rb5=Radiobutton(f5c,value=5,variable=ntx) b5=Button(f5c, text='Tx5',underline=2,command=btx5,padx=1,pady=1) tx5.grid(column=1,row=4) rb5.grid(column=2,row=4) b5.grid(column=3,row=4) tx6=Entry(f5c,width=32) rb6=Radiobutton(f5c,value=6,variable=ntx) b6=Button(f5c, text='Tx6',underline=2,command=btx6,padx=1,pady=1) tx6.grid(column=1,row=5) rb6.grid(column=2,row=5) b6.grid(column=3,row=5) f5c.pack(side=LEFT,fill=BOTH) iframe5.pack(expand=1, fill=X, padx=4) #------------------------------------------------------------ Status Bar iframe6 = Frame(frame, bd=1, relief=SUNKEN) msg1=Message(iframe6, text=' ', width=300,relief=SUNKEN) msg1.pack(side=LEFT, fill=X, padx=1) msg2=Message(iframe6, text='Message #2', width=300,relief=SUNKEN) msg2.pack(side=LEFT, fill=X, padx=1) msg3=Message(iframe6,width=300,relief=SUNKEN) msg3.pack(side=LEFT, fill=X, padx=1) msg4=Message(iframe6, text='Message #4', width=300,relief=SUNKEN) msg4.pack(side=LEFT, fill=X, padx=1) msg5=Message(iframe6, text='Message #5', width=300,relief=SUNKEN) msg5.pack(side=LEFT, fill=X, padx=1) ##msg6=Message(iframe6, text='', width=300,relief=SUNKEN) ##msg6.pack(side=LEFT, fill=X, padx=1) Widget.bind(msg5,'',inctrperiod) if (sys.platform != 'darwin'): Widget.bind(msg5,'',dectrperiod) else: Widget.bind(msg5,'',dectrperiod) msg7=Message(iframe6, text=' ', width=300,relief=SUNKEN) msg7.pack(side=RIGHT, fill=X, padx=1) iframe6.pack(expand=1, fill=X, padx=4) frame.pack() ldate.after(100,update) lauto=0 isync=1 ntx.set(1) ndepth.set(0) from WsjtMod import options options.defaults() ModeFSK441() lookup() balloon.unbind(ToRadio) g.astro_geom0="+25+25" Audio.gcom1.mute=0 Audio.gcom2.nforce=1 Audio.gcom2.mode4=1 #---------------------------------------------------------- Process INI file try: f=open(appdir+'/WSJT.INI',mode='r') params=f.readlines() except: params="" if g.Win32: options.PttPort.set("0") else: options.PttPort.set("/dev/ttyS0") Audio.gcom2.nport=0 try: for i in range(len(params)): key,value=params[i].split() if key == 'WSJTGeometry': root.geometry(value) elif key == 'Mode': mode.set(value) if value=='FSK441': ModeFSK441() elif value=='JT65A': ModeJT65A() elif value=='JT65B': ModeJT65B() elif value=='JT65C': ModeJT65C() elif value=='JT65B2': ModeJT65B2() elif value=='JT65C2': ModeJT65C2() elif value=='CW': ModeCW() elif value=='ISCAT-A': ModeISCAT_A() elif value=='ISCAT-B': ModeISCAT_B() elif value=='Diana': ModeDiana() elif value=='JTMS': ModeJTMS() elif value[:3]=='JT4': ModeJT4() elif value=='Echo': ModeEcho() elif value=='Measure': ModeMeasure() elif key == 'MyCall': options.MyCall.set(value) elif key == 'MyGrid': options.MyGrid.set(value) elif key == 'HisCall': hiscall=value if hiscall=="______": hiscall="" ToRadio.delete(0,END) ToRadio.insert(0,hiscall) elif key == 'HisGrid': hisgrid=value if hisgrid == "XX00xx": lookup() HisGrid.delete(0,END) HisGrid.insert(0,hisgrid) # elif key == 'RxDelay': options.RxDelay.set(value) # elif key == 'TxDelay': options.TxDelay.set(value) elif key == 'IDinterval': options.IDinterval.set(value) elif key == 'PttPort': try: options.PttPort.set(value) try: Audio.gcom2.nport=int(options.PttPort.get()) except: Audio.gcom2.nport=0 except: if g.Win32: options.PttPort.set("0") else: options.PttPort.set("/dev/ttyS0") Audio.gcom2.nport=0 Audio.gcom2.pttport=(options.PttPort.get()+(' '*80))[:80] elif key == 'Mileskm': options.mileskm.set(value) elif key == 'nDTR': options.ndtr.set(value) elif key == 'MsgStyle': options.ireport.set(value) elif key == 'Region': options.iregion.set(value) elif key == 'AudioIn': try: g.ndevin.set(value) except: g.ndevin.set(0) g.DevinName.set(value) options.DevinName.set(value) Audio.gcom1.devin_name=(options.DevinName.get()+(' '*12))[:12] elif key == 'AudioOut': try: g.ndevout.set(value) except: g.ndevout.set(0) g.DevoutName.set(value) options.DevoutName.set(value) Audio.gcom1.devout_name=(options.DevoutName.get()+(' '*12))[:12] elif key == 'SamFacIn': options.samfacin.set(value) elif key == 'SamFacOut': options.samfacout.set(value) elif key == 'Template1': options.Template1.set(value.replace("_"," ")) elif key == 'Template2': options.Template2.set(value.replace("_"," ")) elif key == 'Template3': options.Template3.set(value.replace("_"," ")) elif key == 'Template4': options.Template4.set(value.replace("_"," ")) elif key == 'Template5': options.Template5.set(value.replace("_"," ")) elif key == 'Template6': options.Template6.set(value.replace("_"," ")) if options.Template6.get()==" ": options.Template6.set("") elif key == 'AddPrefix': options.addpfx.set(value.replace("_"," ").lstrip()) elif key == 'AuxRA': options.auxra.set(value) elif key == 'AuxDEC': options.auxdec.set(value) elif key == 'AzElDir': options.azeldir.set(value.replace("#"," ")) try: os.stat(options.azeldir.get()) except: options.azeldir.set(os.getcwd()) elif key == 'Ntc': options.ntc.set(value) elif key == 'fRIT': options.fRIT.set(value) elif key == 'Dither': options.dither.set(value) ## elif key == 'Necho': options.necho.set(value) ## elif key == 'Dlatency': options.dlatency.set(value) elif key == 'MyName': options.myname.set(value) elif key == 'HighPri': options.HighPri.set(value) elif key == 'TxFirst': TxFirst.set(value) elif key == 'KB8RQ': kb8rq.set(value) elif key == 'K2TXB': k2txb.set(value) elif key == 'SetSeq': setseq.set(value) elif key == 'Report': report.delete(0,END) report.insert(0,value) elif key == 'ShOK': ShOK.set(value) elif key == 'Nsave': nsave.set(value) elif key == 'Band': nfreq.set(value) elif key == 'S441': isync441=int(value) elif key == 'Siscat': isync_iscat=int(value) elif key == 'Sync': isync65=int(value) elif key == 'Zap': nzap.set(value) elif key == 'NAFC': nafc.set(value) elif key == 'nshrx': nshrx.set(value) elif key == 'NoShJT65all': noshjt65all.set(value) elif key == 'NoShJT65': noshjt65.set(value) elif key == 'QDecode': qdecode.set(value) elif key == 'NEME': neme.set(value) elif key == 'NDepth': ndepth.set(value) elif key == 'Debug': ndebug.set(value) elif key == 'LowBeacon': nlowbeacon.set(value) elif key == 'Monitor': nmonitor.set(value) elif key == 'HisCall': Audio.gcom2.hiscall=(value+' '*12)[:12] ToRadio.delete(0,99) ToRadio.insert(0,value) lookup() #Maybe should save HisGrid, instead? elif key == 'MRUDir': mrudir=value.replace("#"," ") elif key == 'AstroGeometry': g.astro_geom0 =value elif key == 'CWTRPeriod': ncwtrperiod=int(value) if mode.get()[:2]=="CW": Audio.gcom1.trperiod=ncwtrperiod else: pass except: print 'Error reading WSJT.INI, continuing with defaults.' print key,value g.mode=mode.get() if mode.get()=='FSK441' or mode.get()=='JTMS': isync=isync441 elif mode.get()[:5]=="ISCAT": isync=isync_iscat if mode.get()[6:7]=='A': Audio.gcom2.mode4=1 if mode.get()[6:7]=='B': Audio.gcom2.mode4=2 elif mode.get()[:4]=='JT65': isync=isync65 elif mode.get()[:3]=='JT4': if mode.get()[3:4]=='A': Audio.gcom2.mode4=1 if mode.get()[3:4]=='B': Audio.gcom2.mode4=2 if mode.get()[3:4]=='C': Audio.gcom2.mode4=4 if mode.get()[3:4]=='D': Audio.gcom2.mode4=9 if mode.get()[3:4]=='E': Audio.gcom2.mode4=18 if mode.get()[3:4]=='F': Audio.gcom2.mode4=36 if mode.get()[3:4]=='G': Audio.gcom2.mode4=72 lsync.configure(text=slabel+str(isync)) Audio.gcom2.azeldir=(options.azeldir.get()+' '*80)[:80] Audio.gcom2.ndepth=ndepth.get() Audio.gcom2.nhighpri=options.HighPri.get() Audio.gcom4.addpfx=(options.addpfx.get().lstrip()+(' '*8))[:8] if nmonitor.get(): monitor() else: stopmon() if g.Win32: root.iconbitmap("wsjt.ico") root.title(' WSJT 9.3 by K1JT') from WsjtMod import astro from WsjtMod import specjt # SpecJT has a "mainloop", so does not return until it is terminated. #root.mainloop() #Superseded by mainloop in SpecJT # Clean up and save user options before terminating f=open(appdir+'/WSJT.INI',mode='a') root_geom=root_geom[root_geom.index("+"):] f.write("WSJTGeometry " + root_geom + "\n") f.write("Mode " + g.mode + "\n") f.write("MyCall " + options.MyCall.get() + "\n") f.write("MyGrid " + options.MyGrid.get() + "\n") t=g.ftnstr(Audio.gcom2.hiscall) if t[:1]==" ": t="______" f.write("HisCall " + t + "\n") t=g.ftnstr(Audio.gcom2.hisgrid) if t==" ": t="XX00xx" f.write("HisGrid " + t + "\n") #f.write("RxDelay " + str(options.RxDelay.get()) + "\n") #f.write("TxDelay " + str(options.TxDelay.get()) + "\n") f.write("IDinterval " + str(options.IDinterval.get()) + "\n") f.write("PttPort " + str(options.PttPort.get()) + "\n") f.write("Mileskm " + str(options.mileskm.get()) + "\n") f.write("nDTR " + str(options.ndtr.get()) + "\n") f.write("MsgStyle " + str(options.ireport.get()) + "\n") f.write("Region " + str(options.iregion.get()) + "\n") f.write("AudioIn " + options.DevinName.get() + "\n") f.write("AudioOut " + options.DevoutName.get() + "\n") f.write("SamFacIn " + str(options.samfacin.get()) + "\n") f.write("SamFacOut " + str(options.samfacout.get()) + "\n") if options.Template6.get()=="": options.Template6.set("_") f.write("Template1 " + options.Template1.get().replace(" ","_") + "\n") f.write("Template2 " + options.Template2.get().replace(" ","_") + "\n") f.write("Template3 " + options.Template3.get().replace(" ","_") + "\n") f.write("Template4 " + options.Template4.get().replace(" ","_") + "\n") f.write("Template5 " + options.Template5.get().replace(" ","_") + "\n") f.write("Template6 " + options.Template6.get().replace(" ","_") + "\n") if options.addpfx.get().lstrip()=="": options.addpfx.set("_") f.write("AddPrefix " + options.addpfx.get().lstrip() + "\n") if options.auxra.get()=="": options.auxra.set("0") if options.auxdec.get()=="": options.auxdec.set("0") f.write("AuxRA " + options.auxra.get() + "\n") f.write("AuxDEC " + options.auxdec.get() + "\n") f.write("AzElDir " + str(options.azeldir.get()).replace(" ","#") + "\n") f.write("Ntc " + str(options.ntc.get()) + "\n") f.write("fRIT " + str(options.fRIT.get()) + "\n") f.write("Dither " + str(options.dither.get()) + "\n") ##f.write("Necho " + str(options.necho.get()) + "\n") ##f.write("Dlatency " + str(options.dlatency.get()) + "\n") f.write("HighPri " + str(options.HighPri.get()) + "\n") f.write("TxFirst " + str(TxFirst.get()) + "\n") f.write("KB8RQ " + str(kb8rq.get()) + "\n") f.write("K2TXB " + str(k2txb.get()) + "\n") f.write("SetSeq " + str(setseq.get()) + "\n") f.write("Report " + g.report + "\n") f.write("ShOK " + str(ShOK.get()) + "\n") f.write("Nsave " + str(nsave.get()) + "\n") f.write("Band " + str(nfreq.get()) + "\n") f.write("S441 " + str(isync441) + "\n") f.write("Siscat " + str(isync_iscat) + "\n") f.write("Sync " + str(isync65) + "\n") f.write("Zap " + str(nzap.get()) + "\n") f.write("NAFC " + str(nafc.get()) + "\n") f.write("nshrx " + str(nshrx.get()) + "\n") f.write("NoShJT65all " + str(noshjt65all.get()) + "\n") f.write("NoShJT65 " + str(noshjt65.get()) + "\n") f.write("QDecode " + str(qdecode.get()) + "\n") f.write("NEME " + str(neme.get()) + "\n") f.write("NDepth " + str(ndepth.get()) + "\n") f.write("Debug " + str(ndebug.get()) + "\n") f.write("LowBeacon " + str(nlowbeacon.get()) + "\n") f.write("Monitor " + str(nmonitor.get()) + "\n") #f.write("TRPeriod " + str(Audio.gcom1.trperiod) + "\n") mrudir2=mrudir.replace(" ","#") f.write("MRUDir " + mrudir2 + "\n") if g.astro_geom[:7]=="200x200": g.astro_geom="316x416" + g.astro_geom[7:] f.write("AstroGeometry " + g.astro_geom + "\n") f.write("CWTRPeriod " + str(ncwtrperiod) + "\n") f.close() Audio.ftn_quit() Audio.gcom1.ngo=0 #Terminate audio streams Audio.gcom2.lauto=0 Audio.gcom1.txok=0 time.sleep(1) wsjt_9.3.r2792/gentone.f0000664000175000017500000000043611034432061013177 0ustar jtnjtn subroutine gentone(x,n,k,samfac) real*4 x(512) real*8 dt,f,twopi,samfac twopi=8*datan(1.d0) dt=1.d0/(samfac*11025.d0) f=(n+51)*11025.d0/512.d0 do i=1,512 x(i)=sin(twopi*i*dt*f) enddo k=k+512 return end wsjt_9.3.r2792/decode3.f900000664000175000017500000000554211563244773013244 0ustar jtnjtnsubroutine decode3(d2,jz,istart,filename) integer*2 d2(jz),d2d(125*11025) character*24 filename character FileID*40 include 'gcom1.f90' include 'gcom2.f90' if(ichar(filename(1:1)).eq.0) go to 999 FileID=filename decodedfile=filename lumsg=11 nmode=1 if(mode(1:4).eq.'JT65') then nmode=2 if(mode(5:5).eq.'A') mode65=1 if(mode(5:5).eq.'B') mode65=2 if(mode(5:5).eq.'C') mode65=4 endif nfast=1 if(mode.eq.'JT65B2' .or. mode.eq.'JT65C2') nfast=2 if(mode(1:4).eq.'Echo') nmode=3 if(mode(1:2).eq.'CW') nmode=5 if(mode(1:3).eq.'JT4') nmode=7 if(mode(1:4).eq.'JTMS') nmode=8 if(mode(1:5).eq.'ISCAT') nmode=9 if(mode(1:5).eq.'Diana') nmode=10 sum=0. do i=1,jz sum=sum+d2(i) enddo nave=nint(sum/jz) do i=1,jz d2(i)=d2(i)-nave d2d(i)=d2(i) enddo nseg=1 if(mode(1:4).eq.'JT65' .or. nmode.ge.6) then i=index(FileID,'.')-3 if(FileID(i:i).eq.'1'.or.FileID(i:i).eq.'3'.or.FileID(i:i).eq.'5' & .or.FileID(i:i).eq.'7'.or.FileID(i:i).eq.'9') nseg=2 endif open(23,file=appdir(:lenappdir)//'/CALL3.TXT',status='unknown') if(nadd5.eq.1) then ! Insert 5 s of zeroes at start of data. nzero=5*11025 do i=jz,nzero+1,-1 d2d(i)=d2d(i-nzero) enddo do i=1,nzero d2d(i)=0 enddo jz=min(60*11025,jz+nzero) endif mb0=mousebutton if(jz.gt.14*11025) call dtrim(d2d,jz) nfast=1 if(mode.eq.'JT65B2' .or. mode.eq.'JT65C2') nfast=2 call wsjt1(d2d,jz,istart,samfacin,FileID,ndepth, & MinSigdB,DFTolerance,MouseButton,NClearAve,nforce, & nMode,NFreeze,NAFC,NZap,mode65,nfast,mode4,idf,ntdecode, & MyCall,HisCall,HisGrid,neme,ntx2,ndebug,s2, & ps0,npkept,lumsg,nslim2,psavg,ccf,Nseg, & MouseDF,NAgain,LDecoded,nspecial,ndf,ss1,ss2) nforce=0 ntx2=0 close(23) ! See whether this file should be saved or erased from disk if(nsave.eq.1 .and. ldecoded) filetokilla='' if(nsave.eq.3 .or. (nsave.eq.2 .and. lauto.eq.1)) then filetokilla='' filetokillb='' endif if(nsavelast.eq.1) filetokillb='' nsavelast=0 ierr=unlink(filetokillb) nclearave=0 nagain=0 if(mode(1:4).eq.'JT65' .or. mode(1:5).eq.'Diana' .or. mode(1:3).eq.'JT4') then call pix2d65(d2d,jz) else if(mode.eq.'FSK441' .or. mode(1:4).eq.'JTMS') then nz=s2(1,1) if(nz.gt.0) call pix2d(d2d,jz,mb0,mode,s2,64,nz,b) else if(mode(1:5).eq.'ISCAT' .and. mb0.le.1) then nz=s2(1,1) if(nz.gt.0) call pix2d(d2d,jz,mb0,mode,s2,64,nz,b) endif ! Compute red and magenta cutves for small plot area, FSK441/JTMS only if(mode.eq.'FSK441' .or. mode.eq.'JTMS') then do i=1,128 if(ps0(i).gt.0.0) ps0(i)=10.0*log10(ps0(i)) if(psavg(i).gt.0.0) psavg(i)=10.0*log10(psavg(i)) enddo endif 999 return end subroutine decode3 wsjt_9.3.r2792/smooth.f0000664000175000017500000000027711015074716013064 0ustar jtnjtn subroutine smooth(x,nz) real x(nz) x0=x(1) do i=2,nz-1 x1=x(i) x(i)=0.5*x(i) + 0.25*(x0+x(i+1)) x0=x1 enddo return end wsjt_9.3.r2792/resample.c0000664000175000017500000000124511034705751013355 0ustar jtnjtn#include #include int resample_( float din[], float dout[], double *samfac, int *jz, int *ntype) { SRC_DATA src_data; int input_len; int output_len; int ierr; int nchan=1; double src_ratio; src_ratio=*samfac; input_len=*jz; output_len=(int) (input_len*src_ratio); src_data.data_in=din; src_data.data_out=dout; src_data.src_ratio=src_ratio; src_data.input_frames=input_len; src_data.output_frames=output_len; ierr=src_simple(&src_data,*ntype,nchan); *jz=output_len; /* printf("%d %d %d %d %f\n",input_len,output_len, src_data.input_frames_used, src_data.output_frames_gen,src_ratio); */ return ierr; } wsjt_9.3.r2792/morse.f0000664000175000017500000000613311015074716012675 0ustar jtnjtn subroutine morse(msg,idat,n) C Convert ascii message to a Morse code bit string. C Dash = 3 dots C Space between dots, dashes = 1 dot C Space between letters = 3 dots C Space between words = 7 dots character*22 msg integer*1 idat(460) integer*1 ic(21,38) data ic/ + 1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,20, + 1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,18, + 1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,16, + 1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,14, + 1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,12, + 1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,10, + 1,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,12, + 1,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,14, + 1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,16, + 1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,0,0,18, + 1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 6, + 1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,10, + 1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,12, + 1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 8, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2, + 1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,10, + 1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,10, + 1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 8, + 1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 4, + 1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,14, + 1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,10, + 1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,10, + 1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 8, + 1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 6, + 1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,12, + 1,0,1,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,12, + 1,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,14, + 1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 8, + 1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 6, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 4, + 1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 8, + 1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,10, + 1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,10, + 1,1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,12, + 1,1,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,14, + 1,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,12, + 1,1,1,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2/ !Incremental word space save C Find length of message do i=22,1,-1 if(msg(i:i).ne.' ') go to 1 enddo 1 msglen=i n=0 do k=1,msglen jj=ichar(msg(k:k)) if(jj.ge.97 .and. jj.le.122) jj=jj-32 !Convert lower to upper case if(jj.ge.48 .and. jj.le.57) j=jj-48 !Numbers if(jj.ge.65 .and. jj.le.90) j=jj-55 !Letters if(jj.eq.47) j=36 !Slash (/) if(jj.eq.32) j=37 !Word space j=j+1 C Insert this character nmax=ic(21,j) do i=1,nmax n=n+1 idat(n)=ic(i,j) enddo C Insert character space of 2 dit lengths: n=n+1 idat(n)=0 n=n+1 idat(n)=0 enddo C Insert word space at end of message do j=1,4 n=n+1 idat(n)=0 enddo return end wsjt_9.3.r2792/xfft.f0000664000175000017500000000024711015074716012517 0ustar jtnjtn subroutine xfft(x,nfft) C Real-to-complex FFT. real x(nfft) ! call four2(x,nfft,1,-1,0) call four2a(x,nfft,1,-1,0) return end wsjt_9.3.r2792/setupms.f900000664000175000017500000000224311461555650013425 0ustar jtnjtnsubroutine setupms(cw,cwb) ! Calculate the JTMS character waveforms. complex cw(56,0:63) complex cwb(56) integer nb(7) ! real*8 twopi,dt,f0,f1 character cc*64 ! 1 2 3 4 5 6 ! 0123456789012345678901234567890123456789012345678901234567890123 data cc/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ./?- _ @'/ nsps=8 twopi=8*atan(1.d0) dt=1.d0/11025.d0 !Sample interval f0=1155.46875d0 f1=1844.53125d0 dphi0=twopi*dt*f0 dphi1=twopi*dt*f1 do i=0,63 k=0 m=0 do n=5,0,-1 !Each character gets 6+1 bits k=k+1 nb(k)=iand(1,ishft(i,-n)) m=m+nb(k) enddo k=k+1 nb(k)=iand(m,1) !Insert parity bit phi=0. j=0 do k=1,7 !Generate the waveform if(nb(k).eq.0) then dphi=dphi0 else dphi=dphi1 endif do ii=1,nsps j=j+1 phi=phi+dphi cw(j,i)=cmplx(cos(phi),sin(phi)) enddo enddo enddo cwb=cw(1:56,57) return end subroutine setupms wsjt_9.3.r2792/bzap.f0000664000175000017500000000254111223404533012476 0ustar jtnjtn subroutine bzap(dat,jz,nadd,mode,fzap) parameter (NMAX=1024*1024) parameter (NMAXH=NMAX) real dat(jz),x(NMAX) real fzap(200) complex c(NMAX) equivalence (x,c) xn=log(float(jz))/log(2.0) n=xn if((xn-n).gt.0.) n=n+1 nfft=2**n nh=nfft/nadd nq=nh/2 do i=1,jz x(i)=dat(i) enddo if(nfft.gt.jz) call zero(x(jz+1),nfft-jz) call xfft(x,nfft) C This is a kludge: df=11025.0/(nadd*nfft) if(mode.eq.2) df=11025.0/(2*nadd*nfft) tol=10. itol=nint(2.0/df) do izap=1,200 if(fzap(izap).eq.0.0) goto 10 ia=(fzap(izap)-tol)/df ib=(fzap(izap)+tol)/df smax=0. ipk=0 !Shut up compiler warnings. -db do i=ia+1,ib+1 s=real(c(i))**2 + aimag(c(i))**2 if(s.gt.smax) then smax=s ipk=i endif enddo fzap(izap)=df*(ipk-1) do i=ipk-itol,ipk+itol c(i)=0. enddo enddo 10 ia=70/df do i=1,ia c(i)=0. enddo ia=2700.0/df do i=ia,nq+1 c(i)=0. enddo do i=2,nq c(nh+2-i)=conjg(c(i)) enddo call four2a(c,nh,1,1,-1) fac=1.0/nfft do i=1,jz/nadd dat(i)=fac*x(i) enddo return end wsjt_9.3.r2792/fivehz.h0000664000175000017500000000013611015074716013042 0ustar jtnjtn#include void addnoise_(int16_t *n2); void fivehztx_(void); void fivehz_(void); wsjt_9.3.r2792/searchms.f900000664000175000017500000000125511461555650013534 0ustar jtnjtnsubroutine searchms(cdat,npts,msg,ndi,rmax) parameter (NMAX=30*11025) !Max length of wave file complex cdat(npts) complex cwave(NMAX) character*28 msg !User message call genms(msg,1.d0,iwave,cwave,1,kz) r=0. rmax=0. do i1=1,npts-kz z=0. ss=0. do i=1,kz ss=ss + abs(cdat(i+i1-1)) z=z + cdat(i+i1-1)*conjg(cwave(i)) enddo r=abs(z)/ss ! write(53,3001) i1,r,abs(z) !3001 format(i8,2f12.3) if(r.gt.rmax) then rmax=r i1pk=i1 endif enddo nch=i1pk/56.0 ndi=i1pk - 56*nch if(ndi.gt.8) ndi=ndi-56 ! print*,'Z',i1pk,ndi,msg ! call flush(53) return end subroutine searchms wsjt_9.3.r2792/spec2d.f0000664000175000017500000000644411022616637012737 0ustar jtnjtn subroutine spec2d(data,jz,nstep,s2,nchan,nz,psavg0,sigma) C Computes 2d spectrogram for FSK441 single-tone search and waterfall C display. parameter (NFFT=256) parameter (NR=NFFT+2) parameter (NH=NFFT/2) parameter (NQ=NFFT/4) real data(jz) real s2(nchan,nz) real x(NR) real w1(7),w2(7) real psavg(128) real psavg0(128) real ps2(128) complex c(0:NH) common/acom/a1,a2,a3,a4 common/fcom/s(3100),indx(3100) equivalence (x,c) save df=11025.0/NFFT C Compute the 2d spectrogram s2(nchan,nz). Note that in s2 the frequency C bins are shifted down 5 bins from their natural positions. call set(0.0,psavg,NH) do n=1,nz j=1 + (n-1)*nstep call move(data(j),x,NFFT) call xfft(x,NFFT) sum=0. do i=1,NQ s2(i,n)=real(c(5+i))**2 + aimag(c(5+i))**2 sum=sum+s2(i,n) enddo s(n)=sum/NQ C Accumulate average spectrum for the whole file. do i=1,nh psavg0(i) = psavg0(i)+ real(c(i))**2 + aimag(c(i))**2 enddo enddo C Normalize and save a copy of psavg0 for plotting. Roll off the C spectrum at 300 and 3000 Hz. do i=1,nh psavg0(i)=3.e-5*psavg0(i)/nz f=df*i fac=1.0 if(f.lt.300.0) fac=f/300.0 if(f.gt.3000.0) fac=max(0.00333,(3300.0-f)/300.0) psavg0(i)=(fac**2)*psavg0(i) enddo C Compute an average spectrum from the weakest 25% of time slices. call indexx(nz,s,indx) call zero(ps2,NQ) do j=1,nz/4 k=indx(j) do i=1,NQ ps2(i+5)=ps2(i+5)+s2(i,k) enddo enddo ps2(1)=ps2(5) ps2(2)=ps2(5) ps2(3)=ps2(5) ps2(4)=ps2(5) sum=0. do i=6,59 sum=sum+ps2(i) enddo if(sum.eq.0.0) then sigma=-999. go to 999 endif C Compute a smoothed spectrum without local peaks, and find its max. smaxx=0. do i=4,NQ sum=0. do k=1,7 w1(k)=ps2(i+k-4) sum=sum+w1(k) enddo ave=sum/7.0 if(i.ge.14 .and. i.le.58) then call pctile(w1,w2,7,50,base) ave=0.25*(w2(1)+w2(2)+w2(3)+w2(4)) endif psavg(i)=ave smaxx=max(psavg(i),smaxx) enddo C Save scale factors for flattening spectra of pings. a1=1.0 a2=psavg(nint(2*441/df))/psavg(nint(3*441/df)) a3=psavg(nint(2*441/df))/psavg(nint(4*441/df)) a4=psavg(nint(2*441/df))/psavg(nint(5*441/df)) afac=4.0/(a1+a2+a3+a4) a1=afac*a1 a2=afac*a2 a3=afac*a3 a4=afac*a4 C Normalize 2D spectrum by the average based on weakest 25% of time C slices, smoothed, and with local peaks removed. do i=1,NQ do j=1,nz s2(i,j)=s2(i,j)/max(psavg(i+5),0.01*smaxx) enddo enddo C Find average of active spectral region, over the whole file. sum=0. do i=9,52 do j=1,nz sum=sum+s2(i,j) enddo enddo sigma=sum/(44*nz) 999 return end wsjt_9.3.r2792/Wsjt_Howto_MacOSX_10.6.html0000664000175000017500000001660711511311236016213 0ustar jtnjtnHowto Install WSJT on Mac OS X Snow Leopard

Notes by John Nelson G4KLA
6 January 2011
(with acknowledgment to Joe Large W6CQZ for breaking the ground.)


Mac OS X 10.6 (Snow Leopard) differs significantly from Mac OS X 10.5 (Leopard) in that compilations default to 64-bit operation instead of 32-bit. A new Fortran compiler is needed and must not co-exist with any previous compiler you might have installed. In addition, some compiler options that were available previously have now been abandoned. You will need some experience with using Unix commands but if what follows is too daunting, contact me and I will try and help. (If you want installation directions for an earlier version of Mac OS X such as 10.4 or 10.5 on either an PowerPC or Intel Mac, please contact me - email address below.) You need to make sure you have the latest version of the WSJT code. Please visit the WSJT Home page at http://www.physics.princeton.edu/pulsar/K1JT for details on how to do this.
Snow Leopard has Python 2.6 installed (64-bit by default) but with old versions of other infrastructure. We will come to this later. Hint: I suggest you ensure that your path environment parameter contains the current directory as "."
Note If you already have basic infrastructure installed, go to Step 4.

Step 1. You need to install the Mac Developer Tool - Xcode. Visit http://developer.apple.com/support/mac/tools and create a (free) ADC account then visit the Developer Tools in the downloads section and get the latest release of Xcode Developer Tools. This must be the version for Snow Leopard and will 3.2.3 or later. You will need Fortran.

Step 2. There are several versions that are available but I recommend http://r.research.att.com/tools. At the time of writing the latest version is gfortran-4.2-5646.pkg for Snow Leopard. Download this and install.

Step 3. Now you have the basic Mac infrastructure. Next you need support for python and WSJT code. I suggest you make an installation directory such as WSJT/Installation into which these various downloads will be kept.

Fast Fourier Transform library Visit http://www.fftw.org and get the latest release which is currently fftw-3.2.2.tar.gz. A useful way to untar a file and to keep the original download is:
gzip -dc fftw-3.2.2.tar.gz | tar -xvf -
Then:
cd fftw-3.2.2
configure --enable-float CC="gcc -arch i386 -arch x86_64" CXX="g++ -arch -i386 -arch x86_64" CPP="gcc -E" CXXPP="g++ -E"
make
sudo make install

Numpy Change back to the Installation directory and get numpy as follows. Visit http://www.scipy.org/Download and get the official release from SourceForge. This is 1.3.0 and select numpy-1.3.0.tar.gz. Untar this and then (I use tcsh but you can translate this for bash if you must) and set the envirnoment parameters that are needed to specify the OS X level as well as the architechture of the libraries that will be constructed.
setenv MACOSX_DEPLOYMENT_TARGET 10.6
setenv CFLAGS "-arch i386 -arch x86_64"
setenv FFLAGS "-m32 -m64"
cd numpy-1.3.0
python setup.py build
(Note: on some builds this procedure fails with a "mathlib" missing error. In this case add an additional parameter
setenv CC "gcc -arch i386 -arch x86_64"
and try the "python setup.py build" command again.)
sudo python setup.py install
This will create /Library/Python/2.6/site-packages/numpy

Scipy Before you install scipy, there is a fix that needs to be made to the basic Mac OS X installation. An older version of numpy is installed in the /System/Library and scipy cannot be built against this version. Then
cd /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python
sudo mv numpy numpy_old
sudo ln -s /Library/Python/2.6/site-packages/numpy numpy

These two lines rename the numpy directory to numpy_old and then makes a link to the new version of numpy

Now you can get scipy. Change back to the Installation directory. Visit http://www.scipy.org/Download and get the official release from SourceForge. This is scipy-0.7.1.tar.gz. Untar this and then:
cd scipy
python setup.py build
sudo python setup.py install
(Other advice can be found at http://www.scipy.org/Installing_SciPy/Mac_OS_X)

Imaging Change back to the Installation directory and visit http://www.pythonware.com/products/pil/ and download the Imaging library (version 0.1.6) for all platforms. Untar this file and then:
cd Imaging-1.1.7
python setup.py build
sudo python setup.py install

libsamplerate Change back to the Installation directory and visit http://www.mega-nerd.com/SRC/download.html and download libsamplerate-0.1.7.tar.gz. Untar this file and then remove the CC parameter:
unsetenv CC
setenv CFLAGS "-arch i386"
cd libsamplerate-0.1.7
configure
make
sudo make install

portaudio Change back to the Installation directory and visit http://www.portaudio.com/archives/ and download pa_snapshot_v19.tar.gz which is the version I use. There is another v19 issue at http://www.portaudio.com/download.html but I havn't tested this. Untar this file and then:
cd portaudio
configure
make
sudo make install

At this point you can remove the compiler flags, change to the directory containing WSJT code and copy a file containing particular Fortran compiler options into place:
unsetenv CFLAGS
unsetenv FFLAGS
sudo cp gnu.py /Library/Python/2.6/site-packages/numpy/distutils/fcompiler

The basic infrastructure is now installed and you should not need to repeat any of these procedures again. In future, go directly to Step 4 below.

Step 4 At this point you should ensure that Python will be in 32-bit mode. This environment parameter should always be in place when you want to execute WSJT.
setenv VERSIONER_PYTHON_PREFER_32_BIT yes
setenv MACOSX_DEPLOYMENT_TARGET 10.6
Change to the directory containing wsjt code and:
configure_10.6 --with-portaudio-lib-dir=/usr/local/lib --with-portaudio-include-dir=/usr/local/include
make

This should generate the complete package. If you are successful, the final line will read:
mv Audio.so WsjtMod
A special version of the KVASD program has been built for Snow Leopard. This is KVASD_gfortran_Mac. The default code is KVASD_g95 and this has to be renamed and a link installed to the Mac version.
mv KVASD_g95 KVASD_95_original
ln -s KVASD_gfortran_Mac KVASD_g95

Finally (!!!!) type python wsjt.py and you should be in business.

Last point If you find errors or omissions in this document, or improvements, or need help, please let me know. g4kla at rmnjmn dot demon dot co dot uk

wsjt_9.3.r2792/ping.f0000664000175000017500000000231211033433544012476 0ustar jtnjtn subroutine ping(s,nz,dtbuf,slim,wmin,pingdat,nping) C Detect pings and make note of their start time, duration, and peak strength. real*4 s(nz) real*4 pingdat(3,100) logical inside nping=0 peak=0. inside=.false. c### sdown=slim-1.0 snrlim=10.0**(0.1*slim) - 1.0 sdown=10.0*log10(0.25*snrlim+1.0) i0=0 !Shut up compiler warnings. -db tstart=0.0 !Shut up compiler warnings. -db do i=2,nz if(s(i).ge.slim .and. .not.inside) then i0=i tstart=i0*dtbuf inside=.true. peak=0. endif if(inside .and. s(i).gt.peak) then peak=s(i) endif if(inside .and. (s(i).lt.sdown .or. i.eq.nz)) then if(i.gt.i0) then if(dtbuf*(i-i0).ge.wmin) then if(nping.le.99) nping=nping+1 pingdat(1,nping)=tstart pingdat(2,nping)=dtbuf*(i-i0) pingdat(3,nping)=peak endif inside=.false. peak=0. endif endif enddo return end wsjt_9.3.r2792/t73.f900000664000175000017500000000611611461555650012345 0ustar jtnjtnprogram t73 ! Tests experimental JT6M decoder parameter (NMAX=512*1024) real dat(NMAX) !Raw signal, 30 s at 11025 sps complex cdat(NMAX) !Analytic form of signal complex z character arg*12 !Command-line argument character cfile6*6 !File time character frag*28 !Message fragment to be matched ! character msg*40 ! complex cfrag(2100) !Complex waveform of message fragment real s(NMAX) real sym(646) real fsym(0:2) real ccf(-20000:20000) integer dftolerance real*8 twopi8,dt8,f08 common/scratch/work(NMAX) nargs=iargc() if(nargs.ne.2) then print*,'Usage: t73 nfile frag' go to 999 endif call getarg(1,arg) read(arg,*) nfile call getarg(2,frag) open(73,file='dat.73',form='unformatted',status='old') do i=28,1,-1 !Get length of fragment if(frag(i:i).ne.' ') go to 10 enddo 10 nfrag=i nsps=512 twopi8=8.d0*atan(1.d0) dt8=1.d0/11025.d0 f08=50*11025.d0/nsps f0=f08 dftolerance=40 ipk=0 do ifile=1,nfile read(73,end=999) jz,nz,cfile6,(dat(j),j=1,jz) if(ifile.ne.nfile .and. nfile.ne.999) go to 900 ! do i=1,jz ! j=(i-1)/512 ! dat(i)=0. ! if(mod(j,3).eq.1) dat(i)=sin(twopi8*i*dt8*f08) ! enddo npts=jz xn=log(float(npts))/log(2.0) n=xn if(xn-n .gt.0.001) n=n+1 nfft1=2**n nh1=nfft1/2 nq1=nfft1/4 df1=11025.0/nfft1 ia=nint(11025.0/(3.0*nsps*df1)) ib=nint(dftolerance/df1) i0=nint(f0/df1) call analytic(dat,npts,nfft1,s,cdat) !Convert to analytic signal do i=-ib,ib ccf(i)=0.46*s(i0+i) + 0.27*(s(i0+i-ia)+s(i0+i+ia)) enddo nadd=nint(1.0/df1) call smo(ccf(-ib),2*ib+1,work,nadd) ccfmax=0. do i=-ib,ib if(ccf(i).gt.ccfmax) then ccfmax=ccf(i) ipk=i endif freq=i*df1 write(13,3001) i,freq,1000.0*ccf(i) 3001 format(i8,2f12.3) enddo dfx=ipk*df1 ! DF is known, now find symbol sync. call tweak1(cdat,npts,-f0-dfx,cdat) nrpt=npts/1536-1 ymax=0. jpk=0 do j=0,1535 y=0. do n=0,nrpt-1 k=n*1536 + j z=0. do i=1,512 k=k+1 z=z+cdat(k) enddo y=y + abs(z) enddo write(14,3002) j,y 3002 format(i8,f12.3) if(y.gt.ymax) then ymax=y i1=j endif enddo ! OK, we have DF and starting sample, i1. Compute symbol amplitudes. nsym=(npts-i1+1)/(3*512) nsym=3*nsym fsym=0. k=i1-1 do j=1,nsym z=0. do i=1,512 k=k+1 z=z+cdat(k) enddo sym(j)=abs(z) i=mod(j-1,3) fsym(i)=fsym(i)+sym(j) write(16,3005) j,sym(j) 3005 format(i4,f12.3) enddo fsmin=min(fsym(0),fsym(1),fsym(2)) print*,fsym/fsmin print*,ifile,f0,dfx,jpk 900 continue enddo 999 end program t73 wsjt_9.3.r2792/sync65.f0000664000175000017500000001235512024733201012672 0ustar jtnjtn subroutine sync65(dat,jz,DFTolerance,NFreeze,MouseDF, + mode65,nfast,dtx,dfx,snrx,snrsync,ccfblue,ccfred1,flip,width) C Synchronizes JT65 data, finding the best-fit DT and DF. C NB: at this stage, submodes ABC are processed in the same way. parameter (NP2=60*11025) !Size of data array parameter (NFFTMAX=2048) !Max length of FFTs parameter (NHMAX=NFFTMAX/2) !Max length of power spectra parameter (NSMAX=320) !Max number of half-symbol steps integer DFTolerance !Range of DF search real dat(jz) real psavg(NHMAX) !Average spectrum of whole record real s2(NHMAX,NSMAX) !2d spectrum, stepped by half-symbols real ccfblue(-5:540) !CCF with pseudorandom sequence C The value 450 is empirical: real ccfred(-450:450) !Peak of ccfblue, as function of freq real ccfred1(-224:224) !Peak of ccfblue, as function of freq real tmp(450) save C Do FFTs of symbol length, stepped by half symbols. Note that we have C already downsampled the data by factor of 2. nsym=126 nfft=2048 if(nfast.eq.2) nfft=1024 nsteps=min(320,2*jz/nfft - 1) nh=nfft/2 df=0.5*11025.0/nfft C Compute power spectrum for each step and get average call zero(psavg,nh) do j=1,nsteps k=(j-1)*nh + 1 call limit(dat(k),nfft) call ps(dat(k),nfft,s2(1,j)) if(mode65.eq.4) call smooth(s2(1,j),nh) call add(psavg,s2(1,j),psavg,nh) enddo call flat1(psavg,s2,nh,nsteps,NHMAX,NSMAX) !Flatten the spectra C Find the best frequency channel for CCF ! famin= 670.46 ! fbmax=1870.46 famin=3. fbmax=2700. fa=famin fb=fbmax if(NFreeze.eq.1) then fa=max(famin,1270.46+MouseDF-DFTolerance) fb=min(fbmax,1270.46+MouseDF+DFTolerance) else fa=max(famin,1270.46+MouseDF-600) fb=min(fbmax,1270.46+MouseDF+600) endif ia=fa/df ib=fb/df i0=nint(1270.46/df) lag1=-5 lag2=59 syncbest=-1.e30 syncbest2=-1.e30 call zero(ccfred,745) do i=ia,ib call xcor(s2,i,nsteps,nsym,lag1,lag2, + ccfblue,ccf0,lagpk0,flip,0.0) j=i-i0 if(j.ge.-372 .and. j.le.372) ccfred(j)=ccf0 C Find rms of the CCF, without the main peak call slope(ccfblue(lag1),lag2-lag1+1,lagpk0-lag1+1.0) sync=abs(ccfblue(lagpk0)) ppmax=psavg(i)-1.0 C Find the best sync value if(sync.gt.syncbest2) then ipk2=i lagpk2=lagpk0 syncbest2=sync endif C We are most interested if snrx will be more than -30 dB. if(ppmax.gt.0.2938) then !Corresponds to snrx.gt.-30.0 if(sync.gt.syncbest) then ipk=i lagpk=lagpk0 syncbest=sync endif endif enddo C If we found nothing with snrx > -30 dB, take the best sync that *was* found. if(syncbest.lt.-10.) then ipk=ipk2 lagpk=lagpk2 syncbest=syncbest2 endif C Peak up in frequency to fraction of channel base=0.25*(psavg(ipk-3)+psavg(ipk-2)+psavg(ipk+2)+psavg(ipk+3)) ! call peakup(psavg(ipk-1),psavg(ipk),psavg(ipk+1),dx) ! if(dx.lt.-1.0) dx=-1.0 ! if(dx.gt.1.0) dx=1.0 dx=0. dfx=(ipk+dx-i0)*df C Peak up in time, at best whole-channel frequency call xcor(s2,ipk,nsteps,nsym,lag1,lag2, + ccfblue,ccfmax,lagpk,flip,0.0) xlag=lagpk if(lagpk.gt.lag1 .and. lagpk.lt.lag2) then call peakup(ccfblue(lagpk-1),ccfmax,ccfblue(lagpk+1),dx2) xlag=lagpk+dx2 endif C Find rms of the CCF, without the main peak call slope(ccfblue(lag1),lag2-lag1+1,xlag-lag1+1.0) sq=0. nsq=0 do lag=lag1,lag2 if(abs(lag-xlag).gt.2.0) then sq=sq+ccfblue(lag)**2 nsq=nsq+1 endif enddo rms=sqrt(sq/nsq) snrsync=abs(ccfblue(lagpk))/rms - 1.1 !Empirical dt=2.0/11025.0 istart=xlag*nh dtx=istart*dt snrx=-99.0 ! ppmax=psavg(ipk)/base-1.0 ppmax=psavg(ipk)-1.0 C Plus 3 dB because sync tone is on half the time. (Don't understand C why an additional +2 dB is needed ...) if(ppmax.gt.0.0001) snrx=db(ppmax*df/2500.0) + 5.0 !### if(mode65.eq.4) snrx=snrx + 2.0 if(snrx.lt.-33.0) snrx=-33.0 C Compute width of sync tone to outermost -3 dB points call pctile(ccfred(ia-i0),tmp,ib-ia+1,45,base) jpk=ipk-i0 stest=base + 0.5*(ccfred(jpk)-base) ! -3 dB do i=-10,0 if(jpk+i.ge.-371) then if(ccfred(jpk+i).gt.stest) go to 30 endif enddo i=0 30 x1=i-1+(stest-ccfred(jpk+i-1))/(ccfred(jpk+i)-ccfred(jpk+i-1)) do i=10,0,-1 if(jpk+i.le.371) then if(ccfred(jpk+i).gt.stest) go to 32 endif enddo i=0 32 x2=i+1-(stest-ccfred(jpk+i+1))/(ccfred(jpk+i)-ccfred(jpk+i+1)) width=x2-x1 if(width.gt.1.2) width=sqrt(width**2 - 1.44) width=df*width width=max(0.0,min(99.0,width)) do i=-224,224 ccfred1(i)=ccfred(i) enddo return end wsjt_9.3.r2792/fthread.c0000664000175000017500000000277511233122514013162 0ustar jtnjtn/* * fthread.c * * pthread library interface to Fortran, for OSs supporting pthreads * * Adapted from code by V. Ganesh */ #include #include #include // Create a new fortran thread through a subroutine. void fthread_create_(void *(*thread_func)(void *), pthread_t *theThread) { pthread_create(theThread, NULL, thread_func, NULL); } /* // Yield control to other threads void fthread_yield_() { pthread_yield(); } */ // Return my own thread ID pthread_t fthread_self_() { return pthread_self(); } // Lock the execution of all threads until we have the mutex int fthread_mutex_lock_(pthread_mutex_t **theMutex) { return(pthread_mutex_lock(*theMutex)); } int fthread_mutex_trylock_(pthread_mutex_t **theMutex) { return(pthread_mutex_trylock(*theMutex)); } // Unlock the execution of all threads that were stopped by this mutex void fthread_mutex_unlock_(pthread_mutex_t **theMutex) { pthread_mutex_unlock(*theMutex); } // Get a new mutex object void fthread_mutex_init_(pthread_mutex_t **theMutex) { *theMutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(*theMutex, NULL); } // Release a mutex object void fthread_mutex_destroy_(pthread_mutex_t **theMutex) { pthread_mutex_destroy(*theMutex); free(*theMutex); } // Waits for thread ID to join void fthread_join(pthread_t *theThread) { int value = 0; pthread_join(*theThread, (void **)&value); } // Exit from a thread void fthread_exit_(void *status) { pthread_exit(status); } wsjt_9.3.r2792/longx.f0000664000175000017500000000705511461555650012711 0ustar jtnjtn subroutine longx(dat,npts0,ps,DFTolerance,noffset, + msg,msglen,bauderr) C Look for 441-baud modulation, synchronize to it, and decode message. C Longest allowed data analysis is 1 second. parameter (NMAX=11025) parameter (NDMAX=NMAX/25) real dat(npts0) real ps(128),psmo(20) integer DFTolerance real y1(NMAX) real y2(NMAX) real y3(NMAX) real y4(NMAX) real wgt(-2:2) integer dit(NDMAX) integer n4(0:2) character msg*40 character c*48 common/acom/a1,a2,a3,a4 data c/' 123456789.,?/# $ABCD FGHIJKLMNOPQRSTUVWXY 0EZ*!'/ data wgt/1.0,4.0,6.0,4.0,1.0/ kpk=0 !Silence compiler warning do i=1,NDMAX dit(i)=0 enddo NSPD=25 !Change if FSK110 is implemented LTone=2 NBaud=11025/NSPD npts=min(NMAX,npts0) df=11025.0/256.0 smax=0. C Find the frequency offset of this ping. C NB: this might be improved by including a bandpass correction to ps. ia=nint((LTone*NBaud-DFTolerance)/df) ib=nint((LTone*NBaud+DFTolerance)/df) do i=ia,ib !Search for correct DF sum=0. do j=1,4 !Sum over the 4 tones m=nint((i*df+(j-1)*NBaud)/df) do k=-2,2 !Weighted averages over 5 bins sum=sum+wgt(k)*ps(m+k) enddo enddo k=i-ia+1 psmo(k)=sum if(sum.gt.smax) then smax=sum noffset=nint(i*df-LTone*NBaud) kpk=k endif enddo if(kpk.gt.1 .and. kpk.lt.20) then call peakup(psmo(kpk-1),psmo(kpk),psmo(kpk+1),dx) noffset=nint(noffset+dx*df) endif C Do square-law detection in each of four filters. f1=LTone*NBaud+noffset f2=(LTone+1)*NBaud+noffset f3=(LTone+2)*NBaud+noffset f4=(LTone+3)*NBaud+noffset call detect(dat,npts,f1,y1) call detect(dat,npts,f2,y2) call detect(dat,npts,f3,y3) call detect(dat,npts,f4,y4) C Bandpass correction: npts=npts-(NSPD-1) do i=1,npts y1(i)=y1(i)*a1 y2(i)=y2(i)*a2 y3(i)=y3(i)*a3 y4(i)=y4(i)*a4 enddo call sync(y1,y2,y3,y4,npts,jpk,baud,bauderr) C Decimate y arrays by NSPD ndits=npts/NSPD - 1 do i=1,ndits y1(i)=y1(jpk+(i-1)*NSPD) y2(i)=y2(jpk+(i-1)*NSPD) y3(i)=y3(jpk+(i-1)*NSPD) y4(i)=y4(jpk+(i-1)*NSPD) enddo C Now find the mod3 phase that has no tone 3's n4(0)=0 n4(1)=0 n4(2)=0 do i=1,ndits ymax=max(y1(i),y2(i),y3(i),y4(i)) if(y1(i).eq.ymax) dit(i)=0 if(y2(i).eq.ymax) dit(i)=1 if(y3(i).eq.ymax) dit(i)=2 if(y4(i).eq.ymax) then dit(i)=3 k=mod(i,3) n4(k)=n4(k)+1 endif enddo n4min=min(n4(0),n4(1),n4(2)) if(n4min.eq.n4(0)) jsync=3 if(n4min.eq.n4(1)) jsync=1 if(n4min.eq.n4(2)) jsync=2 C Might want to notify if n4min>0 or if one of the others is equal C to n4min. In both cases, could then decode 2 or 3 times, using C other starting phases. C Finally, decode the message. msg=' ' msglen=ndits/3 msglen=min(msglen,40) do i=1,msglen j=(i-1)*3+jsync nc=16*dit(j) + 4*dit(j+1) +dit(j+2) msg(i:i)=' ' if(nc.le.47 .and. nc.ge.0) msg(i:i)=c(nc+1:nc+1) enddo return end wsjt_9.3.r2792/ftn_quit.f900000664000175000017500000000016311461555650013555 0ustar jtnjtnsubroutine ftn_quit !f2py threadsafe call four2a(a,-1,-1,1,1) call cs_destroy return end subroutine ftn_quit wsjt_9.3.r2792/len441.f900000664000175000017500000000246311461555650012740 0ustar jtnjtnsubroutine len441(cdat,npts,msglen,nacf) ! Determine length of the user message in a JTMS ping. complex cdat(npts) real acf(2250) real acf2(2250) real tmp(2250) msglen=0 !Use ACF to find msg length acf=0. acf2=0. ja=151 jb=min(75*28,npts-225) do j=ja,jb z=0. do i=1,npts-j z=z + cdat(i)*conjg(cdat(i+j)) enddo acf(j)=abs(z)/(npts-j) enddo ! rewind 53 jstep=50 smax=0. do j=ja+jstep,jb-jstep ! Find local base level; update every 10 bins. if(mod(j-ja-jstep,10).eq.0) then call pctile(acf(j-jstep),tmp,2*jstep+1,45,base) endif acf2(j)=acf(j)/base - 1.0 if(acf2(j).gt.smax) then smax=acf2(j) jpk=j endif ! write(53,5001) j,j/75.0,acf2(j) !5001 format(i8,2f12.3) enddo ! call flush(53) np=nint(jpk/75.0) chk=(jpk/75.0)/np smax2=0. do m=4,2,-1 if(mod(np,m).eq.0) then i0=nint(np*75.0/m) smax2=0. do i=-10,10 if(acf2(i0+i).gt.smax2) smax2=acf2(i0+i) enddo if(smax2/smax.gt.0.6) go to 10 endif enddo m=1 10 msglen=np/m nacf=smax-4.0 if(nacf.lt.0) nacf=0 if(nacf.gt.10) nacf=10 if(chk.lt.0.99 .or. chk.gt.1.01 .or. nacf.le.0) msglen=0 ! print*,np,msglen,nacf,chk,smax,smax2 return end subroutine len441 wsjt_9.3.r2792/t74.f900000664000175000017500000000163311461555650012345 0ustar jtnjtnprogram t74 ! Tests experimental Diana decoder parameter (NMAX=512*1024) real dat(NMAX) !Raw signal, 30 s at 11025 sps character arg*12 !Command-line argument character cfile6*6 !File time character msg*28 character*40 infile real ccfblue(-5:540) !blue line integer dftolerance nargs=iargc() if(nargs.ne.2) then print*,'Usage: t74 infile nrec' go to 999 endif call getarg(1,infile) call getarg(2,arg) read(arg,*) nrec open(74,file=infile,form='unformatted',status='old') MinSigdB=0 DFTolerance=400 NFreeze=1 MouseDF=0 do irec=1,nrec read(74,end=999) jz,cfile6,(dat(j),j=1,jz) if(irec.ne.nrec .and. nrec.ne.999) go to 900 call diana(dat,jz,cfile6,MinSigdB,DFTolerance,NFreeze, & MouseDF,ccfblue,ccfred) 900 continue enddo 999 end program t74 wsjt_9.3.r2792/calledby.txt0000664000175000017500000001716011232356566013732 0ustar jtnjtn---------------------------------------------------------------------------- Audio Threads (including interrupt service routines) AI Name Called by ---------------------------------------------------------------------------- a2d.f90 *start of thread* A abc441.F90 wsjtgen I chkmsg.f gen24, gen65 ... encode232.f genwspr entail.f gen24 fivehz.F90 *interrupt service routine* gen24.f wsjtgen gen64.f90 wsjtgen gen65.f wsjtgen gen6m.f wsjtgen gencw.f wsjtgen gencwid.f wsjtgen gentone.f gen6m genwspr.f90 wsjtgen graycode.f encode65, extract, gen65 DI grid2deg.f astro, azdist, grid2k, packgrid GI interleave24.f decode24, gen24 DI interleave63.f encode65, extract, gen65 DI inter_mept.f decode162, genwspr DI k2grid.f packmsg morse.f gencw, gencwid msgtype.f gencw nchar.f packcall GI pack50.f wqencode packcall.f packmsg, packpfx, wqencode packgrid.f packmsg, wqencode packmsg.f chkt0/GUI, deep65, encode65, gen24, gen65 DGI packname.f90 wqencode packpfx.f90 wqencode packprop.f90 wqencode packtext2.f90 wqencode packtext.f packmsg rfile.f90 getfile, wsjtgen GI wqencode.f90 gen64, genwspr wsjtgen.F90 fivehz ---------------------------------------------------------------------------- GUI Thread G Name Called by ---------------------------------------------------------------------------- astro0.F90 *GUI* G astro.F astro0 ... audio_init.F90 *GUI* azdist0.f90 *GUI* azdist.f azdist0 chkt0.f90 *GUI* coord.f astro dcoord.f moon2, MoonDop dot.f MoonDop flat2.f spec ftn_init.F90 *GUI* ftn_quit.f90 *GUI* ftsky.f astro.F geocentric.f MoonDop GeoDist.f azdist getfile.F90 *GUI* horizspec.f90 spec hscroll.f90 horizspec, spec moon2.f MoonDop MoonDop.f astro pfxdump.f ftn_init/GUI rfile2.f astro, getfile, wsjtgen GI spec.f90 *GUI* sun.f astro toxyz.f MoonDop xfft2.f horizspec, spec ---------------------------------------------------------------------------- Decoder Thread D Name Called by ---------------------------------------------------------------------------- avemsg65.f wsjt65 (also wsjt24, temporary) D avemsg6m.f decode6m ... avesp2.f wsjt1 blanker.f90 decode3 bzap.f wsjt1 ccf2.f fchisq chkhist.f extract db.f avemsg6m, decode6m, flatten, mtdecode, short65, sync162, sync24, sync64, sync65, pix2d65 decode162.f mept162a decode1.F90 *start of thread* decode24.f wsjt24 decode2.f90 decode1 decode3.F90 decode2 decode65.f wsjt65 decode6m.f wsjt1 deep65.F avemsg65, decode65 deg2grid.f k2grid, unpackgrid DI demod64a.f extract detect.f longx encode65.f deep65 extract.f avemsg65, decode65 fano232.f decode162 fchisq.f sync162 fil651.f ftpeak65 fil652.f ftpeak65 fil653.f ftpeak65 filbig2.F ftn_quit, wsjtwspr DG flat1.f short65, sync24, sync65 flatten.f avesp2 four2a.f bzap, decode6m, ftn_quit, lpf1, ps162, spec2d65, xfft DG fourt.f mept162, ps24 ftpeak65.f spec2d65 genmet.f decode24 get_fname.F90 decode2, savedata getpfx1.f packmsg DI getpfx2.f unpackmsg DI getsnr.f short65 grid2k.f unpackmsg DI hash.f90 wqdecode, wqencode DI indexx.f extract, mtdecode, spec2d, wsjt1 limit.f sync64, sync65 longx.f mtdecode lpf1.f wsjt1 mept162a.f wsjtwspr mtdecode.f wsjt1 pctile.f extract, flat1, flat2, flatten, mtdecode, spec2d, sync162, sync24, sync65, xcor peakup.f longx, stdecode, sync24, sync65 ping.f mtdecode pix2d65.f90 decode3 pix2d.f90 decode3 ps162.f sync162 ps24.f sync24 ps.f avesp2, short65, sync64, sync65 runqqq.F90 extract s2shape.f wsjt1 savedata.F90 decode1 setup65.f gen65, wsjt65 DI short65.f wsjt1 slope.f sync24, sync66 smooth.f mtdecode, short65, sync24, sync64, sync65, syncf1 sort.f pctile spec2d65.f decode65 spec2d.f wsjt1 spec441.f mtdecode, wsjt1 ssort.f indexx, sort stdecode.f wsjt1 symsync65.f ftpeak65 sync162.f mept162a sync24.f wsjt24 sync64.f wsjt64 sync65.f wsjt65 sync.f longx syncf0.f wsjt1 syncf1.f wsjt1 synct.f wsjt1 twkfreq.f mept162a unpack50.f wqdecode DI unpackcall.f unpackmsg, wqdecode DI unpackgrid.f unpackmsg, wqdecode DI unpackmsg.f chkt0/GUI, decode24, deep65, extract, gen24, gen64, DGI gen65 unpackname.f90 wqdecode DGI unpackpfx.f90 wqdecode DGI unpackprop.f90 unpackprop DGI unpacktext2.f90 wqdecode DGI unpacktext.f unpackmsg, wqdecode DGI wqdecode.f90 decode162, genwspr DGI wsjt1.F decode3 wsjt24.f wsjt1 wsjt64.f wsjt1 wsjt65.f wsjt1 wsjtwspr.f90 wsjt1 xcor24.f sync24 xcor.f sync65 xfft.f bzap, lpf1, ps, spec2d, spec441, syncf0, syncf1, sync ---------------------------------------------------------------------------- All Threads Name Called by ---------------------------------------------------------------------------- cs_lock astro0, astro, avemsg6m, azdist0, chkt0, decode1, decode24, decode6m, deep65, extract, ftn_init, genmet, getfile, get_fname, interleave24, inter_mept, mept162a, mtdecode, rfile, savedata, spec, stdecode, wqdecode, wqencode, wsjt1, wsjt24, wsjt65, wsjtgen cs_unlock astro0, astro, avemsg6m, azdist0, chkt0, decode1, decode24, decode6m, deep65, extract, ftn_init, genmet, getfile, get_fname, interleave24, inter_mept, mept162a, mtdecode, rfile, savedata, spec, stdecode, wqdecode, wqencode, wsjt1, wsjt24, wsjt65, wsjtgen wsjt_9.3.r2792/chk441.f900000664000175000017500000000543411770624406012727 0ustar jtnjtnsubroutine chk441(dat,jz,tstart,width,nfreeze,mousedf, & dftolerance,pick,nok) ! Experimental FSK441 decoder parameter (NMAX=512*1024) parameter (MAXFFT=8192) real dat(NMAX) !Raw signal, 30 s at 11025 sps logical pick complex cdat(NMAX) !Analytic form of signal character frag*28,frag0*29 !Message fragment to be matched complex cfrag(2100) !Complex waveform of message fragment complex z integer itone(84) !Generated tones for msg fragment real s(NMAX) real ccf(-6000:6000) integer dftolerance logical first data first/.true./ common/scratch/work(NMAX) save if(first) then call abc441(' ',1,itone,ndits) !Generate waveform for call gen441(itone,ndits,cfrag) first=.true. endif ccf0=3.0 sb0=0.75 if(pick) then ccf0=2.1 sb0=0.60 endif nsps=25 !Initialize variables nsam=nsps*ndits dt=1.0/11025.0 i0=(tstart-0.02)/dt if(i0.lt.1) i0=1 npts=nint((width+0.02)/dt)+1 npts=min(npts,jz+1-i0) npts=min(npts,22050) !Max ping length 2 s xn=log(float(npts))/log(2.0) n=xn if(xn-n .gt.0.001) n=n+1 nfft1=2**n df1=11025.0/nfft1 nok=0 sbest=0. call analytic(dat(i0),npts,nfft1,s,cdat) !Convert to analytic signal ! call len441(cdat,npts,lenacf,nacf) !Do ACF to find message length ia=nint(dftolerance/df1) i0=0 if(nfreeze.ne.0) i0=nint(mousedf/df1) ccfmax=0. do i=-ia,ia !Find DF ccf(i)=s(i0+i+nint(882.0/df1)) + s(i0+i+nint(1323.0/df1)) + & s(i0+i+nint(1764.0/df1)) + s(i0+i+nint(2205.0/df1)) enddo ccf(:-ia-1)=0. ccf(ia+1:)=0. nadd=2*nint(5.0/df1)+1 call smo(ccf(-ia),2*ia+1,work,nadd) !Smooth CCF by nadd do i=-ia,ia !Find max of smoothed CCF if(ccf(i).gt.ccfmax) then ccfmax=ccf(i) ipk=i0+i dfx=ipk*df1 endif enddo ic=min(nint(220/df1),ia) !Baseline range +/- 220 Hz call pctile(ccf(ipk-ic),work,2*ic+1,50,base) ccfmax=ccfmax/base if(ccfmax.lt.ccf0) go to 800 !Reject non-FSK441 signals ! We seem to have an FSK441 ping, and we know DF; now find DT. call tweak1(cdat,npts,-dfx,cdat) !Mix to standard frequency ! Look for best match to "frag", find its DT do i=1,npts-nsam z=0. a=0. do j=1,nsam a=a + abs(cdat(j+i-1)) z=z + cdat(j+i-1)*conjg(cfrag(j)) enddo ss=abs(z)/a if(ss.gt.sbest) then sbest=ss ipk=i amp=a/nsam endif enddo if(sbest.lt.sb0) go to 800 !Skip if not decodable FSK441 data nok=1 800 continue return end subroutine chk441 wsjt_9.3.r2792/go950000775000175000017500000000005211200046253012073 0ustar jtnjtn./configure --enable-g95 make clean make wsjt_9.3.r2792/packgrid.f0000664000175000017500000000265311461555650013345 0ustar jtnjtn subroutine packgrid(grid,ng,text) parameter (NGBASE=180*180) character*4 grid logical text text=.false. if(grid.eq.' ') go to 90 !Blank grid is OK C Test for numerical signal report, etc. if(grid(1:1).eq.'-') then if(grid(3:3).ne.' ') then n=10*(ichar(grid(2:2))-48) + ichar(grid(3:3)) - 48 else n=ichar(grid(2:2))-48 endif ng=NGBASE+1+n go to 100 else if(grid(1:2).eq.'R-') then if(grid(4:4).ne.' ') then n=10*(ichar(grid(3:3))-48) + ichar(grid(4:4)) - 48 else n=ichar(grid(3:3))-48 endif if(n.eq.0) go to 90 ng=NGBASE+31+n go to 100 else if(grid(1:2).eq.'RO') then ng=NGBASE+62 go to 100 else if(grid(1:3).eq.'RRR') then ng=NGBASE+63 go to 100 else if(grid(1:2).eq.'73') then ng=NGBASE+64 go to 100 endif if(grid(1:1).lt.'A' .or. grid(1:1).gt.'R') text=.true. if(grid(2:2).lt.'A' .or. grid(2:2).gt.'R') text=.true. if(grid(3:3).lt.'0' .or. grid(3:3).gt.'9') text=.true. if(grid(4:4).lt.'0' .or. grid(4:4).gt.'9') text=.true. if(text) go to 100 call grid2deg(grid//'mm',dlong,dlat) long=dlong lat=dlat+ 90.0 ng=((long+180)/2)*180 + lat go to 100 90 ng=NGBASE + 1 100 return end wsjt_9.3.r2792/match.f900000664000175000017500000000071611461555650013024 0ustar jtnjtnsubroutine match(s1,s2,nstart,nmatch) character*(*) s1,s2 character s1a*29 nstart=-1 nmatch=0 n1=len_trim(s1)+1 n2=len(s2) s1a=s1//' ' if(n2.ge.n1) then do j=1,n2 n=0 do i=1,n1 k=j+i-1 if(k.gt.n2) k=k-n2 if(s2(k:k).eq.s1a(i:i)) n=n+1 enddo if(n.gt.nmatch) then nmatch=n nstart=j endif enddo endif return end subroutine match wsjt_9.3.r2792/packmsg.f0000664000175000017500000000637711761710021013201 0ustar jtnjtn subroutine packmsg(msg,dat) parameter (NBASE=37*36*10*27*27*27) parameter (NBASE2=262178562) character*22 msg integer dat(12) character*12 c1,c2,c2z character*4 c3 character*6 grid6 c character*3 dxcc !Where is DXCC implemented? logical text1,text2,text3 C Convert all letters to upper case do i=1,22 if(msg(i:i).ge.'a' .and. msg(i:i).le.'z') + msg(i:i)= char(ichar(msg(i:i))+ichar('A')-ichar('a')) enddo C See if it's a CQ message if(msg(1:3).eq.'CQ ') then i=3 C ... and if so, does it have a reply frequency? if(msg(4:4).ge.'0' .and. msg(4:4).le.'9' .and. + msg(5:5).ge.'0' .and. msg(5:5).le.'9' .and. + msg(6:6).ge.'0' .and. msg(6:6).le.'9') i=7 go to 1 endif do i=1,22 if(msg(i:i).eq.' ') go to 1 !Get 1st blank enddo go to 10 !Consider msg as plain text 1 ia=i c1=msg(1:ia-1) do i=ia+1,22 if(msg(i:i).eq.' ') go to 2 !Get 2nd blank enddo go to 10 !Consider msg as plain text 2 ib=i c2=msg(ia+1:ib-1) do i=ib+1,22 if(msg(i:i).eq.' ') go to 3 !Get 3rd blank enddo go to 10 !Consider msg as plain text 3 ic=i c3=' ' if(ic.ge.ib+1) c3=msg(ib+1:ic) if(c3.eq.'OOO ') c3=' ' !Strip out the OOO flag call getpfx1(c1,k1,junk) call packcall(c1,nc1,text1) c2z=c2 call getpfx1(c2,k2,nv2) call packcall(c2,nc2,text2) if(nv2.eq.0) then if(k1.lt.0 .or. k2.lt.0 .or. k1*k2.ne.0) go to 10 if(k2.gt.0) k2=k2+450 k=max(k1,k2) if(k.gt.0) then call k2grid(k,grid6) c3=grid6(:4) endif endif call packgrid(c3,ng,text3) if(nv2.eq.0 .and. (.not.text1) .and. (.not.text2) .and. + (.not.text3)) go to 20 if(nv2.gt.0) then if(nv2.eq.1) then if(c1(1:3).eq.'CQ ') nc1=262178563 + k2 if(c1(1:4).eq.'QRZ ') nc1=264002072 + k2 if(c1(1:3).eq.'DE ') nc1=265825581 + k2 endif if(nv2.eq.2) then if(c1(1:3).eq.'CQ ') nc1=267649090 + k2 if(c1(1:4).eq.'QRZ ') nc1=267698375 + k2 if(c1(1:3).eq.'DE ') nc1=267747660 + k2 endif go to 20 endif C The message will be treated as plain text. 10 call packtext(msg,nc1,nc2,ng) ng=ng+32768 C Encode data into 6-bit words 20 dat(1)=iand(ishft(nc1,-22),63) !6 bits dat(2)=iand(ishft(nc1,-16),63) !6 bits dat(3)=iand(ishft(nc1,-10),63) !6 bits dat(4)=iand(ishft(nc1, -4),63) !6 bits dat(5)=4*iand(nc1,15)+iand(ishft(nc2,-26),3) !4+2 bits dat(6)=iand(ishft(nc2,-20),63) !6 bits dat(7)=iand(ishft(nc2,-14),63) !6 bits dat(8)=iand(ishft(nc2, -8),63) !6 bits dat(9)=iand(ishft(nc2, -2),63) !6 bits dat(10)=16*iand(nc2,3)+iand(ishft(ng,-12),15) !2+4 bits dat(11)=iand(ishft(ng,-6),63) dat(12)=iand(ng,63) return end wsjt_9.3.r2792/MoonDop.f0000664000175000017500000000570711035431676013135 0ustar jtnjtn subroutine MoonDop(nyear,month,nday,uth4,lon4,lat4,RAMoon4, + DecMoon4,LST4,HA4,AzMoon4,ElMoon4,ldeg4,bdeg4,vr4,dist4) implicit real*8 (a-h,o-z) real*4 uth4 !UT in hours real*4 lon4 !West longitude, degrees real*4 lat4 !Latitude, degrees real*4 RAMoon4 !Topocentric RA of moon, hours real*4 DecMoon4 !Topocentric Dec of Moon, degrees real*4 LST4 !Locat sidereal time, hours real*4 HA4 !Local Hour angle, degrees real*4 AzMoon4 !Topocentric Azimuth of moon, degrees real*4 ElMoon4 !Topocentric Elevation of moon, degrees real*4 ldeg4 !Galactic longitude of moon, degrees real*4 bdeg4 !Galactic latitude of moon, degrees real*4 vr4 !Radial velocity of moon wrt obs, km/s real*4 dist4 !Echo time, seconds real*8 LST real*8 RME(6) !Vector from Earth center to Moon real*8 RAE(6) !Vector from Earth center to Obs real*8 RMA(6) !Vector from Obs to Moon real*8 pvsun(6) real*8 rme0(6) real*8 lrad logical km,bary common/stcomx/km,bary,pvsun data rad/57.2957795130823d0/,twopi/6.28310530717959d0/ km=.true. dlat=lat4/rad dlong1=lon4/rad elev1=200.d0 call geocentric(dlat,elev1,dlat1,erad1) dt=100.d0 !For numerical derivative, in seconds UT=uth4 C NB: geodetic latitude used here, but geocentric latitude used when C determining Earth-rotation contribution to Doppler. call moon2(nyear,month,nDay,UT-dt/3600.d0,dlong1*rad,dlat*rad, + RA,Dec,topRA,topDec,LST,HA,Az0,El0,dist) call toxyz(RA/rad,Dec/rad,dist,rme0) !Convert to rectangular coords call moon2(nyear,month,nDay,UT,dlong1*rad,dlat*rad, + RA,Dec,topRA,topDec,LST,HA,Az,El,dist) call toxyz(RA/rad,Dec/rad,dist,rme) !Convert to rectangular coords phi=LST*twopi/24.d0 call toxyz(phi,dlat1,erad1,rae) !Gencentric numbers used here! radps=twopi/(86400.d0/1.002737909d0) rae(4)=-rae(2)*radps !Vel of Obs wrt Earth center rae(5)=rae(1)*radps rae(6)=0.d0 do i=1,3 rme(i+3)=(rme(i)-rme0(i))/dt rma(i)=rme(i)-rae(i) rma(i+3)=rme(i+3)-rae(i+3) enddo call fromxyz(rma,alpha1,delta1,dtopo0) !Get topocentric coords vr=dot(rma(4),rma)/dtopo0 rarad=RA/rad decrad=Dec/rad call dcoord(4.635594495d0,-0.504691042d0,3.355395488d0, + 0.478220215d0,rarad,decrad,lrad,brad) RAMoon4=topRA DecMoon4=topDec LST4=LST HA4=HA AzMoon4=Az ElMoon4=El ldeg4=lrad*rad bdeg4=brad*rad vr4=vr dist4=dist return end wsjt_9.3.r2792/pfx.f0000664000175000017500000000651711120013525012337 0ustar jtnjtn parameter (NZ=339) !Total number of prefixes parameter (NZ2=12) !Total number of suffixes character*1 sfx(NZ2) character*5 pfx(NZ) data sfx/'P','0','1','2','3','4','5','6','7','8','9','A'/ data pfx/ + '1A ','1S ','3A ','3B6 ','3B8 ','3B9 ','3C ','3C0 ', + '3D2 ','3D2C ','3D2R ','3DA ','3V ','3W ','3X ','3Y ', + '3YB ','3YP ','4J ','4L ','4S ','4U1I ','4U1U ','4W ', + '4X ','5A ','5B ','5H ','5N ','5R ','5T ','5U ', + '5V ','5W ','5X ','5Z ','6W ','6Y ','7O ','7P ', + '7Q ','7X ','8P ','8Q ','8R ','9A ','9G ','9H ', + '9J ','9K ','9L ','9M2 ','9M6 ','9N ','9Q ','9U ', + '9V ','9X ','9Y ','A2 ','A3 ','A4 ','A5 ','A6 ', + 'A7 ','A9 ','AP ','BS7 ','BV ','BV9 ','BY ','C2 ', + 'C3 ','C5 ','C6 ','C9 ','CE ','CE0X ','CE0Y ','CE0Z ', + 'CE9 ','CM ','CN ','CP ','CT ','CT3 ','CU ','CX ', + 'CY0 ','CY9 ','D2 ','D4 ','D6 ','DL ','DU ','E3 ', + 'E4 ','EA ','EA6 ','EA8 ','EA9 ','EI ','EK ','EL ', + 'EP ','ER ','ES ','ET ','EU ','EX ','EY ','EZ ', + 'F ','FG ','FH ','FJ ','FK ','FKC ','FM ','FO ', + 'FOA ','FOC ','FOM ','FP ','FR ','FRG ','FRJ ','FRT ', + 'FT5W ','FT5X ','FT5Z ','FW ','FY ','M ','MD ','MI ', + 'MJ ','MM ', 'MU ','MW ','H4 ','H40 ','HA ', + 'HB ','HB0 ','HC ','HC8 ','HH ','HI ','HK ','HK0A ', + 'HK0M ','HL ','HM ','HP ','HR ','HS ','HV ','HZ ', + 'I ','IS ','IS0 ', 'J2 ','J3 ','J5 ','J6 ', + 'J7 ','J8 ','JA ','JDM ','JDO ','JT ','JW ', + 'JX ','JY ','K ','KG4 ','KH0 ','KH1 ','KH2 ','KH3 ', + 'KH4 ','KH5 ','KH5K ','KH6 ','KH7 ','KH8 ','KH9 ','KL ', + 'KP1 ','KP2 ','KP4 ','KP5 ','LA ','LU ','LX ','LY ', + 'LZ ','OA ','OD ','OE ','OH ','OH0 ','OJ0 ','OK ', + 'OM ','ON ','OX ','OY ','OZ ','P2 ','P4 ','PA ', + 'PJ2 ','PJ7 ','PY ','PY0F ','PT0S ','PY0T ','PZ ','R1F ', + 'R1M ','S0 ','S2 ','S5 ','S7 ','S9 ','SM ','SP ', + 'ST ','SU ','SV ','SVA ','SV5 ','SV9 ','T2 ','T30 ', + 'T31 ','T32 ','T33 ','T5 ','T7 ','T8 ','T9 ','TA ', + 'TF ','TG ','TI ','TI9 ','TJ ','TK ','TL ', + 'TN ','TR ','TT ','TU ','TY ','TZ ','UA ','UA2 ', + 'UA9 ','UK ','UN ','UR ','V2 ','V3 ','V4 ','V5 ', + 'V6 ','V7 ','V8 ','VE ','VK ','VK0H ','VK0M ','VK9C ', + 'VK9L ','VK9M ','VK9N ','VK9W ','VK9X ','VP2E ','VP2M ','VP2V ', + 'VP5 ','VP6 ','VP6D ','VP8 ','VP8G ','VP8H ','VP8O ','VP8S ', + 'VP9 ','VQ9 ','VR ','VU ','VU4 ','VU7 ','XE ','XF4 ', + 'XT ','XU ','XW ','XX9 ','XZ ','YA ','YB ','YI ', + 'YJ ','YK ','YL ','YN ','YO ','YS ','YU ','YV ', + 'YV0 ','Z2 ','Z3 ','ZA ','ZB ','ZC4 ','ZD7 ','ZD8 ', + 'ZD9 ','ZF ','ZK1N ','ZK1S ','ZK2 ','ZK3 ','ZL ','ZL7 ', + 'ZL8 ','ZL9 ','ZP ','ZS ','ZS8 ','KC4 ','E5 '/ wsjt_9.3.r2792/getfile.f900000664000175000017500000000475111461555650013352 0ustar jtnjtnsubroutine getfile(fname,len) !f2py threadsafe parameter (NDMAX=120*11025) character*(*) fname include 'gcom1.f90' include 'gcom2.f90' include 'gcom4.f90' integer*1 d1(NDMAX) integer*1 hdr(44) integer*2 d2(NDMAX) integer*2 nfmt2,nchan2,nbitsam2,nbytesam2 character*4 ariff,awave,afmt,adata common/hdr/ariff,lenfile,awave,afmt,lenfmt,nfmt2,nchan2, & nsamrate,nbytesec,nbytesam2,nbitsam2,adata,ndata,d2 equivalence (ariff,hdr),(d1,d2) 1 if(ndecoding.eq.0) go to 2 call usleep(100*1000) go to 1 2 do i=len,1,-1 if(fname(i:i).eq.'/' .or. fname(i:i).eq.'\\') go to 10 enddo i=0 10 filename=fname(i+1:) ierr=0 call cs_lock('getfile') call rfile2(fname,hdr,44+2*NDMAX,nr) call check_endian if(nbitsam2.eq.8) then if(ndata.gt.NDMAX) ndata=NDMAX do i=1,ndata n4=d1(i) if (n4.lt.0) n4=256+n4 d2c(i)=250*(n4-128) enddo jzc=ndata else if(nbitsam2.eq.16) then if(ndata.gt.2*NDMAX) ndata=2*NDMAX jzc=ndata/2 do i=1,jzc d2c(i)=d2(i) enddo endif ndiskdat=1 mousebutton=0 close(10) call cs_unlock return end subroutine getfile subroutine check_endian parameter (NDMAX=120*11025) integer*1 d1(NDMAX) integer*1 hdr(44) integer*2 d2(NDMAX) integer*2 nfmt2,nchan2,nbitsam2,nbytesam2 integer*2 iswap_short character*4 ariff,awave,afmt,adata common/hdr/ariff,lenfile,awave,afmt,lenfmt,nfmt2,nchan2, & nsamrate,nbytesec,nbytesam2,nbitsam2,adata,ndata,d2 equivalence (ariff,hdr),(d1,d2) if (nfmt2.eq.1) return ! correct endianess for this CPU ! write(*,1000) !1000 format('Converting file to big-endian',i10) lenfile = iswap_int(lenfile) lenfmt = iswap_int(lenfmt) nfmt2 = iswap_short(nfmt2) nchan2 = iswap_short(nchan2) nsamrate = iswap_int(nsamrate) nbytesec = iswap_int(nbytesec) nbytesam2 = iswap_short(nbytesam2) nbitsam2 = iswap_short(nbitsam2) ndata = iswap_int(ndata) if (nbitsam2.eq.8) return ! header converted. Data are bytes do i=1,ndata/2 d2(i) = iswap_short(d2(i)) enddo return end subroutine check_endian integer function iswap_int(idat) itemp1 = ior(ishft(idat,24), iand(ishft(idat,8), z'00ff0000')) itemp0 = ior(iand(ishft(idat,-8), z'0000ff00'), iand(ishft(idat,-24),z'000000ff')) iswap_int = ior(itemp1,itemp0) end function iswap_int integer*2 function iswap_short(idat) integer*2 idat,m2 data m2/255/ iswap_short = ior(ishft(idat,8), iand(ishft(idat,-8), m2)) end function iswap_short wsjt_9.3.r2792/ps24.f0000664000175000017500000000100611461555650012340 0ustar jtnjtn subroutine ps24(dat,nfft,s) parameter (NMAX=2520+2) parameter (NHMAX=NMAX/2-1) real dat(nfft) real dat2(NMAX) real s(NHMAX) complex c(0:NMAX) equivalence(dat2,c) nh=nfft/2 do i=1,nh dat2(i)=dat(i)/128.0 !### Why 128 ?? enddo do i=nh+1,nfft dat2(i)=0. enddo call four2a(c,nfft,1,-1,0) fac=1.0/nfft do i=1,nh s(i)=fac*(real(c(i))**2 + aimag(c(i))**2) enddo return end wsjt_9.3.r2792/entail.f0000664000175000017500000000111411231655622013017 0ustar jtnjtn subroutine entail(dgen,data0) C Move 72-bit packed data from 6-bit to 8-bit symbols and add a zero tail. integer dgen(13) integer*1 data0(13) i4=0 k=0 m=0 do i=1,12 n=dgen(i) do j=1,6 k=k+1 i4=i4+i4+iand(1,ishft(n,j-6)) i4=iand(i4,255) if(k.eq.8) then m=m+1 if(i4.gt.127) i4=i4-256 data0(m)=i4 k=0 endif enddo enddo do m=10,13 data0(m)=0 enddo return end wsjt_9.3.r2792/TSKY.DAT0000664000175000017500000037510010354254062012527 0ustar jtnjtn*CW- "<*                            ,*      &-$                                      !#%&%%&%!'  %(! *+     ""  C;     &+.0//00.-#  .7-+;>-  ## ## "''%#! "  ;3      '-269<=<62% $*!     '++)('%"!     &*(# ! "',17?FIHA>/$  !        $)..,+**'"  )120,*'" ""!!#&*,-+((,/27@IOPKL>/'# "!          $).0-++,+'" #,24433/%!%&%&+2651.-..06@JQSS`RA4+%%-/# !      %&"*01.++,,*)&    $*02220*" &+($%,5:953220/5AMV\bpcRA4-.44)!!$$""!    !#  $-*  !+0/.---,+//(R^       &+...,'#%.52.05;?>;998648BQ_iqxm[H;43442/+%"    $"  (!'-(  '''*-./0266-" 2>=VR.       !&)++*'&'-7@CCCGLJD@?=;<AHSaoy~tbOD?<;<>:2("     ",)#   !$',+#  !(-26:;6+" ,`j.       !"#$$&+7HQPQSURNLKIFFJNR\lz~xiZPMLJGA7.&#!    &31)!  !'/3."  #-48:7/'"aG          ")/8GXa]ZZWWYZZXTQOQZjxxxqdZXYWQE8/+($  '98+    &1:8*   %.5871)#  u%      "08>IZe_Z]^aeikkg_ZZajrrwvnebb`WH7-*)))#    $%&<<+      #+!  '09<4   &.330*$!     $*+'"!%&%       6@BFMQRRX]elquywtqsxvpswzwvwpcUF91.-,(    "&)' (@C3   &0 "+/49:3!  #*,**'#      %&$")19=;6/.32+$     !8BBA@?DKT[bhoxuy{~}yeSF@>;93+   #++&    *EK;#    "'.368;7.  !  !!  %(&+9DGGE?=C?6/$ #3=?<76<FQ[bgmz|{kZNJJF?81'  ##").HO@( $0698:<6+ &&# ## +>LPSURQUQF<2%',))/7@EC@?BHP\fjn}pbZWRF90*#  -3*&3HM>(    "+5:;;<>9-            $-.-+$   %1BQ[dihfecZM?4+!$/68;?AFNSVRORXajor}pki]I8/(# ! ! #2;74<IL<'!"    &*)*09<;:<>;0"    %%         !%,24563(   %)/9ER_ouuvxwseQB;1'"#/:ADFHJOW`b]Z\biry}y{ucN?4-'$ #%(($!.;CBAELM=+/;3!  (/-*-6:61011.%          '-1+         !#)/26:<A@6)  #(,18@IQ]mtuy{zxr`KB?=:55?HKJGIPX^dffgjotzvdUH=872.+(&##(,//.',?IIGINQQC7AJ<&  *0-*+34,%!!$'$    "    %.232,   %.36;@CFF?6-'! #),2;CINXflnnmlmpgSHJU\[UUYXRJKT]dhlosux|xm^LFHFCA>920049>C>4( %).<JOKJOUWVNHOK3 $%$"&-..0/++/2+"#(&   (82  $$$$%*-)'+3:;82*#     $,29@FGFGEA=92(  )6;>COZ]abacirse[[cswmeZTUZajmmoqruz~q[PQRSSSNGC@AFQ\YK:/-168<EKKFHNW]^YRI6  *./27@A<80()0.$!,-      %65' (+-/37>?958@B>;4-*$   !&-8@CEEGIIJI@7.&   #1& #256>FINW_ckvyonrhgjjmpnjjlorw~o`ZX\`bbbbZRT`kk]I:8BGCCILICDLYgjaQ8# &$ #*289:?B@;1&$''#   '&      "    $+%%-148:>FHC?DPOC;522-'$  #-8=??AFLQSQLF;-" 8x3!  '700?EAGXflv{tnjjlrz wh^airw{{pnsusgUB>MSNPURJABN`swhM1!#/52+()3=B?;=?=7.)$#''$&%!!$*+&!!#  &&!!$%&+15:>ABGIHHKTSH?;==80)# $0:?A>=EPTTTTPA0! 5X@+# !-$'6>@IXcjt}xxxyy   }lmwwbOLZdceg\MAFXo~iN90-*-5:94006AKMGFHF?8=4!%*($ $77* "+3559C<.'&$%'+'  "%%'++-15:@CGKKKNU[WOJFFIH>4,&" %& &/5=A;9DNPPRURG8)     3Ukuz[>81!  %3@JT[`i! ''  y|xhiu~nYMTgznTD>@<54642349COVUUZVE69.*-$ )?FA97<AGIO_O<5.+.484(!     #&*-/269>DFINOPUevkVNLKKF;3/+&'-/,% #*-3766<CGKNRRMD:/'!  /L|fLA@C8# .@KQU[cv-7/0AGA2"vfis}dPGHA5.+)-57;EOW[aicH3*",1% +;FKMIGMVUQSGCE;5:@D=0*(#  !$+2347;?CGHGINSYesm^USPMF;640+087/%"$#      $(-0/-16;AIQTSOIB<:753/++-0039CX]GAA@0 )/--.01--9HOPTZg| ";[YJQ^WA-# n]PH:1.('.647BO[elndL:0(!4:- !*8BKVUPUXPIE@EJEADFG@5-(!"$-7=?ADFIMMJIQY]cjkhd`]WMEA?74;?<2)'*& &+)%',//($(,.6CNSUVWWSPLJKIIIKPPQVZaidQGC=5& %;BAADILHGOYYY`iz#1$ >VtmH@TYE51$ *:2zi[PD5274045//9I[jojaTH?5,0EL?' %*?OKS[ZXTJA>@EJJEDEC@9.'!%  ",:GKKLIKPPMOY_aemswvqme\W[h[GHE@934<;/# ""&,15447864/%  $.;FMSZaaZVX_ccdc__agrzwmcYPE7+   %<MQSTTUUTW`jjmyFYK4    088/% 4b|}A!6OJC@.)7MM19JF:$sd[VL?=GG@@@705BUglif^UMGAEVZL4!#-,-KbTVcf`YPEAEHIF>;>CA90*"!-74/,..-3?LQRPJLRPNT_cdis}}wqnu}[QIFDAHbvfK<732349EJB@BBA@;.&3@LW]`[RTalqpmke`aju}zqg[I6&  +3AU]\`b^^_[Y`ow6Xh`I6=cncVOD:853<_{g]Z[[R>.;RZ&,GNXY=$#%*?PH2"%0A_m`< 2Kbpi\K1}kcbbZXZXQPPD;@IXhnnoja[UPT_^P@:<BD<8I\^cjlg`YRLKID@:7<A>:74-&'*.=OSPMSUIAGORSSQVZVSXbcdkv~xxpbXNLMMTpmXKFB><EdnRCACGC<4' $-6BRcaUKEN^iqmhfb^]^aa^XN@-    &)  ,5+ (>M`onimomutegz #?YehbZOQpgSIQj~ntjU^m\0&,@g{uiaYW]ovW<( #'.6;K`uiUONC&zqs}|qf`_\PMSX`mvurttk^UV\ZTR[dgcVMQ\gnpolf`ZQJHA:669;<?B>5047>QjvvtcONW]^]]ce_\_cacip{ysple`]ZUWdttkaXQKD>E_hRC@EIF?8339?CITd_NC@JXaec_\[[WROJE?6) #$" ""    ! 4B>=;2.1. #6Nby}tw~+4<Rct%F.|}T<4Fywjo{uK@QYO+vkknfadegr}y^TSRV^m~qddkqx}xsqfUF>?<3/59:@FJE=;AHWmt]Zenmhejkeadggmolpy}yyvmb_htxwne]VLDDIMKIJNOPNEDIORRRSVRKFHT_b_]ZXUSPJA:63*     ,0/,''#      $493%&9MTY]\RE:$  +:Ndw&:QP@SxHvjD aJ'&CP:)3F6uo!lRYa_Ewx}xx{^RNYhxxgkxtZA31457=@CHNROLPXdvvsy{vmhnqiflrw|xqqu~royrkdWOMRWVV[``\\]afjjhhd\WVY^cec^ZXVQOPI<30-%-1" #)253.(("  $ $>QYWG:1#!-C\jljmh[C'&+,"!5HYp  +LYby{}GU>QXYO4 4Rhkcbbzbg0 9OHB-':6*Me;w`8reblxqsqP;44=HNMOSZ`adp~xnrrlkqz|vyytme`ahmiciruqrzrrtsme_]\[XSPOH<3.+%)OS8136;>:0')%   -Jevu`J8"&8So}wnR/$.9DB4,*$ *1>Vi{!%-61!&Mz[.D{xE-AbzxX# !<MGud(>^gkrq<#73nK'sYKCK[a^`ht}wrt{}xsonptx{uoupxlcbgfa[WUNE>94-'#"(./7KPEDFGIID:10,(%#    $:WsweP9!#;[eB*!&5K\aTGE@87749=>7:@@DWjn} =USRZa[Q`a)XRaa`&Cr~Z5,0lu!25Ij} <;R}LDb z9yJ) |g[]lvx|}wrtvy{~}|:}tu|zrkhd]VSSNC=:;@HKPQONSSOMKJJHF=40.--*1<4)'% %3Jfz}o[I8,)3Lm!`dA^>/6I^m|zoiaZ[_dhotjq~z5[jaeuV -]:I#{/Lywy4M9)0^b,8qj`hnpqbZ&[5 !%&('3zz'aQ33[T}wqledjia^[[^cfg`XX[XRICFOVWK?::=>9+ %2HRJA>7/.3C[pz}oZIDHObQf1eRUgv7blp'!28@NeyL[<bqruE>"/Fg8?5M vn.tsTKPN?!MnZ4HhA).623JlmdaR=)-HgufJ<<6 h/"{%  %)zunm~|xvtutledd_WH>COXZQFBGNOD0,>Q]^TLJB955Hcmkkf][et}*l'm  );B5$=|@R-L{bQRjJ%eo- BWa"X4b8 $)_0wtpnr(,K"yY5to]CHW`m{yrw{L$+ GB>GL *G<2     (*)$y||xsttk\KCMdl`TKKRYZP<9OhhYPQND90,9LPJIMUe~.jg*g{IJsL /_xV]{jPMb"Vh%9W U? Z5k_ q = k  48DeUU'W !s4|KU8+<  (S`J6& :Q bK0 %--44)&/84//*,6233$ .@G?3  kW{zzn`QM`}_RNR[bcaVP^qiWVZO=/% ',*+0<Ocxw:=:%[%Y>B!B !pR[cQg2ibAfnmOyc/Bwy N B  4 2 : 5J|S, 3|   Q]&F ~ R r S S ; K  ^  a &AYTrSx)\7*4MUC&+=VVm=<3WV[Vcz_N=*$DcRIqH^  bD.""<HO\YG@JXgwzfM>?JOIMP/ *@UC$|0|wvvuj[MMb}tZOKPanpspb`haY]^Q<)!+9Xrw4f<* %GrkU-4 ^J[`oG5?  Qu` s[J7] i =  % :Jg U ]   z 6  "A"hRgU/C=  3 H ; ' _ V ] , f  " I @u({ Gf1GjyDt Y  -scOE^zu;xL=PD+4O[jx]S\ y`]\RL@$wnktwuw~v{yhdmnfXG>HZg_QGCF\nt|rb`WMKHDA0 #*4V{$HL-tY- 9^b8F0{W~ /Q v3p/sm   X DAP  O r H  & Z l73aFUR5 1 n   S 4 K x O /   " %  &?6OQ~7j^^O.+rRc 4'P ( Qam`f<QlHaA?T^v~[O\,^u\XM;!e\[_juz}{rp|}gdrzpkf[MMXTD6.1@PRF:328L_hr}xh\L<3,*0'"""%',A]o})}9j 1Cfx %03] $i :=bIqQ @ ! < q B  3 X y f  [ : ) 5 CN1T n t h W l R t I # + g W i#F" O!2|JlE '~eC g@1+-?ZhwqvZWYMpNCKObudHCLu\CA8"+*wZSX^\ZXX]ah| gWVi}wmaO:++/'!0?D6%.ET[elj\C1(  $+-()0;L[bgv6G*k/;T~G\   H&K X IU B \ :n)zZa{m zH@NZ(Tr9u302h{DoiQdqR@Zs?im{}uiJ<<PhsykOHG@GTH7?>1AL@:A>*"&"4:pUMOSLD>;EWe`wstpaRGEQ`ecjsvsohU<!  %:B5! /;<DR^V9% (323ANRPKO_vxjkt|$+5@BEH5AVV]q~#5@jYLD"I:f(& "VpC(.sZ%iO(]"Cz69BR+k,nJ/$+6807EKN[gXm^AXH3nJINU]mhWevhD)#Y^H@DC4193)+$   squyxaPE@?<;96=Pauned^TKD?=@FIFGPVXYSA*(<A5!  $%"/:8&  .9AOYWMGMYes|snslVHNW\epunbc|"-2<Wn*R\62>IX|z_,/U;|7cZ; f[wax3 !8?C6y8 &DY4O[OQD' J !1 ayBrytrvsB'#,:PlgD<MK+  aJ%);:  |xhUOSX`cYNHA979;<=@HVe}hYUYTJDA?><<<6378896,  16.   3BHMRRRTU[luld\Z]]TE;?BENPMKLUm "+-?]y/^YK@"IF #6PQ_{o5QECLZo?X[^[YS?K6 4%Kn;V y*f=,@UCvH50l "(O! y\SG9.$$'9LK/%'+}k#{ndTC=@FNPG?=>=>?>=@DFMVZ^\TLGKONHCA>741)  !     &8>FPX_[U_v}j^SHCFFB:41-07757=H[t4IOQh#yCei=P}i[ecj2#/UR<OY@-=HD qhwM _:.)$# mqjkJ# %"    yvreYL@98<@>835=?AB@<=>=@FIIGEA@ESYTKD;/$   )5BMV\XVcquvqg`WE4,1871%")38=EMZnpf`\W_,V~WCtb8yRYa_vtrua?9Sv>o_4"jP:+Bo}[&p=+04xfdt3<KjubG7:8"  {rnml_RI@:643/-/5;:<@A=50./489;?>CL]dZNB3#&1<EIIPWXV\beeaL0#)57,#4972-,:=9<?=If{|~/ShqiVU[bj"[~9J/ uZ1.9?OTTWgurcLAR_V-/=% Eesp*M3 _@'2F(T55?>%o^SZberwxxmdWLE@:51/,+.5879>D?2'#""',4=@GR^_RG:'   $,4@GD>ES]dcS:+/61##29/# $'(3JXj2DRjkVHB?@Hn$/Duw]XXJD9%  "#!#H7.=55Ik] zksobK=>9+r_SIHJIXsuq}unktzwzvnWIC<632572.04678=@9) %0:CJNPNH@2  /=>:BOWZVPE==5$ -2" #.6Z'A]cecS<)-T Lt\!  x  %QSEPs|?o\^YUF3&ucPGDB@<ANLNa}qe_ZX_ijeaj}}|pkwx]KA;3--1895256469:8.#"-7@DB=??9- &5@GT^\QGIPSH,  ! 9m|lr.VjqhP5$0[}rz~vrkfa`nInlEEO~k^gxu_XamjSJKK: rbUG>><7.+38?Son_VRSUWZXUW^iorz}z~}xwxsr~{{~}yzrd\XRHB@:0+*.22387202553,&!'/243/6;5)   1CSckdWONQM5    8CIS`s*`nU3 ,M|{|rxuYLWkdWRLMQOTj6}aQL]oa=/9RmucM@<4ydXNF>666/!%2=Nk}hXNGIQVTLGJQY[X`hiio{}tmigebhu}{vqomfbbciszvqry{yz}udWPKD=<CB7/*()*085.+**+,*'###%('-2/$ )@Tdnng[M=, ,5;EWj~0aV'$Kqsk]JM[bXSjzgH=G_wbL:2.5@@BOp#5gODQ`J$1ISOC5)hOD?93..3/#1>Qm~|wfVG<<BKMF;8=IKBEQY[crulc]YWUWgz}}wpje`[XQNLIJS_ccdhknprvyyyyzuiXLHGA:8@B7.($$'),+&# %&%"   $)$ #;P_kpiYA( !*,6FUhu})= $Qune]I8'2ELIJ_gP5-:WyZ@0&  (6<CVfcbhf\Yfz|osy7gD?D) #,2+ vbM>5/+)'++!&2BXr{x~{l_PA8437=;3-/7;54<HNTagaXSPMLN^t{zxsopoeZRKJFA>967>HOUXYZ]_bfknoonh\NEBB@:534/(#"$%!""      ## 0?LXa`S9!  '&/<COWWa|18d}scNCC;'8?;;A>+-Ngk5 !.383*,0-,,2BF=?L_t=E)"  |{wl`O>/$!!! )4EZs}y}q_PC94.**--*')-/,,08?FPXWQMIGIKXnuqleabcZNF>;;9311,-8BIKLORSTUY]_`^WPIC@>;61*((%         %0:EME/ '%*.-38;KDz #D\pte[J2$! .) + $FYS     (DeFJT" }vy{upn^J<,&4EUj{~wrwrXE<80*&%&&!!(+(&'+.6@FIHEB@CHThoi_XTRQLC<66:7000'&.7=DGIHHKLNQRSPKIE?;61-,&!"!         "*/-  "*?%C)=TiPF;( (EQB +Y ESo*|wqjfecRB9+    -CSbjkgfnyv^H=9.&$#$$#$" "$).035667;>GV\WNGC@=:3-.8<4,,+%"%,5@ECABHKLLMMIEC=62.**,&                 %?t] (=`xsU4 08/ ,sAUBB1urpmlljc[WRI?:5+  #<P_ddbadixtcN=5-'$!"#!%(!#'*-2<@=6/+($!#.4,$%%"!'09>??BFIIHHIFA<4/-,,--%         38L\T%64&)&MN2):wb\^^[VQJHGA6230&  &7IY_cfgfdo|pcQ?4-(%##!  "$$! !#(/6;=>AA@@@BB?82/.-,,(        "cy FsAs[QQPIB:57:7.).* 2AKT[`dfem}zodUE90)'&%"      &*05545668:=@<3-+*+-*$      S<z}>oCnWGB@:1+*-12+#" *9<AHOVY\gu~zshYI@940*$!    ')+,*)+/245683)%$$*2,"     'V~y|/d}=v`I:551'$'!"=5(.;GLR^lxyrhZKEDA;1'!      !$'&$$&(()-/+$  "(.)  .M_xz~~lbfmutwyy$Oi_,ufP=64/*  2+.;BJWfv|ui[MFHJF=3+#  #'$  #%"  ):V~ossrw|unhehihrwh[RVeosqwtko*I\cE}~paQ?663+%     *4;CQaq}zn`SKJOOF;0%     !!  $-:NbjgcbciuteYW]bbcm}ztvzzxobTJGKUdqusv}tiksCdqtJ6~{l[M>/+0/&  (.8FUervpdWLIOMB7-#       -6?MZ^]]bis}r_W[ca\ajswtqtyywvxyp`X[aedXG?@FO^nutt|xdbl{-[|I, |{s`QB1%%)'  '4AO]ef_QD>?<3,'!     2CLT`ihkxc\_`YRV^bb^\`ltsnji\MEGMTWQIHNU[dmpsxyvtwzwvxqaZbn|,b:"Ji}NrkbWM>/**'  *2;FPURF5*&%!     $8JXdroffcXOOTXVSU\itvoe`UG<;DNW[]^_aciprtxleceffeb[TXclt|Lf *Bi< udYTQK?544,&,07?FG@/    0H\l~}oki`YWZYRPW`horldb[OB=HT^cgfbachopop[WZ[VVZ\VRSYckoov~75^t])gUMMPJ?875+ %).4:?>1    %6Nh{zyohigdce`WSYcdbbcdfe^UNRW\^^]^abbdfheWPOPNOUYWSONV_a^fow+@C-uWEAIPI;31-%   !&+065,"    #/=Skx{vokmqu~wtty}wlgkmiec^YUW\]ZY]bhmmg_YW[_acfigcbefaYOIGFGLQQOLKNRTVaiq'73 gJ;<ISJ9.+("    '--)$  # #+8KW\]XRQXafmof__acfkokfeec`ZURNLORSSW`jsvrieejpqppnidefc_TRNF>;@EECEHLMOU]dn$47zZC9<HPH9.)& "')*($"!       &000578;@EGGD==DLOPV^^YVX\ZQKFEEFIKLR]elrqnv}vqmf^[[YVPPNE922567=HPRSW[al *9;sU@:=FKE;2+#     !$(*'%&$!        #).20*#".9=>BHIGIMQQNHDDFGIIJOTW_gikzvlh`TMNPOPNE8-&%).5BQYXVV[cl} #5A;nS@=BFIGA8-"       #%$%'&"     "((! *+,.269==<@GHEEFGHIJKIIPZ`cqqe^VKFFIMLI<+ #*8Nbg_WWagm~0?C4eN?=BFHJD8)      !&+*&   $!$! '*))0:BB@><=@BDDCFNV[cs{gXPJFDCDHB?4% $*8Mdun[Xbho%:A:$y`L><AEGGA4$  !&(&!   #'.7;95127<AFGHMUY^fqsk[MD??@@?@93)  #)4BUkl\V\cr6>8' zbNA>ACC@8,             !#*031,'+28>DGGINSY_caZRI>9:=>?=/%!(19ALTVWZcw,5. jTGDEDA;0#         "    &)($#',39>BFJQWXWTRK@;@CC@9 ",47:DPY\`k| s]QLHD?:-$!    $)2<CIMNNORSLB?EHD:- '39;BP^d`dpxe[RG?83( "!    #)1;IMIGHKLG??DE=/*5<DQakkdixvbZQD:3/%     "%'*/9>>???@@?@?6)&2=FQ^gjkn{w^QH=4/) !!$$#%&%$&*.2447;>>4"  ,6@JRW[_frz]I=3.*"   &**(%""##" !#(,/1464*%0:BKRTSRWhv[E7.+)$   ~}&,+% !!#&+032232-#"(/5<CJOPNLNZo|oWC4,)$   }}~  &% $'*048:87773-&" -379=AFJJIIRcxvlqlTA3+&    }|~ %*048;=>=;83.(&(/3579;>CHLR]ly}voltiO;-&!  |{~   (/2468:<:61,('*%)07;=AIVdlpsttpopueL8+"  ~|}       #)*+,.022/+'#""#*5=CGLWl|rljinwrZD5*!  !%)**(&# +18@GMS\kzzpiikmvwbJ6(  "'())(%##&.38>EKPW`gfbdjmpx~z|}nY@+  ###"!!"%)048:>CHMQTW\dkopsttqopt|{oX<%   !'+.0247:?CFINU]dhiheccfktzvjR4  !$),*-13569;<=@GPX_ba``cgnw|tjX@( $&%$%'$*021001238?IRZ`baachp{~sbK2   #%%$%(,19BLU\cedceir~s^E,     '.7AKU]adffhlr{ykV>)       '2=FMTY^beinu|zvuuusm`N;*  $0<ELQSVZ_hqx{qlkmmmjdYMB6$ $&'#    "*29?DHLRX_it{wkcabdefe_TE7(#'&#     "',048:=BIQY`ktzvkc_]]]]][TH8% !$!         $*0468;@HPY`fnty~vme`^]\ZWTMD7'*1.%   &+038?HS]flqx~yof_\ZZZXUOF:,  ,KZTA-     &,28?HR]hpw|ti_WRONNMJD;/ +86*#&()('$     '/5;@ELT]gpxzl^SKFCA?>:4* $),--+(%!    -7@GLQUZaiqyp`RIC?<:861) !#$$###"!     #2=FOV\aflsz|l\NC=977762,#   "%''&#           (7@IQY`gnu|}slbVJ@72/---,*&    "&)('&$" #(/CJQW]ciov{~|ygVNE=5/+('%# #(.5<PTX[_cgkoqqolhbO?:51-*'%"           $%%%%%&),17>DKQSUWZ^beggd_XQJ7-+)'$"                  %'*,/146:>BFJNKMPSVY\]][VOG@:,&%#! ?k3  """""#&(*-0257:=@CFHNPSTVVUSPLGB=84*# D;$XK   #&(*+,,,,./02479;=@BEHKRSTTSQOLIE@<73/ L [9K   !##$$$$$###$$%&')+-/24689:;>ABCDFGHIKLMNOQHGFDB?;73-(" (D^sW !#%(*+-./124579;<=>??@ABCCDEILMMMMMMMLLKJJI)&" "%(+.1358:<>@ACDDDDDDDDDDDCCCBA?>=;97520-  #%'(*+,-/01234556655/)'%#            wsjt_9.3.r2792/grid2k.f0000664000175000017500000000033711015074716012732 0ustar jtnjtn subroutine grid2k(grid,k) character*6 grid call grid2deg(grid,xlong,xlat) nlong=nint(xlong) nlat=nint(xlat) k=0 if(nlat.ge.85) k=5*(nlong+179)/2 + nlat-84 return end wsjt_9.3.r2792/msgtype.f0000664000175000017500000000170311015074716013236 0ustar jtnjtn subroutine msgtype(msg,ntype,nrpt1,nrpt2,s1,s2) character*22 msg,s1,s2 i1=-99 i2=-99 i3=-99 i4=-99 i1=index(msg,'[') if(i1.le.0) then s1=msg s2=' ' nrpt1=100 nrpt2=0 go to 100 else if(i1.eq.1) then i2=index(msg,']') s1=msg(i1+1:i2-1) nrpt1=100 s2=msg(i2+2:) nrpt2=0 if(s2(1:1).ne.' ') nrpt2=1 else if(i1.gt.1) then s1=msg(1:i1-2) nrpt1=1 i2=index(msg,']') s2=msg(i1+1:i2-1) nrpt2=100 endif i3=index(s2,'[') if(i3.le.0) go to 100 i4=index(s2,']') s2=s2(2:i4-1) nrpt2=100 if(nrpt1.eq.100 .and. nrpt2.eq.100) then nrpt1=75 nrpt2=25 endif 100 ntype=1 if(nrpt1.eq.1 .and. nrpt2.eq.100) ntype=2 if(nrpt1.eq.75 .and. nrpt2.eq.25) ntype=3 return end wsjt_9.3.r2792/pctile.f0000664000175000017500000000041211022616637013024 0ustar jtnjtn subroutine pctile(x,tmp,nmax,npct,xpct) real x(nmax),tmp(nmax) do i=1,nmax tmp(i)=x(i) enddo call sort(nmax,tmp) j=nint(nmax*0.01*npct) if(j.lt.1) j=1 xpct=tmp(j) return end wsjt_9.3.r2792/unpackcall.f0000664000175000017500000000564511761710021013666 0ustar jtnjtn subroutine unpackcall(ncall,word,iv2,psfx) parameter (NBASE=37*36*10*27*27*27) character word*12,c*37,psfx*4 data c/'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ '/ n=ncall iv2=0 if(n.ge.262177560) go to 20 word='......' if(n.ge.262177560) go to 999 !Plain text message ... i=mod(n,27)+11 word(6:6)=c(i:i) n=n/27 i=mod(n,27)+11 word(5:5)=c(i:i) n=n/27 i=mod(n,27)+11 word(4:4)=c(i:i) n=n/27 i=mod(n,10)+1 word(3:3)=c(i:i) n=n/10 i=mod(n,36)+1 word(2:2)=c(i:i) n=n/36 i=n+1 word(1:1)=c(i:i) do i=1,4 if(word(i:i).ne.' ') go to 10 enddo go to 999 10 word=word(i:) go to 999 20 if(n.ge.267796946) go to 999 ! We have a JT65v2 message if((n.ge.262178563) .and. (n.le.264002071)) Then ! CQ with prefix iv2=1 n=n-262178563 i=mod(n,37)+1 psfx(4:4)=c(i:i) n=n/37 i=mod(n,37)+1 psfx(3:3)=c(i:i) n=n/37 i=mod(n,37)+1 psfx(2:2)=c(i:i) n=n/37 i=n+1 psfx(1:1)=c(i:i) endif if((n.ge.264002072) .and. (n.le.265825580)) Then ! QRZ with prefix iv2=2 n=n-264002072 i=mod(n,37)+1 psfx(4:4)=c(i:i) n=n/37 i=mod(n,37)+1 psfx(3:3)=c(i:i) n=n/37 i=mod(n,37)+1 psfx(2:2)=c(i:i) n=n/37 i=n+1 psfx(1:1)=c(i:i) endif if((n.ge.265825581) .and. (n.le.267649089)) Then ! DE with prefix iv2=3 n=n-265825581 i=mod(n,37)+1 psfx(4:4)=c(i:i) n=n/37 i=mod(n,37)+1 psfx(3:3)=c(i:i) n=n/37 i=mod(n,37)+1 psfx(2:2)=c(i:i) n=n/37 i=n+1 psfx(1:1)=c(i:i) endif if((n.ge.267649090) .and. (n.le.267698374)) Then ! CQ with suffix iv2=4 n=n-267649090 i=mod(n,37)+1 psfx(3:3)=c(i:i) n=n/37 i=mod(n,37)+1 psfx(2:2)=c(i:i) n=n/37 i=n+1 psfx(1:1)=c(i:i) endif if((n.ge.267698375) .and. (n.le.267747659)) Then ! QRZ with suffix iv2=5 n=n-267698375 i=mod(n,37)+1 psfx(3:3)=c(i:i) n=n/37 i=mod(n,37)+1 psfx(2:2)=c(i:i) n=n/37 i=n+1 psfx(1:1)=c(i:i) endif if((n.ge.267747660) .and. (n.le.267796944)) Then ! DE with suffix iv2=6 n=n-267747660 i=mod(n,37)+1 psfx(3:3)=c(i:i) n=n/37 i=mod(n,37)+1 psfx(2:2)=c(i:i) n=n/37 i=n+1 psfx(1:1)=c(i:i) endif if(n.eq.267796945) Then ! DE with no prefix or suffix iv2=7 psfx = ' ' endif 999 if(word(1:3).eq.'3D0') word='3DA0'//word(4:) return end wsjt_9.3.r2792/glpr0000664000175000017500000000231011015074716012261 0ustar jtnjtnlpr astro.f lpr Audio.f90 lpr avemsg65.f lpr avemsg6m.f lpr avesp2.f lpr azdist.f lpr bzap.f lpr chkmsg.f lpr coord.f lpr db.f lpr dcoord.f lpr decode65.f lpr decode6m.f lpr deep65.f lpr deg2grid.f lpr demod64a.f lpr detect.f lpr dot.f lpr encode65.f lpr extract.f lpr fivehz.f90 lpr flat1.f lpr flat2.f lpr flatten.f lpr four2a.f lpr fsubs1.f lpr fsubs.f lpr ftsky.f lpr gasdev.f lpr gen65.f lpr gen6m.f lpr gencw.f lpr gentone.f lpr geocentric.f lpr geodist.f lpr getpfx1.f lpr getpfx2.f lpr getsnr.f lpr graycode.f lpr grid2deg.f lpr grid2k.f lpr igray.f lpr indexx.f lpr interleave63.f lpr jtaudio.c lpr k2grid.f lpr limit.f lpr longx.f lpr lpf1.f lpr moon2.f lpr MoonDop.f lpr morse.f lpr mtdecode.f lpr nchar.f lpr packcall.f lpr packgrid.f lpr packmsg.f lpr packtext.f lpr pctile.f lpr peakup.f lpr ping.f lpr ps.f lpr ptt.c lpr ran1.f lpr resample.c lpr s2shape.f lpr set.f lpr setup65.f lpr short65.f lpr slope.f lpr smooth.f lpr sort.f lpr spec2d65.f lpr spec2d.f lpr spec441.f lpr stdecode.f lpr sun.f lpr sync65.f lpr sync.f lpr syncf0.f lpr syncf1.f lpr synct.f lpr toxyz.f lpr unpackcall.f lpr unpackgrid.f lpr unpackmsg.f lpr unpacktext.f lpr wrapkarn.c lpr wsjt1.f lpr wsjt65.f lpr xcor.f lpr xfft.f wsjt_9.3.r2792/hscroll.f900000664000175000017500000000036611015074716013371 0ustar jtnjtn !------------------------------------------------- hscroll subroutine hscroll(a,nx) integer*2 a(750,300) do j=1,150 do i=1,750 if(nx.gt.50) a(i,150+j)=a(i,j) a(i,j)=0 enddo enddo return end subroutine hscroll wsjt_9.3.r2792/HowtoWSJT-SuSE.html0000664000175000017500000001564211015074716014721 0ustar jtnjtn
HowTo for Linux SuSE 10.0 ( DL3LST)

Use Yast  to install the following packages  from the Linux  Distribution DVD

Compiler
      cpp
      gcc
      gcc-c++
      liggcc

Tcl/tk
      tcl-devel
      tk-devel
      alsa-devel

Python
        python
        python-devel
        python-imaging
        python-numeric
        python-tk

--------------------------------------------------------------------------------------------------

// Fortran compiler
Page:                    http://www.g95.org/
Downloadpage:    http://ftp.g95.org/
Page:                    http://ftp.g95.org/g95-x86-linux.tgz

install: g95

follow instruction File:  Install 
 
How to install g95:     

File Install: 
1) Unpack the downloaded tarball (e.g. g95-x86-linux.tgz) in a directory
of your choice:

   tar -zxvf g95-x86-linux.tgz

2) For your convenience, you can create another symbolic link from a
directory in your $PATH (e.g. ~/bin) to the executable

   ln -s $PWD/g95-install/bin/*g95* ~/bin/g95


You should now be able to run g95 and create executables.
To get a list of environment variables that control the library, run a
compiled binary with the --help option, ie:

  ./a.out �help

From console try the g95 command .
The system should answer
g95:  no input files 
 

I changed the SymLink to /usr/bin where i installed the g77 packages too
ln -s $PWD/g95-install/bin/*g95* /usr/bin/g95



gcc-g77 compiler
Page:               http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=82721&release_id=15880
Download:       http://prdownloads.sourceforge.net/mingw/gcc-g77-3.4.2-20040916-1.tar.gz?download

From  gcc-g77-3.4.2-20040916-1.tar.gz  we need the /libexec folder  for l2g 
copy from the archive  the folder
/libexec        to      /usr/libexec
 
------------------------------------------------------------------------------
other packages
------------------------------------------------------------------------------
Install: PortaudioV1.19 

Page:                http://www.portaudio.com/usingsvn.html
Download:        http://www.portaudio.com/archives/pa_previous_snapshot_v19.tar.gz
./configure
make  all
make  install
------------------------------------------------------------------------------
FFT3
Page    :            http://www.fftw.org/  
Download :       http://www.fftw.org/fftw-3.1.1.tar.gz
./configure
./make  all
./ make install

------------------------------------------------------------------------------
libsamplerate
libsamplerate-0.1.2.
Download:         http://www.mega-nerd.com/SRC/download.html
./configure
./make  all
./ make install
------------------------------------------------------------------------------
reed-solomon-4.0
.Page:  http://www.ka9q.net/code/fec/
Download:       http://www.ka9q.net/code/fec/reed-solomon-4.0.tar.gz
/configure
./make 
./ make install


------------------------------------------------------------------------------
F2PY  ( Fortran to Python )
Download:       http://cens.ioc.ee/projects/f2py2e/2.x/F2PY-2-latest.tar.gz
python setup.py install


Scipy_Distutils
Page:                                     http://cens.ioc.ee/projects/f2py2e/2.x/
Download:                             http://cens.ioc.ee/projects/f2py2e/2.x/scipy_distutils-latest.tar.gz
python setup.py install


WSJT source code
K1JT Page:                           http://pulsar.princeton.edu/~joe/K1JT/
Download page:                    http://developer.berlios.de/projects/wsjt/


./configure
make
python wsjt.py

that�s all  - have fun 

------------------------------------------------------------------------------
If you need the packages for other Linux distributions  see linkpages below
------------------------------------------------------------------------------

Python:
Page.                                    http://www.python.org/download/releases/2.4.3
Download:                            http://www.python.org/ftp/python/2.4.3/Python-2.4.3.tgz   
/configure
./make  
./ make install
than run
python setup.py install


Numeric 
Page:                         http://numeric.scipy.org/
Download:                 http://prdownloads.sourceforge.net/numpy/Numeric-24.2.tar.gz?download
install

Iimaging  (be sure  Tcl/Ck  Lib was installed before)
Page:                         http://www.pythonware.com/products/pil/
Download:                 http://effbot.org/downloads/Imaging-1.1.5.tar.gz
python setup.py install

------------------------------------------------------------------------------
other sites 
------------------------------------------------------------------------------
for gcc compiler try
http://gcc.gnu.org/mirrors.html

Example German server
ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-4.1.0/
ftp://ftp.gwdg.de/pub/misc/gcc/releases/gcc-4.1.1/

the full program  ( !!! filesize is 21 MB  )
ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-4.1.0/gcc-core-4.1.0.tar.gz
./configure
make
make install
wsjt_9.3.r2792/tm2.f900000664000175000017500000000042511461555650012427 0ustar jtnjtnsubroutine tm2(day,xlat4,xlon4,xl4,b4) implicit real*8 (a-h,o-z) parameter (RADS=0.0174532925199433d0) real*4 day4,xlat4,xlon4,xl4,b4 glat=xlat4*RADS glong=xlon4*RADS call tmoonsub(day,glat,glong,el,rv,xl,b,pax) xl4=xl b4=b end subroutine tm2

x٩n05{)^Z=􂾥3W#2ybv"6taBۓCYpFc/ug mӯm׬]{줱9x؃b1KԬ"3 >n Nw=T!?".BԻ:a޸cz R"!. 8X0@pp \,sԼ=hºv~.O\ qHpE^gN\lve/Ӑ 8smp4 8Ӑl5}=CCT4<ݏv0άgyQAP4b ܋Ѓ |FhșFb{hDE[qW9*i8ϱKAWX{RQ7VNhZ0e7qO7=ߌsݫ}*VOq)  r_bAfXJEzufJb,EqۉQv6cRO7quVN(Uv1ӽ̱JL5]7TwW)>|ן^c^W1/J: l0=,9?.? }Jin9CWTC ى3(+XTw"Cm3 ޭv6{yQc6.kYc5wŻT~,5Ưt#hzagw?"W3G`eC]S)q]) A.T{%F~ɹڥ843m-zاTJ()KbSjʕL!h#!4v ;o f Dl~%gzSe0Nz2ke}u~8EVU/b:U݉vaxZh~8MM!zz"]~+į˫<+'QTbA4XjHZ =ICujPyBC Q˗ >cN 5 u!} nAp qeZ#5 u\l5ī+=LZ4f"@/4+9?ʿNwΤdthh ^?$T/Y  9f sw8t6.I^tއ'45]㼜Քn+];wNrAgU`y3get p2+UYe$i+GwCnfT]TRbQFY˼vs(Hǎ77߯ѭYSj endstream endobj 13 0 obj<> endobj 14 0 obj<> endobj 15 0 obj<>stream xڼX]o +}{ vRi>lX* A7j3΍bϢ͝yr)2NW!e+ݤ8LVd(!U5|ZEC:e> AQ+1 lV:F9 Z9D))vcPP1R_D2))OJP8rC38*P,r6c!:82'h^@R H R5"$ 3$8THE@2,q4 e9DJ aYEy$#'R x£ 8d^HYh.J"O9E2R岆2.!s*QJ$4$REF JkN-jH!N}5B"d x̤ +5FVl2 Ypql"dU3@qP[ 0G#M_xՀ x1I 62n9VkD=ӝonӿ_r]f]vcF]pVI"s8g$TiCf<#F3kKو" 2L"ůT|JZ$xɋ$Ip D/z?w*_sD/ ^Xr5Z 9d̒dOmVX[ul RbW_ |5f=TAԲPe7fUe҇/_Z1q/נ{8?8%VXaUԲn~ =[ }zݾZݎ=tն?}1v×~_w׫a}J~x1??+XwwfuzoeͿn} ;CAqS꼒hG,y.v?w G;V_Ɠ4Uz&)>g?gRP\<Ƈu~B?=S~JX.6wGH2$ Ʈ%mߤU鄍$l$a# IHF6$l$a# IH:Io\.^+x4,jX*(+Vg}q“ 3\N]F얶z³cɖfm&[zXrl6e3 %S|f4$JvSb&iTjWQL2b䕙'1JqpiYLaRP\oFO7O`& 6aM| ɫӾ>e=٬o0!Wþ;ޭy ޯ7w}n|77f0hU? Zt}ů j.:lcG@Ñf93\vTj>JM`^C?Qƃ>b%r1y0)::~Աu tcШCu:[a~cv~kho-_Jώw" l_lam"ZJ$CAV&aMɇ&SlbSlؘ&?&_l.̷䚮* tM5Vx̰bMK-\\SQo5ݏ<&gb+>stream xڼXn8n3EY`$A>yp5kԵ 4g(8}II B eVrScƠƨ(Iq}alI9f|N.|uS1\}}u>stream xڌj0 _Eն?C)de Ka@q`{i躌^賔cD  +?XS$`度T$PDCȊ@ZD"kC> endobj 19 0 obj<> endobj 20 0 obj<> endobj 21 0 obj<>stream Acrobat Distiller 7.0.5 (Windows) Princeton University D:20080715172720 Acrobat PDFMaker 7.0.5 for Word 2008-07-16T11:48:08-04:00 2008-07-15T13:27:40-04:00 2008-07-16T11:48:08-04:00 uuid:98dc3692-1fdb-4154-a85d-8dbce6e01bdb uuid:09abf418-206a-4eea-b5fe-dbaa05d18a89 17 application/pdf MAP65: A Panoramic, Polarization-Matching Receiver jtaylor endstream endobj 22 0 obj<> endobj xref 0 235 0000000000 65535 f 0000009854 00000 n 0000010139 00000 n 0000011979 00000 n 0000134884 00000 n 0000135113 00000 n 0000136590 00000 n 0000136831 00000 n 0000140114 00000 n 0000140389 00000 n 0000141660 00000 n 0000290672 00000 n 0000290903 00000 n 0000293516 00000 n 0000293990 00000 n 0000294223 00000 n 0000296155 00000 n 0000297629 00000 n 0000298016 00000 n 0000298051 00000 n 0000298075 00000 n 0000298159 00000 n 0000302629 00000 n 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f 0000000000 65535 f trailer <> startxref 116 %%EOF wsjt_9.3.r2792/getsnr.f0000664000175000017500000000115411033433544013046 0ustar jtnjtn subroutine getsnr(x,nz,snr) real x(nz) ipk=0 !Shut up compiler warnings. -db smax=-1.e30 do i=1,nz if(x(i).gt.smax) then ipk=i smax=x(i) endif s=s+x(i) enddo s=0. ns=0 do i=1,nz if(abs(i-ipk).ge.3) then s=s+x(i) ns=ns+1 endif enddo ave=s/ns sq=0. do i=1,nz if(abs(i-ipk).ge.3) then sq=sq+(x(i)-ave)**2 ns=ns+1 endif enddo rms=sqrt(sq/(nz-2)) snr=(smax-ave)/rms return end wsjt_9.3.r2792/chkt0.f900000664000175000017500000000101111236344443012722 0ustar jtnjtnsubroutine chkt0(nplain,naddon,ndiff) !f2py threadsafe !f2py intent(out) nplain,naddon,ndiff integer dgen(12) character*22 t0msg2 include 'gcom2.f90' call cs_lock('chkt0') call packmsg(t0msg,dgen) call unpackmsg(dgen,t0msg2) if(index(t0msg,'/').gt.0) then naddon=1 else naddon=0 endif if(iand(dgen(10),8).ne.0) then nplain=1 naddon=0 else nplain=0 endif if(t0msg2.ne.t0msg) then ndiff=1 else ndiff=0 endif call cs_unlock return end subroutine chkt0 wsjt_9.3.r2792/f2py.py0000664000175000017500000000014010465172107012624 0ustar jtnjtn#!/usr/bin/env python.exe # See http://cens.ioc.ee/projects/f2py2e/ import f2py2e f2py2e.main() wsjt_9.3.r2792/init_rs.c0000664000175000017500000000630611233122514013206 0ustar jtnjtn/* Initialize a RS codec * * Copyright 2002 Phil Karn, KA9Q * May be used under the terms of the GNU General Public License (GPL) */ #include #ifdef CCSDS #include "ccsds.h" #elif defined(BIGSYM) #include "int.h" #else #include "char.h" #endif void FREE_RS(void *p){ struct rs *rs = (struct rs *)p; free(rs->alpha_to); free(rs->index_of); free(rs->genpoly); free(rs); } /* Initialize a Reed-Solomon codec * symsize = symbol size, bits (1-8) * gfpoly = Field generator polynomial coefficients * fcr = first root of RS code generator polynomial, index form * prim = primitive element to generate polynomial roots * nroots = RS code generator polynomial degree (number of roots) * pad = padding bytes at front of shortened block */ void *INIT_RS(int symsize,int gfpoly,int fcr,int prim, int nroots,int pad){ struct rs *rs; int i, j, sr,root,iprim; /* Check parameter ranges */ if(symsize < 0 || symsize > 8*sizeof(DTYPE)) return NULL; /* Need version with ints rather than chars */ if(fcr < 0 || fcr >= (1<= (1<= (1<= ((1<mm = symsize; rs->nn = (1<pad = pad; rs->alpha_to = (DTYPE *)malloc(sizeof(DTYPE)*(rs->nn+1)); if(rs->alpha_to == NULL){ free(rs); return NULL; } rs->index_of = (DTYPE *)malloc(sizeof(DTYPE)*(rs->nn+1)); if(rs->index_of == NULL){ free(rs->alpha_to); free(rs); return NULL; } /* Generate Galois field lookup tables */ rs->index_of[0] = A0; /* log(zero) = -inf */ rs->alpha_to[A0] = 0; /* alpha**-inf = 0 */ sr = 1; for(i=0;inn;i++){ rs->index_of[sr] = i; rs->alpha_to[i] = sr; sr <<= 1; if(sr & (1<nn; } if(sr != 1){ /* field generator polynomial is not primitive! */ free(rs->alpha_to); free(rs->index_of); free(rs); return NULL; } /* Form RS code generator polynomial from its roots */ rs->genpoly = (DTYPE *)malloc(sizeof(DTYPE)*(nroots+1)); if(rs->genpoly == NULL){ free(rs->alpha_to); free(rs->index_of); free(rs); return NULL; } rs->fcr = fcr; rs->prim = prim; rs->nroots = nroots; /* Find prim-th root of 1, used in decoding */ for(iprim=1;(iprim % prim) != 0;iprim += rs->nn) ; rs->iprim = iprim / prim; rs->genpoly[0] = 1; for (i = 0,root=fcr*prim; i < nroots; i++,root += prim) { rs->genpoly[i+1] = 1; /* Multiply rs->genpoly[] by @**(root + x) */ for (j = i; j > 0; j--){ if (rs->genpoly[j] != 0) rs->genpoly[j] = rs->genpoly[j-1] ^ rs->alpha_to[modnn(rs,rs->index_of[rs->genpoly[j]] + root)]; else rs->genpoly[j] = rs->genpoly[j-1]; } /* rs->genpoly[0] can never be zero */ rs->genpoly[0] = rs->alpha_to[modnn(rs,rs->index_of[rs->genpoly[0]] + root)]; } /* convert rs->genpoly[] to index form for quicker encoding */ for (i = 0; i <= nroots; i++) rs->genpoly[i] = rs->index_of[rs->genpoly[i]]; return rs; } wsjt_9.3.r2792/tmoonsub.c0000664000175000017500000003661511461555650013431 0ustar jtnjtn#include #include #include #define RADS 0.0174532925199433 #define DEGS 57.2957795130823 #define TPI 6.28318530717959 #define PI 3.1415927 /* ratio of earth radius to astronomical unit */ #define ER_OVER_AU 0.0000426352325194252 /* all prototypes here */ double getcoord(int coord); void getargs(int argc, char *argv[], int *y, int *m, double *tz, double *glong, double *glat); double range(double y); double rangerad(double y); double days(int y, int m, int dn, double hour); double days_(int *y, int *m, int *dn, double *hour); void moonpos(double, double *, double *, double *); void sunpos(double , double *, double *, double *); double moontransit(int y, int m, int d, double timezone, double glat, double glong, int *nt); double atan22(double y, double x); double epsilon(double d); void equatorial(double d, double *lon, double *lat, double *r); void ecliptic(double d, double *lon, double *lat, double *r); double gst(double d); void topo(double lst, double glat, double *alp, double *dec, double *r); double alt(double glat, double ha, double dec); void libration(double day, double lambda, double beta, double alpha, double *l, double *b, double *p); void illumination(double day, double lra, double ldec, double dr, double sra, double sdec, double *pabl, double *ill); int daysinmonth(int y, int m); int isleap(int y); void tmoonsub_(double *day, double *glat, double *glong, double *moonalt, double *mrv, double *l, double *b, double *paxis); static const char *usage = " Usage: tmoon date[yyyymm] timz[+/-h.hh] long[+/-dddmm] lat[+/-ddmm]\n" "example: tmoon 200009 0 -00155 5230\n"; /* getargs() gets the arguments from the command line, does some basic error checking, and converts arguments into numerical form. Arguments are passed back in pointers. Error messages print to stderr so re-direction of output to file won't leave users blind. Error checking prints list of all errors in a command line before quitting. */ void getargs(int argc, char *argv[], int *y, int *m, double *tz, double *glong, double *glat) { int date, latitude, longitude; int mflag = 0, yflag = 0, longflag = 0, latflag = 0, tzflag = 0; int longminflag = 0, latminflag = 0, dflag = 0; /* if not right number of arguments, then print example command line */ if (argc !=5) { fprintf(stderr, usage); exit(EXIT_FAILURE); } date = atoi(argv[1]); *y = date / 100; *m = date - *y * 100; *tz = (double) atof(argv[2]); longitude = atoi(argv[3]); latitude = atoi(argv[4]); *glong = RADS * getcoord(longitude); *glat = RADS * getcoord(latitude); /* set a flag for each error found */ if (*m > 12 || *m < 1) mflag = 1; if (*y > 2500) yflag = 1; if (date < 150001) dflag = 1; if (fabs((float) *glong) > 180 * RADS) longflag = 1; if (abs(longitude) % 100 > 59) longminflag = 1; if (fabs((float) *glat) > 90 * RADS) latflag = 1; if (abs(latitude) % 100 > 59) latminflag = 1; if (fabs((float) *tz) > 12) tzflag = 1; /* print all the errors found */ if (dflag == 1) { fprintf(stderr, "date: dates must be in form yyyymm, gregorian, and later than 1500 AD\n"); } if (yflag == 1) { fprintf(stderr, "date: too far in future - accurate from 1500 to 2500\n"); } if (mflag == 1) { fprintf(stderr, "date: month must be in range 0 to 12, eg - August 2000 is entered as 200008\n"); } if (tzflag == 1) { fprintf(stderr, "timz: must be in range +/- 12 hours, eg -6 for Chicago\n"); } if (longflag == 1) { fprintf(stderr, "long: must be in range +/- 180 degrees\n"); } if (longminflag == 1) { fprintf(stderr, "long: last two digits are arcmin - max 59\n"); } if (latflag == 1) { fprintf(stderr, " lat: must be in range +/- 90 degrees\n"); } if (latminflag == 1) { fprintf(stderr, " lat: last two digits are arcmin - max 59\n"); } /* quits if one or more flags set */ if (dflag + mflag + yflag + longflag + latflag + tzflag + longminflag + latminflag > 0) { exit(EXIT_FAILURE); } } /* returns coordinates in decimal degrees given the coord as a ddmm value stored in an integer. */ double getcoord(int coord) { int west = 1; double glg, deg; if (coord < 0) west = -1; glg = fabs((double) coord/100); deg = floor(glg); glg = west* (deg + (glg - deg)*100 / 60); return(glg); } /* days() takes the year, month, day in the month and decimal hours in the day and returns the number of days since J2000.0. Assumes Gregorian calendar. */ double days(int y, int m, int d, double h) { int a, b; double day; /* The lines below work from 1900 march to feb 2100 a = 367 * y - 7 * (y + (m + 9) / 12) / 4 + 275 * m / 9 + d; day = (double)a - 730531.5 + hour / 24; */ /* These lines work for any Gregorian date since 0 AD */ if (m ==1 || m==2) { m +=12; y -= 1; } a = y / 100; b = 2 - a + a/4; day = floor(365.25*(y + 4716)) + floor(30.6001*(m + 1)) + d + b - 1524.5 - 2451545 + h/24; return(day); } double days_(int *y0, int *m0, int *d0, double *h0) { return days(*y0,*m0,*d0,*h0); } /* Returns 1 if y a leap year, and 0 otherwise, according to the Gregorian calendar */ int isleap(int y) { int a = 0; if(y % 4 == 0) a = 1; if(y % 100 == 0) a = 0; if(y % 400 == 0) a = 1; return(a); } /* Given the year and the month, function returns the number of days in the month. Valid for Gregorian calendar. */ int daysinmonth(int y, int m) { int b = 31; if(m == 2) { if(isleap(y) == 1) b= 29; else b = 28; } if(m == 4 || m == 6 || m == 9 || m == 11) b = 30; return(b); } /* moonpos() takes days from J2000.0 and returns ecliptic coordinates of moon in the pointers. Note call by reference. This function is within a couple of arcminutes most of the time, and is truncated from the Meeus Ch45 series, themselves truncations of ELP-2000. Returns moon distance in earth radii. Terms have been written out explicitly rather than using the table based method as only a small number of terms is retained. */ void moonpos(double d, double *lambda, double *beta, double *rvec) { double dl, dB, dR, L, D, M, M1, F, e, lm, bm, rm, t; t = d / 36525; L = range(218.3164591 + 481267.88134236 * t) * RADS; D = range(297.8502042 + 445267.1115168 * t) * RADS; M = range(357.5291092 + 35999.0502909 * t) * RADS; M1 = range(134.9634114 + 477198.8676313 * t - .008997 * t * t) * RADS; F = range(93.27209929999999 + 483202.0175273 * t - .0034029*t*t)*RADS; e = 1 - .002516 * t; dl = 6288774 * sin(M1); dl += 1274027 * sin(2 * D - M1); dl += 658314 * sin(2 * D); dl += 213618 * sin(2 * M1); dl -= e * 185116 * sin(M); dl -= 114332 * sin(2 * F) ; dl += 58793 * sin(2 * D - 2 * M1); dl += e * 57066 * sin(2 * D - M - M1) ; dl += 53322 * sin(2 * D + M1); dl += e * 45758 * sin(2 * D - M); dl -= e * 40923 * sin(M - M1); dl -= 34720 * sin(D) ; dl -= e * 30383 * sin(M + M1) ; dl += 15327 * sin(2 * D - 2 * F) ; dl -= 12528 * sin(M1 + 2 * F); dl += 10980 * sin(M1 - 2 * F); lm = rangerad(L + dl / 1000000 * RADS); dB = 5128122 * sin(F); dB += 280602 * sin(M1 + F); dB += 277693 * sin(M1 - F); dB += 173237 * sin(2 * D - F); dB += 55413 * sin(2 * D - M1 + F); dB += 46271 * sin(2 * D - M1 - F); dB += 32573 * sin(2 * D + F); dB += 17198 * sin(2 * M1 + F); dB += 9266 * sin(2 * D + M1 - F); dB += 8822 * sin(2 * M1 - F); dB += e * 8216 * sin(2 * D - M - F); dB += 4324 * sin(2 * D - 2 * M1 - F); bm = dB / 1000000 * RADS; dR = -20905355 * cos(M1); dR -= 3699111 * cos(2 * D - M1); dR -= 2955968 * cos(2 * D); dR -= 569925 * cos(2 * M1); dR += e * 48888 * cos(M); dR -= 3149 * cos(2 * F); dR += 246158 * cos(2 * D - 2 * M1); dR -= e * 152138 * cos(2 * D - M - M1) ; dR -= 170733 * cos(2 * D + M1); dR -= e * 204586 * cos(2 * D - M); dR -= e * 129620 * cos(M - M1); dR += 108743 * cos(D); dR += e * 104755 * cos(M + M1); dR += 79661 * cos(M1 - 2 * F); rm = 385000.56 + dR / 1000; *lambda = lm; *beta = bm; /* distance to Moon must be in Earth radii */ *rvec = rm / 6378.14; } /* topomoon() takes the local siderial time, the geographical latitude of the observer, and pointers to the geocentric equatorial coordinates. The function overwrites the geocentric coordinates with topocentric coordinates on a simple spherical earth model (no polar flattening). Expects Moon-Earth distance in Earth radii. Formulas scavenged from Astronomical Almanac 'low precision formulae for Moon position' page D46. */ void topo(double lst, double glat, double *alp, double *dec, double *r) { double x, y, z, r1; x = *r * cos(*dec) * cos(*alp) - cos(glat) * cos(lst); y = *r * cos(*dec) * sin(*alp) - cos(glat) * sin(lst); z = *r * sin(*dec) - sin(glat); r1 = sqrt(x*x + y*y + z*z); *alp = atan22(y, x); *dec = asin(z / r1); *r = r1; } /* moontransit() takes date, the time zone and geographic longitude of observer and returns the time (decimal hours) of lunar transit on that day if there is one, and sets the notransit flag if there isn't. See Explanatory Supplement to Astronomical Almanac section 9.32 and 9.31 for the method. */ double moontransit(int y, int m, int d, double tz, double glat, double glong, int *notransit) { double hm, ht, ht1, lon, lat, rv, dnew, lst; int itcount; ht1 = 180 * RADS; ht = 0; itcount = 0; *notransit = 0; do { ht = ht1; itcount++; dnew = days(y, m, d, ht * DEGS/15) - tz/24; lst = gst(dnew) + glong; /* find the topocentric Moon ra (hence hour angle) and dec */ moonpos(dnew, &lon, &lat, &rv); equatorial(dnew, &lon, &lat, &rv); topo(lst, glat, &lon, &lat, &rv); hm = rangerad(lst - lon); ht1 = rangerad(ht - hm); /* if no convergence, then no transit on that day */ if (itcount > 30) { *notransit = 1; break; } } while (fabs(ht - ht1) > 0.04 * RADS); return(ht1); } /* Calculates the selenographic coordinates of either the sub Earth point (optical libration) or the sub-solar point (selen. coords of centre of bright hemisphere). Based on Meeus chapter 51 but neglects physical libration and nutation, with some simplification of the formulas. */ void libration(double day, double lambda, double beta, double alpha, double *l, double *b, double *p) { double i, f, omega, w, y, x, a, t, eps; t = day / 36525; i = 1.54242 * RADS; eps = epsilon(day); f = range(93.2720993 + 483202.0175273 * t - .0034029 * t * t) * RADS; omega = range(125.044555 - 1934.1361849 * t + .0020762 * t * t) * RADS; w = lambda - omega; y = sin(w) * cos(beta) * cos(i) - sin(beta) * sin(i); x = cos(w) * cos(beta); a = atan22(y, x); *l = a - f; /* kludge to catch cases of 'round the back' angles */ if (*l < -90 * RADS) *l += TPI; if (*l > 90 * RADS) *l -= TPI; *b = asin(-sin(w) * cos(beta) * sin(i) - sin(beta) * cos(i)); /* pa pole axis - not used for Sun stuff */ x = sin(i) * sin(omega); y = sin(i) * cos(omega) * cos(eps) - cos(i) * sin(eps); w = atan22(x, y); *p = rangerad(asin(sqrt(x*x + y*y) * cos(alpha - w) / cos(*b))); } /* Takes: days since J2000.0, eq coords Moon, ratio of moon to sun distance, eq coords Sun Returns: position angle of bright limb wrt NCP, percentage illumination of Sun */ void illumination(double day, double lra, double ldec, double dr, double sra, double sdec, double *pabl, double *ill) { double x, y, phi, i; y = cos(sdec) * sin(sra - lra); x = sin(sdec) * cos(ldec) - cos(sdec) * sin(ldec) * cos (sra - lra); *pabl = atan22(y, x); phi = acos(sin(sdec) * sin(ldec) + cos(sdec) * cos(ldec) * cos(sra-lra)); i = atan22(sin(phi) , (dr - cos(phi))); *ill = 0.5*(1 + cos(i)); } /* sunpos() takes days from J2000.0 and returns ecliptic longitude of Sun in the pointers. Latitude is zero at this level of precision, but pointer left in for consistency in number of arguments. This function is within 0.01 degree (1 arcmin) almost all the time for a century either side of J2000.0. This is from the 'low precision fomulas for the Sun' from C24 of Astronomical Alamanac */ void sunpos(double d, double *lambda, double *beta, double *rvec) { double L, g, ls, bs, rs; L = range(280.461 + .9856474 * d) * RADS; g = range(357.528 + .9856003 * d) * RADS; ls = L + (1.915 * sin(g) + .02 * sin(2 * g)) * RADS; bs = 0; rs = 1.00014 - .01671 * cos(g) - .00014 * cos(2 * g); *lambda = ls; *beta = bs; *rvec = rs; } /* this routine returns the altitude given the days since J2000.0 the hour angle and declination of the object and the latitude of the observer. Used to find the Sun's altitude to put a letter code on the transit time, and to find the Moon's altitude at transit just to make sure that the Moon is visible. */ double alt(double glat, double ha, double dec) { return(asin(sin(dec) * sin(glat) + cos(dec) * cos(glat) * cos(ha))); } /* returns an angle in degrees in the range 0 to 360 */ double range(double x) { double a, b; b = x / 360; a = 360 * (b - floor(b)); if (a < 0) a = 360 + a; return(a); } /* returns an angle in rads in the range 0 to two pi */ double rangerad(double x) { double a, b; b = x / TPI; a = TPI * (b - floor(b)); if (a < 0) a = TPI + a; return(a); } /* gets the atan2 function returning angles in the right order and range */ double atan22(double y, double x) { double a; a = atan2(y, x); if (a < 0) a += TPI; return(a); } /* returns mean obliquity of ecliptic in radians given days since J2000.0. */ double epsilon(double d) { double t = d/ 36525; return((23.4392911111111 - (t* (46.8150 + 0.00059*t)/3600)) *RADS); } /* replaces ecliptic coordinates with equatorial coordinates note: call by reference destroys original values R is unchanged. */ void equatorial(double d, double *lon, double *lat, double *r) { double eps, ceps, seps, l, b; l = *lon; b = * lat; eps = epsilon(d); ceps = cos(eps); seps = sin(eps); *lon = atan22(sin(l)*ceps - tan(b)*seps, cos(l)); *lat = asin(sin(b)*ceps + cos(b)*seps*sin(l)); } /* replaces equatorial coordinates with ecliptic ones. Inverse of above, but used to find topocentric ecliptic coords. */ void ecliptic(double d, double *lon, double *lat, double *r) { double eps, ceps, seps, alp, dec; alp = *lon; dec = *lat; eps = epsilon(d); ceps = cos(eps); seps = sin(eps); *lon = atan22(sin(alp)*ceps + tan(dec)*seps, cos(alp)); *lat = asin(sin(dec)*ceps - cos(dec)*seps*sin(alp)); } /* returns the siderial time at greenwich meridian as an angle in radians given the days since J2000.0 */ double gst( double d) { double t = d / 36525; double theta; theta = range(280.46061837 + 360.98564736629 * d + 0.000387933 * t * t); return(theta * RADS); } void tmoonsub_(double *day, double *glat, double *glong, double *moonalt, double *mrv, double *l, double *b, double *paxis) { double mlambda, mbeta; double malpha, mdelta; double lst, mhr; double tlambda, tbeta, trv; lst = gst(*day) + *glong; /* find Moon topocentric coordinates for libration calculations */ moonpos(*day, &mlambda, &mbeta, mrv); malpha = mlambda; mdelta = mbeta; equatorial(*day, &malpha, &mdelta, mrv); topo(lst, *glat, &malpha, &mdelta, mrv); mhr = rangerad(lst - malpha); *moonalt = alt(*glat, mhr, mdelta); /* Optical libration and Position angle of the Pole */ tlambda = malpha; tbeta = mdelta; trv = *mrv; ecliptic(*day, &tlambda, &tbeta, &trv); libration(*day, tlambda, tbeta, malpha, l, b, paxis); } wsjt_9.3.r2792/azdist0.f900000664000175000017500000000102511236344443013274 0ustar jtnjtnsubroutine azdist0(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter) !f2py threadsafe character*6 MyGrid,HisGrid real*8 utch !f2py intent(in) MyGrid,HisGrid,utch !f2py intent(out) nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter call cs_lock('azdist0') if(hisgrid(5:5).eq.' ' .or. ichar(hisgrid(5:5)).eq.0) hisgrid(5:5)='m' if(hisgrid(6:6).eq.' ' .or. ichar(hisgrid(6:6)).eq.0) hisgrid(6:6)='m' call azdist(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter) call cs_unlock return end subroutine azdist0 wsjt_9.3.r2792/gencwid.f0000664000175000017500000000151411015074716013166 0ustar jtnjtn subroutine gencwid(msg,wpm,freqcw,samfac,iwave,nwave) parameter (NMAX=10*11025) character msg*22,msg2*22 integer*2 iwave(NMAX) integer*1 idat(460) real*8 dt,t,twopi,pha,dpha,tdit,samfac data twopi/6.283185307d0/ do i=1,22 if(msg(i:i).eq.' ') go to 10 enddo 10 iz=i-1 msg2=msg(1:iz)//' ' call morse(msg2,idat,ndits) !Encode part 1 of msg tdit=1.2d0/wpm !Key-down dit time, seconds dt=1.d0/(11025.d0*samfac) nwave=ndits*tdit/dt pha=0. dpha=twopi*freqcw*dt t=0.d0 s=0. u=wpm/(11025*0.03) do i=1,nwave t=t+dt pha=pha+dpha j=t/tdit + 1 s=s + u*(idat(j)-s) iwave(i)=nint(s*32767.d0*sin(pha)) enddo return end wsjt_9.3.r2792/ptt.c0000664000175000017500000000217711461555650012366 0ustar jtnjtn#include #include int ptt_(int *nport, char *unused, int *ntx, int *ndtr, int *iptt) { static HANDLE hFile; static int open=0, nhold=0; char s[10]; int i3,i4,i5,i6,i9,i00; if(*nport==0) { *iptt=*ntx; return(0); } nhold=0; if(*nport>100) nhold=1; if(*ntx && (!open)) { sprintf(s,"\\\\.\\COM%d",*nport%100); hFile=CreateFile( TEXT(s), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if(hFile==INVALID_HANDLE_VALUE) { printf("PTT: Cannot open COM port %d.\n",*nport%100); return(1); } open=1; } if(*ntx && open) { if(*ndtr) EscapeCommFunction(hFile,5); //set DTR else EscapeCommFunction(hFile,3); //set RTS *iptt=1; } else { if(*ndtr) EscapeCommFunction(hFile,6); //clear DTR else EscapeCommFunction(hFile,4); //clear RTS EscapeCommFunction(hFile,9); //clear BREAK if(nhold==0) { i00=CloseHandle(hFile); open=0; } *iptt=0; } return(0); } wsjt_9.3.r2792/avecom.h0000664000175000017500000000016311034400134013005 0ustar jtnjtn parameter (MAXAVE=120) common/ave/ppsave(64,63,MAXAVE),nflag(MAXAVE),nsave, + iseg(MAXAVE) wsjt_9.3.r2792/WsjtMod/0000775000175000017500000000000012102347472012765 5ustar jtnjtnwsjt_9.3.r2792/WsjtMod/g.py0000664000175000017500000000125011015066171013557 0ustar jtnjtnDFreq=0.0 Freq=0.0 PingTime=0.0 PingFile="current" report="26" rms=1.0 mode_change=0 showspecjt=0 g2font='courier 16 bold' #------------------------------------------------------ ftnstr def ftnstr(x): y="" xs=x.tostring() for i in range(len(xs)): y=y+xs[i] return y #------------------------------------------------------ filetime def filetime(t): # i=t.rfind(".") i=rfnd(t,".") t=t[:i][-6:] t=t[0:2]+":"+t[2:4]+":"+t[4:6] return t #------------------------------------------------------ rfnd #Temporary workaround to replace t.rfind(c) def rfnd(t,c): for i in range(len(t)-1,0,-1): if t[i:i+1]==c: return i return -1 wsjt_9.3.r2792/WsjtMod/Pmw.py0000664000175000017500000111466611015066171014115 0ustar jtnjtn import PmwColor Color = PmwColor del PmwColor import PmwBlt Blt = PmwBlt del PmwBlt ### Loader functions: _VERSION = '1.2' def setversion(version): if version != _VERSION: raise ValueError, 'Dynamic versioning not available' def setalphaversions(*alpha_versions): if alpha_versions != (): raise ValueError, 'Dynamic versioning not available' def version(alpha = 0): if alpha: return () else: return _VERSION def installedversions(alpha = 0): if alpha: return () else: return (_VERSION,) ###################################################################### ### File: PmwBase.py # Pmw megawidget base classes. # This module provides a foundation for building megawidgets. It # contains the MegaArchetype class which manages component widgets and # configuration options. Also provided are the MegaToplevel and # MegaWidget classes, derived from the MegaArchetype class. The # MegaToplevel class contains a Tkinter Toplevel widget to act as the # container of the megawidget. This is used as the base class of all # megawidgets that are contained in their own top level window, such # as a Dialog window. The MegaWidget class contains a Tkinter Frame # to act as the container of the megawidget. This is used as the base # class of all other megawidgets, such as a ComboBox or ButtonBox. # # Megawidgets are built by creating a class that inherits from either # the MegaToplevel or MegaWidget class. import os import string import sys import traceback import types import Tkinter # Special values used in index() methods of several megawidgets. END = ['end'] SELECT = ['select'] DEFAULT = ['default'] # Constant used to indicate that an option can only be set by a call # to the constructor. INITOPT = ['initopt'] _DEFAULT_OPTION_VALUE = ['default_option_value'] _useTkOptionDb = 0 # Symbolic constants for the indexes into an optionInfo list. _OPT_DEFAULT = 0 _OPT_VALUE = 1 _OPT_FUNCTION = 2 # Stacks _busyStack = [] # Stack which tracks nested calls to show/hidebusycursor (called # either directly or from activate()/deactivate()). Each element # is a dictionary containing: # 'newBusyWindows' : List of windows which had busy_hold called # on them during a call to showbusycursor(). # The corresponding call to hidebusycursor() # will call busy_release on these windows. # 'busyFocus' : The blt _Busy window which showbusycursor() # set the focus to. # 'previousFocus' : The focus as it was when showbusycursor() # was called. The corresponding call to # hidebusycursor() will restore this focus if # the focus has not been changed from busyFocus. _grabStack = [] # Stack of grabbed windows. It tracks calls to push/popgrab() # (called either directly or from activate()/deactivate()). The # window on the top of the stack is the window currently with the # grab. Each element is a dictionary containing: # 'grabWindow' : The window grabbed by pushgrab(). The # corresponding call to popgrab() will release # the grab on this window and restore the grab # on the next window in the stack (if there is one). # 'globalMode' : True if the grabWindow was grabbed with a # global grab, false if the grab was local # and 'nograb' if no grab was performed. # 'previousFocus' : The focus as it was when pushgrab() # was called. The corresponding call to # popgrab() will restore this focus. # 'deactivateFunction' : # The function to call (usually grabWindow.deactivate) if # popgrab() is called (usually from a deactivate() method) # on a window which is not at the top of the stack (that is, # does not have the grab or focus). For example, if a modal # dialog is deleted by the window manager or deactivated by # a timer. In this case, all dialogs above and including # this one are deactivated, starting at the top of the # stack. # Note that when dealing with focus windows, the name of the Tk # widget is used, since it may be the '_Busy' window, which has no # python instance associated with it. #============================================================================= # Functions used to forward methods from a class to a component. # Fill in a flattened method resolution dictionary for a class (attributes are # filtered out). Flattening honours the MI method resolution rules # (depth-first search of bases in order). The dictionary has method names # for keys and functions for values. def __methodDict(cls, dict): # the strategy is to traverse the class in the _reverse_ of the normal # order, and overwrite any duplicates. baseList = list(cls.__bases__) baseList.reverse() # do bases in reverse order, so first base overrides last base for super in baseList: __methodDict(super, dict) # do my methods last to override base classes for key, value in cls.__dict__.items(): # ignore class attributes if type(value) == types.FunctionType: dict[key] = value def __methods(cls): # Return all method names for a class. # Return all method names for a class (attributes are filtered # out). Base classes are searched recursively. dict = {} __methodDict(cls, dict) return dict.keys() # Function body to resolve a forwarding given the target method name and the # attribute name. The resulting lambda requires only self, but will forward # any other parameters. __stringBody = ( 'def %(method)s(this, *args, **kw): return ' + 'apply(this.%(attribute)s.%(method)s, args, kw)') # Get a unique id __counter = 0 def __unique(): global __counter __counter = __counter + 1 return str(__counter) # Function body to resolve a forwarding given the target method name and the # index of the resolution function. The resulting lambda requires only self, # but will forward any other parameters. The target instance is identified # by invoking the resolution function. __funcBody = ( 'def %(method)s(this, *args, **kw): return ' + 'apply(this.%(forwardFunc)s().%(method)s, args, kw)') def forwardmethods(fromClass, toClass, toPart, exclude = ()): # Forward all methods from one class to another. # Forwarders will be created in fromClass to forward method # invocations to toClass. The methods to be forwarded are # identified by flattening the interface of toClass, and excluding # methods identified in the exclude list. Methods already defined # in fromClass, or special methods with one or more leading or # trailing underscores will not be forwarded. # For a given object of class fromClass, the corresponding toClass # object is identified using toPart. This can either be a String # denoting an attribute of fromClass objects, or a function taking # a fromClass object and returning a toClass object. # Example: # class MyClass: # ... # def __init__(self): # ... # self.__target = TargetClass() # ... # def findtarget(self): # return self.__target # forwardmethods(MyClass, TargetClass, '__target', ['dangerous1', 'dangerous2']) # # ...or... # forwardmethods(MyClass, TargetClass, MyClass.findtarget, # ['dangerous1', 'dangerous2']) # In both cases, all TargetClass methods will be forwarded from # MyClass except for dangerous1, dangerous2, special methods like # __str__, and pre-existing methods like findtarget. # Allow an attribute name (String) or a function to determine the instance if type(toPart) != types.StringType: # check that it is something like a function if callable(toPart): # If a method is passed, use the function within it if hasattr(toPart, 'im_func'): toPart = toPart.im_func # After this is set up, forwarders in this class will use # the forwarding function. The forwarding function name is # guaranteed to be unique, so that it can't be hidden by subclasses forwardName = '__fwdfunc__' + __unique() fromClass.__dict__[forwardName] = toPart # It's not a valid type else: raise TypeError, 'toPart must be attribute name, function or method' # get the full set of candidate methods dict = {} __methodDict(toClass, dict) # discard special methods for ex in dict.keys(): if ex[:1] == '_' or ex[-1:] == '_': del dict[ex] # discard dangerous methods supplied by the caller for ex in exclude: if dict.has_key(ex): del dict[ex] # discard methods already defined in fromClass for ex in __methods(fromClass): if dict.has_key(ex): del dict[ex] for method, func in dict.items(): d = {'method': method, 'func': func} if type(toPart) == types.StringType: execString = \ __stringBody % {'method' : method, 'attribute' : toPart} else: execString = \ __funcBody % {'forwardFunc' : forwardName, 'method' : method} exec execString in d # this creates a method fromClass.__dict__[method] = d[method] #============================================================================= def setgeometryanddeiconify(window, geom): # To avoid flashes on X and to position the window correctly on NT # (caused by Tk bugs). if os.name == 'nt' or \ (os.name == 'posix' and sys.platform[:6] == 'cygwin'): # Require overrideredirect trick to stop window frame # appearing momentarily. redirect = window.overrideredirect() if not redirect: window.overrideredirect(1) window.deiconify() if geom is not None: window.geometry(geom) # Call update_idletasks to ensure NT moves the window to the # correct position it is raised. window.update_idletasks() window.tkraise() if not redirect: window.overrideredirect(0) else: if geom is not None: window.geometry(geom) # Problem!? Which way around should the following two calls # go? If deiconify() is called first then I get complaints # from people using the enlightenment or sawfish window # managers that when a dialog is activated it takes about 2 # seconds for the contents of the window to appear. But if # tkraise() is called first then I get complaints from people # using the twm window manager that when a dialog is activated # it appears in the top right corner of the screen and also # takes about 2 seconds to appear. #window.tkraise() # Call update_idletasks to ensure certain window managers (eg: # enlightenment and sawfish) do not cause Tk to delay for # about two seconds before displaying window. #window.update_idletasks() #window.deiconify() window.deiconify() if window.overrideredirect(): # The window is not under the control of the window manager # and so we need to raise it ourselves. window.tkraise() #============================================================================= class MegaArchetype: # Megawidget abstract root class. # This class provides methods which are inherited by classes # implementing useful bases (this class doesn't provide a # container widget inside which the megawidget can be built). def __init__(self, parent = None, hullClass = None): # Mapping from each megawidget option to a list of information # about the option # - default value # - current value # - function to call when the option is initialised in the # call to initialiseoptions() in the constructor or # modified via configure(). If this is INITOPT, the # option is an initialisation option (an option that can # be set by the call to the constructor but can not be # used with configure). # This mapping is not initialised here, but in the call to # defineoptions() which precedes construction of this base class. # # self._optionInfo = {} # Mapping from each component name to a tuple of information # about the component. # - component widget instance # - configure function of widget instance # - the class of the widget (Frame, EntryField, etc) # - cget function of widget instance # - the name of the component group of this component, if any self.__componentInfo = {} # Mapping from alias names to the names of components or # sub-components. self.__componentAliases = {} # Contains information about the keywords provided to the # constructor. It is a mapping from the keyword to a tuple # containing: # - value of keyword # - a boolean indicating if the keyword has been used. # A keyword is used if, during the construction of a megawidget, # - it is defined in a call to defineoptions() or addoptions(), or # - it references, by name, a component of the megawidget, or # - it references, by group, at least one component # At the end of megawidget construction, a call is made to # initialiseoptions() which reports an error if there are # unused options given to the constructor. # # After megawidget construction, the dictionary contains # keywords which refer to a dynamic component group, so that # these components can be created after megawidget # construction and still use the group options given to the # constructor. # # self._constructorKeywords = {} # List of dynamic component groups. If a group is included in # this list, then it not an error if a keyword argument for # the group is given to the constructor or to configure(), but # no components with this group have been created. # self._dynamicGroups = () if hullClass is None: self._hull = None else: if parent is None: parent = Tkinter._default_root # Create the hull. self._hull = self.createcomponent('hull', (), None, hullClass, (parent,)) _hullToMegaWidget[self._hull] = self if _useTkOptionDb: # Now that a widget has been created, query the Tk # option database to get the default values for the # options which have not been set in the call to the # constructor. This assumes that defineoptions() is # called before the __init__(). option_get = self.option_get _VALUE = _OPT_VALUE _DEFAULT = _OPT_DEFAULT for name, info in self._optionInfo.items(): value = info[_VALUE] if value is _DEFAULT_OPTION_VALUE: resourceClass = string.upper(name[0]) + name[1:] value = option_get(name, resourceClass) if value != '': try: # Convert the string to int/float/tuple, etc value = eval(value, {'__builtins__': {}}) except: pass info[_VALUE] = value else: info[_VALUE] = info[_DEFAULT] def destroy(self): # Clean up optionInfo in case it contains circular references # in the function field, such as self._settitle in class # MegaToplevel. self._optionInfo = {} if self._hull is not None: del _hullToMegaWidget[self._hull] self._hull.destroy() #====================================================================== # Methods used (mainly) during the construction of the megawidget. def defineoptions(self, keywords, optionDefs, dynamicGroups = ()): # Create options, providing the default value and the method # to call when the value is changed. If any option created by # base classes has the same name as one in , the # base class's value and function will be overriden. # This should be called before the constructor of the base # class, so that default values defined in the derived class # override those in the base class. if not hasattr(self, '_constructorKeywords'): # First time defineoptions has been called. tmp = {} for option, value in keywords.items(): tmp[option] = [value, 0] self._constructorKeywords = tmp self._optionInfo = {} self._initialiseoptions_counter = 0 self._initialiseoptions_counter = self._initialiseoptions_counter + 1 if not hasattr(self, '_dynamicGroups'): self._dynamicGroups = () self._dynamicGroups = self._dynamicGroups + tuple(dynamicGroups) self.addoptions(optionDefs) def addoptions(self, optionDefs): # Add additional options, providing the default value and the # method to call when the value is changed. See # "defineoptions" for more details # optimisations: optionInfo = self._optionInfo optionInfo_has_key = optionInfo.has_key keywords = self._constructorKeywords keywords_has_key = keywords.has_key FUNCTION = _OPT_FUNCTION for name, default, function in optionDefs: if '_' not in name: # The option will already exist if it has been defined # in a derived class. In this case, do not override the # default value of the option or the callback function # if it is not None. if not optionInfo_has_key(name): if keywords_has_key(name): value = keywords[name][0] optionInfo[name] = [default, value, function] del keywords[name] else: if _useTkOptionDb: optionInfo[name] = \ [default, _DEFAULT_OPTION_VALUE, function] else: optionInfo[name] = [default, default, function] elif optionInfo[name][FUNCTION] is None: optionInfo[name][FUNCTION] = function else: # This option is of the form "component_option". If this is # not already defined in self._constructorKeywords add it. # This allows a derived class to override the default value # of an option of a component of a base class. if not keywords_has_key(name): keywords[name] = [default, 0] def createcomponent(self, componentName, componentAliases, componentGroup, widgetClass, *widgetArgs, **kw): # Create a component (during construction or later). if self.__componentInfo.has_key(componentName): raise ValueError, 'Component "%s" already exists' % componentName if '_' in componentName: raise ValueError, \ 'Component name "%s" must not contain "_"' % componentName if hasattr(self, '_constructorKeywords'): keywords = self._constructorKeywords else: keywords = {} for alias, component in componentAliases: # Create aliases to the component and its sub-components. index = string.find(component, '_') if index < 0: self.__componentAliases[alias] = (component, None) else: mainComponent = component[:index] subComponent = component[(index + 1):] self.__componentAliases[alias] = (mainComponent, subComponent) # Remove aliases from the constructor keyword arguments by # replacing any keyword arguments that begin with *alias* # with corresponding keys beginning with *component*. alias = alias + '_' aliasLen = len(alias) for option in keywords.keys(): if len(option) > aliasLen and option[:aliasLen] == alias: newkey = component + '_' + option[aliasLen:] keywords[newkey] = keywords[option] del keywords[option] componentPrefix = componentName + '_' nameLen = len(componentPrefix) for option in keywords.keys(): if len(option) > nameLen and option[:nameLen] == componentPrefix: # The keyword argument refers to this component, so add # this to the options to use when constructing the widget. kw[option[nameLen:]] = keywords[option][0] del keywords[option] else: # Check if this keyword argument refers to the group # of this component. If so, add this to the options # to use when constructing the widget. Mark the # keyword argument as being used, but do not remove it # since it may be required when creating another # component. index = string.find(option, '_') if index >= 0 and componentGroup == option[:index]: rest = option[(index + 1):] kw[rest] = keywords[option][0] keywords[option][1] = 1 if kw.has_key('pyclass'): widgetClass = kw['pyclass'] del kw['pyclass'] if widgetClass is None: return None if len(widgetArgs) == 1 and type(widgetArgs[0]) == types.TupleType: # Arguments to the constructor can be specified as either # multiple trailing arguments to createcomponent() or as a # single tuple argument. widgetArgs = widgetArgs[0] widget = apply(widgetClass, widgetArgs, kw) componentClass = widget.__class__.__name__ self.__componentInfo[componentName] = (widget, widget.configure, componentClass, widget.cget, componentGroup) return widget def destroycomponent(self, name): # Remove a megawidget component. # This command is for use by megawidget designers to destroy a # megawidget component. self.__componentInfo[name][0].destroy() del self.__componentInfo[name] def createlabel(self, parent, childCols = 1, childRows = 1): labelpos = self['labelpos'] labelmargin = self['labelmargin'] if labelpos is None: return label = self.createcomponent('label', (), None, Tkinter.Label, (parent,)) if labelpos[0] in 'ns': # vertical layout if labelpos[0] == 'n': row = 0 margin = 1 else: row = childRows + 3 margin = row - 1 label.grid(column=2, row=row, columnspan=childCols, sticky=labelpos) parent.grid_rowconfigure(margin, minsize=labelmargin) else: # horizontal layout if labelpos[0] == 'w': col = 0 margin = 1 else: col = childCols + 3 margin = col - 1 label.grid(column=col, row=2, rowspan=childRows, sticky=labelpos) parent.grid_columnconfigure(margin, minsize=labelmargin) def initialiseoptions(self, dummy = None): self._initialiseoptions_counter = self._initialiseoptions_counter - 1 if self._initialiseoptions_counter == 0: unusedOptions = [] keywords = self._constructorKeywords for name in keywords.keys(): used = keywords[name][1] if not used: # This keyword argument has not been used. If it # does not refer to a dynamic group, mark it as # unused. index = string.find(name, '_') if index < 0 or name[:index] not in self._dynamicGroups: unusedOptions.append(name) if len(unusedOptions) > 0: if len(unusedOptions) == 1: text = 'Unknown option "' else: text = 'Unknown options "' raise KeyError, text + string.join(unusedOptions, ', ') + \ '" for ' + self.__class__.__name__ # Call the configuration callback function for every option. FUNCTION = _OPT_FUNCTION for info in self._optionInfo.values(): func = info[FUNCTION] if func is not None and func is not INITOPT: func() #====================================================================== # Method used to configure the megawidget. def configure(self, option=None, **kw): # Query or configure the megawidget options. # # If not empty, *kw* is a dictionary giving new # values for some of the options of this megawidget or its # components. For options defined for this megawidget, set # the value of the option to the new value and call the # configuration callback function, if any. For options of the # form _