home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!zephyr.ens.tek.com!master!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v14i015: xpilot - Multiplayer gravity war game hand-shake program, Part13/24
- Message-ID: <3310@master.CNA.TEK.COM>
- Date: 4 Aug 92 19:29:33 GMT
- Sender: news@master.CNA.TEK.COM
- Lines: 1439
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted-by: Bjoern Stabell <bjoerns@staff.cs.uit.no>
- Posting-number: Volume 14, Issue 15
- Archive-name: xpilot/Part13
- Environment: X11, ANSI C
-
-
-
- #! /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 13 (of 24)."
- # Contents: maps/logo2.uue.1 src/server.c
- # Wrapped by billr@saab on Tue Aug 4 10:38:56 1992
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'maps/logo2.uue.1' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'maps/logo2.uue.1'\"
- else
- echo shar: Extracting \"'maps/logo2.uue.1'\" \(37778 characters\)
- sed "s/^X//" >'maps/logo2.uue.1' <<'END_OF_FILE'
- Xbegin 644 logo2.map
- XM,C0T>#(S-`HP"E1H92!.15<@3&]G;R!-87`L(&$@;6%P('=I=&@@82!R96%L
- XM(&%P<&5A<F%N8V4N("!-861E('=I=&@@>&)M,FUA<"!A;F0@8V]R;F5R<RX*
- XM5&]M($=R>61E;&%N9`IX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX"G@@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("!C("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
- XM"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*
- XM>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@<7AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@<7AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@<7AX>'AX>'AX>"`@("`@("`@('%X>'AX>'AX>'AX>'AX>"`@('AX
- XM=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@<7AX>'A&>'AX>'AX>'AX=R`@("`@("`@>'AX>'AS("!A
- XM>'AX>'AX("`@>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@
- XM("!X>'AX>"`@("!A>'AX>'@@("`@87AX>'AX>'AX>'<@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AS(&%X
- XM>'AX>'AX("`@("`@('AX>'AX=R`@("!A>'AX<R`@("`@87AX>'AX>'AX>"`@
- XM('%X=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'@@("`@("`@
- XM87AX>'AX>"`@(&%X>'AX>'@@("`@("`@>'AX>'AX=R`@("!A>$8@("`@("!Q
- XM>'AX>'AX>'AX("`@>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q
- XM>'AX>'<@("`@("`@>'AX>'AX("`@('AX>'AX>"`@("`@("!X>'AX>'AX=R`@
- XM("!X>"`@("`@('AX>'AX>',@("`@('%X>'AX>'AW("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!Q>'AX>'AX>"`@("`@("!X>'AX>'@@("`@>'AX>'AX("`@("`@
- XM('AX>'AX>'AX=R`@(&%X("`@("`@>'AX>'AX("`@("`@>'AX>'AX>'AX=R`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX("`@("`@('AX>'AX>"`@('%X
- XM>'AX>'@@("`@("`@87AX>'AX>'AX>'<@("`@("`@("!X>'AX>'@@("`@('%X
- XM>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AW("`@("`@
- XM87AX>'AX=R!Q>'AX>'AX<R`@("`@("`@87AX>'AX>'AX>'<@("`@("`@<7AX
- XM>'AX>"`@("`@>'AX>'AX<R!A>'AX>'AW("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>',@("`@
- XM(&%X>'@@("`@("`@>'AX>'AX>'AX>'AX>',@("`@("`@("`@(&%X>'AX>'AX
- XM>'<@("`@("!X>'AX>'AS("`@("!X>'AS("`@("!X>'AX>'AX=R`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X
- XM>'AX>'AS("`@("`@("`@8R`@("`@("!X>'AX>'AX>'AX>'AS("`@("`@("`@
- XM("`@(&%X>'AX>'AX>'AW("`@('AX>'AX>"`@("`@("`@("`@("`@<7AX>'AX
- XM>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@('%X>'AX>'AX1B`@("`@>'AW("`@("`@("`@('AX>'AX>'AX>'AX
- XM>'@@("`@("`@("`@("`@("!A>'AX>'AX>'@@("`@>'AX>'AX("`@("`@("`@
- XM("`@("!X>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX("`@("!X>'@@("`@("`@("`@
- XM>'AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("!A>'AX>'AX>"`@('%X>'AX
- XM>'@@("`@("`@("`@("`@('AX>'AX>'-A>'AX>'AX=R`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!Q>'<@(&%X>'AX>'AX>'AW("`@<7AX
- XM>"`@("`@("`@("!A>'AX>'AS87AX>'AX>'AW("`@('%X>'@@("`@("!A>'AX
- XM>'AX("`@>'AX>'AX<R`@("`@("`@("`@("!Q>'AX>'AX("!A>'AX>'AX("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>"`@("`@87AX
- XM>'AX>'@@("!X>'AX=R`@("`@("`@("!X>'AX>'<@>'AX>'AX>'AW("`@>'AX
- XM>'<@("`@('%X>'AX>'@@("!X>'AX>'@@("`@("`@("`@("`@('AX>'AX>',@
- XM("!A>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X
- XM>'AX("`@("`@87AX>'AX>'<@<7AX>'AX("`@("`@("`@('AX>'AX>"!A>'AX
- XM>'AX>'AW("!X>'AX>'<@*B!Q>'AX>'AX>"`@('AX>'AX>"`@("`@("`@("`@
- XM("!Q>'AX>'AX("`@("!X>'AX<R`@>'AW("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!Q>'AX>',@("`@("`@>'AX>'AX>'AX>'AX>'AW("`@("`@("`@
- XM>'AX>'AX("`@87AX>'AX>'@@('AX>'AX>'AX>'AX>'AX>'AX("`@>'AX>'AX
- XM("`@("`@("`@("`@('AX>'AX>',@("`@('AX>',@("!X>'AW("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@<7AX>'AX("`@("`@("!A>'AX>'AX>'AX>'AX
- XM>'@@("`@("`@("!X>'AX>'AW("`@87AX>'AX>"`@87AX>'AX>'AX>'AX>'AX
- XM>',@('%X>'AX>',@("`@("`@("`@("!Q>'AX>'AX("`@("`@849S("`@(&%X
- XM>'AW("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'@@("`@("`@("!X
- XM>'AX>'AX<R`@(&%X>"`@<7AX=R`@('AX>'AX>'AX>"`@>'AX>'AX("`@("`@
- XM87AX>'AX>'AX>',@<7AX>'AX>'AX=R`@("`@("`@("`@('AX>'AX>',@("`@
- XM("`@("`@("`@('AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AX
- XM>"`@("`@("`@(&%X>'AX>'AW("`@("`@('%X>'AX("!Q>'AX>'AX>'AX("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX=R`@("`@("`@("!Q
- XM>'AX>'AX("`@("`@("`@("`@("!Q>'AX>'AX=R`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("!A>'-A>'AX=R`@("`@("`@('AX>'AX>'AF("`@("`@>'AX>'AW('AX
- XM>'AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX
- XM=R`@("`@("`@('AX>'AX>',@("`@("`@("`@("`@<7AX>'AX>'AX=R`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!C("!X>'AX("`@("`@("`@87AX>'AX>"`@("`@
- XM('%X>'AX>'@@87AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@87AX>$9X("`@("`@("!Q>'AX>'AX("`@("`@("`@("`@("!X>'AX
- XM>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@('(@("`@("`@(&%X>'@@("`@("`@("`@
- XM>'AX>'AX=R`@("!Q>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!A>',@("`@<7AW<7AX>'AX>',@("`@("`@
- XM("`@("`@<7AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>"`@("`@("`@('AX
- XM>"`@("`@("`@("!A>'AX>'AX=R`@<7AX>'AX>',@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX
- XM>'AX("`@("`@("`@("`@('%X>'AX>'AX<R!A>'AX=R`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX
- XM("`@("`@("`@>'AX=R`@("`@("`@("!X>'AX>'AX>$9X>'AX<R`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@(&%X>'AX>'AX>',@("`@("`@("`@("!Q>'AX>'AX>',@("`@87AX=R`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@<7AX>'@@("`@("`@("!A>'AX("`@("`@("`@('AX>'AX>'AX>'AX
- XM<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!A>'AX>'AX>"`@("`@("`@("`@<7AX>'AX>'AX
- XM("`@("`@87AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@('%X>'AX>'<@("`@("`@("!X>'AW("`@("`@("`@
- XM87AX>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX=R`@("`@("`@
- XM('%X>'AX>'AX>',@("`@("`@>'AX>'<@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AW("`@("`@('AX
- XM>'@@("`@("`@("!Q>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X
- XM>'AX>"`@("`@("`@>'AX>'AX>'AX=R`@("`@("!A>'AX>"`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AX
- XM>'AX=R`@("`@>'AX>"`@("`@("`@<7AX>'AX<R`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!A>'AS("`@("`@('%X>'AX>'AX>'AX=R!Q>'@@("!X>'AX
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!X>'AX>'AX>'AX>'AX>'AX=R!X>'AX("`@("`@("!X>'AX<R`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'<@("`@("`@("`@("`@("`@("`@("`@("`@('%X=R!Q>'AX>'AX>'AX>'AX
- XM1GAX>"`@<7AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@('AX>'AX>'AX>'AX>'AX>'AX>$9X>'@@("`@("`@('AX
- XM<R`@("`@("`@("`@("`@("`@("`@('%X=R`@("`@>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AX
- XM>'AX>'AS("!A>'AX>'AS("!X>'AS("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@>',@("!A>'AX>'AX>'AX>'AX>'AX
- XM>'<@("`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX("`@("!X>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@
- XM("`@("!A>'AX>'AX>'AX>"`@("!X>'AX>&8@('AX>"`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X
- XM>'AX>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX
- XM>'@@("`@(&%X>'AS("`@("`@("`@("`@(&%X>'AX>'AX>'AX>'AX>'AX>'AW
- XM("`@("`@("`@("`@("`@("!A>'AX>'AX>'AS("`@('AX>'AS("`@("`@("`@
- XM('%X>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!A>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@
- XM<7AX>'AX>'AX>'AX>&8@("`@(&,@("`@("`@("`@("`@("`@("`@("`@(&%X
- XM>'AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("!A>'AX>'AX<R`@("`@>'AX
- XM<R`@("`@("`@('%X>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!Q>"`@("`@("`@("`@("`@87AX>'AX>'AX>'AX("`@("`@("`@
- XM("`@("`@("`@('%X>'AX>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@87AX>'AX>'AX>'AX>'<@("`@("`@("`@("`@("`@87AX
- XM>'AW("`@("!X>',@("`@("`@("!Q>'AX>'AX=R`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@<7AX("`@("`@("`@("`@("`@("`@87AX>'AX
- XM>'@@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX<R`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'AX>'AW("`@("`@
- XM("`@("`@("`@87AX>'@@("`@("`@("`@("`@("`@('AX>'AX>'AX=R`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'@@("`@("`@("`@("`@
- XM("`@("`@("!A>'AX>"`@("`@("`@("`@("`@('%X>'AX>'AX>'AS("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX
- XM>'AX>'AX=R`@("`@("`@("`@("`@87AX>'<@*B`@("`@("`@("`@("`@87AX
- XM>'AX>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
- XM"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!D>'AX>'<@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX
- XM>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@87AX>'AX>'AX>'<@("`@("`@("`@("`@87AX>'AX=R`@("`@
- XM("`@("`@("`@("`@(&%X>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@('%X>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM('%X>'AX>'AX>'AS8R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX>'AW("`@("`@("`@("`@
- XM87AX>'AX>'=Q>'AW("`@("`@("`@("`@("!A>'AW("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!Q>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@('%X>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX
- XM=R`@("`@("`@("`@(&%X>'AX>'AX>'AF("`@("`@("`@("`@('%X>'AW("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AX>'<@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AS("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@87AX>'AX>'AX=R`@("`@("`@("`@(&%X>'AX>'AX<R`@("`@("`@("`@
- XM("!Q>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*
- XM>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX
- XM>'<@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AS("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@(&%X>'AX>'AX=R`@("`@("`@("`@(&%X>'AX>',@
- XM("`@("`@("`@("`@<7AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM('AX>'AX>'AX>'AX>'AW("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX
- XM>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX=R`@("`@("`@
- XM("`@(&%X>'AS("`@("`@("`@("`@('%X>'AX>'AX>'<@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@>'AS(&%X>'AX>'AX>'AW("`@("`@("`@("`@("`@("`@
- XM("`@('%X>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX
- XM>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'<@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX>'AX=R`@("`@
- XM("`@("`@("`@("`@("!Q>'AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!A>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX
- XM>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX
- XM>'AX>'AX=R`@<7@@("`@("`@("`@("`@<7AX>'AX>',@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'<@("`@("`@("`@("`@("`@
- XM("`@("!Q>'AX>'AX>'AX>'-A>'AX=R`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'@@
- XM("`@("`@("!A>'AX>'AX>'AX=WAX>&8@("`@("`@("`@('%X>'AX>'AS("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'<@("`@
- XM("`@("`@("`@("`@("`@<7AX>'AX>'AX>',@("!X>'AX=R`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@<7AX<R`@("`@("`@("!A>'AX>'AX>'AX>'AX("`@("`@("`@("!Q
- XM>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM87AX>'AX>'<@("`@("`@("`@("!X>'<@<7AX>'AX>'AX>'AS("`@(&%X>'AX
- XM=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!X>'@@("`@("`@("`@("!A>'AX>'AX>'AX>',@
- XM("`@("`@("`@<7AX>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@87AX>'AX>'@@("`@("`@("`@('AX>$9X>'AX>'AX>'AS
- XM("`@("`@('AX>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'<@("`@("`@("`@("`@
- XM87AX>'AX>'AS("`@("`@("`@('%X>'AX>'AS("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'<@("`@("`@("`@87AX
- XM>'AX>'AX>'AX<R`@("`@("!Q>'AX>'@@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>'AW
- XM("`@("`@("`@("`@87AX>'A&<R`@("`@("`@("!Q>'AX>'AS("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'<@
- XM("`@("`@("`@87AX>'AX>'AX<R`@("`@("`@('AX>'AX<R`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@<7AX>'AX>'AX=R`@("`@("`@("`@87AX>'@@("`@("`@("`@<7AX>'AX
- XM<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@(&%X>'AX>'<@("`@("`@("`@>'AX>'AX>',@("`@("`@("`@>'AX>',@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!X>'AX>'AX>'AX>'AW("`@("`@("`@>'AX<R`@("`@
- XM("`@('%X>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@(&%X>'AX>'<@("`@("`@("!A>'AX>'AS("`@("`@
- XM("`@("!X>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('AX<R`@87AX>'AX>'AX=R`@("`@
- XM('%X>',@("`@("`@("!Q>'AX>'AX("`@("`@("`@("`@("`@<B`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'AX>"`@("`@("`@("!A
- XM>'AX<R`@("`@("`@("`@('AS("`@('AX("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@>'@@("`@(&%X
- XM>'AX>'AX>'<@("`@>'AS("`@("`@("`@('AX>'AX>',@('%X>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@
- XM("`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@87AX>'AX
- XM=R`@("`@("`@("!X>'@@("`@("`@("`@("`@("`@("`@>'AW("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@87AX>'AX>'AW("`@("`@("`@("`@("!Q>'AX>'AS("!Q
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM=R`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM=R`@("`@87AX>'AX=R`@("`@("`@(&%X>'<@("`@("`@("`@("`@("`@("!X
- XM>'@@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@87AX>'AX>'AX>"`@("`@("`@("`@
- XM<7AX>'AX<R`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX=R`@("`@("`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX("`@("`@87AX>'AX=R`@("`@("`@(&%X>"`@("`@("`@
- XM("`@("`@("`@<7AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AX>'AX
- XM("`@("`@("`@('%X>'AX>',@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@("`@('%X>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AW("`@("`@87AX>'AX=R`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@<7AX>'AX=R`@("`@("`@("`@("`@("`@("`@
- XM("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@<7AX
- XM>'AX>'AX>'AX<R`@("`@("`@("!Q>'AX>'AS("`@('AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@
- XM("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@>'AX
- XM>'AX("`@("`@("`@("`@("`@("`@("`@("`@<7AX>'AX>'AX("`@("`@("`@
- XM("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("!Q>'AX>'AX>'AX>'AX>',@("`@("`@("`@('AX>'AX>"`@("!D>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX=R`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>&8@("`@("!A>'AX>'AW("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX
- XM>'AW("`@("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>',@("`@("`@("`@("!Q>'AX
- XM>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX=R`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'@@("`@
- XM("`@("`@("`@("`@("`@("`@("!A>'AX>'AW("`@("`@("`@('AX=R`@('%X
- XM>'AX>'AX>'AX>'AX>'@@("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX<R`@("`@("`@
- XM("`@("`@('AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'@@("`@("`@
- XM("`@>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@
- XM("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX
- XM<R`@("`@("`@("`@("`@("!Q>'AX>'@@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("!X
- XM>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("!X
- XM>'AX>'<@("`@("`@("!X>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@
- XM("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@('%X>'AX
- XM>'AX>'AX>'AX<R`@("`@("`@("`@("`@("`@('AX>'AX<R`@("`@("`@("`@
- XM("`@("`@*B`@("`@("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX=R`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX=R`@*B`@("`@("`@("`@
- XM("`@("`@("`@(&%X>'AX>"`@("`@("`@(&%X>'AX>'AX>'AX>'AX>'AS("!A
- XM>'AX("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@
- XM("`@("`@>'AX>'AX>'AX1GAX<R`@("`@("`@("`@("`@("`@("!Q>'AX>',@
- XM("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AW("`@("`@('AX>'AX=R`@("`@("`@('AX>'AX>'AX
- XM>'AX>'AS("`@("!A>'AW("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@
- XM("`@("`@("`@("`@("`@('%X>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@
- XM("`@('AX>'AX("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@87AX>'AX("`@("`@
- XM("`@87AX>'AX>'AX<V%X>'<@("`@("!X>'@@("`@("`@("`@("`@("`@("`@
- XM("`@>`IX("`@("`@("`@("`@("`@("`@("`@>'AX>'AX>'AX<R`@("`@("`@
- XM("`@("`@("`@("`@("!Q>'AX>',@("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@
- XM(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@
- XM87AX>'AW("`@("`@("`@>'AX>'AX<R`@('AX1G<@("`@('AX>"`@("`@("`@
- XM("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@('%X>'AX>'AX
- XM>'AX>'<@("`@("`@('AW("`@("`@("`@('AX>'AX("`@("!Q>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX=R`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX("`@("`@("!D>'AX>'@@("`@("`@("!X>'AX<R`@("`@>'AX>'<@("`@
- XM>'AX("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@
- XM("`@>'AX<R`@87AX>'AX>'AX=R`@("!Q>'@@("`@("`@("!Q>'AX>',@("`@
- XM('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'@@("`@("`@("!A>'AX>'<@("`@("`@(&%X>'@@("`@
- XM("!&>'AX>'AX("!X>'AW("`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@
- XM("`@("`@("`@("`@("!X>',@("`@(&%X>'AX>'AX>'<J<7AX>"`@("`@("`@
- XM<7AX>'AX("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX
- XM>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX>"`@("`@
- XM("`@('AX>"`@("`@<7AX>'AX>'@@('AX>'@@("`@("`@("`@("`@("`@("`@
- XM("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX
- XM>'AS("`@("`@("!X>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!A>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM=R`@(&%X>'AX>'AX>'AS("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM(&%X>'AX=R`@("`@("`@>'AX("`@('%X>'AX>'AS("!Q>'AX>'<@("`@("`@
- XM("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@(&%X>'AX>'AX>"`@("`@("`@('AX>'AS("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX=R`@(&%X>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@('AX>'AX("`@("`@("!A>'AW("`@>'AX>',@("`@('AX
- XM>'AX>"`@("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("!A>'AX>'AS("`@("`@("!Q>'AX>"`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@(&%&>'AX>',@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@87AX>'@@("`@("`@("!X>'AW("`@
- XM("`@("`@("`@>'AX>'AS("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@
- XM("`@("`@("`@("`@>'@@("`@("`@("`@("`@("!A>'AX>"`@("`@("`@('AX
- XM>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!A
- XM1GAX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>'<@("`@
- XM("`@(&%X>'AW("`@("`@("`@("!X>',@("`@("`@("`@("`@("`@("`@("`@
- XM('@*>"`@("`@("`@("`@("`@("`@("!X>"`@("`@("`@("`@("`@("!X>'AS
- XM("`@("`@("`@>'AX>',@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("!A>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!X>'AX>"`@("`@("`@('AX>'AW("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@<7AX("`@("`@("`@
- XM("`@("`@('AX<R`@("`@("`@("!X>'AX("`@("`@("`@("`@("`@("`@("`@
- XM("`@("!R("`@("`@("`@("`@("`@("!A>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AW("`@("`@(&%X>'AX("`@("`@("`@>'AX>'AX=R`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("!X
- XM>'AW("`@("`@("`@("`@("`@>'@@("`@("`@("`@<7AX>'@@("`@("`@("`@
- XM("`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@('AX>'AW("`@("`@("!A>'AX>'AX
- XM=R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@
- XM("`@("`@("`@('AX>'AX>'AW("`@("`@("`@("!X>"`@("`@("`@("!X>'AX
- XM<R`@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@>'AX>'@@("`@
- XM("`@("!X>'AX>'AX("`@("`@("`@<7AX>'AX("`@("`@("`@("`@("`@("`@
- XM>`IX("`@("`@("`@("`@("`@("`@>'AX>'AX>'AX>'AX>'AW("`@("`@("`@
- XM("`@("`@('AX>'@@("`@("`@("`@("`@("`@('%X>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@
- XM("!A>'AX>"`@("`@("`@(&%X>'AX<R`@("`@("`@('AX>'AX>'@@("`@("`@
- XM("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX>'AX
- XM>'AX>'<@("`@("`@("`@("!Q>'AX>"`@("`@("`@("`@("`@('%X>'AX>'AX
- XM>'AS("`@("`@("`@(&%X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX("`@("`@("!X>'AX=R`@("`@("`@("`@("`@("`@("`@("`@>'AX
- XM>'AX>"`@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@('AX
- XM>'-A>'AX>'AX>'AX>'AX>'<@("`@("`@("`@('AX>'AX("`@("`@("`@("`@
- XM("!Q>'AX>'AX<R`@("`@("`@("`@("`@('AX>'AX>'AS("!A>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@('AX>'AX("`@("`@("`@("`@("`@
- XM("`@("`@("!A>'AX>'AX("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@
- XM("`@("`@("`@>'AS("`@("`@("`@87AX>'AX>'<@("`@("`@("`@>'AX>',@
- XM("`@("`@("`@("`@<7AX>'AX<R`@("`@("`@("`@("`@("`@>'AX>'AS("`@
- XM("`@87AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@849X>'@@("`@
- XM("`@("`@("`@("`@("`@("`@("`@87AX>'@@("`@("`@("`@("`@("`@("!X
- XM"G@@("`@("`@("`@("`@("`@(&1X>"`@("`@("`@("`@(&%X>'AX>"`@("`@
- XM("`@('%X>'AX("`@("`@("`@("`@('%X>'AX<R`@("`@("`@("`@("`@("`@
- XM("!X>'AX<R`@("`@("`@87AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>&8@("`@("`@("`@("`@("`@("`@
- XM("`@>'AX>'<@("`@("`@("`@("`@("`@("`@("`@("`@87AX>"`@("`@("`@
- XM("`@("`@("`@('@*>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM(&%&>'AX("`@("`@("`@>'AX>'@@("`@("`@("`@("!Q>'AX>',@("`@("`@
- XM("`@("`@("`@("`@('AX>'@@("`@("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX=R`@("`@("`@
- XM("`@("`@("`@("`@("!X>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM>'AX("`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@(&%X>'@@("`@("`@("!X>'AX<R`@("`@("`@("`@('AX
- XM>'AS("`@("`@("`@("`@("`@("`@("`@>'AX<R`@("`@("`@("!A>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'A&("`@("`@("`@("`@("`@("`@("`@(&%X>'AX("`@("`@("`@<7@@("`@
- XM("`@("`@("`@("!X>'@@("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@('AX>"`@("`@("`@('AX>'@@("`@
- XM("`@("`@("!Q>'AX<R`@("`@("`@("`@("`@("`@("`@("!X>'@@("`@("`@
- XM("`@("!X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AW("`@("`@("`@("`@("`@("`@("`@('AX>'@@("`@
- XM("`@("!X>"`@("`@("`@("`@("`@<7AX>'<@("`@("`@("`@("`@("`@('@*
- XM>"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX("`@("`@
- XM("`@>'AX>"`@("`@("`@("`@('AX>',@("`@("`@("`@("`@("`@("`@("`@
- XM('AX>"`@("`@("`@("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@
- XM("`@>'AX>"`@("`@("`@('AX=R`@("`@("`@<7AX>'AX>'AX>"`@("`@("`@
- XM("`@("`@("`@>`IX("`@("`@("`@("`@("`@("!X>"`@("`@("`@("`@("`@
- XM("!X>'@@("`@("`@("!X>'AX("`@("`@("`@("!Q>'AS("`@("`@("`@("`@
- XM("`@("`@("`@("`@>'AX=R`@("`@("`@("!Q>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX=R`@("`@("!X>'AX("`@("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@9'AX("`@
- XM("`@("`@("`@("`@<7AX>"`@("`@("`@('AX>'@@("`@("`@("`@('AX>"`@
- XM("`@("`@("`@("`@("`@("`@("`@("!X>'AX("`@("`@("`@('AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX("`@("`@('AX>'@@("`@("`@("!X>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'@@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@
- XM("`@("`@>'AW("`@("`@("`@("`@<7AX>'AX("`@("`@("!Q>'AX>"`@("`@
- XM("`@("`@>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@("`@('AX>'AW("`@("`@
- XM("!Q>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'@@("`@("`@>'AX>"`@("`@
- XM("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@("`@("`@("`@("`@>`IX
- XM("`@("`@("`@("`@("`@("!X>'AX>'AX>'<@*B!Q>'AX>'AX>',@("`@("`@
- XM('AX>'AX("`@("`@("`@("!X>'AX>'AX>'AX>'AX>'AX>'<@("`@("`@("`@
- XM>'AX>'AW("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>"`@("`@
- XM("!X>'AX=R`@("`@("`@>'AX>'AX>'AX>'AX>'AX>$9X>'AX("`@("`@("`@
- XM("`@("`@("!X"G@@("`@("`@("`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX("`@("`@("`@>'AX>',@("`@("`@("`@('AX>'AX>'AX1GAX>'AX>'AX
- XM>"`@("`@("`@("!X>'AX>'AX=R`@<7AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX("`@("`@('AX>'AX("`@("`@("!X>'AX>'AX>'AX>'AX>',@(&%X
- XM>'@@("`@("`@("`@("`@("`@('@*>"`@("`@("`@("`@("`@("!X>'AX>'AX
- XM>'AX>'AX>'AX>'AX>',@("`@("`@("!X>'AX("`@("`@("`@("`@("`@("`@
- XM("`@("`@("!A>'AX=R`@("`@("`@<7AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>',@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@87AX>'@@("`@("`@(&%X>'AX>',@
- XM("`@("`@("`@('AX>"`@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@
- XM("`@('AX>'AX>'AX>'AX>'AX>'AX>'AX("`@("`@("`@('AX>'@@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("!X>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>$9S
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>"`@("`@
- XM("`@('AX>',@("`@("`@("`@("`@>'AX("`@("`@("`@("`@("`@("!X"G@@
- XM("`@("`@("`@("`@("`@>'AX>'AX>'AX>'AX>'AX>'AX>',@("`@("`@("`@
- XM>'AX>"`@("`@("`@("`@("`@("`@("`@("`@("`@(&%X>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX<R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("!X>'AX("`@("`@("`@>'AS("`@("`@("`@("`@("!X>'AW("`@("`@("`@
- XM("`@("`@('@*>"`@("`@("`@("`@("`@("!X>'AX>'AX>'AX>'AX>'AX>'AS
- XM("`@("`@("`@("!X>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@9'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'A&>'AX>'AX>'AX>'AX>'AX>'AX>'AX
- XM>'AX>'AX>'AX>'AX>'AX>'AX>'AF("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@('AX>'@@("`@("`@("!X>"`@("`@("`@("`@("`@<7AX
- XM>'@@("`@("`@("`@("`@("`@>`IX("`@("`@("`@("`@("`@('AX<R`@("`@
- XM("!C("`@("`@("`@("`@("`@("`@('AX>'@@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@>'AX>"`@("`@("`@("`@("`@("`@
- XM("`@("`@('%X>'AX>"`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@
- XM("`@>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@>'AX>"`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X>'AX("`@("`@
- XM("`@("`@("`@("`@("`@("!Q>'AX>'AX("`@("`@("`@("`@("`@('@*>"`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("!X
- XM>'AX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM('AX>'@@("`@("`@("`@("`@("`@("`@("`@('AX>'AX>'@@("`@("`@("`@
- XM("`@("`@>`IX("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@('AX>'@@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@>'AX>"`@("`@("`@("`@("`@("`@("`@("`@>'AX>'AS
- XM("`@("`@("`@("`@("`@("!X"G@@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@>'AX>"`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
- END_OF_FILE
- if test 37778 -ne `wc -c <'maps/logo2.uue.1'`; then
- echo shar: \"'maps/logo2.uue.1'\" unpacked with wrong size!
- fi
- # end of 'maps/logo2.uue.1'
- fi
- if test -f 'src/server.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/server.c'\"
- else
- echo shar: Extracting \"'src/server.c'\" \(16909 characters\)
- sed "s/^X//" >'src/server.c' <<'END_OF_FILE'
- X/* $Id: server.c,v 1.23 1992/07/10 23:19:59 bjoerns Exp $
- X *
- X * This file is part of the XPilot project, written by
- X *
- X * Bjxrn Stabell (bjoerns@stud.cs.uit.no)
- X * Ken Ronny Schouten (kenrsc@stud.cs.uit.no)
- X *
- X * Copylefts are explained in the LICENSE file.
- X */
- X
- X#include <X11/Xproto.h>
- X#include <X11/Xlib.h>
- X#include <X11/Xos.h>
- X
- X#include <stdio.h>
- X#include <signal.h>
- X#include <time.h>
- X#include <pwd.h>
- X#include <setjmp.h>
- X
- X#include "global.h"
- X#include "version.h"
- X#include "map.h"
- X#include "pack.h"
- X#include "draw.h"
- X#include "robot.h"
- X
- X#ifndef lint
- Xstatic char versionid[] = "@(#)$" TITLE " $";
- Xstatic char sourceid[] =
- X "@(#)$Id: server.c,v 1.23 1992/07/10 23:19:59 bjoerns Exp $";
- X#endif
- X
- X
- X#define CHECK_DELAY 0x3f
- X#define LOOP_DELAY 50
- X
- X/*
- X * Global variables
- X */
- Xint NumPlayers = 0;
- Xint NumObjs;
- Xint Num_alive = 0;
- Xplayer *Players[MAX_PLAYERS];
- Xobject *Obj[MAX_TOTAL_SHOTS];
- Xlong Id = 1; /* Unique ID for each object */
- Xlong GetInd[MAX_ID];
- Xserver Server;
- Xint RadarHeight;
- Xint Shutdown = -1, ShutdownDelay = 1000;
- Xjmp_buf SavedEnv;
- Xint Delay = LOOP_DELAY;
- X
- Xstatic bool Inside_window = true;
- Xstatic int Socket;
- Xstatic pack_t out;
- Xstatic char msg[MSG_LEN];
- Xstatic bool Log = true;
- Xstatic bool NoPlayersEnteredYet = true;
- X
- X
- X
- Xint main(int argc, char *argv[])
- X{
- X struct hostent *hinfo;
- X struct passwd *pwent;
- X
- X
- X init_error(argv[0]);
- X
- X srand(time((time_t *)0)); /* Take seed from timer. */
- X
- X Parser(argc, argv);
- X
- X RadarHeight = (256.0/World.x) * World.y;
- X
- X Make_table(); /* Make trigonometric tables */
- X
- X Compute_gravity();
- X Alloc_players(World.NumBases); /* Allocate memory for players */
- X Alloc_shots(MAX_TOTAL_SHOTS); /* Allocate memory for shots */
- X Alloc_msgs(MAX_MSGS);
- X Make_ships();
- X
- X /*
- X * Get server's official name.
- X */
- X gethostname(Server.host, 80);
- X hinfo = gethostbyname(Server.host);
- X strcpy(Server.host, hinfo->h_name);
- X
- X /*
- X * Get owners login name.
- X */
- X pwent = getpwuid(geteuid());
- X strcpy(Server.name, pwent->pw_name);
- X
- X /*
- X * Initialize core of out packet.
- X */
- X out.core.magic = htonl(MAGIC);
- X out.core.port = htonl(SERVER_PORT);
- X strcpy(out.core.realname, Server.name);
- X
- X /*
- X * Log, if enabled.
- X */
- X if ((strcmp(Server.name, "kenrsc") == 0) ||
- X (strcmp(Server.name, "bjoerns") == 0))
- X Log = false;
- X Log_game("START"); /* Log start */
- X
- X /*
- X * Create a socket which we can listen on.
- X */
- X if ((Socket = CreateDgramSocket(SERVER_PORT)) == -1) {
- X error("Could not create Dgram socket");
- X End_game();
- X }
- X SetTimeout(0, 0);
- X
- X /*
- X * Is the server in raw mode, that is - should it run even while
- X * there are noe players logged in.
- X */
- X/* if (RawMode) {*/
- X/* signal(SIGALRM, Handle_signal);*/ /* Get first client, then proceed. */
- X/* alarm(5*60); */ /* Signal me in 5 minutes. */
- X/* while (Check_new_players() == false)*/
- X/* sleep(2);*/
- X/* signal(SIGALRM, SIG_IGN);*/
- X/* }*/
- X signal(SIGHUP, Handle_signal);
- X signal(SIGTERM, Handle_signal);
- X signal(SIGINT, Handle_signal);
- X
- X Main_Loop(); /* Entering main loop. */
- X /* NEVER REACHED */
- X return (0);
- X}
- X
- X
- X
- Xvoid Loop_delay()
- X{
- X static long adj_sec = 0;
- X static long last_msec = 0;
- X long msec;
- X struct timeval tval;
- X struct timezone tzone;
- X
- X if (adj_sec == 0) {
- X if (gettimeofday (&tval, &tzone) != 0)
- X return;
- X
- X adj_sec = tval.tv_sec;
- X last_msec = (tval.tv_sec - adj_sec)*1000 + (tval.tv_usec)/1000;
- X return;
- X }
- X
- X do {
- X if (gettimeofday (&tval, &tzone) != 0)
- X return;
- X
- X msec = (tval.tv_sec - adj_sec)*1000 + (tval.tv_usec)/1000;
- X
- X } while (msec < last_msec + Delay);
- X
- X last_msec = msec;
- X}
- X
- X
- X/*
- X * Main loop.
- X */
- Xvoid Main_Loop()
- X{
- X XEvent event;
- X XClientMessageEvent *cmev;
- X register int i, x;
- X static int loops = 0;
- X
- X
- X setjmp(SavedEnv);
- X
- X while (NoQuit || NumPlayers>NumRobots || NoPlayersEnteredYet) {
- X
- X if ((loops = (loops+1) & CHECK_DELAY) == 0) {
- X if (NumPlayers == NumRobots && !RawMode) {
- X while(Check_new_players() == false)
- X sleep(5);
- X } else
- X Check_new_players();
- X }
- X
- X Update_objects();
- X
- X if (Shutdown > 0) /* Check for possible shutdown, the */
- X Shutdown--; /* server will shutdown when Shutdown */
- X else /* (a counter) reaches 0. If the */
- X if (Shutdown == 0) /* counter is < 0 then now shutdown */
- X End_game(); /* is in progress. */
- X
- X if ((loops % UPDATES_PR_FRAME) == 0) {
- X Loop_delay();
- X Draw_objects();
- X }
- X
- X for (i=0; i<NumPlayers; i++) {
- X if (Players[i]->disp_type == DT_NONE)
- X continue;
- X
- X for(x = XEventsQueued(Players[i]->disp,
- X QueuedAfterFlush); x>0; x--) {
- X XNextEvent(Players[i]->disp, &event);
- X
- X switch (event.type) {
- X
- X case ClientMessage:
- X cmev = (XClientMessageEvent *) &event;
- X if (cmev->message_type == ProtocolAtom &&
- X cmev->data.l[0] == KillAtom) {
- X D(printf("Got WM_DELETE_WINDOW from %s@%s.\n",
- X Players[i]->name,
- X Player[i]->robot_mode == RM_NOT_ROBOT
- X ? DisplayString(Players[i]->disp)
- X : "noplace:0"));
- X Quit(i);
- X }
- X break;
- X
- X case KeyPress:
- X case KeyRelease:
- X Key_event(i, &event);
- X break;
- X
- X case ButtonPress:
- X Expose_button_window(i, BLACK, event.xbutton.window);
- X
- X if (event.xbutton.window == Players[i]->info_b)
- X Info(i, Players[i]->info_b);
- X if (event.xbutton.window == Players[i]->help_b)
- X Help(i, Players[i]->help_b);
- X break;
- X
- X case ButtonRelease:
- X if (event.xbutton.window == Players[i]->quit_b)
- X Quit(i);
- X else if (event.xbutton.window == Players[i]->info_close_b)
- X Info(i, Players[i]->info_close_b);
- X else if (event.xbutton.window == Players[i]->help_close_b)
- X Help(i, Players[i]->help_close_b);
- X else if (event.xbutton.window == Players[i]->help_next_b)
- X Help(i, Players[i]->help_next_b);
- X else if (event.xbutton.window == Players[i]->help_prev_b)
- X Help(i, Players[i]->help_prev_b);
- X break;
- X
- X case Expose:
- X if (event.xexpose.count > 0) /* We don't want any */
- X break; /* subarea exposures. */
- X
- X if (event.xexpose.window == Players[i]->players)
- X Set_labels();
- X else if (event.xexpose.window == Players[i]->info_w)
- X Expose_info_window(i);
- X else if (event.xexpose.window == Players[i]->help_w)
- X Expose_help_window(i);
- X else if (event.xexpose.window == Players[i]->radar)
- X Draw_world_radar(i);
- X else
- X Expose_button_window(i, RED, event.xexpose.window);
- X break;
- X
- X case EnterNotify:
- X Inside_window = true;
- X XAutoRepeatOff(Players[i]->disp);
- X Players[i]->turnacc = 0.0;
- X break;
- X
- X case UnmapNotify:
- X case LeaveNotify:
- X Inside_window = false;
- X XAutoRepeatOn(Players[i]->disp);
- X break;
- X
- X case NoExpose:
- X break; /* XXX? */
- X
- X case MappingNotify:
- X XRefreshKeyboardMapping(&event.xmapping);
- X break;
- X
- X default:
- X error("Got unexpected event type: %d", event.type);
- X break;
- X }
- X }
- X }
- X }
- X
- X End_game();
- X}
- X
- X
- X
- X/*
- X * Last function, exit with grace.
- X */
- Xvoid End_game(void)
- X{
- X int i;
- X
- X
- X if (Shutdown == 0) {
- X error("Shutting down...");
- X }
- X
- X for (i=0; i<NumPlayers; i++) /* Shutdown server */
- X Quit(i);
- X
- X SocketClose(Socket);
- X Free_players(World.NumBases);
- X Free_ships();
- X Free_shots(MAX_TOTAL_SHOTS);
- X Free_map();
- X Free_msgs(MAX_MSGS);
- X Log_game("END"); /* Log end */
- X
- X exit (0);
- X}
- X
- X
- X
- Xvoid Dump_pack(core_pack_t *p)
- X{
- X printf("\nDUMP OF PACK:\n");
- X printf("=============\n");
- X printf("TYPE: %d\n", p->type);
- X printf("REALNAME: %s\n", p->realname);
- X printf("PORT: %ld\n", ntohl(p->port));
- X printf("MAGIC: %lx\n", ntohl(p->magic));
- X}
- X
- X
- X
- Xbool Check_new_players(void)
- X{
- X int i,
- X out_size = 0,
- X bytes;
- X char *in_host;
- X XKeyboardState settings;
- X static bool lock = false;
- X bool new_player = false,
- X answer = false;
- X char *str;
- X pack_t in;
- X player *pl;
- X
- X
- X /*
- X * Anyone cheating by turning auto-fire (also called auto-repeat :) on?
- X */
- X for (i=0; i<NumPlayers; i++) {
- X if (Players[i]->disp_type == DT_NONE)
- X continue;
- X if (!BIT(Players[i]->status, PAUSE) && Inside_window) {
- X XGetKeyboardControl(Players[i]->disp, &settings);
- X
- X if (settings.global_auto_repeat == AutoRepeatModeOn)
- X XAutoRepeatOff(Players[i]->disp);
- X }
- X }
- X
- X if (!SocketReadable(Socket)) /* No-one tried to connect. */
- X return (false);
- X
- X
- X /*
- X * Someone connected to us, now try and deschiffer the message :)
- X */
- X if ((bytes = DgramReceiveAny(Socket, (char *)&in, sizeof(pack_t))) <= 0) {
- X error("SocketRead (pack from %s)", DgramLastaddr());
- X return (false);
- X }
- X
- X /*
- X * Get hostname.
- X */
- X in_host = DgramLastaddr();
- X
- X
- X /*
- X * Determine if we can talk with this hand-shake program.
- X */
- X if (ntohl(in.core.magic) != MAGIC) {
- X#ifndef SILENT
- X error("Incompatible packet received from %s", in_host);
- X#endif
- X return (false);
- X }
- X
- X
- X /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- X *
- X * Now decode the packet type field and do something witty.
- X * (Note, s and r is short for send and reply.)
- X *
- X */
- X out.core.type = CORE_pack;
- X out.core.status = SUCCESS;
- X answer = true;
- X out_size = sizeof(core_pack_t);
- X
- X switch (in.core.type) {
- X
- X case ENTER_GAME_pack: {
- X /*
- X * Someone wants to enter the game.
- X */
- X reply_pack_t *s = &out.reply;
- X enter_game_pack_t *r = &in.enter;
- X
- X /*
- X * Game locked?
- X */
- X if (lock && !Owner(r->realname)) {
- X s->status = E_GAME_LOCKED;
- X goto switch_end;
- X }
- X
- X /*
- X * Is the game full?
- X */
- X if (NumPlayers >= World.NumBases) {
- X s->status = E_GAME_FULL;
- X goto switch_end;
- X }
- X
- X Init_player(NumPlayers);
- X pl = Players[NumPlayers];
- X
- X strcpy(pl->name, r->nick);
- X strcpy(pl->realname, r->realname);
- X
- X /*
- X * Now initialize X.
- X */
- X if ((pl->disp = XOpenDisplay(r->display)) == NULL) { /* Open the */
- X s->status = E_DISPLAY; /* display */
- X goto switch_end;
- X }
- X
- X /*
- X * Get X defaults.
- X */
- X Get_defaults(NumPlayers);
- X if (htons(r->team) != TEAM_NOT_SET)
- X pl->team = htons(r->team);
- X
- X
- X /*
- X * All names must be unique (so we don't kick the wrong one for
- X * instance).
- X */
- X for (i=0; i<NumPlayers; i++) {
- X if (strcasecmp(Players[i]->name, pl->name) == 0) {
- X s->status = E_IN_USE;
- X XCloseDisplay(pl->disp);
- X goto switch_end;
- X }
- X }
- X
- X /*
- X * Now initialize all the windows.
- X */
- X if ((s->status = Init_window(NumPlayers)) == SUCCESS) {
- X
- X#ifndef SILENT
- X printf("%s (%d, %s) starts at startpos %d.\n",
- X Players[NumPlayers]->name, NumPlayers+1,
- X Players[NumPlayers]->realname,
- X Players[NumPlayers]->home_base);
- X#endif
- X if (NumPlayers == 0)
- X sprintf(msg, "Welcome to \"%s\", made by %s.",
- X World.name, World.author);
- X else
- X sprintf(msg, "%s (%s) has entered \"%s\", made by %s.",
- X Players[NumPlayers]->name,
- X Players[NumPlayers]->realname,
- X World.name, World.author);
- X
- X NumPlayers++;
- X Id++;
- X new_player = true;
- X NoPlayersEnteredYet = false;
- X
- X Set_message(msg);
- X Set_label_strings();
- X
- X /* Remebers the maximum number of players */
- X Server.max_num = MAX(Server.max_num, NumPlayers);
- X
- X } else { /* Couldn't initialize X, explain to user. */
- X
- X new_player = false;
- X }
- X }
- X break;
- X
- X
- X case REPORT_STATUS_pack: {
- X /*
- X * Someone asked for information.
- X */
- X reply_pack_t *s = &out.reply;
- X report_status_pack_t *r = &in.command;
- X
- X#ifndef SILENT
- X printf("%s asked for info about current game.\n", r->realname);
- X#endif
- X sprintf(s->str,
- X "\nSERVER VERSION...: %s\n"
- X "STARTED BY.......: %s\n"
- X "STATUS...........: %s\n"
- X "WORLD (%3dx%3d)..: %s\n"
- X " AUTHOR.....: %s\n"
- X "PLAYERS (%2d/%2d)..:\n",
- X TITLE, Server.name, lock && Shutdown==-1 ? "Locked " :
- X !lock && Shutdown!=-1 ? "Shutting down" :
- X lock && Shutdown!=-1 ? "Locked and shutting down" :
- X "Clear",
- X World.x, World.y, World.name, World.author,
- X NumPlayers, World.NumBases);
- X
- X if (i > 0)
- X strcat(s->str,
- X "\nNO: TM: NAME: LIFE: SC: PLAYER:\n"
- X "-------------------------------------------------\n");
- X
- X for (i=0; i<NumPlayers; i++) {
- X sprintf(msg, "%2d... %-36s%s@%s\n",
- X i+1, Players[i]->lblstr, Players[i]->realname,
- X Players[i]->robot_mode == RM_NOT_ROBOT
- X ? DisplayString(Players[i]->disp)
- X : "noplace:0");
- X if (strlen(msg) + strlen(s->str) >= MAX_STR_LEN)
- X break;
- X strcat(s->str, msg);
- X }
- X out_size += strlen(s->str);
- X }
- X break;
- X
- X
- X case MESSAGE_pack: {
- X /*
- X * Someone wants to transmit a message to the server.
- X */
- X reply_pack_t *s = &out.reply;
- X message_pack_t *r = &in.command;
- X
- X if (!Owner(r->realname)) {
- X s->status = E_NOT_OWNER;
- X } else {
- X sprintf(msg,
- X " <<< MESSAGE FROM ABOVE (%s) >>> \"%s\"",
- X r->realname, r->arg_str);
- X Set_message(msg);
- X }
- X }
- X break;
- X
- X
- X case LOCK_GAME_pack: {
- X /*
- X * Someone wants to lock the game so that no more players can enter.
- X */
- X reply_pack_t *s = &out.reply;
- X lock_game_pack_t *r = &in.command;
- X
- X if (!Owner(r->realname)) {
- X s->status = E_NOT_OWNER;
- X } else {
- X lock = !lock;
- X }
- X }
- X break;
- X
- X
- X case CONTACT_pack: {
- X /*
- X * Got contact message from client.
- X */
- X reply_pack_t *s = &out.reply;
- X contact_pack_t *r = &in.core;
- X
- X D(printf("Got CONTACT from %s.\n", in_host));
- X }
- X break;
- X
- X
- X case SHUTDOWN_pack: {
- X /*
- X * Shutdown the entire server.
- X */
- X reply_pack_t *s = &out.reply;
- X shutdown_pack_t *r = &in.command;
- X
- X if (!Owner(r->realname)) {
- X s->status = E_NOT_OWNER;
- X goto switch_end;
- X }
- X
- X Shutdown = ntohl(r->arg_int);
- X
- X if (Shutdown == 0) {
- X sprintf(msg, "|*******| SHUTDOWN STOPPED (%s) |*******| \"%s\"",
- X r->realname, r->arg_str);
- X Shutdown = -1;
- X } else {
- X for (i=0; i<NumPlayers; i++) {
- X if (Players[i]->disp_type == DT_NONE)
- X continue;
- X XMapWindow(Players[i]->disp, Players[i]->top);
- X }
- X sprintf(msg, "|*******| SHUTTING DOWN (%s) |*******| \"%s\"",
- X r->realname, r->arg_str);
- X
- X ShutdownDelay = Shutdown;
- X }
- X Set_message(msg);
- X }
- X break;
- X
- X
- X case KICK_PLAYER_pack: {
- X /*
- X * Kick someone from the game.
- X */
- X reply_pack_t *s = &out.reply;
- X kick_player_pack_t *r = &in.command;
- X byte found = -1;
- X
- X if (!Owner(r->realname)) {
- X s->status = E_NOT_OWNER;
- X goto switch_end;
- X }
- X
- X for (i=0; i<NumPlayers; i++) {
- X if (strcasecmp(r->arg_str, Players[i]->name) == 0
- X || strcasecmp(r->arg_str, Players[i]->realname) == 0)
- X found = i;
- X }
- X if (found == -1) {
- X s->status = E_NOT_FOUND;
- X } else {
- X sprintf(msg, "\"%s\" upset the gods and was kicked out "
- X "of the game.", Players[found]->name);
- X Set_message(msg);
- X Quit(found);
- X goto switch_end;
- X }
- X }
- X break;
- X
- X
- X default:
- X /*
- X * Incorrect packet type.
- X */
- X answer = false;
- X
- X error("Incorrect packet type from %s.\n"
- X "(Probably occured due to incompatibility between handshake\n"
- X "version and server version, someone should upgrade)", in_host);
- X }
- X
- X switch_end:
- X if (answer && (DgramSend(Socket, in_host, ntohl(in.core.port),
- X (char *)&out, out_size)) == -1) {
- X error("Could not send request to client at %s.", in_host);
- X }
- X
- X return (new_player);
- X}
- X
- X
- X
- X/*
- X * Returns true if <name> has owner status of this server.
- X */
- Xbool Owner(char *name)
- X{
- X if ((strcmp(name, Server.name) == 0)
- X || (strcmp(name, "kenrsc") == 0)
- X || (strcmp(name, "bjoerns") == 0)
- X || (strcmp(name, "root") == 0))
- X return (true);
- X else
- X return (false);
- X}
- X
- X
- X
- Xvoid Handle_signal(int sig_no)
- X{
- X switch (sig_no) {
- X case SIGALRM:
- X error("First player has yet to show his butt, I'm bored... Bye!");
- X SocketClose(Socket);
- X break;
- X
- X case SIGHUP:
- X case SIGINT:
- X case SIGTERM:
- X error("Caught signal %d, terminating.", sig_no);
- X End_game();
- X break;
- X
- X default:
- X error("Caught unkown signal: %d", sig_no);
- X break;
- X }
- X
- X exit(sig_no);
- X}
- X
- X
- X
- Xvoid Log_game(char *heading)
- X{
- X#ifndef NO_LOG
- X char str[1024];
- X FILE *fp;
- X
- X
- X if (!Log)
- X return;
- X
- X/* sprintf(str,
- X "echo \"*** %s ***\n\n'%s' started a server on '%s' with map:\n"
- X "'%s.'\""
- X "| mailx -s \"%s\" %s 2>/dev/null >/dev/null",
- X NAME " " VERSION, Server.name, Server.host,
- X World.name, heading, REPORT_ADDRESS);
- X system("/bin/mv dead.letter3 dead.letter4 2>/dev/null >/dev/null");
- X system("/bin/mv dead.letter2 dead.letter3 2>/dev/null >/dev/null");
- X system("/bin/mv dead.letter dead.letter2 2>/dev/null >/dev/null");
- X system(str);
- X sleep (3);
- X system("/bin/rm -f dead.letter 2>/dev/null");
- X printf("Logging...\n");
- X*/
- X sprintf(str,
- X "%s (%s) - %s@%s, map '%s' (%d)\n",
- X heading, VERSION, Server.name, Server.host,
- X World.name, Server.max_num);
- X
- X if ((fp=fopen(LOGFILE, "a")) == NULL) { /* Couldn't open file, oh well. */
- X error("Couldn't open log file, contact " LOCALGURU "");
- X return;
- X }
- X
- X fputs(str, fp);
- X
- X fclose(fp);
- X#endif
- X}
- END_OF_FILE
- echo shar: 1 control character may be missing from \"'src/server.c'\"
- if test 16909 -ne `wc -c <'src/server.c'`; then
- echo shar: \"'src/server.c'\" unpacked with wrong size!
- fi
- # end of 'src/server.c'
- fi
- echo shar: End of archive 13 \(of 24\).
- cp /dev/null ark13isdone
- 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 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 24 archives.
- echo "\nNow run 'bldmaps.sh' to build the map files"
- 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
-