home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 January
/
usenetsourcesnewsgroupsinfomagicjanuary1994.iso
/
sources
/
games
/
volume16
/
nethack31
/
patch2z
< prev
next >
Wrap
Internet Message Format
|
1993-06-16
|
63KB
Path: uunet!gatech!howland.reston.ans.net!ux1.cso.uiuc.edu!uwm.edu!ogicse!news.tek.com!saab!billr
From: billr@saab.CNA.TEK.COM (Bill Randle)
Newsgroups: comp.sources.games
Subject: v17i101: nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch2z/33
Message-ID: <1v8iut$j8a@ying.cna.tek.com>
Date: 11 Jun 93 00:17:33 GMT
Article-I.D.: ying.1v8iut$j8a
Organization: Tektronix, Inc, Redmond, OR, USA
Lines: 1412
Approved: billr@saab.CNA.TEK.COM
NNTP-Posting-Host: saab.cna.tek.com
Xref: uunet comp.sources.games:1764
Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
Posting-number: Volume 17, Issue 101
Archive-name: nethack31/Patch2z
Patch-To: nethack31: Volume 16, Issue 1-116
Environment: Amiga, Atari, Mac, MS-DOS, Windows-NT, OS2, Unix, VMS, X11
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 26 (of 33)."
# Contents: sys/mac/NHrsrc.hqx sys/unix/snd86unx.shr
# Wrapped by billr@saab on Thu Jun 10 16:55:07 1993
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'sys/mac/NHrsrc.hqx' -a "${1}" != "-c" ; then
echo shar: Renaming existing file \"'sys/mac/NHrsrc.hqx'\" to \"'sys/mac/NHrsrc.hqx.orig'\"
mv -f 'sys/mac/NHrsrc.hqx' 'sys/mac/NHrsrc.hqx.orig'
fi
echo shar: Extracting \"'sys/mac/NHrsrc.hqx'\" \(32969 characters\)
sed "s/^X//" >'sys/mac/NHrsrc.hqx' <<'END_OF_FILE'
X(This file must be converted with BinHex 4.0)
X:$%jPG%KKBfXZFR0bB`"bFh*M8P0&4!%!!!!!!!!!AUL0L3!!!!!"!!!!9[d!!&A
Xp!!!(U`!!!!!0!"!!,3!`S!)!U!!!!!!!&J!i!#F!iBJB8h4[$%jPG%KKBfXZFR0
XbB`m#!!!!FR0bBe*6483"!2rrrrm!!(*cFQ058d9%!3$rrrrr!!!!!!!!!!!!!!!
X!!!!!!!!!U""X)J!!!!!!!&kS!!$)!6!!!3!!!!!!!!!!#lN!!!!!&3!!!!!!jJ&
XF!!%!!!!!!!!!!!Zi!!!!!"8!8!"Z!2S"Z!!"!!!!!!!!!!!(e!!!!!!9!&!!EJ$
Xk!EJ!!3!!!!!!!!!!"p-!!!!!&3"3!'i!qJ'i!!%!!!!!!!!!!!I5!!!!!"8!8!"
XZ!2S"Z!!!!"`"#!!)!8S!m!!!!!!!!!!!!!!(6@9cFf&RC6J+!!!!(!%Z!!3"8J(
X+!!!!!!!!!!!!!!C6G'&dGA0V1!S!!!!@!(`!fJ$i!BS!!!!!!3!!!!!!!%di#J!
X!!"S![J!'!9!"-J!!!!!"!!!!!!!%5@jQEb!i#J!!!#)!+!!S!)`!SJ!!!!!"!!!
X!!!!06R9XE#"AD@jNEhFJ)6J+!!!!2!j1G@eLCA)JEfBJDf9jFdp$6P3&+LSU+LT
X-8e4$"dYPH@0[C'9)3PP8"%0SBA*$5%&5"5SU+LSU6&0843!!!#!!+!!S!8S"lJ!
X!!!!!!!!!!!!,4(9ZCf9[EL"0BA!i#J!!!#!!+!!S!+`"c!!!!!!"!!!!!!!,4'P
XKCfj[Fh4TBh-i#J!!!"B!!400B@-J6Q9d5'&MDb")C@a`b5mr!!!!J!!!!!!!!!!
X!!!!!$rm!!!!!r`$a!I!!!!$lm!m3(`!!!!qr$`%"m!!!!2[r%"$`!!$`$lrrmI!
X!$`rrqr!2!!!2%"$r[`!!!!m"!I$lm!!!!2!3m!qr!!!!$`%2!2[`!!!!rr!!$lm
X!!!!!!!!!qr!!!!!!!!!2[`!!!!!!!!$r!!!!J!rrrrrrr`!!$``-$!`2m!!2`-$
X!`-r2!!m-$!rr$rr`$mr`ca$``2!2$lm2!3m-m!r!qrm3(m$`$``2[rrr$2!2rrr
Xlm-$!m!ra!Iqr$!c`$r!3m2[``2!2$`(m$lm-m!r!rr$!qr$`$``-$!`2[r!2`-$
X!`-$lm!rrrrrrrrr`!!!!3!!!!F!ci#R`&IJ,q#AiIT!!Id"qS$j3(bJ1&!!+!!8
X!!`(!Fq"rm(ri2r`rr(rmrrMrm2r`IrJrr"mq$Km!$`!(!!!!3(r`3"K!&%(H@H*
X9mN[b4I*qJRp#IU*H8NiU3"C!#RrqIr"rq(rmIrjrrRrqIrjrrRrqIrjrrRrqIrj
XrrRrqIri!!!%!!!!!!!!2J!!!2q!!%$r`!"`Iq!!+(rJ!#4rm!!5Ir!!#Ir`!!6r
Xm!!#Ir!!`cr`!IqBB!(rb!!"rq3!!Irb!!(rb3!"rm5!!2r#3!!!rm%J!(rJN!!r
Xi%J!$i!N!!!!%J!!!!N!!!!%J!!!!N!!!!!")!!!!*!!!!")!!!!+!!!!"!!2J!!
X!2q!!%(r`!$arq!!q2r`!(crm!"qrrJ!2rri!"rrq!!2rrJ!arri!Irrq!2rrr!$
XrraJ!rrq!!2rr`!$rrq!!rr[`!(rjq!"rq2`!2raq!"rm2`!2q"q!!q!2`!!!"q!
X!!!2`!!!"q!!!!2`!!!"q!!!!2`!!!"m!!!!1!!!"!"rrrJ!3!!-!%!!#J"!!!N!
X3!!)J%!!#%"!$iJJ3"r[i%BIm#"&$r!J4)ri)%*2q#""2rJJ3*ri)%"2q#"-CM!J
XAr)!)&rj!#"Ir)!JAr*!!#"Im5!J6r#3)%ri5#"(q#3J3I!5)%!!#5"!!!5J3!!#
XB%!!!5"!!!#J3!!!B(rrrq"rrrJ!Irrm!(rrrJ"rrrm!IrrrJ(rrrm"rrrrJIrrr
Xi(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
Xi(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
Xi!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrr!!!!!!!!!!!!!!!!$r%"!Im!!
X!!!!!!!!2!!!!m3%"!3m!!!!!!!!!$rm!!!m3%"!3m!!!!!!!!!$lm!!2!3%"!I!
X!!!!!!!!!qlm!$a!3%"!I!!!!!!!!!!qlm!m"!3%"$`!!!!!!!!!!qlrr%"!3%"m
X!!!!!!!!!!!qlm3%"!3%2!!!!!!!!!!!!qlm3%"!3(`!!!!!!!2m!!2qlmIrrm3m
X!!!!!!!m3rrm3qlr`!!r`!!!!!!!2!3%"!3qlm!!!!!!!!!!!$a!3%"!3qlm!!!!
X!!!!!!!m"!3%"!Iqlm!!!!!!!!!!2%"!3%"m!qlm!!!!!!!!!$`%"!3%2!!qlm!!
X!!!!!!!$`%"!3(`!!qlm!!!!!!!!!m3%"!3m!!!qlm!!!!!!!!!m3%"!3m!!!qlm
X!!!!!!!!!r`%"$r!!!!qlm!!!!!!!!!$rrr!!!!!!qlm!!!!!!!!!!!!!!!!!!!q
Xlm!!!!!!!!!!!!!!!!!!!qlm!!!!!!!!!!!!!!!!!!!qlm!!!!!!!!!!!!!!!!!!
X!qlm!!!!!!!!!!!!!!!!!!!qlm!!!!!!!!!!!!!!!!!!!qlm!!!!!!!!!!!!!!!!
X!!!qlm!!!!!!!!!!!!!!!!!!!qr!!!!!!!!!!!!!!!!!!!!m!!!!#!!!2rrrrrrr
Xrrrrrm!!!!!!!$``-$!`-$!`-$2m!!!!!!!r!`-$!`-$!`-$mm!!!!!!2$!`-$!`
X-$!`-r-m!!!!!$m$!`-$!`-$!`2c-m!!!!!m-$!`-$!`-$!cmc-m!!!!2`-$!`-$
Xrrr$!r-c-m!!!$``-$!`2!3%2r2rrrr!!!!r!cr$!ca!3%2r!`-$`!!!2$!qr$!c
Xa!3%2$!`-m!!!$m$2Zr$!m"!3%2$!`2!!!!m-$2Zr$2%"!3(m$!c`!!!2`-$2Zrr
X`%"!3m-$!m!!!$``-$2Zr!3%"!I`-$2!!!!r!`-$2Zr$rra$``-$`!!!2$2m-$rZ
Xrr!cr$!`-m!!!$mm3rrmIZr$!`-$!`2!!!!m2!3%"!IZr$!`-$!c`!!!2ca!3%"r
XrZr$!`-$!m!!!$`m"!3%2$2Zr$!`-$2!!!!r2%"!3(m$2Zr$!`-$`!!!2$2%"!3m
X-$2Zr$!`-m!!!$m$`%"!3m-$2Zr$!`2!!!!m-$r%"!I`-$2Zr$!c`!!!2`-$2rrr
X!`-$2Zr$!m!!!$``-$!`-$!`-$2Zr$2!!!!r!`-$!`-$!`-$2Zr$`!!!2$!`-$!`
X-$!`-$2Zrm!!!$m$!`-$!`-$!`-$2Zr!!!!m-$!`-$!`-$!`-$2[`!!!2`-$!`-$
X!`-$!`-$2m!!!$rrrrrrrrrrrrrrrrr!!!!!!$!"D!'i!lJ'5!)&%4!!!!%`!!J!
X!!!!!H!$'!)S"%!3#6dX!!!!!!!S!4J"c!4#)(%0[G@aN)'j[G#"H-L"LC@0KGA0
XP)&i`,L!JAM%!!!!!!!S!&!!U!$5J!J!!!!!"!!!!!!!!!!!!2rrrm#!!!"JJ"m!
XB)!r`'#-2q"JLKrJB)NIm'#%Rr"JJRr`B)%rm'#!Rr"JQ-aJB,rN!'#rmJ"J[rN!
XB,rNJ'#riN!!B*rK)'#Im*"JMr")B)2J*'#!!"*JJ!!*B)!!"1#!!!*JJ!!"B)!!
X!1$rrrrJIrrri!!!!!!!!!!!!!!!!2rrrm$rrrrJrrrri2rrrq$rrrrJrrrri2rr
Xrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rr
Xrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq"rrrrJ!!!!!!!!
X!3!!!Ira$KP['AqC2jRrQIiCraPlQ6RC!2N!H3!jrrMrq!!"rr(rqIrjrrRrqIrj
XrrRrqIrjrrRrqIrjrrRrq2ri!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!rrrrrrrrrrrrrrrrr`!!!2c-c-c-c-c-c-c-c-r`!!$mc-c-c-rrrmc
X-c-c2m!!!r-c-c-ca!3(rc-c-cr!!!2c-rmc-m"!3%2c-c-r`!!$mc2[mc-m"!3(
Xmc-c2m!!!r-cl[mc2%"!3(mc-cr!!!2c-cl[mc`%"!3r-c-r`!!$mc-cl[r!3%"!
XIc-c2m!!!r-c-cl[a!3%"$mc-cr!!!2c-c-cl[a$rm"r-c-r`!!$mcrc-rl[rc-r
Xmc-c2m!!!r2!Ira$l[mc-c-c-cr!!!2ca!3%"$l[mc-c-c-r`!!$mm"!3%"rl[mc
X-c-c2m!!!r2%"!3(mcl[mc-c-cr!!!2c`%"!3r-cl[mc-c-r`!!$mc`%"!Ic-cl[
Xmc-c2m!!!r-m3%"!Ic-cl[mc-cr!!!2c-r`%"$mc-cl[mc-r`!!$mc-crrrc-c-c
Xl[mc2m!!!r-c-c-c-c-c-cl[mcr!!!2c-c-c-c-c-c-cl[mr`!!$mc-c-c-c-c-c
X-cl[rm!!!r-c-c-c-c-c-c-cl[r!!!2c-c-c-c-c-c-c-clr`!!$mc-c-c-c-c-c
X-c-crm!!!rrrrrrrrrrrrrrrrrr!!!!rrrrrrrrrrrrrrrrr`!!!!!!!!!!!!!!!
X!!!!!!!!!!!!L!!%!!!!!!&!"4!"N!Ai%!Np,!!!!!!!'!$J!4J&mL!*H-!!!!"J
X!@J"H!1J"T`!&!!!!!!!!!!!!JJ!"F!S!!!!B!%)!A!$$!GF!"3!!!!!!!!!!!)F
X!!(!+!!!!'!"#!&`!``(A!!8!!!!!!!!!!!#'!!"`#J!!!"J!3J"F!--"e`!&!!!
X!!!!!!!!!K3!!F!S!!!"5!!3!!!!!!'-",3"h!@F%!ePPF`!!!!!!!'-!j`"h!5%
X%!Nj[!!!!!!!,!%`!9!&QL!*H-!!!!!!!$!!8!#`!0+!#!!%!!!!!!&d"+!"p!8L
X!!!!!!'3!"3!!!!!!B`%Y!(F"C`3$@@9c!!!!!!!!B`$R!(F")33#6Qm!!!!!!'-
X!S3"h!0X%"&&eDA3!!!!!!!X!6!"8!@D)!Pi`!!!!!!!-!"3!,!!dS!)!!3!!!!!
X!A3%S!(d"5)!!!!!!GJ!'!!!!!!"M!5d!G`&R"!0CCA-!!!!!!!"M!1F!G`%K"!*
X1E`!!!!!!B`#K!(F!f`3$3@aX!!!!!!!!B`"E!(F!P33%8A9TG!!!!!!!#`"-!&3
X"CSJ#AM!!!!!!!!`!&!!X!$5J!J!"!!!!!!"I!5N!I`&*J!!!!!!B!%)!A!$$!GF
X!"3!!!!!!!!!!!)J!!(!+!!!!K!!(!!!!!!"M!5d!G`&R"!0CCA-!!!!!!!"M!1F
X!G`%K"!*1E`!!!!!!B`#K!(F!fj!!!!!!!!!!B`"E!(F!P33$3@aXG!!!!!!!B`!
X9!(F!6`3%8A9TG!!!!!!!#`"-!&3"CSJ#AM!!!!!!!!`!&!!X!$5J!J!"!!!!!!"
XH!5J!IJ&)J!!!!!"L!!8!!!!!!'S!q3"q!6-%!Np,!!!!!!"U!+8!IJ$I"!C$B@j
XMC@`!!!!!!!S!93!k!6Z)!Pi`!!!!!!"%!&F!9!%f%!!!!!!!!!S!(!!U!$bJ!J!
X"!!!!!!"N!23!K!%8J!!!!!!B!,`!QJ%E!A-!"3!!!!!!!!!!!)N!!'J+!!!!E!!
X&!!!!!!"#!%d!9J#("!*25`!!!!!!3J!,!&B!433'3f&ZBf9X!!!!!!!(!$3!0`$
X8L!*H-!!!!!!!4!#B!&3!c"!*4@4TG#"8CAKd!!!!!!!!#!!+!#J!+U!#!!%!!!!
X!!$d!53"G!'Q!!!!!!)!!!!!!!!!!!!rrrrrrrrm!$mc-rrc-cr!2crca$mc2m!r
X2[r!3r-r`$mclm3(mcr!2rrqrrrc2m!ra!I[mc-r`$r!3rlr-cr!2c`(mqrc2m!r
X-rrc2[mr`$mc-c-clrr!2c-c-c-qrm!r-c-c-c2r`$rrrrrrrrr!!rrrrrrrrm!!
X!#BL3!!!!!!$q!!B!!2rh!!B!#`1l!!N!!J!!!$m!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$B!!!!!!!!&%%!!!!!!#P
X!!!!`!!!D!!!#'%!&DeL*3!IJ183JJ%!%PF"`(!(#&!!9!"3JMm$rm!(i!!!!Fi!
XJ!!!!!!!J!!!1B!%!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!F!"3L!)B"!%#J+)!"!))J!!!B!"")K0X!!!#+)!!!IL*3!@
XJ+83JJ%!%P8"3&!&!!9!"3JMm$rm!d)!!!!*%"3![2!!!3J!`!*N!!'e6RX6#!
X!"FZF,l[ZF!!1Flc[Iqk2$'%BZmlc[aM'-ImD!J3!%"JK--!!!!!#!!!!!+QZq45
XK*!T3V9c[JHT4&%8k)*4m3N3PSZa!!NNJ"@YBL8!&S#P%))"!"*9!8"3"3K3!&3!
X8))r!rr!6!$i!0R4F3!Am)")D)!5!#5$dhpDbNUN!"MaLD%!aL##4M'-B`K'+$+'
XmaM'-54M&83d0!33!%#!J%%!!!!!#!!!!!+V4q!!!'!!!!#-B!S!!!!"'*)+L3!!
X!-c)!!US!!!(iL8!&S#P%))"!"*9!8"3"3K3!&3!8))r!rr!M!")!#DaL)$hm2j%
XU*!bi18#9K9,8)A%!#QK#VhJaM9p"l'-)`K#+$5&DaM'-#4M%N45)!(qFph2p-Re
XRHICraM@-IUJ38jlh[FjcNQ-B1SjcSaM',ZILjmk0Uc*!!99J"@YBq8(p[qPm))"
X!"29rhrIrIjAi&IJ9q)r!rrGP"mMmL+rLlF[m)(c))(0m+IkAMlP))Dr2LUL0)-4
X1L)!LVrd)qp2k$L%Cap(cL4M%LL5)!)aM'+4M0'ZBaMQ#4M9843339'-BaM'-8Rr
Xr9p'-BaM'0B%m50'1CZb2rKPTN!!"ripq-E'2arrrrrqA-``c$#"q"rmRrLIrrrr
XiT3+&&)LXBaV,r$q4+$q)I%!1N!#&&E8K)3!6+32`a*&iAd6dB`M#%BU0)4M'%BK
X*'05%4%J!M'%IT'-mDaM'-(*'054)U""hiaM'(rr5BaKqNBaM'-BdKq4)dBaL!3J
X%)I*0DeMj5rfpq$a!!N!%pIIrGrprJIP"r4Ai6rrm#+-#L45)G'-Gdr`J%KJJF(p
X!$T!!!&Db%J%!%LSL+-54###!K'-B`K'+M+%BaK'-549Y4)4)!*aK'#4M-QXBaM!
X+69988+J4*#FjcK#%%Q-B8T'-CcM'0BNZ5G'FBrmB"%"b5!(iL8SPT3!!3!*!"*3
X8!93"3!!K3#88)%rrr!LM!T-8L#49%&2m2i!)*)!iJ!#3!)!k63`!%'(2h#FiMR8
X!"(4mlhi1Mh4r',S1LiML4L6q12a[R[HMic&V&hR`mE5+LrkS$L2DeVA[Hp*M(pl
XZFjVAZFla*%E1E')!i!"`DC9V@)P+*D8!!%!#3!58&!&8!8!!)8!P"2rr`(E3+
XqjdKcYZ!pr#"rq5!!!)!!m!!3!!!!%#!!!!!!!!%!!!!!!!!!!!!!!!!"!!!!!!!
X!)!!!!!!!3#!!!%!J!!!!!%"`!R!!!!#!!!!!!!!!!!!!J!3!"N!!!!!!!!!!!!!
X"q)P+*D8!!%!#3!58&!&8!8!!)8!P"2rr`!)!!!"!!!!!!Krq!!#5!!!!!!!!!
X!!!!!)!!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$J-!!!%!J!!!!!i!
X!"!!!!!%!!!!!!!!!!!!(!!!!!B!!!!!!!!!!!!9V@)P+*qF!!%!#3!58(!(F!F!
X!)8!P"2rr`!!!!!"!!!!!"!!!!!#-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!%!"!!*!!i!%`!B!"S!(3!J!#8!+J!X!$%!-J!f!$X!23"#!%F!6!"4!&B!@`"
XJ!'8!CJ"S!'X!F!"c!(J!I3##!)F!M!#4!*B!Q`#J!+8!U!#Y!,)!Y`#m!-%!aJ$
X,!0!!e3$D!0m!j!$T!1i!m`$i!2d!r`%$!38"#!%1!4!"&3%D!4m"*!%T!5d"-J%
Xh!6J"1`&!!8)"4`&-!9%"9J&E!@!"C3&T!@i"F`&i!Ad"JJ'(!BS"L`'1!C-"N`'
XB!Cd"SJ'R!D`"X3'f!EX"`!(&!FS"c3(3!G)"e`(F!H%"jJ(V!I!"p3(k!Im#"!)
X*!Ji#%`)B!Kd#)J)R!L`#-3)c!MJ#23*#!NF#5`*2!P3#@3*H!Q3#DJ*V!R!#G3*
Xk!Rm#K!+&!SN#M3+5!TF#Q`+J!U-#U!+Y!V)#YJ+k!Vd#``,*!X`#dJ,B!YX#h`,
XM!ZF#l3,c![F#r3-$!`N$$`-9!aX$(`-L!b8$+3-[!c8$13-m!d)$5!0,!di$9!0
XD!em$C30U!fm$G30k!i!$K31+!im$P!1C!jm$T31V!l%$YJ1j!l`$[`2$!mJ$c32
X4!pB$e`2F!q!$j!2R!qd!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
X'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'"JB#"J%'!!B!"J!'!!B#"J%
X'!JB!"J!'!3B!"J)'!3B!"J)'!!B!"J!'!!B!"J!'!!B!"J)'!3B""J!'!3B!"J!
X'!!B!"J!'!!B!"J!'!!B!"J%'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
X'!!B!"J)'!3B#"J%'!!B""J!'!!B!"J!'!!B""J!'!!B#"J!'!!B""J!'!!B!"J!
X'!!B!"J!'!3B!"J!'!!B!"J!'!!B#"J)'!3B!"J!!!!B!"J!'!!B!"J!'!!B!"J!
X'!!B!"J%'!3B""J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
X'!JB!"J!'!!B!"J%'!3B!"J!'!!B!"J!'!`B!"J!'!!B!"J!'!`B!"J!'!!B!"J!
X'!!B#"J!'!!B!"J!'!!B$"J!'!!B$"J!'!!B$"J)'!JB#"J!'!!B#"J!'!!B!"J!
X'!!B!"J)'!`B$"J)'!!B!"J!'!`B!"J!'!!B$"J!'!!B!"J!'!!B!"J!'!!B!"J!
X'!!B!"J!'!!B!"J!'!!B!"J!'!3B""J-'!!B!"J!'!3B!"J)'!!B!"J!'!3B!"[r
Xr!!!,hT!!!!!!!2m!"`!!rrd!"`!2"18!$!!$!!!!3J!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$J!!!!
X!!!!!!!!!!!!'J!!!!!!!9DY@)P!"q!j4#"!#!!L+F!F!F!(""3!!T!!+#"$q!rr
Xi!!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"84!!!!!!!T3!!!-!!!,!!!
X!))!!!!(q)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rri!!!!!!!!!!!!!m!
X!!#!!!!TJ!!!3!!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!F(!!!!!!!!!
X!!!!!!!!!!!!!(!!!!!!'!!!!!%5!!!!!!!!!!!!3!!!!!!!!))!!9DY@)P!"D!T
X4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rri!!!!!!!i!"J!p#!!!#!!!!f3!!$915a
X5)!!#jFiAcIFi!!(!1mlhrZM`aK',[1mlmBaM(mJ5!)%!"!B)6!!!!!!!!!!!!#T
XVJ#)!L3%!J+Fli(X!JL!1L!dI%%L%f,h%!#++!!!"rL*3!@J+83J3!J!)LP!&!&!
X"338!!+3!#JJ3rJ2rq!li2J!!%FiJ!I`J!#!J!`!j)(hIeV*5U!!$(M%d%"M%##)
XJ4M'-)4LJbKZ-BaM%NBaM%-J9!%%!"!J)6$!!!!!!J!!!!#Ud9%8S53+85eM'!+5
X844&4L"#SN!#4#@M'*!!NNJ"9UeBL8!&S#P%)%!)!#)T3"3"3!8%&!!#N!!S)%2i
X$rrJ45#)!'j)a)!Am)!4-)!5!+8p%e9,5BA%!"43K9#!Ba"!3,dBaM#%)S0)9c'-
XB`*'-Ba$%')!"!!3)#!33!!!!!)!!!!!U"%!!!!B!!!!)aJ#J!!!!%BN4q*!!!!!
X-aL!!##!!!!(q)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rrlF8!3!#3k-4!
X&r$mLNL3%J#Rr4)8ae#&a!!8d*THm*dDRb&$(d)`K#+$L%DaM'-#4M&844"!!(qF
Xph2p-RhRHICh4M@-IUJ3Ljlh[FjcNQ-B1SjcSaM',N!")ZI1MDXBN!"C+@P@V9Mj
X3IfrkA`J3!J!)qPrprprrIq8rJ+Ii#Rm3rJ2rr**(b2a%4M&i(I`J)9)J5cJJ$d5
X2Q)JKVm!*9%(iBNM'`!5@rM#2[6qJ`K'FI4miNBa)SN)3!#-BaLNBc4V'-BjLNBe
X9%8N%)aM'-BaM&*M(eIaM'-BaMARr%M4MQEh%rqQDT3!"rq2IM'aMmIrrrrrrLmB
X`B-B-%"r!Ira(riMrrrrrr**#K54%4r'1kr`rqM!rX(`J$d5&&93K)3q*P)%3BNL
Xm*mL@aM#-)4LJiK'-B4L%NBa84%)3!#-B4qNBcKV'-BaFNBe*%LS%)rM'-BIrp*r
Xq&k4M'-BaM4")%M4M')!)J%%V3Y@V9Mj5rfpq$a!!)J!)qRlrqprrIq!rP!Ip#Rm
X)rrrm!hL54%4M'0Dr`J*"%J5(iJ$d3!&E+K!3!4&3%3BNL%%"!AaM#-)4LSdK'
X-B4L%NBeL5%%3!#-B4JNBc4V'-B`#NBe*S%)`M'-B3K"*M'&+4M'-BaM4**%M4
XM'2r`J%*r3S!"rL*5L@P!!"!!)J!)LJ+!#P!"3!!%&!"JJ)rrrm!"N54%4LU
X1kr`r)2%NX(fJ$d5!9V%5!""4&K%8BNL+L##3!%BaM#%BU-S4M'%Ba*&@iNK"%!!
XR'-BT'-bDaM'-)T0994JU"'FCcR1-B45BaK@NBaR1-Be55j*dCaL!%3!%#U99UeB
XL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S)#2rrr!!43U-Na$SUL#[m)!F3`!!iB!"
X%J$T1NJ!3B1IZ%ja(-S!!MdI1pq$SpdIaLk$SZ)iNBNr!N!"r'qFpb2M-@XAHI"a
XY)U,rUJ1DjV@YFjlNQ-IZZjcQYHjc[%N4XjXBJ!i!$`TD!!(q)P+*D8!!%!!L!!L
X+!S!+8!&!!!38!%8+#!Mrrr`!&N+qad)4fh!Grq$i%!!!!#!!I3!3!!`!%#!!!!!
X!!!#!!!!!!!!!!!!!!!!!3!!!!!!!F2!!!!!!!"!)!!!3#!!!!!!3(!%!!!!!)!!
X!!!!!!!!!!#!"!!%3!!!!!!!!!!!!9DY@)P+*D8!!%!!L!!L+!S!+8!&!!!38!%8
X+#!Mrrr`!%!!!"!!3!!!4q!!!%!!!!!!!!!!!!!!!)!!!!!!!!!%!!!!!!!!!!!!
X!!!!!)!!!!!!!!!!!!!!!!4!)!!!3#!!!!!%3!!%!!!!!)!!!!!!!!!!!!#!!!!(
XJ!!!!!!!!!!!!!!(q)P+*D8!!%!!L!!L+!S!+8!&!!!38!%8+#!Mrrr`!!!!!"!!
Xi!!!3!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!1!`!!!!!!!!!!$J!!)!!!!!3!!!!!!!!!!!!F!!!!!!!!!!!!!!!!!!9DY
X@)P+*qF!!%!!L!!L+!i!1F!(!!!38!%8+#!Mrrr`!!!!!!!!!!!!!!!!!%!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!"!!*!!i!%`!C!"S!(3!J!#8!+J!X!$%
X!-J!h!$`!2J"$!%J!63"5!&F!A!"K!'B!C`"T!'d!FJ"f!(X!J3#'!)X!N!!!P3#
XD!*m!T!#T!+`!X3#f!,X!`!$&!-S!c`$8!0N!hJ$M!1J!l3$b!2F!r!%"!33"#3%
X-!4%"'!%D!4m"*!%T!5i"-`%h!6`"33!88"5J&-!9%"9J&E!@!"C3&U!@m"F`&
Xi!Ad"JJ'(!B`"N3'8!C8"Q!'G!Cd"SJ'R!D`"X3'f!EX"`!(&!FS"c`(8!GF"fJ(
XF!H%"jJ(V!I!"p3(k!Im#"!)*!Ji#%`)B!Kd#)J)R!L`#-3)f!MX#23*#!NF#6!*
X4!PB#@`*J!Q8#DJ*`!RB#G`*m!S%#L!+2!TB#P`+E!Tm#T!+T!Ud#XJ+e!VS#[`,
X%!XJ#c!,3!YF#hJ,L!ZN#m!,d![N#rJ-$!`S$%3-@!ad$*!-V!c)$130!!d8$530
X0!e)$@30J!f3$D!0[!hB$HJ0q!i8$L`13!!19!jS$R`1P!kS$X31f!lX$`!2&!mS
X$c`29!pX$i!2P!qJ$k`2[!r-$q!2p"!%%"J3("!`%%!38""J%'!3I!!F!"`!(!!F
X!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F
X!"`!(!!F!"`!(!`F#"`%(!3F""`!(!`F#"`)(!3F""`)(!3F$"`%(!3F#"`%(!3F
X""`%(!3F""`%(!3F$"`)(!3F""`)(!3F!"`%(!3F""`%(!3F""`%(!3F#"`%(!3F
X""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!3F#"`%(!JF""`!(!`F""`%(!3F
X""`%(!JF""`%(!`F""`%(!JF""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!JF
X$"`)(!3F!!!%(!3F""`%(!3F""`%(!3F""`%(!3F#"`)(!JF""`%(!3F""`%(!3F
X""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`-(!3F""`%(!3F""`%(!3F""`%(!3F
X""`-(!3F""`!(!!F!"`-(!!F!"`!(!!F!"`!(!JF!"`!(!!F!"`!(!`F!"`!(!`F
X!"`!(!`F#"`)(!JF!"`!(!JF!"`!(!!F!"`!(!!F#"`-(!`F#"`!(!!F!"`-(!!F
X!"`!(!`F!"`%(!3F""`%(!3F""`%(!!F""`%(!3F""`%(!3F""`%(!3F""`)(!JF
X$"`!(!3F""`%(!3F$"`%(!!F!"`%(!!%!"rrr!!!!3J$`!*F!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!3!*!!",L3!-!!"
X,M!!!!"B!#PPj@fYFG9CS9fpBE&0L9'T9EP)X!!!!&J!+@9PE5ea99NKAEeK-8d*
X85P918L`!!!"#B!!!Q!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!3!"!!N!!$J*!!`!!$J-!!!)`T!!!!!!!1m!#J!!rrB!#J!
X-!fF!#J!#!!!!0!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!$J%d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"q"`!!
X!!!!!!(!F"`"`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!&4!PP+!!!'!!!!!!!!!!!!!!!!!!!!!!!!!!U!
X!!!!!&S&!!!!!!)!!8"3&!&!!!!!!!!!!!!!&%!$!`!!!J!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!FB!!!!!!!!!!!!!!!!!!!1!!i!!!!N)&N#4!C!!8N3&*%"-!$J
X!!H(J!!!!!!!!!!!!&S&1!!!!$3!!8"3&!&!!!99!!!!22!$IZIdP*3!!ZAI&mhh
X1!!'1%mlRqk--BJjGjhRIM'$'2d+!JJ"!`K-B!!!!"!!!!!90)4hjG DB%+TQf
XN+TT#UI*$4!pb%KH,3$jfS!#)-rq@q9%!!+!*!!"AP!8!8!!#PN!L3"r$q09@58B
X5%!&(L)d%"M%%%P%5-C4%B`bM(Q-BaL5-B-BM)d"#!%%#!3J!!!!%!!!!"9BK)aQ
X-3!!!!!!!!!!!!!!!8Z4"eBh-bY`%8)J%*&5*+AE2B)!d!"%%J&cf"B(B!!+UL&!
X2Rm-)Mp*3JKq3!!&AS#M'Vk'DU-)a%)`dLV@-BaJ5-95P&)J!EQGZIYbpZERY
Xr-B-Cp8"bS4@-AGhGfCQEpZCQCTQC693lpBdY#UJq8*UN3[b8L8EXB,j)S"1iK-h
X$r2m,B!!!!)S`Am-)K6Qj8K*mmN86T"m*ca!%UU[3Mh6r$L*0BqMja)U9%)N5!!C
XQC5C66*QCR)8U9+NS)(+KeBaQCQCQCQ95QCQCQCP"6NIeYFd+L!MmU"q"*+4*GUr
XJb9NrS89*IAm0`pb3!!!!2`B`rm-)J"4Q)K83!N8JIKL5)3[T+[i`M%4MM5)-i`M
X3*)U++*%5!"jLI5C6M*QCQ'8U9%P&32rK%iaQCQCMrre5QCQCQCN"9$[[M5c)!$k
X3!-UN3[bNL4DS%8pU)U%j8J8"hAj8rr`!!)S`Im-)!&5Q8K!3"%9%44L5)J33*dB
XaP%4MM+)-i`V+*)N+4*%+!#CQB5C66*QCQ"8N++Q&3)aM%iaQCQCQ)L&5QCQCQCN
X!j)A&LK)3!"%3L!3N*+8T&UJ+5%TL38)T"3"9!&5!!!!)8LqI``L!14Q*)!%-1IZ
X%ja(-S!%34mlR`k0dIJaG"dA%F3T%R`Sr(jRC(P-XQ@jiiZ3T&r9!M&haFjhGhGR
XCR9+@CQChG`"24!@aiH!!!4pb[rmR@qN@Z"XqXD""!q5(!&8!8q!!!!!Kk*r$q!!
X3!!$!!3!!!!!!!!!J!!i!!!!!!!!!!!!"!!!!!!!"KJ!!!!!%!J!!#"!!!!!"!i!
X!#!!!!!!!#!!!!!!!!!!!!!!i!!!!!!!!!!!!!!3!!"q!!!!!!!%!!!!!9`"`!!!
X!!!!J(ri!!!!!!!!#!!!!!!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J-!!!
X)%!!!!!B!!!!3!!!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!J!
X!!!"`!!!!!!!!!F!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!3!#3!1!"B!(3!
XH!#%!*!!T!#i!-!!d!$8!13!q!%!!43"+!%m!9!"C!&i!B`"S!'N!D`"Z!(-!GJ"
Xk!)%!KJ#,!*!!!*8!Q3#G!+)!T`#S!+d!XJ#f!,d!`J$(!-`!d3$@!0X!i!$P!1S
X!m3$f!2X!r`%"!38""`%+!4!"%J%@!4S"(J%L!5B"+J%Z!6)"0!%h!6X"23&%!8J
X"6!&3!93"@!&F!9m"B`&S!@m"G!&i!A`"I`'!!B-"L!')!Bd"NJ'A!CX"S!'P!DS
X"VJ'b!EB"ZJ'q!F)"aJ(+!Fi"dJ(@!GJ"fJ(G!H!"j!(S!H`"m!(d!IJ"r!)!!J3
X##!),!Jm#&!)C!Ki#)`)S!Ld#03)p!N8#4`*+!Nm#9`*H!Q-#D!*X!R!#G3*k!Ri
X#J`+*!Si#N3+9!TS#S3+S!Ui#XJ+c!VF#[J,"!XB#b`,4!Y8#f3,I!Z8#k3,[![8
X#r!-!!`B$#J-1!a!$%J-A!ai$)`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX
X$+`-V!bX$+`-V!bX$+`-a!cF$2J!!!!!!!!!!!!!!!2rrrrrrr`B'rrrrrrrr!!$
Xrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr!!Irrrrrrrm$!`%$!38""`!'!!N
X!#!%$!!3!"!%(!!B""!!&!3-""J!'!3B!"J!'!!B!"J!'!!B!"J!'!J3""!%&!!B
X""3%'!!J""`!'!!B!"J!&!!8!"J!'!3-!"J!'!!8!#!!'!!B!"J!'!!B!"J!'!!B
X!"J!)!!B!"J!&!33""J%%!!3!"J!$!!8!"3!&!!8!"3!%!!8!"3!$!!3!"3!$!!J
X!"3!&!!8!"3!&!!8!"!!&!!B!#!!'!!B!"3!%!!)!"!!'!!!!"J%(!!B!"3!'!!B
X!"J!&!!8!"3!&!!8!"3!&!!8!"3!&!!8!!`!$!!3!"!!&!!8!"3!&!!8!"3!&!!8
X!"3!&!!3!"3!'!!B!"J!'!!B!"J!*!!N!#3%%!!3!"J!*!!F"#J!'!!8!"3!'!!B
X!"3!'!!F$#!)&!38!"3!)!3N!"J%'!3-!"3!)!38!"J%(!!J!#!%)!!B!"`-(!!B
X!#3!)!!8!"`%(!JF""!%%!!B!#!!'!!Rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Xrrrrrrrrrrrrrrrrrrrrr!!B!"J!(!!!!!!XQN!!!!!!!l`!2!!$rp!!2!!m%Q3!
X-!!-!!3!q!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!"`!6)!!!!!"J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X"9!!!!!!!(i$J!!!!!!!!!!!!!!i!1!!!!!!!!!!!!!!!"3!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SL!*
X-NN!!!!N!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"D!S!!!!!!!!!!1I1!
X+!#J!!!!!!!!!!2!!!!8!"!!!-!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!"``!!!!!!!!!!!!!!!!!!!!!!!F!!)J!!!!%)3$C!)JJ'3D*"!0%JJ%!!!!
X!!!!!!!!!!!&8!!!!!!!@r+!!!!!!$!!!#N5J#J!S!!!*5S!!!`(l`!!&d8jqB8N
XJ!!6%lm&qGqmm!!$`!)qHmrpk'$$#$LpmpmprKJ`'-Id&!%#!!J-%%``!!!!!!J!
X!!!!+Q4"alq,d+"+9CJ%%8UEE%)T9L%8VX!ai!mi!!(4D!(jk!!!4!-rrPX5RJ!!
X%J!L!!!TFS!S!+!!!%Nb!"%B"r#r`"GIeNT&)`!!*,4#$3)!``J!"#H#)BBS3KKJ
Xa3ai`````L)B-"M%-KS!JJ!)%"!%%!!!!!!)!!!!!#UB3)KKM$#!!!!!!!!!!!!!
X!!!!!!8N5K!94(KiQi!#JK93!#J!N84EdU%!!!!!4!#!+8+!+!#J!!"+9!%!-!I`
XS%!@#P*5JKr)!#KB4"8%!8-)%%3S45'#'%))B-N+Y-----!L'$%94&)3!$[1HlRf
Xh&XeRHIGh4M%BaqU!+&))8``ZFjcR1FjcT5XjcR1M'-9,N!#"k9%K)59!!+#-!)5
XI4")4&T5`,Z1NJ"%!)!T3TrS!+1i!!!!3T&rer#J3"Br-D%#%`J!5&"-*II"23dJ
X)&1P2S)B3JKJd3Nd`````#)8558S84!!4M'-8MP-R-jM'1)T'-4M%+S!S8JK6$$'
X-BaM'-BaP,-BaM'-Ba693HrP5A-bN3"%JP95)4%4a%ADAX$%84)!MXP!+8+3EJ1m
X4!!!!!44rrI`S%!@&"K#JK5qI%K3JN3-)N!$#%q3P+LKJKpkIq$K#$,$p$mm)K4+
XSLL4%!!q-)a5-8dBM'-B`JNBUT8453%5+$dX-,h[Hpm)aM'8SaM'-BaM%"6L(q9&
X5d)!"qIbN!r!r4*!!N8D@-#m8b2`K6Edlpiri-4!!!!IJarqI`S%!@!"5d8K!)
X!)K4!B3-)N!#q)!*&+LKJKK#''$4#$,$"$3#)K++T4%3N!"'-)r5-8iBM'-B`FN9
X+SN5+J%5+#%X--BaM'-2rrq8SaM'-BaM%"4#(p9$Fd)!!)L$&9)K%44%4GTIS8I9
X3KN%!L5M5#8["larri!!#$%2jr#J3"B!&8`L%!J!L&)"rJ`N3JK!%42IiB)B3KK`
Xb3Ja``3b!L)5K%84%*!!4M#-%M&0')aM'-!T&4%9S$rrJK($$'-BaM#%)3P+-B
XaM'-Ba!83Hr23dXb!!%)JK!#%K%85%4D8#&%'8B9"-ST2mrP+IbN3!!!!%44'(r`
XS%!8!&C-85!!!358)J8-*%)3,k!)%'''+%)BF-8)-F-%X8)L%34)NK"3!%BaM&)a
X6*L-BaM#+6)4)aJU!J`BB4``aM'-BaM'-C5M'-BaR1F`&83AK85%K!!(m)B98!!4
X&*&%@R!54&&'!J8d&)!!"5J!T%3!!!!#N5!(m+"!&J!k-iNJ!)-$(p`%mm3mj4""
X"a"qHmr"k'p$q$#p!p#m)H%%5*2`8IircRZ4m8aBM&hR`FE5%5,rUJ)-&lm,cch[
XHplR1Fk8SZFjcQYDd!lk%!ABH(J!!K$ji!rrNHXr4&S!-cZZ1J)%"r*!!!!&+!#M
XZ!!!!!%2!!I`[m!8!"!!!-!!J!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!)!!!!!!!
X!"J`!!!!!!!J#!!!!3#!!!!!!"!F!!!"!!!!!!!!!%!!!!!!!!!!!!!!"!(J!!!!
X!!!!!!!&8!!"!!!!@J!!!!!!!!3!!!!!"5J!S!!!!!!!!3!!(i!!&!!!!!!!!3!!
X!!!!!!!!!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#)!J!!!%!J!!!!!%3
X!!!!!)!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!J!!!&S!!!!!!!!%
X!!!!!!FS!+!!!!!!!"%!!!!!!"3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!F!`!!!!!!!!!!!!i!!!!!%!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!93!!!!!!"q!!!!!!!!#!!!!!!!1!$J!!!!!!!1!!!!!!!8
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!3!#`!3!"F!(`!J!#-!*J!X!$%!-`!i!$N
X!2J"%!%B!6!"5!&N!A`"P!'X!F3"h!(J!HJ"q!)-!K`#0!*8!R!#L!+J!VJ#c!,J
X![J$%!-8!b`$4!0B!h3$M!1N!l`$e!2X"!3%)!3i"&3%H!5-"+!%Y!5m"0!%f!6N
X"33&$!8J"63&5!9F"A!&J!@8"DJ&X!@m"G!&f!Am"K!'*!Bi"N`'B!Cd"S3'Q!DX
X"Y!'j!Ei"``('!FF"bJ(3!G!"e`(H!H3"k3([!I8"q`)!!J8##J)2!K3#'3)H!L-
X#+!)Y!M)#0!)f!MN#2!*"!NB#5`*3!P8#@J*I!Q3#D3*Z!R%#G3*k!S!#KJ+-!T)
X#Q3+K!UN#XJ+d!VF#[3,(!Xm#eJ,E!Ym#i`,S!Zm#p!,k!`%$"J-*!`i$%`-E!b3
X$+`-`!c%$0J-q!d%$4`01!e3$@30H!f8$E!0a!hJ$I`1)!i`$N`1B!jd$R`1K!kB
X$V31b!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!m8
X$b`29!!$rr`!!!!!!!!!!rrrrrrrr#!Mrrrrrrrm!!2rrrrrrrrrrrrrrrrrrrrr
Xrrrrrrrrrrrrrrrrrrrrrrrrrr`3%!3-""3%*!3F"#3!*!3-""3%&!3J""`%%!3F
X"!`%(!3J$#!%)!3J"#!%)!3J"#!%)!3J"!`%%!3B""`%'!3J"#J%*!3J"#!%)!3F
X""`%)!3J#"3!(!3J""`%*!3J"#!%)!3J"#!%)!!J"#!%*!3X""`%(!3F""!%(!33
X""!!)!33""`%(!3F""`%(!3B""`%(!38""J%(!38"#`%(!3F""`%(!3B""`%'!3F
X""`%,!3F""`%(!38"!`%&!3J!!!%*!3N"#!%(!3J"#!%)!3F""`%(!3F""`%(!3F
X""`%(!3F""`)&!38""3%&!3F""`%(!3F""`%(!3F""`%(!3F""3%'!3F"#!%)!3J
X"#!%*!3S"#J%,!33""3%)!3`!#!!,!3F""J%'!3F"#3%(!3J"#3)+!38!"J!'!3S
X"#`!(!3J#"!%(!3S""3%)!3N"#!%)!JS!#!%*!JN"#!--!3X""J%*!3F""`%%!33
X""`%*!3J"$rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrm
X##3)*!!Uff`!!!%3!!!!!!!!!!!!)!!`!HJ""!(S!$!!)!!!!!!!!!!!!!!!!!!!
X!!!!!!!J!$!"q!(m!IJ!-!!J!!!!!!!!!!!!!!!F!#3!!!%3!!!!!!!!!!!!!!!!
X!!!!!!!!"`!&!!8!(F!)J!8!!J!!!!!!!!!!!!!!!!!!!!!!!!!(!!F!"`!I`!q!
X"`!#!!!N!#!!!!%3!!!!!!!!!!!!!%!!`!&i!JJ"H!$!!%!!!!!!!!!!!!!!!!!!
X!!!!!!!!3!$!!IJ$q!(i!-!!3!!!!!!!!!!!!!!J!"J!!!%3!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!3!#N!&`!*!!N!(`!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!13!I!!m
X!$`!I!!X!#`!!!%3!!!!!!!!!!!!!!!!!!!!!!!!!!!J!P!$S!*!!!*!!!2J!!!!
X!!!!!!!!!!!!!!!!!!!!!!!!)!*`!q!$`!2!!q!!!#`!%!!!!42J!N!!!N!!!k!#
X8!!J!!!!!!!!!!!!!!!!!!!!!!!!!!!$i!2!!m!$i!*`!#!!!!!!!!!!!!!!!!!!
X!!!!!!!!!!!!%!!3!!!"%!!!!!!r`#"!)%!J3#"!)%!J3#"!)%!J3$r!!!!!!!!!
X!!!r`(rJB'"JB'"JB'"JB'"JB'"JB'"JIq!r`!!!!!!!(!!F!!!"%!3!#J!4!$Z!
X#J!+!!i!!!!!!!!!!!!!!!!!!!!!!!!!"!!1!"m!2i!1!!i!$J!!!!!!!!!!!!!!
X!!!!!!!!!!!!'!!F!!!"%!"m!#3!*!"F!+3!3!!!!!!!!!!!!!!!!!!!!!!!!!!!
X!(`!2!!m!(`!j!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!X!!!!3$djPG%KKBfX
XJ9fPZC'phF`!!!#!!-!!3!8)"l3!%!!!!!!!!!!!,4(9ZCf9[EL"0BA!S#J!!!$S
Xj6Q9d5'&MDb"f-bia,L"*BfpZFb"LH5"%EfjKE'3J6#iJ6Q&cD#!Y)%3Z6Q&cD%"
XeG'9iBA-ZC@4e!!!!J!rrrrrrr`!!$``-$!`2m!!2crr!rrr2!!m-$!rr$rr`$mr
X`ca$``2!2$lm2!3m-m!r!qrm3(m$`$``2[rrr$2!2rrrlm-$!m!ra!Iqr$rc`$r!
X3m2[``2!2$`(m$lm-m!r!rr$!qr$`$`m-$rm2[r!2`-$!`-$lm!rrrrrrrrr`!!!
X!J!rrrrrrr`!!$``-$``2m!!2cm$lm-r2!!rar2[mrrr`$r!Iqrm3m2!2m3(lm3(
Xmm!r`(r[r%2$`$r(mqrcar2!2cm$lm-r!m!m-$2[m$!c`$m$`qr$``2!2$!rlr``
X-m!r!`2[``-$`$``2qrm-$2!2`2$lm2$!m!rrrrrrrrr`!!!!3(r`3"KFp%(H@H*
XGmNrb4r*rJRrDIZ*HFNik8Gj!$RrqIr"rq(rmIrjrrRrqIrjrrRrqIrjrrRrqIrj
XrrRrqIri!!!"!Ir"!'&18HVjqqRlkI[TkZP+53S*+SNE#3S*'`NULIrjrm(riIra
XrrRrqIrjrrRrqIrjrrRrqIrjrrRrqIrjrrJ!!!3!Irri!%!!$!"!!!S!A2I*!%!!
X#)"!!!K!AZq))%!Ilq"'(r!JAIrq)%52q#"#6rJJAcrr)%#Iq#"!6rJJ6'Bc)&rb
X!#"Iq3!JArc[)&rb3!!JAr%J)%rrRD"2q%JJ4rJN)&(hFL"!!!NJ3!!%S&mrJQ"!
X!!%J3!!!S%!!!'"rrrrJIrri!(rrr!"rrri!Irrr!(rrri"rrrr!Irrri(rrrq"r
XrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"r
XrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq!!
X!!3!Irri!%!!$!"%"!S!6!S*!%i+#)"H#JK!A`SIi&r+Ib"rqrqJIr[rS(rlrk"r
XqrqJIr[rS&r+Ib"I#KmJAJS2)%i+$L"-kZBJ4HVd)%(lm#""qr!J3([!)%!lJ#"!
X'`!J3$Z!)%"l`#""qr!J3I[`)%(Um#"!kZ!J3!S!)(rrrq"rrrJ!Irrm!(rrrJ"r
Xrrm!IrrrJ(rrrm"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"r
XrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"r
XrrrJIrrri(rrrq"rrrrJIrrri!!!#!!!2rrrrrrrrrrrrm!!!!!!!$``-$!`-$!`
X-$2m!!!!!!!r!`-$!`-$!`-$mm!!!!!!2$rm-rrm2rrm-r-m!!!!!$m$!`-$!`-$
X!`2c-m!!!!!m-$!`-$!`-$!cmc-m!!!!2crr`rr$rrr$!r-c-m!!!$``-$!`2!3%
X2r2rrrr!!!!r!cr$!ca!3%"r!`-$`!!!2$rqrrrra!3%2rr`-m!!!$m$2Zr$!m"!
X3%2$!`2!!!!m-$2Zr$2%"!3(m$!c`!!!2crrrZrm3%"!3rrr!m!!!$``-$2Zr!3%
X"!I`-$2!!!!r!`-$2Zr!Ira$``-$`!!!2$2m-$rZrr!cr$2m-m!!!$mm3rr!IZr$
X!`-$!`2!!!!m2!3%"!IZr$!`-$!c`!!!2ca!3%"$rZrr`rrr!m!!!$`m"!3%2$2Z
Xr$!`-$2!!!!r2%"!3(m$2Zr$!`-$`!!!2$2%"!3rrrrZrr`rmm!!!$m$`%"!3m-$
X2Zr$!`2!!!!m-$r%"!I`-$2Zr$!c`!!!2cm$2rrr2rmrrZr$!m!!!$``-$!`-$!`
X-$2Zr$2!!!!r!`-$!`-$!`-$2Zr$`!!!2$rrr$2rrrr`-$2Zrm!!!$m$!`-$!`-$
X!`-$2Zr!!!!m-$!`-$!`-$!`-$2[`!!!2`-$!`-$!`-$!`-$2m!!!$rrrrrrrrrr
Xrrrrrrr!!!!!#!!!2rrrrrrrrrrrrm!!!!!!!$``-$!`-$!`-$2m!!!!!!!r!cm$
X!`-r!`-$mm!!!!!!2$2m-$!clr!`-r-m!!!!!$m$`m-$!qr$!`2c-m!!!!!m2!I`
X-$2[m$!cmc-m!!!!2ca!I`-$lm-$2rrrrm!!!$`m"!Im-qr`2m3%2$2!!!!r`%"!
X3rr[rm"!3%2$`!!!2m3%"!3(lm3%"!3(mm!!!$r!3%"!3qr!3%"!3m2!!!!ra!3%
X"!I[a!3%"!Ic`!!!2m"!3%2rlrr!3%"$`m!!!$`m"!Im-qr`2m3%2$2!!!!r2%"r
X!`2[``-m3(m$`!!!2$`(m$!clr!`-m3m-m!!!$m$`m-$!qr$!`2$``2!!!!m-r`c
Xrr2[mrr`2r!c`!!!2`-r2m2$lm2$rcm$!m!!!$``-$`!Iqrm!(``-$2!!!!r!`-r
X`!2[`!2r!`-$`!!!2$!`-$`$lm"m-$!`-m!!!$m$!`-$`qr$``-$!`2!!!!m-$!`
X-$r[r$!`-$!c`!!!2`-$!`2$lm2$!`-$!m!!!$``-$!m!qr!I$!`-$2!!!!r!`-r
X`!2[`!2r!`-$`!!!2$!`2!"rlr`!I$!`-m!!!$m$!cr$`qr$`rm$!`2!!!!m-$!c
Xrr2[mrr`-$!c`!!!2`-$!`-$lm-$!`-$!m!!!$rrrrrrrrrrrrrrrrr!!!!!!"d&
X38%`!!!!!!!!(8d&@43!"!!!!!!G38N9'!!)!!!!!"e4&@&3!!`!!!!!(3Np143!
X%!!!!!$aZD$-a!!!!!8C548B!"!!!!)!!!3#"!!)!JJ!$!)-!"!#%5801)`!%!!!
X$k!!"!qN!!J2U!!-$k`!%!q`!!!!1!$i!6J#k!E)6L3!%-!S!!!!9!%)!,J$D!E)
X!"3!!!!!!!!!!&h!!!!!!X`#"!!!!!!!!!!$rrp8p"%CTE'8)6h"PEL"0BA!!6`!
X!#P*PC(*KGb"0BA!!8K%!$&"bCACTEh9c)%ecC`"3%3!+8Q9`Eh0TG'P[EJ"1!!!
X&3fa[Ff8!9`!!!5d!!!!!"e*PCh9XBA)!'mJ!$89ZG'9b)%9iF'a[FQ8!!&J!!5d
X!!!!!$%p`G'P[EL"&C'Pdb3"&!!!",3!!!!!%8f&fC3"68`!",3!!!!!%8A9TG!"
X483!!!!!!5!##!!!!!!!!!!$rrrrl"%9NDA3%9@jNE`"D!!!",3!!!!!$3h9d!&J
X!!!4$Eh"j!%-!!!93BA0dC3"@!!!&3faPBA)!!!!!!!!!!+`!J`!!!!!!!!!!rrr
Xpr`0,BQ3-3fpZG(*[E#",CAPc!"[*!!Y3G@jMG(9KG'P[EJ!EbJ!)3R*KBfYPG(-
X!'mX!"@%J,5"Y!"[-!!9Z)#dJHJ!Ec3!&35!Y)%d!'mi!"8iJ,5"D!"[2!!8`)#d
XJ13!Ed!!",3!!!!!)+'9cBf&`C5N!!!!!"bKcF'&MC5N!!!!!##KNC@aPG'8T!!!
X!!!JSFQ9dGA*Z+3!!!!!!!!!!F`#%!!!!!!!!!!$rrrrE"%KPE(!(6h"dD@pZF`!
X!6`!",3!!!!!%5'9XF!!!2`!-4'9cBh*TBQ8J5f9j!!!Q!!%Y!!!!!!G@CA*cD@p
XZ!!"f!!G)DA0dEh*j!!"@!""@CA*cD@pZ)%CPBA4eFQ9c!!!M!!!!!!!U!)!!!!!
X!!!!!!2rrrrX"&!j"BQpeG#"1CA4)B@0Vb3!!!!!",3!!!!!!!!!!aJ#&!!!!!!!
X!!!$rrrh["%PZCQm05@jfC@jdEh*j)%&XE!!!D3!35@jfC@jdEh*j)&0PE'9MG!!
X!53!'3@4UGA0d!!!M!!%Y!!!!!!P-EfpV)%4[Gfi!!$S!$%4PFf0bD@*P)%pZC3!
X!1`!04'9cBh*TBQ8J6@&ZH3!!,`!04'9cBh*TBQ8J9(*KF!!!AJ!",3!!!!!-3f&
XXE#"0EfjcG'9b!!"$!!Y1B@eP)%pLDQ9MG!!!)`!,4'PcBfpfCA*TCA-!!&`!!!!
X!!*)!KJ!!!!!!!!!!rrrlZ`9&FA9TF!G$GA*bC@jd!"[4!!%Y!!!!!!9AD@9XC!!
X!G`!&9'KbEhF!!(3!"8&`F'aj!!"K!!%Y!!!!!!TAC@&b)%&bE@pb!!"A!!K8B@Y
XP)%pQCJ!!9!!+3A0V)&*PE@pfC3!!33!",3!!!!!'8(9d)%pZ!!"3!!C5C@e[GQ8
X!!&)!!!!!!*-!K`!!!!!!!!!!rrrrH`0"Bh3%9f&TG!!!,J!",3!!!!!)9'9XCA"
X[FR3!9"%!"%TeEA!!!#-!"de[ER0dCA)!!#-!">F'8!!#-!!5d!!!!!"8&`F'a
Xj!!"K!!03BAN!!(!!"%YTBfX!4"%!"%0SBA3!!#-!"8pQCQ9b!!!M!!43FQ&j!!!
XM!!48GA*Z!!!M!!!!!!#j!)J!!!!!!!!!!2rrqpm&6@&RD@-*4(*[F#"*G'9Y!!"
XN!!Y%FQp`)&0PE'9MG!!!4!!'8'PMDh9`!!!X!!e8EfGRE'8JF'PMDh9`!!"!!!%
XY!!!!!!0&BA3!!'8!"&*PB@3!!()!"9&eB@CQ!!"a!!0%DA!!!#-!!5d!!!!!#da
XTFh3J8h"PE'ac!!"i!!T$BA0d)&0`C@aX!!"D!!0DBA!!!(S!"NPZGQpVC3!!)`!
X$8R9L!!!M!!!!!!#h!)N!!!!!!!!!!2rrZlm%3QPdF`C6C@&bBfJ!!(-!#N0XEh0
XP)%4[Eh)!!'-!#8p`C@iJ4'p[FJ!!E`!&3A"`E(N!!'%!"%YTBfX!4"%!!5d!!!!
X!"P9ZG(*KF!!!)`!&4QpbBf8!!#-!"%a[Eh3!!#-!!5d!!!!!"d9ZCh*KGQ8!!%8
X!!d4TF!!!)`!$8fPd!!!M!!%Y!!!M!JK$E'PYF#"9F!!!2!!+3faTE@)J4'phEJ!
X!2J!!!!!!L`$+!!!!!!!!!!$rrrrr#h"eEQ0dG@&dD@pZ!L!Z!!!!!!)J,!!!!!!
X#)$X!!!!!!L!k!!!!!!)J)3!!!!!#)$m!!!!!!L!V!!!!!!)J,3!!!!!#)$d!!!!
X!!L!M!!!!!!)J*!!!!!!#)%!!!!!!!L!Q!!!!!!)J+J!!!!!#)(i!!!!!!L"I!!!
X!!!!!!!"i!-X!!!!!!!!!!2rrrrm)BR*KBfYPG(-"@`!!!!!"A3!!!!!"+!!!!!!
X"+3!!!!!"H`!!!!!"I3!!!!!"2!!!!!!"2J!!!!!"AJ!!!!!"B!!!!!!"*`!!!!!
X")J!!!!!"A!!!!!!",`!!!!!"I!!!!!!"*3!!!!!!!!!!B`$-!!!!!!!!!!$rrrr
Xr"@%J,5"Y!@%!!!!!!@)!!!!!!@-!!!!!!@3!!!!!!@8!!!!!!@B!!!!!!@F!!!!
X!!@J!!!!!!@N!!!!!!@S!!!!!!@X!!!!!!@`!!!!!!@d!!!!!!!!!!'-!c3!!!!!
X!!!!!rrrrr`9Z)#dJHJ&Z!!!!!!&[!!!!!!&`!!!!!!&a!!!!!!&b!!!!!!&c!!!
X!!!&d!!!!!!&e!!!!!!&f!!!!!!&h!!!!!!&i!!!!!!&j!!!!!!&k!!!!!!!!!!"
XM!-i!!!!!!!!!!2rrrrm&35!Y)%d"33!!!!!"3J!!!!!"3`!!!!!"4!!!!!!"43!
X!!!!"4J!!!!!"4`!!!!!"5!!!!!!"53!!!!!"5J!!!!!"5`!!!!!"6!!!!!!"63!
X!!!!!!!!!B`$2!!!!!!!!!!$rrrrr"8iJ,5"D!8i!!!!!!8m!!!!!!9!!!!!!!9%
X!!!!!!9)!!!!!!9-!!!!!!93!!!!!!98!!!!!!9B!!!!!!9F!!!!!!9J!!!!!!9N
X!!!!!!9S!!!!!!!!!!'S!b3!!!!!!!!!!rrrpr`aMEfjdFQpX)'YPHA-"BJ!a!!!
X"DJ!b!!!"EJ!c!!!"D!!d!!!"E!!f!!!"H3!h!!!"D`!i!!!"G3!j!!!",3!!!!!
X"C!"%!!!"F!"3!!!"FJ"5!!!"G!"8!!!!!!!!83$3!!!!!!!!!!$rrrrr"6!J,5!
Xj!6!!!!!!!6%!!!!!!6)!!!!!!6-!!!!!!63!!!!!!68!!!!!!6B!!!!!!6F!!!!
X!!6J!!!!!!6N!!!!!!!!!!*%!b!!!!!!!!!!!rrrrr`ChDATKFQ3+3A4dFQPLGA4
XPF`!!H!!04'9dC@0d)&9ZFf9PEJ!!C3!*4Qa[Eh)J6@&`!!"Q!""(C@jPFQ&dC5"
X0EfjcG'9b!!"R!!K*C'9ZG'PQH3!!D3!*6'pMBA4TEfjc!!"[!!j-CACPE#"8C@a
XPF'pbG!!!GJ!%9fPcD!!!G`!!!!!!A`$4!!!!!!!!!!$rrrrr"f0eFR*PER3'9f9
XKF'pZ!!!T!!9"FQe[FJ!!@`!&8QPZCh-!!$d!"N&YG@aPG!!!)J!&9'p[E(-!!#J
X!"%G[E'3!!#3!"P0`C@aXF`!!+`!!!!!!,!#!!!S!J!!!!)%!!!##!!!!J`!!!)3
X!!!#&!!!!KJ!!!)F!!!#)!!!!L3!!!!!!,!$)!!S!b!!!!-N!!!$+!!!!b`!!!-`
X!!!$0!!!!cJ!!!-m!!!$3!!!!d3!!!!!!N!!!$4'P-M!a)%0[ER4bEf`J5f9jFa#
XP-M!b)&"eEQ0dG@&dD@pZ$D8b-$-J3R*KBfYPG(-+T6)`0#"K)#dJE3UP-M!e)'i
XJ,5"k#U8b-$BJ35!Y)%d+T6)`0b"1)#dJ@JUP-M!i)$!J,5!j!U8Y#"ZPCA0MBA"
XP"b#PFh"KBf8)#+9NC@aPG'8)$D9bCA4eFQi!!!!S!!`-T6)`15"$GA*bC@jd!U8
XY!AF"G!&K!U8Y!9F"9!&"!U8Y!9!"8J!!!'8!$3F#T@0dE#eL"`UPBh4X,@S($U9
XMG'`YEJF)T@0dE#eS"`bPBh4X,@`('D9MG'`YH3F,T@0dE#eV"a@PBh4X,A8#T5d
X("+9MG'`YC!F3T@0dE#e`"a+PBh4X,A)(&+9MG'`YG!!!!#)!%!%Z!5`"1`%k!5%
X"2`%V!5d"23%M!53"3!%Q!5S"IJ&I!!!!)J!3!9X"A3%S!5N"H`&p!6`"2J&H!@!
X"*`%L!9`",`&m!58!!!!F!!d"B3&L!@-"C!&P!@B"C`&S!@N"DJ&V!@`"E3!!!"`
X!$3&Z!@m"F!&a!A)"F`&d!A8"GJ&h!AJ"H3&k!!!!(!!0!8%"3J&$!83"43&'!8F
X"5!&*!8S"5`&-!8d!!!!F!!d"6J&2!9!"83&5!9-"9!&9!9B"9`&B!9N"@J!!!"B
X!#J%`!6%"-J%c!63"03%f!6F"1!%j!!!!3J!)"aLPBh4X,AJ("D9MG'`YC3F'T@0
XdE#eQ"`HPBh4X,@F(#D9MG'`YD3F2T@0dE#e["aDPBh4X,AB(&k9MG'`YG`!!!"!
X!"`%T!9X"23%L!5J"*!%V!!!!5`XaFh3JE@9ZG5"*4%4A8N3+)b"[CL"048j9Fdp
X$6P3&+LSU+LT-8e4$"P*PFb"*4%4A8N3)8Q9cCA*fC@4'9e*%"5SU+LSU6&0843!
X!!#X$%S!!!!!&-bia,M)H8h4TBfKdD@jR)%eKG'KPE@&dDA0MD#"$C@jdFR9Y!!!
X!+`-5J!!!!!8c,M%Z-Kic,M%Z-JfT-6Ni05da16Nc)%dZ)&0dCA"SC@jcEfi!!!$
X8!!X!!!!!!(3!rJ#)!@)%"&"XBAN!!!!!!(3!9J#)!,S%"&&eDA3!!!!!!(!!qJ#
X-!@D!!!!!!!!!6J"j!&m!QJ!!!!!!!!"1!0S!A`$l!!!!!!!!!%i"43"I!@B!!!!
X!!!!!6J"9!&i!HBJ&8QpXC6S%!!!!!!"1!,S!AJ$DL!46CAJk!!!!!!"1!4N!AJ&
X&L!90Ef4P1J!!!!!!!"-!93!N!@@)$&GSEb"KFQ8JH@pe2`!!!!!!+3"C!$N"Ba!
X%6Q&YC3!!!!!!$`!B!#m!1+!#!!%!!!!E!!J"6`+P,3%r!5B#T5d"GJ&@##0fCA*
XcD@pZ!!!!*J!-!@N"53FMB@4UGA0d!U8Y!6S"1`%[!9i#T5d"3`8MEQ&YC3&F!!!
X!63!1!5i#T5d)&+8JBh4X,A3&)fTeEA!))fe[ER0dCA)&)hGTF'8#T5d"B3&`"`5
XPBh4X,@3&)f0SBA3')fpQCQ9b"50`FQ&j"50dGA*Z!!!!,J!2!@3"4!%X!8!#T5d
X"C3&b!A%%)f4TF!+P,3&i!9S"HJFMD@jfEfYP"#0bG@)!!!!d!!)!!!!!!'F""!"
Xl!93%!Np,!!!!!!!,!&%!@!&JL!4H-&ia!!!!!!!+!"J!+J!iS!)!!3!!!%3!!`!
X!!!!!A3%1!(%"5J3#6Qm!!!!!!&d!A3"a!*N%!ePPF`!!!!!!!!S!6`"3!91)!Pi
X`!!!!!!!+!"B!+J!fS!)!!!!!!!i!4!"%!,)"e3#!4%3`#J!!!!i!5J"U!0-"ea1
X)!!3`#J!!!%!!%!&c!@-"E`&K"`5PBh4X,@3#T5d()h9ZG(*KF!BMCQpbBf8&)fa
X[Eh3#T5d"433MC'P`"#0cDA3#T5d"2!%q!!!"!!!!9[d!!&Ap!!!(U`"L!LJ2%!!
X!!"`'@J!89dP14!!(!+T869"-!!%"#NjeEA!!!3%L38a59!!$!6T%594-!!S"DP0
X88L-!%3(ZD@0c0!!%!XCTBh-M!!3$!NP$6L-!"!-qD@0X0!!%!hT%6%p(!!B$YNC
X26P3!!`3+4Np14!!""$T$99*6!!J%8P088L!!!!5qEQJc-3!!"-T'8N9'!!3%eN*
X14%`!!!85689193!6"4j06P8M!!%'$RCPFR-!!3BQ!)!!,3!!!(J!!!!!!)%!!!!
X!!!!!!!!!!))!#!!!!#!!!!!!!)-!$`!!!0i!!!!!!)3!&`!!!%!!!!!!!)8!(!!
X!!&S!!!!!!)B!)3!!!3)!!!!!!)F!Z3!!25i!!!!!!)!!-J!!!*i!!!!!!)%"4J!
X!8X3!!!!!!)!!0`!!*LJ!!!!!!)%!33!!*N)!!!!!!)(rrb!!#1!!!!!!!)$rr`!
X!9C8!!!!!%iMrr`!!9DF!!!!!%iRrr`!!4DF!!!!!!)(rrb!!#2!!!!!!!)$rr`!
X!$)`!!!!!!),rr`!!$[i!!!!!!)Mrr`!!$RB!!!!!!)Arr`!!$5)!!!!!!)Err`!
X!$AJ!!!!!!)Irr`!!$H!!!!!!!)Rrr`!!$i!!!!!!%iMrr`!!948!!!!!%iRrr`!
X!98d!!!!!&h$rr`!!8h%!!!!!!)!!Ub!!!5B!BJ%-!)-!e!!!8&X!BJ%8!)3!f!!
X!9%N!BJ%)!)8!h3!!9'J!BJ%%!)B!iJ!!81m!BJ%!!)F!k!!!9*)!BIqJ!)J!l!!
X!91-!BJ$i!)N!mJ!!9EN!BJ$d!-N!p`!!84X!BJ$`!-S""!!!8B3!BJ$X!-X"%!!
X!8DS!BJ$S!-`"'3!!8G!!BJ$N!-d"(`!!8I!!BJ$J!-i"*3!!8K!!BJ$F!-m"+`!
X!8M!!BJ$B!0!"-3!!8P!!BJ$8!-J"0`!!8QS!BJ$3!0%"2J!!8V!!BJ$-!qMrr`!
X!!8!!!!!!!qRrr`!!!F3!!!!!!qVrr`!!$r!!!!!!!q[rrb!!2C!!!!!!!!2Xrrm
XJ!$i8!!!!!!2Srrm!!!*)!!!!!!2Trrm!!!+-!!!!!!2Urrm!!!T%!!!!!!2Vrrm
XJ!$kB!!!!!!2XrrmJ!$lF!!!!!!2Srrm!!!,3!!!!!!2Trrm!!!28!!!!!!2Urrm
X!!!P!!!!!!!2VrrmJ!$mJ!!!!!!2XrrmJ!%!N!!!!!!2Srrm!!!6B!!!!!!2Trrm
X!!!EF!!!!!!2Urrm!!!U)!!!!!!2VrrmJ!%%S!!!!!!2XrrmJ!%-X!!!!!!#)!%N
X!!!jD!!!!!!#(!&B!!!c1!!!!!!#'!&)!!!cU!!!!!!#&!%m!!!d'!!!!!!#*!&X
X!!!pN!!!!!!##!'N!!!bb!!!!!"G`!8X!!%@j!!!!!%Z*rrmJ!""d!!!!!%Z-rrm
X!!"S!!!!!!%`*!)3J!#DL!!!!!%`-!*%J!#pS!!!!!!#A!(!%!#AL!!!!!!#B!(N
X%!#CF!!!!!!)!rrmJ!$a#!!!!!!)$rrmJ!$b+!!!!!!)%rrmJ!$c5!!!!!!)&rrm
XJ!$U5!!!!!!)(rrmJ!$VD!!!!!!)"rrmJ!$XL!!!!!!)'rrmJ!$YU!!!!!!))rrm
XJ!$Zb!!!!!!)#rrmJ!$[k!!!!!!#!!*`!!$dD!!!!!!!!rrmJ!$e5!!!!!!#!rrm
XJ!%8`!!!!!!#"rrmJ!%8l!!!!!!##rrmJ!%9'!!!!!!#$rrmJ!%94!!!!!!#%rrm
XJ!%9F!!!!!!#!rrmJ!%9R!!!!!!#"rrm!!%A5!!!!!!##rrm!!%D*!!!!!!#$rrm
X!!%E9!!!!!!#%rrm!!%H&!!!!!!#!rrm!!%Im!!!!!!#&rrm!!%JU!!!!!!#'rrm
X!!%Md!!!!!!#(rrm!!%Q+!!!!!!#)rrm!!%SK!!!!!!#*rrm!!%VH!!!!!!$+rrm
X!!%ZC!!!!!!$,rrm!!%`S!!!!!!$-rrm!!%bN!!!!!!$0rrm!!%d,!!!!!!$1rrm
X!!%eb!!!!!!$2rrm!!%hC!!!!!!$*rrm!!%j!!!!!!!$3rrm!!%kZ!!!!!!$)rrm
X!!%m$!!!!!!$4rrm!!%qB!!!!!!#!!-38!%rl!!!!!!#"!-`8!&!V!!!!!!!"rrm
XJ!&0#!!!!!!!#rrmJ!&-6!!!!!!G0CA0cB@GP"P0dBA4eF`G%G@jRC@pZ"%ePER8
X%9'9iG!Y%D@&REQpcG'PMF`4198a-"%jeEA!*9@jcD'PQG'9N"e0SD@CdC@3&H@j
X1BA%#H@i$H@ja"(PZBA%08feKE'`J4f9dE'PZC3C3FQpYF(3)5'&MDdC[ER3+8&0
X)B@0V4QpZG!a38dKKBfY'Efjd)$N+8&0)B@0V4QpZG!j3FQ9Q)%CTE'8J6Q&YC3e
X0DA0M,L"6G(*TEQGc#P48@5"AD@jNEhF(E@9ZG@*KFJGcG@*YC@je!dYLC!4)C@a
X`"%PZCQm&4A&eDA!$3@0d"8eKCfPM"%*TG(--BfpZG(*[E#"VCAPc#h"eEQ0dG@&
XdD@pZ#'*bB@0VCA4c"@%J,5"Y"@iJ,5"k"8%J,5"0"8iJ,5"D"6!J,5!j"RGTHQ&
XbC!GMGA*bC@jd"%e195-&8h4KFR4#q!:
END_OF_FILE
if test 32969 -ne `wc -c <'sys/mac/NHrsrc.hqx'`; then
echo shar: \"'sys/mac/NHrsrc.hqx'\" unpacked with wrong size!
fi
# end of 'sys/mac/NHrsrc.hqx'
if test -f 'sys/unix/snd86unx.shr' -a "${1}" != "-c" ; then
echo shar: Renaming existing file \"'sys/unix/snd86unx.shr'\" to \"'sys/unix/snd86unx.shr.orig'\"
mv -f 'sys/unix/snd86unx.shr' 'sys/unix/snd86unx.shr.orig'
fi
echo shar: Extracting \"'sys/unix/snd86unx.shr'\" \(25319 characters\)
sed "s/^X//" >'sys/unix/snd86unx.shr' <<'END_OF_FILE'
X#! /bin/sh
X# This is a shell archive. Remove anything before this line, then unpack
X# it by saving it into a file and typing "sh file". To overwrite existing
X# files, type "sh file -c". You can also feed this as standard input via
X# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
X# will see the following message at the end:
X# "End of shell archive."
X# Contents: Makefile READ.ME install.bsd spkr.7 spkr.c
X# Wrapped by billr@saab on Thu Jun 10 16:41:24 1993
XPATH=/bin:/usr/bin:/usr/ucb ; export PATH
Xif test -f 'Makefile' -a "${1}" != "-c" ; then
X echo shar: Will not clobber existing file \"'Makefile'\"
Xelse
Xecho shar: Extracting \"'Makefile'\" \(378 characters\)
Xsed "s/^X//" >'Makefile' <<'END_OF_FILE'
XX#
XX# Speaker driver package makefile
XX#
XXCFLAGS = -I. -O # -DDEBUG
XXLDFLAGS = -s
XX
XXall: Driver.o
XX
XXinstall:
XX ./Install
XX
XXDriver.o: spkr.c
XX $(CC) $(CFLAGS) -c spkr.c
XX mv spkr.o Driver.o
XX
XXclean:
XX rm -f Driver.o *~ speaker.shar
XX
XXDSP = Files Install Master Name Node Remove Size System
XXshar:
XX shar READ.ME install.bsd spkr.7 Makefile spkr.[ch] \
XX interp.c $(DSP) playtest >speaker.shar
XEND_OF_FILE
Xif test 378 -ne `wc -c <'Makefile'`; then
X echo shar: \"'Makefile'\" unpacked with wrong size!
Xfi
X# end of 'Makefile'
Xfi
Xif test -f 'READ.ME' -a "${1}" != "-c" ; then
X echo shar: Will not clobber existing file \"'READ.ME'\"
Xelse
Xecho shar: Extracting \"'READ.ME'\" \(1372 characters\)
Xsed "s/^X//" >'READ.ME' <<'END_OF_FILE'
XX Console Speaker Driver Package (v1.1)
XX
XX by Eric S. Raymond (esr@snark.thyrsus.com)
XX
XXThis package gives 80386 machines running SVr3.2 or later the ability to play
XXtunes on the console speaker. It is structured as a standard installable driver
XXkit containing the following files:
XX
XXDocumentation and examples:
XXREAD.ME -- this file
XXspeaker.7 -- man page for the driver
XXplaytest -- test script exercising familiar tunes
XX
XXInstallable driver kit parts:
XXFiles -- list of driver package file locations
XXInstall -- installation script for driver kit
XXMaster -- mdevice entry for speaker driver
XXName -- name entry foe speaker driver
XXNode -- /dev node specification file
XXRemove -- Driver removal script
XXSize -- installation size data
XXSystem -- sdevice entry for speaker driver
XX
XXDriver source code:
XXMakefile -- Makefile for driver code
XXspkr.c -- the driver source
XXspeaker.h -- ioctl interface file
XX
XXTo make the installable code, simply type `make' and wait. The type ./Install
XXand follow its instructions. You will have to install the man pages by hand.
XXBe aware that the speaker.7 man page uses tbl(1) constructs.
XX
XXInteresting tunes mailed to the author will be periodically posted in batches
XXand added to the test script for future versions.
XX
XX Revision notes
XX
XX1.1 -- fixed minor bug in M[LSN] interpretation, added octave-tracking.
XX Tweaked the playtest examples.
XEND_OF_FILE
Xif test 1372 -ne `wc -c <'READ.ME'`; then
X echo shar: \"'READ.ME'\" unpacked with wrong size!
Xfi
X# end of 'READ.ME'
Xfi
Xif test -f 'install.bsd' -a "${1}" != "-c" ; then
X echo shar: Will not clobber existing file \"'install.bsd'\"
Xelse
Xecho shar: Extracting \"'install.bsd'\" \(1434 characters\)
Xsed "s/^X//" >'install.bsd' <<'END_OF_FILE'
XXCopy spkr.c and interp.c to /sys/i386/isa
XXCopy spkr.h to /sys/sys
XX
XX-----------------------------------------------------------------------------
XX
XXFile /sys/i386/conf/YOUR_MACHINE_NAME
XXadd following line:
XX
XXpseudo-device speaker
XX
XX-----------------------------------------------------------------------------
XX
XXFile /sys/i386/conf/files.i386
XXadd following line:
XX
XXi386/isa/spkr.c optional speaker
XX
XX-----------------------------------------------------------------------------
XX
XXFile /sys/i386/i386/conf.c
XX[major number 20 (hex) is registered for spkr driver, don't change it]
XXadd following code:
XX
XX#include "speaker.h"
XX#if NSPEAKER > 0
XXint spkropen(),spkrclose(),spkrwrite(),spkrioctl();
XX#else
XX#define spkropen enxio
XX#define spkrclose enxio
XX#define spkrwrite enxio
XX#define spkrioctl enxio
XX#endif
XX ...
XX
XXstruct cdevsw cdevsw[] =
XX{
XX ...
XX
XX { spkropen, spkrclose, enxio, spkrwrite, /*20*/
XX spkrioctl, enxio, enxio, NULL,
XX enxio, enxio, enxio },
XX ...
XX
XX-----------------------------------------------------------------------------
XX
XXMake corresponding device:
XX
XX mknod /dev/speaker c 32 0
XX
XX[major number 32 (20 hex) is registered for spkr driver, don't change it]
XX
XX-----------------------------------------------------------------------------
XX
XXGo to /sys/i386/conf and type
XX config YOUR_MACHINE_NAME
XXthen go to /sys/compile/YOUR_MACHINE_NAME and type
XX make depend
XX make
XX
XEND_OF_FILE
Xif test 1434 -ne `wc -c <'install.bsd'`; then
X echo shar: \"'install.bsd'\" unpacked with wrong size!
Xfi
X# end of 'install.bsd'
Xfi
Xif test -f 'spkr.7' -a "${1}" != "-c" ; then
X echo shar: Will not clobber existing file \"'spkr.7'\"
Xelse
Xecho shar: Extracting \"'spkr.7'\" \(5193 characters\)
Xsed "s/^X//" >'spkr.7' <<'END_OF_FILE'
XX.TH SPKR 7
XX.SH NAME
XXspkr \- console speaker device driver
XX.SH DESCRIPTION
XXThe speaker device driver allows applications to control the PC console
XXspeaker on an IBM-PC-compatible machine running UNIX.
XX.PP
XXOnly one process may have this device open at any given time; open() and
XXclose() are used to lock and relinquish it. An attempt to open() when
XXanother process has the device locked will return -1 with an EBUSY error
XXindication. Writes to the device are interpreted as 'play strings' in a
XXsimple ASCII melody notation. An ioctl() for tone generation at arbitrary
XXfrequencies is also supported.
XX.PP
XXSound-generation does \fInot\fR monopolize the processor; in fact, the driver
XXspends most of its time sleeping while the PC hardware is emitting
XXtones. Other processes may emit beeps while the driver is running.
XX.PP
XXApplications may call ioctl() on a speaker file descriptor to control the
XXspeaker driver directly; definitions for the ioctl() interface are in
XXsys/spkr.h. The tone_t structure used in these calls has two fields,
XXspecifying a frequency (in hz) and a duration (in 1/100ths of a second).
XXA frequency of zero is interpreted as a rest.
XX.PP
XXAt present there are two such ioctls. SPKRTONE accepts a pointer to a
XXsingle tone structure as third argument and plays it. SPKRTUNE accepts a
XXpointer to the first of an array of tone structures and plays them in
XXcontinuous sequence; this array must be terminated by a final member with
XXa zero duration.
XX.PP
XXThe play-string language is modelled on the PLAY statement conventions of
XXIBM BASIC 2.0. The MB, MF and X primitives of PLAY are not useful in a UNIX
XXenvironment and are omitted. The `octave-tracking' feature is also new.
XX.PP
XXThere are 84 accessible notes numbered 1-83 in 7 octaves, each running from
XXC to B, numbered 0-6; the scale is equal-tempered A440 and octave 3 starts
XXwith middle C. By default, the play function emits half-second notes with the
XXlast 1/16th second being `rest time'.
XX.PP
XXPlay strings are interpreted left to right as a series of play command groups;
XXletter case is ignored. Play command groups are as follows:
XX.PP
XXCDEFGAB -- letters A through G cause the corresponding note to be played in the
XXcurrent octave. A note letter may optionally be followed by an \fIaccidental
XXsign\fR, one of # + or -; the first two of these cause it to be sharped one
XXhalf-tone, the last causes it to be flatted one half-tone. It may also be
XXfollowed by a time value number and by sustain dots (see below). Time values
XXare interpreted as for the L command below;.
XX.PP
XXO <n> -- if <n> is numeric, this sets the current octave. <n> may also be one
XXof 'L' or 'N' to enable or disable octave-tracking (it is disabled by default).
XXWhen octave-tracking is on, interpretation of a pair of letter notes will
XXchange octaves if necessary in order to make the smallest possible jump between
XXnotes. Thus "olbc" will be played as "olb>c", and "olcb" as "olc<b". Octave
XXlocking is disabled for one letter note following by >, < and O[0123456].
XX.PP
XX> -- bump the current octave up one.
XX.PP
XX< -- drop the current octave down one.
XX.PP
XXN <n> -- play note n, n being 1 to 84 or 0 for a rest of current time value.
XXMay be followedv by sustain dots.
XX.PP
XXL <n> -- sets the current time value for notes. The default is L4, quarter
XXnotes. The lowest possible value is 1; values up to 64 are accepted. L1 sets
XXwhole notes, L2 sets half notes, L4 sets quarter notes, etc..
XX.PP
XXP <n> -- pause (rest), with <n> interpreted as for L. May be followed by
XXsustain dots. May also be written '~'.
XX.PP
XXT <n> -- Sets the number of quarter notes per minute; default is 120. Musical
XXnames for common tempi are:
XX
XX.TS
XXa a a.
XX Tempo Beats Per Minute
XXvery slow Larghissimo
XX Largo 40-60
XX Larghetto 60-66
XX Grave
XX Lento
XX Adagio 66-76
XXslow Adagietto
XX Andante 76-108
XXmedium Andantino
XX Moderato 108-120
XXfast Allegretto
XX Allegro 120-168
XX Vivace
XX Veloce
XX Presto 168-208
XXvery fast Prestissimo
XX.TE
XX.PP
XXM[LNS] -- set articulation. MN (N for normal) is the default; the last 1/8th of
XXthe note's value is rest time. You can set ML for legato (no rest space) or
XXMS (staccato) 1/4 rest space.
XX.PP
XXNotes (that is, CDEFGAB or N command character groups) may be followed by
XXsustain dots. Each dot causes the note's value to be lengthened by one-half
XXfor each one. Thus, a note dotted once is held for 3/2 of its undotted value;
XXdotted twice, it is held 9/4, and three times would give 27/8.
XX.PP
XXWhitespace in play strings is simply skipped and may be used to separate
XXmelody sections.
XX.SH BUGS
XXDue to roundoff in the pitch tables and slop in the tone-generation and timer
XXhardware (neither of which was designed for precision), neither pitch accuracy
XXnor timings will be mathematically exact. There is no volume control.
XX.PP
XXIn play strings which are very long (longer than your system's physical I/O
XXblocks) note suffixes or numbers may occasionally be parsed incorrectly due
XXto crossing a block boundary.
XX.SH FILES
XX/dev/speaker -- speaker device file
XX.SH AUTHOR
XXEric S. Raymond (esr@snark.thyrsus.com) Feb 1990
XEND_OF_FILE
Xif test 5193 -ne `wc -c <'spkr.7'`; then
X echo shar: \"'spkr.7'\" unpacked with wrong size!
Xfi
X# end of 'spkr.7'
Xfi
Xif test -f 'spkr.c' -a "${1}" != "-c" ; then
X echo shar: Will not clobber existing file \"'spkr.c'\"
Xelse
Xecho shar: Extracting \"'spkr.c'\" \(13871 characters\)
Xsed "s/^X//" >'spkr.c' <<'END_OF_FILE'
XX/*
XX * spkr.c -- device driver for console speaker on 80386
XX *
XX * v1.1 by Eric S. Raymond (esr@snark.thyrsus.com) Feb 1990
XX * modified for 386bsd by Andrew A. Chernov <ache@astral.msk.su>
XX */
XX
XX#ifdef __386BSD__
XX#include "speaker.h"
XX#endif
XX#if !defined(__386BSD__) || (NSPEAKER > 0)
XX
XX#ifdef __386BSD__
XX#include "types.h"
XX#include "param.h"
XX#include "errno.h"
XX#include "buf.h"
XX#include "uio.h"
XX
XX#define CADDR caddr_t
XX#define err_ret(x) return(x)
XX#else /* SYSV */
XX#include <sys/types.h>
XX#include <sys/param.h>
XX#include <sys/dir.h>
XX#include <sys/signal.h>
XX#include <sys/errno.h>
XX#include <sys/ioctl.h>
XX#include <sys/user.h>
XX#include <sys/sysmacros.h>
XX#include <limits.h>
XX
XX#include "spkr.h"
XX
XX/**************** MACHINE DEPENDENT PART STARTS HERE *************************
XX *
XX * This section defines a function tone() which causes a tone of given
XX * frequency and duration from the 80x86's console speaker.
XX * Another function endtone() is defined to force sound off, and there is
XX * also a rest() entry point to do pauses.
XX *
XX * Audible sound is generated using the Programmable Interval Timer (PIT) and
XX * Programmable Peripheral Interface (PPI) attached to the 80x86's speaker. The
XX * PPI controls whether sound is passed through at all; the PIT's channel 2 is
XX * used to generate clicks (a square wave) of whatever frequency is desired.
XX *
XX * This code requires SVr3.2-compatible inb(), outb(), timeout(), sleep(),
XX * and wakeup().
XX */
XX
XX/*
XX * PIT and PPI port addresses and control values
XX *
XX * Most of the magic is hidden in the TIMER_PREP value, which selects PIT
XX * channel 2, frequency LSB first, square-wave mode and binary encoding.
XX * The encoding is as follows:
XX *
XX * +----------+----------+---------------+-----+
XX * | 1 0 | 1 1 | 0 1 1 | 0 |
XX * | SC1 SC0 | RW1 RW0 | M2 M1 M0 | BCD |
XX * +----------+----------+---------------+-----+
XX * Counter Write Mode 3 Binary
XX * Channel 2 LSB first, (Square Wave) Encoding
XX * MSB second
XX */
XX#define PPI 0x61 /* port of Programmable Peripheral Interface */
XX#define PPI_SPKR 0x03 /* turn these PPI bits on to pass sound */
XX#define PIT_CTRL 0x43 /* PIT control address */
XX#define PIT_COUNT 0x42 /* PIT count address */
XX#define PIT_MODE 0xB6 /* set timer mode for sound generation */
XX
XX/*
XX * Magic numbers for timer control.
XX */
XX#define TIMER_CLK 1193180L /* corresponds to 18.2 MHz tick rate */
XX
XXstatic int endtone()
XX/* turn off the speaker, ending current tone */
XX{
XX wakeup(endtone);
XX outb(PPI, inb(PPI) & ~PPI_SPKR);
XX}
XX
XXstatic void tone(hz, ticks)
XX/* emit tone of frequency hz for given number of ticks */
XXunsigned int hz, ticks;
XX{
XX unsigned int divisor = TIMER_CLK / hz;
XX int sps;
XX
XX#ifdef DEBUG
XX printf("tone: hz=%d ticks=%d\n", hz, ticks);
XX#endif /* DEBUG */
XX
XX /* set timer to generate clicks at given frequency in Hertz */
XX sps = spl5();
XX outb(PIT_CTRL, PIT_MODE); /* prepare timer */
XX outb(PIT_COUNT, (divisor & 0xff)); /* send lo byte */
XX outb(PIT_COUNT, (divisor >> 8)); /* send hi byte */
XX splx(sps);
XX
XX /* turn the speaker on */
XX outb(PPI, inb(PPI) | PPI_SPKR);
XX
XX /*
XX * Set timeout to endtone function, then give up the timeslice.
XX * This is so other processes can execute while the tone is being
XX * emitted.
XX */
XX timeout(endtone, (char *)NULL, ticks);
XX sleep(endtone, PZERO - 1);
XX}
XX
XXstatic int endrest()
XX/* end a rest */
XX{
XX wakeup(endrest);
XX}
XX
XXstatic void rest(ticks)
XX/* rest for given number of ticks */
XXint ticks;
XX{
XX /*
XX * Set timeout to endrest function, then give up the timeslice.
XX * This is so other processes can execute while the rest is being
XX * waited out.
XX */
XX#ifdef DEBUG
XX printf("rest: %d\n", ticks);
XX#endif /* DEBUG */
XX timeout(endrest, (char *)NULL, ticks);
XX sleep(endrest, PZERO - 1);
XX}
XX
XX/**************** PLAY STRING INTERPRETER BEGINS HERE **********************
XX *
XX * Play string interpretation is modelled on IBM BASIC 2.0's PLAY statement;
XX * M[LNS] are missing and the ~ synonym and octave-tracking facility is added.
XX * Requires tone(), rest(), and endtone(). String play is not interruptible
XX * except possibly at physical block boundaries.
XX */
XX
XXtypedef int bool;
XX#define TRUE 1
XX#define FALSE 0
XX
XX#define toupper(c) ((c) - ' ' * (((c) >= 'a') && ((c) <= 'z')))
XX#define isdigit(c) (((c) >= '0') && ((c) <= '9'))
XX#define dtoi(c) ((c) - '0')
XX
XXstatic int octave; /* currently selected octave */
XXstatic int whole; /* whole-note time at current tempo, in ticks */
XXstatic int value; /* whole divisor for note time, quarter note = 1 */
XXstatic int fill; /* controls spacing of notes */
XXstatic bool octtrack; /* octave-tracking on? */
XXstatic bool octprefix; /* override current octave-tracking state? */
XX
XX/*
XX * Magic number avoidance...
XX */
XX#define SECS_PER_MIN 60 /* seconds per minute */
XX#define WHOLE_NOTE 4 /* quarter notes per whole note */
XX#define MIN_VALUE 64 /* the most we can divide a note by */
XX#define DFLT_VALUE 4 /* default value (quarter-note) */
XX#define FILLTIME 8 /* for articulation, break note in parts */
XX#define STACCATO 6 /* 6/8 = 3/4 of note is filled */
XX#define NORMAL 7 /* 7/8ths of note interval is filled */
XX#define LEGATO 8 /* all of note interval is filled */
XX#define DFLT_OCTAVE 4 /* default octave */
XX#define MIN_TEMPO 32 /* minimum tempo */
XX#define DFLT_TEMPO 120 /* default tempo */
XX#define MAX_TEMPO 255 /* max tempo */
XX#define NUM_MULT 3 /* numerator of dot multiplier */
XX#define DENOM_MULT 2 /* denominator of dot multiplier */
XX
XX/* letter to half-tone: A B C D E F G */
XXstatic int notetab[8] = {9, 11, 0, 2, 4, 5, 7};
XX
XX/*
XX * This is the American Standard A440 Equal-Tempered scale with frequencies
XX * rounded to nearest integer. Thank Goddess for the good ol' CRC Handbook...
XX * our octave 0 is standard octave 2.
XX */
XX#define OCTAVE_NOTES 12 /* semitones per octave */
XXstatic int pitchtab[] =
XX{
XX/* C C# D D# E F F# G G# A A# B*/
XX/* 0 */ 65, 69, 73, 78, 82, 87, 93, 98, 103, 110, 117, 123,
XX/* 1 */ 131, 139, 147, 156, 165, 175, 185, 196, 208, 220, 233, 247,
XX/* 2 */ 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494,
XX/* 3 */ 523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988,
XX/* 4 */ 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1975,
XX/* 5 */ 2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951,
XX/* 6 */ 4186, 4435, 4698, 4978, 5274, 5588, 5920, 6272, 6644, 7040, 7459, 7902,
XX};
XX
XXstatic void playinit()
XX{
XX octave = DFLT_OCTAVE;
XX whole = (HZ * SECS_PER_MIN * WHOLE_NOTE) / DFLT_TEMPO;
XX fill = NORMAL;
XX value = DFLT_VALUE;
XX octtrack = FALSE;
XX octprefix = TRUE; /* act as though there was an initial O(n) */
XX}
XX
XXstatic void playtone(pitch, value, sustain)
XX/* play tone of proper duration for current rhythm signature */
XXint pitch, value, sustain;
XX{
XX register int sound, silence, snum = 1, sdenom = 1;
XX
XX /* this weirdness avoids floating-point arithmetic */
XX for (; sustain; sustain--)
XX {
XX snum *= NUM_MULT;
XX sdenom *= DENOM_MULT;
XX }
XX
XX if (pitch == -1)
XX rest(whole * snum / value * sdenom);
XX else
XX {
XX sound = (whole * snum) / (value * sdenom)
XX - (whole * (FILLTIME - fill)) / (value * FILLTIME);
XX silence = whole * (FILLTIME-fill) * snum / (FILLTIME * value * sdenom);
XX
XX#ifdef DEBUG
XX printf("playtone: pitch %d for %d ticks, rest for %d ticks\n",
XX pitch, sound, silence);
XX#endif /* DEBUG */
XX
XX tone(pitchtab[pitch], sound);
XX if (fill != LEGATO)
XX rest(silence);
XX }
XX}
XX
XXstatic int abs(n)
XXint n;
XX{
XX if (n < 0)
XX return(-n);
XX else
XX return(n);
XX}
XX
XXstatic void playstring(cp, slen)
XX/* interpret and play an item from a notation string */
XXchar *cp;
XXsize_t slen;
XX{
XX int pitch, lastpitch = OCTAVE_NOTES * DFLT_OCTAVE;
XX
XX#define GETNUM(cp, v) for(v=0; isdigit(cp[1]) && slen > 0; ) \
XX {v = v * 10 + (*++cp - '0'); slen--;}
XX for (; slen--; cp++)
XX {
XX int sustain, timeval, tempo;
XX register char c = toupper(*cp);
XX
XX#ifdef DEBUG
XX printf("playstring: %c (%x)\n", c, c);
XX#endif /* DEBUG */
XX
XX switch (c)
XX {
XX case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
XX
XX /* compute pitch */
XX pitch = notetab[c - 'A'] + octave * OCTAVE_NOTES;
XX
XX /* this may be followed by an accidental sign */
XX if (cp[1] == '#' || cp[1] == '+')
XX {
XX ++pitch;
XX ++cp;
XX slen--;
XX }
XX else if (cp[1] == '-')
XX {
XX --pitch;
XX ++cp;
XX slen--;
XX }
XX
XX /*
XX * If octave-tracking mode is on, and there has been no octave-
XX * setting prefix, find the version of the current letter note
XX * closest to the last regardless of octave.
XX */
XX if (octtrack && !octprefix)
XX {
XX if (abs(pitch-lastpitch) > abs(pitch+OCTAVE_NOTES-lastpitch))
XX {
XX ++octave;
XX pitch += OCTAVE_NOTES;
XX }
XX
XX if (abs(pitch-lastpitch) > abs((pitch-OCTAVE_NOTES)-lastpitch))
XX {
XX --octave;
XX pitch -= OCTAVE_NOTES;
XX }
XX }
XX octprefix = FALSE;
XX lastpitch = pitch;
XX
XX /* ...which may in turn be followed by an override time value */
XX GETNUM(cp, timeval);
XX if (timeval <= 0 || timeval > MIN_VALUE)
XX timeval = value;
XX
XX /* ...and/or sustain dots */
XX for (sustain = 0; cp[1] == '.'; cp++)
XX {
XX slen--;
XX sustain++;
XX }
XX
XX /* time to emit the actual tone */
XX playtone(pitch, timeval, sustain);
XX break;
XX
XX case 'O':
XX if (cp[1] == 'N' || cp[1] == 'n')
XX {
XX octprefix = octtrack = FALSE;
XX ++cp;
XX slen--;
XX }
XX else if (cp[1] == 'L' || cp[1] == 'l')
XX {
XX octtrack = TRUE;
XX ++cp;
XX slen--;
XX }
XX else
XX {
XX GETNUM(cp, octave);
XX if (octave >= sizeof(pitchtab) / OCTAVE_NOTES)
XX octave = DFLT_OCTAVE;
XX octprefix = TRUE;
XX }
XX break;
XX
XX case '>':
XX if (octave < sizeof(pitchtab) / OCTAVE_NOTES - 1)
XX octave++;
XX octprefix = TRUE;
XX break;
XX
XX case '<':
XX if (octave > 0)
XX octave--;
XX octprefix = TRUE;
XX break;
XX
XX case 'N':
XX GETNUM(cp, pitch);
XX for (sustain = 0; cp[1] == '.'; cp++)
XX {
XX slen--;
XX sustain++;
XX }
XX playtone(pitch - 1, value, sustain);
XX break;
XX
XX case 'L':
XX GETNUM(cp, value);
XX if (value <= 0 || value > MIN_VALUE)
XX value = DFLT_VALUE;
XX break;
XX
XX case 'P':
XX case '~':
XX /* this may be followed by an override time value */
XX GETNUM(cp, timeval);
XX if (timeval <= 0 || timeval > MIN_VALUE)
XX timeval = value;
XX for (sustain = 0; cp[1] == '.'; cp++)
XX {
XX slen--;
XX sustain++;
XX }
XX playtone(-1, timeval, sustain);
XX break;
XX
XX case 'T':
XX GETNUM(cp, tempo);
XX if (tempo < MIN_TEMPO || tempo > MAX_TEMPO)
XX tempo = DFLT_TEMPO;
XX whole = (HZ * SECS_PER_MIN * WHOLE_NOTE) / tempo;
XX break;
XX
XX case 'M':
XX if (cp[1] == 'N' || cp[1] == 'n')
XX {
XX fill = NORMAL;
XX ++cp;
XX slen--;
XX }
XX else if (cp[1] == 'L' || cp[1] == 'l')
XX {
XX fill = LEGATO;
XX ++cp;
XX slen--;
XX }
XX else if (cp[1] == 'S' || cp[1] == 's')
XX {
XX fill = STACCATO;
XX ++cp;
XX slen--;
XX }
XX break;
XX }
XX }
XX}
XXEND-of-interp.c
XXecho x - Files
XXsed 's/^X//' >Files << 'END-of-Files'
XX/usr/include/sys/spkr.h
XXEND-of-Files
XXecho x - Install
XXsed 's/^X//' >Install << 'END-of-Install'
XX#
XX# Speaker driver installation script
XX#
XXTMP=/tmp/speaker.err
XXERR1=" Errors have been written to the file $TMP."
XXERR2=" The Speaker Driver software was not installed."
XX
XXecho "Installing Speaker Driver Software Package"
XX
XX/etc/conf/bin/idcheck -p speaker 2>$TMP
XXif [ $? != 0 ]
XXthen
XX echo "The speaker package is already at least partly installed.
XX Removing the old version now..."
XX /etc/conf/bin/idinstall -d speaker
XXfi
XX
XX/etc/conf/bin/idinstall -a -k speaker 2>>$TMP
XXif [ $? != 0 ]
XXthen
XX message "There was an error during package installation. $ERR1 $ERR2"
XX exit 1
XXfi
XX
XX/etc/conf/bin/idbuild 2>>$TMP
XXif [ $? != 0 ]
XXthen
XX message "There was an error during kernel reconfiguration. $ERR1 $ERR2"
XX exit 1
XXfi
XX
XXrm -f $TMP
XX
XXcp spkr.h /usr/include/sys/spkr.h
XX
XXecho "Performing shutdown..."
XXcd /; exec /etc/shutdown -g0 -y
XXEND-of-Install
XXecho x - Master
XXsed 's/^X//' >Master << 'END-of-Master'
XXspeaker ocwi iocH spkr 0 0 1 1 -1
XXEND-of-Master
XXecho x - Name
XXsed 's/^X//' >Name << 'END-of-Name'
XX386 UNIX Speaker Device Driver Package
XXEND-of-Name
XXecho x - Node
XXsed 's/^X//' >Node << 'END-of-Node'
XXspeaker speaker c 0
XXEND-of-Node
XXecho x - Remove
XXsed 's/^X//' >Remove << 'END-of-Remove'
XX#
XX# Speaker driver remove script
XX#
XXTMP=/tmp/speaker.err
XXRERR="Errors have been written to the file $TMP."
XX
XXecho "Removing Speaker Driver Software Package"
XX
XX/etc/conf/bin/idinstall -d speaker 2>$TMP
XXif [ $? != 0 ]
XXthen
XX message "There was an error during package removal. $RERR"
XX exit 1
XXfi
XX
XX/etc/conf/bin/idbuild 2>>$TMP
XXif [ $? != 0 ]
XXthen
XX message "There was an error during kernel reconfiguration. $RERR"
XX exit 1
XXfi
XX
XXrm -f /dev/speaker $TMP /usr/include/sys/spkr.h
XX
XXexit 0
XXEND-of-Remove
XXecho x - Size
XXsed 's/^X//' >Size << 'END-of-Size'
XXROOT=1400
XXUSR=100
XXEND-of-Size
XXecho x - System
XXsed 's/^X//' >System << 'END-of-System'
XXspeaker Y 1 0 0 0 0 0 0 0
XXEND-of-System
XXecho x - playtest
XXsed 's/^X//' >playtest << 'END-of-playtest'
XX:
XX# Test script for the speaker driver
XX#
XX# v1.0 by Eric S. Raymond (Feb 1990)
XX# modified for 386bsd by Andrew A. Chernov <ache@astral.msk.su>
XX#
XXreveille="t255l8c.f.afc~c.f.afc~c.f.afc.f.a..f.~c.f.afc~c.f.afc~c.f.afc~c.f.."
XXcontact="<cd<a#~<a#>f"
XXdance="t240<cfcfgagaa#b#>dc<a#a.~fg.gaa#.agagegc.~cfcfgagaa#b#>dc<a#a.~fg.gga.agfgfgf."
XXloony="t255cf8f8edc<a.>~cf8f8edd#e.~ce8cdce8cd.<a>c8c8c#def8af8."
XX
XXcase $1 in
XXreveille) echo $reveille >/dev/speaker;;
XXcontact) echo $contact >/dev/speaker;;
XXdance) echo $dance >/dev/speaker;;
XXloony) echo $loony >/dev/speaker;;
XX*)
XX echo "No such tune. Available tunes are:"
XX echo
XX echo "reveille -- Reveille"
XX echo "contact -- Contact theme from Close Encounters"
XX echo "dance -- Lord of the Dance (aka Simple Gifts)"
XX echo "loony -- Loony Toons theme"
XX ;;
XXesac
XXEND-of-playtest
XXexit
XEND_OF_FILE
Xif test 13871 -ne `wc -c <'spkr.c'`; then
X echo shar: \"'spkr.c'\" unpacked with wrong size!
Xfi
X# end of 'spkr.c'
Xfi
Xecho shar: End of shell archive.
Xexit 0
END_OF_FILE
if test 25319 -ne `wc -c <'sys/unix/snd86unx.shr'`; then
echo shar: \"'sys/unix/snd86unx.shr'\" unpacked with wrong size!
fi
# end of 'sys/unix/snd86unx.shr'
echo shar: End of archive 26 \(of 33\).
cp /dev/null ark26isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 33 archives.
echo "Now execute ./patchit.sh"
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0