Remove stli(4). Also remove ISA support from stl(4).
authorSascha Wildner <saw@online.de>
Sat, 1 Dec 2012 17:48:21 +0000 (18:48 +0100)
committerSascha Wildner <saw@online.de>
Sat, 1 Dec 2012 18:02:06 +0000 (19:02 +0100)
stli(4) was ISA only. stl(4) was for ISA/PCI controllers.

The stlload(8) and stlstty(8) utilities were for ISA controllers only,
so remove them too (along with ISA only firmware).

While here, clean up stl(4) a bit.

26 files changed:
Makefile_upgrade.inc
UPDATING
etc/mtree/BSD.usr.dist
share/man/man4/isa.4
share/man/man4/man4.i386/Makefile
share/man/man4/man4.i386/stl.4
share/man/man7/hier.7
sys/bus/isa/i386/isa_compat.h
sys/config/LINT
sys/dev/serial/stl/stallion.c
sys/dev/serial/stli/istallion.c [deleted file]
sys/platform/pc32/conf/files
sys/platform/pc32/i386/userconfig.c
sys/platform/pc32/isa/README.stl [deleted file]
usr.sbin/stallion/Makefile
usr.sbin/stallion/Makefile.inc
usr.sbin/stallion/bootcode/2681.sys.uu [deleted file]
usr.sbin/stallion/bootcode/Makefile [deleted file]
usr.sbin/stallion/bootcode/cdk.sys.uu [deleted file]
usr.sbin/stallion/stlload/Makefile [deleted file]
usr.sbin/stallion/stlload/stlload.8 [deleted file]
usr.sbin/stallion/stlload/stlload.c [deleted file]
usr.sbin/stallion/stlstats/stlstats.8
usr.sbin/stallion/stlstty/Makefile [deleted file]
usr.sbin/stallion/stlstty/stlstty.8 [deleted file]
usr.sbin/stallion/stlstty/stlstty.c [deleted file]

index f4a5c54..abfcb49 100644 (file)
@@ -2083,23 +2083,22 @@ TO_REMOVE+=/usr/share/man/man2/caps_sys_wait.2.gz
 TO_REMOVE+=/var/caps
 TO_REMOVE+=/usr/include/objc
 TO_REMOVE+=/usr/include/machine/pc/msdos.h
-
-.if ${MACHINE_ARCH} == "x86_64"
-TO_REMOVE+=/usr/libdata/stallion/2681.sys
-TO_REMOVE+=/usr/libdata/stallion/cdk.sys
+TO_REMOVE+=/usr/share/man/cat4/i386/stli.4.gz
+TO_REMOVE+=/usr/share/man/man4/i386/stli.4.gz
 TO_REMOVE+=/usr/sbin/stlload
 TO_REMOVE+=/usr/share/man/cat8/i386/stlload.8.gz
 TO_REMOVE+=/usr/share/man/man8/i386/stlload.8.gz
-TO_REMOVE+=/usr/sbin/stlstats
-TO_REMOVE+=/usr/share/man/cat8/i386/stlstats.8.gz
-TO_REMOVE+=/usr/share/man/man8/i386/stlstats.8.gz
 TO_REMOVE+=/usr/sbin/stlstty
 TO_REMOVE+=/usr/share/man/cat8/i386/stlstty.8.gz
 TO_REMOVE+=/usr/share/man/man8/i386/stlstty.8.gz
+TO_REMOVE+=/usr/libdata/stallion
+
+.if ${MACHINE_ARCH} == "x86_64"
+TO_REMOVE+=/usr/sbin/stlstats
+TO_REMOVE+=/usr/share/man/cat8/i386/stlstats.8.gz
+TO_REMOVE+=/usr/share/man/man8/i386/stlstats.8.gz
 TO_REMOVE+=/usr/share/man/cat4/i386/stl.4.gz
 TO_REMOVE+=/usr/share/man/man4/i386/stl.4.gz
-TO_REMOVE+=/usr/share/man/cat4/i386/stli.4.gz
-TO_REMOVE+=/usr/share/man/man4/i386/stli.4.gz
 TO_REMOVE+=/usr/sbin/kgzip
 TO_REMOVE+=/usr/share/man/cat8/kgzip.8.gz
 TO_REMOVE+=/usr/share/man/man8/kgzip.8.gz
index d845f96..1584199 100644 (file)
--- a/UPDATING
+++ b/UPDATING
@@ -29,12 +29,17 @@ kernel config, you need to change it to IFPOLL_ENABLE.
 Also, the KTR_POLLING kernel option has been removed, so it must be
 removed from kernel configs that have it.
 
-BUSLOGIC ISA SUPPORT REMOVED
-----------------------------
+BUSLOGIC AND STALLION ISA SUPPORT REMOVED
+-----------------------------------------
 
 The bt(4) driver for Buslogic SCSI adapters has been made PCI only. ISA
 cards will no longer be detected.
 
+The same has been done for Stallion multiport serial controllers. stli(4)
+has been completely removed (along with the stlload(8) and stlstty(8)
+utilities) and stl(4) was changed to support only PCI cards. Both drivers
+are i386 only.
+
 +-----------------------------------------------------------------------+
 +         UPGRADING DRAGONFLY FROM 3.0 to later versions                +
 +-----------------------------------------------------------------------+
index e6622d3..120bf9c 100644 (file)
@@ -54,8 +54,6 @@
         ..
         lint
         ..
-        stallion
-        ..
     ..
     libexec
         binutils221
index 9310c11..bbd8c1e 100644 (file)
@@ -84,10 +84,6 @@ Comtrol RocketPort serial card driver
 Specialix International SI/XIO or SX serial card driver
 .It Xr sio 4
 Generic serial controller driver
-.It Xr stl 4
-Stallion Technologies multiport serial controller driver
-.It Xr stli 4
-Stallion Technologies multiport serial controller driver
 .El
 .Ss Network interfaces
 .Bl -tag -width 12n -offset indent -compact
index 0ba0d48..7236ee5 100644 (file)
@@ -33,7 +33,6 @@ MLINKS+=lnc.4 if_lnc.4
 MLINKS+=sbni.4 if_sbni.4
 MLINKS+=spkr.4 speaker.4
 MLINKS+=sr.4 if_sr.4
-MLINKS+=stl.4 stli.4
 MLINKS+=tx.4 if_tx.4
 MLINKS+=vx.4 if_vx.4
 
index 0e31a0c..2982387 100644 (file)
 .\"
 .\" $FreeBSD: src/usr.sbin/stallion/bootcode/stl.4,v 1.8.2.5 2001/12/14 16:41:52 ru Exp $
 .\"
-.Dd August 6, 2009
+.Dd December 1, 2012
 .Dt STL 4 i386
 .Os
 .Sh NAME
-.Nm stl ,
-.Nm stli
-.Nd "drivers for Stallion Technologies multiport serial controllers"
+.Nm stl
+.Nd "driver for Stallion Technologies multiport serial controllers"
 .Sh SYNOPSIS
 .Cd "device stl"
-.Cd "device stl0 at isa? port <addr> irq <irq>"
-.Cd "device stli0 at isa? port <io-addr> iomem <mem-addr> iosiz <size> flags <type> "
 .Sh DESCRIPTION
-This is a kernel driver for Stallion Technologies multiport serial boards.
-There are two drivers, each supporting a different class of boards.
 The
 .Nm
-driver supports the EasyIO,
+driver supports the Stallion Technologies EasyIO,
 EasyConnection 8/32 and
-EasyConnection 8/64-PCI boards,
-while the
-.Nm stli
-driver supports all other types, including
-ONboard, Brumby and EasyConnection 8/64 (ISA).
+EasyConnection 8/64-PCI multiport serial boards.
 .Sh CONFIGURATION
-Each non-PCI board installed in the system needs a configuration entry in the
-kernel configuration file.
-Slightly different options and parameters are required for each of the
-different board types.
-Depending on the type of board one of the
-.Nm
-or
-.Nm stli
-drivers will be used.  The
-.Nm
-and
-.Nm stli
-drivers can support up to 8 boards.
-.Pp
 Configuration of the hardware - DIP switches, jumpers, etc - varies
 from board to board.
 Consult documentation supplied with the board for hardware
 configuration details.
-Alternatively the board documentation is available on Stallion
-Technologies WWW site at
-.Pa http://www.stallion.com .
-.Pp
-The EasyIO, EasyConnection 8/32 and EasyConnection 8/64-PCI
-families of boards use the
-.Nm
-driver.
-ISA board configuration entries for the
-.Nm
-driver take the general form of:
-.Pp
-.Cd "device stlX at isa? port <io-addr> irq <irq>"
-.Pp
-.Ar X
-is the unit number assigned to the board.
-Any unique value between 0 and 7 is valid.
-.Pp
-The I/O address used by the board is specified by
-.Ar <io-addr> .
-Each of the EasyIO and EasyConnection 8/32-AT boards can use
-an I/O address in the range from 0 to 0x400.
-.Pp
-All EasyIO and EasyConnection 8/32 boards require an interrupt,
-and this interrupt is specified by
-.Ar <irq> .
-Legal IRQ values for the ISA boards are 3, 4, 5, 7, 10, 11, 12 and 15.
-Interrupts are software programmed on all boards except the EasyIO-8M.
-.Pp
-The EasyConnection 8/32-AT board uses a secondary I/O address region,
-and this is fixed at address 0x280 in the driver code.
-All EasyConnection 8/32-AT boards may share the same secondary address
-region.
-.Pp
-All EasyIO and EasyConnection PCI boards are detected
-automatically by the drivers on boot up.
-No configuration information is required in advance for these
-board types.
-During boot up the
-.Nm
-driver will issue messages to indicate that a Stallion
-PCI board was found, and some information about it.
-If no ISA card is being configured, an entry like
-.Pp
-.Cd "device stl"
-.Pp
-will include the driver for PCI cards only.
-.Pp
-Following are some examples of configuration entries for each of the ISA
-boards supported by the
-.Nm
-driver.
-Each example also describes some important details about each of the
-board types.
-.Pp
-Each EasyIO board requires 8 bytes of I/O address space and 1 IRQ line.
-A configuration entry for an EasyIO board would look like:
-.Pp
-.Cd "device stl0 at isa? port 0x2a8 irq 15"
-.Pp
-This entry specifies an EasyIO board at I/O address 0x2a8 using IRQ 15.
-The I/O and IRQ values can be modified as required.
-.Pp
-Each EasyConnection 8/32-AT board requires 2 sets of I/O addresses
-and 1 IRQ line.
-The primary I/O address range is 2 bytes in size, and must be unique
-to each EasyConnection 8/32-AT board in the system.
-The secondary I/O address range is 32 bytes in size, but can be shared
-by multiple EasyConnection 8/32-AT boards.
-This secondary I/O address is set at 0x280 in the driver code.
-A configuration entry would look like:
-.Pp
-.Cd "device stl0 at isa? port 0x2a0 irq 10"
-.Pp
-This specifies an EasyConnection 8/32-AT with primary I/O address 0x2a0,
-secondary I/O address of 0x280 and IRQ 10.
-.Pp
-The ONboard, Brumby and EasyConnection 8/64
-families of boards use the
-.Nm stli
-driver.  The
-.Nm stli
-driver supports the ISA members of these families.
-.Pp
-ISA board configuration entries for the
-.Nm stli
-driver take the general form of:
-.Pp
-.Cd "device stliX at isa? port <io-addr> iomem <mem-addr> iosiz <size> flags <type>"
-.Pp
-.Ar X
-is the unit number assigned to the board.
-Any unique value between 0 and 7 is valid.
-.Pp
-The I/O address used by the board is specified by
-.Ar <io-addr> .
-Each of the different supported board types has restrictions on valid
-I/O addresses and also the amount of I/O space required varies between
-the boards.
-.Pp
-All boards using the
-.Nm stli
-driver require a shared memory region to operate.
-Depending on the board type the region required varies in size
-from 4 kbytes to 64 kbytes.  The size of the board region is specified
-by field
-.Ar <size>
-of the configuration entry, and the address of the region is specified by
-.Ar <mem-addr> .
-.Pp
-The flags field specifies the particular board type that this entry
-applies to.
-Not all board types are distinguishable by the driver at runtime,
-so this field is required by the driver.
-Valid board types are:
-.Bd -literal -offset indent
-BOARD NAME                     TYPE    I/O SIZE
-
-Brumby                           2     0x4000
-ONboard                                  4     0x10000
-ONboard/E                        7     0x10000
-EasyConnection 8/64-AT          23     0x1000
-.Ed
-.Pp
-Following are some examples of configuration entries for each of the
-boards supported by the
-.Nm stli
-driver. Each example also describes some important details about
-each of the board types.
-.Pp
-The EasyConnection 8/64-AT board requires 4 bytes of I/O address space and
-4 kbytes of memory space.
-A configuration entry would look like:
-.Pp
-.Cd "device stli0 at isa? port 0x2a0 iomem 0xcc000 iosiz 0x1000 flags 23"
-.Pp
-The flags field of this entry specifies that this is an
-EasyConnection 8/64-AT board.
-It is set to I/O address 0x2a0 and memory address 0xcc000.
-The
-.Ar iosiz
-parameter specifies a memory region size
-of 4 kbytes.
-.Pp
-Each ONboard ISA board requires 16 bytes of I/O space and a 64 kbyte
-section of memory address space.
-Valid ONboard I/O addresses are in the range 0x200 to 0x300.
-A configuration entry for an ONboard ISA would look like:
-.Pp
-.Cd "device stli0 at isa? port 0x240 iomem 0xd0000 iosiz 0x10000 flags 4"
-.Pp
-This entry specifies an ONboard ISA by setting flags to 4.
-It uses I/O address 0x240 and a memory region of 64 kbytes at memory
-address 0xd0000.
-.Pp
-Each Brumby board requires 16 bytes of I/O address space and a 4 kbyte
-region of shared memory space.
-The valid Brumby I/O addresses are in the range 0x300 to 0x400.
-The shared memory region of the Brumby must be in the 0xc0000 to
-0xdc000 region of the memory address space.
-A configuration entry for a Brumby would be like:
-.Pp
-.Cd "device stli0 at isa? port 0x360 iomem 0xc8000 iosiz 0x4000 flags 2"
-.Pp
-This specifies a Brumby board at I/O address 0x360 using a shared memory
-region at address 0xc8000.
-.Sh NOTES
-Each driver has a separate major number allocated,
-so even though the port device names are the same for each driver,
-the major number of the device node is different.
-.Pp
-The intelligent board types (ONboard, Brumby and
-EasyConnection 8/64 (ISA))
-require a firmware download before the ports will be operational.
-This is achieved by using the
-.Nm stlload
-command.
-See its manual page for details on usage.
 .Sh FILES
 .Bl -tag -width "/dev/staliomem?" -compact
 .It Pa /dev/ttyE?
@@ -264,18 +63,6 @@ stl standard callout devices
 stl initial-state callout devices
 .It Pa /dev/cualE?
 stl lock-state callout devices
-.It Pa /dev/ttyF?
-stli standard callin devices
-.It Pa /dev/ttyiF?
-stli initial-state callin devices
-.It Pa /dev/ttylF?
-stli lock-state callin devices
-.It Pa /dev/cuaF?
-stli standard callout devices
-.It Pa /dev/cuaiF?
-stli initial-state callout devices
-.It Pa /dev/cualF?
-stli lock-state callout devices
 .It Pa /dev/staliomem?
 board control device
 .El
@@ -288,19 +75,10 @@ So the second boards ports start at 64 and go through 127.
 .Xr termios 4 ,
 .Xr tty 4 ,
 .Xr comcontrol 8 ,
-.Xr stlload 8 ,
-.Xr stlstats 8 ,
-.Xr stlstty 8
+.Xr stlstats 8
 .Sh HISTORY
 This driver was originally developed by Greg Ungerer (gerg@stallion.com).
 .Sh BUGS
-The /dev/staliomem? device name is shared between both the
-.Nm
-and
-.Nm stli
-drivers.  This may cause confusion if both drivers are present in the
-system at the same time.
-.Pp
 Device names use integer suffixes, rather than the 0-9 a-z sequence
 that other drivers use.
 .Pp
index 4d34bbe..2e24923 100644 (file)
@@ -296,13 +296,11 @@ OpenSSL dynamic engines
 .It Pa libdata/
 misc. utility data files
 .Pp
-.Bl -tag -width ".Pa stallion/" -compact
+.Bl -tag -width ".Pa lint/" -compact
 .It Pa lint/
 various prebuilt lint libraries;
 see
 .Xr lint 1
-.It Pa stallion/
-holds the download firmware images
 .El
 .Pp
 .It Pa libexec/
index f1f282c..abf67c0 100644 (file)
@@ -28,7 +28,6 @@
 
 #include "use_cy.h"
 #include "use_stl.h"
-#include "use_stli.h"
 
 struct old_isa_driver {
        int                     type;
@@ -36,9 +35,6 @@ struct old_isa_driver {
 };
 
 extern struct isa_driver cydriver;
-extern struct isa_driver stldriver;
-extern struct isa_driver stlidriver;
-
 
 static struct old_isa_driver old_drivers[] = {
 
@@ -55,12 +51,6 @@ static struct old_isa_driver old_drivers[] = {
 #if NCY > 0
        { 0, &cydriver },
 #endif
-#if NSTL > 0
-       { 0, &stldriver },
-#endif
-#if NSTLI > 0
-       { 0, &stlidriver },
-#endif
 
 /* BIO */
 
index b1c4b5e..9563496 100644 (file)
@@ -1507,8 +1507,7 @@ device            "snd_uaudio"
 # nrp: Comtrol Rocketport(ISA) - single card
 # si: Specialix SI/XIO 4-32 port terminal multiplexor
 # spic: Sony Programmable I/O controller (VAIO notebooks)
-# stl: Stallion EasyIO and EasyConnection 8/32 (ISA and PCI), EasyConnection 8/64 PCI
-# stli: Stallion EasyConnection 8/64 ISA, ONboard, Brumby (intelligent)
+# stl: Stallion EasyIO and EasyConnection 8/32 (PCI), EasyConnection 8/64 PCI
 # nmdm: nullmodem terminal driver (see nmdm(4))
 
 # Notes on APM
@@ -1550,17 +1549,8 @@ device           "snd_uaudio"
 #  The Rev 2 host cards use a 32K chunk, on a 32K boundary.
 #  The cards can use an IRQ of 11, 12 or 15.
 
-# Notes on the Stallion stl and stli drivers:
-#  See src/sys/platform/pc32/isa/README.stl for complete instructions.
+# Notes on the Stallion stl driver:
 #  This is version 2.0.0, unsupported by Stallion.
-#  The stl driver has a secondary IO port hard coded at 0x280.  You need
-#     to change src/sys/dev/serial/stl/stallion.c if you reconfigure this on the boards.
-#  The "flags" and "iosiz" settings on the stli driver depend on the board:
-#      EasyConnection 8/64 ISA:     flags 23         iosiz 0x1000
-#      ONboard ISA:                 flags 4          iosiz 0x10000
-#      Brumby:                      flags 2          iosiz 0x4000
-#      Stallion:                    flags 1          iosiz 0x10000
-#  For the PCI cards, "device stl" will suffice.
 
 device         apm0
 device         ecc
@@ -1569,8 +1559,7 @@ device            cy0     at isa? irq 10 iomem 0xd4000 iosiz 0x2000
 device         nrp
 device         si0     at isa? iomem 0xd0000 irq 12
 device         spic0   at isa? irq 0 port 0x10a0
-device         stl0    at isa? port 0x2a0 irq 10
-device         stli0   at isa? port 0x2a0 iomem 0xcc000 flags 23 iosiz 0x1000
+device         stl
 # nullmodem terminal driver
 device         nmdm
 
index 37d24e4..ede5ef7 100644 (file)
@@ -40,7 +40,6 @@
 
 #define        TTYDEFCHARS     1
 
-#include "use_pci.h"
 #include "opt_compat.h"
 
 #include <sys/param.h>
 #include <sys/conf.h>
 #include <sys/fcntl.h>
 #include <sys/thread2.h>
-#include <bus/isa/isa_device.h>
 #include <machine_base/isa/ic/scd1400.h>
 #include <machine_base/isa/ic/sc26198.h>
 #include <machine/comstats.h>
 
-#if NPCI > 0
 #include <bus/pci/pcivar.h>
 #include <bus/pci/pcireg.h>
-#endif
 
 #undef STLDEBUG
 
 /*****************************************************************************/
 
 /*
- *     Define the version level of the kernel - so we can compile in the
- *     appropriate bits of code. By default this will compile for a 2.1
- *     level kernel.
- */
-#define        VFREEBSD        220
-
-#if VFREEBSD >= 220
-#define        STATIC          static
-#else
-#define        STATIC
-#endif
-
-/*****************************************************************************/
-
-/*
  *     Define different board types. At the moment I have only declared
  *     those boards that this driver supports. But I will use the standard
  *     "assigned" board numbers. In the future this driver will support
 #define        BRD_ECH64PCI    27
 #define        BRD_EASYIOPCI   28
 
-/*
- *     When using the BSD "config" stuff there is no easy way to specifiy
- *     a secondary IO address region. So it is hard wired here. Also the
- *     shared interrupt information is hard wired here...
- */
-static unsigned int    stl_ioshared = 0x280;
-static unsigned int    stl_irqshared = 0;
-
 /*****************************************************************************/
 
 /*
@@ -150,7 +123,6 @@ static unsigned int stl_irqshared = 0;
 static const char      stl_drvname[] = "stl";
 static const char      stl_longdrvname[] = "Stallion Multiport Serial Driver";
 static const char      stl_drvversion[] = "2.0.0";
-static int             stl_brdprobed[STL_MAXBRDS];
 
 static int             stl_nrbrds = 0;
 static int             stl_doingtimeout = 0;
@@ -473,12 +445,9 @@ static char     stl_unwanted[SC26198_RXFIFOSIZE];
  *     externally visible functions.
  */
 
-static int     stlprobe(struct isa_device *idp);
-static int     stlattach(struct isa_device *idp);
-
-STATIC d_open_t        stlopen;
-STATIC d_close_t       stlclose;
-STATIC d_ioctl_t       stlioctl;
+static d_open_t        stlopen;
+static d_close_t       stlclose;
+static d_ioctl_t       stlioctl;
 
 /*
  *     Internal function prototypes.
@@ -514,11 +483,9 @@ static int stl_clrportstats(stlport_t *portp, caddr_t data);
 static stlport_t *stl_getport(int brdnr, int panelnr, int portnr);
 static void    stlintr(void *);
 
-#if NPCI > 0
 static const char *stlpciprobe(pcici_t tag, pcidi_t type);
 static void    stlpciattach(pcici_t tag, int unit);
 static void    stlpciintr(void * arg);
-#endif
 
 /*
  *     CD1400 uart specific handling functions.
@@ -712,17 +679,6 @@ static unsigned int        sc26198_baudtable[] = {
 /*****************************************************************************/
 
 /*
- *     Declare the driver isa structure.
- */
-struct isa_driver      stldriver = {
-       stlprobe, stlattach, "stl"
-};
-
-/*****************************************************************************/
-
-#if NPCI > 0
-
-/*
  *     Declare the driver pci structure.
  */
 static unsigned long   stl_count;
@@ -737,12 +693,8 @@ static struct pci_device   stlpcidriver = {
 
 COMPAT_PCI_DRIVER (stlpci, stlpcidriver);
 
-#endif
-
 /*****************************************************************************/
 
-#if VFREEBSD >= 220
-
 /*
  *     FreeBSD-2.2+ kernel linkage.
  */
@@ -765,51 +717,6 @@ static void stl_drvinit(void *unused)
 
 SYSINIT(sidev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,stl_drvinit,NULL)
 
-#endif
-
-/*****************************************************************************/
-
-/*
- *     Probe for some type of EasyIO or EasyConnection 8/32 board at
- *     the supplied address. All we do is check if we can find the
- *     board ID for the board... (Note, PCI boards not checked here,
- *     they are done in the stlpciprobe() routine).
- */
-
-static int stlprobe(struct isa_device *idp)
-{
-       unsigned int    status;
-
-#if STLDEBUG
-       kprintf("stlprobe(idp=%x): unit=%d iobase=%x\n", (int) idp,
-               idp->id_unit, idp->id_iobase);
-#endif
-
-       if (idp->id_unit > STL_MAXBRDS)
-               return(0);
-
-       status = inb(idp->id_iobase + 1);
-       if ((status & ECH_IDBITMASK) == ECH_ID) {
-               stl_brdprobed[idp->id_unit] = BRD_ECH;
-               return(1);
-       }
-
-       status = inb(idp->id_iobase + 2);
-       switch (status & EIO_IDBITMASK) {
-       case EIO_8PORTRS:
-       case EIO_8PORTM:
-       case EIO_8PORTDI:
-       case EIO_4PORTRS:
-       case EIO_MK3:
-               stl_brdprobed[idp->id_unit] = BRD_EASYIO;
-               return(1);
-       default:
-               break;
-       }
-       
-       return(0);
-}
-
 /*****************************************************************************/
 
 /*
@@ -831,141 +738,6 @@ static int stl_findfreeunit(void)
 /*****************************************************************************/
 
 /*
- *     Allocate resources for and initialize the specified board.
- */
-
-static int stlattach(struct isa_device *idp)
-{
-       stlbrd_t        *brdp;
-       int             boardnr, portnr, minor_dev;
-
-#if STLDEBUG
-       kprintf("stlattach(idp=%p): unit=%d iobase=%x\n", (void *) idp,
-               idp->id_unit, idp->id_iobase);
-#endif
-
-/*     idp->id_intr = (inthand2_t *)stlintr; */
-
-       brdp = kmalloc(sizeof(stlbrd_t), M_TTYS, M_WAITOK | M_ZERO);
-
-       if ((brdp->brdnr = stl_findfreeunit()) < 0) {
-               kprintf("STALLION: too many boards found, max=%d\n",
-                       STL_MAXBRDS);
-               return(0);
-       }
-       if (brdp->brdnr >= stl_nrbrds)
-               stl_nrbrds = brdp->brdnr + 1;
-
-       brdp->unitid = idp->id_unit;
-       brdp->brdtype = stl_brdprobed[idp->id_unit];
-       brdp->ioaddr1 = idp->id_iobase;
-       brdp->ioaddr2 = stl_ioshared;
-       brdp->irq = ffs(idp->id_irq) - 1;
-       brdp->irqtype = stl_irqshared;
-       stl_brdinit(brdp);
-
-       /* register devices for DEVFS */
-       boardnr = brdp->brdnr;
-       make_dev(&stl_ops, boardnr + 0x1000000, UID_ROOT, GID_WHEEL,
-                0600, "staliomem%d", boardnr);
-
-       for (portnr = 0, minor_dev = boardnr * 0x100000;
-             portnr < 32; portnr++, minor_dev++) {
-               /* hw ports */
-               make_dev(&stl_ops, minor_dev,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttyE%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 32,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttyiE%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 64,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttylE%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 128,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cue%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 160,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cuie%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 192,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cule%d", portnr + (boardnr * 64));
-
-               /* sw ports */
-               make_dev(&stl_ops, minor_dev + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttyE%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 32 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttyiE%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 64 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttylE%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 128 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cue%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 160 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cuie%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 192 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cule%d", portnr + (boardnr * 64) + 32);
-       }
-       boardnr = brdp->brdnr;
-       make_dev(&stl_ops, boardnr + 0x1000000, UID_ROOT, GID_WHEEL,
-                0600, "staliomem%d", boardnr);
-
-       for (portnr = 0, minor_dev = boardnr * 0x100000;
-             portnr < 32; portnr++, minor_dev++) {
-               /* hw ports */
-               make_dev(&stl_ops, minor_dev,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttyE%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 32,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttyiE%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 64,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttylE%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 128,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cue%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 160,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cuie%d", portnr + (boardnr * 64));
-               make_dev(&stl_ops, minor_dev + 192,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cule%d", portnr + (boardnr * 64));
-
-               /* sw ports */
-               make_dev(&stl_ops, minor_dev + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttyE%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 32 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttyiE%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 64 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "ttylE%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 128 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cue%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 160 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cuie%d", portnr + (boardnr * 64) + 32);
-               make_dev(&stl_ops, minor_dev + 192 + 0x10000,
-                        UID_ROOT, GID_WHEEL, 0600,
-                        "cule%d", portnr + (boardnr * 64) + 32);
-       }
-
-       return(1);
-}
-
-/*****************************************************************************/
-
-#if NPCI > 0
-
-/*
  *     Probe specifically for the PCI boards. We need to be a little
  *     carefull here, since it looks sort like a Nat Semi IDE chip...
  */
@@ -1134,11 +906,9 @@ void stlpciattach(pcici_t tag, int unit)
        }
 }
 
-#endif
-
 /*****************************************************************************/
 
-STATIC int stlopen(struct dev_open_args *ap)
+static int stlopen(struct dev_open_args *ap)
 {
        cdev_t dev = ap->a_head.a_dev;
        struct tty      *tp;
@@ -1257,7 +1027,7 @@ stlopen_end:
 
 /*****************************************************************************/
 
-STATIC int stlclose(struct dev_close_args *ap)
+static int stlclose(struct dev_close_args *ap)
 {
        cdev_t dev = ap->a_head.a_dev;
        struct tty      *tp;
@@ -1289,9 +1059,7 @@ STATIC int stlclose(struct dev_close_args *ap)
 
 /*****************************************************************************/
 
-#if VFREEBSD >= 220
-
-STATIC void stl_stop(struct tty *tp, int rw)
+static void stl_stop(struct tty *tp, int rw)
 {
 #if STLDEBUG
        kprintf("stl_stop(tp=%x,rw=%x)\n", (int) tp, rw);
@@ -1300,23 +1068,9 @@ STATIC void stl_stop(struct tty *tp, int rw)
        stl_flush((stlport_t *) tp, rw);
 }
 
-#else
-
-STATIC int stlstop(struct tty *tp, int rw)
-{
-#if STLDEBUG
-       kprintf("stlstop(tp=%x,rw=%x)\n", (int) tp, rw);
-#endif
-
-       stl_flush((stlport_t *) tp, rw);
-       return(0);
-}
-
-#endif
-
 /*****************************************************************************/
 
-STATIC int stlioctl(struct dev_ioctl_args *ap)
+static int stlioctl(struct dev_ioctl_args *ap)
 {
        cdev_t dev = ap->a_head.a_dev;
        u_long cmd = ap->a_cmd;
@@ -1499,7 +1253,7 @@ STATIC int stlioctl(struct dev_ioctl_args *ap)
  *     pointer. Return NULL if the device number is not a valid port.
  */
 
-STATIC stlport_t *stl_dev2port(cdev_t dev)
+static stlport_t *stl_dev2port(cdev_t dev)
 {
        stlbrd_t        *brdp;
 
@@ -1623,20 +1377,6 @@ static void stl_start(struct tty *tp)
                        stl_flowcontrol(portp, 1, -1);
        }
 
-#if VFREEBSD == 205
-/*
- *     Check if the output cooked clist buffers are near empty, wake up
- *     the line discipline to fill it up.
- */
-       if (tp->t_outq.c_cc <= tp->t_lowat) {
-               if (tp->t_state & TS_ASLEEP) {
-                       tp->t_state &= ~TS_ASLEEP;
-                       wakeup(&tp->t_outq);
-               }
-               KNOTE(&tp->t_wsel.si_note, 0);
-       }
-#endif
-
        if (tp->t_state & (TS_TIMEOUT | TS_TTSTOP)) {
                crit_exit();
                return;
@@ -1686,12 +1426,10 @@ static void stl_start(struct tty *tp)
                tp->t_state |= TS_BUSY;
        }
 
-#if VFREEBSD != 205
 /*
  *     Do any writer wakeups.
  */
        ttwwakeup(tp);
-#endif
 
        crit_exit();
 }
@@ -1775,15 +1513,11 @@ void stlintr(void *arg)
 
 /*****************************************************************************/
 
-#if NPCI > 0
-
 static void stlpciintr(void *arg)
 {
        stlintr(NULL);
 }
 
-#endif
-
 /*****************************************************************************/
 
 /*
diff --git a/sys/dev/serial/stli/istallion.c b/sys/dev/serial/stli/istallion.c
deleted file mode 100644 (file)
index 7a9909e..0000000
+++ /dev/null
@@ -1,3412 +0,0 @@
-/*****************************************************************************/
-
-/*
- * istallion.c  -- stallion intelligent multiport serial driver.
- *
- * Copyright (c) 1994-1998 Greg Ungerer (gerg@stallion.oz.au).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by Greg Ungerer.
- * 4. Neither the name of the author nor the names of any co-contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/i386/isa/istallion.c,v 1.36.2.2 2001/08/30 12:29:57 murray Exp $
- */
-
-/*****************************************************************************/
-
-#include "opt_compat.h"
-
-#define        TTYDEFCHARS     1
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
-#include <sys/tty.h>
-#include <sys/proc.h>
-#include <sys/priv.h>
-#include <sys/conf.h>
-#include <sys/fcntl.h>
-#include <sys/uio.h>
-#include <sys/thread2.h>
-#include <machine/clock.h>
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <bus/isa/isa_device.h>
-#include <machine/cdk.h>
-#include <machine/comstats.h>
-
-#undef STLDEBUG
-
-/*****************************************************************************/
-
-/*
- *     Define the version level of the kernel - so we can compile in the
- *     appropriate bits of code. By default this will compile for a 2.1
- *     level kernel.
- */
-#define        VFREEBSD        220
-
-#if VFREEBSD >= 220
-#define        STATIC          static
-#else
-#define        STATIC
-#endif
-
-/*****************************************************************************/
-
-/*
- *     Define different board types. Not all of the following board types
- *     are supported by this driver. But I will use the standard "assigned"
- *     board numbers. Currently supported boards are abbreviated as:
- *     ECP = EasyConnection 8/64, ONB = ONboard, BBY = Brumby and
- *     STAL = Stallion.
- */
-#define        BRD_UNKNOWN     0
-#define        BRD_STALLION    1
-#define        BRD_BRUMBY4     2
-#define        BRD_ONBOARD2    3
-#define        BRD_ONBOARD     4
-#define        BRD_BRUMBY8     5
-#define        BRD_BRUMBY16    6
-#define        BRD_ONBOARDE    7
-#define        BRD_ONBOARD32   9
-#define        BRD_ONBOARD2_32 10
-#define        BRD_ONBOARDRS   11
-#define        BRD_EASYIO      20
-#define        BRD_ECH         21
-#define        BRD_ECHMC       22
-#define        BRD_ECP         23
-#define BRD_ECPE       24
-#define        BRD_ECHPCI      26
-#define        BRD_ECH64PCI    27
-#define        BRD_EASYIOPCI   28
-
-#define        BRD_BRUMBY      BRD_BRUMBY4
-
-/*****************************************************************************/
-
-/*
- *     Define important driver limitations.
- */
-#define        STL_MAXBRDS             8
-#define        STL_MAXPANELS           4
-#define        STL_PORTSPERPANEL       16
-#define        STL_PORTSPERBRD         64
-
-#define        STL_MAXCHANS            STL_PORTSPERBRD
-
-
-/*
- *     Define the important minor number break down bits. These have been
- *     chosen to be "compatible" with the standard sio driver minor numbers.
- *     Extra high bits are used to distinguish between boards and also for
- *     really high port numbers (> 32).
- */
-#define        STL_CALLOUTDEV  0x80
-#define        STL_CTRLLOCK    0x40
-#define        STL_CTRLINIT    0x20
-#define        STL_CTRLDEV     (STL_CTRLLOCK | STL_CTRLINIT)
-
-#define        STL_MEMDEV      0x07000000
-
-#define        STL_DEFSPEED    TTYDEF_SPEED
-#define        STL_DEFCFLAG    (CS8 | CREAD | HUPCL)
-
-/*****************************************************************************/
-
-/*
- *     Define our local driver identity first. Set up stuff to deal with
- *     all the local structures required by a serial tty driver.
- */
-static char            stli_drvname[] = "stli";
-static char const      stli_drvtitle[] = "Stallion Multiport Serial Driver";
-static char const      stli_drvversion[] = "2.0.0";
-
-static int     stli_nrbrds = 0;
-static int     stli_doingtimeout = 0;
-static struct callout  stli_poll_ch;
-
-/*
- *     Define some macros to use to class define boards.
- */
-#define        BRD_ISA         0x1
-#define        BRD_EISA        0x2
-#define        BRD_PCI         0x8
-
-static unsigned char   stli_stliprobed[STL_MAXBRDS];
-
-/*****************************************************************************/
-
-/*
- *     Define a set of structures to hold all the board/panel/port info
- *     for our ports. These will be dynamically allocated as required at
- *     driver initialization time.
- */
-
-/*
- *     Port and board structures to hold status info about each object.
- *     The board structure contains pointers to structures for each port
- *     connected to it. Panels are not distinguished here, since
- *     communication with the slave board will always be on a per port
- *     basis.
- */
-typedef struct {
-       struct tty      tty;
-       int             portnr;
-       int             panelnr;
-       int             brdnr;
-       int             ioaddr;
-       int             callout;
-       int             devnr;
-       int             dtrwait;
-       int             dotimestamp;
-       int             waitopens;
-       int             hotchar;
-       int             rc;
-       int             argsize;
-       void            *argp;
-       unsigned int    state;
-       unsigned int    sigs;
-       struct termios  initintios;
-       struct termios  initouttios;
-       struct termios  lockintios;
-       struct termios  lockouttios;
-       struct timeval  timestamp;
-       asysigs_t       asig;
-       unsigned long   addr;
-       unsigned long   rxlost;
-       unsigned long   rxoffset;
-       unsigned long   txoffset;
-       unsigned long   pflag;
-       unsigned int    rxsize;
-       unsigned int    txsize;
-       unsigned char   reqidx;
-       unsigned char   reqbit;
-       unsigned char   portidx;
-       unsigned char   portbit;
-       struct callout  dtr_ch;
-} stliport_t;
-
-/*
- *     Use a structure of function pointers to do board level operations.
- *     These include, enable/disable, paging shared memory, interrupting, etc.
- */
-typedef struct stlibrd {
-       int             brdnr;
-       int             brdtype;
-       int             unitid;
-       int             state;
-       int             nrpanels;
-       int             nrports;
-       int             nrdevs;
-       unsigned int    iobase;
-       unsigned long   paddr;
-       void            *vaddr;
-       int             memsize;
-       int             pagesize;
-       int             hostoffset;
-       int             slaveoffset;
-       int             bitsize;
-       int             confbits;
-       void            (*init)(struct stlibrd *brdp);
-       void            (*enable)(struct stlibrd *brdp);
-       void            (*reenable)(struct stlibrd *brdp);
-       void            (*disable)(struct stlibrd *brdp);
-       void            (*intr)(struct stlibrd *brdp);
-       void            (*reset)(struct stlibrd *brdp);
-       char            *(*getmemptr)(struct stlibrd *brdp,
-                               unsigned long offset, int line);
-       int             panels[STL_MAXPANELS];
-       int             panelids[STL_MAXPANELS];
-       stliport_t      *ports[STL_PORTSPERBRD];
-} stlibrd_t;
-
-static stlibrd_t       *stli_brds[STL_MAXBRDS];
-
-static int             stli_shared = 0;
-
-/*
- *     Keep a local char buffer for processing chars into the LD. We
- *     do this to avoid copying from the boards shared memory one char
- *     at a time.
- */
-static int             stli_rxtmplen;
-static stliport_t      *stli_rxtmpport;
-static char            stli_rxtmpbuf[TTYHOG];
-
-/*
- *     Define global stats structures. Not used often, and can be re-used
- *     for each stats call.
- */
-static comstats_t      stli_comstats;
-static combrd_t                stli_brdstats;
-static asystats_t      stli_cdkstats;
-
-/*
- *     Per board state flags. Used with the state field of the board struct.
- *     Not really much here... All we need to do is keep track of whether
- *     the board has been detected, and whether it is actully running a slave
- *     or not.
- */
-#define        BST_FOUND       0x1
-#define        BST_STARTED     0x2
-
-/*
- *     Define the set of port state flags. These are marked for internal
- *     state purposes only, usually to do with the state of communications
- *     with the slave. They need to be updated atomically.
- */
-#define        ST_INITIALIZING 0x1
-#define        ST_INITIALIZED  0x2
-#define        ST_OPENING      0x4
-#define        ST_CLOSING      0x8
-#define        ST_CMDING       0x10
-#define        ST_RXING        0x20
-#define        ST_TXBUSY       0x40
-#define        ST_DOFLUSHRX    0x80
-#define        ST_DOFLUSHTX    0x100
-#define        ST_DOSIGS       0x200
-#define        ST_GETSIGS      0x400
-#define        ST_DTRWAIT      0x800
-
-/*
- *     Define an array of board names as printable strings. Handy for
- *     referencing boards when printing trace and stuff.
- */
-static char    *stli_brdnames[] = {
-       "Unknown",
-       "Stallion",
-       "Brumby",
-       "ONboard-MC",
-       "ONboard",
-       "Brumby",
-       "Brumby",
-       "ONboard-EI",
-       NULL,
-       "ONboard",
-       "ONboard-MC",
-       "ONboard-MC",
-       NULL,
-       NULL,
-       NULL,
-       NULL,
-       NULL,
-       NULL,
-       NULL,
-       NULL,
-       "EasyIO",
-       "EC8/32-AT",
-       "EC8/32-MC",
-       "EC8/64-AT",
-       "EC8/64-EI",
-       "EC8/64-MC",
-       "EC8/32-PCI",
-};
-
-/*****************************************************************************/
-
-/*
- *     Hardware configuration info for ECP boards. These defines apply
- *     to the directly accessable io ports of the ECP.
- */
-#define        ECP_IOSIZE      4
-#define        ECP_MEMSIZE     (128 * 1024)
-#define        ECP_ATPAGESIZE  (4 * 1024)
-#define        ECP_EIPAGESIZE  (64 * 1024)
-
-/*
- *     Important defines for the ISA class of ECP board.
- */
-#define        ECP_ATIREG      0
-#define        ECP_ATCONFR     1
-#define        ECP_ATMEMAR     2
-#define        ECP_ATMEMPR     3
-#define        ECP_ATSTOP      0x1
-#define        ECP_ATINTENAB   0x10
-#define        ECP_ATENABLE    0x20
-#define        ECP_ATDISABLE   0x00
-#define        ECP_ATADDRMASK  0x3f000
-#define        ECP_ATADDRSHFT  12
-
-/*
- *     Important defines for the Micro-channel class of ECP board.
- *     (It has a lot in common with the ISA boards.)
- */
-#define        ECP_MCIREG      0
-#define        ECP_MCCONFR     1
-#define        ECP_MCSTOP      0x20
-#define        ECP_MCENABLE    0x80
-#define        ECP_MCDISABLE   0x00
-
-/*
- *     Hardware configuration info for ONboard and Brumby boards. These
- *     defines apply to the directly accessable io ports of these boards.
- */
-#define        ONB_IOSIZE      16
-#define        ONB_MEMSIZE     (64 * 1024)
-#define        ONB_ATPAGESIZE  (64 * 1024)
-#define        ONB_MCPAGESIZE  (64 * 1024)
-#define        ONB_EIMEMSIZE   (128 * 1024)
-#define        ONB_EIPAGESIZE  (64 * 1024)
-
-/*
- *     Important defines for the ISA class of ONboard board.
- */
-#define        ONB_ATIREG      0
-#define        ONB_ATMEMAR     1
-#define        ONB_ATCONFR     2
-#define        ONB_ATSTOP      0x4
-#define        ONB_ATENABLE    0x01
-#define        ONB_ATDISABLE   0x00
-#define        ONB_ATADDRMASK  0xff0000
-#define        ONB_ATADDRSHFT  16
-
-#define        ONB_HIMEMENAB   0x02
-
-/*
- *     Important defines for the Brumby boards. They are pretty simple,
- *     there is not much that is programmably configurable.
- */
-#define        BBY_IOSIZE      16
-#define        BBY_MEMSIZE     (64 * 1024)
-#define        BBY_PAGESIZE    (16 * 1024)
-
-#define        BBY_ATIREG      0
-#define        BBY_ATCONFR     1
-#define        BBY_ATSTOP      0x4
-
-/*
- *     Important defines for the Stallion boards. They are pretty simple,
- *     there is not much that is programmably configurable.
- */
-#define        STAL_IOSIZE     16
-#define        STAL_MEMSIZE    (64 * 1024)
-#define        STAL_PAGESIZE   (64 * 1024)
-
-/*
- *     Define the set of status register values for EasyConnection panels.
- *     The signature will return with the status value for each panel. From
- *     this we can determine what is attached to the board - before we have
- *     actually down loaded any code to it.
- */
-#define        ECH_PNLSTATUS   2
-#define        ECH_PNL16PORT   0x20
-#define        ECH_PNLIDMASK   0x07
-#define        ECH_PNLXPID     0x40
-#define        ECH_PNLINTRPEND 0x80
-
-/*
- *     Define some macros to do things to the board. Even those these boards
- *     are somewhat related there is often significantly different ways of
- *     doing some operation on it (like enable, paging, reset, etc). So each
- *     board class has a set of functions which do the commonly required
- *     operations. The macros below basically just call these functions,
- *     generally checking for a NULL function - which means that the board
- *     needs nothing done to it to achieve this operation!
- */
-#define        EBRDINIT(brdp)                                  \
-       if (brdp->init != NULL)                         \
-               (* brdp->init)(brdp)
-
-#define        EBRDENABLE(brdp)                                \
-       if (brdp->enable != NULL)                       \
-               (* brdp->enable)(brdp);
-
-#define        EBRDDISABLE(brdp)                               \
-       if (brdp->disable != NULL)                      \
-               (* brdp->disable)(brdp);
-
-#define        EBRDINTR(brdp)                                  \
-       if (brdp->intr != NULL)                         \
-               (* brdp->intr)(brdp);
-
-#define        EBRDRESET(brdp)                                 \
-       if (brdp->reset != NULL)                        \
-               (* brdp->reset)(brdp);
-
-#define        EBRDGETMEMPTR(brdp,offset)                      \
-       (* brdp->getmemptr)(brdp, offset, __LINE__)
-
-/*
- *     Define the maximal baud rate.
- */
-#define        STL_MAXBAUD     230400
-
-/*****************************************************************************/
-
-/*
- *     Define macros to extract a brd and port number from a minor number.
- *     This uses the extended minor number range in the upper 2 bytes of
- *     the device number. This gives us plenty of minor numbers to play
- *     with...
- */
-#define        MKDEV2BRD(m)    ((minor(m) & 0x00700000) >> 20)
-#define        MKDEV2PORT(m)   ((minor(m) & 0x1f) | ((minor(m) & 0x00010000) >> 11))
-
-/*
- *     Define some handy local macros...
- */
-#ifndef        MIN
-#define        MIN(a,b)        (((a) <= (b)) ? (a) : (b))
-#endif
-
-/*****************************************************************************/
-
-/*
- *     Declare all those functions in this driver!  First up is the set of
- *     externally visible functions.
- */
-static int     stliprobe(struct isa_device *idp);
-static int     stliattach(struct isa_device *idp);
-
-STATIC d_open_t        stliopen;
-STATIC d_close_t       stliclose;
-STATIC d_read_t        stliread;
-STATIC d_write_t       stliwrite;
-STATIC d_ioctl_t       stliioctl;
-
-/*
- *     Internal function prototypes.
- */
-static stliport_t *stli_dev2port(cdev_t dev);
-static int     stli_isaprobe(struct isa_device *idp);
-static int     stli_brdinit(stlibrd_t *brdp);
-static int     stli_brdattach(stlibrd_t *brdp);
-static int     stli_initecp(stlibrd_t *brdp);
-static int     stli_initonb(stlibrd_t *brdp);
-static int     stli_initports(stlibrd_t *brdp);
-static int     stli_startbrd(stlibrd_t *brdp);
-static void    stli_poll(void *arg);
-static __inline void   stli_brdpoll(stlibrd_t *brdp, volatile cdkhdr_t *hdrp);
-static __inline int    stli_hostcmd(stlibrd_t *brdp, stliport_t *portp);
-static __inline void   stli_dodelaycmd(stliport_t *portp,
-                                       volatile cdkctrl_t *cp);
-static void    stli_mkasysigs(asysigs_t *sp, int dtr, int rts);
-static long    stli_mktiocm(unsigned long sigvalue);
-static void    stli_rxprocess(stlibrd_t *brdp, stliport_t *portp);
-static void    stli_flush(stliport_t *portp, int flag);
-static void    stli_start(struct tty *tp);
-static void    stli_stop(struct tty *tp, int rw);
-static int     stli_param(struct tty *tp, struct termios *tiosp);
-static void    stli_ttyoptim(stliport_t *portp, struct termios *tiosp);
-static void    stli_dtrwakeup(void *arg);
-static int     stli_initopen(stliport_t *portp);
-static int     stli_shutdownclose(stliport_t *portp);
-static int     stli_rawopen(stlibrd_t *brdp, stliport_t *portp,
-                       unsigned long arg, int wait);
-static int     stli_rawclose(stlibrd_t *brdp, stliport_t *portp,
-                       unsigned long arg, int wait);
-static int     stli_cmdwait(stlibrd_t *brdp, stliport_t *portp,
-                       unsigned long cmd, void *arg, int size, int copyback);
-static void    stli_sendcmd(stlibrd_t *brdp, stliport_t *portp,
-                       unsigned long cmd, void *arg, int size, int copyback);
-static void    stli_mkasyport(stliport_t *portp, asyport_t *pp,
-                       struct termios *tiosp);
-static int     stli_memrw(cdev_t dev, struct uio *uiop, int flag);
-static int     stli_memioctl(cdev_t dev, unsigned long cmd, caddr_t data,
-                       int flag);
-static int     stli_getbrdstats(caddr_t data);
-static int     stli_getportstats(stliport_t *portp, caddr_t data);
-static int     stli_clrportstats(stliport_t *portp, caddr_t data);
-static stliport_t *stli_getport(int brdnr, int panelnr, int portnr);
-
-static void    stli_ecpinit(stlibrd_t *brdp);
-static void    stli_ecpenable(stlibrd_t *brdp);
-static void    stli_ecpdisable(stlibrd_t *brdp);
-static void    stli_ecpreset(stlibrd_t *brdp);
-static char    *stli_ecpgetmemptr(stlibrd_t *brdp, unsigned long offset,
-                       int line);
-static void    stli_ecpintr(stlibrd_t *brdp);
-static void    stli_onbinit(stlibrd_t *brdp);
-static void    stli_onbenable(stlibrd_t *brdp);
-static void    stli_onbdisable(stlibrd_t *brdp);
-static void    stli_onbreset(stlibrd_t *brdp);
-static char    *stli_onbgetmemptr(stlibrd_t *brdp, unsigned long offset,
-                       int line);
-static void    stli_bbyinit(stlibrd_t *brdp);
-static void    stli_bbyreset(stlibrd_t *brdp);
-static char    *stli_bbygetmemptr(stlibrd_t *brdp, unsigned long offset,
-                       int line);
-static void    stli_stalinit(stlibrd_t *brdp);
-static void    stli_stalreset(stlibrd_t *brdp);
-static char    *stli_stalgetmemptr(stlibrd_t *brdp, unsigned long offset,
-                       int line);
-
-/*****************************************************************************/
-
-/*
- *     Declare the driver isa structure.
- */
-struct isa_driver      stlidriver = {
-       stliprobe, stliattach, stli_drvname
-};
-
-/*****************************************************************************/
-
-#if VFREEBSD >= 220
-
-/*
- *     FreeBSD-2.2+ kernel linkage.
- */
-
-static struct dev_ops stli_ops = {
-       { stli_drvname, 0, D_TTY },
-       .d_open =       stliopen,
-       .d_close =      stliclose,
-       .d_read =       stliread,
-       .d_write =      stliwrite,
-       .d_ioctl =      stliioctl,
-       .d_kqfilter =   ttykqfilter,
-       .d_revoke =     ttyrevoke
-};
-
-#endif
-
-/*****************************************************************************/
-
-static stlibrd_t *stli_brdalloc(void)
-{
-       stlibrd_t       *brdp;
-
-       brdp = kmalloc(sizeof(stlibrd_t), M_TTYS, M_WAITOK | M_ZERO);
-       return(brdp);
-}
-
-/*****************************************************************************/
-
-/*
- *     Find an available internal board number (unit number). The problem
- *     is that the same unit numbers can be assigned to different class
- *     boards - but we only want to maintain one setup board structures.
- */
-
-static int stli_findfreeunit(void)
-{
-       int     i;
-
-       for (i = 0; (i < STL_MAXBRDS); i++)
-               if (stli_brds[i] == NULL)
-                       break;
-       return((i >= STL_MAXBRDS) ? -1 : i);
-}
-
-/*****************************************************************************/
-
-/*
- *     Try and determine the ISA board type. Hopefully the board
- *     configuration entry will help us out, using the flags field.
- *     If not, we may ne be able to determine the board type...
- */
-
-static int stli_isaprobe(struct isa_device *idp)
-{
-       int     btype;
-
-#if STLDEBUG
-       kprintf("stli_isaprobe(idp=%x): unit=%d iobase=%x flags=%x\n",
-               (int) idp, idp->id_unit, idp->id_iobase, idp->id_flags);
-#endif
-
-       switch (idp->id_flags) {
-       case BRD_STALLION:
-       case BRD_BRUMBY4:
-       case BRD_BRUMBY8:
-       case BRD_BRUMBY16:
-       case BRD_ONBOARD:
-       case BRD_ONBOARD32:
-       case BRD_ECP:
-               btype = idp->id_flags;
-               break;
-       default:
-               btype = 0;
-               break;
-       }
-       return(btype);
-}
-
-/*****************************************************************************/
-
-/*
- *     Probe for a board. This is involved, since we need to enable the
- *     shared memory region to see if the board is really there or not...
- */
-
-static int stliprobe(struct isa_device *idp)
-{
-       stlibrd_t       *brdp;
-       int             btype, bclass;
-
-#if STLDEBUG
-       kprintf("stliprobe(idp=%x): unit=%d iobase=%x flags=%x\n", (int) idp,
-               idp->id_unit, idp->id_iobase, idp->id_flags);
-#endif
-
-       if (idp->id_unit > STL_MAXBRDS)
-               return(0);
-
-/*
- *     First up determine what bus type of board we might be dealing
- *     with.
- */
-       bclass = 0;
-       if ((idp->id_iobase > 0) && (idp->id_iobase < 0x400))
-               bclass |= BRD_ISA;
-
-       if ((bclass == 0) || (idp->id_iobase == 0))
-               return(0);
-
-/*
- *     Based on the board bus type, try and figure out what it might be...
- */
-       btype = 0;
-       if (bclass & BRD_ISA)
-               btype = stli_isaprobe(idp);
-       if (btype == 0)
-               return(0);
-
-/*
- *     Go ahead and try probing for the shared memory region now.
- *     This way we will really know if the board is here...
- */
-       if ((brdp = stli_brdalloc()) == NULL)
-               return(0);
-
-       brdp->brdnr = stli_findfreeunit();
-       brdp->brdtype = btype;
-       brdp->unitid = idp->id_unit;
-       brdp->iobase = idp->id_iobase;
-       brdp->vaddr = idp->id_maddr;
-       brdp->paddr = vtophys(idp->id_maddr);
-
-#if STLDEBUG
-       kprintf("%s(%d): btype=%x unit=%d brd=%d io=%x mem=%lx(%p)\n",
-               __file__, __LINE__, btype, brdp->unitid, brdp->brdnr,
-               brdp->iobase, brdp->paddr, brdp->vaddr);
-#endif
-
-       stli_stliprobed[idp->id_unit] = brdp->brdnr;
-       stli_brdinit(brdp);
-       if ((brdp->state & BST_FOUND) == 0) {
-               stli_brds[brdp->brdnr] = NULL;
-               return(0);
-       }
-       stli_nrbrds++;
-       return(1);
-}
-
-/*****************************************************************************/
-
-/*
- *     Allocate resources for and initialize a board.
- */
-
-static int stliattach(struct isa_device *idp)
-{
-       stlibrd_t       *brdp;
-       int             brdnr;
-
-#if STLDEBUG
-       kprintf("stliattach(idp=%p): unit=%d iobase=%x\n", (void *) idp,
-               idp->id_unit, idp->id_iobase);
-#endif
-
-       brdnr = stli_stliprobed[idp->id_unit];
-       brdp = stli_brds[brdnr];
-       if (brdp == NULL)
-               return(0);
-       if (brdp->state & BST_FOUND)
-               stli_brdattach(brdp);
-       return(1);
-}
-
-
-/*****************************************************************************/
-
-STATIC int stliopen(struct dev_open_args *ap)
-{
-       cdev_t dev = ap->a_head.a_dev;
-       struct tty      *tp;
-       stliport_t      *portp;
-       int             error, callout;
-
-#if STLDEBUG
-       kprintf("stliopen(dev=%x,flag=%x,mode=%x,p=%x)\n", (int) dev, flag,
-               mode, (int) p);
-#endif
-
-/*
- *     Firstly check if the supplied device number is a valid device.
- */
-       if (minor(dev) & STL_MEMDEV)
-               return(0);
-
-       portp = stli_dev2port(dev);
-       if (portp == NULL)
-               return(ENXIO);
-       if (minor(dev) & STL_CTRLDEV)
-               return(0);
-       tp = &portp->tty;
-       dev->si_tty = tp;
-       callout = minor(dev) & STL_CALLOUTDEV;
-       error = 0;
-
-       crit_enter();
-
-stliopen_restart:
-/*
- *     Wait here for the DTR drop timeout period to expire.
- */
-       while (portp->state & ST_DTRWAIT) {
-               error = tsleep(&portp->dtrwait, PCATCH, "stlidtr", 0);
-               if (error)
-                       goto stliopen_end;
-       }
-
-/*
- *     If the port is in its raw hardware initialization phase, then
- *     hold up here 'till it is done.
- */
-       while (portp->state & (ST_INITIALIZING | ST_CLOSING)) {
-               error = tsleep(&portp->state, PCATCH, "stliraw", 0);
-               if (error)
-                       goto stliopen_end;
-       }
-
-/*
- *     We have a valid device, so now we check if it is already open.
- *     If not then initialize the port hardware and set up the tty
- *     struct as required.
- */
-       if ((tp->t_state & TS_ISOPEN) == 0) {
-               tp->t_oproc = stli_start;
-               tp->t_param = stli_param;
-               tp->t_stop = stli_stop;
-               tp->t_dev = dev;
-               tp->t_termios = callout ? portp->initouttios :
-                       portp->initintios;
-               stli_initopen(portp);
-               wakeup(&portp->state);
-               ttsetwater(tp);
-               if ((portp->sigs & TIOCM_CD) || callout)
-                       (*linesw[tp->t_line].l_modem)(tp, 1);
-       } else {
-               if (callout) {
-                       if (portp->callout == 0) {
-                               error = EBUSY;
-                               goto stliopen_end;
-                       }
-               } else {
-                       if (portp->callout != 0) {
-                               if (ap->a_oflags & O_NONBLOCK) {
-                                       error = EBUSY;
-                                       goto stliopen_end;
-                               }
-                               error = tsleep(&portp->callout,
-                                           PCATCH, "stlicall", 0);
-                               if (error)
-                                       goto stliopen_end;
-                               goto stliopen_restart;
-                       }
-               }
-               if ((tp->t_state & TS_XCLUDE) &&
-                   priv_check_cred(ap->a_cred, PRIV_ROOT, 0)) {
-                       error = EBUSY;
-                       goto stliopen_end;
-               }
-       }
-
-/*
- *     If this port is not the callout device and we do not have carrier
- *     then we need to sleep, waiting for it to be asserted.
- */
-       if (((tp->t_state & TS_CARR_ON) == 0) && !callout &&
-                       ((tp->t_cflag & CLOCAL) == 0) &&
-                       ((ap->a_oflags & O_NONBLOCK) == 0)) {
-               portp->waitopens++;
-               error = tsleep(TSA_CARR_ON(tp), PCATCH, "stlidcd",0);
-               portp->waitopens--;
-               if (error)
-                       goto stliopen_end;
-               goto stliopen_restart;
-       }
-
-/*
- *     Open the line discipline.
- */
-       error = (*linesw[tp->t_line].l_open)(dev, tp);
-       stli_ttyoptim(portp, &tp->t_termios);
-       if ((tp->t_state & TS_ISOPEN) && callout)
-               portp->callout = 1;
-
-/*
- *     If for any reason we get to here and the port is not actually
- *     open then close of the physical hardware - no point leaving it
- *     active when the open failed...
- */
-stliopen_end:
-       crit_exit();
-       if (((tp->t_state & TS_ISOPEN) == 0) && (portp->waitopens == 0))
-               stli_shutdownclose(portp);
-
-       return(error);
-}
-
-/*****************************************************************************/
-
-STATIC int stliclose(struct dev_close_args *ap)
-{
-       cdev_t dev = ap->a_head.a_dev;
-       struct tty      *tp;
-       stliport_t      *portp;
-
-#if STLDEBUG
-       kprintf("stliclose(dev=%s,flag=%x,mode=%x,p=%p)\n",
-               devtoname(dev), flag, mode, (void *) p);
-#endif
-
-       if (minor(dev) & STL_MEMDEV)
-               return(0);
-       if (minor(dev) & STL_CTRLDEV)
-               return(0);
-
-       portp = stli_dev2port(dev);
-       if (portp == NULL)
-               return(ENXIO);
-       tp = &portp->tty;
-
-       crit_enter();
-       (*linesw[tp->t_line].l_close)(tp, ap->a_fflag);
-       stli_ttyoptim(portp, &tp->t_termios);
-       stli_shutdownclose(portp);
-       ttyclose(tp);
-       crit_exit();
-       return(0);
-}
-
-
-STATIC int stliread(struct dev_read_args *ap)
-{
-       cdev_t dev = ap->a_head.a_dev;
-       stliport_t      *portp;
-
-#if STLDEBUG
-       kprintf("stliread(dev=%s,uiop=%p,flag=%x)\n", devtoname(dev),
-               ap->a_uio, flag);
-#endif
-
-       if (minor(dev) & STL_MEMDEV)
-               return(stli_memrw(dev, ap->a_uio, ap->a_ioflag));
-       if (minor(dev) & STL_CTRLDEV)
-               return(ENODEV);
-
-       portp = stli_dev2port(dev);
-       if (portp == NULL)
-               return(ENODEV);
-       return ttyread(ap);
-}
-
-/*****************************************************************************/
-
-#if VFREEBSD >= 220
-
-STATIC void stli_stop(struct tty *tp, int rw)
-{
-#if STLDEBUG
-       kprintf("stli_stop(tp=%x,rw=%x)\n", (int) tp, rw);
-#endif
-
-       stli_flush((stliport_t *) tp, rw);
-}
-
-#else
-
-STATIC int stlistop(struct tty *tp, int rw)
-{
-#if STLDEBUG
-       kprintf("stlistop(tp=%x,rw=%x)\n", (int) tp, rw);
-#endif
-
-       stli_flush((stliport_t *) tp, rw);
-       return(0);
-}
-
-#endif
-
-/*****************************************************************************/
-
-STATIC int stliwrite(struct dev_write_args *ap)
-{
-       cdev_t dev = ap->a_head.a_dev;
-       stliport_t      *portp;
-
-#if STLDEBUG
-       kprintf("stliwrite(dev=%s,uiop=%p,flag=%x)\n", devtoname(dev),
-               ap->a_uio, flag);
-#endif
-
-       if (minor(dev) & STL_MEMDEV)
-               return(stli_memrw(dev, ap->a_uio, ap->a_ioflag));
-       if (minor(dev) & STL_CTRLDEV)
-               return(ENODEV);
-       portp = stli_dev2port(dev);
-       if (portp == NULL)
-               return(ENODEV);
-       return ttywrite(ap);
-}
-
-/*****************************************************************************/
-
-STATIC int stliioctl(struct dev_ioctl_args *ap)
-{
-       cdev_t dev = ap->a_head.a_dev;
-       u_long cmd = ap->a_cmd;
-       caddr_t data = ap->a_data;
-       struct termios  *newtios, *localtios;
-       struct tty      *tp;
-       stlibrd_t       *brdp;
-       stliport_t      *portp;
-       long            arg;
-       int             error, i;
-
-#if STLDEBUG
-       kprintf("stliioctl(dev=%s,cmd=%lx,data=%p,flag=%x,p=%p)\n",
-               devtoname(dev), cmd, (void *) data, ap->a_fflag, (void *) p);
-#endif
-
-       if (minor(dev) & STL_MEMDEV)
-               return(stli_memioctl(dev, cmd, data, ap->a_fflag));
-
-       portp = stli_dev2port(dev);
-       if (portp == NULL)
-               return(ENODEV);
-       if ((brdp = stli_brds[portp->brdnr]) == NULL)
-               return(ENODEV);
-       tp = &portp->tty;
-       error = 0;
-       
-/*
- *     First up handle ioctls on the control devices.
- */
-       if (minor(dev) & STL_CTRLDEV) {
-               if ((minor(dev) & STL_CTRLDEV) == STL_CTRLINIT)
-                       localtios = (minor(dev) & STL_CALLOUTDEV) ?
-                               &portp->initouttios : &portp->initintios;
-               else if ((minor(dev) & STL_CTRLDEV) == STL_CTRLLOCK)
-                       localtios = (minor(dev) & STL_CALLOUTDEV) ?
-                               &portp->lockouttios : &portp->lockintios;
-               else
-                       return(ENODEV);
-
-               switch (cmd) {
-               case TIOCSETA:
-                       if ((error = priv_check_cred(ap->a_cred, PRIV_ROOT, 0)) == 0)
-                               *localtios = *((struct termios *) data);
-                       break;
-               case TIOCGETA:
-                       *((struct termios *) data) = *localtios;
-                       break;
-               case TIOCGETD:
-                       *((int *) data) = TTYDISC;
-                       break;
-               case TIOCGWINSZ:
-                       bzero(data, sizeof(struct winsize));
-                       break;
-               default:
-                       error = ENOTTY;
-                       break;
-               }
-               return(error);
-       }
-
-/*
- *     Deal with 4.3 compatibility issues if we have too...
- */
-#if defined(COMPAT_43) || defined(COMPAT_SUNOS)
-       if (1) {
-               struct termios  tios;
-               unsigned long   oldcmd;
-
-               tios = tp->t_termios;
-               oldcmd = cmd;
-               if ((error = ttsetcompat(tp, &cmd, data, &tios)))
-                       return(error);
-               if (cmd != oldcmd)
-                       data = (caddr_t) &tios;
-       }
-#endif
-
-/*
- *     Carry out some pre-cmd processing work first...
- *     Hmmm, not so sure we want this, disable for now...
- */
-       if ((cmd == TIOCSETA) || (cmd == TIOCSETAW) || (cmd == TIOCSETAF)) {
-               newtios = (struct termios *) data;
-               localtios = (minor(dev) & STL_CALLOUTDEV) ? &portp->lockouttios :
-                        &portp->lockintios;
-
-               newtios->c_iflag = (tp->t_iflag & localtios->c_iflag) |
-                       (newtios->c_iflag & ~localtios->c_iflag);
-               newtios->c_oflag = (tp->t_oflag & localtios->c_oflag) |
-                       (newtios->c_oflag & ~localtios->c_oflag);
-               newtios->c_cflag = (tp->t_cflag & localtios->c_cflag) |
-                       (newtios->c_cflag & ~localtios->c_cflag);
-               newtios->c_lflag = (tp->t_lflag & localtios->c_lflag) |
-                       (newtios->c_lflag & ~localtios->c_lflag);
-               for (i = 0; (i < NCCS); i++) {
-                       if (localtios->c_cc[i] != 0)
-                               newtios->c_cc[i] = tp->t_cc[i];
-               }
-               if (localtios->c_ispeed != 0)
-                       newtios->c_ispeed = tp->t_ispeed;
-               if (localtios->c_ospeed != 0)
-                       newtios->c_ospeed = tp->t_ospeed;
-       }
-
-/*
- *     Call the line discipline and the common command processing to
- *     process this command (if they can).
- */
-       error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data,
-                                             ap->a_fflag, ap->a_cred);
-       if (error != ENOIOCTL)
-               return(error);
-
-       crit_enter();
-       error = ttioctl(tp, cmd, data, ap->a_fflag);
-       stli_ttyoptim(portp, &tp->t_termios);
-       if (error != ENOIOCTL) {
-               crit_exit();
-               return(error);
-       }
-
-       error = 0;
-
-/*
- *     Process local commands here. These are all commands that only we
- *     can take care of (they all rely on actually doing something special
- *     to the actual hardware).
- */
-       switch (cmd) {
-       case TIOCSBRK:
-               arg = BREAKON;
-               error = stli_cmdwait(brdp, portp, A_BREAK, &arg,
-                       sizeof(unsigned long), 0);
-               break;
-       case TIOCCBRK:
-               arg = BREAKOFF;
-               error = stli_cmdwait(brdp, portp, A_BREAK, &arg,
-                       sizeof(unsigned long), 0);
-               break;
-       case TIOCSDTR:
-               stli_mkasysigs(&portp->asig, 1, -1);
-               error = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
-                       sizeof(asysigs_t), 0);
-               break;
-       case TIOCCDTR:
-               stli_mkasysigs(&portp->asig, 0, -1);
-               error = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
-                       sizeof(asysigs_t), 0);
-               break;
-       case TIOCMSET:
-               i = *((int *) data);
-               stli_mkasysigs(&portp->asig, ((i & TIOCM_DTR) ? 1 : 0),
-                       ((i & TIOCM_RTS) ? 1 : 0));
-               error = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
-                       sizeof(asysigs_t), 0);
-               break;
-       case TIOCMBIS:
-               i = *((int *) data);
-               stli_mkasysigs(&portp->asig, ((i & TIOCM_DTR) ? 1 : -1),
-                       ((i & TIOCM_RTS) ? 1 : -1));
-               error = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
-                       sizeof(asysigs_t), 0);
-               break;
-       case TIOCMBIC:
-               i = *((int *) data);
-               stli_mkasysigs(&portp->asig, ((i & TIOCM_DTR) ? 0 : -1),
-                       ((i & TIOCM_RTS) ? 0 : -1));
-               error = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
-                       sizeof(asysigs_t), 0);
-               break;
-       case TIOCMGET:
-               if ((error = stli_cmdwait(brdp, portp, A_GETSIGNALS,
-                               &portp->asig, sizeof(asysigs_t), 1)) < 0)
-                       break;
-               portp->sigs = stli_mktiocm(portp->asig.sigvalue);
-               *((int *) data) = (portp->sigs | TIOCM_LE);
-               break;
-       case TIOCMSDTRWAIT:
-               if ((error = priv_check_cred(ap->a_cred, PRIV_ROOT, 0)) == 0)
-                       portp->dtrwait = *((int *) data) * hz / 100;
-               break;
-       case TIOCMGDTRWAIT:
-               *((int *) data) = portp->dtrwait * 100 / hz;
-               break;
-       case TIOCTIMESTAMP:
-               portp->dotimestamp = 1;
-               *((struct timeval *) data) = portp->timestamp;
-               break;
-       case STL_GETPFLAG:
-               *((unsigned long *) data) = portp->pflag;
-               break;
-       case STL_SETPFLAG:
-               portp->pflag = *((unsigned long *) data);
-               stli_param(&portp->tty, &portp->tty.t_termios);
-               break;
-       default:
-               error = ENOTTY;
-               break;
-       }
-       crit_exit();
-
-       return(error);
-}
-
-/*****************************************************************************/
-
-/*
- *     Convert the specified minor device number into a port struct
- *     pointer. Return NULL if the device number is not a valid port.
- */
-
-STATIC stliport_t *stli_dev2port(cdev_t dev)
-{
-       stlibrd_t       *brdp;
-
-       brdp = stli_brds[MKDEV2BRD(dev)];
-       if (brdp == NULL)
-               return(NULL);
-       if ((brdp->state & BST_STARTED) == 0)
-               return(NULL);
-       return(brdp->ports[MKDEV2PORT(dev)]);
-}
-
-/*****************************************************************************/
-
-/*
- *     Carry out first open operations on a port. This involves a number of
- *     commands to be sent to the slave. We need to open the port, set the
- *     notification events, set the initial port settings, get and set the
- *     initial signal values. We sleep and wait in between each one. But
- *     this still all happens pretty quickly.
- */
-
-static int stli_initopen(stliport_t *portp)
-{
-       stlibrd_t       *brdp;
-       asynotify_t     nt;
-       asyport_t       aport;
-       int             rc;
-
-#if STLDEBUG
-       kprintf("stli_initopen(portp=%x)\n", (int) portp);
-#endif
-
-       if ((brdp = stli_brds[portp->brdnr]) == NULL)
-               return(ENXIO);
-       if (portp->state & ST_INITIALIZED)
-               return(0);
-       portp->state |= ST_INITIALIZED;
-
-       if ((rc = stli_rawopen(brdp, portp, 0, 1)) < 0)
-               return(rc);
-
-       bzero(&nt, sizeof(asynotify_t));
-       nt.data = (DT_TXLOW | DT_TXEMPTY | DT_RXBUSY | DT_RXBREAK);
-       nt.signal = SG_DCD;
-       if ((rc = stli_cmdwait(brdp, portp, A_SETNOTIFY, &nt,
-           sizeof(asynotify_t), 0)) < 0)
-               return(rc);
-
-       stli_mkasyport(portp, &aport, &portp->tty.t_termios);
-       if ((rc = stli_cmdwait(brdp, portp, A_SETPORT, &aport,
-           sizeof(asyport_t), 0)) < 0)
-               return(rc);
-
-       portp->state |= ST_GETSIGS;
-       if ((rc = stli_cmdwait(brdp, portp, A_GETSIGNALS, &portp->asig,
-           sizeof(asysigs_t), 1)) < 0)
-               return(rc);
-       if (portp->state & ST_GETSIGS) {
-               portp->sigs = stli_mktiocm(portp->asig.sigvalue);
-               portp->state &= ~ST_GETSIGS;
-       }
-
-       stli_mkasysigs(&portp->asig, 1, 1);
-       if ((rc = stli_cmdwait(brdp, portp, A_SETSIGNALS, &portp->asig,
-           sizeof(asysigs_t), 0)) < 0)
-               return(rc);
-
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Shutdown the hardware of a port.
- */
-
-static int stli_shutdownclose(stliport_t *portp)
-{
-       stlibrd_t       *brdp;
-       struct tty      *tp;
-
-#if STLDEBUG
-       kprintf("stli_shutdownclose(portp=%p): brdnr=%d panelnr=%d portnr=%d\n",
-               (void *) portp, portp->brdnr, portp->panelnr, portp->portnr);
-#endif
-
-       if ((brdp = stli_brds[portp->brdnr]) == NULL)
-               return(ENXIO);
-
-       tp = &portp->tty;
-       stli_rawclose(brdp, portp, 0, 0);
-       stli_flush(portp, (FWRITE | FREAD));
-       if (tp->t_cflag & HUPCL) {
-               crit_enter();
-               stli_mkasysigs(&portp->asig, 0, 0);
-               if (portp->state & ST_CMDING) {
-                       portp->state |= ST_DOSIGS;
-               } else {
-                       stli_sendcmd(brdp, portp, A_SETSIGNALS,
-                               &portp->asig, sizeof(asysigs_t), 0);
-               }
-               crit_exit();
-               if (portp->dtrwait != 0) {
-                       portp->state |= ST_DTRWAIT;
-                       callout_reset(&portp->dtr_ch, portp->dtrwait,
-                                       stli_dtrwakeup, portp);
-               }
-       }
-       portp->callout = 0;
-       portp->state &= ~ST_INITIALIZED;
-       wakeup(&portp->callout);
-       wakeup(TSA_CARR_ON(tp));
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Clear the DTR waiting flag, and wake up any sleepers waiting for
- *     DTR wait period to finish.
- */
-
-static void stli_dtrwakeup(void *arg)
-{
-       stliport_t      *portp;
-
-       portp = (stliport_t *) arg;
-       portp->state &= ~ST_DTRWAIT;
-       wakeup(&portp->dtrwait);
-}
-
-/*****************************************************************************/
-
-/*
- *     Send an open message to the slave. This will sleep waiting for the
- *     acknowledgement, so must have user context. We need to co-ordinate
- *     with close events here, since we don't want open and close events
- *     to overlap.
- */
-
-static int stli_rawopen(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait)
-{
-       volatile cdkhdr_t       *hdrp;
-       volatile cdkctrl_t      *cp;
-       volatile unsigned char  *bits;
-       int                     rc;
-
-#if STLDEBUG
-       kprintf("stli_rawopen(brdp=%x,portp=%x,arg=%x,wait=%d)\n", (int) brdp,
-               (int) portp, (int) arg, wait);
-#endif
-
-       crit_enter();
-
-/*
- *     Slave is already closing this port. This can happen if a hangup
- *     occurs on this port. So we must wait until it is complete. The
- *     order of opens and closes may not be preserved across shared
- *     memory, so we must wait until it is complete.
- */
-       while (portp->state & ST_CLOSING) {
-               rc = tsleep(&portp->state, PCATCH, "stliraw", 0);
-               if (rc) {
-                       crit_exit();
-                       return(rc);
-               }
-       }
-
-/*
- *     Everything is ready now, so write the open message into shared
- *     memory. Once the message is in set the service bits to say that
- *     this port wants service.
- */
-       EBRDENABLE(brdp);
-       cp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl;
-       cp->openarg = arg;
-       cp->open = 1;
-       hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
-       bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset +
-               portp->portidx;
-       *bits |= portp->portbit;
-       EBRDDISABLE(brdp);
-
-       if (wait == 0) {
-               crit_exit();
-               return(0);
-       }
-
-/*
- *     Slave is in action, so now we must wait for the open acknowledgment
- *     to come back.
- */
-       rc = 0;
-       portp->state |= ST_OPENING;
-       while (portp->state & ST_OPENING) {
-               rc = tsleep(&portp->state, PCATCH, "stliraw", 0);
-               if (rc) {
-                       crit_exit();
-                       return(rc);
-               }
-       }
-       crit_exit();
-
-       if ((rc == 0) && (portp->rc != 0))
-               rc = EIO;
-       return(rc);
-}
-
-/*****************************************************************************/
-
-/*
- *     Send a close message to the slave. Normally this will sleep waiting
- *     for the acknowledgement, but if wait parameter is 0 it will not. If
- *     wait is true then must have user context (to sleep).
- */
-
-static int stli_rawclose(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait)
-{
-       volatile cdkhdr_t       *hdrp;
-       volatile cdkctrl_t      *cp;
-       volatile unsigned char  *bits;
-       int                     rc;
-
-#if STLDEBUG
-       kprintf("stli_rawclose(brdp=%x,portp=%x,arg=%x,wait=%d)\n", (int) brdp,
-               (int) portp, (int) arg, wait);
-#endif
-
-       crit_enter();
-
-/*
- *     Slave is already closing this port. This can happen if a hangup
- *     occurs on this port.
- */
-       if (wait) {
-               while (portp->state & ST_CLOSING) {
-                       rc = tsleep(&portp->state, PCATCH, "stliraw", 0);
-                       if (rc) {
-                               crit_exit();
-                               return(rc);
-                       }
-               }
-       }
-
-/*
- *     Write the close command into shared memory.
- */
-       EBRDENABLE(brdp);
-       cp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl;
-       cp->closearg = arg;
-       cp->close = 1;
-       hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
-       bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset +
-               portp->portidx;
-       *bits |= portp->portbit;
-       EBRDDISABLE(brdp);
-
-       portp->state |= ST_CLOSING;
-       if (wait == 0) {
-               crit_exit();
-               return(0);
-       }
-
-/*
- *     Slave is in action, so now we must wait for the open acknowledgment
- *     to come back.
- */
-       rc = 0;
-       while (portp->state & ST_CLOSING) {
-               rc = tsleep(&portp->state, PCATCH, "stliraw", 0);
-               if (rc) {
-                       crit_exit();
-                       return(rc);
-               }
-       }
-       crit_exit();
-
-       if ((rc == 0) && (portp->rc != 0))
-               rc = EIO;
-       return(rc);
-}
-
-/*****************************************************************************/
-
-/*
- *     Send a command to the slave and wait for the response. This must
- *     have user context (it sleeps). This routine is generic in that it
- *     can send any type of command. Its purpose is to wait for that command
- *     to complete (as opposed to initiating the command then returning).
- */
-
-static int stli_cmdwait(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback)
-{
-       int     rc;
-
-#if STLDEBUG
-       kprintf("stli_cmdwait(brdp=%x,portp=%x,cmd=%x,arg=%x,size=%d,"
-               "copyback=%d)\n", (int) brdp, (int) portp, (int) cmd,
-               (int) arg, size, copyback);
-#endif
-
-       crit_enter();
-       while (portp->state & ST_CMDING) {
-               rc = tsleep(&portp->state, PCATCH, "stliraw", 0);
-               if (rc) {
-                       crit_exit();
-                       return(rc);
-               }
-       }
-
-       stli_sendcmd(brdp, portp, cmd, arg, size, copyback);
-
-       while (portp->state & ST_CMDING) {
-               rc = tsleep(&portp->state, PCATCH, "stliraw", 0);
-               if (rc) {
-                       crit_exit();
-                       return(rc);
-               }
-       }
-       crit_exit();
-
-       if (portp->rc != 0)
-               return(EIO);
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Start (or continue) the transfer of TX data on this port. If the
- *     port is not currently busy then load up the interrupt ring queue
- *     buffer and kick of the transmitter. If the port is running low on
- *     TX data then refill the ring queue. This routine is also used to
- *     activate input flow control!
- */
-
-static void stli_start(struct tty *tp)
-{
-       volatile cdkasy_t       *ap;
-       volatile cdkhdr_t       *hdrp;
-       volatile unsigned char  *bits;
-       unsigned char           *shbuf;
-       stliport_t              *portp;
-       stlibrd_t               *brdp;
-       unsigned int            len, stlen, head, tail, size;
-       int                     count;
-
-       portp = (stliport_t *) tp;
-
-#if STLDEBUG
-       kprintf("stli_start(tp=%x): brdnr=%d portnr=%d\n", (int) tp, 
-               portp->brdnr, portp->portnr);
-#endif
-
-       crit_enter();
-
-#if VFREEBSD == 205
-/*
- *     Check if the output cooked clist buffers are near empty, wake up
- *     the line discipline to fill it up.
- */
-       if (tp->t_outq.c_cc <= tp->t_lowat) {
-               if (tp->t_state & TS_ASLEEP) {
-                       tp->t_state &= ~TS_ASLEEP;
-                       wakeup(&tp->t_outq);
-               }
-               KNOTE(&tp->t_wsel.si_note, 0);
-       }
-#endif
-
-       if (tp->t_state & (TS_TIMEOUT | TS_TTSTOP)) {
-               crit_exit();
-               return;
-       }
-
-/*
- *     Copy data from the clists into the interrupt ring queue. This will
- *     require at most 2 copys... What we do is calculate how many chars
- *     can fit into the ring queue, and how many can fit in 1 copy. If after
- *     the first copy there is still more room then do the second copy. 
- */
-       if (tp->t_outq.c_cc != 0) {
-               brdp = stli_brds[portp->brdnr];
-               if (brdp == NULL) {
-                       crit_exit();
-                       return;
-               }
-
-               EBRDENABLE(brdp);
-               ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr);
-               head = (unsigned int) ap->txq.head;
-               tail = (unsigned int) ap->txq.tail;
-               if (tail != ((unsigned int) ap->txq.tail))
-                       tail = (unsigned int) ap->txq.tail;
-               size = portp->txsize;
-               if (head >= tail) {
-                       len = size - (head - tail) - 1;
-                       stlen = size - head;
-               } else {
-                       len = tail - head - 1;
-                       stlen = len;
-               }
-
-               count = 0;
-               shbuf = (char *) EBRDGETMEMPTR(brdp, portp->txoffset);
-
-               if (len > 0) {
-                       stlen = MIN(len, stlen);
-                       count = q_to_b(&tp->t_outq, (shbuf + head), stlen);
-                       len -= count;
-                       head += count;
-                       if (head >= size) {
-                               head = 0;
-                               if (len > 0) {
-                                       stlen = q_to_b(&tp->t_outq, shbuf, len);
-                                       head += stlen;
-                                       count += stlen;
-                               }
-                       }
-               }
-
-               ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr);
-               ap->txq.head = head;
-               hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
-               bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset +
-                       portp->portidx;
-               *bits |= portp->portbit;
-               portp->state |= ST_TXBUSY;
-               tp->t_state |= TS_BUSY;
-
-               EBRDDISABLE(brdp);
-       }
-
-#if VFREEBSD != 205
-/*
- *     Do any writer wakeups.
- */
-       ttwwakeup(tp);
-#endif
-
-       crit_exit();
-}
-
-/*****************************************************************************/
-
-/*
- *     Send a new port configuration to the slave.
- */
-
-static int stli_param(struct tty *tp, struct termios *tiosp)
-{
-       stlibrd_t       *brdp;
-       stliport_t      *portp;
-       asyport_t       aport;
-       int             rc;
-
-       portp = (stliport_t *) tp;
-       if ((brdp = stli_brds[portp->brdnr]) == NULL)
-               return(ENXIO);
-
-       crit_enter();
-       stli_mkasyport(portp, &aport, tiosp);
-       /* can we sleep here? */
-       rc = stli_cmdwait(brdp, portp, A_SETPORT, &aport, sizeof(asyport_t), 0);
-       stli_ttyoptim(portp, tiosp);
-       crit_exit();
-       return(rc);
-}
-
-/*****************************************************************************/
-
-/*
- *     Flush characters from the lower buffer. We may not have user context
- *     so we cannot sleep waiting for it to complete. Also we need to check
- *     if there is chars for this port in the TX cook buffer, and flush them
- *     as well.
- */
-
-static void stli_flush(stliport_t *portp, int flag)
-{
-       stlibrd_t       *brdp;
-       unsigned long   ftype;
-
-#if STLDEBUG
-       kprintf("stli_flush(portp=%x,flag=%x)\n", (int) portp, flag);
-#endif
-
-       if (portp == NULL)
-               return;
-       if ((portp->brdnr < 0) || (portp->brdnr >= stli_nrbrds))
-               return;
-       brdp = stli_brds[portp->brdnr];
-       if (brdp == NULL)
-               return;
-
-       crit_enter();
-       if (portp->state & ST_CMDING) {
-               portp->state |= (flag & FWRITE) ? ST_DOFLUSHTX : 0;
-               portp->state |= (flag & FREAD) ? ST_DOFLUSHRX : 0;
-       } else {
-               ftype = (flag & FWRITE) ? FLUSHTX : 0;
-               ftype |= (flag & FREAD) ? FLUSHRX : 0;
-               portp->state &= ~(ST_DOFLUSHTX | ST_DOFLUSHRX);
-               stli_sendcmd(brdp, portp, A_FLUSH, &ftype,
-                       sizeof(unsigned long), 0);
-       }
-       if ((flag & FREAD) && (stli_rxtmpport == portp))
-               stli_rxtmplen = 0;
-       crit_exit();
-}
-
-/*****************************************************************************/
-
-/*
- *     Generic send command routine. This will send a message to the slave,
- *     of the specified type with the specified argument. Must be very
- *     carefull of data that will be copied out from shared memory -
- *     containing command results. The command completion is all done from
- *     a poll routine that does not have user coontext. Therefore you cannot
- *     copy back directly into user space, or to the kernel stack of a
- *     process. This routine does not sleep, so can be called from anywhere,
- *     and must be called with interrupt locks set.
- */
-
-static void stli_sendcmd(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback)
-{
-       volatile cdkhdr_t       *hdrp;
-       volatile cdkctrl_t      *cp;
-       volatile unsigned char  *bits;
-
-#if STLDEBUG
-       kprintf("stli_sendcmd(brdp=%x,portp=%x,cmd=%x,arg=%x,size=%d,"
-               "copyback=%d)\n", (int) brdp, (int) portp, (int) cmd,
-               (int) arg, size, copyback);
-#endif
-
-       if (portp->state & ST_CMDING) {
-               kprintf("STALLION: command already busy, cmd=%x!\n", (int) cmd);
-               return;
-       }
-
-       EBRDENABLE(brdp);
-       cp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->ctrl;
-       if (size > 0) {
-               bcopy(arg, &(cp->args[0]), size);
-               if (copyback) {
-                       portp->argp = arg;
-                       portp->argsize = size;
-               }
-       }
-       cp->status = 0;
-       cp->cmd = cmd;
-       hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
-       bits = ((volatile unsigned char *) hdrp) + brdp->slaveoffset +
-               portp->portidx;
-       *bits |= portp->portbit;
-       portp->state |= ST_CMDING;
-       EBRDDISABLE(brdp);
-}
-
-/*****************************************************************************/
-
-/*
- *     Read data from shared memory. This assumes that the shared memory
- *     is enabled and that interrupts are off. Basically we just empty out
- *     the shared memory buffer into the tty buffer. Must be carefull to
- *     handle the case where we fill up the tty buffer, but still have
- *     more chars to unload.
- */
-
-static void stli_rxprocess(stlibrd_t *brdp, stliport_t *portp)
-{
-       volatile cdkasyrq_t     *rp;
-       volatile char           *shbuf;
-       struct tty              *tp;
-       unsigned int            head, tail, size;
-       unsigned int            len, stlen, i;
-       int                     ch;
-
-#if STLDEBUG
-       kprintf("stli_rxprocess(brdp=%x,portp=%d)\n", (int) brdp, (int) portp);
-#endif
-
-       tp = &portp->tty;
-       if ((tp->t_state & TS_ISOPEN) == 0) {
-               stli_flush(portp, FREAD);
-               return;
-       }
-       if (tp->t_state & TS_TBLOCK)
-               return;
-
-       rp = &((volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr))->rxq;
-       head = (unsigned int) rp->head;
-       if (head != ((unsigned int) rp->head))
-               head = (unsigned int) rp->head;
-       tail = (unsigned int) rp->tail;
-       size = portp->rxsize;
-       if (head >= tail) {
-               len = head - tail;
-               stlen = len;
-       } else {
-               len = size - (tail - head);
-               stlen = size - tail;
-       }
-
-       if (len == 0)
-               return;
-
-       shbuf = (volatile char *) EBRDGETMEMPTR(brdp, portp->rxoffset);
-
-/*
- *     If we can bypass normal LD processing then just copy direct
- *     from board shared memory into the tty buffers.
- */
-       if (tp->t_state & TS_CAN_BYPASS_L_RINT) {
-               if (((tp->t_rawq.c_cc + len) >= TTYHOG) &&
-                   ((tp->t_cflag & CRTS_IFLOW) || (tp->t_iflag & IXOFF)) &&
-                   ((tp->t_state & TS_TBLOCK) == 0)) {
-                       ch = TTYHOG - tp->t_rawq.c_cc - 1;
-                       len = (ch > 0) ? ch : 0;
-                       stlen = MIN(stlen, len);
-                       tp->t_state |= TS_TBLOCK;
-               }
-               i = b_to_q(__DEVOLATILE(char *, shbuf + tail), stlen,
-                          &tp->t_rawq);
-               tail += stlen;
-               len -= stlen;
-               if (tail >= size) {
-                       tail = 0;
-                       i += b_to_q(__DEVOLATILE(char *, shbuf), len,
-                                   &tp->t_rawq);
-                       tail += len;
-               }
-               portp->rxlost += i;
-               ttwakeup(tp);
-               rp = &((volatile cdkasy_t *)
-                       EBRDGETMEMPTR(brdp, portp->addr))->rxq;
-               rp->tail = tail;
-
-       } else {
-/*
- *             Copy the data from board shared memory into a local
- *             memory buffer. Then feed them from here into the LD.
- *             We don't want to go into board shared memory one char
- *             at a time, it is too slow...
- */
-               if (len > TTYHOG) {
-                       len = TTYHOG - 1;
-                       stlen = min(len, stlen);
-               }
-               stli_rxtmpport = portp;
-               stli_rxtmplen = len;
-               bcopy(__DEVOLATILE(char *, shbuf + tail), &stli_rxtmpbuf[0],
-                     stlen);
-               len -= stlen;
-               if (len > 0)
-                       bcopy(shbuf, &stli_rxtmpbuf[stlen], len);
-               
-               for (i = 0; (i < stli_rxtmplen); i++) {
-                       ch = (unsigned char) stli_rxtmpbuf[i];
-                       (*linesw[tp->t_line].l_rint)(ch, tp);
-               }
-               EBRDENABLE(brdp);
-               rp = &((volatile cdkasy_t *)
-                       EBRDGETMEMPTR(brdp, portp->addr))->rxq;
-               if (stli_rxtmplen == 0) {
-                       head = (unsigned int) rp->head;
-                       if (head != ((unsigned int) rp->head))
-                               head = (unsigned int) rp->head;
-                       tail = head;
-               } else {
-                       tail += i;
-                       if (tail >= size)
-                               tail -= size;
-               }
-               rp->tail = tail;
-               stli_rxtmpport = NULL;
-               stli_rxtmplen = 0;
-       }
-
-       portp->state |= ST_RXING;
-}
-
-/*****************************************************************************/
-
-/*
- *     Set up and carry out any delayed commands. There is only a small set
- *     of slave commands that can be done "off-level". So it is not too
- *     difficult to deal with them as a special case here.
- */
-
-static __inline void stli_dodelaycmd(stliport_t *portp, volatile cdkctrl_t *cp)
-{
-       int     cmd;
-
-       if (portp->state & ST_DOSIGS) {
-               if ((portp->state & ST_DOFLUSHTX) &&
-                   (portp->state & ST_DOFLUSHRX))
-                       cmd = A_SETSIGNALSF;
-               else if (portp->state & ST_DOFLUSHTX)
-                       cmd = A_SETSIGNALSFTX;
-               else if (portp->state & ST_DOFLUSHRX)
-                       cmd = A_SETSIGNALSFRX;
-               else
-                       cmd = A_SETSIGNALS;
-               portp->state &= ~(ST_DOFLUSHTX | ST_DOFLUSHRX | ST_DOSIGS);
-               bcopy(&portp->asig, &(cp->args[0]), sizeof(asysigs_t));
-               cp->status = 0;
-               cp->cmd = cmd;
-               portp->state |= ST_CMDING;
-       } else if ((portp->state & ST_DOFLUSHTX) ||
-           (portp->state & ST_DOFLUSHRX)) {
-               cmd = ((portp->state & ST_DOFLUSHTX) ? FLUSHTX : 0);
-               cmd |= ((portp->state & ST_DOFLUSHRX) ? FLUSHRX : 0);
-               portp->state &= ~(ST_DOFLUSHTX | ST_DOFLUSHRX);
-               bcopy(&cmd, &(cp->args[0]), sizeof(int));
-               cp->status = 0;
-               cp->cmd = A_FLUSH;
-               portp->state |= ST_CMDING;
-       }
-}
-
-/*****************************************************************************/
-
-/*
- *     Host command service checking. This handles commands or messages
- *     coming from the slave to the host. Must have board shared memory
- *     enabled and interrupts off when called. Notice that by servicing the
- *     read data last we don't need to change the shared memory pointer
- *     during processing (which is a slow IO operation).
- *     Return value indicates if this port is still awaiting actions from
- *     the slave (like open, command, or even TX data being sent). If 0
- *     then port is still busy, otherwise the port request bit flag is
- *     returned.
- */
-
-static __inline int stli_hostcmd(stlibrd_t *brdp, stliport_t *portp)
-{
-       volatile cdkasy_t       *ap;
-       volatile cdkctrl_t      *cp;
-       asynotify_t             nt;
-       unsigned long           oldsigs;
-       unsigned int            head, tail;
-       int                     rc, donerx;
-
-#if STLDEBUG
-       kprintf("stli_hostcmd(brdp=%x,portp=%x)\n", (int) brdp, (int) portp);
-#endif
-
-       ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr);
-       cp = &ap->ctrl;
-
-/*
- *     Check if we are waiting for an open completion message.
- */
-       if (portp->state & ST_OPENING) {
-               rc = (int) cp->openarg;
-               if ((cp->open == 0) && (rc != 0)) {
-                       if (rc > 0)
-                               rc--;
-                       cp->openarg = 0;
-                       portp->rc = rc;
-                       portp->state &= ~ST_OPENING;
-                       wakeup(&portp->state);
-               }
-       }
-
-/*
- *     Check if we are waiting for a close completion message.
- */
-       if (portp->state & ST_CLOSING) {
-               rc = (int) cp->closearg;
-               if ((cp->close == 0) && (rc != 0)) {
-                       if (rc > 0)
-                               rc--;
-                       cp->closearg = 0;
-                       portp->rc = rc;
-                       portp->state &= ~ST_CLOSING;
-                       wakeup(&portp->state);
-               }
-       }
-
-/*
- *     Check if we are waiting for a command completion message. We may
- *     need to copy out the command results associated with this command.
- */
-       if (portp->state & ST_CMDING) {
-               rc = cp->status;
-               if ((cp->cmd == 0) && (rc != 0)) {
-                       if (rc > 0)
-                               rc--;
-                       if (portp->argp != NULL) {
-                               bcopy(&(cp->args[0]), portp->argp,
-                                       portp->argsize);
-                               portp->argp = NULL;
-                       }
-                       cp->status = 0;
-                       portp->rc = rc;
-                       portp->state &= ~ST_CMDING;
-                       stli_dodelaycmd(portp, cp);
-                       wakeup(&portp->state);
-               }
-       }
-
-/*
- *     Check for any notification messages ready. This includes lots of
- *     different types of events - RX chars ready, RX break received,
- *     TX data low or empty in the slave, modem signals changed state.
- *     Must be extremely carefull if we call to the LD, it may call
- *     other routines of ours that will disable the memory...
- *     Something else we need to be carefull of is race conditions on
- *     marking the TX as empty...
- */
-       donerx = 0;
-
-       if (ap->notify) {
-               struct tty      *tp;
-
-               nt = ap->changed;
-               ap->notify = 0;
-               tp = &portp->tty;
-
-               if (nt.signal & SG_DCD) {
-                       oldsigs = portp->sigs;
-                       portp->sigs = stli_mktiocm(nt.sigvalue);
-                       portp->state &= ~ST_GETSIGS;
-                       (*linesw[tp->t_line].l_modem)(tp,
-                               (portp->sigs & TIOCM_CD));
-                       EBRDENABLE(brdp);
-               }
-               if (nt.data & DT_RXBUSY) {
-                       donerx++;
-                       stli_rxprocess(brdp, portp);
-               }
-               if (nt.data & DT_RXBREAK) {
-                       (*linesw[tp->t_line].l_rint)(TTY_BI, tp);
-                       EBRDENABLE(brdp);
-               }
-               if (nt.data & DT_TXEMPTY) {
-                       ap = (volatile cdkasy_t *)
-                               EBRDGETMEMPTR(brdp, portp->addr);
-                       head = (unsigned int) ap->txq.head;
-                       tail = (unsigned int) ap->txq.tail;
-                       if (tail != ((unsigned int) ap->txq.tail))
-                               tail = (unsigned int) ap->txq.tail;
-                       head = (head >= tail) ? (head - tail) :
-                               portp->txsize - (tail - head);
-                       if (head == 0) {
-                               portp->state &= ~ST_TXBUSY;
-                               tp->t_state &= ~TS_BUSY;
-                       }
-               }
-               if (nt.data & (DT_TXEMPTY | DT_TXLOW)) {
-                       (*linesw[tp->t_line].l_start)(tp);
-                       EBRDENABLE(brdp);
-               }
-       }
-
-/*
- *     It might seem odd that we are checking for more RX chars here.
- *     But, we need to handle the case where the tty buffer was previously
- *     filled, but we had more characters to pass up. The slave will not
- *     send any more RX notify messages until the RX buffer has been emptied.
- *     But it will leave the service bits on (since the buffer is not empty).
- *     So from here we can try to process more RX chars.
- */
-       if ((!donerx) && (portp->state & ST_RXING)) {
-               portp->state &= ~ST_RXING;
-               stli_rxprocess(brdp, portp);
-       }
-
-       return((portp->state & (ST_OPENING | ST_CLOSING | ST_CMDING |
-               ST_TXBUSY | ST_RXING)) ? 0 : 1);
-}
-
-/*****************************************************************************/
-
-/*
- *     Service all ports on a particular board. Assumes that the boards
- *     shared memory is enabled, and that the page pointer is pointed
- *     at the cdk header structure.
- */
-
-static __inline void stli_brdpoll(stlibrd_t *brdp, volatile cdkhdr_t *hdrp)
-{
-       stliport_t      *portp;
-       unsigned char   hostbits[(STL_MAXCHANS / 8) + 1];
-       unsigned char   slavebits[(STL_MAXCHANS / 8) + 1];
-       unsigned char   *slavep;
-       int             bitpos, bitat, bitsize;
-       int             channr, nrdevs, slavebitchange;
-
-       bitsize = brdp->bitsize;
-       nrdevs = brdp->nrdevs;
-
-/*
- *     Check if slave wants any service. Basically we try to do as
- *     little work as possible here. There are 2 levels of service
- *     bits. So if there is nothing to do we bail early. We check
- *     8 service bits at a time in the inner loop, so we can bypass
- *     the lot if none of them want service.
- */
-       bcopy(__DEVOLATILE(unsigned char *, hdrp) + brdp->hostoffset,
-             &hostbits[0], bitsize);
-
-       bzero(&slavebits[0], bitsize);
-       slavebitchange = 0;
-
-       for (bitpos = 0; (bitpos < bitsize); bitpos++) {
-               if (hostbits[bitpos] == 0)
-                       continue;
-               channr = bitpos * 8;
-               bitat = 0x1;
-               for (; (channr < nrdevs); channr++, bitat <<=1) {
-                       if (hostbits[bitpos] & bitat) {
-                               portp = brdp->ports[(channr - 1)];
-                               if (stli_hostcmd(brdp, portp)) {
-                                       slavebitchange++;
-                                       slavebits[bitpos] |= bitat;
-                               }
-                       }
-               }
-       }
-
-/*
- *     If any of the ports are no longer busy then update them in the
- *     slave request bits. We need to do this after, since a host port
- *     service may initiate more slave requests...
- */
-       if (slavebitchange) {
-               hdrp = (volatile cdkhdr_t *)
-                       EBRDGETMEMPTR(brdp, CDK_CDKADDR);
-               slavep = __DEVOLATILE(unsigned char *, hdrp) + brdp->slaveoffset;
-               for (bitpos = 0; (bitpos < bitsize); bitpos++) {
-                       if (slavebits[bitpos])
-                               slavep[bitpos] &= ~slavebits[bitpos];
-               }
-       }
-}
-
-/*****************************************************************************/
-
-/*
- *     Driver poll routine. This routine polls the boards in use and passes
- *     messages back up to host when neccesary. This is actually very
- *     CPU efficient, since we will always have the kernel poll clock, it
- *     adds only a few cycles when idle (since board service can be
- *     determined very easily), but when loaded generates no interrupts
- *     (with their expensive associated context change).
- */
-
-static void stli_poll(void *arg)
-{
-       volatile cdkhdr_t       *hdrp;
-       stlibrd_t               *brdp;
-       int                     brdnr;
-
-       crit_enter();
-
-/*
- *     Check each board and do any servicing required.
- */
-       for (brdnr = 0; (brdnr < stli_nrbrds); brdnr++) {
-               brdp = stli_brds[brdnr];
-               if (brdp == NULL)
-                       continue;
-               if ((brdp->state & BST_STARTED) == 0)
-                       continue;
-
-               EBRDENABLE(brdp);
-               hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
-               if (hdrp->hostreq)
-                       stli_brdpoll(brdp, hdrp);
-               EBRDDISABLE(brdp);
-       }
-       crit_exit();
-
-       callout_reset(&stli_poll_ch, 1, stli_poll, NULL);
-}
-
-/*****************************************************************************/
-
-/*
- *     Translate the termios settings into the port setting structure of
- *     the slave.
- */
-
-static void stli_mkasyport(stliport_t *portp, asyport_t *pp, struct termios *tiosp)
-{
-#if STLDEBUG
-       kprintf("stli_mkasyport(portp=%x,pp=%x,tiosp=%d)\n", (int) portp,
-               (int) pp, (int) tiosp);
-#endif
-
-       bzero(pp, sizeof(asyport_t));
-
-/*
- *     Start of by setting the baud, char size, parity and stop bit info.
- */
-       if (tiosp->c_ispeed == 0)
-               tiosp->c_ispeed = tiosp->c_ospeed;
-       if ((tiosp->c_ospeed < 0) || (tiosp->c_ospeed > STL_MAXBAUD))
-               tiosp->c_ospeed = STL_MAXBAUD;
-       pp->baudout = tiosp->c_ospeed;
-       pp->baudin = pp->baudout;
-
-       switch (tiosp->c_cflag & CSIZE) {
-       case CS5:
-               pp->csize = 5;
-               break;
-       case CS6:
-               pp->csize = 6;
-               break;
-       case CS7:
-               pp->csize = 7;
-               break;
-       default:
-               pp->csize = 8;
-               break;
-       }
-
-       if (tiosp->c_cflag & CSTOPB)
-               pp->stopbs = PT_STOP2;
-       else
-               pp->stopbs = PT_STOP1;
-
-       if (tiosp->c_cflag & PARENB) {
-               if (tiosp->c_cflag & PARODD)
-                       pp->parity = PT_ODDPARITY;
-               else
-                       pp->parity = PT_EVENPARITY;
-       } else {
-               pp->parity = PT_NOPARITY;
-       }
-
-       if (tiosp->c_iflag & ISTRIP)
-               pp->iflag |= FI_ISTRIP;
-
-/*
- *     Set up any flow control options enabled.
- */
-       if (tiosp->c_iflag & IXON) {
-               pp->flow |= F_IXON;
-               if (tiosp->c_iflag & IXANY)
-                       pp->flow |= F_IXANY;
-       }
-       if (tiosp->c_iflag & IXOFF)
-               pp->flow |= F_IXOFF;
-       if (tiosp->c_cflag & CCTS_OFLOW)
-               pp->flow |= F_CTSFLOW;
-       if (tiosp->c_cflag & CRTS_IFLOW)
-               pp->flow |= F_RTSFLOW;
-
-       pp->startin = tiosp->c_cc[VSTART];
-       pp->stopin = tiosp->c_cc[VSTOP];
-       pp->startout = tiosp->c_cc[VSTART];
-       pp->stopout = tiosp->c_cc[VSTOP];
-
-/*
- *     Set up the RX char marking mask with those RX error types we must
- *     catch. We can get the slave to help us out a little here, it will
- *     ignore parity errors and breaks for us, and mark parity errors in
- *     the data stream.
- */
-       if (tiosp->c_iflag & IGNPAR)
-               pp->iflag |= FI_IGNRXERRS;
-       if (tiosp->c_iflag & IGNBRK)
-               pp->iflag |= FI_IGNBREAK;
-       if (tiosp->c_iflag & (INPCK | PARMRK))
-               pp->iflag |= FI_1MARKRXERRS;
-
-/*
- *     Transfer any persistent flags into the asyport structure.
- */
-       pp->pflag = (portp->pflag & 0xffff);
-       pp->vmin = (portp->pflag & P_RXIMIN) ? 1 : 0;
-       pp->vtime = (portp->pflag & P_RXITIME) ? 1 : 0;
-       pp->cc[1] = (portp->pflag & P_RXTHOLD) ? 1 : 0;
-}
-
-/*****************************************************************************/
-
-/*
- *     Construct a slave signals structure for setting the DTR and RTS
- *     signals as specified.
- */
-
-static void stli_mkasysigs(asysigs_t *sp, int dtr, int rts)
-{
-#if STLDEBUG
-       kprintf("stli_mkasysigs(sp=%x,dtr=%d,rts=%d)\n", (int) sp, dtr, rts);
-#endif
-
-       bzero(sp, sizeof(asysigs_t));
-       if (dtr >= 0) {
-               sp->signal |= SG_DTR;
-               sp->sigvalue |= ((dtr > 0) ? SG_DTR : 0);
-       }
-       if (rts >= 0) {
-               sp->signal |= SG_RTS;
-               sp->sigvalue |= ((rts > 0) ? SG_RTS : 0);
-       }
-}
-
-/*****************************************************************************/
-
-/*
- *     Convert the signals returned from the slave into a local TIOCM type
- *     signals value. We keep them localy in TIOCM format.
- */
-
-static long stli_mktiocm(unsigned long sigvalue)
-{
-       long    tiocm;
-
-#if STLDEBUG
-       kprintf("stli_mktiocm(sigvalue=%x)\n", (int) sigvalue);
-#endif
-
-       tiocm = 0;
-       tiocm |= ((sigvalue & SG_DCD) ? TIOCM_CD : 0);
-       tiocm |= ((sigvalue & SG_CTS) ? TIOCM_CTS : 0);
-       tiocm |= ((sigvalue & SG_RI) ? TIOCM_RI : 0);
-       tiocm |= ((sigvalue & SG_DSR) ? TIOCM_DSR : 0);
-       tiocm |= ((sigvalue & SG_DTR) ? TIOCM_DTR : 0);
-       tiocm |= ((sigvalue & SG_RTS) ? TIOCM_RTS : 0);
-       return(tiocm);
-}
-
-/*****************************************************************************/
-
-/*
- *     Enable l_rint processing bypass mode if tty modes allow it.
- */
-
-static void stli_ttyoptim(stliport_t *portp, struct termios *tiosp)
-{
-       struct tty      *tp;
-
-       tp = &portp->tty;
-       if (((tiosp->c_iflag & (ICRNL | IGNCR | IMAXBEL | INLCR)) == 0) &&
-           (((tiosp->c_iflag & BRKINT) == 0) || (tiosp->c_iflag & IGNBRK)) &&
-           (((tiosp->c_iflag & PARMRK) == 0) ||
-               ((tiosp->c_iflag & (IGNPAR | IGNBRK)) == (IGNPAR | IGNBRK))) &&
-           ((tiosp->c_lflag & (ECHO | ICANON | IEXTEN | ISIG | PENDIN)) ==0) &&
-           (linesw[tp->t_line].l_rint == ttyinput))
-               tp->t_state |= TS_CAN_BYPASS_L_RINT;
-       else
-               tp->t_state &= ~TS_CAN_BYPASS_L_RINT;
-       portp->hotchar = linesw[tp->t_line].l_hotchar;
-}
-
-/*****************************************************************************/
-
-/*
- *     All panels and ports actually attached have been worked out. All
- *     we need to do here is set up the appropriate per port data structures.
- */
-
-static int stli_initports(stlibrd_t *brdp)
-{
-       stliport_t      *portp;
-       int             i, panelnr, panelport;
-
-#if STLDEBUG
-       kprintf("stli_initports(brdp=%x)\n", (int) brdp);
-#endif
-
-       for (i = 0, panelnr = 0, panelport = 0; (i < brdp->nrports); i++) {
-               portp = kmalloc(sizeof(stliport_t), M_TTYS, M_WAITOK | M_ZERO);
-               callout_init(&portp->dtr_ch);
-               portp->portnr = i;
-               portp->brdnr = brdp->brdnr;
-               portp->panelnr = panelnr;
-               portp->initintios.c_ispeed = STL_DEFSPEED;
-               portp->initintios.c_ospeed = STL_DEFSPEED;
-               portp->initintios.c_cflag = STL_DEFCFLAG;
-               portp->initintios.c_iflag = 0;
-               portp->initintios.c_oflag = 0;
-               portp->initintios.c_lflag = 0;
-               bcopy(&ttydefchars[0], &portp->initintios.c_cc[0],
-                       sizeof(portp->initintios.c_cc));
-               portp->initouttios = portp->initintios;
-               portp->dtrwait = 3 * hz;
-
-               panelport++;
-               if (panelport >= brdp->panels[panelnr]) {
-                       panelport = 0;
-                       panelnr++;
-               }
-               brdp->ports[i] = portp;
-
-       }
-
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     All the following routines are board specific hardware operations.
- */
-
-static void stli_ecpinit(stlibrd_t *brdp)
-{
-       unsigned long   memconf;
-
-#if STLDEBUG
-       kprintf("stli_ecpinit(brdp=%d)\n", (int) brdp);
-#endif
-
-       outb((brdp->iobase + ECP_ATCONFR), ECP_ATSTOP);
-       DELAY(10);
-       outb((brdp->iobase + ECP_ATCONFR), ECP_ATDISABLE);
-       DELAY(100);
-
-       memconf = (brdp->paddr & ECP_ATADDRMASK) >> ECP_ATADDRSHFT;
-       outb((brdp->iobase + ECP_ATMEMAR), memconf);
-}
-
-/*****************************************************************************/
-
-static void stli_ecpenable(stlibrd_t *brdp)
-{      
-#if STLDEBUG
-       kprintf("stli_ecpenable(brdp=%x)\n", (int) brdp);
-#endif
-       outb((brdp->iobase + ECP_ATCONFR), ECP_ATENABLE);
-}
-
-/*****************************************************************************/
-
-static void stli_ecpdisable(stlibrd_t *brdp)
-{      
-#if STLDEBUG
-       kprintf("stli_ecpdisable(brdp=%x)\n", (int) brdp);
-#endif
-       outb((brdp->iobase + ECP_ATCONFR), ECP_ATDISABLE);
-}
-
-/*****************************************************************************/
-
-static char *stli_ecpgetmemptr(stlibrd_t *brdp, unsigned long offset, int line)
-{      
-       void            *ptr;
-       unsigned char   val;
-
-#if STLDEBUG
-       kprintf("stli_ecpgetmemptr(brdp=%x,offset=%x)\n", (int) brdp,
-               (int) offset);
-#endif
-
-       if (offset > brdp->memsize) {
-               kprintf("STALLION: shared memory pointer=%x out of range at "
-                       "line=%d(%d), brd=%d\n", (int) offset, line,
-                       __LINE__, brdp->brdnr);
-               ptr = NULL;
-               val = 0;
-       } else {
-               ptr = (char *) brdp->vaddr + (offset % ECP_ATPAGESIZE);
-               val = (unsigned char) (offset / ECP_ATPAGESIZE);
-       }
-       outb((brdp->iobase + ECP_ATMEMPR), val);
-       return(ptr);
-}
-
-/*****************************************************************************/
-
-static void stli_ecpreset(stlibrd_t *brdp)
-{      
-#if STLDEBUG
-       kprintf("stli_ecpreset(brdp=%x)\n", (int) brdp);
-#endif
-
-       outb((brdp->iobase + ECP_ATCONFR), ECP_ATSTOP);
-       DELAY(10);
-       outb((brdp->iobase + ECP_ATCONFR), ECP_ATDISABLE);
-       DELAY(500);
-}
-
-/*****************************************************************************/
-
-static void stli_ecpintr(stlibrd_t *brdp)
-{      
-#if STLDEBUG
-       kprintf("stli_ecpintr(brdp=%x)\n", (int) brdp);
-#endif
-       outb(brdp->iobase, 0x1);
-}
-
-/*****************************************************************************/
-
-/*
- *     The following routines act on ONboards.
- */
-
-static void stli_onbinit(stlibrd_t *brdp)
-{
-       unsigned long   memconf;
-       int             i;
-
-#if STLDEBUG
-       kprintf("stli_onbinit(brdp=%d)\n", (int) brdp);
-#endif
-
-       outb((brdp->iobase + ONB_ATCONFR), ONB_ATSTOP);
-       DELAY(10);
-       outb((brdp->iobase + ONB_ATCONFR), ONB_ATDISABLE);
-       for (i = 0; (i < 1000); i++)
-               DELAY(1000);
-
-       memconf = (brdp->paddr & ONB_ATADDRMASK) >> ONB_ATADDRSHFT;
-       outb((brdp->iobase + ONB_ATMEMAR), memconf);
-       outb(brdp->iobase, 0x1);
-       DELAY(1000);
-}
-
-/*****************************************************************************/
-
-static void stli_onbenable(stlibrd_t *brdp)
-{      
-#if STLDEBUG
-       kprintf("stli_onbenable(brdp=%x)\n", (int) brdp);
-#endif
-       outb((brdp->iobase + ONB_ATCONFR), (ONB_ATENABLE | brdp->confbits));
-}
-
-/*****************************************************************************/
-
-static void stli_onbdisable(stlibrd_t *brdp)
-{      
-#if STLDEBUG
-       kprintf("stli_onbdisable(brdp=%x)\n", (int) brdp);
-#endif
-       outb((brdp->iobase + ONB_ATCONFR), (ONB_ATDISABLE | brdp->confbits));
-}
-
-/*****************************************************************************/
-
-static char *stli_onbgetmemptr(stlibrd_t *brdp, unsigned long offset, int line)
-{      
-       void    *ptr;
-
-#if STLDEBUG
-       kprintf("stli_onbgetmemptr(brdp=%x,offset=%x)\n", (int) brdp,
-               (int) offset);
-#endif
-
-       if (offset > brdp->memsize) {
-               kprintf("STALLION: shared memory pointer=%x out of range at "
-                       "line=%d(%d), brd=%d\n", (int) offset, line,
-                       __LINE__, brdp->brdnr);
-               ptr = NULL;
-       } else {
-               ptr = (char *) brdp->vaddr + (offset % ONB_ATPAGESIZE);
-       }
-       return(ptr);
-}
-
-/*****************************************************************************/
-
-static void stli_onbreset(stlibrd_t *brdp)
-{      
-       int     i;
-
-#if STLDEBUG
-       kprintf("stli_onbreset(brdp=%x)\n", (int) brdp);
-#endif
-
-       outb((brdp->iobase + ONB_ATCONFR), ONB_ATSTOP);
-       DELAY(10);
-       outb((brdp->iobase + ONB_ATCONFR), ONB_ATDISABLE);
-       for (i = 0; (i < 1000); i++)
-               DELAY(1000);
-}
-
-/*****************************************************************************/
-
-/*
- *     The following routines act on Brumby boards.
- */
-
-static void stli_bbyinit(stlibrd_t *brdp)
-{
-       int     i;
-
-#if STLDEBUG
-       kprintf("stli_bbyinit(brdp=%d)\n", (int) brdp);
-#endif
-
-       outb((brdp->iobase + BBY_ATCONFR), BBY_ATSTOP);
-       DELAY(10);
-       outb((brdp->iobase + BBY_ATCONFR), 0);
-       for (i = 0; (i < 1000); i++)
-               DELAY(1000);
-       outb(brdp->iobase, 0x1);
-       DELAY(1000);
-}
-
-/*****************************************************************************/
-
-static char *stli_bbygetmemptr(stlibrd_t *brdp, unsigned long offset, int line)
-{      
-       void            *ptr;
-       unsigned char   val;
-
-#if STLDEBUG
-       kprintf("stli_bbygetmemptr(brdp=%x,offset=%x)\n", (int) brdp,
-               (int) offset);
-#endif
-
-       if (offset > brdp->memsize) {
-               kprintf("STALLION: shared memory pointer=%x out of range at "
-                       "line=%d(%d), brd=%d\n", (int) offset, line,
-                       __LINE__, brdp->brdnr);
-               ptr = NULL;
-               val = 0;
-       } else {
-               ptr = (char *) brdp->vaddr + (offset % BBY_PAGESIZE);
-               val = (unsigned char) (offset / BBY_PAGESIZE);
-       }
-       outb((brdp->iobase + BBY_ATCONFR), val);
-       return(ptr);
-}
-
-/*****************************************************************************/
-
-static void stli_bbyreset(stlibrd_t *brdp)
-{      
-       int     i;
-
-#if STLDEBUG
-       kprintf("stli_bbyreset(brdp=%x)\n", (int) brdp);
-#endif
-
-       outb((brdp->iobase + BBY_ATCONFR), BBY_ATSTOP);
-       DELAY(10);
-       outb((brdp->iobase + BBY_ATCONFR), 0);
-       for (i = 0; (i < 1000); i++)
-               DELAY(1000);
-}
-
-/*****************************************************************************/
-
-/*
- *     The following routines act on original old Stallion boards.
- */
-
-static void stli_stalinit(stlibrd_t *brdp)
-{
-       int     i;
-
-#if STLDEBUG
-       kprintf("stli_stalinit(brdp=%d)\n", (int) brdp);
-#endif
-
-       outb(brdp->iobase, 0x1);
-       for (i = 0; (i < 1000); i++)
-               DELAY(1000);
-}
-
-/*****************************************************************************/
-
-static char *stli_stalgetmemptr(stlibrd_t *brdp, unsigned long offset, int line)
-{      
-       void    *ptr;
-
-#if STLDEBUG
-       kprintf("stli_stalgetmemptr(brdp=%x,offset=%x)\n", (int) brdp,
-               (int) offset);
-#endif
-
-       if (offset > brdp->memsize) {
-               kprintf("STALLION: shared memory pointer=%x out of range at "
-                       "line=%d(%d), brd=%d\n", (int) offset, line,
-                       __LINE__, brdp->brdnr);
-               ptr = NULL;
-       } else {
-               ptr = (char *) brdp->vaddr + (offset % STAL_PAGESIZE);
-       }
-       return(ptr);
-}
-
-/*****************************************************************************/
-
-static void stli_stalreset(stlibrd_t *brdp)
-{      
-       volatile unsigned long  *vecp;
-       int                     i;
-
-#if STLDEBUG
-       kprintf("stli_stalreset(brdp=%x)\n", (int) brdp);
-#endif
-
-       vecp = (volatile unsigned long *) ((char *) brdp->vaddr + 0x30);
-       *vecp = 0xffff0000;
-       outb(brdp->iobase, 0);
-       for (i = 0; (i < 1000); i++)
-               DELAY(1000);
-}
-
-/*****************************************************************************/
-
-/*
- *     Try to find an ECP board and initialize it. This handles only ECP
- *     board types.
- */
-
-static int stli_initecp(stlibrd_t *brdp)
-{
-       cdkecpsig_t     sig;
-       cdkecpsig_t     *sigsp;
-       unsigned int    status, nxtid;
-       int             panelnr;
-
-#if STLDEBUG
-       kprintf("stli_initecp(brdp=%x)\n", (int) brdp);
-#endif
-
-/*
- *     Do a basic sanity check on the IO and memory addresses.
- */
-       if ((brdp->iobase == 0) || (brdp->paddr == 0))
-               return(EINVAL);
-
-/*
- *     Based on the specific board type setup the common vars to access
- *     and enable shared memory. Set all board specific information now
- *     as well.
- */
-       switch (brdp->brdtype) {
-       case BRD_ECP:
-               brdp->memsize = ECP_MEMSIZE;
-               brdp->pagesize = ECP_ATPAGESIZE;
-               brdp->init = stli_ecpinit;
-               brdp->enable = stli_ecpenable;
-               brdp->reenable = stli_ecpenable;
-               brdp->disable = stli_ecpdisable;
-               brdp->getmemptr = stli_ecpgetmemptr;
-               brdp->intr = stli_ecpintr;
-               brdp->reset = stli_ecpreset;
-               break;
-
-       default:
-               return(EINVAL);
-       }
-
-/*
- *     The per-board operations structure is all setup, so now lets go
- *     and get the board operational. Firstly initialize board configuration
- *     registers.
- */
-       EBRDINIT(brdp);
-
-/*
- *     Now that all specific code is set up, enable the shared memory and
- *     look for the a signature area that will tell us exactly what board
- *     this is, and what it is connected to it.
- */
-       EBRDENABLE(brdp);
-       sigsp = (cdkecpsig_t *) EBRDGETMEMPTR(brdp, CDK_SIGADDR);
-       bcopy(sigsp, &sig, sizeof(cdkecpsig_t));
-       EBRDDISABLE(brdp);
-
-#if 0
-       kprintf("%s(%d): sig-> magic=%x rom=%x panel=%x,%x,%x,%x,%x,%x,%x,%x\n",
-               __file__, __LINE__, (int) sig.magic, sig.romver,
-               sig.panelid[0], (int) sig.panelid[1], (int) sig.panelid[2],
-               (int) sig.panelid[3], (int) sig.panelid[4],
-               (int) sig.panelid[5], (int) sig.panelid[6],
-               (int) sig.panelid[7]);
-#endif
-
-       if (sig.magic != ECP_MAGIC)
-               return(ENXIO);
-
-/*
- *     Scan through the signature looking at the panels connected to the
- *     board. Calculate the total number of ports as we go.
- */
-       for (panelnr = 0, nxtid = 0; (panelnr < STL_MAXPANELS); panelnr++) {
-               status = sig.panelid[nxtid];
-               if ((status & ECH_PNLIDMASK) != nxtid)
-                       break;
-               brdp->panelids[panelnr] = status;
-               if (status & ECH_PNL16PORT) {
-                       brdp->panels[panelnr] = 16;
-                       brdp->nrports += 16;
-                       nxtid += 2;
-               } else {
-                       brdp->panels[panelnr] = 8;
-                       brdp->nrports += 8;
-                       nxtid++;
-               }
-               brdp->nrpanels++;
-       }
-
-       brdp->state |= BST_FOUND;
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Try to find an ONboard, Brumby or Stallion board and initialize it.
- *     This handles only these board types.
- */
-
-static int stli_initonb(stlibrd_t *brdp)
-{
-       cdkonbsig_t     sig;
-       cdkonbsig_t     *sigsp;
-       int             i;
-
-#if STLDEBUG
-       kprintf("stli_initonb(brdp=%x)\n", (int) brdp);
-#endif
-
-/*
- *     Do a basic sanity check on the IO and memory addresses.
- */
-       if ((brdp->iobase == 0) || (brdp->paddr == 0))
-               return(EINVAL);
-
-/*
- *     Based on the specific board type setup the common vars to access
- *     and enable shared memory. Set all board specific information now
- *     as well.
- */
-       switch (brdp->brdtype) {
-       case BRD_ONBOARD:
-       case BRD_ONBOARD32:
-       case BRD_ONBOARD2:
-       case BRD_ONBOARD2_32:
-       case BRD_ONBOARDRS:
-               brdp->memsize = ONB_MEMSIZE;
-               brdp->pagesize = ONB_ATPAGESIZE;
-               brdp->init = stli_onbinit;
-               brdp->enable = stli_onbenable;
-               brdp->reenable = stli_onbenable;
-               brdp->disable = stli_onbdisable;
-               brdp->getmemptr = stli_onbgetmemptr;
-               brdp->intr = stli_ecpintr;
-               brdp->reset = stli_onbreset;
-               brdp->confbits = (brdp->paddr > 0x100000) ? ONB_HIMEMENAB : 0;
-               break;
-
-       case BRD_BRUMBY4:
-       case BRD_BRUMBY8:
-       case BRD_BRUMBY16:
-               brdp->memsize = BBY_MEMSIZE;
-               brdp->pagesize = BBY_PAGESIZE;
-               brdp->init = stli_bbyinit;
-               brdp->enable = NULL;
-               brdp->reenable = NULL;
-               brdp->disable = NULL;
-               brdp->getmemptr = stli_bbygetmemptr;
-               brdp->intr = stli_ecpintr;
-               brdp->reset = stli_bbyreset;
-               break;
-
-       case BRD_STALLION:
-               brdp->memsize = STAL_MEMSIZE;
-               brdp->pagesize = STAL_PAGESIZE;
-               brdp->init = stli_stalinit;
-               brdp->enable = NULL;
-               brdp->reenable = NULL;
-               brdp->disable = NULL;
-               brdp->getmemptr = stli_stalgetmemptr;
-               brdp->intr = stli_ecpintr;
-               brdp->reset = stli_stalreset;
-               break;
-
-       default:
-               return(EINVAL);
-       }
-
-/*
- *     The per-board operations structure is all setup, so now lets go
- *     and get the board operational. Firstly initialize board configuration
- *     registers.
- */
-       EBRDINIT(brdp);
-
-/*
- *     Now that all specific code is set up, enable the shared memory and
- *     look for the a signature area that will tell us exactly what board
- *     this is, and how many ports.
- */
-       EBRDENABLE(brdp);
-       sigsp = (cdkonbsig_t *) EBRDGETMEMPTR(brdp, CDK_SIGADDR);
-       bcopy(sigsp, &sig, sizeof(cdkonbsig_t));
-       EBRDDISABLE(brdp);
-
-#if 0
-       kprintf("%s(%d): sig-> magic=%x:%x:%x:%x romver=%x amask=%x:%x:%x\n",
-               __file__, __LINE__, sig.magic0, sig.magic1, sig.magic2,
-               sig.magic3, sig.romver, sig.amask0, sig.amask1, sig.amask2);
-#endif
-
-       if ((sig.magic0 != ONB_MAGIC0) || (sig.magic1 != ONB_MAGIC1) ||
-           (sig.magic2 != ONB_MAGIC2) || (sig.magic3 != ONB_MAGIC3))
-               return(ENXIO);
-
-/*
- *     Scan through the signature alive mask and calculate how many ports
- *     there are on this board.
- */
-       brdp->nrpanels = 1;
-       if (sig.amask1) {
-               brdp->nrports = 32;
-       } else {
-               for (i = 0; (i < 16); i++) {
-                       if (((sig.amask0 << i) & 0x8000) == 0)
-                               break;
-               }
-               brdp->nrports = i;
-       }
-       brdp->panels[0] = brdp->nrports;
-
-       brdp->state |= BST_FOUND;
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Start up a running board. This routine is only called after the
- *     code has been down loaded to the board and is operational. It will
- *     read in the memory map, and get the show on the road...
- */
-
-static int stli_startbrd(stlibrd_t *brdp)
-{
-       volatile cdkhdr_t       *hdrp;
-       volatile cdkmem_t       *memp;
-       volatile cdkasy_t       *ap;
-       stliport_t              *portp;
-       int                     portnr, nrdevs, i, rc;
-
-#if STLDEBUG
-       kprintf("stli_startbrd(brdp=%x)\n", (int) brdp);
-#endif
-
-       rc = 0;
-
-       crit_enter();
-       EBRDENABLE(brdp);
-       hdrp = (volatile cdkhdr_t *) EBRDGETMEMPTR(brdp, CDK_CDKADDR);
-       nrdevs = hdrp->nrdevs;
-
-#if 0
-       kprintf("%s(%d): CDK version %d.%d.%d --> nrdevs=%d memp=%x hostp=%x "
-               "slavep=%x\n", __file__, __LINE__, hdrp->ver_release,
-               hdrp->ver_modification, hdrp->ver_fix, nrdevs,
-               (int) hdrp->memp, (int) hdrp->hostp, (int) hdrp->slavep);
-#endif
-
-       if (nrdevs < (brdp->nrports + 1)) {
-               kprintf("STALLION: slave failed to allocate memory for all "
-                       "devices, devices=%d\n", nrdevs);
-               brdp->nrports = nrdevs - 1;
-       }
-       brdp->nrdevs = nrdevs;
-       brdp->hostoffset = hdrp->hostp - CDK_CDKADDR;
-       brdp->slaveoffset = hdrp->slavep - CDK_CDKADDR;
-       brdp->bitsize = (nrdevs + 7) / 8;
-       memp = (volatile cdkmem_t *) (void *) (uintptr_t) hdrp->memp;
-       if ((uintptr_t)(volatile void *)memp > brdp->memsize) {
-               kprintf("STALLION: corrupted shared memory region?\n");
-               rc = EIO;
-               goto stli_donestartup;
-       }
-       memp = (volatile cdkmem_t *) EBRDGETMEMPTR(brdp,
-                                                  (uintptr_t)(volatile void *)memp);
-       if (memp->dtype != TYP_ASYNCTRL) {
-               kprintf("STALLION: no slave control device found\n");
-               rc = EIO;
-               goto stli_donestartup;
-       }
-       memp++;
-
-/*
- *     Cycle through memory allocation of each port. We are guaranteed to
- *     have all ports inside the first page of slave window, so no need to
- *     change pages while reading memory map.
- */
-       for (i = 1, portnr = 0; (i < nrdevs); i++, portnr++, memp++) {
-               if (memp->dtype != TYP_ASYNC)
-                       break;
-               portp = brdp->ports[portnr];
-               if (portp == NULL)
-                       break;
-               portp->devnr = i;
-               portp->addr = memp->offset;
-               portp->reqidx = (unsigned char) (i * 8 / nrdevs);
-               portp->reqbit = (unsigned char) (0x1 << portp->reqidx);
-               portp->portidx = (unsigned char) (i / 8);
-               portp->portbit = (unsigned char) (0x1 << (i % 8));
-       }
-
-       hdrp->slavereq = 0xff;
-
-/*
- *     For each port setup a local copy of the RX and TX buffer offsets
- *     and sizes. We do this separate from the above, because we need to
- *     move the shared memory page...
- */
-       for (i = 1, portnr = 0; (i < nrdevs); i++, portnr++) {
-               portp = brdp->ports[portnr];
-               if (portp == NULL)
-                       break;
-               if (portp->addr == 0)
-                       break;
-               ap = (volatile cdkasy_t *) EBRDGETMEMPTR(brdp, portp->addr);
-               if (ap != NULL) {
-                       portp->rxsize = ap->rxq.size;
-                       portp->txsize = ap->txq.size;
-                       portp->rxoffset = ap->rxq.offset;
-                       portp->txoffset = ap->txq.offset;
-               }
-       }
-
-stli_donestartup:
-       EBRDDISABLE(brdp);
-       crit_exit();
-
-       if (rc == 0)
-               brdp->state |= BST_STARTED;
-
-       if (stli_doingtimeout == 0) {
-               stli_doingtimeout++;
-               callout_init(&stli_poll_ch);
-               callout_reset(&stli_poll_ch, 1, stli_poll, NULL);
-       }
-
-       return(rc);
-}
-
-/*****************************************************************************/
-
-/*
- *     Probe and initialize the specified board.
- */
-
-static int stli_brdinit(stlibrd_t *brdp)
-{
-#if STLDEBUG
-       kprintf("stli_brdinit(brdp=%x)\n", (int) brdp);
-#endif
-
-       stli_brds[brdp->brdnr] = brdp;
-
-       switch (brdp->brdtype) {
-       case BRD_ECP:
-       case BRD_ECPE:
-               stli_initecp(brdp);
-               break;
-       case BRD_ONBOARD:
-       case BRD_ONBOARDE:
-       case BRD_ONBOARD2:
-       case BRD_ONBOARD32:
-       case BRD_ONBOARD2_32:
-       case BRD_ONBOARDRS:
-       case BRD_BRUMBY4:
-       case BRD_BRUMBY8:
-       case BRD_BRUMBY16:
-       case BRD_STALLION:
-               stli_initonb(brdp);
-               break;
-       case BRD_EASYIO:
-       case BRD_ECH:
-       case BRD_ECHMC:
-       case BRD_ECHPCI:
-               kprintf("STALLION: %s board type not supported in this driver\n",
-                       stli_brdnames[brdp->brdtype]);
-               return(ENODEV);
-       default:
-               kprintf("STALLION: unit=%d is unknown board type=%d\n",
-                       brdp->brdnr, brdp->brdtype);
-               return(ENODEV);
-       }
-
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Finish off the remaining initialization for a board.
- */
-
-static int stli_brdattach(stlibrd_t *brdp)
-{
-#if STLDEBUG
-       kprintf("stli_brdattach(brdp=%x)\n", (int) brdp);
-#endif
-
-#if 0
-       if ((brdp->state & BST_FOUND) == 0) {
-               kprintf("STALLION: %s board not found, unit=%d io=%x mem=%x\n",
-                       stli_brdnames[brdp->brdtype], brdp->brdnr,
-                       brdp->iobase, (int) brdp->paddr);
-               return(ENXIO);
-       }
-#endif
-
-       stli_initports(brdp);
-       kprintf("stli%d: %s (driver version %s), unit=%d nrpanels=%d "
-               "nrports=%d\n", brdp->unitid, stli_brdnames[brdp->brdtype],
-               stli_drvversion, brdp->brdnr, brdp->nrpanels, brdp->nrports);
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*****************************************************************************/
-
-/*
- *     Return the board stats structure to user app.
- */
-
-static int stli_getbrdstats(caddr_t data)
-{
-       stlibrd_t       *brdp;
-       int             i;
-
-#if STLDEBUG
-       kprintf("stli_getbrdstats(data=%p)\n", (void *) data);
-#endif
-
-       stli_brdstats = *((combrd_t *) data);
-       if (stli_brdstats.brd >= STL_MAXBRDS)
-               return(ENODEV);
-       brdp = stli_brds[stli_brdstats.brd];
-       if (brdp == NULL)
-               return(ENODEV);
-
-       bzero(&stli_brdstats, sizeof(combrd_t));
-       stli_brdstats.brd = brdp->brdnr;
-       stli_brdstats.type = brdp->brdtype;
-       stli_brdstats.hwid = 0;
-       stli_brdstats.state = brdp->state;
-       stli_brdstats.ioaddr = brdp->iobase;
-       stli_brdstats.memaddr = brdp->paddr;
-       stli_brdstats.nrpanels = brdp->nrpanels;
-       stli_brdstats.nrports = brdp->nrports;
-       for (i = 0; (i < brdp->nrpanels); i++) {
-               stli_brdstats.panels[i].panel = i;
-               stli_brdstats.panels[i].hwid = brdp->panelids[i];
-               stli_brdstats.panels[i].nrports = brdp->panels[i];
-       }
-
-       *((combrd_t *) data) = stli_brdstats;
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Resolve the referenced port number into a port struct pointer.
- */
-
-static stliport_t *stli_getport(int brdnr, int panelnr, int portnr)
-{
-       stlibrd_t       *brdp;
-       int             i;
-
-       if ((brdnr < 0) || (brdnr >= STL_MAXBRDS))
-               return(NULL);
-       brdp = stli_brds[brdnr];
-       if (brdp == NULL)
-               return(NULL);
-       for (i = 0; (i < panelnr); i++)
-               portnr += brdp->panels[i];
-       if ((portnr < 0) || (portnr >= brdp->nrports))
-               return(NULL);
-       return(brdp->ports[portnr]);
-}
-
-/*****************************************************************************/
-
-/*
- *     Return the port stats structure to user app. A NULL port struct
- *     pointer passed in means that we need to find out from the app
- *     what port to get stats for (used through board control device).
- */
-
-static int stli_getportstats(stliport_t *portp, caddr_t data)
-{
-       stlibrd_t       *brdp;
-       int             rc;
-
-       if (portp == NULL) {
-               stli_comstats = *((comstats_t *) data);
-               portp = stli_getport(stli_comstats.brd, stli_comstats.panel,
-                       stli_comstats.port);
-               if (portp == NULL)
-                       return(ENODEV);
-       }
-
-       brdp = stli_brds[portp->brdnr];
-       if (brdp == NULL)
-               return(ENODEV);
-
-       if (brdp->state & BST_STARTED) {
-               if ((rc = stli_cmdwait(brdp, portp, A_GETSTATS, &stli_cdkstats,
-                   sizeof(asystats_t), 1)) < 0)
-                       return(rc);
-       } else {
-               bzero(&stli_cdkstats, sizeof(asystats_t));
-       }
-
-       stli_comstats.brd = portp->brdnr;
-       stli_comstats.panel = portp->panelnr;
-       stli_comstats.port = portp->portnr;
-       stli_comstats.state = portp->state;
-       /*stli_comstats.flags = portp->flags;*/
-       stli_comstats.ttystate = portp->tty.t_state;
-       stli_comstats.cflags = portp->tty.t_cflag;
-       stli_comstats.iflags = portp->tty.t_iflag;
-       stli_comstats.oflags = portp->tty.t_oflag;
-       stli_comstats.lflags = portp->tty.t_lflag;
-
-       stli_comstats.txtotal = stli_cdkstats.txchars;
-       stli_comstats.rxtotal = stli_cdkstats.rxchars + stli_cdkstats.ringover;
-       stli_comstats.txbuffered = stli_cdkstats.txringq;
-       stli_comstats.rxbuffered = stli_cdkstats.rxringq;
-       stli_comstats.rxoverrun = stli_cdkstats.overruns;
-       stli_comstats.rxparity = stli_cdkstats.parity;
-       stli_comstats.rxframing = stli_cdkstats.framing;
-       stli_comstats.rxlost = stli_cdkstats.ringover + portp->rxlost;
-       stli_comstats.rxbreaks = stli_cdkstats.rxbreaks;
-       stli_comstats.txbreaks = stli_cdkstats.txbreaks;
-       stli_comstats.txxon = stli_cdkstats.txstart;
-       stli_comstats.txxoff = stli_cdkstats.txstop;
-       stli_comstats.rxxon = stli_cdkstats.rxstart;
-       stli_comstats.rxxoff = stli_cdkstats.rxstop;
-       stli_comstats.rxrtsoff = stli_cdkstats.rtscnt / 2;
-       stli_comstats.rxrtson = stli_cdkstats.rtscnt - stli_comstats.rxrtsoff;
-       stli_comstats.modem = stli_cdkstats.dcdcnt;
-       stli_comstats.hwid = stli_cdkstats.hwid;
-       stli_comstats.signals = stli_mktiocm(stli_cdkstats.signals);
-
-       *((comstats_t *) data) = stli_comstats;
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Clear the port stats structure. We also return it zeroed out...
- */
-
-static int stli_clrportstats(stliport_t *portp, caddr_t data)
-{
-       stlibrd_t       *brdp;
-       int             rc;
-
-       if (portp == NULL) {
-               stli_comstats = *((comstats_t *) data);
-               portp = stli_getport(stli_comstats.brd, stli_comstats.panel,
-                       stli_comstats.port);
-               if (portp == NULL)
-                       return(ENODEV);
-       }
-
-       brdp = stli_brds[portp->brdnr];
-       if (brdp == NULL)
-               return(ENODEV);
-
-       if ((rc = stli_cmdwait(brdp, portp, A_CLEARSTATS, 0, 0, 0)) < 0)
-               return(rc);
-
-       portp->rxlost = 0;
-       bzero(&stli_comstats, sizeof(comstats_t));
-       stli_comstats.brd = portp->brdnr;
-       stli_comstats.panel = portp->panelnr;
-       stli_comstats.port = portp->portnr;
-
-       *((comstats_t *) data) = stli_comstats;
-       return(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Code to handle an "staliomem" read and write operations. This device
- *     is the contents of the board shared memory. It is used for down
- *     loading the slave image (and debugging :-)
- */
-
-STATIC int stli_memrw(cdev_t dev, struct uio *uiop, int flag)
-{
-       stlibrd_t       *brdp;
-       void            *memptr;
-       int             brdnr, size, n, error;
-
-#if STLDEBUG
-       kprintf("stli_memrw(dev=%x,uiop=%x,flag=%x)\n", (int) dev,
-               (int) uiop, flag);
-#endif
-
-       brdnr = minor(dev) & 0x7;
-       brdp = stli_brds[brdnr];
-       if (brdp == NULL)
-               return(ENODEV);
-       if (brdp->state == 0)
-               return(ENODEV);
-
-       if (uiop->uio_offset >= brdp->memsize)
-               return(0);
-
-       error = 0;
-       size = brdp->memsize - uiop->uio_offset;
-
-       crit_enter();
-       EBRDENABLE(brdp);
-       while (size > 0) {
-               memptr = (void *) EBRDGETMEMPTR(brdp, uiop->uio_offset);
-               n = MIN(size, (brdp->pagesize -
-                       (((unsigned long) uiop->uio_offset) % brdp->pagesize)));
-               error = uiomove(memptr, n, uiop);
-               if ((uiop->uio_resid == 0) || error)
-                       break;
-       }
-       EBRDDISABLE(brdp);
-       crit_exit();
-
-       return(error);
-}
-
-/*****************************************************************************/
-
-/*
- *     The "staliomem" device is also required to do some special operations
- *     on the board. We need to be able to send an interrupt to the board,
- *     reset it, and start/stop it.
- */
-
-static int stli_memioctl(cdev_t dev, unsigned long cmd, caddr_t data, int flag)
-{
-       stlibrd_t       *brdp;
-       int             brdnr, rc;
-
-#if STLDEBUG
-       kprintf("stli_memioctl(dev=%s,cmd=%lx,data=%p,flag=%x)\n",
-               devtoname(dev), cmd, (void *) data, flag);
-#endif
-
-/*
- *     Handle board independant ioctls first.
- */
-       switch (cmd) {
-       case COM_GETPORTSTATS:
-               return(stli_getportstats(NULL, data));
-               break;
-       case COM_CLRPORTSTATS:
-               return(stli_clrportstats(NULL, data));
-               break;
-       case COM_GETBRDSTATS:
-               return(stli_getbrdstats(data));
-               break;
-       default:
-               break;
-       }
-
-/*
- *     Handle board dependant ioctls now.
- */
-       brdnr = minor(dev) & 0x7;
-       brdp = stli_brds[brdnr];
-       if (brdp == NULL)
-               return(ENODEV);
-       if (brdp->state == 0)
-               return(ENODEV);
-
-       rc = 0;
-
-       switch (cmd) {
-       case STL_BINTR:
-               EBRDINTR(brdp);
-               break;
-       case STL_BSTART:
-               rc = stli_startbrd(brdp);
-               break;
-       case STL_BSTOP:
-               brdp->state &= ~BST_STARTED;
-               break;
-       case STL_BRESET:
-               brdp->state &= ~BST_STARTED;
-               EBRDRESET(brdp);
-               if (stli_shared == 0) {
-                       if (brdp->reenable != NULL)
-                               (* brdp->reenable)(brdp);
-               }
-               break;
-       case COM_GETPORTSTATS:
-               rc = stli_getportstats(NULL, data);
-               break;
-       case COM_CLRPORTSTATS:
-               rc = stli_clrportstats(NULL, data);
-               break;
-       case COM_GETBRDSTATS:
-               rc = stli_getbrdstats(data);
-               break;
-       default:
-               rc = ENOTTY;
-               break;
-       }
-
-       return(rc);
-}
-
-/*****************************************************************************/
index 3f74c22..c7079fa 100644 (file)
@@ -267,7 +267,6 @@ platform/pc32/isa/isa_intr.c                standard
 bus/isa/i386/isa.c                     optional        isa
 bus/isa/i386/isa_compat.c              optional nowerror       isa compat_oldisa
 bus/isa/i386/isa_dma.c                 optional        isa
-dev/serial/stli/istallion.c            optional nowerror       stli
 platform/pc32/isa/npx.c                        mandatory       npx
 bus/pci/i386/legacy.c                  optional        pci
 bus/pci/i386/pci_bus.c                 optional        pci
@@ -278,7 +277,7 @@ platform/pc32/isa/pmtimer.c         optional        pmtimer acpi
 # XXX drhodus
 platform/pc32/isa/prof_machdep.c       optional        profiling-routine
 dev/misc/spic/spic.c                   optional nowerror       spic
-dev/serial/stl/stallion.c              optional        stl
+dev/serial/stl/stallion.c              optional        stl pci
 dev/video/i386/vesa/vesa.c             optional        vga vesa
 emulation/linux/i386/imgact_linux.c    optional        compat_linux
 emulation/linux/i386/linux_dummy.c     optional        compat_linux
index 5e334b0..82fee69 100644 (file)
@@ -355,8 +355,6 @@ static DEV_INFO device_info[] = {
 {"cx",          "Cronyx/Sigma multiport sync/async adapter",0,         CLS_COMMS},
 {"cy",          "Cyclades multiport async adapter",    0,              CLS_COMMS},
 {"si",          "Specialix SI/XIO/SX async adapter",   0,              CLS_COMMS},
-{"stl",         "Stallion EasyIO/Easy Connection 8/32 async adapter",0,        CLS_COMMS},
-{"stli",        "Stallion intelligent async adapter"   ,0,             CLS_COMMS},
 {"ppc",         "Parallel Port chipset",               0,              CLS_COMMS},
 
 {"atkbdc",      "Keyboard controller",                 FLG_INVISIBLE,  CLS_INPUT},
diff --git a/sys/platform/pc32/isa/README.stl b/sys/platform/pc32/isa/README.stl
deleted file mode 100644 (file)
index 54d2f6e..0000000
+++ /dev/null
@@ -1,530 +0,0 @@
-$FreeBSD: src/sys/i386/isa/README.stl,v 1.3.6.2 2001/08/30 12:29:57 murray Exp $
-$DragonFly: src/sys/platform/pc32/isa/README.stl,v 1.3 2003/08/07 21:17:23 dillon Exp $
-
-Stallion Multiport Serial Driver Readme
----------------------------------------
-
-Version: 2.0.0
-Date:    22JAN98
-Author:  Greg Ungerer (gerg@stallion.com)
-
-
-
-1. INTRODUCTION
-
-This is a set of FreeBSD drivers for most of the Stallion Technologies
-range of multiport serial boards.
-
-This driver has not been developed by Stallion Technologies. I developed it
-in my spare time in the hope that it would be useful. As such there is no
-warranty or support of any form. What this means is that this driver is not
-officially supported by Stallion Technologies, so don't ring their support
-if you can't get it working. They will probably not be able to help you.
-Instead email me if you have problems or bug reports and I will do what I
-can... (Sorry to sound so heavy handed, but I need to stress that this driver
-is not officially supported in any way.)
-
-This package actually contains two drivers. One is for the true Stallion
-intelligent multiport boards, and the other is for the smart range of boards.
-
-All host driver source is included in this package, and is copyrighted under
-a BSD style copyright. The board "firmware" code in this package is copyright
-Stallion Technologies (the files cdk.sys and 2681.sys).
-
-
-1.1 SMART MULTIPORT BOARD DRIVER
-
-This driver supports the EasyIO, EasyConnection 8/32 and EasyConnection
-8/64-PCI range of boards. These boards are not classic intelligent multiport
-boards, but are host based multiport boards that use Cirrus Logic CL-CD1400
-UART's, or on newer versions of the hardware use the Signetics 26C198 UART.
-Both of these are high performance UART's with built in FIFO's, automatic
-flow control and a host of other features.
-
-The EasyIO range of cards comes in 4 forms, the EasyIO-4, EasyIO-8,
-EasyIO-8M and EasyIO-8-PCI. The first three are ISA based boards while
-the last is a PCI bus board. All of these are non-expandable, low cost,
-multiport boards with 4 or 8 RS-232C ports. Each ISA EasyIO board requires 8
-bytes of I/O address space and 1 interrupt. The PCI EasyIO board uses 64
-bytes of I/O address space and 1 interrupt. On EISA and PCI systems it is
-possible to share 1 interrupt between multiple boards. The EasyIO-4 has 10
-pin RJ connectors, and the EasyIO-8 comes with a dongle cable with either 10
-pin RJ connectors or DB-25 connectors. The EasyIO-8M has 6 pin RJ connectors.
-
-The EasyConnection 8/32 family of boards is a relatively low cost modular
-range of multiport serial boards. The EasyConnection 8/32 boards can be
-configured to have from 8 to 32 serial ports by plugging in external serial
-port modules that contain either 8 or 16 ports each. There is a wide range
-of external modules available that offer: DB-25 connectors, RJ-45 connectors
-(both with RS-232 D and E compatible drivers), and also RS-422 and RS-485
-ports. The EasyConnection 8/32 boards come in ISA, PCI and MCA bus versions.
-The board takes the form of a host adapter card, with an external connector
-cable that plugs into the external modules. The external modules just clip
-together to add ports (BTW, they are NOT hot pluggable). Each ISA
-EasyConnection 8/32 board requires two separate I/O address ranges, one two
-bytes in size and a secondary region of 32 bytes. Each PCI EasyConnection
-8/32 requires two regions of I/O address space, normally these will be
-automatically allocated by the system BIOS at power on time. Each MCA
-EasyConnection board requires one I/O address region 64 bytes in size. All
-board types also require one interrupt. On EISA systems multiple boards can
-share one interrupt. The secondary I/O range of the ISA board (the 32 byte
-range) can be shared between multiple boards on any bus type.
-
-The EasyConnection 8/64-PCI family is similar to the EasyConnection 8/32-PCI
-board, and uses the same external modules. It is supported by the smart
-board driver - not the intelligent board driver. It uses 2 regions of I/O
-address space, both 64 bytes in size, and 1 interrupt.
-
-
-1.2 INTELLIGENT MULTIPORT BOARD DRIVER
-
-This driver is for Stallion's range of true intelligent multiport boards.
-It supports the EasyConnection 8/64, ONboard and Brumby families of multiport
-boards. The EasyConnection 8/64 and ONboard boards come in ISA, EISA and
-Microchannel bus versions. The Brumby boards are only available in ISA
-versions. This driver can also work with the original Stallion board, but
-these are no longer supported by Stallion Technologies.
-
-The EasyConnection 8/64 family of boards is a medium cost, high performance,
-modular range of intelligent multiport serial boards. The EasyConnection 8/64
-boards can be configured to have from 8 to 64 serial ports by plugging in
-external serial port modules that contain either 8 or 16 ports each (these
-modules are the same used by the EasyConnection 8/32 board). There is a wide
-range of external modules available that offer: DB-25 connectors, RJ-45
-connectors (both with RS-232 D and E compatible drivers), and also RS-422 and
-RS-485 ports. The board takes the form of a host adapter card, with an external
-connector cable that plugs into the external modules. The external modules
-just clip together to add ports (BTW, they are NOT hot pluggable). Each
-EasyConnection 8/64 board requires 4 bytes of I/O address space and a region
-of memory space. The size of the memory region required depends on the exact
-board type. The EISA version requires 64 Kbytes of address space (that can
-reside anywhere in the 4 Gigabyte physical address space). The ISA and MCA
-boards require 4 Kbytes of address space (which must reside in the lower
-1 Mbyte of physical address space - typically in the c8000 to e0000 range).
-No interrupts are required. The physical memory region of multiple
-EasyConnection 8/64 boards can be shared, but each board must have a separate
-I/O address.
-
-The ONboard family of boards are traditional intelligent multiport serial
-boards. They are Stallion's older range of boards with a limited expansion
-capability. They come in 4, 8, 12, 16 and 32 port versions. The board uses
-the same base card (which has 4 ports on it) and is expanded to more ports via
-a mezzanine board that attaches directly onto the base card. External panels
-plug into the ONboard providing RS-232C ports with DB-25 plugs. An RS-422
-DB-25 dual interface panel is also available. The ISA and microchannel
-ONboards require 16 bytes of I/O address space and 64K bytes of memory
-space. The memory space can be anywhere in the 16 Mbyte ISA bus address
-range. No interrupt is required. The EISA ONboard requires 64 Kbytes of
-memory space that can be anywhere in the 4 Gigabyte physical address space.
-All ONboard boards can share their memory region with other ONboards (or
-EasyConnection 8/64 boards).
-
-The Brumby family of boards are traditional, low cost intelligent multiport
-serial boards. They are non-expandable and come in 4, 8 and 16 port versions.
-They are only available for the ISA bus. The serial ports are all on DB-25
-"dongle" cables that attach to the rear of the board. Each Brumby board
-requires 16 bytes of I/O address space and 16 Kbytes of memory space. No
-interrupts are required.
-
-The original Stallion boards are old. They went out of production some years
-back and are no longer supported. They offer limited expandability and are
-available in 8 or 16 port configurations. An external panel houses 16 RS-232C
-ports with DB-9 connectors. They require 16 bytes of I/O address space, and
-either 64K or 128K of memory space. No interrupt is required.
-
-That's the boards supported by the second driver. The ONboard, Brumby and
-Stallion boards are Stallion's older range of intelligent multiports - so
-there are lots of them around. They only support a maximum baud rate of
-38400. The EasyConnection 8/64 is a true high performance intelligent
-multiport board, having much greater throughput than any of Stallion's
-older boards. It also supports speeds up to 460800 baud.
-
-
-1.3 HOW TO GET BOARDS
-
-Stallion Technologies has offices all over the world, as well as many more
-distributors and resellers. To find out about local availability please
-contact the nearest Stallion office and they can give you all the information
-you need. Look in the "Offices" file in the driver package for a current list
-of Stallion Technologies offices.
-
-Another good source of information about the Stallion range of boards and
-local availability is on the Stallion Web page. Check it out at
-http://www.stallion.com.
-
-
-
-2. INSTALLATION
-
-This driver, as is, will work on a FreeBSD 2.2.5 system. It will run on any
-FreeBSD system version 2.0.5 and up, including -current version systems.
-For systems other than 2.2.0 and 2.2.5  you will need to change the version
-define in the driver source. Look for the symbol name VFREEBSD, then change
-it to match the version number of your FreeBSD system (for example 2.2.5 is
-225, 3.0.0 would be 300, etc).
-
-Recent versions of FreeBSD 2.1.5 and above include the Stallion drivers
-in the distribution. You may still need to use this source for these systems.
-If the code in this package is newer than the version enclosed on your
-FreeBSD installation then you should use this source instead.
-
-You will need to build a new kernel to use this driver. So the first thing
-you need is to have the full kernel source. Most people will have this
-(I hope!). The following assumes that the kernel source is in /usr/src/sys.
-
-The drivers can support up to 8 boards. For the smart board driver any
-combination of EasyIO, EasyConnection 8/32 and EasyConnection 8/64-PCI
-boards can be installed. For the intelligent any combination of
-EasyConnection 8/64 (ISA and EISA), ONboard, Brumby or original Stallion.
-So there is a theoretical maximum of 512 ports.
-
-2.1 Instructions to install:
-
-1. Copy the driver source files into the kernel source tree.
-
-        cp stallion.c istallion.c /usr/src/sys/i386/isa
-        cp cdk.h comstats.h /usr/src/sys/i386/include
-        cp scd1400.h sc26198.h /usr/src/sys/i386/isa/ic
-
-   Note: if you are NOT using FreeBSD 2.2.5 then you will need to edit the
-   stallion.c and istallion.c files and change the VFREEBSD define to match
-   your version. This define is near the top of the file, and should be
-   easy to find.
-
-2. If you are using FreeBSD version 2.2.0 or above then jump to step 4 now.
-
-   Add a character device switch table entry for the driver that you wish
-   to use into the cdevsw table structure. This involves adding some code
-   into the kernel conf.c file. 
-
-   If you are using an EasyIO, EasyConnection 8/32 or EasyConnection 8/64-PCI
-   then you need to use the stallion.c driver. All other board types
-   (EasyConnection 8/64 (ISA and EISA), ONboard, Brumby, Stallion) use the
-   istallion.c driver. You can also have a mix of boards using both drivers.
-   You will need to use a different major device number for the second driver
-   though (not the default 72 - see below for more details on this).
-
-2.1. If using the stallion.c driver then do:
-
-        cd /usr/src/sys/i386/i386
-        vi conf.c
-            - add the following lines (in 2.1.0 I put them at line 729):
-
-/* Stallion Multiport Serial Driver */
-#include "use_stl.h"
-#if    NSTL > 0
-d_open_t        stlopen;
-d_close_t       stlclose;
-d_read_t        stlread;
-d_write_t       stlwrite;
-d_ioctl_t      stlioctl;
-d_stop_t        stlstop;
-d_ttycv_t      stldevtotty;
-#define stlreset       nxreset
-#define        stlmmap         nxmmap
-#define stlstrategy    nxstrategy
-#else
-#define        stlopen         nxopen
-#define stlclose       nxclose
-#define stlread                nxread
-#define stlwrite       nxwrite
-#define stlioctl       nxioctl
-#define stlstop                nxstop
-#define stlreset       nxreset
-#define stlmmap                nxmmap
-#define stlstrategy    nxstrategy
-#define        stldevtotty     nxdevtotty
-#endif
-
-
-            - and then inside the actual cdevsw structure definition, at the
-              last entry add (this is now line 1384 in the 2.1 conf.c):
-
-       { stlopen,      stlclose,       stlread,        stlwrite,       /*72*/
-         stlioctl,     stlstop,        stlreset,       stldevtotty,/*stallion*/
-         ttselect,     stlmmap,        stlstrategy },
-
-            - the line above used major number 72, but this may be different
-              on your system. Take note of what major number you are using.
-              
-            - save the file and exit vi.
-
-
-2.2. If using the istallion.c driver then do:
-
-        cd /usr/src/sys/i386/i386
-        vi conf.c
-            - add the following lines (in 2.1.0 I put them at line 729):
-
-/* Stallion Intelligent Multiport Serial Driver */
-#include "use_stl.h"
-#if    NSTL > 0
-d_open_t        stliopen;
-d_close_t       stliclose;
-d_read_t        stliread;
-d_write_t       stliwrite;
-d_ioctl_t      stliioctl;
-d_stop_t        stlistop;
-d_ttycv_t      stlidevtotty;
-#define stlireset      nxreset
-#define        stlimmap        nxmmap
-#define stlistrategy   nxstrategy
-#else
-#define        stliopen        nxopen
-#define stliclose      nxclose
-#define stliread       nxread
-#define stliwrite      nxwrite
-#define stliioctl      nxioctl
-#define stlistop       nxstop
-#define stlireset      nxreset
-#define stlimmap       nxmmap
-#define stlistrategy   nxstrategy
-#define        stlidevtotty    nxdevtotty
-#endif
-
-
-            - and then inside the actual cdevsw structure definition, at the
-              last entry add (this is now line 1384 in the 2.1 conf.c):
-
-       { stliopen,     stliclose,      stliread,     stliwrite,        /*72*/
-         stliioctl,    stlistop,       stlireset,    stlidevtotty,/*istallion*/
-         ttselect,     stlimmap,       stlistrategy },
-
-            - the line above used major number 72, but this may be different
-              on your system. Take note of what major number you are using.
-              
-            - save the file and exit vi.
-
-3. Add the driver source files to the kernel files list:
-
-        cd /usr/src/sys/i386/conf
-        vi files.i386
-            - add the following definition lines into the list (it is stored
-              alphabetically, so insert them appropriately):
-
-i386/isa/istallion.c           optional        stli    device-driver
-
-i386/isa/stallion.c            optional        stl     device-driver
-
-            - save the file and exit vi.
-
-4. Add board probe entries into the kernel configuration file:
-
-        cd /usr/src/sys/i386/conf
-        cp GENERIC MYKERNEL
-            - if you already have a kernel config that you use then you
-              could just use that (instead of MYKERNEL)
-        vi MYKERNEL
-            - if only using PCI boards then you don't need to enter a
-              configuration line, the kernel will automatically detect
-              the board at boot up, so skip to step 5.
-            - enter a line for each board that you want to use. For stallion.c
-              boards entries should look like:
-
-device         stl0    at isa? port 0x2a0 tty irq 10 vector stlintr
-
-              For istallion.c boards, the entries should look like:
-
-device         stli0   at isa? port 0x2a0 tty iomem 0xcc000 iosiz 0x1000 flags 23
-
-              (I suggest you put them after the sio entries)
-              (Don't enter lines for PCI boards)
-            - change the entry resources as required. For the stallion.c
-              entries this may involve changing the port address or irq.
-              For the istallion.c entries this may involve changing the port
-              address, iomem address, iosiz value and the flags. Select from
-              the following table for appropriate flags and iosiz values for
-              your board type:
-
-              EasyConnection 8/64 ISA:     flags 23         iosiz 0x1000
-              EasyConnection 8/64 EISA:    flags 24         iosiz 0x10000
-              EasyConnection 8/64 MCA:     flags 25         iosiz 0x1000
-              ONboard ISA:                 flags 4          iosiz 0x10000
-              ONboard EISA:                flags 7          iosiz 0x10000
-              ONboard MCA:                 flags 3          iosiz 0x10000
-              Brumby:                      flags 2          iosiz 0x4000
-              Stallion:                    flags 1          iosiz 0x10000
-
-            - save the file and exit
-            - more detailed information about board configuration and
-              some helpful examples are contained in the driver manual
-              pages.
-
-5. Build a new kernel using this configuration.
-
-        cd /usr/src/sys/i386/conf
-        config MYKERNEL
-        cd ../../compile/MYKERNEL
-        make depend
-        make all
-        make install
-
-
-And there you have it!
-
-Once you have a new kernel built reboot to start it up. On startup the
-Stallion board probes will report on whether the boards were found or not.
-For each board found the driver will print out the type of board found,
-and how many panels and ports it has. 
-
-If a board is not found by the driver but is actually in the system then the
-most likely problem is that the IO address is incorrect. The easiest thing to
-do is change the DIP switches on the board to the desired address and reboot.
-
-On EasyIO and EasyConnection 8/32 boards the IRQ is software programmable,
-so if there is a conflict you may need to change the IRQ used for a board in
-the MYKERNEL configuration file and rebuild the kernel.
-
-Note that the secondary IO address of the EasyConnection 8/32 boards is hard
-coded into the stallion.c driver code. It is currently set to IO address
-0x280. If you need to use a different address then you will need to edit this
-file and change the variable named stl_ioshared.
-
-On intelligent boards it is possible that the board shared memory region is
-clashing with that of some other device. Check for this and change the device
-or kernel configuration as required.
-
-
-2.2 INTELLIGENT DRIVER OPERATION
-
-The intelligent boards also need to have their "firmware" code downloaded
-to them. This is done via a user level application supplied in the driver
-package called "stlload". Compile this program where ever you dropped the
-package files, by typing "make". In its simplest form you can then type
-    ./stlload -i cdk.sys
-in this directory and that will download board 0 (assuming board 0 is an
-EasyConnection 8/64 board). To download to an ONboard, Brumby or Stallion do:
-    ./stlload -i 2681.sys
-
-Normally you would want all boards to be downloaded as part of the standard
-system startup. To achieve this, add one of the lines above into the
-/etc/rc.serial file. To download each board just add the "-b <brd-number>"
-option to the line. You will need to download code for every board. You should
-probably move the stlload program into a system directory, such as /usr/sbin.
-Also, the default location of the cdk.sys image file in the stlload
-down-loader is /usr/libdata/stallion. Create that directory and put the
-cdk.sys and 2681.sys files in it. (It's a convenient place to put them
-anyway). As an example your /etc/rc.serial file might have the following
-lines added to it (if you had 3 boards):
-    /usr/sbin/stlload -b 0 -i /usr/libdata/stallion/cdk.sys
-    /usr/sbin/stlload -b 1 -i /usr/libdata/stallion/2681.sys
-    /usr/sbin/stlload -b 2 -i /usr/libdata/stallion/2681.sys
-
-The image files cdk.sys and 2681.sys are specific to the board types. The
-cdk.sys will only function correctly on an EasyConnection 8/64 (ISA and EISA)
-board. Similarly the 2681.sys image will only operate on ONboard, Brumby and
-Stallion boards. If you load the wrong image file into a board it will fail
-to start up, and of course the ports will not be operational!
-
-
-
-3. USING THE DRIVER
-
-Once the driver is installed you will need to setup some device nodes to
-access the serial ports. Use the supplied "mkdevnods" script to automatically
-create all required device entries for your boards. To make device nodes for
-more than 1 board then just supply the number of boards you are using as a
-command line parameter to mkdevnods and it will create nodes for that number
-of boards. By default it will create device nodes for 1 board only.
-
-Note that if the driver is not installed at character major number 72 then
-you will need to edit the mkdevnods script and modify the STL_SERIALMAJOR
-variable to the major number you are using.
-
-Device nodes created for the normal serial port devices are named /dev/ttyEX
-where X is the port number. (The second boards ports will start from ttyE64,
-the third boards from ttyE128, etc). It will also create a set of modem call
-out devices named cueX where again X is the port number.
-
-For the most part the Stallion driver tries to emulate the standard PC system
-com ports and the standard sio serial driver. The idea is that you should
-be able to use Stallion board ports and com ports inter-changeably without
-modifying anything but the device name. Anything that doesn't work like that
-should be considered a bug in this driver!
-
-Since this driver tries to emulate the standard serial ports as much as
-possible then most system utilities should work as they do for the standard
-com ports. Most importantly "stty" works as expected and "comcontrol" can be
-used just like for the serial ports.
-
-This driver should work with anything that works on standard com serial ports.
-Having said that, I have used it on at least the following types of "things"
-under FreeBSD:
-    a) standard dumb terminals (using getty)
-    b) modems (using cu, etc)
-    c) ppp (through pppd, kernel ppp)
-
-
-
-4. NOTES
-
-Please email me any feedback on bugs, problems, or even good experiences
-with these drivers!
-
-You can use both drivers at once if you have a mix of board types installed
-in a system. On FreeBSD 2.1.5 and later systems each driver has been
-assigned a different major number. On earlier FreeBSD versions you may
-need to manually assign each driver a different major number. You will
-also need to adjust the names of the device nodes for each board. To do
-this modify the mkdevnods script to make device nodes based on those new
-major numbers. For example, you could change the istallion.c driver to use
-major number 75. You will also need to create device nodes with different
-names for the ports, for eg ttyFXXX.
-
-Currently the intelligent board driver (istallion.c) does not have the
-ability to share a boards memory region with other boards (you can only do
-this on EasyConnection 8/64 and ONboards normally anyway). It also does
-not currently support any memory address ranges above the low 1Mb region.
-These will be fixed in a future release of the driver.
-
-Finding a free physical memory address range can be a problem. The older
-boards like the Stallion and ONboard need large areas (64K or even 128K), so
-they can be very difficult to get into a system. If you have 16 Mb of RAM
-then you have no choice but to put them somewhere in the 640K -> 1Mb range.
-ONboards require 64K, so typically 0xd0000 is good, or 0xe0000 on some
-systems. If you have an original Stallion board, "V4.0" or Rev.O, then you
-need a 64K memory address space, so again 0xd0000 and 0xe0000 are good. Older
-Stallion boards are a much bigger problem. They need 128K of address space and
-must be on a 128K boundary. If you don't have a VGA card then 0xc0000 might be
-usable - there is really no other place you can put them below 1Mb.
-
-Both the ONboard and old Stallion boards can use higher memory addresses as
-well, but you must have less than 16Mb of RAM to be able to use them. Usual
-high memory addresses used include 0xec0000 and 0xf00000.
-
-The Brumby boards only require 16Kb of address space, so you can usually
-squeeze them in somewhere. Common addresses are 0xc8000, 0xcc000, or in
-the 0xd0000 range. EasyConnection 8/64 boards are even better, they only
-require 4Kb of address space, again usually 0xc8000, 0xcc000 or 0xd0000
-are good.
-
-If you are using an EasyConnection 8/64-EI or ONboard/E then usually the
-0xd0000 or 0xe0000 ranges are the best options below 1Mb. If neither of
-them can be used then the high memory support to use the really high address
-ranges is the best option. Typically the 2Gb range is convenient for them,
-and gets them well out of the way.
-
-The ports of the EasyIO-8M board do not have DCD or DTR signals. So these
-ports cannot be used as real modem devices. Generally when using these
-ports you should only use the cueX devices.
-
-There is a utility in this package that reports statistics on the serial
-ports. You will need to have the ncurses library installed on your system
-to build it.
-
-To build the statistics display program type:
-    make stlstats
-Once compiled simply run it (you will need to be root) and it will display
-a port summary for the first board and panel installed. Use the digits to
-select different board numbers, or 'n' to cycle through the panels on a
-board. To look at detailed port information then hit 'p', that will display
-detailed port 0 information. Use the digits and letters 'a' through 'f' to
-select the different ports (on this board and panel).
-
-
-
-5. ACKNOWLEDGEMENTS
-
-This driver is loosely based on the code of the FreeBSD sio serial driver.
-A big thanks to Stallion Technologies for the use of their equipment.
-
index 99bee0e..d8f059f 100644 (file)
@@ -1,6 +1,5 @@
 # $FreeBSD: src/usr.sbin/stallion/Makefile,v 1.4.2.1 2001/08/30 12:29:57 murray Exp $
-# $DragonFly: src/usr.sbin/stallion/Makefile,v 1.2 2003/06/17 04:30:03 dillon Exp $
 
-SUBDIR=        bootcode stlload stlstats stlstty
+SUBDIR=        stlstats
 
 .include <bsd.subdir.mk>
index 3664efa..710e064 100644 (file)
@@ -1,8 +1,6 @@
 # $FreeBSD: src/usr.sbin/stallion/Makefile.inc,v 1.4 1999/08/28 01:20:05 peter Exp $
-# $DragonFly: src/usr.sbin/stallion/Makefile.inc,v 1.2 2003/06/17 04:30:03 dillon Exp $
 
-BOOTDIR=       /usr/libdata/stallion
-WARNS?=                1
+WARNS?=                2
 
 .if exists(${.CURDIR}/../../Makefile.inc)
 .include "${.CURDIR}/../../Makefile.inc"
diff --git a/usr.sbin/stallion/bootcode/2681.sys.uu b/usr.sbin/stallion/bootcode/2681.sys.uu
deleted file mode 100644 (file)
index 298ac8d..0000000
+++ /dev/null
@@ -1,697 +0,0 @@
-$FreeBSD: src/usr.sbin/stallion/bootcode/2681.sys.uu,v 1.3.6.2 2001/09/09 01:41:40 murray Exp $
-$DragonFly: src/usr.sbin/stallion/bootcode/2681.sys.uu,v 1.2 2003/06/17 04:30:03 dillon Exp $
-
-begin 444 2681.sys
-M````````````````````````````````````````````````````````````
-M``````!E`0``````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M`-(1SV0``````````````````````````````````````!``````8V1K:"YC
-M```F`````````````````.P5````````````````&`8```,`````````````
-M;F\@96-P86YE;"!D<FEV97(@:6YS=&%L;&5D`&YO(&5C8G5S(&1R:79E<B!I
-M;G-T86QL960`;65M;W)Y(&UA;&QO8R!F86EL960``````%!%3D0@8W1R;&EN
-M(2`E9`!014Y$(&-T<FQI;B$@)60`4$5.1"!C=')L:6XA("5D`$%34T525$E/
-M3B!&04E,55)%(&%T("5S*"5D*0H``-@`24Y&3U)-`%=!4DY)3D<`1D%404P`
-M4$%.24,`15)23U(@)7,Z("5S*"5D*3H@``H`^`#_``<!#0$3`3(N,"XP`"A#
-M*2!#;W!Y<FEG:'0@4W1A;&QI;VX@5&5C:&YO;&]G:65S(#$Y.3,@+2`Q.3DW
-M``H*+2TM+2TM+2TM+2TM+2TM("!3=&%L;&EO;B!);G1E;&QI9V5N="!#;VUM
-M=6YI8V%T:6]N<R!0<F]C97-S;W(@("TM+2TM+2TM+2TM+2TM+0H`("`@("`@
-M("`@("`@("`@("5S"@H`("!";V%R9"!4>7!E("`@("`@("`@("`@("`@("`@
-M("4R9"`@("`@("`@("`@($-O9&4@5F5R<VEO;B`@("`@("`@("`@("`@("5S
-M"@`@($UE;6]R>2!4;W1A;"`@("`@("`@("`@,'@E,#9L>"`@("`@("`@("`@
-M($UE;6]R>2!5<V5D("`@("`@("`@("`@(#!X)3`V;'@*`"`@365M;W)Y($9R
-M964@("`@("`@("`@("`P>"4P-FQX("`@("`@("`@("`@365M;W)Y($UA<"`@
-M("`@("`@("`@("`@,'@E,#9L>`H`("!#;V1E(%-I>F4@("`@("`@("`@("`@
-M(#!X)3`V;'@@("`@("`@("`@("!$871A(%-I>F4@("`@("`@("`@("`@("`P
-M>"4P-FQX"@`@($-O9&4@4V5G;65N="`@("`@("`@("`@("`P>"4P-'@@("`@
-M("`@("`@("!$871A(%-E9VUE;G0@("`@("`@("`@("`@(#!X)3`T>`H`("!3
-M=&%C:R!396=M96YT("`@("`@("`@("`@,'@E,#1X("`@("`@("`@("`@17AT
-M<F$@4V5G;65N="`@("`@("`@("`@("`P>"4P-'@*"@`@($%S>6YC:')O;F]U
-M<R!086YE;',@("`@("`@("`@("5D("`@("`@("`@("`@07-Y;F-H<F]N;W5S
-M(%!O<G1S("`@("`@("`@("`@)3)D"@`*+2TM+2TM+2TM+2TM+2TM+2TM+2TM
-M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
-M+2TM+2TM+2TM+2TM+0H*```R`3@!,#$R,S0U-C<X.6%B8V1E9@``3`2_*\4K
-MRRO1*]<KW2OC*^DK[ROU*_LK`2P'+`TL%"P;+"(L*2PP+#<L/BQ%+$PL4RQ:
-M+&$L:"QO+'8L?2R$+(LLDBR9+*`LIRRN++4LO"S#+,HLT2S8+-\LYBSM+/0L
-M^RP"+0DM$"T7+1XM)2TL+3,M.BU!+4@M3RU6+5TM9"UK+59%0U]&055,5"`H
-M)60@)60@)60@)60@)60@)60@)60@)60@)60@)60@)60@)60@)60@)60@)60I
-M```R-C@Q+F,``!H%`````````````#(```!+````;@```(8```"6````R```
-M`"P!``!8`@``L`0```@'``!@"0``P!(``(`E````2P```)8```#A``!@`&``
-MX`!@`&``X`!@`&``8`!@`.``8`!@`&``X`!@`&``````````$0`B`#,`,P!$
-M`%4`9@"J`(@`F0"[`,P`S`#,```````0`(``D````1`!@`&0`0`"$`(@`C`"
-M0`)0`F`"<`(``!``@`"0```!$`$@`3`!0`%0`6`!<`&``9`!H`&P`<`!T`'@
-M`?`!``(0`B`",`)``E`"8`)P`H`"D`*@`K`"0`!``+9-GD@``.8OLC&F,@``
-M(#=@/$8^SE$````````````````````````E9``N````````````````^KP`
-M!#/`CM".P+@``8[8,\".P":!/@`"I_)U)R:!/@("2:%U'B:!/@0"4F-U%2:!
-M/@8"(?%U#":A"@(FBQX,`NMBD+E:T#/VCL8FH0``)HD.``"^`!"+%@``CL8F
-M.0X``'0*@<8`$('^`(!RZ3/2CL(FHP``C,B[`&.#X_#!ZP0#V$..PR:A```F
-MB0X``(L6```F.0X``'4))J,``$,[WG+A,\"C#`#'!@X```"+T\'B!`$6#`"#
-M%@X``(O3P>H,`18.`*$,`(L6#@"Y`&.)#A@`@\$?@^'PB_&+^2O!@]H`P>@$
-MP>(,"]".PD].C,B.V/WSI/P&:/H`R[@``8[8N5`?B_&+^8O9B1XD``,>(`"#
-MPP^#X_"+P\'H!"O0CL).3_WSI/R,P([8CL".T(OC@^P$OU`&,\"Y4!^)#AP`
-M*\_\\ZJ,R*,&`(S8HP0`+J-P`8S0HPH`C,"C"`",V,'@!*,4`(S8P>@,HQ8`
-MZ$8>Z_X``,@$``!75HM&")F+'GX'.5<0<F]W!3E'#G)HBW<$F8OXB]H#?@03
-M7@:#[P&#VP"+S@K)=`C1Z]'?_LEU^(O'F8O/B]J+1@2+5@:)3OR)7OZ+S@K)
-M=`C1ZM'8_LEU^#M&_'4%.U;^=#F+QYF+S@K)=`C1X-'2_LEU^(E&!(E6!NL@
-MD)"9.5<0=QAR!3E'#G,1:.(`_S8N`/\V]@#HM2*#Q`:+1@2+5@9>7\G#R!``
-M`%=6BQY^!XM'$HM7%#D6%@!W'W(&.084`',7H10`BQ86`"M&!!M6!M'JT=@#
-M1@035@8K1@0;5@:)1O")5O(K_XM'#HM7$(E&](E6]CO7=00[QW0-4E#_=O+_
-M=O#H-E^+^`O_=`B+1O8+1O1U#[\!`(M&\(M6\HE&](E6]HM&"-'@`\<KTO?W
-MB_`+]G4#O@$`:@!6_W;V_W;TZ/E>B4;XBT8(T>`#QVH`4/]V\O]V\.CC7HE&
-M_HM&^#E&_G8&BT;^B4;X/8``<P7'1OB``(M&^%Y?R<.0R!P``%=6QT;N``/'
-M1O```,<&2A^``L<&3!\``,0>2A\FBT<$HTX?)HI''"4!`#T!`!K`_L"B6``F
-MBT<2)@M'$'0*)HM'$*-<!^@6&8M&[HM6\-'JT=C1ZM'8T>K1V-'JT=B*3NZ#
-MX0^)#EX'HV`'@4;N@`"#5O``:(``4%'H:2>#Q`;$'EX')L='!@$`Q!Y>!R;'
-M1T+_`,0>7@<FQD=,`L0>7@<FQD=-`,0>7@<FQD=.`,0>2A\FBT<,B4;DBQY^
-M!XL'+1<`?`1(2'X.H4H`HT`?QP84'^Y9ZQ)H60!H9P'_-BX`:@+H\1J#Q`B+
-M1N1`HU(&Q!Y>!R:)1U*A4@9(F3/"*\+!^`,SPBO"0*,$'Z%2!@4'`)DSPBO"
-MP?@#,\(KPD`D_HE&[(M&[HM6\,0>7@<FB4=8)HE76HM&["O2`4;N$5;PBT;N
-MBU;PQ!Y>!R:)1UPFB5=>BT;L*](!1NX15O!0Q!Y>!R:+1U@FBU=:T>K1V-'J
-MT=C1ZM'8T>K1V":*5UB#X@^+RE!1Z%TF@\0&_W;LQ!Y>!R:+1UPFBU=>T>K1
-MV-'JT=C1ZM'8T>K1V":*5UR#X@^+RE!1Z"TF@\0&H5(&B4;LN`8`]V;LB4;L
-MBT;NBU;PQ!Y>!R:)1U0FB5=6BT;L*](!1NX15O#$'EX')HM'5":+5U;1ZM'8
-MT>K1V-'JT=C1ZM'8)HI/5(/A#XE.Z(E&ZO]V[%!1Z,TE@\0&BQY^!XL'+1<`
-M?`1(2'X(QP92```#ZQ#'!E(```&+'GX'@W\H`'0(QT;\`0#K!I#'1OP"`&B2
-M`/]V\/]V[N@?_(/$!HE&[HE6\(M&_,1>Z":)!XM&[HM6\,1>Z":)1P(FB5<$
-M:)(`BT;NBU;PT>K1V-'JT=C1ZM'8T>K1V(I6[H/B#XO*4%'H026#Q`:!1NZ2
-M`(-6\`"#1N@&BQY^!X-_*`!^$(M&Y"M'*)GW?RB)1O3K!I#'1O0``(-^]`!]
-M!<=&]```QT;^``#'1N8``"OVZ0(!D(M^_M'GBT$8BT[T0??I.T;F?@O$7N@F
-MQP<`!.L)D,1>Z";'!P``BT;NBU;PQ%[H)HE'`B:)5P1HO`"+1NZ+5O#1ZM'8
-MT>K1V-'JT=C1ZM'8BE;N@^(/B\I04>B:)(/$!H%&[KP`@U;P`/]&YHM^_M'G
-MBQY^!XM!&(M.]$'WZ3M&YG]YQT;F``#_1OZ#?OX(?&O$'DH?)HM'%(E&\B:+
-M1QB)1O:#?O(`=`D+P'4%QT;V``&#?O8`=`N#?O(`=07'1O(``8-^\@!U&X-^
-M]@!U%?]VY/]V\/]V[NA;^X/$!HE&\HE&]L0>7@<FBT=4)HM75HE&Z(E6ZBOV
-MZT60D$:#1N@&.7;D?HMHO`#_=O#_=N[H>OJ#Q`:)1NZ)5O"+1N:+?O[1YXL>
-M?@<Y01A_`^G1_L1>Z";'!R``Z>S^1H-&Z`8Y-E(&?P/IH@#$7N@F]P?@_W3H
-M)HM'`B:+5P31ZM'8T>K1V-'JT=C1ZM'8)HI/`H/A#XE.^(E&^O]V\O]V\/]V
-M[N@)^H/$!HE&[HE6\,1>^":)A[(`)HF7M`"+1O+$7O@FB8>V`(M&\BO2`4;N
-M$5;P_W;V_W;P_W;NZ-'Y@\0&B4;NB5;PQ%[X)HF'I@`FB9>H`(M&]L1>^":)
-MAZH`BT;V*](!1NX15O#I4/]J`&H$:*P*:@SH'B>#Q`B+1NZ+5O"CP`:)%L(&
-MHQ``B182`"O`7E_)PY#(%@``5U9K!E(&*E#HJ1J#Q`*C>`:)%GH&BQY`'_\7
-MH7H&"P9X!G42:(\`:#H"_S8N`&H"Z)T6@\0(:P92!BI0_S9Z!O\V>`;HF"*#
-MQ`;$'EX')HM'5":+5U;1ZM'8T>K1V-'JT=C1ZM'8)HI/5(/A#XE.[HE&\,=&
-M]#``H7@&BQ9Z!HE&^HE6_,=&_O__QT;R`0`K_ROVZ8@!)HM'!":+5P:)1NJ)
-M5NS$7NHFBX>R`":+E[0`T>K1V-'JT=C1ZM'8T>K1V":*C[(`@^$/Q%[Z)HE/
-M"":)1PK$7NHFBX>F`":+EZ@`T>K1V-'JT=C1ZM'8T>K1V":*CZ8`@^$/Q%[Z
-M)HE/#":)1P[$7OHF]T<FX`-U`^FG`(-^\@!U`^F>`/]&_HM>_M'CB;=*!XM&
-M_HL>?@<Y1Q9^!3T(`'Q\BQY^!XM?%M'CB;=*!\0>7@<FBT=8)HM76M'JT=C1
-MZM'8T>K1V-'JT=@FBD]8@^$/B0X&'Z,('R:+1UPFBU=>T>K1V-'JT=C1ZM'8
-MT>K1V":*3UR#X0^)#F('HV0'QT;V8@+'1O@``,1>]B;&!PW$7O8F@#\`=0/I
-MY`#K\BO_B7[RB\<JY)F+R(I&_HO:F8/*_XKRBM2*X"K`"\$+T\1>^B:)!R:)
-M5P*+'D`?@W\"`'08C4;T4,1>^B;_=P(F_S>+'D`?_U<"@\0&1XM>_M'C`QY^
-M!SE_&'\%QT;R`0!&@T;Z*H-&[@8Y-E(&?P/I$?_$7OHFB7<DQ%[N)HL'Q%[Z
-M)HE')L1>[B:+1P(FBU<$T>K1V-'JT=C1ZM'8T>K1V":*3P*#X0_$7OHFB4\$
-M)HE'!HO&P>`#F?<^4@:+R+`!TN#$7OHFB$<HQ%[Z)O9')A]UC":#?R8`=`/I
-M`_[I?__$'EX')H-_0@!U!L<&4@```"O`7E_)PY#H+".#/E```'0*4.@P(X/$
-M`BO`P_\&4`!0Z"(C@\0"Z`@`QP90````Z^?(#```5U;$'EX')O]'0,0>7@<F
-M@W]0`'1"H:0`_P:D`#UD`'8*_P:F`,<&I````":`?T\`=`O'!J8````FQD=/
-M`*&F`,0>7@<F.4=0=PWH?1#$'EX')L='4```Q!Y>!R:`?V$`=&`K_^LGA7;X
-M=!1K1OHJ`P9X!HL6>@924.@0`8/$!/]&^M'FBT;^.4;Z?-I'.3X$'WXOQ!YB
-M!R:*`9B)1O@+P'3JB\?!X`.)1OH%"`")1OXY!E(&?0:A4@:)1OZ^`0#KPY#$
-M'EX')H!_8`!U`^F)`,=&]@``*__K09"%=OAT+6M&^BH#!G@&BQ9Z!E)0Z#((
-M@\0$"\!]%6M>^BH#'G@&C@9Z!B:*1R@JY`E&]O]&^M'FBT;^.4;Z?,%'.3X$
-M'WXNQ!X&'R:*`9B)1O@+P'3JB\?!X`.)1OH%"`")1OXY!E(&?0:A4@:)1OZ^
-M`0#KPXI&]L0>7@<FB$=@@SY2``!T&8,^5```=!)J`/\V4@#H.QZ#Q`3'!E0`
-M``"+'D`?@W\4`'0#_U<4*\!>7\G#R"P``%=6Q%X$)HM'!":+5P:)1NB)5NHF
-M]D<F'W0,)HI')BO2M/\*].L')HL')HM7`HE&_(E6_L1>Z":`/P!U`^E]`2:+
-M1P(FBU<$B4;@B5;B*\`FB4<$)HE'`L1>Z";&!P"+'D`?.4<&=#O$7N@F_W<$
-M)O]W`O]V_O]V_(L>0!__5P:#Q`B+^(/_`70F"_]\`XU%`8E&W)G$7N@FB4<"
-M)HE7!.L.D,1>Z";'1P(!`":)1P2+'D`?@W\*`'4#Z<L`C4;LB\B+%@0`4E%J
-M`&@-8?]V_O]V_(L>0!__5PJ#Q`R+^(/_`74B:!L#:*@`Z&X7@\0$B\=(=1%H
-M'`/_-BX`_S;V`.A8%X/$!@O_?'[V1O`$=2*`3O`$Q%X$)H!/$`C$7N@FBX>V
-M`+D%`"O2]_'$7@0FB4<2]D;P`G4,@$[P`L1>!":`3Q`0]D;Q`74,@$[Q`<1>
-M!":`3Q"`Q%X$)O9'$)AT((U&[(O(BQ8$`%)1:@!H#F'_=O[_=OR+'D`?_U<*
-M@\0,Q%X$)H!G$)O'!E0``0#$7@0FBD\D@.$'L`'2X":+7R3!ZP,#'@8?C@8(
-M'R8(!\1>!":*1RC$'EX')@A'8,1>Z":+1PPF"T<*=0/I[P+$7N@FBT<*)HM7
-M#(E&X(E6XHM&X(M6XB8Y1PIUXR8Y5PQUW2O`)HE'$":)1P[$7N@FB4<,)HE'
-M"HE&Y(M&X.E1`9"+1NB+5NH%$@")1MB)5MK$7M@F]D<$!'43Q%X$)H!/$`C$
-M7M@F@$\$!.L)D,1>!":`9Q#WQ%[8)O9'!`)U$L1>!":`3Q`0Q%[8)H!/!`+K
-M",1>!":`9Q#OQ%[8)O9'!0%U%,1>!":`3Q"`Q%[8)H!/!0'I!P&0Q%X$)H!G
-M$'_I^P"0Q%[H)HM'$HE&Y/]VY/]V!O]V!.CF"X/$!NG>`,=&Y`(`@7[@#&%U
-M!H-^X@!T#8%^X`IA==6#?N(`=<^`3N0!Z\F0QT;D`@"!?N`'874&@W[B`'0-
-M@7[@!6%U"H-^X@!U!(!.Y`'_=N3_=@;_=@3HBPN#Q`:+1NB+5NH%$@")1MB)
-M5MK$7N@FBX>V`,1>V"8Y1R1R$<1>Z":+A[8`2$C$7M@FB4<DQ%[8)H-_)`!U
-M$<1>Z":+A[8`N04`*]+W\>L$)HM'),1>!":)1Q+K+9`M`6$]#0!W)-'@DR[_
-MI]@/^@[T#_0/;@\\#SP/00_T#_0/%@\6#QL/]`]X#HL>0!^#?PH`=0/IW0#_
-M=N+_=N#HU`J#Q`0+P'0-Q%[H)HM'$B:+5Q3K"8M&Z(M6Z@42`(E&V(E6VE)0
-M_W;B_W;@_W;^_W;\BQY`'_]7"H/$#(OX"_]U8XM&X"T2875;BT;HBU;J!1(`
-MB4;4B5;6BT;H!;(`4E#H]02#Q`3$7M0F`0>+1NB+5NH%I@!24.B<!(/$!,1>
-MU"8!1P+$7N@FBX>V`$C$7M0F`4<$Q%[H)HN'J@!(Q%[4)@%'!H/_`70="_]\
-M!8U%`>L"B\>)1M29Q%[H)HE'#B:)5Q#K(9!HI@-HN`#HZQ.#Q`3K$L1>Z";'
-M1PX!`";'1Q```+___\<&5``!`,1>!":*3R2`X0>P`=+@)HM?),'K`P,>!A^.
-M!@@?)@@'Q%X$)HI'*,0>7@<F"$=@Q%X$)O9'$0%T3\=&\`(`QT;R```KP(E&
-M]HE&](E&[HE&[":`9Q'^Q%X$)H!/$"#'!E8``0"-3NR+%@0`4E%J`&@/8<1>
-M!";_=P(F_S?H=P2#Q`S'!E8```#$7@0F]D<0!'0#Z<@!BT;HBU;J!;(`4E#H
-MR0.#Q`2+\`OV?P/IK@'$7@0F.7<2=P4F@&<0W\1>!":`9Q"_QT;>``"`/E@`
-M`'0QBQY`'X-_"@!T)XU&X!90:@!H$V'_=O[_=OR+'D`?_U<*@\0,/0$`&\!`
-MB4;>"\!T""O`B4;BB4;@@W[>`74,:-H#:,@`Z+42@\0$BT;B"T;@=`/I-@&+
-M'D`?@W\0`'4#Z2D!Q%[H)HN'M@`FBX^Z`"O!.\9W#R:+A[H`)HN_M@`K^.L#
-MD(O^5\1>!":+1P@FBU<*Q%[H)HN/N@`#P5)0_W;^_W;\BQY`'_]7$(/$"HE&
-MU`O`?07'1M0``#EVU'TS.7[4=2Z+QBM&U%#$7@0F_W<*)O]W"/]V_O]V_(L>
-M0!__5Q"#Q`J+^`O_?0(K_P%^U.L"*_^#?M0`?P/IC@`Y=M1T",1>!":`3Q`$
-M*W;4Q%[H)HN'N@`!1M2+1M0F.8>V`'<#B7[4BT;4)HF'N@#$7@0F.7<2=E4F
-M]D<0*'5.*\")1O*)1O")1O:)1O2)1NZ)1NPF]D<0('4)@$[P!":`3Q`@QP96
-M``$`C4[LBQ8$`%)1:@!H#V'$7@0F_W<")O\WZ*("@\0,QP96````Q%[H)H!_
-M`0!U`^F6`":+1P8FBU<(B4;@B5;B*\`FB4<()HE'!L1>Z";&1P$`BQY`'SE'
-M"'0K_W;^_W;\_U<(@\0$B_B#_P%T)0O_?`.-10&)1M29Q%[H)HE'!B:)5PCK
-M#<1>Z";'1P8!`":)1PC'!E0``0#$7@0FBD\D@.$'L`'2X":+7R3!ZP,#'@8?
-MC@8('R8(!\1>!":*1RC$'EX')@A'8"O`7E_)P\@$``!6Q%X$)HM'!":+5P:)
-M1OR)5O[$7OPF@+^2``!T![C__U[)PY#$7@0F]D<0`71`:A`%E`!24(O#C,(%
-M%`!24.AH%H/$"L1>!":*1Q`D@CP"=0G$7OPF@(^9``'$7OPFQH>2``'$7@0F
-M@&<0_NNPD":*1Q`D@CP"=3QJ$(M&_`64`%)0Z%@6@\0&Q%[\)H"/F0`!BT;\
-MBU;^!90`4E!J`&@/8<1>!";_=P(F_S?H/@&#Q`SI:?_$7OPFBT<$)@M'`G0#
-MZ5G_)HM'""8+1P9T`^E,_R:+1Q`F"T<.=`/I/__$7@0F]D<F'W45BT;\!:8`
-M4E#H+0"#Q`0+P'0#Z2#_Q%X$)HI/)(#A![`!TN#VT":+7R3!ZP/$-@8?)B``
-M*\!>R</(`@``5U;$7@0FBW<()HM_"#OW=`J+]R:+?P@[]W7V)HM'!HE&_CEV
-M_G()BT;^*\9>7\G#)HM'!"O&`T;^7E_)PY#(`@``5U;$7@0FBW<&)HM_!CO^
-M=`J+]R:+?P8[_G7V)HM'"(E&_CEV_G<)B\8K1OY>7\G#)HM'!"M&_@/&7E_)
-MPY!5B^Q6BW8(@_X!=2"+1@2+5@8%L@!24.BD_X/$!,1>!"8KA[8`]]A(7LG#
-MD(M&!(M6!@6F`%)0Z$+_@\0$Q%X$)BN'J@#KWI#(%```5U:#?@3_=0:#?@;_
-M=!.+1@2+5@8JTCW__W4?@?H`_W49:.H$_S8N`/\V]@#HI0Z#Q`:X__]>7\G#
-MD(M6!BK`*M(]`/]U1CO0=4(K]NL!1CDV4@9^%HI&!"KD:]XJ`QYX!HX&>@8F
-M.4<F=>.*1@0JY&O>*@,>>`:.!GH&)CE')G0%:/,$ZYYKQBKK79"+1@2+5@:*
-MQ(K6*O8JY(E&_HI&!(E&\(-^_@!\#(M&_HL>?@<Y1Q9_!VC[!.EI_Y"+V-'C
-MB[=*!X-^\`!\$(M&\`/&BU[^T>,YATP'?P9H``7I1/^+1O`#QFO`*@,&>`:+
-M%GH&B4;RB5;TQ%[R)HM'!":+5P:)1OJ)5OR!?@@/870#Z?T"@WX*`'0#Z?0"
-MBT8."T8,=1*+1@X+1@QT`^D%_V@*!>GQ_I"+1@R+5@Z)1O:)5O@F]D<F'W0#
-MZ0H!)O9'$`)U#<1>]B;V1P4!=0/I]@!J`/]V_/]V^NA+_H/$!HE&[`O`=0O$
-M7O(F@$\0`NG6`,1>^B:+AZH`)HN/K``KP3M&['<.)HN'K``FB[^J`"OXZP.+
-M?NQ7Q%[R)HM'#":+5P[$7OHFBX^L``/!4E#_=@;_=@2+'D`?_U<.@\0*B_`+
-M]GT"*_8+]GXQ._YU+8M&["O&4,1>\B;_=PXF_W<,_W8&_W8$BQY`'_]7#H/$
-M"HOX"_]]`BO_`_?K`BO_.7;L?B%J`/]V!O]V!(L>0!__5Q*#Q`8+P'4+Q%[R
-M)H!G$/WK"9#$7O(F@$\0`@OV?AC$7OHFBX>L``/P)CFWJ@!W`HOW)HFWK`"#
-M/E8``'0#Z:``Q%[V)O='!`8!=0/ID@`F]D<$!G0(Q%[R)H!G$/O$7O8F@&<$
-M^\1>]B;V1P0"=!6+1OJ+5OP%L@!24.C7_(/$!`O`?PK$7O(F]D<00'0(Q%[V
-M)H!G!/W$7O(F]D<0$'0(Q%[V)H!G!/W$7O(F]D<0@'0(Q%[V)H!G!?[$7O8F
-MBT<")@L'=1HFBT<*)@M'"'40)HM'!B8+1P1U!BO`7E_)P\1>^B:`OY(``'4#
-MZ:H`Q%[R)O9'$`%U$6H0B\.,P@44`%)0Z,D1@\0&Q%[V)HL')HM7`L1>\B8)
-M1Q0F"5<6Q%[V)O9'!!YT",1>\B:`9QCAQ%[V)O9'!1YT",1>\B:`9QGAQ%[V
-M)HM'!":+5P;$7O(F"4<8)@E7&L1>]B:+1P@FBU<*Q%[R)@E''"8)5Q[$7O8F
-MBT<*)@M'"'03)HM'#":+5P[$7O(FB4<@)HE7(L1>\B:`3Q`!ZR!J$(O#C,(%
-ME`!24/]V#O]V#.CO$(/$"L1>^B;&AY(``<<&5``!`,1>\B:*3R2`X0>P`=+@
-M)HM?),'K`P,>!A^.!@@?)@@'Q%[R)HI'*,0>7@<F"$=@Z8$`@7X(`&=U(X-^
-M"@!U'8-^#@!\`_]&#(M&#(M6#L1>^B:)1PXFB5<0ZUB0@7X(`6=U(X-^"@!U
-M'8-^#@!\`_]&#(M&#(M6#L1>^B:)1P(FB5<$ZRZ0@7X(`F=T`^G&^X-^"@!T
-M`^F]^X-^#@!\`_]&#(M&#(M6#L1>^B:)1P8FB5<(QP94``$`Q%[R)HI/)(#A
-M![`!TN`FBU\DP>L#`QX&'XX&"!\F"`?$7O(FBD<HQ!Y>!R8(1V"#/E(``'4#
-MZ2K^@SY4``!U`^D@_FH`_S92`.BT#X/$!,<&5````.D+_I!5B^R+1@0M`&%\
-M"4A(?P6X`0#)PRO`R</("```5HMV".C:$HE&^,1>!":+1P0FBU<&B4;ZB5;\
-M]\8!`'0JQ%[Z)HN'K``FB8>N`,1>^B:+AZX`B4;^BT;^)CF'K`!UWL1>!":`
-M9Q#]]\8"`'1+Q%X$)O9'$!!U%\1>^B:+A[H`)CF'N`!T",1>!":`3Q$!Q%[Z
-M)HN'N``FB8>Z`,1>^B:+A[@`B4;^BT;^)CF'N@!UWL1>!":`9Q";_W;XZ$X2
-M@\0"*\!>R</($```5U;H+A*+^*%X!HL6>@:)1OR)5OZ+P@M&_'4'*\!>7\G#
-MD&H,C4[PBQ8$`%)1Z`4/@\0&QT;T___'1O;__ROVZUR0Q%[\)O9')B!T+HL>
-M0!^#?PH`="2-1O"+R(L6!`!246H`:`EABU[\)O]W`B;_-XL>0!__5PJ#Q`R+
-M'D`?@W\(`'04Q%[\)O]W`B;_-XL>0!__5PB#Q`1&@T;\*CDV4@9_GU?HFQ&#
-MQ`+I;O^0R`H``%=6QP9^!Q8?QT;\``+'1OX``,1>_":!/Z?R=`/I*`$F@7\"
-M2:%T`^D=`2:!?P128W0#Z1(!)H%_!B'Q=`/I!P$FBT<4HQ8?ZT^0QP8H'P``
-MQP8J'P$`QP8D'P!`QP8F'P``QP8:'PX`ZU+'!B@?``#'!BH?`0#'!B0?``#'
-M!B8?`0#'!AH?$`#K,L<&*!\``,<&*A\"`.O>2#T*`'<>T>"3+O^G`!W$'*0<
-MQ!S$'*0<I!SD'!8=Q!S$',0<QP88'P$`Q%[\)H-_&`!U!B;'1QA0`&H!:*"&
-MQ%[\:@`F_W<8Z-U$HQP?B18>'VH`:@124.@=0Z,@'XD6(A_$7OPF@W\:`'00
-M)HM'&HE&]L<&/A\0`.L.D":+1PZ)1O;'!CX?```K]NL"D$:#_A!]"XO.BT;V
-MT^`+P'7O`38^'\<&+!\!`*$^'Z,N'\=&^``"QT;Z``#$7O@F@3]%0W0#Z1`!
-M)H%_`E`A=`/I!0''!A8?%P"#/EP'`'0=@SY<!QAU"<<&%A\8`.L.D(,^7`<9
-M=0;'!A8?&0"A%A\M&`!T%<<&)!\`$,<&)A\``,<&&A\,`.L3D,<&)!\``,<&
-M)A\!`,<&&A\0`,<&*!\``,<&*A\"`,1>^":+1P:C&!_'!AP?0'C'!AX??0%J
-M`&H$_S8>'_\V'!_H'4*C(!^)%B(?QP8^'P``QP8L'P``*_;K%2O`BD[V@^%`
-M@_D!&\GWV87(=`%&1H/^"'U*Q%[X@\,()HH`*N2)1O8]_P!T-XI&]B4'`#O&
-M=2V*1O8E(``]`0`;_X/G^(/'$`$^/A^+'BP?T>.)ORX?_P8L'X/_$'6AN`$`
-MZYXKP%Y?R<-5B^S_=@C_=@:+7@31X_^W*`'_-C`!Z-T%B^6-1@Q0_W8*:@!J
-M`.@)!HOE:"8!Z(<%*\#)PY!H:`'HN@6#Q`+_-DH$:+L!Z*T%@\0$_S9(!/\V
-M%A]HT`'HG`6#Q`;_-D8?_S9$'_\V#@#_-@P`:!T"Z(,%@\0*_S;"!O\VP`;_
-M-FX'_S9L!VAJ`NAJ!8/$"O\V'@#_-AP`_S8:`/\V&`!HMP+H406#Q`K_-@0`
-M_S8&`&@$`^A`!8/$!O\V"`#_-@H`:%,#Z"\%@\0&_S8^'_\V+!]HHP/H'@6#
-MQ`9H]`/H%06#Q`+#D.B?_.B2#N@Y"^@TX^@/`.@TZ.@[_^BF#>E["I##D,@$
-M``"A%`"+%A8`*P80`!L6$@"C;`>)%FX'H0P`BQ8.`"L&;`<;%FX'HT0?B19&
-M'Z$0`(L6$@#1ZM'8T>K1V-'JT=C1ZM'8B@X0`(/A#XE._(E&_J%L!XL6;@?$
-M7OPFB0<FB5<"Q%[\*\`FB4<&)HE'!,1>_":)1PHFB4<(BT;\BU;^HWH'B19\
-M!Z,,'XD6#A\KP,G#D,@$``"A>@>+%GP'ZPF0)HM'!":+5P:)1OR)5OZ+P@M&
-M_'06BT8$BU8&Q%[\)CE7`G+<=P4F.0=RU8M&_(M6_LG#D,@$``"+1@8+1@1T
-M5Z%Z!XL6?`?$7@0FB4<$)HE7!L1>!"O`)HE'"B:)1PBA?`<+!GH'=1"+1@2+
-M5@:C#!^)%@X?ZQ.0BT8$BU8&Q!YZ!R:)1P@FB5<*BT8$BU8&HWH'B19\!RO`
-MR<.058OLBT8&"T8$=&?$7@0FBT<*)@M'"'42)HM'!":+5P:C>@>)%GP'ZQ60
-M)HM'!":+5P8FQ%\()HE'!":)5P;$7@0FBT<&)@M'!'43)HM'"":+5PJC#!^)
-M%@X?*\#)PR:+1P@FBU<*)L1?!":)1P@FB5<**\#)P\@4``"+1@2+5@:`Y`^*
-MQ(KBBM8J]M'JT=C1ZM'8T>K1V-'JT=@#1@2#T@")1OB)5OK$7@0FBP<FBU<"
-M`T;X$U;ZB4;LB5;NH7H'BQ9\!^M(BT;TBU;V.4;X=34Y5OIU,,1>!":+!R:+
-M5P+$7OPF`0<F$5<"_W;^_W;\Z`W_@\0$BT;\BU;^B48$B58&Z8@`D":+1P0F
-MBU<&B4;\B5;^B\(+1OQT<HM&_(#D#XK$BN**UBKVT>K1V-'JT=C1ZM'8T>K1
-MV`-&_(/2`(E&\(E6\L1>_":+!R:+5P(#1O`35O*)1O2)5O:+1O"+5O(Y1NQT
-M`^E=_SE6[G0#Z57_!E/HBOZ#Q`3$7OPFBP<FBU<"Q%X$)@$')A%7`HM&_@M&
-M_'0#Z>+^BT8$BU8&R</($@``BT8$!04`)/Z)1@0M#``;R??1(\$%#`")1O3'
-M1O8``.@#"XE&\O]V]O]V].B$_8/$!(E&_(E6_HO""T;\=0[_=O+H\`J#Q`(K
-MP)G)PU+_=OSH"?Z#Q`2+1OR+5OZ)1NZ)5O#$7OPFBP<FBU<"*T;T&U;VB4;X
-MB5;Z"])U!3T,`')EB\.,PH#D#XK$BN**UBKVT>K1V-'JT=C1ZM'8T>K1V`/#
-M@](``T;T$U;VT>K1V-'JT=C1ZM'8T>K1V(I._`).](/A#XE._(E&_HM&^(M6
-M^L1>_":)!R:)5P+_=O[_=OSH$?V#Q`3_=O+H2`J+1O2+5O;$7NXFB0<FB5<"
-M@T;N!(M&](M6]@$&1!\1%D8?*09L!QD6;@>+1NZ+5O#)P\@.``"+1@2+5@:`
-MY`^*Q(KBBM8J]M'JT=C1ZM'8T>K1V-'JT=@#1@2#T@`Y%A(`=Q9R!CD&$`!W
-M#CD6%@!W#7(&.084`',%N/__R<.#;@0$BT8$BU8&B4;RB5;TQ%[R)HL')HM7
-M`HE&_(E6_NB8"8E&]O]V]/]V\N@Y_8/$!(E&\HO""T;R=`I2_W;RZ$?\@\0$
-M_W;VZ'X)BT;\BU;^*09$'QD61A\!!FP'$19N!RO`R<-5B^R#/DX?`'00@SX4
-M'P!T"?]V!&H`_Q84'RO`R<-5B^R#/DX?`'01@SX4'P!T"O]V!O]V!/\6%!\K
-MP,G#D%6+[(U&!E#_=@1J`&H`Z"L`R<.058OLC48(4/]V!O]V!&H`Z!8`R<-5
-MB^R-1@A0_W8&:@#_=@3H`@#)P\@.``!75HM&"HE&\HM>"/]&"(H'F(OX@_\E
-M=#(+_W42.7X&=`:+7@;&!P`KP%Y?R<.0@WX&`'0*BUX&B`?_1@;KRE?_=@3H
-M6_^#Q`3KOHM>"(`_)742@WX&`'0(BUX&Q@<EZ]EJ)>O;@#\M=0O_1@C'1O8!
-M`.L&D,=&]@``BUX(@#\P=0O_1@C'1OP!`.L&D,=&_```BUX(@#\K=0O_1@C'
-M1OH!`.L&D,=&^@``BUX(@#\@=0O_1@C'1O0!`.L&D,=&]```BUX(@#\C=0/_
-M1@@K]NL5@_\Y?R"+QL'@`@/&T>`#QRTP`(OPBUX(_T8(B@>8B_B#_S!]VX/_
-M+G45BUX(_T8(B@>8B_B#_S!\!8/_.7[K/60`=0/I^P!^`^D,`CU5`'4#Z2,!
-M?@/IYP$M1`!U`^D6`2T+`'4#Z0X!Z1P"@W[V`'4LQT;X`0#K#Y!J(/]V!.A.
-M_H/$!/]&^#EV^'T1@WX&`'3GBUX&Q@<@_T8&Z^>#?@8`=!Z+7O**!XM>!H@'
-M_T8&@W[V`'4#Z<X!QT;X`0#K(Y"+7O**!RKD4/]V!.@`_H/$!.O<D&H@_W8$
-MZ/+]@\0$_T;X.7;X?`/IG`&#?@8`=.2+7@;&!R#_1@;KY)!J`&H`_W;V_W;\
-M5FH"BU[R:@#_-XU&!E#_=@3H=`&#Q!3I9@%J`&H`_W;V_W;\5FH0Z]J0:@!J
-M`/]V]O]V_%9J".O*D/]V]/]V^O]V]O]V_%9J"HM>\HL'F5)0Z[>0:@!J`/]V
-M]O]V_%9J"NN@D(M>"/]&"(H'F(OX@_]!?`B#_UI_`X/'((O'/6D`=%=_;2UB
-M`'0&2$AT3.LB:@!J`/]V]O]V_%9J`HM>\O]W`O\WC48&4/]V!.C9`(/$%(-&
-M\@+IQP"0:@!J`/]V]O]V_%9J$.O4D&H`:@#_=O;_=OQ6:@CKQ)#_=O3_=OKK
-M!&H`:@#_=O;_=OQ6:@KKK)`M;P!TTRT&`'3F+0,`=+GKKY"+7O*+!XE&_HM>
-M_O]&_HH'F(OX"_]T98-^!@!T"XM>!H@'_T8&Z^&05_]V!.B5_(/$!.O4+5@`
-M=0/I+_\M"@!U`^FN_DAU`^D6_NLP+6D`/0\`=RC1X),N_Z<\*!8G7"A<*$`G
-M7"A<*`8G7"A<*%PHX"=<*#`G7"A<*/8F@T;R`NFI_)#()@``5U:+1@B+5@J)
-M1OR)5OX+TGT*]U[\@U;^`/=>_BOVBT8,F5)0_W;^_W;\Z'DXB]@#'EX$B@>(
-M0MQ&BT8,F5)0C4;\4.AZ-X-^_@!_TGP&@W[\`'7*@WX*`'T/@WX4`'4&@WX6
-M`'0#_TX.@WX2`'4Q@WX0`'4KB_[K#9!J(/]V!.BZ^X/$!$<Y?@Y^%8M>!H,_
-M`'3GBQ_&!R"+7@;_!^OFD(-^%@!U!H-^%`!T&(-^"@!]$HM>!H,_`'0JBQ_&
-M!RV+7@;_!X-^%`!T,X-^"@!\+8M>!H,_`'0:BQ_&!RN+7@;_!^L9:BW_=@3H
-M4/N#Q`3KTY!J*_]V!.A"^X/$!(-^%@!T'H-^%`!U&(-^"@!\$HM>!H,_`'0;
-MBQ_&!R"+7@;_!X-^$@!U/X-^$`!T.8O^ZQN0:B#_=@3H`ON#Q`3KXI!J,/]V
-M!.CT^H/$!$<Y?@Y^%8M>!H,_`'3GBQ_&!S"+7@;_!^OFD(U$_XE&VNL8BU[:
-MC4;<`]B*!YA0_W8$Z+SZ@\0$_T[:@W[:`'P@BUX&@S\`=-J+7MJ-1MP#V(H'
-MBUX&BQ^(!XM>!O\'Z]>#?A(`="J+_NL,:B#_=@3H?OJ#Q`1'.7X.?A6+7@:#
-M/P!TYXL?Q@<@BUX&_P?KYI`KP%Y?R<.#!H`'`8,6@@<`Z_0`````````````
-M^KHB_[@`@.^Z*/^P;>[K`+IF_S/`[^L`,\".V([0CL#J``#__XO<BU<"BD<$
-M[L.+W(M7`C/`[,.+W(M7`HM'!._#B]R+5P+MPU6+[%97'@;$?@C%=@2+3@R+
-MQC/'J0$`=1/WQ@$`=`8+R70+I$G1Z?.E@]$`\Z0''U]>7<-5B^Q7!L1^!(M.
-M"#/`T>GSJW,!J@=?7<,`R`(``&H`:F3_-B(?_S8@'^BK-HE&_F@!X&AF_^B#
-M_X/$!/]V_FAB_^AW_X/$!&H`:@1H6F)J$^C*`X/$"-%N_O]V_FA@_^A9_X/$
-M!.L*@P9R!P&#%G0'`&A@_^A._X/$`CM&_G?HZPJ#!G('`8,6=`<`:&#_Z#3_
-M@\0".T;^<NAJ"&AR!^C,-"O`R<,``````````````````!X&4RZ.'G`!NBK_
-M[5"+A\H&[_O_!A(?_Y>$'OJZ(O^X`(#O6+HJ_^^#Q`(''V'/8+L``.O+8+L"
-M`.O%8+L$`.N_8+L&`.NY8+L(`.NS8+L*`.NM8+L,`.NG8+L.`.NA8+L0`.N;
-M8+L2`.N58+L4`.N/8+L6`.N)8+L8`.N#8+L:`.E\_V"['`#I=?]@NQX`Z6[_
-M8+L@`.EG_V"[(@#I8/]@NR0`Z5G_8+LF`.E2_V"[*`#I2_]@NRH`Z43_8+LL
-M`.D]_V"[+@#I-O]@NS``Z2__8+LR`.DH_V"[-`#I(?]@NS8`Z1K_8+LX`.D3
-M_V"[.@#I#/]@NSP`Z07_8+L^`.G^_F"[0`#I]_Y@NT(`Z?#^8+M$`.GI_F"[
-M1@#IXOY@NT@`Z=O^8+M*`.G4_F"[3`#IS?Y@NTX`Z<;^8+M0`.F__F"[4@#I
-MN/Y@NU0`Z;'^8+M6`.FJ_F"[6`#IH_Y@NUH`Z9S^8+M<`.F5_F"[7@#ICOY@
-MNV``Z8?^8+MB`.F`_F"[9`#I>?Y@NV8`Z7+^8+MH`.EK_F"[:@#I9/Y@NVP`
-MZ5W^8+MN`.E6_F"[<`#I3_Y@NW(`Z4C^8+MT`.E!_F"[=@#I.OY@NW@`Z3/^
-M8+MZ`.DL_F"[?`#I)?Y@NWX`Z1[^^KHJ_^V+V+@'`._[B\/#^KHJ_^V+V+@&
-M`._[B\/#^KHJ_^V+V+@%`._[B\/#^KHJ_^V+V+@$`._[B\/#^KHJ_^V+V+@#
-M`._[B\/#^KHJ_^V+V+@"`._[B\/#^KHJ_^V+V+@!`._[B\/#^KHJ_^V+V+@`
-M`._[B\/#^HO<BT<"NBK_[_O#NBK_[??0)0<`P_K#^\.<^EC#B]S_=P*=P\S#
-M`,.058OL_W8@_W8>_W8<_W8:_W88_W86_W84_W82_W80_W8._W8,_W8*_W8(
-M_W8&_W8$:.`$Z'KVR</("```5F@`@&@B_^@^_(/$!&@`@&@B_^@R_(/$!&C]
-M`&@H_^@F_(/$!&H`:"K_Z!O\@\0$:@AH./_H$/R#Q`1J"&@Z_^@%_(/$!&H(
-M:#S_Z/K[@\0$:@AH/O_H[_N#Q`0K]HO>T>/'AX0>%"Z+WM'CQX?*!@``1H/^
-M0'SF*\")1OJ)1O@K]HY&^HO>T>.+AV`$BPX&`(M>^":)!R:)3P)&@T;X!(/^
-M0'S@*\!>R<-5B^R#?@0`?!*#?@1`?0R#?@@`?`:#?@@'?@6X___)P[@(`"M&
-M"(E&"#T'`'X%QT8(!P"+1@:+7@31XXF'A!Z+1@A(BUX$T>.)A\H&BT8$ZV^0
-M_W8(:#+_Z$/[B^7IB`"#?@H!]1O`)1``"T8(4&@X_^OED(-^"@'U&\`E$``+
-M1@A0:#K_Z]&0@WX*`?4;P"40``M&"%!H//_KO9"#?@H!]1O`)1``"T8(4&@^
-M_^NID/]V"&@T_^N@_W8(:#;_ZY@M"``]"P!W(-'@DR[_I\HOXB_B+ZHOLB]:
-M+VXO@B^6+^(OXB_B+TPO*\#)P\@"``!75HM^!('G_P!\!CD^$!]_![C__UY?
-MR<-I][@`@<:$!_:$@0"`=>KVA(```70&*\!>7\G#@(R!`!"-10$[!D(??0.A
-M0A^C0A_'1`2`)<=$!@``QT0(@"7'1`H``,9$-@#&1#0(QD0U`,=$#(`0QT0.
-M```KP(E$$HE$$(E$%HE$%(E$'HE$'(E$)HE$),9$-Q/&1#@1QD0Y$\9$.A&A
-M:`>)1"BA=@:)1"JA9@>)1"RAQ`:)1"ZA"A^)1##'1OX``(M>_L9`/0#_1OZ#
-M?OX+?/`KP(E$5HE$5(E$6HE$6(E$7HE$7(E$9HE$9(E$:HE$:(E$;HE$;,:$
-MF0`!QH28``")A(8`4%!6Z-D1@\0&5NB8$(/$`CET>'46BX24``4<`%#H@OF#
-MQ`+'1OX``.L&D,=&_@$`BUQXBX>4``4(`%#H9/F#Q`**3OZ`P0+3^"4!`#T!
-M`!K`]MB(A)P`BUQXBX>4``4(`%#H/?F#Q`**3O[3^"4!`#T!`!K`]MB(A)X`
-M:B"+A)0`!00`4.@0^8/$!&H!BX24``4$`%#H`/F#Q`1J!(N$E``%!`!0Z/#X
-M@\0$@(R```&`I($`[\1<=":#!P$F@U<"`.EG_I#(!```5U:+?@2!Y_\`?`8Y
-M/A`??P>X__]>7\G#:?>X`('&A`?VA(```74'*\!>7\G#D/:$@`"`=`=6Z%,4
-M@\0".71X=0N+7'B`IZ(`^>L)D(M<>("GH@"?BUQXBH>B`"KD4/^TC`#H:OB#
-MQ`1J((N$E``%!`!0Z%KX@\0$QH28``#HSON)1O['A*8```#'A+0```#'A+8`
-M``#'A*P```#'A*X```!6Z!,5@\0"*\")A((`B82``(F$A`!6Z"(/@\0"_W;^
-MZ(_[@\0"H4(?2(E&_.L0D&E>_+@`]H<$"`%U"?]._(-^_`!]ZXM&_$"C0A_I
-M./^0R%0``%=6BD8$*N2)1O@+P'P&.080'W\(N/__7E_)PY!I\+@`@<:$!\=&
-M^@``BT8(Z2T#D/]V#%;H!2&#Q`3I5P.0_W8,5N@]%>OPD(M&#(M6#HE&\(E6
-M\E:-=`3$?O"Y(@#SI5[I,`.+1@R+5@Z)1O")5O+$7O`F]D<$$'0;Z-WZB4;V
-M@*2``/=6Z`D4@\0"_W;VZ,SZ@\0"Q%[P)O9'!"!T&^BX^HE&]H",@``(5N@6
-M%(/$`O]V]NBG^H/$`L1>\";V!R!T&.B4^HE&]FH`5N@;$X/$!/]V]NB&^H/$
-M`L1>\";V!Q!T&.AS^HE&]FH!5NCZ$H/$!/]V]NAE^H/$`L1>\";V1P1`=0/I
-MBP)J`8O#!0D`4/]V!O]V!.B<"(/$".ET`BO_@7X(!6%U!3E^"G0,@7X(!V%U
-M"#E^"G4#OP$`@7X(!6%U!H-^"@!T#8%^"`9A=0F#?@H`=0.#SP)75NC='X/$
-M!(M&#(M6#HE&\(E6\E:-?JR-=`2,T([`N2(`\Z5>BT;PBU;R5AZ-?`2+\!X'
-MCMJY(@#SI1]>C4:L%E!6Z((.@\0&Z>X!_W8._W8,5NA`(.ON_W8._W8,5NB&
-M$^OB5NBD(H/$`E;HXR"#Q`*+1@R+5@Z)1JR)5JY6C71(Q'ZLN08`\Z5>BUZL
-M)L='!#\`)L='!@``@&1)?^F9`9`K_X%^"`IA=04Y?@IT#(%^"`QA=0@Y?@IU
-M`[\!`(%^"`IA=0:#?@H`=`V!?@@+874)@WX*`'4#@\\"5U;H`1^#Q`2+1@R+
-M5@Z)1JR)5J[$7JPF]D<$!'0:)HI'""4$`#T!`/4;P"4$``P!4%;HOR*#Q`3$
-M7JPF]D<$`74#Z1D!)HI'""4!`#T!`/4;P"4$``P!4%;H:"/IHOV0BT8,BU8.
-MB4:LB5:N5HUT5,1^K+D(`.FO_9"+1@R+5@Z)1JR)5JY6'HU\5(OP'@>.VKD(
-M`/.E'UZ-1`0>Z<;^D(M&#(M6#HE&K(E6KHM$=(M4=E8>B_".VL1^K+DZ`/.E
-M'UX&_W:L5NBZ(.F=_I"+1'8+1'1U`^F%`,1<=":+1W")1O9J=/]T=O]T=.@/
-M]8/$!HM&]IG$7'0FB4=P)HE7<O\V%@:-A+``4.C<(X/$!)G$7'0FB4<$)HE7
-M!NM!D,=&^O__ZSF0+0%A/1,`=_#1X),N_Z<6-MHRZ#+R,@PTRC/*,\HS:#3H
-M-*8TIC2F-$`U6C7^-0XS@#50-%PTKC6+1OI>7\G#D,@,``!75HM>#(L'B4;V
-MBUX$BX>H`(N7J@")1OJ)5OR+1@XK1@H;R2/!`T8*B48.BT<,B4;XBD;X)0@`
-M/0$`&\!`B4;^*_;K.XI&])@M"@!T!RT#`'0:ZPKV1O@0=`3&1O0-BD;TQ%X&
-M_T8&)H@'ZQ+V1O@@=`;&1O0*Z^;V1OA`=.!&.78.?D+$7OJ+?O8FB@&(1O3_
-M1O:+1O8Y!A0&=P7'1O8``(!^]"!\G8!^]'Y_EX-^_@!TJX!^]$%\I8!^]%I_
-MGX!&]"#KF9"+1O:+7@R)!XM&#EY?R<.0R`H``%=6BD8$*N2)1OQI\+@`@<:$
-M!_:$@``!=0>X__]>7\G#BX2L`(E&_HN$K@")1OJ+1OXY1OIW"(OX*W[ZZPJ0
-MB_@K?OH#/A0&B7[V.7PL<P6`I(4`^_9$#'AT'%>-1OI0_W8,_W8*_W8(5NBV
-M_H/$#(E&#.FN`)"+1@P[QWX"B\>)1@P+P'\#Z9H`H10&*T;Z.T8,?@.+1@R)
-M1O@+P'41:"T#_S8B!?\V]@#H].R#Q`:A%`8Y1OAR$6@N`_\V(@7_-O8`Z-OL
-M@\0&_W;X_W8*_W8(BX2H`(N4J@`#1OI24.BD\H/$"HM&##E&^'T=*T;X4(M&
-M"(M6"@-&^%)0_[2J`/^TJ`#H?_*#Q`J#?@P`?A0K?@R+1@P!1OJA%`8Y1OIR
-M`RE&^J$4!CE&^G(1:$,#_S8B!?\V]@#H9^R#Q`;HH?6)1OR+1OJ)A*X`BX2L
-M`(E&_CE&^G<'B_@K?OKK"8OX*W[Z`SX4!CE&^G4,@*2``+^`I(4`@.L-BT8,
-M.4;V<@6`I(4`_CE\+G8%@*2%`/?'A(8```#_=OSH2_6#Q`(Y?"QR#O:$@`"`
-M=`=6Z'(-@\0"BT8,"\!]`BO`F<1<="8!1P@F$5<*BT8,7E_)PY#()@``5HM>
-M#(LWBUX$BX>P`(N7L@")1OR)5OZA%@:)1MZ+1Q"+5Q*)1N:)5NB*AZ0`*N2)
-M1N#'1O0``,=&[```BD;F)0$`/0$`&\!`B4;V]D;G@'01]D;H`74+QD;P`,=&
-MZ@4`ZQ?V1N>`=0;V1N@!=`;&1O!_Z^?'1NH#`,=&[```ZPG_3@[_1N#_1NR+
-M1@HY1NQ\`^FN`L1>!O]&!B:*!XA&VCP@?#(\?G\N@WX.`'4#Z9$"@W[V`'0,
-M/&%\"#QZ?P2`;MH@BD;:Q%[\)H@`1CEVWG>N*_;KJHM&X(E&Y,=&W```QT;R
-M``"+1NJ)1OB*1O"(1OJ*1MJ8Z3\!D/9&YD!T"L=&W`4`QT;R`0"#?N``?P/I
-M00'_3N#I.P&0]D;F$'0#Z<X`]D;F`G4#Z:0`]D;F"'0)@W[@`'4#Z;8`QD;B
-M#8!.^`CIJP#V1N<"="**1N`E!P`M"`#WV-'XB4;<"\!^!K@"`.L#D"O`B4;R
-MZS"0]D;G!'0,QT;<"@#'1O("`.L=]D;G"'07QT;X!`"*1N`E!P`M"`#WV(E&
-M\L9&^B"+1N`,!T")1N#IJP"0]D;F@'4#Z:$`QT;<R`#'1O+__^F4`/9&YP'K
-MZ/9&Y@1T%L9&V@KV1N8@='['1MP*`,=&\@(`ZW+V1N8(=`F#?N``=0/IE?[V
-M1N<0=!N+1N#!^`(%!0`]"@!]`[@*`(E&W,=&\@(`ZQ[V1N<@=`C'1MP*`.OL
-MD/9&YT!T"L=&W`\`QT;R!`#'1N```.L=D"T(`#T%`'<4T>"3+O^G/#ON.3HZ
-M#CJ>.K0ZNCK'1NX``/9&^`%T`_]&[O9&^`AT`_]&[O9&^`1T!HM&\@%&[HM&
-M#CE&[GX/BT;DB4;@QT8.``#IM0"0@W[<`'X@]D;X`G0:@W[L`'4+BUX$]X>`
-M``(@=`F+1N2)1N#IC@#V1O@!=!&*1MK$7OPFB`!&.7;>=P(K]O9&^`AT$8I&
-MXL1>_":(`$8Y=MYW`BOV@W[<`'X>]D;X`G08BUX$@(^!`""*1MR+7@2(AZ4`
-M_T;LZSV0@W[R`'XL]D;X!'0FBT;R2`%&].L$D/].\H-^\@!^$XI&^L1>_":(
-M`$8Y=MYWZ"OVZ^2+1NXI1@[I1?V0BT;T`T;LF8M>!,1?="8!1P0F$5<&BD;@
-MBUX$B(>D`(M>#(DWBT;L7LG#R`H``%=6BD8$*N2)1OQI\+@`@<:$!_:$@``!
-M=0>X__]>7\G#Z'WQB4;Z]H2!``AT!XN$I@#K!9"+A+0`B4;^BX2V`(E&^/]V
-M^NA<\8/$`HM&_CE&^'<+BW[X*_@#/A8&ZP6+?O@K^$\Y1OAU!8"DA`"`H18&
-M*\=`.T0J<P6`I(0`]X/O!#D^%@9S$VB3!/\V(@7_-O8`Z,OG@\0&*_^+1!(+
-M1!!T'%>-1OY0_W8,_W8*_W8(5NC8^X/$#(E&#.FZ`)"+1@P[QWX"B\>)1@P+
-MP'\#Z:8`H18&*T;^.T8,?@.+1@R)1O8+P'41:*,$_S8B!?\V]@#H;.>#Q`:A
-M%@8Y1O9R$6BD!/\V(@7_-O8`Z%/G@\0&_W;VBX2P`(N4L@`#1OY24/]V"O]V
-M".@<[8/$"HM&##E&]GT=*T;V4/^TL@#_M+``BT8(BU8*`T;V4E#H]^R#Q`J#
-M?@P`?B"+1@R9Q%QT)@%'!"815P:+1@P!1OZA%@8Y1OYR`RE&_J$6!CE&_G(1
-M:+<$_S8B!?\V]@#HT^:#Q`;H#?")1OKVA($`"'0)BT;^B82F`.L'BT;^B82T
-M`*$6!BO'0(OX.7PH<P6`I(0`^_:$@``*=0=6Z`X)@\0"_W;ZZ-'O@\0"BT8,
-M7E_)PY`KP,.0R`(``%:+=@B*1@0JY(E&!,=&!@``H1`?F3M6!G<.<@4[1@1W
-M![C__U[)PY!I1@2X``6$!XO8]H>!`(!UZ`OV=1'_-A0&!:@`4.@V&X/$!%[)
-MPX/^`74)_S86!@6P`.OH@_X"=0>A%`9(7LG#@_X#=06A%@;K\BO`7LG#D,@&
-M``!75HMV!/:$@0`@=!>*A*4`_HRE``K`=`8KP%Y?R<.`I($`W_:$@``"=1SV
-MA(``!'0.@$QH`H",@``@@*2$`("`I(``^^O2]H2!``AT!XN$I@#K!9"+A+0`
-MB4;^BX2V`(E&_(M&_CE&_'<(B_@K?OSK"I"+/A8&*W[\`_@Y?"AR&/:$A``$
-M=9&`C(0`!(!,:`2`C(``(.N!D#E\*G8#Z7C_]D18"'4#Z6__]H2$``AT`^EE
-M_X",A``(@$QH".O2R`8``%=6BW8$BX2L`(E&_HN$K@")1OR+1OXY1OQW!XOX
-M*W[\ZPF+^"M^_`,^%`:+QRN$A@#VA(4``749.82(`',%.7PF=PZ`C(4``8!,
-M:0&`C(``(#E\+G<8]D19"'0R]H2%``AU*X",A0`(@$QI".L;.7PL<AOV1%D$
-M=!7VA(4`!'4.@(R%``2`3&D$@(R``"")O(8`*\!>7\G#R`@``%=6BW8(]\80
-M`'07BUX$Q%]T)H-')`$F@U<F`(M>!(!/:A#WQB``=!>+7@3$7W0F@T<L`2:#
-M5RX`BUX$@$]J(/?&0`!T%XM>!,1?=":#1R@!)H-7*@"+7@2`3VI`]\:``'0>
-MBUX$Q%]T)H-'9`$F@U=F`(M>!(!/28"+7@2`3VF`]\;P`'0(BUX$@(^``""+
-M7@2*AY\`*N3WT"/PBH>@`"KDA<9T!RO`7E_)PY"+AZ@`BY>J`(E&_(E6_HN_
-MK`"+AZX`.\=W""O'`P84!NL"*\>)1OC_3OB*AZ$`*N2%QG1*@W[X`WTBBUX$
-MQ%]T)H-',`$F@U<R`(M>!,1?=":#1S0!)H-7-@#KG<1>_";&`?]'.3X4!G<"
-M*__$7OPFQ@$`1SD^%`9W(RO_ZQ_WQO``=!F#?O@!?+#WQH``=`:*1SSK!)"*
-M1SN8B48&BD8&Q%[\)H@!1SD^%`9W`BO_BUX$B;^L`(M>!("/@`!`Z3C_D,@"
-M``!75HM>!(MW>(V\N`"*G:,`*O_1XXN';@6)1O[WA(```1!T#H!._@3V1!P@
-M=`2`3OX!]X6```$0=`Z`3OX(]D4<('0$@$[^`O]V_HN$E``%"`!0Z)KH@\0$
-M7E_)P\@"``!75HMV!(N$E`")1OZ`?#8"=00K_^L/@'PV`74&OP0`ZP20OQ``
-M@'PT!70@@'PT!G4%@\\!ZQ6`?#0'=0:#SP+K"I"`?#0(=0.#SP/V1!P0=`2!
-MSX``:A"+1OX%!`!0Z"[H@\0$5_]V_N@DZ(/$!"O_]D0<('0#OQ``@'PU`G4%
-M@\\/ZP^`?#4!=0:#SPCK!)"#SP?V1!@0=!.!SX``:B"+1OX%!`!0Z.;G@\0$
-M5_]V_NC<YX/$!/9$&!!T#VH!BT;^!00`4.C'YX/$!%;HS?Z#Q`)>7\G#R!0`
-M`%=6BW8$BT1XB4;\C7P$QT;^``#V10D0=`2`3OYP]D4(@'0$@$[^@(I&_HB$
-MGP#'1O8``/9%"2!T!(!.]G#V10D!=`2`3O:`BD;VB(2@`,=&]```]D4)0'0$
-M@$[T<(I&](B$H0#V110!=`2`31@0]D44`G0$@$T8((-])`!T"*$6!CE%)'(&
-MH6@'B44D@WTF`'0(H18&.44F<@:A=@:)12:#?2@`=`BA%`8Y12AV!J%F!XE%
-M*(-]*@!T"*$4!CE%*G(&H<0&B44J@WTL`'0(H10&.44L<@:A"A^)12R#?2(`
-M=1R+10(+!70/:@!J"O]U`O\UZ.\=ZP20N`$`B44BH6H'.44B=@.)12*#?2``
-M=07'12`!`,=&^```ZP20_T;X@W[X$7T9BP6+50*+7OC!XP(YERP%<N9W!CF'
-M*@5RWH-^^!%U`_].^(,^)`4`=`;HX^F)1OJ+1@@+1@9T#L1>!B:+1Q@FBU<:
-MZP>0BT48BU4:4E!6Z'P!@\0&BT8("T8&=!6+10B+50K$7@8F.4<(=08F.5<*
-M=%3V10@!=!HY=OQU"XM>_("GH@#YZR.0BU[\@*>B`)_K&#EV_'4+BU[\@(^B
-M``;K"9"+7OR`CZ(`8(M>_("/H@"`BU[\BH>B`"KD4/^TC`#HSN6#Q`2+1@@+
-M1@9T0HI%,L1>!B8X1S)U-HI%,"8X1S!U+8M%&(M5&B8Y1QAU(28Y5QIU&XI%
-M,28X1S%U$HM%%(M5%B8Y1Q1U!B8Y5Q9T!U;HZOR#Q`*+10(+!74#Z98`BT8(
-M"T8&=!.+!8M5`L1>!B8Y!W4&)CE7`G1[BD;XB(2C`&H`:F1J`&H%_W4"_S7H
-M;1Q24.AH'$")A)8`.71X=!Q6Z#C\@\0"BIRC`"K_T>/_MY`%BX24`$!`ZS.0
-M_W0&_W0$:@%H`,+H-!R)1O"*1O$JY%"+A)0`!0P`4.CQY(/$!(I&\"KD4(N$
-ME``%#@!0Z-WD@\0$Z,8,@SXD!0!T"?]V^NA-Z(/$`EY?R<-5B^Q6BW8$BT0<
-MBU0>,48&,58(]H2``(!T1/9&!A!T$_9$'!!T!&H"ZP)J!E;HXA&#Q`3V1@8"
-M=!3V1!P"=`5J`.L#D&H!5NB(`(/$!/9&!D!T*?9$'$!T&FH"ZQB0]D8&$'0)
-M:@96Z*@1@\0$]D8&0'0):@96Z&D2@\0$7LG#D%6+[%=6BW8$]H2``(!T/NBP
-MYXOX]D0<`G0):@%6Z#(`@\0$]D0<$'0):@96Z&,1@\0$]D0<0'0):@96Z"02
-M@\0$@*2``']7Z'SG@\0"7E_)PY#(`@``5U:+=@2#?@8`=!6*1#J(1O[$7'0F
-M@T<X`2:#5SH`ZQ.*1#F(1O[$7'0F@T<\`2:#5SX`_[20`.B]XX/$`J@$=!&*
-M1OZ84/^TD@#HH..#Q`3K0(N\M@#VA($`"'48@(R!``B+A+0`B82F`(F\M`!6
-MZ#(`@\0".;RT`'4)"_]U!(L^%@9/Q)RP`(I&_B:(`8F\M@#$7'0F@T<$`2:#
-M5P8`7E_)PY!5B^Q6BW8$@WP"`'4AH28%B03'1`(F!8,^)@4`=`>+'B8%B7<"
-MB38F!8",@``"7LG#D%6+[%:+=@2#?`(`=">#/`!T"(M$`HL<B4<"BP2+7`*)
-M!\<$``#'1`(``(",@``$@*2``/U>R<.0R`0``%:+=@2+1!R+5!Z)1OSV1OP"
-M=`EJ`%;HT?Z#Q`3V1OP0=`EJ`E;H`A"#Q`3V1OQ`=`EJ`E;HPQ"#Q`2`C(``
-M@%[)PU6+[%:+=@16Z!D/@\0"Q%X&*\`FB4<")HD']H2```AT",1>!B:`3P(!
-M]D0<('0.]D10"'4(Q%X&)H!/`@1>R<-5B^Q75HMV!.C-Y8OX@WX&_G4=:G"+
-MA)0`!00`4.@YXH/$!("D@0#[QX2*````ZS:`C($`!&I@BX24``4$`%#H%^*#
-MQ`2#?@;_=`Z+1@:Y"@`KTO?QB82*`,1<=":#1V`!)H-78@!7Z'+E@\0"7E_)
-MPY#(`@``5U:+=@B#?@3_=0:#?@;_=!.+1@2+5@8JTCW__W4,@?H`_W4&*\!>
-M7\G#BD8$*N0+P'P&.080'W\'N/__7E_)PVGXN`"!QX0'"_9T[8L$B45ZZ]&0
-M58OL5U8K_XOWZQ*0T?_V1@7`=`2!SX``P68$`D:#_@A\ZHO']]!>7\G#5U;_
-M-L8&Z,W_@\0"B_#_-L@&Z,'_@\0"B_B#/L@&`'4_@SY0!@!U`^G]`&H7:(`"
-MZ#+A@\0$:B!H@@+H)^&#Q`1J!VB"`N@<X8/$!%9H@@+H$N&#Q`1H@`!H@`+I
-MPP"0:A5HP`+H_>"#Q`1J(&C"`NCRX(/$!&H#:,("Z.?@@\0$:@=HP@+HW."#
-MQ`1H_`!HP@+HT."#Q`1H@`!HP`+HQ."#Q`1J%6C$`NBYX(/$!&H@:,8"Z*[@
-M@\0$:@!HQ@+HH^"#Q`1J!6C&`NB8X(/$!%9HQ@+HCN"#Q`1H@`!HQ`+H@N"#
-MQ`1J%6C(`NAWX(/$!&HH:,H"Z&S@@\0$:@%HR@+H8>"#Q`1J!6C*`NA6X(/$
-M!%=HR@+H3."#Q`1H@`!HR`+H0."#Q`1>7\.0R!@``%=6H1`?/1``?@.X$`")
-M1OC'1NH``"O_Z?0!:G12_W1TZ&K@@\0&B\<D_HE&_FG`N``%A`>)1O:+Q]'@
-M!=0%B4;TBT;^T>`%U`6)1NB+V(L'!0H`B82.`(M>Z(L'!0H`B82,`(M>Z(L'
-M!0H`BU[VB8>.`(M>Z(L'!0H`BU[VB8>,`(M>](L'B824`(M>Z(L'BU[VB8>4
-M`(M>](L'0$")A)``BU[TBP<%!@")A)(`BT;VB41XB\<JY)F`SO^)1'R)5'Z+
-MQ[D0`)GW^8O'B\J9,\(KPL'X!#/"*\*+V-'CN`"`T^B%A\8&=0/I`0*#?NH`
-M?0/I^`&+1NR+5N[1ZM'8T>K1V-'JT=C1ZM'8BD[L@^$/B8RP`(F$L@#'A*8`
-M``#'A+0```#'A+8```"A%@8KT@%&[!%6[HM&\(M6\M'JT=C1ZM'8T>K1V-'J
-MT=B*3O"#X0^)C*@`B82J`,>$K````,>$K@```*$4!BO2`4;P$5;R.71X=4]2
-MBX24``4:`%#HM-Z#Q`1J(XN$E``%'`!0Z*3>@\0$:MR+A)0`!1X`4.B4WH/$
-M!&C=`(N$E`!`0%#HA-Z#Q`1J;XN$E``%"`!0Z'3>@\0$.71X=04JR>L#D+$!
-M@,$"N`$`T^!0BUQXBX>4``4>`%#H3MZ#Q`0Y='AU!2K)ZP.0L0&X`0#3X%"+
-M7'B+AY0`!1X`4.@KWH/$!$<Y/A`??P/IY0!I][@`@<:$!_?'#P!T`^FL`(M&
-M^/<F%`8%$`!0Z"S6@\0"B4;PB5;RBT;X]R86!@40`%#H%=:#Q`*)1NR)5NZ+
-M1O(+1O!T!XO""T;L=07'1NK__XM&\(M6\H#D#XK$BN**UBKVT>K1V-'JT=C1
-MZM'8T>K1V`-&\(/2``4/`(/2`"3PB4;PB5;RBT;LBU;N@.0/BL2*XHK6*O;1
-MZM'8T>K1V-'JT=C1ZM'8`T;L@](`!0\`@](`)/")1NR)5NYJ=.B)U8/$`HE$
-M=(E4=HO""T1T=`/I+OW'A(```(#'A((```#I$O^0H10&P>`"N04`*]+W\:/$
-M!J$4!BL&Q`8]$`!V"*$4!BT0`.L%H10&2$BC"A^AQ`8Y!@H?<P:A"A^CQ`:A
-M%`;1Z*-J!Z$4!BO2]_&C9@>A%@8KTO?QHV@'H18&P>`"*]+W\:-V!BO`7E_)
-MP\@6``!75L=&^``"QT;Z``#$7O@FBT<.H\8&)HM'&J/(!B:+1Q"C4`:AQ@:)
-M1O"AR`:)1O+'1O0?`.L:D(M&])DSPBO"P?@$,\(KPHOXT>?1:_#_3O2#?O0`
-M?!F+1O29,\(KPL'X!#/"*\*+^-'G]D/P`73(BT;T0*,0'ST@`'X&QP80'R``
-M@W[R`'4@QT;T``"+7O31XXN'M`6+7O31XXF'U`7_1O2#?O00?.7'!B8%``#'
-M!B@%``!J`&H%:/Y::@CH@."#Q`CHH/J#/A`?`'Y?@SY0!@!T.FH`:@5H+U]J
-M(.A@X(/$"&H`:@5H0E]J(>A1X(/$"&H`:@5H0CYJ#>A"X(/$"&HB:#K_Z-7;
-M@\0$ZQYJ`&H%:"]?:@WH)N"#Q`AJ`&H%:$)?:@[H%^"#Q`B#/A`?!'X>:@!J
-M!6A57VHBZ`'@@\0(:@!J!6AH7VHCZ/+?@\0(@SX0'PA^'FH`:@5H>U]J).C<
-MWX/$"&H`:@5HCE]J)>C-WX/$"(,^$!\,?AYJ`&H%:*%?:B;HM]^#Q`AJ`&H%
-M:+1?:B?HJ-^#Q`B#/A`?$'YX:@!J!6C'7VHHZ)+?@\0(:@!J!6C37VHIZ(/?
-M@\0(:@!J!6C?7VHJZ'3?@\0(:@!J!6CK7VHKZ&7?@\0(:@!J!6CW7VHLZ%;?
-M@\0(:@!J!6@#8&HMZ$??@\0(:@!J!6@/8&HNZ#C?@\0(:@!J!6@;8&HOZ"G?
-M@\0(H2`?BQ8B'XE&_(E6_L=&]```:@!J"O\V4`7_-DX%Z+\14E#_=O[_=OSH
-M:A"+7O31XXF'5`;_1O2#?O0*?-3'1O0*`&H`:@J+7O3!XP+_MRP%_[<J!>B(
-M$5)0_W;^_W;\Z#,0BU[TT>.)AU0&_T;T@W[T$7S.QP84!@``QP86!@``@SX0
-M'P!^9Z$0']'@F5)0@SX0'Q!^!;A0`.L#N"@`F8L.;`>+'FX'*\@;VFL&$!]X
-MF2O(&]I34>@E$8E&ZHE6[`O2=04]\`]V",<&%`;P#^L7"])U#CU``',)QP84
-M!D``ZP:0)/"C%`:A%`:C%@;HAOF^A`?'1`2`)<=$!@``QD0T",9$-@#&1#4`
-M*\")1!Z)1!Q04%;HW_&#Q`;'1O0``.A*[?]&](-^]&1\],=&ZB``QT;L``"A
-M!@#$7NHFQP>P6B:)1P+'1NI,`,=&[```H08`Q%[J)L<'QEHFB4<"QP8D!0$`
-M*\!>7\G#D,@$``!6BW8$@WQZ`'0)BUQZ@W\,`'4+@*2``-\KP%[)PY"+1%2+
-M5%8A1&0A5&:+1%B+5%HA1&@A5&J+1%R+5%XA1&PA5&Z+1&8+1&1U$(M$:@M$
-M:'4(BT1N"T1L=+F-1&0>4&H`:`]A_W1^_W1\BUQZ_U<,@\0,*\")1&:)1&2)
-M1&J)1&B)1&Z)1&SKBI#(`@``5U9I!D(?N``%A`>)1OXK_VDV,`:X`('&A`?K
-M8#EV_G<#OH0']H2```%T3/:$@``&=`=6Z+KL@\0"]H2``$!T!U;H;NV#Q`*`
-MO)H``'0'5NC(`(/$`H.\B@``=`W_C(H`=0=6Z`X'@\0"]H2``"!T!U;H^OZ#
-MQ`*!QK@`1SD^0A]_FJ$P!CD&0A]_#<<&,`8``"O`7E_)PY#_!C`&*\!>7\G#
-MR`(``%=6OH0'QT;^```K_^L:]H2```%T#HJ$HP`JY#M&_G8#B4;^1X'&N``Y
-M/A`??^"AL@4Y1OYT.8M&_J.R!0O`=090:%;_ZR-H`>!H5O_HT=>#Q`2+7O[1
-MX_^W5`9H4O_HO]>#Q`1J`&A0_^BTUX/$!%Y?R<.0R`0``%:+=@3H#=N)1OZ+
-M7'B+AY0`!0@`4.B'UX/$`@J$F@"(1OS&A)H``/]V_NCKVH/$`CET>'4+@&;\
-M56H!:@3K"9"`9ORJ:@)J"(I&_%!6Z`8`@\0(7LG#R`(``%:+=@2*1@@B1@8\
-M`1K`]MB(A)P`BD8*(D8&/`$:P/;8B(2>`(I&!L#H!(A&_HI&"(1&_G07]D08
-M0'41Q%QT)H-'2`$F@U=*`(!,;`**1@J$1OYT*_9$&`AT%,1<=":#1T@!)H-7
-M2@"`3&P"ZQ*0Q%QT)H-'4`$F@U=2`(!,;`A6Z$,#@\0"BT10BU12B41PB51R
-M@(R``"`KP%[)P\@"``!75HMV!/9&!@)T2N@,VHE&_O\V%@:-A+``4.C!!8/$
-M!(OXF<1<="8I1P0F&5<&@*2$`,#VA($`"'0*BX2T`(F$I@#K"(N$M@")A+0`
-M_W;^Z,S9@\0"]D8&`710Z+S9B4;^_S84!HV$J`!0Z'$%@\0$B_B9Q%QT)@%'
-M""815PK'A*P```#'A*X```"`I(4`P("D@`"__W;^Z(39@\0"]H2``(!T!U;H
-ML/&#Q`)>7\G#D,@"``!6BW8$H18&2,1>!B:)1P2A%`9(Q%X&)HE'!NA)V8E&
-M_O\V%@:-A+``4.C^!(/$!,1>!B:)!_\V%`:-A*@`4.CI!(/$!,1>!B:)1P+_
-M=O[H&=F#Q`+$7@8KP":)1PHFB4<(]H2```)T!K@!`.L$D+@"`"O2Q%X&)@E'
-M"/:$@`!`=`6X``'K`[@``L1>!B8)1PCVA(``@'0%N`!`ZP(KP,1>!B8)1PCV
-MA(``"'0(Q%X&)H!/"@%>R<.0R`@``%=6BW8$C7Q(BF4!)0"`B07'10(``.B2
-MV(E&_/\V%@:-A+``4.A'!(/$!(E&^/\V%`:-A*@`4.@U!(/$!(E&^O]V_.AI
-MV(/$`O:$@``"=`6X`0#K`[@"`"O2"07VA($`!'0&N(``ZP.0*\`)!?:$@``(
-M=`2`30(!]D0<('0*]D4("'4$@$T"!/9%`@=T`X`-0(M&^#E$*'(#@`T$BT;X
-M.40J=P.`#0BA%@8K1OA(=0.`#1#VA(``0'0%N``!ZP.X``()!?:$@`"`=`:X
-M`$#K`Y`KP`D%BT;Z.40L<@2`30$$BT;Z.40N=P2`30$(BT;Z.40P=P2`30$@
-MH10&*T;Z2'4$@$T!$%Y?R<.058OL5HMV!`OV=0/IFP"+1@@+1@9U`^F0`%;H
-MCP"#Q`)6Z,[^@\0"BT1(BU1*Q%X&)HE';":)5VZ+1%"+5%+$7@8FB4=H)HE7
-M:O\V%@:-A+``4.@/`X/$!)G$7@8FB4<,)HE7#O\V%`:-A*@`4.CT`H/$!)G$
-M7@8FB4<0)HE7$L1>!B:+1PPFBU<.)BE'!"895P;$7@8FBT<0)HM7$B8!1P@F
-M$5<*@&1)?U[)P\@(``!6BW8$BD10)00`B410QT12``"+7'B+AY0`!0@`4.A;
-MTX/$`HE&_CET>'4'QT;\``#K!<=&_`$`BD[\@,$"T_@E`0`]`0`;P/?8B4;X
-MBD[\BT;^T_@E`0`]`0`;P/?8B4;Z]D08"'0+@$Q0"(-^^@#K#9`+P'0$@$Q0
-M"(-^^`!T!(!,4`+V1!A`=`2`3%`"]D08!'0(@+R=``#K&)"`O)T``'0'@$Q0
-M!.L%D(!D4/N`O)L``'0$@$Q0`8!,4!!>R</(!@``5U:+=@2+?@;V1!@$=`/I
-MM@#WQP(`=0;H$M:)1OKWQP$`=`?'1OP``>L%QT;\``+'1OX``/?'!`!T%(M&
-M_(M6_O?0]](AA(``(92"`.L.BT;\BU;^"82```F4@@#WQP0`="+&A)T``3ET
-M>'4$*LGK`K$!N`$`T^!0BUQXBX>4``4<`.L@QH2=```Y='AU!"K)ZP*Q`;@!
-M`-/@4(M<>(N'E``%'@!0Z`72@\0$Q%QT)H-'5`$F@U=6`/?'`@!U"?]V^NAL
-MU8/$`EY?R<.0R`0``%=6BW8$BWX&]\<"`'4&Z$O5B4;^]D08!'0(QT;\``#K
-M!I#'1OP"`/?'!`!T)\:$FP`!.71X=04JR>L#D+$!`D[\N`$`T^!0BUQXBX>4
-M``4<`.LDD,:$FP``.71X=00JR>L"L0$"3ORX`0#3X%"+7'B+AY0`!1X`4.AB
-MT8/$!,1<=":#1TP!)H-73@#WQP(`=0G_=O[HR=2#Q`)>7\G#58OL5HMV!&IP
-MBX24``4$`%#H*]&#Q`2`I($`^\>$B@```%[)PY!5B^Q75HMV!.B-U(OX@*2`
-M`.]J!(N$E``%!`!0Z/K0@\0$5^AVU(/$`EY?R<.058OL5U:+=@3H7]2+^(",
-M@``0:@B+A)0`!00`4.C,T(/$!%?H2-2#Q`)>7\G#D%6+[%=6BUX$BW<$BW\&
-M._YW"(O&*\=>7\G#BT8&*\<#QEY?R<.0R`8``%=6BW8$Z`K4B_AIQK@`!80'
-MB4;ZB]B+AX``BY>"`(E&_/9&_!!T!U/H3_^#Q`*#?@8*=2F+WM'CBX?4!4!`
-M4.A;T(/$`J@$=.MJ#8O>T>.+A]0%!08`4.@YT(/$!(O>T>.+A]0%0$!0Z#+0
-M@\0"J`1TZ_]V!HO>T>.+A]0%!08`4.@/T(/$!/9&_!!T'HO>T>.+A]0%0$!0
-MZ`+0@\0"J`1TZ_]V^N@`_X/$`E?H9].#Q`)>7\G#``````````!@'@8NCAYP
-M`>A#`+HB_[@`@.\''V'/8!X&+HX><`&Z(O^X`(#OBQ90`(/Z`'4<_P90`+HJ
-M_^U0N`0`[_OH:P?Z6+HJ_^\SP*-0``<?8<^[)@6+'X/[`'0NBY>0`.RH!'3P
-MBX^T`(N_M@`[^70>Q+>P`":*!8N7D@#N1SL^%@9T!XF_M@#KR\,S_^OU]X>`
-M```(=!J+CZ8`B8^T`(&G@`#_]SOY=`CWAX``"`!TP(M_`HLWB36#_@!T`XE\
-M`L='`@``QP<``(./@``$@Z>``/V+WNN`@Z6``/>#?0(`=1A35KLF!8LW@_X`
-M=`.)?`*)/XDUB5T"7EO#@XV```CWA8````AU'%-6BUT"BS6)-X/^`'0#B5P"
-M7EO'10(``,<%``##BY64`(/"".R*X"10=`0(A9H`B_>!QK@`@.2@=`0(I)H`
-MZQ>0BY6,`#/`[HN5C@#L(H6B`(OHJ(!UQO?%!@!U`^F``<2%J`"+M:P`BYVN
-M`#OS<@>+QBO#ZPB0*]ZA%`8KPSM%+G(1]X6``(``=0D&5^ABZX/$`@>+G90`
-M@\,&BXV0`(O1[*@!=0/I#P&H\'0#Z>,`B]/L/`!U!_=%#@(`=>'W10P$`'0"
-M)'^*51SVP@%U`^MDD(JU@``Z13ET-SI%.G00]L8(=%#VP@1T2^CB_NM&D(O3
-M!L1==":#1T`!)H-70@`F@T<(`2:#5PH`!XO:Z+_^ZXV+TP;$770F@T=$`2:#
-M5T8`)H-'"`$F@U<*``>+VNC!_NEJ__:%H0#_=!@\_W44)H@$1CLV%`9U!"LV
-M%`8[M:X`=!<FB`1&.S84!G4$*S84!CNUK@!T`^DT_U<&Q'UT)H-%,`$F@U4R
-M`":#130!)H-5-@`'7X/^`'4$BS84!D[I#/^)M:P`8#+D4(N5E`"#P@2P0.Z+
-MT^Q05^B_XH/$!F&+M:P`Z>?^B;6L`/?%!`!T"HN5E`"#P@2P4.Z#C8``0("]
-MF```=0B*A9D`B(68`/?%8`!U`^F(`8''N`#$A:@`B[6L`(N=K@`[\W('B\8K
-MP^L(D"O>H10&*\,[12YR$?>%@`"``'4)!E?HU>F#Q`('BYV4`(/#!HN-D`"+
-MT>RH`74#Z0\!J/!T`^GC`(O3[#P`=0?W10X"`'7A]T4,!`!T`B1_BE4<]L(!
-M=0/K9)"*M8``.D4Y=#<Z13IT$/;&"'10]L($=$OH5?WK1I"+TP;$770F@T=`
-M`2:#5T(`)H-'"`$F@U<*``>+VN@R_>N-B],&Q%UT)H-'1`$F@U=&`":#1P@!
-M)H-7"@`'B]KH-/WI:O_VA:$`_W08//]U%":(!$8[-A0&=00K-A0&.[6N`'07
-M)H@$1CLV%`9U!"LV%`8[M:X`=`/I-/]7!L1]=":#13`!)H-5,@`F@T4T`2:#
-M538`!U^#_@!U!(LV%`9.Z0S_B;6L`&`RY%"+E90`@\($L$#NB]/L4%?H,N&#
-MQ`9AB[6L`.GG_HFUK`#WQ4``=`J+E90`@\($L%#N@XV``$"`O9@``'4(BH69
-M`(B%F`"![[@`BY6,`(J%H@#NPX,^R`8`=`:ZQ`*P(.Z_A`?IL_R#/L@&`'0&
-MNL0"L"#NO_0(Z:#\@S[(!@!T!KK$`K`@[K]D"NF-_(,^R`8`=`:ZQ`*P(.Z_
-MU`OI>OR#/L@&`'0&NL0"L"#NOT0-Z6?\@S[(!@!T!KK$`K`@[K^T#NE4_(,^
-MR`8`=`:ZQ`*P(.Z_)!#I0?R#/L@&`'0&NL0"L"#NOY01Z2[\NL@"L"#NOP03
-MZ2+\NL@"L"#NOW04Z1;\NL@"L"#NO^05Z0K\NL@"L"#NOU07Z?[[NL@"L"#N
-MO\08Z?+[NL@"L"#NOS0:Z>;[NL@"L"#NOZ0;Z=K[NL@"L"#NOQ0=Z<[[`%6+
-M[(M>!/]V"/]V!O]W`O\WZ"X`BUX$B5<"B0>+Y5W"!@!5B^R+7@2+!XM7`HM.
-M!NCS`8M>!(D'B5<"B^5=P@0``%6+[%=64S/_BT8&"\!]$O?7BU8$]]CWVAT`
-M`(E&!HE6!(M&"@O`?1+WUXM6"/?8]]H=``")1@J)5@@+P'46BTX(BT8&,]+W
-M\8O8BT8$]_&+T^L\D(O8BTX(BU8&BT8$T>O1V='JT=@+VW7T]_&+\#/24E#_
-M=@K_=@CH-`$[5@9W!W((.T8$=@.#[@$STHO&"_]T!_?:]]B#V@!;7E^+Y5W"
-M"```58OL4U<S_XM&!@O`?1+WUXM6!/?8]]H=``")1@:)5@2+1@H+P'T0BU8(
-M]]CWVAT``(E&"HE6"`O`=1J+3@B+1@8STO?QBT8$]_&+PC/2"_]U1>M*D(O8
-MBTX(BU8&BT8$T>O1V='JT=@+VW7T]_$STE)0_W8*_W8(Z)$`.U8&=P=R"SM&
-M!'8&*T8(&U8**T8$&U8&"_]U!_?:]]B#V@!?6XOE7<((`%6+[%-6BT8*"\!U
-M%HM."(M&!C/2]_&+V(M&!/?QB]/K/)"+R(M>"(M6!HM&!-'IT=O1ZM'8"\EU
-M]/?SB_`STE)0_W8*_W8(Z!P`.U8&=P=R"#M&!'8#@^X!,]*+QEY;B^5=P@@`
-M`%6+[(M&!HM>"@O8BUX(=0N+1@3WXXOE7<((`/?CB\B+1@3W9@H#R(M&!/?C
-M`]&+Y5W""``R[>,&T>#1TN+ZPP"#!KP&`8,6O@8`_P9P!X,^<`=D<P/I@0"#
-M!G8'`8,6>`<`QP9P!P``H70'"P9R!W0H_S9T!_\V<@=J`&IDH7('BQ9T!RL&
-M@`<;%H('4E#H;_]24.@$_Z-('X,^2!\`?`>#/D@?9'X&QP9('P``@SY.'P-\
-M#?\V2!]H0`;H[,&#Q`2#/DX?`GP):$,&Z-S!@\0"*\"C@@>C@`?IX*<`````
-&````````
-`
-end
diff --git a/usr.sbin/stallion/bootcode/Makefile b/usr.sbin/stallion/bootcode/Makefile
deleted file mode 100644 (file)
index d0f7cfe..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# $FreeBSD: src/usr.sbin/stallion/bootcode/Makefile,v 1.9.2.3 2002/02/18 15:03:37 ru Exp $
-
-.SUFFIXES: .uu
-.uu:
-       rm -f ${.TARGET}
-       uudecode ${.IMPSRC}
-
-FILES= 2681.sys cdk.sys
-FILESDIR=      ${BOOTDIR}
-CLEANFILES=    ${FILES}
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/stallion/bootcode/cdk.sys.uu b/usr.sbin/stallion/bootcode/cdk.sys.uu
deleted file mode 100644 (file)
index 652ea49..0000000
+++ /dev/null
@@ -1,934 +0,0 @@
-$FreeBSD: src/usr.sbin/stallion/bootcode/cdk.sys.uu,v 1.2.10.2 2001/09/09 01:41:40 murray Exp $
-$DragonFly: src/usr.sbin/stallion/bootcode/cdk.sys.uu,v 1.2 2003/06/17 04:30:03 dillon Exp $
-
-begin 444 cdk.sys
-M````````````````````````````````````````````````````````````
-M``````!]`0``````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M`-(1SV0``````````````````````````````````````!``````8V1K:"YC
-M```F`````````````````%(6`````````````#8%```*!0,`````````````
-M;F\@,C8X,2!D<FEV97(@:6YS=&%L;&5D`&UE;6]R>2!M86QL;V,@9F%I;&5D
-M````````4$5.1"!C=')L:6XA("5D`%!%3D0@8W1R;&EN(2`E9`!014Y$(&-T
-M<FQI;B$@)60`05-315)424].($9!24Q54D4@870@)7,H)60I"@``O`!)3D9/
-M4DT`5T%23DE.1P!&051!3`!004Y)0P!%4E)/4B`E<SH@)7,H)60I.B``"@#<
-M`.,`ZP#Q`/<`,BXP+C``*$,I($-O<'ER:6=H="!3=&%L;&EO;B!496-H;F]L
-M;V=I97,@,3DY,R`M(#$Y.3<`"@HM+2TM+2TM+2TM+2TM+2T@(%-T86QL:6]N
-M($EN=&5L;&EG96YT($-O;6UU;FEC871I;VYS(%!R;V-E<W-O<B`@+2TM+2TM
-M+2TM+2TM+2TM"@`@("`@("`@("`@("`@("`@)7,*"@`@($)O87)D(%1Y<&4@
-M("`@("`@("`@("`@("`@("`@)3)D("`@("`@("`@("`@0V]D92!697)S:6]N
-M("`@("`@("`@("`@("`@)7,*`"`@365M;W)Y(%1O=&%L("`@("`@("`@("`P
-M>"4P-FQX("`@("`@("`@("`@365M;W)Y(%5S960@("`@("`@("`@("`@,'@E
-M,#9L>`H`("!-96UO<GD@1G)E92`@("`@("`@("`@(#!X)3`V;'@@("`@("`@
-M("`@("!-96UO<GD@36%P("`@("`@("`@("`@("`P>"4P-FQX"@`@($-O9&4@
-M4VEZ92`@("`@("`@("`@("`@,'@E,#9L>"`@("`@("`@("`@($1A=&$@4VEZ
-M92`@("`@("`@("`@("`@(#!X)3`V;'@*`"`@0V]D92!396=M96YT("`@("`@
-M("`@("`@(#!X)3`T>"`@("`@("`@("`@($1A=&$@4V5G;65N="`@("`@("`@
-M("`@("`@,'@E,#1X"@`@(%-T86-K(%-E9VUE;G0@("`@("`@("`@("`P>"4P
-M-'@@("`@("`@("`@("!%>'1R82!396=M96YT("`@("`@("`@("`@(#!X)3`T
-M>`H*`"`@07-Y;F-H<F]N;W5S(%!A;F5L<R`@("`@("`@("`@)60@("`@("`@
-M("`@("!!<WEN8VAR;VYO=7,@4&]R=',@("`@("`@("`@("`E,F0*``HM+2TM
-M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
-M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM"@H``!8!'`$P,3(S-#4V
-M-S@Y86)C9&5F```P!````````````````!\L)2PK+#$L-RP]+$,L22Q/+%4L
-M6RQA+&<L;2QT+'LL@BR)+)`LERR>+*4LK"RS++HLP2S(+,\LUBS=+.0LZRSR
-M+/DL`"T'+0XM%2T<+2,M*BTQ+3@M/RU&+4TM5"U;+6(M:2UP+7<M?BV%+8PM
-MDRV:+:$MJ"VO+;8MO2W$+<LM5D5#7T9!54Q4("@E9"`E9"`E9"`E9"`E9"`E
-M9"`E9"`E9"`E9"`E9"`E9"`E9"`E9"`E9"`E9"D``$8P``````````!*,```
-M``````````!\,0``96-P86YE;"YC`"0%````````5D1Z,XQ'S#/X-*HU``#^
-M/$`Z2CF01V9K````````````````````````8V0Q-#`P.B!S=')A>2!26"!I
-M;G1E<G)U<'0@*&%C:STE>"D*`&-D,30P,#H@<W1R87D@5%@@:6YT97)R=7!T
-M("AA8VL])7@I"@!C9#$T,#`Z('-T<F%Y($U/1$5-(&EN=&5R<G5P="`H86-K
-M/25X*0H`8V0Q-#`P+F,`8V0Q-#`P+F,`8V0Q-#`P(&YO="!R97-P;VYD:6YG
-M+"!B;V%R9#TE9"!P86YE;#TE9"!D979I8V4])60`"@``T@4``(````"```@`
-M(`"````"``@$`!``0````0`$=````.__`0`(````X?\!``P`#``N4M135&A:
-M9UY:5F.B9%!B%F,V9CQI;&#V8*)E&F:45%)J8V0Q-#`P+F,`8V0Q-#`P(&YO
-M="!R97-P;VYD:6YG+"!B;V%R9#TE9"!P86YE;#TE9"!D979I8V4])60`"@!C
-M9#$T,#`N8P`*``````````````````````````````````!S8S(V,3DX+F,`
-M<V,R-C$Y."YC`'-C,C8Q.3@@;F]T(')E<W!O;F1I;F<L(&)O87)D/25D('!A
-M;F5L/25D(&1E=FEC93TE9``*`-`&,@```$L```"6````R````"P!``#"`0``
-M6`(``(0#``"P!```"`<``&`)```0#@``P!(``"`<``"`)0``0#@```!+``"`
-M<````)8```#A````P@$``(0#```(!P``$`X`````````!`0$!`0("`@(#`P`
-M`````.__`0!X````[_\!`!``$`!6;G)O#'".<`1T5'W\?L!_[GE(>J)_UGJ*
-M>U2`JH#H@*Z')60`+@``````````^KP`!#/`CM".P+@``8[8,\".P":!/@`"
-MI_)U)R:!/@("2:%U'B:!/@0"4F-U%2:!/@8"(?%U#":A"@(FBQX,`NMBD+E:
-MT#/VCL8FH0``)HD.``"^`!"+%@``CL8F.0X``'0*@<8`$('^`(!RZ3/2CL(F
-MHP``C,B[4(N#X_#!ZP0#V$..PR:A```FB0X``(L6```F.0X``'4))J,``$,[
-MWG+A,\"C#`#'!@X```"+T\'B!`$6#`"#%@X``(O3P>H,`18.`*$,`(L6#@"Y
-M4(N)#A@`@\$?@^'PB_&+^2O!@]H`P>@$P>(,"]".PD].C,B.V/WSI/P&:/H`
-MR[@``8[8N7`[B_&+^8O9B1XD``,>(`"#PP^#X_"+P\'H!"O0CL).3_WSI/R,
-MP([8CL".T(OC@^P$O]`',\"Y<#N)#AP`*\_\\ZJ,R*,&`(S8HP0`+J-P`8S0
-MHPH`C,"C"`",V,'@!*,4`(S8P>@,HQ8`Z*P>Z_X``,@$``!75HM&")F+'IPZ
-M.5<0<F]W!3E'#G)HBW<$F8OXB]H#?@037@:#[P&#VP"+S@K)=`C1Z]'?_LEU
-M^(O'F8O/B]J+1@2+5@:)3OR)7OZ+S@K)=`C1ZM'8_LEU^#M&_'4%.U;^=#F+
-MQYF+S@K)=`C1X-'2_LEU^(E&!(E6!NL@D)"9.5<0=QAR!3E'#G,1:.(`_S8N
-M`/\VV@#H&R.#Q`:+1@2+5@9>7\G#R!```%=6BQZ<.HM'$HM7%#D6%@!W'W(&
-M.084`',7H10`BQ86`"M&!!M6!M'JT=@#1@035@8K1@0;5@:)1O")5O(K_XM'
-M#HM7$(E&](E6]CO7=00[QW0-4E#_=O+_=O#H'(>+^`O_=`B+1O8+1O1U#[\!
-M`(M&\(M6\HE&](E6]HM&"-'@`\<KTO?WB_`+]G4#O@$`:@!6_W;V_W;TZ-^&
-MB4;XBT8(T>`#QVH`4/]V\O]V\.C)AHE&_HM&^#E&_G8&BT;^B4;X/8``<P7'
-M1OB``(M&^%Y?R<.0R!P``%=6QT;N``/'1O```,<&9CN``L<&:#L``,0>9CLF
-MBT<$HVH[)HI''"4!`#T!`!K`_L"B6``FBT<2)@M'$'0*)HM'$*.*".A\&8M&
-M[HM6\-'JT=C1ZM'8T>K1V-'JT=B*3NZ#X0^)#HX(HY`(@4;N@`"#5O``:(``
-M4%'HR2>#Q`;$'HX()L='!@$`Q!Z."";'1T+_`,0>C@@FQD=,`L0>C@@FQD=-
-M`,0>C@@FQD=.`,0>9CLFBT<,B4;DBQZ<.HL'+1<`?`1(2'X4:%D`:'\!_S8N
-M`&H"Z&4;@\0(ZW-J`&H`:@!H!T-J_VK__Q84!8/$#`O`?3"+'IPZ@W\H`'0F
-MH4@`HUX[B]B#?Q8`=`]J`6H%_W<6:@WH2BN#Q`C'!C([+$[K+)"A3`"C7CN+
-MV(-_%@!T#VH!:@7_=Q9J#>@D*X/$",=&Y```BQZ<.L='*```BT;D0*/@!\0>
-MC@@FB4=2H>`'2)DSPBO"P?@#,\(KPD"C)#NAX`<%!P"9,\(KPL'X`S/"*\)`
-M)/Z)1NR+1NZ+5O#$'HX()HE'6":)5UJ+1NPKT@%&[A%6\(M&[HM6\,0>C@@F
-MB4=<)HE77HM&["O2`4;N$5;P4,0>C@@FBT=8)HM76M'JT=C1ZM'8T>K1V-'J
-MT=@FBE=8@^(/B\I04>A6)H/$!O]V[,0>C@@FBT=<)HM77M'JT=C1ZM'8T>K1
-MV-'JT=@FBE=<@^(/B\I04>@F)H/$!J'@!XE&[+@&`/=F[(E&[(M&[HM6\,0>
-MC@@FB4=4)HE75HM&["O2`4;N$5;PQ!Z."":+1U0FBU=6T>K1V-'JT=C1ZM'8
-MT>K1V":*3U2#X0^)3NB)1NK_=NQ04>C&)8/$!HL>G#J+!RT7`'P$2$A^"<<&
-M4@```^L1D,<&4@```8L>G#J#?R@`=`C'1OP!`.L&D,=&_`(`:)(`_W;P_W;N
-MZ+?[@\0&B4;NB5;PBT;\Q%[H)HD'BT;NBU;PQ%[H)HE'`B:)5P1HD@"+1NZ+
-M5O#1ZM'8T>K1V-'JT=C1ZM'8BE;N@^(/B\I04>@Y)8/$!H%&[I(`@U;P`(-&
-MZ`:+'IPZ@W\H`'X0BT;D*T<HF?=_*(E&].L&D,=&]```@W[T`'T%QT;T``#'
-M1OX``,=&Y@``*_;I`@&0BW[^T>>+01B+3O1!]^D[1N9^"\1>Z";'!P`$ZPF0
-MQ%[H)L<'``"+1NZ+5O#$7N@FB4<")HE7!&B\`(M&[HM6\-'JT=C1ZM'8T>K1
-MV-'JT=B*5NZ#X@^+RE!1Z)(D@\0&@4;NO`"#5O``_T;FBW[^T>>+'IPZBT$8
-MBT[T0??I.T;F?WG'1N8``/]&_H-^_@A\:\0>9CLFBT<4B4;R)HM'&(E&]H-^
-M\@!T"0O`=07'1O8``8-^]@!T"X-^\@!U!<=&\@`!@W[R`'4;@W[V`'45_W;D
-M_W;P_W;NZ//Z@\0&B4;RB4;VQ!Z."":+1U0FBU=6B4;HB5;J*_;K19"01H-&
-MZ`8Y=N1^BVB\`/]V\/]V[N@2^H/$!HE&[HE6\(M&YHM^_M'GBQZ<.CE!&'\#
-MZ='^Q%[H)L<'(`#I[/Y&@T;H!CDVX`=_`^FB`,1>Z";W!^#_=.@FBT<")HM7
-M!-'JT=C1ZM'8T>K1V-'JT=@FBD\"@^$/B4[XB4;Z_W;R_W;P_W;NZ*'Y@\0&
-MB4;NB5;PQ%[X)HF'L@`FB9>T`(M&\L1>^":)A[8`BT;R*](!1NX15O#_=O;_
-M=O#_=N[H:?F#Q`:)1NZ)5O#$7O@FB8>F`":)EZ@`BT;VQ%[X)HF'J@"+1O8K
-MT@%&[A%6\.E0_VH`:@1H%`MJ#.@6)X/$"(M&[HM6\*/N!XD6\`>C$`")%A(`
-M*\!>7\G#D,@6``!75FL&X`<J4.BG&H/$`J/F!XD6Z`>+'EX[_Q>AZ`<+!N8'
-M=1)H<@!H.@+_-BX`:@+HFQ:#Q`AK!N`'*E#_-N@'_S;F!^B0(H/$!L0>C@@F
-MBT=4)HM75M'JT=C1ZM'8T>K1V-'JT=@FBD]4@^$/B4[NB4;PQT;T,`"AY@>+
-M%N@'B4;ZB5;\QT;^___'1O(!`"O_*_;IB`$FBT<$)HM7!HE&ZHE6[,1>ZB:+
-MA[(`)HN7M`#1ZM'8T>K1V-'JT=C1ZM'8)HJ/L@"#X0_$7OHFB4\()HE'"L1>
-MZB:+AZ8`)HN7J`#1ZM'8T>K1V-'JT=C1ZM'8)HJ/I@"#X0_$7OHFB4\,)HE'
-M#L1>^B;W1R;@`W4#Z:<`@W[R`'4#Z9X`_T;^BU[^T>.)MW@(BT;^BQZ<.CE'
-M%GX%/0@`?'R+'IPZBU\6T>.)MW@(Q!Z."":+1U@FBU=:T>K1V-'JT=C1ZM'8
-MT>K1V":*3UB#X0^)#B8[HR@[)HM'7":+5U[1ZM'8T>K1V-'JT=C1ZM'8)HI/
-M7(/A#XD.D@BCE`C'1O9B`L=&^```Q%[V)L8'#<1>]B:`/P!U`^GD`.OR*_^)
-M?O*+QRKDF8O(BD;^B]J9@\K_BO**U(K@*L`+P0O3Q%[Z)HD')HE7`HL>7CN#
-M?P(`=!B-1O10Q%[Z)O]W`B;_-XL>7CO_5P*#Q`9'BU[^T>,#'IPZ.7\8?P7'
-M1O(!`$:#1OHJ@T;N!CDVX`=_`^D1_\1>^B:)=R3$7NXFBP?$7OHFB4<FQ%[N
-M)HM'`B:+5P31ZM'8T>K1V-'JT=C1ZM'8)HI/`H/A#\1>^B:)3P0FB4<&B\;!
-MX`.9]S[@!XO(L`'2X,1>^B:(1RC$7OHF]D<F'W6,)H-_)@!T`^D#_NE__\0>
-MC@@F@W]"`'4&QP92````*\!>7\G#D.@D(X,^4```=`I0Z"@C@\0"*\##_P90
-M`%#H&B.#Q`+H"`#'!E````#KY\@,``!75L0>C@@F_T=`Q!Z."":#?U``=$*A
-MB`#_!H@`/60`=@K_!HH`QP:(````)H!_3P!T"\<&B@```";&1T\`H8H`Q!Z.
-M""8Y1U!W#>A[$,0>C@@FQT=0``#$'HX()H!_80!T7BO_ZR:%=OAT$VO`*@,&
-MY@>+%N@'4E#H#P&#Q`3_1OK1YHM&^CE&_G_;1SD^)#M^+L0>D@@FB@&8B4;X
-M"\!TZHO'P>`#B4;Z!0@`B4;^.0;@!WT&H>`'B4;^O@$`Z\/$'HX()H!_8`!U
-M`^F)`,=&]@``*__K0)"%=OAT+&O`*@,&Y@>+%N@'4E#H,PB#Q`0+P'T5:U[Z
-M*@,>Y@>.!N@')HI'*"KD"4;V_T;ZT>:+1OHY1OY_PD<Y/B0[?B_$'B8[)HH!
-MF(E&^`O`=.J+Q\'@`XE&^@4(`(E&_CD&X`=]!J'@!XE&_KX!`.O#D(I&]L0>
-MC@@FB$=@@SY2``!T&8,^5```=!)J`/\V4@#H-1Z#Q`3'!E0```"+'EX[@W\4
-M`'0#_U<4*\!>7\G#R"P``%=6Q%X$)HM'!":+5P:)1NB)5NHF]D<F'W0,)HI'
-M)BO2M/\*].L')HL')HM7`HE&_(E6_L1>Z":`/P!U`^E]`2:+1P(FBU<$B4;@
-MB5;B*\`FB4<$)HE'`L1>Z";&!P"+'EX[.4<&=#O$7N@F_W<$)O]W`O]V_O]V
-M_(L>7CO_5P:#Q`B+^(/_`70F"_]\`XU%`8E&W)G$7N@FB4<")HE7!.L.D,1>
-MZ";'1P(!`":)1P2+'EX[@W\*`'4#Z<L`C4;LB\B+%@0`4E%J`&@-8?]V_O]V
-M_(L>7CO_5PJ#Q`R+^(/_`74B:!L#:(P`Z&X7@\0$B\=(=1%H'`/_-BX`_S;:
-M`.A8%X/$!@O_?'[V1O`$=2*`3O`$Q%X$)H!/$`C$7N@FBX>V`+D%`"O2]_'$
-M7@0FB4<2]D;P`G4,@$[P`L1>!":`3Q`0]D;Q`74,@$[Q`<1>!":`3Q"`Q%X$
-M)O9'$)AT((U&[(O(BQ8$`%)1:@!H#F'_=O[_=OR+'EX[_U<*@\0,Q%X$)H!G
-M$)O'!E0``0#$7@0FBD\D@.$'L`'2X":+7R3!ZP,#'B8[C@8H.R8(!\1>!":*
-M1RC$'HX()@A'8,1>Z":+1PPF"T<*=0/I[P+$7N@FBT<*)HM7#(E&X(E6XHM&
-MX(M6XB8Y1PIUXR8Y5PQUW2O`)HE'$":)1P[$7N@FB4<,)HE'"HE&Y(M&X.E1
-M`9"+1NB+5NH%$@")1MB)5MK$7M@F]D<$!'43Q%X$)H!/$`C$7M@F@$\$!.L)
-MD,1>!":`9Q#WQ%[8)O9'!`)U$L1>!":`3Q`0Q%[8)H!/!`+K",1>!":`9Q#O
-MQ%[8)O9'!0%U%,1>!":`3Q"`Q%[8)H!/!0'I!P&0Q%X$)H!G$'_I^P"0Q%[H
-M)HM'$HE&Y/]VY/]V!O]V!.CF"X/$!NG>`,=&Y`(`@7[@#&%U!H-^X@!T#8%^
-MX`IA==6#?N(`=<^`3N0!Z\F0QT;D`@"!?N`'874&@W[B`'0-@7[@!6%U"H-^
-MX@!U!(!.Y`'_=N3_=@;_=@3HBPN#Q`:+1NB+5NH%$@")1MB)5MK$7N@FBX>V
-M`,1>V"8Y1R1R$<1>Z":+A[8`2$C$7M@FB4<DQ%[8)H-_)`!U$<1>Z":+A[8`
-MN04`*]+W\>L$)HM'),1>!":)1Q+K+9`M`6$]#0!W)-'@DR[_ISX08`]:$%H0
-MU`^B#Z(/IP]:$%H0?`]\#X$/6A#>#HL>7CN#?PH`=0/IW0#_=N+_=N#HU`J#
-MQ`0+P'0-Q%[H)HM'$B:+5Q3K"8M&Z(M6Z@42`(E&V(E6VE)0_W;B_W;@_W;^
-M_W;\BQY>._]7"H/$#(OX"_]U8XM&X"T2875;BT;HBU;J!1(`B4;4B5;6BT;H
-M!;(`4E#H]02#Q`3$7M0F`0>+1NB+5NH%I@!24.B<!(/$!,1>U"8!1P+$7N@F
-MBX>V`$C$7M0F`4<$Q%[H)HN'J@!(Q%[4)@%'!H/_`70="_]\!8U%`>L"B\>)
-M1M29Q%[H)HE'#B:)5Q#K(9!HI@-HG`#HZQ.#Q`3K$L1>Z";'1PX!`";'1Q``
-M`+___\<&5``!`,1>!":*3R2`X0>P`=+@)HM?),'K`P,>)CN.!B@[)@@'Q%X$
-M)HI'*,0>C@@F"$=@Q%X$)O9'$0%T3\=&\`(`QT;R```KP(E&]HE&](E&[HE&
-M[":`9Q'^Q%X$)H!/$"#'!E8``0"-3NR+%@0`4E%J`&@/8<1>!";_=P(F_S?H
-M=P2#Q`S'!E8```#$7@0F]D<0!'0#Z<@!BT;HBU;J!;(`4E#HR0.#Q`2+\`OV
-M?P/IK@'$7@0F.7<2=P4F@&<0W\1>!":`9Q"_QT;>``"`/E@``'0QBQY>.X-_
-M"@!T)XU&X!90:@!H$V'_=O[_=OR+'EX[_U<*@\0,/0$`&\!`B4;>"\!T""O`
-MB4;BB4;@@W[>`74,:-H#:*P`Z+42@\0$BT;B"T;@=`/I-@&+'EX[@W\0`'4#
-MZ2D!Q%[H)HN'M@`FBX^Z`"O!.\9W#R:+A[H`)HN_M@`K^.L#D(O^5\1>!":+
-M1P@FBU<*Q%[H)HN/N@`#P5)0_W;^_W;\BQY>._]7$(/$"HE&U`O`?07'1M0`
-M`#EVU'TS.7[4=2Z+QBM&U%#$7@0F_W<*)O]W"/]V_O]V_(L>7CO_5Q"#Q`J+
-M^`O_?0(K_P%^U.L"*_^#?M0`?P/IC@`Y=M1T",1>!":`3Q`$*W;4Q%[H)HN'
-MN@`!1M2+1M0F.8>V`'<#B7[4BT;4)HF'N@#$7@0F.7<2=E4F]D<0*'5.*\")
-M1O*)1O")1O:)1O2)1NZ)1NPF]D<0('4)@$[P!":`3Q`@QP96``$`C4[LBQ8$
-M`%)1:@!H#V'$7@0F_W<")O\WZ*("@\0,QP96````Q%[H)H!_`0!U`^F6`":+
-M1P8FBU<(B4;@B5;B*\`FB4<()HE'!L1>Z";&1P$`BQY>.SE'"'0K_W;^_W;\
-M_U<(@\0$B_B#_P%T)0O_?`.-10&)1M29Q%[H)HE'!B:)5PCK#<1>Z";'1P8!
-M`":)1PC'!E0``0#$7@0FBD\D@.$'L`'2X":+7R3!ZP,#'B8[C@8H.R8(!\1>
-M!":*1RC$'HX()@A'8"O`7E_)P\@$``!6Q%X$)HM'!":+5P:)1OR)5O[$7OPF
-M@+^2``!T![C__U[)PY#$7@0F]D<0`71`:A`%E`!24(O#C,(%%`!24.AB%H/$
-M"L1>!":*1Q`D@CP"=0G$7OPF@(^9``'$7OPFQH>2``'$7@0F@&<0_NNPD":*
-M1Q`D@CP"=3QJ$(M&_`64`%)0Z%(6@\0&Q%[\)H"/F0`!BT;\BU;^!90`4E!J
-M`&@/8<1>!";_=P(F_S?H/@&#Q`SI:?_$7OPFBT<$)@M'`G0#Z5G_)HM'""8+
-M1P9T`^E,_R:+1Q`F"T<.=`/I/__$7@0F]D<F'W45BT;\!:8`4E#H+0"#Q`0+
-MP'0#Z2#_Q%X$)HI/)(#A![`!TN#VT":+7R3!ZP/$-B8[)B``*\!>R</(`@``
-M5U;$7@0FBW<()HM_"#O^=`J+]R:+?P@[_G7V)HM'!HE&_CEV_G()BT;^*\9>
-M7\G#)HM'!"O&`T;^7E_)PY#(`@``5U;$7@0FBW<&)HM_!CO^=`J+]R:+?P8[
-M_G7V)HM'"(E&_CEV_G<)B\8K1OY>7\G#)HM'!"M&_@/&7E_)PY!5B^Q6BW8(
-M@_X!=2"+1@2+5@8%L@!24.BD_X/$!,1>!"8KA[8`]]A(7LG#D(M&!(M6!@6F
-M`%)0Z$+_@\0$Q%X$)BN'J@#KWI#(%```5U:#?@3_=0:#?@;_=!.+1@2+5@8J
-MTCW__W4?@?H`_W49:.H$_S8N`/\VV@#HI0Z#Q`:X__]>7\G#D(M6!BK`*M(]
-M`/]U1CO0=4(K]NL!1CDVX`=^%HI&!"KD:]XJ`Q[F!XX&Z`<F.4<F=>.*1@0J
-MY&O>*@,>Y@>.!N@')CE')G0%:/,$ZYYKQBKK79"+1@2+5@:*Q(K6*O8JY(E&
-M_HI&!(E&\(-^_@!\#(M&_HL>G#HY1Q9_!VC[!.EI_Y"+V-'CB[=X"(-^\`!\
-M$(M&\`/&BU[^T>,YAWH(?P9H``7I1/^+1O`#QFO`*@,&Y@>+%N@'B4;RB5;T
-MQ%[R)HM'!":+5P:)1OJ)5OR!?@@/870#Z?T"@WX*`'0#Z?0"BT8."T8,=1*+
-M1@X+1@QT`^D%_V@*!>GQ_I"+1@R+5@Z)1O:)5O@F]D<F'W0#Z0H!)O9'$`)U
-M#<1>]B;V1P4!=0/I]@!J`/]V_/]V^NA+_H/$!HE&[`O`=0O$7O(F@$\0`NG6
-M`,1>^B:+AZH`)HN/K``KP3M&['<.)HN'K``FB[^J`"OXZP.+?NQ7Q%[R)HM'
-M#":+5P[$7OHFBX^L``/!4E#_=@;_=@2+'EX[_U<.@\0*B_`+]GT"*_8+]GXQ
-M._YU+8M&["O&4,1>\B;_=PXF_W<,_W8&_W8$BQY>._]7#H/$"HOX"_]]`BO_
-M`_?K`BO_.7;L?B%J`/]V!O]V!(L>7CO_5Q*#Q`8+P'4+Q%[R)H!G$/WK"9#$
-M7O(F@$\0`@OV?AC$7OHFBX>L``/P)CFWJ@!W`HOW)HFWK`"#/E8``'0#Z:``
-MQ%[V)O='!`8!=0/ID@`F]D<$!G0(Q%[R)H!G$/O$7O8F@&<$^\1>]B;V1P0"
-M=!6+1OJ+5OP%L@!24.C7_(/$!`O`?PK$7O(F]D<00'0(Q%[V)H!G!/W$7O(F
-M]D<0$'0(Q%[V)H!G!/W$7O(F]D<0@'0(Q%[V)H!G!?[$7O8FBT<")@L'=1HF
-MBT<*)@M'"'40)HM'!B8+1P1U!BO`7E_)P\1>^B:`OY(``'4#Z:H`Q%[R)O9'
-M$`%U$6H0B\.,P@44`%)0Z,,1@\0&Q%[V)HL')HM7`L1>\B8)1Q0F"5<6Q%[V
-M)O9'!!YT",1>\B:`9QCAQ%[V)O9'!1YT",1>\B:`9QGAQ%[V)HM'!":+5P;$
-M7O(F"4<8)@E7&L1>]B:+1P@FBU<*Q%[R)@E''"8)5Q[$7O8FBT<*)@M'"'03
-M)HM'#":+5P[$7O(FB4<@)HE7(L1>\B:`3Q`!ZR!J$(O#C,(%E`!24/]V#O]V
-M#.CI$(/$"L1>^B;&AY(``<<&5``!`,1>\B:*3R2`X0>P`=+@)HM?),'K`P,>
-M)CN.!B@[)@@'Q%[R)HI'*,0>C@@F"$=@Z8$`@7X(`&=U(X-^"@!U'8-^#@!\
-M`_]&#(M&#(M6#L1>^B:)1PXFB5<0ZUB0@7X(`6=U(X-^"@!U'8-^#@!\`_]&
-M#(M&#(M6#L1>^B:)1P(FB5<$ZRZ0@7X(`F=T`^G&^X-^"@!T`^F]^X-^#@!\
-M`_]&#(M&#(M6#L1>^B:)1P8FB5<(QP94``$`Q%[R)HI/)(#A![`!TN`FBU\D
-MP>L#`QXF.XX&*#LF"`?$7O(FBD<HQ!Z.""8(1V"#/E(``'4#Z2K^@SY4``!U
-M`^D@_FH`_S92`.BN#X/$!,<&5````.D+_I!5B^R+1@0M`&%\"4A(?P6X`0#)
-MPRO`R</("```5HMV".C4$HE&^,1>!":+1P0FBU<&B4;ZB5;\]\8!`'0JQ%[Z
-M)HN'K``FB8>N`,1>^B:+AZX`B4;^BT;^)CF'K`!UWL1>!":`9Q#]]\8"`'1+
-MQ%X$)O9'$!!U%\1>^B:+A[H`)CF'N`!T",1>!":`3Q$!Q%[Z)HN'N``FB8>Z
-M`,1>^B:+A[@`B4;^BT;^)CF'N@!UWL1>!":`9Q";_W;XZ$@2@\0"*\!>R</(
-M$```5U;H*!*+^*'F!XL6Z`>)1OR)5OZ+P@M&_'4'*\!>7\G#D&H,C4[PBQ8$
-M`%)1Z/\.@\0&QT;T___'1O;__ROVZUR0Q%[\)O9')B!T+HL>7CN#?PH`="2-
-M1O"+R(L6!`!246H`:`EABU[\)O]W`B;_-XL>7CO_5PJ#Q`R+'EX[@W\(`'04
-MQ%[\)O]W`B;_-XL>7CO_5PB#Q`1&@T;\*CDVX`=_GU?HE1&#Q`+I;O^0R`H`
-M`%=6QP:<.C0[QT;\``+'1OX``,1>_":!/Z?R=`/I*`$F@7\"2:%T`^D=`2:!
-M?P128W0#Z1(!)H%_!B'Q=`/I!P$FBT<4HS0[ZT^0QP9&.P``QP9(.P$`QP9"
-M.P!`QP9$.P``QP8X.PX`ZU+'!D8[``#'!D@[`0#'!D([``#'!D0[`0#'!C@[
-M$`#K,L<&1CL``,<&2#L"`.O>2#T*`'<>T>"3+O^G9ATJ'0H=*ATJ'0H="AU*
-M'7P=*ATJ'2H=QP8V.P$`Q%[\)H-_&`!U!B;'1QA0`&H!:*"&Q%[\:@`F_W<8
-MZ%ULHSH[B18\.VH`:@124.B=:J,^.XD60#O$7OPF@W\:`'00)HM'&HE&]L<&
-M7#L0`.L.D":+1PZ)1O;'!EP[```K]NL"D$:#_A!]"XO.BT;VT^`+P'7O`39<
-M.\<&2CL!`*%<.Z-,.\=&^``"QT;Z``#$7O@F@3]%0W0#Z1`!)H%_`E`A=`/I
-M!0''!C0[%P"#/HH(`'0=@SZ*"!AU"<<&-#L8`.L.D(,^B@@9=0;'!C0[&0"A
-M-#LM&`!T%<<&0CL`$,<&1#L``,<&.#L,`.L3D,<&0CL``,<&1#L!`,<&.#L0
-M`,<&1CL``,<&2#L"`,1>^":+1P:C-CO'!CH[0'C'!CP[?0%J`&H$_S8\._\V
-M.COHG6FC/CN)%D`[QP9<.P``QP9*.P``*_;K%2O`BD[V@^%`@_D!&\GWV87(
-M=`%&1H/^"'U*Q%[X@\,()HH`*N2)1O8]_P!T-XI&]B4'`#O&=2V*1O8E(``]
-M`0`;_X/G^(/'$`$^7#N+'DH[T>.)OTP[_P9*.X/_$'6AN`$`ZYXKP%Y?R<-5
-MB^S_=@C_=@:+7@31X_^W#`'_-A0!Z-T%B^6-1@Q0_W8*:@!J`.@)!HOE:`H!
-MZ(<%*\#)PY!H3`'HN@6#Q`+_-BX$:)\!Z*T%@\0$_S8L!/\V-#MHM`'HG`6#
-MQ`;_-F([_S9@._\V#@#_-@P`:`$"Z(,%@\0*_S;P!_\V[@?_-I@(_S:6"&A.
-M`NAJ!8/$"O\V'@#_-AP`_S8:`/\V&`!HFP+H406#Q`K_-@0`_S8&`&CH`NA`
-M!8/$!O\V"`#_-@H`:#<#Z"\%@\0&_S9<._\V2CMHAP/H'@6#Q`9HV`/H%06#
-MQ`+#D.B?_.B,#N@S"^C.XN@/`.@VZ.@[_^B@#>E["I##D,@$``"A%`"+%A8`
-M*P80`!L6$@"CE@B)%I@(H0P`BQ8.`"L&E@@;%I@(HV`[B19B.Z$0`(L6$@#1
-MZM'8T>K1V-'JT=C1ZM'8B@X0`(/A#XE._(E&_J&6"(L6F`C$7OPFB0<FB5<"
-MQ%[\*\`FB4<&)HE'!,1>_":)1PHFB4<(BT;\BU;^HY@ZB1::.J,L.XD6+CLK
-MP,G#D,@$``"AF#J+%IHZZPF0)HM'!":+5P:)1OR)5OZ+P@M&_'06BT8$BU8&
-MQ%[\)CE7`G+<=P4F.0=RU8M&_(M6_LG#D,@$``"+1@8+1@1T5Z&8.HL6FCK$
-M7@0FB4<$)HE7!L1>!"O`)HE'"B:)1PBAFCH+!I@Z=1"+1@2+5@:C+#N)%BX[
-MZQ.0BT8$BU8&Q!Z8.B:)1P@FB5<*BT8$BU8&HY@ZB1::.BO`R<.058OLBT8&
-M"T8$=&?$7@0FBT<*)@M'"'42)HM'!":+5P:CF#J)%IHZZQ60)HM'!":+5P8F
-MQ%\()HE'!":)5P;$7@0FBT<&)@M'!'43)HM'"":+5PJC+#N)%BX[*\#)PR:+
-M1P@FBU<*)L1?!":)1P@FB5<**\#)P\@4``"+1@2+5@:`Y`^*Q(KBBM8J]M'J
-MT=C1ZM'8T>K1V-'JT=@#1@2#T@")1OB)5OK$7@0FBP<FBU<"`T;X$U;ZB4;L
-MB5;NH9@ZBQ::.NM(BT;TBU;V.4;X=34Y5OIU,,1>!":+!R:+5P+$7OPF`0<F
-M$5<"_W;^_W;\Z`W_@\0$BT;\BU;^B48$B58&Z8@`D":+1P0FBU<&B4;\B5;^
-MB\(+1OQT<HM&_(#D#XK$BN**UBKVT>K1V-'JT=C1ZM'8T>K1V`-&_(/2`(E&
-M\(E6\L1>_":+!R:+5P(#1O`35O*)1O2)5O:+1O"+5O(Y1NQT`^E=_SE6[G0#
-MZ57_!E/HBOZ#Q`3$7OPFBP<FBU<"Q%X$)@$')A%7`HM&_@M&_'0#Z>+^BT8$
-MBU8&R</($@``BT8$!04`)/Z)1@0M#``;R??1(\$%#`")1O3'1O8``.C]"HE&
-M\O]V]O]V].B$_8/$!(E&_(E6_HO""T;\=0[_=O+HZ@J#Q`(KP)G)PU+_=OSH
-M"?Z#Q`2+1OR+5OZ)1NZ)5O#$7OPFBP<FBU<"*T;T&U;VB4;XB5;Z"])U!3T,
-M`')EB\.,PH#D#XK$BN**UBKVT>K1V-'JT=C1ZM'8T>K1V`/#@](``T;T$U;V
-MT>K1V-'JT=C1ZM'8T>K1V(I._`).](/A#XE._(E&_HM&^(M6^L1>_":)!R:)
-M5P+_=O[_=OSH$?V#Q`3_=O+H0@J+1O2+5O;$7NXFB0<FB5<"@T;N!(M&](M6
-M]@$&8#L1%F([*0:6"!D6F`B+1NZ+5O#)P\@.``"+1@2+5@:`Y`^*Q(KBBM8J
-M]M'JT=C1ZM'8T>K1V-'JT=@#1@2#T@`Y%A(`=Q9R!CD&$`!W#CD6%@!W#7(&
-M.084`',%N/__R<.#;@0$BT8$BU8&B4;RB5;TQ%[R)HL')HM7`HE&_(E6_NB2
-M"8E&]O]V]/]V\N@Y_8/$!(E&\HO""T;R=`I2_W;RZ$?\@\0$_W;VZ'@)BT;\
-MBU;^*09@.QD68CL!!I8($1:8""O`R<-5B^R#/FH[`'00@SXR.P!T"?]V!&H`
-M_Q8R.RO`R<-5B^R#/FH[`'01@SXR.P!T"O]V!O]V!/\6,CLKP,G#D%6+[(U&
-M!E#_=@1J`&H`Z"L`R<.058OLC48(4/]V!O]V!&H`Z!8`R<-5B^R-1@A0_W8&
-M:@#_=@3H`@#)P\@.``!75HM&"HE&\HM>"/]&"(H'F(OX@_\E=#(+_W42.7X&
-M=`:+7@;&!P`KP%Y?R<.0@WX&`'0*BUX&B`?_1@;KRE?_=@3H6_^#Q`3KOHM>
-M"(`_)742@WX&`'0(BUX&Q@<EZ]EJ)>O;@#\M=0O_1@C'1O8!`.L&D,=&]@``
-MBUX(@#\P=0O_1@C'1OP!`.L&D,=&_```BUX(@#\K=0O_1@C'1OH!`.L&D,=&
-M^@``BUX(@#\@=0O_1@C'1O0!`.L&D,=&]```BUX(@#\C=0/_1@@K]NL5@_\Y
-M?R"+QL'@`@/&T>`#QRTP`(OPBUX(_T8(B@>8B_B#_S!]VX/_+G45BUX(_T8(
-MB@>8B_B#_S!\!8/_.7[K/60`=0/I^P!^`^D,`CU5`'4#Z2,!?@/IYP$M1`!U
-M`^D6`2T+`'4#Z0X!Z1P"@W[V`'4LQT;X`0#K#Y!J(/]V!.A._H/$!/]&^#EV
-M^'T1@WX&`'3GBUX&Q@<@_T8&Z^>#?@8`=!Z+7O**!XM>!H@'_T8&@W[V`'4#
-MZ<X!QT;X`0#K(Y"+7O**!RKD4/]V!.@`_H/$!.O<D&H@_W8$Z/+]@\0$_T;X
-M.7;X?`/IG`&#?@8`=.2+7@;&!R#_1@;KY)!J`&H`_W;V_W;\5FH"BU[R:@#_
-M-XU&!E#_=@3H=`&#Q!3I9@%J`&H`_W;V_W;\5FH0Z]J0:@!J`/]V]O]V_%9J
-M".O*D/]V]/]V^O]V]O]V_%9J"HM>\HL'F5)0Z[>0:@!J`/]V]O]V_%9J"NN@
-MD(M>"/]&"(H'F(OX@_]!?`B#_UI_`X/'((O'/6D`=%=_;2UB`'0&2$AT3.LB
-M:@!J`/]V]O]V_%9J`HM>\O]W`O\WC48&4/]V!.C9`(/$%(-&\@+IQP"0:@!J
-M`/]V]O]V_%9J$.O4D&H`:@#_=O;_=OQ6:@CKQ)#_=O3_=OKK!&H`:@#_=O;_
-M=OQ6:@KKK)`M;P!TTRT&`'3F+0,`=+GKKY"+7O*+!XE&_HM>_O]&_HH'F(OX
-M"_]T98-^!@!T"XM>!H@'_T8&Z^&05_]V!.B5_(/$!.O4+5@`=0/I+_\M"@!U
-M`^FN_DAU`^D6_NLP+6D`/0\`=RC1X),N_Z>B*'PGPBC"**8GPBC"*&PGPBC"
-M*,(H1BC"*)8GPBC"*%PG@T;R`NFI_)#()@``5U:+1@B+5@J)1OR)5OX+TGT*
-M]U[\@U;^`/=>_BOVBT8,F5)0_W;^_W;\Z/E?B]@#'D($B@>(0MQ&BT8,F5)0
-MC4;\4.CZ7H-^_@!_TGP&@W[\`'7*@WX*`'T/@WX4`'4&@WX6`'0#_TX.@WX2
-M`'4Q@WX0`'4KB_[K#9!J(/]V!.BZ^X/$!$<Y?@Y^%8M>!H,_`'3GBQ_&!R"+
-M7@;_!^OFD(-^%@!U!H-^%`!T&(-^"@!]$HM>!H,_`'0JBQ_&!RV+7@;_!X-^
-M%`!T,X-^"@!\+8M>!H,_`'0:BQ_&!RN+7@;_!^L9:BW_=@3H4/N#Q`3KTY!J
-M*_]V!.A"^X/$!(-^%@!T'H-^%`!U&(-^"@!\$HM>!H,_`'0;BQ_&!R"+7@;_
-M!X-^$@!U/X-^$`!T.8O^ZQN0:B#_=@3H`ON#Q`3KXI!J,/]V!.CT^H/$!$<Y
-M?@Y^%8M>!H,_`'3GBQ_&!S"+7@;_!^OFD(U$_XE&VNL8BU[:C4;<`]B*!YA0
-M_W8$Z+SZ@\0$_T[:@W[:`'P@BUX&@S\`=-J+7MJ-1MP#V(H'BUX&BQ^(!XM>
-M!O\'Z]>#?A(`="J+_NL,:B#_=@3H?OJ#Q`1'.7X.?A6+7@:#/P!TYXL?Q@<@
-MBUX&_P?KYI`KP%Y?R<.#!IXZ`8,6H#H`Z_0`````^KHB_[@`@.^Z*/^P;>[K
-M`+IF_S/`[^L`,\".V([0CL#J``#__XO<BU<"BD<$[L.+W(M7`C/`[,.+W(M7
-M`HM'!._#B]R+5P+MPU6+[%97'@;$?@C%=@2+3@R+QC/'J0$`=1/WQ@$`=`8+
-MR70+I$G1Z?.E@]$`\Z0''U]>7<-5B^Q7!L1^!(M."#/`T>GSJW,!J@=?7<,`
-MR`(``&H`:F3_-D`[_S8^.^@Q7HE&_F@!X&AF_^B#_X/$!/]V_FAB_^AW_X/$
-M!&H`:@1HKHIJ$^C*`X/$"-%N_O]V_FA@_^A9_X/$!.L*@P:0.@&#%I(Z`&A@
-M_^A._X/$`CM&_G?HZPJ#!I`Z`8,6DCH`:&#_Z#3_@\0".T;^<NAJ"&B0.NA2
-M7"O`R<,``````````````````!X&4RZ.'G`!NBK_[5"+A_@'[_O_!C`[_Y>B
-M.OJZ(O^X`(#O6+HJ_^^#Q`(''V'/8+L``.O+8+L"`.O%8+L$`.N_8+L&`.NY
-M8+L(`.NS8+L*`.NM8+L,`.NG8+L.`.NA8+L0`.N;8+L2`.N58+L4`.N/8+L6
-M`.N)8+L8`.N#8+L:`.E\_V"['`#I=?]@NQX`Z6[_8+L@`.EG_V"[(@#I8/]@
-MNR0`Z5G_8+LF`.E2_V"[*`#I2_]@NRH`Z43_8+LL`.D]_V"[+@#I-O]@NS``
-MZ2__8+LR`.DH_V"[-`#I(?]@NS8`Z1K_8+LX`.D3_V"[.@#I#/]@NSP`Z07_
-M8+L^`.G^_F"[0`#I]_Y@NT(`Z?#^8+M$`.GI_F"[1@#IXOY@NT@`Z=O^8+M*
-M`.G4_F"[3`#IS?Y@NTX`Z<;^8+M0`.F__F"[4@#IN/Y@NU0`Z;'^8+M6`.FJ
-M_F"[6`#IH_Y@NUH`Z9S^8+M<`.F5_F"[7@#ICOY@NV``Z8?^8+MB`.F`_F"[
-M9`#I>?Y@NV8`Z7+^8+MH`.EK_F"[:@#I9/Y@NVP`Z5W^8+MN`.E6_F"[<`#I
-M3_Y@NW(`Z4C^8+MT`.E!_F"[=@#I.OY@NW@`Z3/^8+MZ`.DL_F"[?`#I)?Y@
-MNWX`Z1[^^KHJ_^V+V+@'`._[B\/#^KHJ_^V+V+@&`._[B\/#^KHJ_^V+V+@%
-M`._[B\/#^KHJ_^V+V+@$`._[B\/#^KHJ_^V+V+@#`._[B\/#^KHJ_^V+V+@"
-M`._[B\/#^KHJ_^V+V+@!`._[B\/#^KHJ_^V+V+@``._[B\/#^HO<BT<"NBK_
-M[_O#NBK_[??0)0<`P_K#^\.<^EC#B]S_=P*=P\S#`,.058OL_W8@_W8>_W8<
-M_W8:_W88_W86_W84_W82_W80_W8._W8,_W8*_W8(_W8&_W8$:-`$Z(#VR</(
-M"```5F@`@&@B_^@^_(/$!&@`@&@B_^@R_(/$!&C]`&@H_^@F_(/$!&H`:"K_
-MZ!O\@\0$:@AH./_H$/R#Q`1J"&@Z_^@%_(/$!&H(:#S_Z/K[@\0$:@AH/O_H
-M[_N#Q`0K]HO>T>/'AZ(Z="Z+WM'CQX?X!P``1H/^0'SF*\")1OJ)1O@K]HY&
-M^HO>T>.+AU`$BPX&`(M>^":)!R:)3P)&@T;X!(/^0'S@*\!>R<-5B^R#?@0`
-M?!*#?@1`?0R#?@@`?`:#?@@'?@6X___)P[@(`"M&"(E&"#T'`'X%QT8(!P"+
-M1@:+7@31XXF'HCJ+1@A(BUX$T>.)A_@'BT8$ZV^0_W8(:#+_Z$/[B^7IB`"#
-M?@H!]1O`)1``"T8(4&@X_^OED(-^"@'U&\`E$``+1@A0:#K_Z]&0@WX*`?4;
-MP"40``M&"%!H//_KO9"#?@H!]1O`)1``"T8(4&@^_^NID/]V"&@T_^N@_W8(
-M:#;_ZY@M"``]"P!W(-'@DR[_IRHP0C!",`HP$C"Z+\XOXB_V+T(P0C!",*PO
-M*\#)PRO`PY#(#```@WX$_W4@@WX&_W4:_W8._W8,_W8*_W8(_W8&_W8$Z.T`
-M@\0,R<.!?@@!9'4&@WX*`'0%N/__R<.+1@R+5@Z)1OR)5OZ*1@8JY`O`=>;'
-M1O2``,=&^H``Q%[\)HH')0<`)HD')L='`@``Q%[\*\`FB4<&)HE'!,1>_";V
-M!P%T*?]V].B[`(/$`@O`=`K$7OPF@$\$`>L2Q%[\)HH')0$`)HD')L='`@``
-MQ%[\)O8'!'0ABT;T!08`4.CF^8/$`L<&(@4``&H!BT;T0$!0Z,CY@\0$Q%[\
-M)O8'`G0:!E/_=OK_=O3HU@"#Q`@+P'0(Q%[\)H!/!`+$7OPF]@<$=`R#/B(%
-M`'0%)H!/!`0KP,G#R`8``,=&^H``_W;ZZ",`@\0""\!T!"O`R<.X___)PY#'
-M!B(%`0!HA@#H9_F#Q`(KP,/(!```BT8$!00`4.A3^8/$`HA&_O;0*N10BT8$
-M!00`4.@T^8/$!&H$_W8$Z"GY@\0$BT8$!0@`4.@F^8/$`HM&!`4$`%#H&?F#
-MQ`*(1OR*1OXJY%"+1@0%!`!0Z/GX@\0$BD;\*N3WT"KDBD[^*NT[P74%N`$`
-MR<,KP,G#R`8``%=6QT;\`0"+=@2+_@-^!NL#D$9&._Y^7&H`5NBY^(/$!%;H
-MO/B#Q`*(1OX*P'3CB\8K1@29*\+1^,1>"":(1PC$7@@FQD<)`(O&*T8$F2O"
-MT?C$7@@FB$<*BD;^Q%X()HA'"\=&_```BW8$B_X#?@;IIP"0*_;K<Y"01T<Y
-M?@9^48M&!`/'4.A7^(/$`HA&^CO^=0B*1OXX1OIU"CO^=-J`?OH`=-2+QIDK
-MPM'XQ%X()HA'"(I&_L1>"":(1PF+QYDKPM'XQ%X()HA'"HI&^NN+D-!F_H!^
-M_@!U'&H`BT8$`\90Z/'W@\0$1D8Y=@9_`^EU_\9&_@&*1OXJY%"+1@0#QE#H
-MT?>#Q`0K_^EN_VC_`%;HPO>#Q`1&1CO^?_"+1OQ>7\G#D,@$``!6BT8$BU8&
-MBL2*UBKV*N2+\-'FBQZ..HM`&(E&_HI&!"KDB_#1YHM>_HM`+(E&_(O8]D=]
-M@'0%QT;\``"+1OQ>R<-5B^Q75HMV"(-^!/]U!H-^!O]T$XM&!(M6!BK2/?__
-M=0V!^@#_=0<KP%Y?R<.0_W8&4.B%_X/$!(OX"_]U"+C__UY?R<.0"_9T](L$
-MB45TZ]:058OL5U:#?@3_=1&#?@;_=0N`#O('`2O`7E_)P_]V!O]V!.A#_X/$
-M!(OP"_9U"+C__UY?R<.0]D1\`77:QP2`)<=$`@``QT0$@"7'1`8``,9$,@#&
-M1#`(QD0Q`,=$"(`0QT0*```KP(E$#HE$#(E$$HE$$(E$&HE$&(E$((E$(L9$
-M,Q/&1#01QD0U$\9$-A&AY`>)1"2A;CN)1":AX@>)1"BA*CN)1"JA;#N)1"PK
-M_XO?`][&1SD`1X/_"WSR*\")1%*)1%")1%:)1%2)1%J)1%B)1&*)1&")1&:)
-M1&2)1&J)1&B)A)``4%!6Z&$6@\0&:@%J`5:+7';_5QB#Q`9J_VK_:@%6BUQV
-M_U<:@\0(5HM<=O]7((/$`H!,?`'$7'`F@P<!)H-7`@#IZ_Z058OL5U:#?@3_
-M=16#?@;_=0\KP*/T!Z/R!RO`7E_)PY#_=@;_=@3H$_Z#Q`2+\`OV=0BX__]>
-M7\G#D/9$?`%TV6H`:@!6BUQV_U<8@\0&:@!J`&H`5HM<=O]7&H/$"&H#5N@*
-M%8/$!.@"^8OXQX2L````QX2N````QX2D````QX2F````QH2:``#&A)L``,:$
-MG```@61\((#'1'X``,>$@````%?HR?B#Q`+I;/^0N/__P\@,``!75HM&!(M6
-M!BK2/?__=2&!^@#_=1O_=@[_=@S_=@K_=@C_=@90Z-#_@\0,7E_)PY#_=@90
-MZ$_]@\0$B_`+]G4(N/__7E_)PY#'1OX``(M&".D)`Y#_=@[_=@Q6BUQV_U<N
-M@\0&Z2T#D/]V#%;H212#Q`3I'P.0_W8,5HM<=O]7)NOMBT8,BU8.B4;XB5;Z
-M5L1^^+DB`/.E7NGY`I"+1@R+5@Z)1OB)5OK$7O@F]D<$$'0,:@%6BUQV_U<L
-M@\0$Q%[X)O9'!"!T#&H`5HM<=O]7+(/$!,1>^";V!R!T#&H`5HM<=O]7*H/$
-M!,1>^";V!Q!T#&H!5HM<=O]7*H/$!,1>^";V1P1`=0/IB0)J`8O#C,(%"0!2
-M4/]V!O]V!.AS`X/$"NEO`I`K_X%^"`5A=04Y?@IT#(%^"`=A=0@Y?@IU`[\!
-M`(%^"`5A=0:#?@H`=`V!?@@&874)@WX*`'4#@\\"5U;H4Q.#Q`3_=@[_=@Q6
-MZ/H3Z>S^D/]V#O]V#%;H(!;IWOZ05HM<=O]7((/$`E;H&A6#Q`*+1@R+5@Z)
-M1OB)5OI6C71$Q'[XN08`\Z5>Z`7WB4;\Q%[X)L='!#\`)L='!@``_W;\Z/'V
-M@\0"Z<4!D"O_@7X("F%U!3E^"G0,@7X(#&%U"#E^"G4#OP$`@7X("F%U!H-^
-M"@!T#8%^"`MA=0F#?@H`=0.#SP)75NBI$H/$!(M&#(M6#HE&^(E6^NB5]HE&
-M_+@$`(E&]HE&],1>^";V1P0$=!4FBD<()00`/0$`]1O`)0(`#`&)1O8F]D<$
-M`705)HI'""4!`#T!`/4;P"4"``P!B4;T_W;\Z$SV@\0"_W;V_W;T5HM<=O]7
-M'NG@_9"+1@R+5@Z)1OB)5OI6C710Q'[XN0@`Z?K]D(M&#(M6#HE&^(E6^N@+
-M]HE&_(M&^(M6^E8>C7Q0B_`>!X[:N0@`\Z4?7O]V_.CN]8/$`FH`:@#IF/Z+
-M1@R+5@Z)1OB)5OJ+1'"+5')6'HOPCMK$?OBY.@#SI1]>!O]V^%;HY@?I7OV0
-MBT1R"T1P=0/IA0#$7'`FBT=PB4;\:G3_='+_='#H:_*#Q`:+1OR9Q%QP)HE'
-M<":)5W+_-C0%C82H`%#H%A6#Q`29Q%QP)HE'!":)5P;K09#'1O[__^LYD"T!
-M83T3`'?PT>"3+O^G&CD6-B0V,#86-]0VU#;4-C(WP#=^-WXW?C<P.$HX`CE*
-M-H0X)#<"-K(XBT;^7E_)PY#(!```5U:+=@C_=@;_=@3HV/F#Q`2+^`O_=0>X
-M__]>7\G#QT;\```+]G4+_S8R!8V%H`#K#I"#_@%U$?\V-`6-A:@`4.AU%(/$
-M!.L3@_X"=06A,@7K"(/^`W4'H30%2(E&_(M&_%Y?R<.0R`(``%:+=@2`9'S[
-M@WQT`'0)BUQT@W\,`'4%*\!>R<.+1%"+5%(A1&`A5&*+1%2+5%8A1&0A5&:+
-M1%B+5%HA1&@A5&J+1&(+1&!U$(M$9@M$9'4(BT1J"T1H=+^-1&`>4&H`:`]A
-M_W1Z_W1XBUQT_U<,@\0,*\")1&*)1&")1&:)1&2)1&J)1&CKD)#("```5U;_
-M=@;_=@3HY?B#Q`2+\`OV=0BX__]>7\G#D/9$?`%T\HN$K`")1OZ+A*X`B4;Z
-MBT;^.4;Z=PR+/C0%*_@#?OKK!I"+?OHK^$\Y1OIU!8"D@`"`H30%*\=`.T0F
-M<P6`I(``]XM<=HM'#(M7#B-$#"-4#@O0=!]7C4;^%E#_=@S_=@K_=@A6BUQV
-M_U<R@\0.B48,Z<T`BT8,.\=^`HO'B48,"\!_`^FZ`*$T!2M&_CM&#'X#BT8,
-MB4;X"\!U$6B``_\V+@7_-MH`Z!KJ@\0&BT;X.08T!7<1:($#_S8N!?\VV@#H
-M`.J#Q`;_=OB+A*@`BY2J``-&_E)0_W8*_W8(Z,/O@\0*BT8,.4;X?1TK1OA0
-M_[2J`/^TJ`"+1@B+5@H#1OA24.B>[X/$"H-^#`!^,^CM\HE&_(M&#)G$7'`F
-M`4<$)A%7!O]V_.C9\H/$`HM&#`%&_HM&_CD&-`5W!J$T!2E&_HM&_CD&-`5W
-M$6B6`_\V+@7_-MH`Z&SI@\0&Z*#RB4;\BT;^B82L`(N$K@")1OJ+1OXY1OIW
-M!XOX*W[ZZPF+/C0%*W[Z`_@Y?"1S!8"D@`#[_W;\Z&OR@\0":O]J`6K_5HM<
-M=O]7&H/$"(M&#%Y?R<.0R`P``%=6Q%X,)HL'B4;VBUX$BX>@`(N7H@")1OJ)
-M5OR+1@HK1A`;R2/!`T80B480BU]VBP?WT(M>!"-'"(E&^(I&^"4(`#T!`!O`
-M0(E&_BOVZSR0BD;TF"T*`'0'+0,`=!KK"O9&^!!T!,9&]`V*1O3$7@;_1@8F
-MB`?K$O9&^"!T!L9&]`KKYO9&^$!TX$8Y=A!^0L1>^HM^]B:*`8A&]/]&]HM&
-M]CD&,@5W!<=&]@``@'[T('R=@'[T?G^7@W[^`'2K@'[T07RE@'[T6G^?@$;T
-M(.N9D(M&]L1>#":)!XM&$%Y?R</("@``5U;_=@;_=@3H)_:#Q`2+\`OV=0BX
-M__]>7\G#D/9$?`%T\HN$I`")1OZ+A*8`B4;ZZ"_QB4;\BT;^.4;Z=PB+^"M^
-M^NL*D(OX*W[Z`SXR!8E^]CE\*',%@*2!`/N+7':+1PB+5PHC1`@C5`H+T'0=
-M5XU&^A90_W8,_W8*_W8(5NB4_H/$#HE&#.FR`)"+1@P[QWX"B\>)1@P+P'\#
-MZ9X`H3(%*T;Z.T8,?@.+1@R)1O@+P'41:#0$_S8N!?\VV@#H9N>#Q`:+1O@Y
-M!C(%=Q%H-03_-BX%_S;:`.A,YX/$!O]V^/]V"O]V"(N$H`"+E*(``T;Z4E#H
-M#^V#Q`J+1O@Y1@Q^((M&#"M&^%"+1@B+5@H#1OA24/^TH@#_M*``Z.?L@\0*
-M@WX,`'X4*WX,BT8,`4;ZH3(%.4;Z<@,I1OJA,@4Y1OIR$6A*!/\V+@7_-MH`
-MZ-7F@\0&BT;ZB82F`(N$I`")1OXY1OIW!XOX*W[ZZPF+^"M^^@,^,@4Y1OIU
-M#(!D?OV`I($`@.L.D(M&]CE&#'\%@*2!`/XY?"IV!8"D@0#WQX20````.7PH
-M<A;_=OSHM.^#Q`)6Z%<!@\0"Z*/OB4;\BT8,"\!]`BO`F<1<<"8!1P@F$5<*
-M_W;\Z(GO@\0"BT8,7E_)PY#(!@``5HMV!.AO[XE&_HM$&(M4&C%&!C%6"(M$
-M%(M4%C%&"C%6#/9$?@1U`^F'`+@$`(E&_(E&^O9&!A!T$8I$&"40`#T!`!O`
-M)0(`B4;\]D8&0'01BD08)4``/0$`&\`E`@")1OJ#?OP$=0:#?OH$=!2`3OH(
-M_W;\_W;Z5HM<=O]7'H/$!O9&!@)T;O]V_NCL[H/$`HI$&"4"`#T!`!O`]]A0
-M5HM<=O]7*H/$!.C*[HE&_NM%D(I&!B40`#T!`!O`)0(`0$")1OR*1@8E0``]
-M`0`;P"4"`$!`B4;Z/00`=04Y1OQT%(!.^@C_=OS_=OI6BUQV_U<>@\0&]D8*
-M@'0;BD04)8``/0$`&\`E`@!0:@Q6BUQV_U<>@\0&_W;^Z%WN@\0"7LG#D,@&
-M``!6BW8$Z$?NB4;^]D1^!'1A]D08`G094.@X[H/$`FH!5HM<=O]7*H/$!.@B
-M[HE&_HI$&"40`#T!`!O`)0(`0$")1OR*1!@E0``]`0`;P"4"`$!`@W[\!'4%
-M/00`=!#_=OP,"%!6BUQV_U<>@\0&@&1^^_]V_NC;[8/$`E[)PY#(`@``5HMV
-M!`OV=0/IJ0"+1@@+1@9U`^F>`%:+7';_5R"#Q`)6Z)X+@\0"Z*+MB4;^BT1$
-MBU1&Q%X&)HE';":)5VZ+1$R+5$[$7@8FB4=H)HE7:O\V-`6-A*@`4.@3#8/$
-M!)G$7@8FB4<,)HE7#O\V,@6-A*``4.CX#(/$!)G$7@8FB4<0)HE7$O]V_NA%
-M[8/$`L1>!B:+1PPFBU<.)BE'!"895P;$7@8FBT<0)HM7$B8!1P@F$5<*7LG#
-MD,@0``!75HM>!M'C`UX$BT<8B4;^4/]V!(O8BU\8_U<4@\0$BU[^BT<(B4;Z
-MQT;P```+P'\#Z<<`H3(%]V;Z!1``4.B#X8/$`HE&]HE6^*$T!?=F^@40`%#H
-M;>&#Q`*)1O*)5O2+1O:+7OZ)AXP`C)^.`(M&\HM>_HF'D`",GY(`BT;X"T;V
-M=`B+1O0+1O)U!<=&\/__BT;VBU;X@.0/BL2*XHK6*O;1ZM'8T>K1V-'JT=C1
-MZM'8`T;V@](`!0\`@](`)/")1O:)5OB+1O*+5O2`Y`^*Q(KBBM8J]M'JT=C1
-MZM'8T>K1V-'JT=@#1O*#T@`%#P"#T@`D\(E&\HE6]"O_Z9L`:G2+W\'C`@->
-M_O]W3O]W3.C6Z(/$!HM>!(L'B82"`(M&!HF$A`")O(@`BUX$BP>`S/^+T(I&
-M!BKDB]J9BO**U(K@*L"+R`O:B\<JY)D+R`O:B4QXB5QZQT1\"`"+W\'C`@->
-M_HM'3(M73HE$<(E4<HM>_HM'&(E$=HM>_O9'#`AU!(!,?"!6_W;^_W8$BUQV
-M_U<6@\0&"\!]:$>+7OXY?PA_`^GR`&DV3@6P`('&/@[_!DX%B]_1XP->_HEW
-M+(O?P>,"`U[^BT=."T=,=`/I+_]J=.CNWX/$`HO?P>,"`U[^B4=,B5=.B]_!
-MXP(#7OZ+1TX+1TQT`^D&_\=$?`"`ZYF0@W[P`'SRBX2J``N$J`!U.XM&\HM6
-M]-'JT=C1ZM'8T>K1V-'JT=B*3O*#X0^)C*@`B82J`,>$K````,>$K@```*$T
-M!2O2`4;R$5;TBX2B``N$H`!T`^E`_XM&]HM6^-'JT=C1ZM'8T>K1V-'JT=B*
-M3O:#X0^)C*``B82B`,>$I````,>$I@```*$R!2O2`4;V$5;XZ0+_H3(%N04`
-M*]+W\:/B!Z$R!<'@`BO2]_&C*CNA,@4K!BH[/1``=@BA,@4M$`#K!:$R!4A(
-MHVP[H2H[.09L.W,&H6P[HRH[H3(%T>BCC`BA-`4KTO?QH^0'H30%P>`"*]+W
-M\:-N.RO`7E_)P\@6``!75J'0!_\&T`<+P'0'*\!>7\G#D,=&]#XZBT;THXXZ
-MB]C'!P``BU[TQT<"%P"+7O3'1PX``(M>],='$(``BU[TQT<2``"+7O3'1Q0`
-M`(M>],='"```QT;\@`#'1O`(`L=&\@``QT;^``#&1O@`*__IG0&*1OHD!SI&
-M^'0#Z:P!:?>T`('&G`C'!```BT;^B40"BD;Z)7\`B40,BT;\B40<BT;\B40>
-MBU[TBU\(T>,#7O2)=RCV1OI`=&['1`H"`,=$&(X'QT0:H&N*1OP$!(M>](M?
-M"`->](A'2(M>]/]'"/9&^B!T-L=$"!``BT;\!0@`B40>BD;\!`R+7O2+7P@#
-M7O2(1TB+7O2+7PC1XP->](EW*(M>]/]'".L&D,=$"`@`@T;\$.G&`,=$"@$`
-MQT08.`;'1!KJ3L=$#D!XQT00?0&*1OP$!(M>](M?"`->](A'2(M>]/]'"/9&
-M^B!T=HM&_`4&`%#H+>6#Q`**3OHJ[3O!=02`3`R`QT0($`"+1OP%$`")1""+
-M1OP%$`")1"*#1OP0BD;\!`2+7O2+7P@#7O2(1TB+7O2+7PC1XP->](EW*(M>
-M]/]'"(I>^"K_`U[PCD;RBD0,)H@'@T;\$(!&^`+K'I#'1`@(`(-&_!"*7O@J
-M_P->\(Y&\HI$#":(!_Y&^(M>]/]'!(M>_M'C`U[TB7<8BT0(BU[T`4<&_T;^
-M1X/_"'T7BT;\!00`4.AWY(/$`HA&^CS_=`/I1_['!C(%``#'!C0%``"+7O2#
-M?P8`=%N+1P;1X&H`4*&6"(L6F`AK3P9X*\&#V@!K3P0H*\&#V@!24.C:0HE&
-MZHE6[`O2=04]\`]V"<<&,@7P#^L8D`O2=0X]0`!S"<<&,@5``.L&D"3PHS(%
-MH3(%HS0%*__K`I!'BU[T.7\$=@Q74^A(^H/$!`O`?>N+7O2`3PP#BU[TBU\8
-MBT<LB4;JB]C'!X`EQT<"``"+7NK&1S`(BU[JQD<R`(M>ZL9',0"+7NHKP(E'
-M&HE'&%!0_W;JZ,4#@\0&:@%J`/]VZHM>ZHM?=O]7&(/$!L=&ZC0`QT;L``"A
-M!@#$7NHFQP=0:R:)1P+_!C`%Z=S\D"O`PY#("@``5U:ACCJ)1O@+P'4&*\!>
-M7\G#H5`%B4;^QT;V``#IK@#V1$6`=`B`9$5_@$QE@/9$?@)T!U;H^`&#Q`*`
-MO)H``'0*5HM<=O]7(H/$`O9$?`9T'?9$?`)T"E:+7';_5RB#Q`+V1'P$=`=6
-MZ+3Q@\0"1XM>_#E_"'Y0B]_1XP->_(MW+`OV=.GV1'P!=./W1'X80'0'5NC+
-M`(/$`O9$?RYT!U;H>@"#Q`+V1'\0=0/I</_V1$6`=`/I=?^`3$6`@$QE@(!,
-M?`3I9O__1O[_1O:+1O:+7O@Y1P1^)8M&_CE'!'\%QT;^``"+7O[1XP->^(M'
-M&(E&_`O`=-`K_^ES_Y#HS^6#/E`%"'P(QP90!0``ZP3_!E`%4.B\Y8/$`NGN
-M_L@$``!6BW8$BF1_)0`NB4;^@&1_T?9&_P)T!(!,9A#V1O\$=`2`3&8@]D;_
-M"'0$@$QF0/9&_R!T!(!,9H"`3'P$7LG#R`P``%=6BW8$]D1^0'07BH2?`/Z,
-MGP`*P'0'*\!>7\G#D(!D?K_V1'X(=3SV1']`=!V-1OH64%:+7';_5S"#Q`;V
-M1OH(=0B`9'^_@$Q^$/9$?A!TQH!,9`*`3'P$@*2``("`9'[OZ[.+A*P`B4;^
-MBX2N`(E&]CE&_G('BW[^*_CK"8M^_BOX`SXT!3E\)'(8]H2```1UA(",@``$
-M@$QD!(!,?`3I=/^0.7PF=@/I:__V1%0(=0/I8O_VA(``"'0#Z5C_@(R```B`
-M3&0(Z]+("```5U:+=@2+A*0`B4;^BX2F`(E&^HM&_CE&^G<'B_@K?OKK"8L^
-M,@4K?OH#^(O'*X20`/:$@0`!=1XYA(X`<PLY?")V!O9$9H!T#8",@0`!@$QE
-M`8!,?`0Y?"IW&?9$50AT,O:$@0`(=2N`C($`"(!,90CK')`Y?"AR&O9$501T
-M%/:$@0`$=0V`C($`!(!,902`3'P$B;R0`"O`7E_)PY#(!```5U:+=@2+?@;H
-M[^.)1OSWQP(`=#7$7'`F@T<<`2:#5QX`_S8T!8V$J`!0Z&\#@\0$F<1<<"8I
-M1P0F&5<&BX2L`(F$K@"`I(``P%=6BUQV_U<D@\0$]\<!`'1(Q%QP)H-'(`$F
-M@U<B`/\V,@6-A*``4.@I`X/$!)G$7'`F`4<()A%7"HN$I`")A*8`@*2!`,"`
-M9'[]_W;\Z&7C@\0"5N@(]>L&_W;\Z%;C@\0"7E_)PY#(!@``5U:+=@2+1@@+
-M1@9U!HEV!HQ>".@PXXE&_L1>!B:#?R0`=`FA-`4F.4<D<@>AY`<FB4<DQ%X&
-M)H-_)@!T":$T!28Y1R9R!Z%N.R:)1R;$7@8F@W\H`'0)H3(%)CE'*'8'H>('
-M)HE'*,1>!B:#?RH`=`FA,@4F.4<J<@>A*CLFB4<JQ%X&)H-_+`!T":$R!28Y
-M1RQR!Z%L.R:)1RS$7@8F]D<4`70%)H!/&!#$7@8F]D<4`G0%)H!/&"#_=O[H
-MB^*#Q`)J`&C0!\1>!B;_=P(F_S?HJ#V)A(X`BT8("T8&=0HKP(E&_(E&^NLR
-MBT08BU0:B4;ZB5;\Z$WBB4;^BT8&BU8(5AZ+_HOP'@>.VKDB`/.E'U[_=O[H
-M,>*#Q`+$7@8F_W<6)O]W%/]V_/]V^E:+7';_5QR#Q`I>7\G#D,@&``!75HMV
-M!(U\1"O`B44"B07_-C0%C82H`%#HC0&#Q`2)1OK_-C(%C82@`%#H>P&#Q`2)
-M1OP>5U:+7';_5RZ#Q`;V1'X(=`6X`0#K`[@"`"O2"07V1'\!=`6X@`#K`BO`
-M"07V10('=`.`#4"+1OHY1"1R`X`-!(M&^CE$)G<#@`T(H30%*T;Z2'4#@`T0
-M]D1^`G0%N``!ZP.X``()!?9$?@1T!;@`0.L"*\`)!?9$?Q!T!K@`@.L#D"O`
-M"06+1OPY1"AR!(!-`02+1OPY1"IW!(!-`0B+1OPY1"QW!(!-`2"A,@4K1OQ(
-M=02`30$07E_)PY#(`@``5HMV!(M<=HM'$@,&-`5(Q%X&)HE'!*$R!4C$7@8F
-MB4<&_S8T!8V$J`!0Z(<`@\0$Q%X&)HD'_S8R!8V$H`!0Z'(`@\0$Q%X&)HE'
-M`HM&!HM6"`4(`%)05HM<=O]7+H/$!L1>!B;'1P@``":#9PH!]D1^"'0%N`$`
-MZP.X`@`KTL1>!B8)1PCV1'X"=`:X``'K!)"X``+$7@8F"4<(]D1^!'0&N`!`
-MZP.0*\#$7@8F"4<(7LG#58OL5U:+7@2+=P2+?P8[_G<(B\8KQUY?R<.+1@8K
-MQP/&7E_)PY#(!@``5J&..HE&^@O`=0>X__]>R<.0BU[ZBT<8B4;^"\!T[(-^
-M!`!\YHM&!(M>_CE'"';;B_#1YHM`+`O`=-"#/C`%`'3)_W8&4(O8BU]V_U<T
-M@\0$7LG#````````````````B]R+7P*+EXH`BX>,`(O<`T<$[H/"".S#B]R+
-M7P*+EXH`BX>,`(O<`T<$[HM'!H/"".[#B]R+7P*+EXH`BX>,`(O<`T<$[H/"
-M".P[1P9T"(M'!NZX`0##,\##@^H$L.?N@\(([(K@@^H(L&?N@\(([`K$J`%U
-M"Z@"=0VH!'4&Z7@<Z:<!Z<H"@\($,\#LB]B!X_@`P>L"BWDL)`<\`G55]T5\
-M`@!U7,2%J`"+G:P`B[6N`#O>=')W!(L>-`6#Z@R*A8P`!&/N@\((N`P`B\LK
-MSCO(<@*+R"O!\R9N._-S)HFUK@"#Z@B*A8P`!&#N@\(([NG_&V!0:(4%Z)[5
-M@\0$8>OOZV20BYVL`#OS=`8S]COS=;F#Z@B*A8P`!`;N@\((["3Y#`+NZ[>+
-ME8H`BH6,``0&[H/"".RH!'0')/D,`N[KH23Y[H-E?O>#37X0]T44@`!U`NN-
-M4K@``%!J!%?H91.#Q`9:Z7O_BH6;`#P$='0\`'415^C^%H/$`HN5B@"#P@CI
-M7O]7Z*L6@\0"BH6;`#P!=`\\`G0X/`-T7<:%FP``Z]&+E8H`BH6,``1C[H/"
-M"+``[K"![K``[K""[HJ%G`#NL`#NL(/NQH6;``#I$_^+E8H`BH6,``1C[H/"
-M"+``[K"![HN5B@"*A8P`!`;N@\((["3Y[NGJ_HN5B@"*A8P`!&/N@\((L`#N
-ML(/NQH6;``#ISOX\!W4#Z1,!8%!H8`7H=M2#Q`1AZ:,`@\(",\#LB]B!X_@`
-MP>L"BWDL)`<\`W72,\F+E8H`BH6,``0.[H/"".R*R`K)=0/K8Y"+M:0`BY6F
-M`#OR<@>+QBO"ZPB0*]:A,@4KP@/!.T4J<U/$A:``BY6*`(J%C``$8NZ#P@B*
-MI9<`BYVF`(/[`'4$BQXR!4OL._-T,2:(!$8[-C(%=",*Y'5"XNN)M:0`@TU^
-M`HN5B@"*A8P`!&#N@\(([NDB&NM)D#/VZ]E6!L1U<":#1#`!)H-4,@`F@T0T
-M`2:#5#8`!U[BG^O`]L0"=`HZ13MUM+``ZP60//]UJSOS=,HFB`1&.S8R!76=
-M,_;KF?=%?@0`=0E15^B&%X/$`EGI3_^+E8H`BH6,``1B[H/"".PSVXK8,\#L
-M4U!7Z#<&@\0&Z6[_@\(&,\#LB]B!X_@`P>L"BWDL)`<\`70/8%!HJ@7H*=.#
-MQ`1AZR.0BY6*`(J%C``$3.Z#P@CL"(6:`(N5B@"*A8P`!&#N@\(([NE6&0#(
-M#```5U:+7@:+1PC!Z`*)1O9J`&C(`(M'#HM7$(K$BN**UBKVT>K1V%)0Z#XW
-MB$;^QT;Z``#K=I"01H'^$"=])(M&]`5``%#_=OSH:=B#Q`2+1OP%"`!0Z&;8
-M@\0"B$;X"L!TU8'^$"=T#X!^^$!R"8!^^&!W`^FH`&@=`6C;!?\V#@'_-A0!
-MZ''2@\0(_W;ZBUX&_W<"_S=HY`7H7=*#Q`AH%P;H5-*#Q`+_1OJ+1OHY1O9_
-M`^G?`(OXT>>+7@:+01R)1OR+7OK1XXN''`:)1O2+?OK1YXM>!HE!)(M&]`5`
-M`%#_=OSHS=>#Q`1J`(M&_`4(`%#HOM>#Q`2+1O0%!0!0_W;\Z*[7@\0$:($`
-MBT;\!0@`4.B>UX/$!"OVZ1K_D(I.^K@!`-/@BUX&"4<6BT;T!4L`4/]V_.AZ
-MUX/$!&H`BT;\!0@`4.AKUX/$!(M&]`5^`%#_=OSH6]>#Q`2*1OXJY%"+1OP%
-M"`!0Z$C7@\0$*_;K`4:#_@)\`^DL_XM^^M'G`_[!YP*+7@8KP(F!E@")@90`
-MZ]Z+7@:`3Q(!*\!>7\G#D,@&``!6QT;\``"+7@B+AX@`B4;ZF3/"*\+!^`(S
-MPBO"B4;^B_#1YHM>!HM`)(M>"(F'C`"+=O[1YHM>!HM`'(M>"(F'B@"+1OK!
-M^`.+7@8#1P:+7@B)AX8`BUX&BD[^N`$`T^"%1Q9U#XM>",='?`"`QT;\___K
-M/FI`_W8(Z#SZ@\0$F8M>",1?<":)1W`FB5=RBD;Z)0,`4&IH_W8(Z#/Z@\0&
-MBT;ZP>`#4&H8_W8(Z"'Z@\0&_P8B.XM&_%[)P\@F``!6Q%X,)HLWBUX$BX>H
-M`(N7J@")1OR)5OZA-`6)1MZ+1PR+5PZ)1N2)5N:*AYT`*N2)1N#'1O0``,=&
-MZ@``BD;D)0$`/0$`&\!`B4;V]D;E@'02]D;F`74,QD;P`,=&Z`4`ZQB0]D;E
-M@'4&]D;F`70&QD;P?^OFQT;H`P#'1NH``.L)_TX0_T;@_T;JBT8*.4;J?`/I
-MF@+$7@;_1@8FB@>(1MH\('PR/'Y_+H-^$`!U`^E]`H-^]@!T##QA?`@\>G\$
-M@&[:((I&VL1>_":(`$8Y=MYWKBOVZZJ+1N")1N+'1MP``,=&\@``BT;HB4;X
-MBD;PB$;ZBD;:F#T*`'1W?@/IA`$+P'4#Z6L!+0@`=`9(='_K&I#V1N1`=`K'
-M1MP*`,=&\@$`@W[@`'X#_T[@QT;L``#V1O@!=`/_1NSV1O@"=`2#1NP#]D;X
-M!'0/@'[Z`'4#T6;RBT;R`4;LBT80.4;L?P/I/0&+1N*)1N#'1A```.F]`9#V
-M1N02=`/IJP#V1N0@=*K'1MP4`,=&\@(`ZYZ0]D;E`G0BBD;@)0<`+0@`]]C1
-M^(E&W`O`?@:X`@#K`Y`KP(E&\NLPD/9&Y01T#,=&W!0`QT;R`@#K'?9&Y0AT
-M%\=&^`0`BD;@)0<`+0@`]]B)1O+&1OH@BT;@#`=`B4;@Z3K_D/9&Y(!U`^DP
-M_\=&W/\`QT;R___I(__V1N4!Z^CV1N0$=`/I9/_V1N0(=`F#?N``=0/I8/[V
-M1N40=!J+1N#1^`4*`#T4`'T#N!0`B4;<QT;R`@#K'O9&Y2!T",=&W!0`Z^R0
-M]D;E0'0*QT;<'@#'1O($`,=&X```Z;_^_T;@Z;G^QD;Z`,=&\@$`QT;X!`#I
-MJ/Z0+0L`=0/I9O](=0/I=O](=0/I=O\M#@!TS^F+_O9&^`%T$8I&VL1>_":(
-M`$8Y=MYW`BOV@W[<`'XU]D;X`G0OQ%[\)L8``$8Y=MYW`BOVQ%[\)L8`@D8Y
-M=MYW`BOVBD;<Q%[\)H@`1CEVWG<"*_:#?O(`?BSV1O@$=":+1O)(`4;TZP20
-M_T[R@W[R`'X3BD;ZQ%[\)H@`1CEVWG?H*_;KY(M&["E&$.E9_9#HF=:)1NZ+
-M1NH#1O29BUX$Q%]P)@%'!"815P;_=N[H?]:#Q`+H==:)1NZ*1N"+7@2(AYT`
-MQ%X,)HDW_W;NZ&#6@\0"BT;J7LG#D,@*``!75HMV"/?&`0!T%XM>!,1?<":#
-M1R0!)H-7)@"+7@2`3W\"]\8$`'07BUX$Q%]P)H-'+`$F@U<N`(M>!(!/?P3W
-MQ@(`=!>+7@3$7W`F@T<H`2:#5RH`BUX$@$]_"/?&"`!T%XM>!,1?<":#1V0!
-M)H-79@"+7@2`3W\0]\9P`'1TB\8D<#P@=1"+7@3$7W`F@T=$`2:#5T8`B\8D
-M<#P0=3^+7@3$7W`F@T=``2:#5T(`BUX$]D=^('0F@&=^WXM>!(!/?@AJ!O]V
-M!.BO]8/$!"3]#`10:@;_=@3HM_6#Q`:+QB1P/'!U*(M>!/9'"@AT'X!/?R"+
-M7@2*AY0`*N3WT"/PBH>5`"KDA<9T&NL2D)"+7@3$7W`F@T<(`2:#5PH`*\!>
-M7\G#BX>@`(N7H@")1OR)5OZ+OZ0`BX>F`#O'=P@KQP,&,@7K`BO'B4;X/0(`
-M?2#$7W`F@T<P`2:#5S(`BUX$Q%]P)H-'-`$F@U<V`.NOD(J'E@`JY(7&=0/I
-MCP"#?O@%?,WVAY<``70BQ%[\)L8!_T<Y/C(%=P(K_\1>_";&`0!'.3XR!7=]
-M*__K>8I'.\1>_":(`4<Y/C(%=P(K_\1>_";&`0%'.3XR!7<"*__$7OPFQ@$!
-M]\8!`'0'Q%[\)H`)`O?&!`!T!\1>_":`"03WQ@(`=`?$7OPF@`D(]\8(`'2?
-MQ%[\)H`)$.N6D/?&#P!T$_?&"`!T!HI'..L$D(I'-YB)1@:*1@;$7OPFB`%'
-M.3XR!7<"*_^+7@2)OZ0`BUX$@$]^`NG6_L@N``!75HMV!(O^@[R"``AR`^GT
-M!8N<@@#1XXN'CCH+P'4#Z>,%BYR$`-'C`]B+1QB)1OX+P'4#Z<X%*L"(1N"(
-M1N2(1NR(1O"(1O*(1M:(1MB(1OJ(1OR(1NB(1MKV10D0=`2`3MH']D4(@'0$
-M@$[:",9&^`#V10D@=`2`3O@']D4)`70$@$[X"/9%"@AT!H!.VG#K"O9%"@)T
-M"(!.^'"`3NR`QD;T`/9%"4!T!(!.]`?V10D"=`2`3O0(]D44$'0$@$[P$/9%
-M%"!T!(!.\`2*13(JY$AT#$AT*4AT+$AT+^L%D(!.\L"`?3$"=2B`3O((@'TP
-M!70Z@'TP!G4D@$[R`>LN@$[R0.O>@$[RH.O8@$[R(.O2@'TQ`776@$[R!.O0
-M@'TP!W4&@$[R`NL$@$[R`^C1THE&ZO9%%`AT!H!E&%_K"O9%&"!T!(!.\`+V
-M110$=`2`91BO_W;JZ*S2@\0"]D48`702@$[P0(!.[!#V11@$=`2`3O"`]D44
-M0'4C]D18`G0=]D44"'0+@$[\0(!.^D#K"9"`3OR`@$[Z@(!.V(#V110(=1+V
-M1%@(=`R`3OQ`@$[Z0(!.V(#V1'P@=";V1%@0=`R`3OP0@$[Z$(!.V(#V1%@@
-M="&`3OP@@$[Z((!.V(#K$^@=THE&ZH!E&?S_=NKH%-*#Q`+V1MB`=02`3M:`
-M]D4(!'0$@$[@@/9%"$!T!(!.Y(#V10@@=`2`3N1`]D4($'0$@$[D(/9%#`)T
-M!(!.X`+V10P$=`2`3N`!QD;N`/9%"`)U%H!^]`!T$/9%"A!T!;`"ZP.0L`&(
-M1N[&1M[_@WT"`'4%@ST`=&2#?0(#=UYR!H$]`(1W5O]U`O\UBU[^_W<0_W<.
-MZ*\LB4;2B5;4QT;J``#K`_]&ZH-^Z@5]+XM>ZM'CBX<D!IE24(M>ZM'CBX<N
-M!ID#1M(35M124.AX+(E&W#T``7/.BD;JB$;>@'[>_W4EZ"O1B4;J*\")10*)
-M!8E%!HE%!/]VZN@9T8/$`L9&W@#'1MP``.@&T8E&ZH-](@!U&XM%`@L%=`YJ
-M`&H*_W4"_S7H("SK`[@!`(E%(J&,"#E%(G8#B44B@WT@`'4%QT4@"@#_=NKH
-MRM"#Q`**13J(1O8*P'4$QD;V"(!^]@QV!,9&]@R*1O8JY#E%(G,&BD4BB$;V
-MBD;V"$;L/`QS`_Y&]H%](/L$<@?&1NC_ZPZ0BT4@N04`*]+W\8A&Z/9%"`%T
-M!X!.UA#K!9"`3M@0BT4,BU4.).&#X@$+T'0$@$[P(/]V#/]V"O]V"/]V!E;H
-MQ>"#Q`KH.=")1NJ*1O8JY(F$D@"*1MJ(A)0`BD;XB(25`(I&](B$E@"*1NZ(
-MA)<`BH2(`"4#`%!J:%;H1_"#Q`9J!E;H)O"#Q`0(1MB*1M;VT"!&V&H`:@96
-MZ"CP@\0&QD;F`(I&\BKD4&H(5N@P\(/$!@O`=`2`3N9"BD;P*N10:@E6Z!GP
-M@\0&"\!T!(!.YD2*1NPJY%!J"E;H`O"#Q`8+P'0$@$[F2(I&Y"KD4&H>5NCK
-M[X/$!HI&X"KD4&H?5NC<[X/$!FH55NB@[X/$!"4/``I&_%!J%5;HJ.^#Q`:*
-M1OHJY%!J%E;HM.^#Q`:*1N@JY%!J(5;HI>^#Q`:+10(+!70VBD;>*N10:G96
-MZ(_O@\0&_W;<:G)6Z(/O@\0&BD;>*N10:GQ6Z'3O@\0&_W;<:GA6Z&CO@\0&
-MBD4VF%!J&E;H6N^#Q`:*13684&H;5NA,[X/$!HI%-)A0:AQ6Z#[O@\0&BD4S
-MF%!J'5;H,.^#Q`;V10H(=!:*13F84&HB5N@<[X/$!HI%.9A0ZPZ0:@!J(E;H
-M">^#Q`9J`&HC5NC^[H/$!H!^Y@!T%E;H$`F#Q`**1N8JY%!J!5;HQ^Z#Q`;V
-M11@!=1CV1@8!=!)6Z.X(@\0":AAJ!5;HJ>Z#Q`;V1'X!=![V10@!=!A6Z-`(
-M@\0":A%J!5;HB^Z#Q`:`9'[^ZR+V1'X!=1SV10@!=196Z*P(@\0":A)J!5;H
-M9^Z#Q`:`3'X!5NB6"(/$`HI&V"KD4&H&5NAH[H/$!O]VZN@$SH/$`EY?R<.0
-MR`(``%=6BW8$BWX&Z.G-B4;^BH2(`"4#`%!J:%;H'.Z#Q`96Z$\(@\0""_]T
-M&FHC:@56Z`;N@\0&Q%QP)H-'.`$F@U<Z`.L8:B1J!5;H[.V#Q`;$7'`F@T<\
-M`2:#5SX`_W;^Z);-@\0"Z(S-B4;^Q%QP)H-'!`$F@U<&`/]V_NAZS8/$`EY?
-MR<.0R`(``%=6BW8$BWX&"_]T%H!D?M]J`6K_5NA"!X/$!FK_:@'K!9!J_VH`
-M:O]6Z#0&@\0(7E_)PY#(#@``5U:+=@2+?@:+A*``BY2B`(E&_(E6_HN$I`")
-M1O*+A*8`B4;VBT;R.4;V=PR+1O8K1O(#!C(%ZP:+1O8K1O(]`P!]'\1<<":#
-M1S`!)H-7,@#$7'`F@T<T`2:#5S8`7E_)PY"*1#O$7OP#7O(FB`>A,@7_1O(Y
-M1O)R!<=&\@``Q%[\`U[R)L8'`Z$R!?]&\CE&\G(%QT;R``#&1OH`]\>``'0$
-M@$[Z"/?'0`!T!(!.^@'WQQ``=`2`3OH"]\<@`'0$@$[Z!/9$3`)T!(!.^H#V
-M1$P(=`2`3OH0]D1,$'0$@$[Z(/9$3"!T!(!.^D"*1OK$7OP#7O(FB`>A,@7_
-M1O(Y1O)R!<=&\@``BT;RB82D`(M$?H#D[PP"B41^7E_)P\@$``!6BW8$BH2:
-M`(A&_,:$F@``@$Q\!.CYRXE&_O9&_(!T$<1<<":#1T@!)H-72@"`3&@"]D;\
-M0'0J]D04"'03Q%QP)H-'2`$F@U=*`(!,:`+K$<1<<":#1U`!)H-74@"`3&@(
-M]D;\$'01Q%QP)H-'6`$F@U=:`(!,:!#V1OP@=!'$7'`F@T=<`2:#5UX`@$QH
-M(/]V_NA_RX/$`E;HL@&#Q`*+1$R+5$Z)1&R)5&[VA)<``G0-BD;\*N105N@>
-M_H/$!%[)PU6+[%=6BW8$BWX&]\<"`'0KBH2(`"4#`%!J:%;H<^N#Q`96Z*8%
-M@\0":((`:@56Z&#K@\0&5NB3!8/$`EY?R</("@``5U:+=@0JP(A&^HA&_/9&
-M!@AU!>CTRHOXBH2(`"4#`%!J:%;H*.N#Q`;V1@@$=`/IC`#V1!0$=`/I@P"*
-M1@@E`0`]`0`;P"4(``4(`/9&"`)T"/?0(41\ZP20"41\]D1\&'45]D08$'0/
-M:A56Z,?J@\0$"X22`.L+:A56Z+CJ@\0$)/!0:A56Z,3J@\0&]D8(`G0/]D1\
-M&'4)@$[\!&H"ZP>0@$[Z!&K]:FU6Z*#J@\0&Q%QP)H-'5`$F@U=6`/9&!@1U
-M5_9$%`1T#,=&]FT`QT;X`@#K"L=&]FP`QT;X`0#V1@8"=!2`3OP!_W;X_W;V
-M5NA:ZH/$!NL5D(M&^/?04/]V]E;H1^J#Q`:`3OH!Q%QP)H-'3`$F@U=.`(I&
-M^BKD]]"9(T1,(U1.BD[\*NT+P8E$3(E43O9&!@AU!U?HSLF#Q`)>7\G#D,@,
-M``!6BW8$BYR"`-'CBX>..HE&]NBJR8E&^(J$B``E`P!0:FA6Z-WI@\0&:FQ6
-MZ+SI@\0$B$;T:FU6Z+#I@\0$B$;Z_W;XZ'S)@\0"BD1,)00`B4;\QT;^``#H
-M9,F)1OCV1!0(=!&`3OP(]D040'4L]D;T0.LDD/9&]$!T!(!._`B+7O:#?P(4
-M=0:#?PH&=`SV1!1`=0;V1O2`=`2`3OP"]D04!'0']D;Z`NL5D/9&^@)T!H!.
-M_`3K!(!F_/OV1O0!=`2`3OP!]D1\('06]D;T$'0$@$[\$/9&]"!T"H!._"#K
-M!(!._!"+1OR+5OZ)1$R)5$[_=OCHS,B#Q`)>R</(!@``5HMV!.BWR(E&_HJ$
-MB``E`P!0:FA6Z.KH@\0&:@M6Z,GH@\0$B$;Z:FQ6Z+WH@\0$B$;\_W;^Z(G(
-M@\0"Q%X&*\`FB4<")HD']D;Z!'0.]D;Z`G4(Q%X&)H!/`@'V1!@@=`[V1OQ`
-M=0C$7@8F@$\"!%[)PY!5B^Q6BW8$BD1^)0@`Q%X&)HD')L='`@``7LG#R`(`
-M`%=6BW8$BWX&Z!_(B4;^@$Q\`H/__W4-QH2;``+&A)P``.LLD(/__G4'QH2;
-M``/K[`O_?AO&A)L``;D%`(O'F??YB_@]_P!^`[C_`(B$G`#_=O[HV<>#Q`)J
-M_VH!:O]6Z+X`@\0(Z,+'B4;^@__^=`W$7'`F@T=@`2:#5V(`_W;^Z*O'@\0"
-M7E_)P\@"``!6BW8$:@E6Z+[G@\0$#"`JY%!J"5;HR.>#Q`96Z/L!@\0":D1J
-M!5;HMN>#Q`96Z.D!@\0"@$Q_`2O`7LG#D,@"``!6BW8$BT0,BU0.).&#X@$+
-MT'4P:@E6Z&WG@\0$)-\JY%!J"5;H=^>#Q`96Z*H!@\0":D1J!5;H9>>#Q`96
-MZ)@!@\0"@&1\_8!D?_XKP%[)P\@(``!75HMV!"K`B$;XB$;Z*\")1OR)1O[H
-M[L:+^(-^"@!U",9&^/\KP.L-@WX*`'X-@$[ZE;@!`(E&"(E&!H-^!@!U!X!.
-M^!#K"Y"#?@8`?@2`3OH0@WX(`'4.@$[X!H!._B"`3OP(ZQB#?@@`?A+V1'X@
-M=0R`3O@"@$[Z!(!._@A7Z(C&@\0"Z'[&B_B*A(@`)0,`4&IH5NBRYH/$!FH&
-M5NB1YH/$!(I.^/;1(L$(1OJ*1OHJY%!J!E;HD.:#Q`;V1!2`=!J#?@@`?!2#
-M?@@!]1O`)0(`4&H,5N@>^X/$!HM&_/?0(T1^"T;^B41^5^@;QH/$`EY?R<-5
-MB^Q75HMV!.@%QHOXBH2(`"4#`%!J:%;H.>:#Q`:#?@8`=1A6Z&8`@\0":A%J
-M!5;H(>:#Q`:`9'[^ZQR#?@8`?A96Z$@`@\0":A)J!5;H`^:#Q`:`3'X!@WX(
-M`'4,5N@L`(/$`FH4ZQ"0@WX(`'X25N@:`(/$`FH8:@56Z-7E@\0&5^B.Q8/$
-M`EY?R<.058OL5U:+=@0K_^L!1X'_Z`-]$6H%5NB5Y8/$!`O`=>Q>7\G#:&('
-M:&X&_S8.`?\V%`'H$[R#Q`C_M(@`_[2$`/^T@@!H=P;H_KN#Q`AHJ@;H];N#
-MQ`)>7\G#PY#("```5HMV!(M$&(M4&HE&_/9&_`)T-6H%5N@UY8/$!`O`=`/I
-MM@!J)&H%5N@[Y8/$!L1<<":#1SP!)H-7/@#$7'`F@T<$`2:#5P8`]D;\4'4#
-MZ80`]D;\$'0[]D04!'4U@$Q\$&H55NCGY(/$!"3P4&H55NCSY(/$!FK]:FU6
-MZ.CD@\0&@&1,^\1<<":#1U0!)H-75@#V1OQ`=#WV1!0$=`S'1OIM`,=&^`(`
-MZPK'1OIL`,=&^`$`BT;X]]!0_W;Z5NBEY(/$!H!D3/[$7'`F@T=,`2:#5TX`
-M@$Q^!%[)PU6+[%=6BW8$BWX&:+0':*P&_S8.`?\V%`'H\+J#Q`A75NCHNH/$
-M!&BU!NC?NH/$`EY?R</(!@``5U:+=@2#/B([`'4&*\!>7\G#Z/G#B4;\:FA6
-MZ!SD@\0$B$;^BH2(`"4#`%!J:%;H(.2#Q`9J`6K_5NC!_8/$!FH=5NCTXX/$
-M!(A&^BO_ZP%'@?\0)WT-:@56Z-WC@\0$"\!U[/]V!FH=5NCEXX/$!FHD:@56
-MZ-KC@\0&*__K`I!'@?\0)WT-:@56Z*WC@\0$"\!U[(-^!@IU+FH-:AU6Z+#C
-M@\0&:B1J!5;HI>.#Q`8K_^L!1X'_$"=]#6H%5NAYXX/$!`O`=>R*1OHJY%!J
-M'5;H?N.#Q`:*1OXJY%!J:%;H;^.#Q`;_=OSH)L.#Q`+I&O\``````````&`>
-M!BZ.'G`!Z`L`NB+_N`"`[P<?8<_\,]LSTHJ7ACKLJ(!T&8D>P`;1XXN_9CJ+
-M71K_XXL>P`;KX(L>P`9#.QY&.G+5PP``````````````@^H",\#N@\($[(O8
-M@^,']\((`'0#@\L(T>.+>2RH$'4'J`AU">L$D.GG`.E\`L2%J`"+G:P`B[6N
-M`#O>=%-W!(L>-`6#Z@2XC@#N@^H"N!``B\LKSCO(<@*+R"O!\R9N._-S!XFU
-MK@#I>/^+G:P`._-T!C/V._-UV(/"`HN%C``-``#N@^H"["7/_PT``.[KTXN5
-MB@"#P@*+A8P`#0``[H/J`NPE,``]``!T"NPES_\-``#NZ[*+E8H`@\("BX6,
-M``V"`.Z#Z@**A9X`)?[_B(6>`.Z#97[W@4U^`$#W112@`'4"ZX*Y_P#W110@
-M`'0#@^']]T44@`!T`X/A^X/"`HN%C``-A0#N@^H"["/![NE6_R48`#T8`'1N
-M,\F#Z@2PG>Z#Z@+LBLA!B[6D`,2%H`"+E8H`@\("L([N@^H",]N*G9<`BJ68
-M`(NMI@"#_0!U!(LN,@5-["+$"]MU-#OU='<FB`1&.S8R!71IXNF)M:0`@TU^
-M`HNUI`"+E:8`._)R=8O&*\+K=I!7Z*``@\0"Z^3WPP@`=`0\`'30]\,$`'0*
-M.D4Y=06!37X`(#OU="DFB`1&.S8R!74",_;WPP$`=`0\_W28]\,"`'2@.D4[
-M=9NP`.N),_;KDU8&Q'5P)H-$,`$F@U0R`":#1#0!)H-4-@`'7NEU_RO6H3(%
-M*\([12IS"O=%&`0`=1/IU_WW17X$`'4'5^@?#H/$`NOF]T5^@`!T!U?H+P^#
-MQ`+KW8O<BU\"5U:+^XN5B@"#P@*+A8P`#0$`[H/J`NPEW__NB[6,`(N5B@"#
-MP@*+Q@V!`.Z#Z@+LJ0$`="J+V(/"`HO&#8$`[H/J`K@D`.Z#P@*+Q@V#`.Z#
-MZ@+L4U!7Z%$6@\0&Z\"+E8H`@\("BX6,``T!`.Z#Z@+L#2``[EY?PU!7Z(,7
-M@\0$Z2[]`,@(``!6BUX&BT<(!00`P>@#B4;XQT;Z``#K!)#_1OJ+1OHY1OA_
-M`^GB`(OPT>:+7@:+0!R)1OYH@0!`0%#H3[R#Q`1H_`#_=O[H0[R#Q`1J#8M&
-M_D!`4.@UO(/$!/]V_N@VO(/$`@O`=#1HZP!HV@;_-@X!_S84`>A9MH/$"/]V
-M^HM>!O]W`O\W:.0&Z$6V@\0(:!@'Z#RV@\0"Z7[_BD[ZN`$`T^"+7@8)1Q9J
-M#XM&_D!`4.C8NX/$!&H&_W;^Z,V[@\0$:AV+1OY`0%#HO[N#Q`1H_P#_=O[H
-ML[N#Q`3'1OP``.L#_T;\@W[\`GP#Z2K_BW;ZT>8#=OS!Y@*+7@8KP(F`E@")
-M@)0`Z]J+7@:`3Q(!_P::""O`7LG#R`8``%;'1OP``(M>"(N'B`")1OJ9,\(K
-MPL'X`S/"*\*)1OZ+\-'FBUX&BT`<BUX(B8>*`(I&^B4'`,'@!(M>"(F'C`"+
-M7@:+1P:+7@B)AX8`BUX&BD[^N`$`T^"%1Q9U$XM>",='?`"`QT;\__^+1OQ>
-MR<.+7@C$7W`FQT=P`0`FQT=R``!J%&H"_W8(Z`87@\0&BT;\7LG#D,@$``!7
-M5HMV!"K`B$;^B$;\@WX&`'4'@$[^`>L+D(-^!@!^!(!._`&#?@@`=0:`3OX"
-MZPJ#?@@`?@2`3OP"Z!>^B_B*1O[VT"*$F0`*1OR(A)D`*N10:($`5NB?%H/$
-M!H-^!@!U!H!D?O[K"H-^!@!^!(!,?@%7Z.*]@\0"7E_)PY#("```5U:+=@3&
-M1O@`QD;Z`,=&_@``QT;\``"#?@8`=0>`3OI&ZPN0@WX&`'X$@$[X1H-^"`!U
-M"H!.^@&`3OX@ZQ2#?@@`?@[V1'X@=0B`3O@!@$[^"(-^"@!U"L9&^O^`3OPH
-MZPZ#?@H`?@B`3OC'@$[^".A?O8OXBH2>``I&^(I.^O;1(L&(A)X`*N10:((`
-M5NCE%8/$!HM&_/?0(T1^"T;^B41^@WX(`'4F]D04H'15BD04)8``/0$`&\`E
-M!`!0BD04)2``/0$`&\`E!`#K+I"#?@@`?B_V1!2@="F*1!0E@``]`0`;P"4"
-M`$!`4(I$%"4@`#T!`!O`)0(`0$!05NC""X/$!E?HS[R#Q`)>7\G#R`8``(M&
-M!@M&!'1NBT8$BU8&T>#1TM'@T=+1X-'2T>#1TM'@T=)24&CY%6H`Z,H7B4;\
-MB5;^:@!J9%)0Z%48"])U!3TR`'(6:@!J9/]V_O]V_.BE%XE&^HM&^LG#D%)J
-M9/]V_O]V_.B0%XE&^@O`=`[_3OJ+1OK)PY#'1OH``(M&^LG#58OLBT8$*](%
-M`0`3TE)0:@%H`,+H7Q?)PY#("```QT;X``#'1OH``.L#_T;Z@W[Z&'T=BT8$
-MBU8&BU[ZP>,".8<<!W7E.9<>!W7?N`$`R<.#?@8`=0:#?@0`='N#?@8.=W5R
-M!X%^!``0=VS_=@;_=@3H"/^#Q`10Z(7_@\0"BTX$BUX&*\@;VHE._(E>_@O;
-M?0KW7OR#5OX`]U[^BT;^"T;\="[_=O[_=OR+1@2+5@:+R(O:T>#1TM'@T=(#
-MP1/3T>#1TE)0Z*T6"])U!3W(`'(%QT;X`0"+1OC)P\@.``!6QT;\``#'1O@`
-M`(M&!IDSPBO"P?@#,\(KPHE&_HOPP>8#BUX$_["6`/^PE`#H;/Z#Q`2)1O:+
-M=O[!Y@.+7@3_L)H`_["8`.A2_H/$!(E&],=&^@``ZVR0F3/"*\+!^`,SPBO"
-M.T;^=5>+1@8Y1OIT3XMV^M'FBU@L_W<"_S?H&_Z#Q`2)1O*+=O[!Y@.+7@2+
-M@)8`"X"4`'0+BT;V.4;R=0/_1OR+=O[!Y@.+@)H`"X"8`'0+BT;T.4;R=0/_
-M1OC_1OJ+1OJ+7@0Y1PAWBH-^_`!U$(MV_L'F`RO`B8"6`(F`E`"#?O@`=1.+
-M=O[!Y@.+7@0KP(F`F@")@)@`7LG#R"(``%=6BW8$B_XJP(A&^HA&_(A&XHA&
-M_HA&Y(A&[(M$>(M4>M'JT=C1ZM'8T>K1V"4?`(E&^,9&Z`#V10D0=`2`3NAP
-M]D4(@'0$@$[H@,9&]@#V10D@=`2`3O9P]D4)`70$@$[V@,9&\@#V10E`=`2`
-M3O)P]D4)`G0$@$[R@,9&\`#V10@"=1>`?O(`=!'V10H0=`>`3O`"ZP60@$[P
-M`?9%"@)T!(!.\`CV10H(=`2`3O`$]D44$'0$@$[Z@(I%,BKD2'002'012'0J
-M2'0M@$[\$.L%D(!._`2`?3$"=2*`3OH"@'TP!70T@'TP!G4>@$[\`>LH@$[\
-M#.O>@$[\".O8@'TQ`77<@$[Z`>O6@'TP!W4&@$[\`NL$@$[\`^@_N8E&[O9%
-M%`AT!H!E&%_K"O9%&"!T!(!.^A#V110$=`:`91BOZPKV11@0=`2`3OR`_W;N
-MZ`ZY@\0"]D48`70+@$[BA(!.Y!#K!9"`3OX0]D48`G0$@$[B"(!.Y(#V111`
-M=1;V1%@"=!#V110(=`:`3NP0ZP2`3NR`]D44"'4*]D18"'0$@$[L$.BUN(E&
-M[H!E&?S_=N[HK+B#Q`*`3OP@QD;J0/]U`O\UZ&_\@\0$"\!U`^E-`?]U`O\U
-MZ+_[@\0$B4;@QD;J`.L$D/Y&ZH!^ZAAS&8I>ZBK_P>,"BP6+50(YAQP'=>0Y
-MEQX'==Z`?NH8=2K&1NH`ZP/^1NJ`?NH8<QN*7NHJ_\'C`O^W'@?_MQP'Z&C[
-M@\0$.T;@==R`?NH8=`/IW0"*7'HJ_]'CBT1XBU1ZBL2*XHN/CCJ+V"K_T>,#
-MV8M'&(E&WHI$>"KD:@!0_W;>Z(;\@\0&BU[XP>,#`U[>_[>6`/^WE`#H#_N#
-MQ`0[1N!U!\9&ZACIA@"+7OC!XP,#7M[_MYH`_[>8`.CL^H/$!#M&X'4&QD;J
-M&>MDBU[XP>,#`U[>BX>6``N'E`!U'<9&ZAB+!8M5`HM>^,'C`P->WHF'E`")
-MEY8`ZS60BU[XP>,#`U[>BX>:``N'F`!U'<9&ZAF+!8M5`HM>^,'C`P->WHF'
-MF`")EYH`ZP60QD;J0(!^ZD!U(.@UMXE&[BO`B44"B06)10:)103_=N[H([>#
-MQ`+&1NH`Z!6WB4;N@WTB`'4<BT4""P5T#VH`:@K_=0+_->@O$NL$D+@!`(E%
-M(J&,"#E%(G8#B44B@WT@`'4%QT4@`0#_=N[HV+:#Q`**13J(1O0*P'4$QD;T
-M"(!^]!!V!,9&]!"*1O0JY#E%(G,&BD4BB$;TBE[T*O^*AWP'"$;Z@/L0<P/^
-M1O3V10@!=`>`3OY&ZP60@$[D1O]V#/]V"O]V"/]V!E;H^L:#Q`KH;K:)1NZ*
-M1O0JY(F$D@"*1NB(A)0`BD;VB(25`(I&\HB$E@"*1O"(A)<`BD4()00`/0$`
-M&L`D@`1_B(28`&H`:((`5NC.#H/$!HI&XBKD4&H`5N@=#X/$!HI&_"KD4&H!
-M5N@.#X/$!FIL:($`5NBD#H/$!HI&^BKD4&B``%;H\@Z#Q`9HA0!6Z+H.@\0$
-M)`^*3NPJ[0O!4&B%`%;HU`Z#Q`:`?NH8=2G_=0+_->C]^(/$!(E&YHI&YBKD
-M4&B4`%;H``Z#Q`:*1N<JY%!HA`#K+8!^ZAEU._]U`O\UZ,[X@\0$B4;FBD;F
-M*N10:)T`5NC1#8/$!HI&YRKD4&B-`%;HP0V#Q`9HS`!HG`!6Z+0-@\0&BT4"
-M"P5T'HI&ZBKD4&H.5NA.#H/$!HI&ZBKD4&H,5N@_#H/$!HI%-IA0:@A6Z#$.
-M@\0&BD4UF%!J"5;H(PZ#Q`;V11@!=2'V1@8!=!OV1'Z`=!6`9'Y_@$[D`6BT
-M`&B!`%;HG@V#Q`;V1'P!=$_V1'X!="/V10@!=!V`I)D`_HJ$F0`JY%!H@0!6
-MZ'8-@\0&@&1^_NLGD/9$?@%U(/9%"`%U&H",F0`!BH29`"KD4&B!`%;H30V#
-MQ`:`3'X!BH2>``I&Y(I._O;1(L&(A)X`*N10:((`5N@J#8/$!O]V[NB!M(/$
-M`EY?R<-5B^Q75HMV!(M^!O?'`@!T#&H<:($`5N@`#8/$!O?'`0!T&^L+D&B#
-M`%;H'0V#Q`1H@0!6Z!,-@\0$J`%UZ/9$?`%T$8J$F0`JY%!H@0!6Z,@,@\0&
-M7E_)PY#(!```5U:+=@2+?@:#__]U#\:$FP`"QT;^-``K_^LMD(/__G4-QH2;
-M``#'1OX\`.OJD`O_?A;&A)L``8O'N0H`F??Y*N2+^,=&_C0`Z,VSB4;\B\>(
-MA)P`"L!T!(!,?`+_=OYH@0!6Z%8,@\0&_W;\Z*VS@\0"@W[^-'4-Q%QP)H-'
-M8`$F@U=B`%Y?R<.0R`8``%=6BW8$BWX&Z'^SB4;^:@!6Z$H,@\0$B$;Z)?,`
-M4&H`5N@*#(/$!@O_="=HA`!H@0!6Z/D+@\0&]D08`G0$@$[Z",1<<":#1S@!
-M)H-7.@#K'Y!HC`!H@0!6Z-(+@\0&@&;Z]\1<<":#1SP!)H-7/@#'1OP``&H-
-M5NB+"X/$!/]&_(-^_!1\[HI&^BKD4&H`5NB;"X/$!O]V_NCRLH/$`L1<<":#
-M1P0!)H-7!@!>7\G#R`(``%=6BW8$BWX&"_]T(/9$?H!T,>C!LHE&_E;H3`&#
-MQ`+_=O[HM;*#Q`)>7\G#]D1^@'41:O]J`&K_5NC$](/$"(!,?H!>7\G#D,@(
-M``!75HMV!(M\&/?'`@!T9FH`5NA*"X/$!(E&^"3S4&H`5N@+"X/$!FB,`&B!
-M`%;H_@J#Q`:`9OCWQ%QP)H-'/`$F@U<^`,1<<":#1P0!)H-7!@#'1OH``&H-
-M5NBJ"H/$!/]&^H-^^A1\[O]V^&H`5NB]"H/$!BK`B$;^B$;\]\<0`'0C]D04
-M!'4=@$Q\$(!._("`3OX$@&1,^\1<<":#1U0!)H-75@#WQT``=".*1!0E!``]
-M`0`:P"3^!`0(1OZ`9$S^Q%QP)H-'3`$F@U=.`(!^_`!T'&H!5NB$"H/$!(I.
-M_"KM]]$CP5!J`5;H00J#Q`:`?OX`=!YHA0!6Z&$*@\0$BD[^*NWWT2/!4&B%
-M`%;H'0J#Q`:`3'X$7E_)P\@"``!6BW8$:@!6Z#0*@\0$B$;^)?,`4&H`5NCT
-M"8/$!FBT`&B!`%;HYPF#Q`:`9'Y?@$Q^"(I&_BKD4&H`5NC0"8/$!H",G@`!
-MBH2>`"KD4&B"`%;HN@F#Q`9>R</($@``5HMV!"O`B4;RB4;T*L"(1OR(1OZ(
-M1O:(1OKV1@8(=0;HZ;")1OCV1@@$=`/IH`#'1O#___9$%(!T$HI$?B4(`#T!
-M`!O`0(E&\.M<D/9$%`1U58I&""4!`#T!`!O`)0@`!0@`B4;N]D8(`G0(]]`A
-M1'SK!)`)1'SV1'P8=0WV1!@0=`?&1OJ`ZP60QD;V@/9&"`)T#O9$?!AU",=&
-M\`$`ZP:0QT;P``"#?O``?")T"X!.]`2`3OX$ZPF0@$[R!(!._`3$7'`F@T=4
-M`2:#5U8`]D8&!'58]D04('0-QT;N`@"*1'XE"`#K&8I$%"4$`#T!`!O`)/X%
-M!`")1NZ*1@8E`@`]`0`;P$!T#8I&[@A&_H!.]`'K"Y"`3O(!BD;N"$;\Q%QP
-M)H-'3`$F@U=.`(I&]@I&^G0B:@%6Z*4(@\0$BD[V]M$BP0A&^HI&^BKD4&H!
-M5NA<"(/$!FB%`%;H@@B#Q`2*3OSVT2+!"$;^BD;^*N10:(4`5N@X"(/$!HM&
-M\O?0*](C1$PC5$X+1O2)1$R)5$[V1@8(=0G_=OCH<Z^#Q`)>R<.0R`@``%:+
-M=@3H7:^)1OIHA`!6Z"<(@\0$B$;X_W;ZZ$NO@\0"Z$&OB4;ZBD1,)00`B4;\
-MQT;^``"`3OP;]D04"'0,]D040'4@]D;X`>L4]D;X`70$@&;\]_9$%$!U"O9&
-M^`AT!(!F_/WV1!0$=`;V1O@$ZQ3V1O@$=`:`9OS[ZP2`3OP$]D;X`G0$@&;\
-M_HM&_(M6_HE$3(E43O]V^NC,KH/$`E[)PU6+[%:+=@3^C)P`=0UJ_E;HD_J#
-MQ`2`9'S]7LG#D,@$``!6BW8$BH2:`(A&_,:$F@``@$Q\!.B)KHE&_O9&_(!T
-M$<1<<":#1T@!)H-72@"`3&@"]D;\$'0J]D04"'03Q%QP)H-'2`$F@U=*`(!,
-M:`+K$<1<<":#1U`!)H-74@"`3&@(_W;^Z#VN@\0"5NC*_H/$`N@LKHE&_HM$
-M3(M43HE$;(E4;O]V_N@;KH/$`E[)PY#(!```5HMV!.@%KHE&_FB$`%;HSP:#
-MQ`2(1OS_=O[H\ZV#Q`+$7@8KP":)1P(FB0?V1'Z`=`C$7@8F@$\"`?9$&"!T
-M#O9&_`%T",1>!B:`3P($7LG#D,@$``!6BW8$Z*^MB4;\:($`5NAY!H/$!(A&
-M_O]V_.B=K8/$`HI&_B0(/`$;P"4(`)G$7@8FB0<FB5<"7LG#R"@``%;$7@PF
-MBS>+7@2+AZ@`BY>J`(E&_(E6_J$T!8E&W(M'#(M7#HE&Y(E6YHJ'G0`JY(E&
-MWL=&]```QT;J``"*1N0E`0`]`0`;P$")1O;V1N6`=!+V1N8!=0S&1O``QT;H
-M!0#K&)#V1N6`=0;V1N8!=`;&1O!_Z^;'1N@#`,=&Z@``ZPG_3A#_1M[_1NJ+
-M1@HY1NI\`^FP`L1>!O]&!B:*!XA&V#P@?#(\?G\N@WX0`'4#Z9,"@W[V`'0,
-M/&%\"#QZ?P2`;M@@BD;8Q%[\)H@`1CEVW'>N*_;KJHM&WHE&XL=&V@``QT;R
-M``"+1NB)1OB*1O"(1OJ*1MB8Z44!D/9&Y$!T"L=&V@4`QT;R`0"#?MX`?P/I
-M1P'_3M[I00&0]D;D$'0#Z=0`]D;D`G4#Z:0`]D;D"'0)@W[>`'4#Z;P`QD;@
-M#8!.^`CIL0#V1N4"="**1MXE!P`M"`#WV-'XB4;:"\!^!K@"`.L#D"O`B4;R
-MZS"0]D;E!'0,QT;:"@#'1O("`.L=]D;E"'07QT;X!`"*1MXE!P`M"`#WV(E&
-M\L9&^B"+1MX,!T")1M[IL0"0]D;D@'4#Z:<`QT;:R`#'1O+__^F:`/9&Y0'K
-MZ/9&Y`1T',9&V`KV1N0@=0/I@0#'1MH*`,=&\@(`ZW60D)#V1N0(=`F#?MX`
-M=0/IC_[V1N40=!N+1M[!^`(%!0`]"@!]`[@*`(E&VL=&\@(`ZQ[V1N4@=`C'
-M1MH*`.OLD/9&Y4!T"L=&V@\`QT;R!`#'1MX``.L=D"T(`#T%`'<4T>"3+O^G
-M/(/H@32""(*8@JZ"M(+'1NP``/9&^`%T`_]&[/9&^`AT`_]&[/9&^`1T!HM&
-M\@%&[(M&$#E&['X/BT;BB4;>QT80``#IL0"0@W[:`'X>]D;X`G08@W[J`'4)
-MBUX$]D=^2'0)BT;BB4;>Z8P`]D;X`701BD;8Q%[\)H@`1CEVW'<"*_;V1O@(
-M=!&*1N#$7OPFB`!&.7;<=P(K]H-^V@!^'/9&^`)T%HM>!(!/?D"*1MJ+7@2(
-MAY\`_T;JZSR#?O(`?BSV1O@$=":+1O)(`4;TZP20_T[R@W[R`'X3BD;ZQ%[\
-M)H@`1CEVW'?H*_;KY(M&["E&$.E#_9#H+ZJ)1NZ+1O0#1NJ9BUX$Q%]P)@%'
-M!"815P;_=N[H%:J#Q`+H"ZJ)1NZ*1MZ+7@2(AYT`Q%X,)HDW_W;NZ/:I@\0"
-MBT;J7LG#D,@(``!75HMV"/?&$`!T%XM>!,1?<":#1R0!)H-7)@"+7@2`3W\"
-M]\8@`'07BUX$Q%]P)H-'+`$F@U<N`(M>!(!/?P3WQD``=!>+7@3$7W`F@T<H
-M`2:#5RH`BUX$@$]_"/?&@`!T%XM>!,1?<":#1V0!)H-79@"+7@2`3W\0BUX$
-MBH>4`"KD]]`C\(J'E0`JY(7&=`/IN@"+AZ``BY>B`(E&_(E6_HN_I`"+AZ8`
-M.\=W"2O'`P8R!>L#D"O'B4;X/0(`?2+$7W`F@T<P`2:#5S(`BUX$Q%]P)H-'
-M-`$F@U<V`%Y?R<.0BH>6`"KDA<9T*(-^^`1\SL1>_";&`?]'.SXR!7("*__$
-M7OPFQ@$`1SL^,@5R'2O_ZQGWQO``=!/WQH``=`:*1SCK!)"*1S>8B48&BD8&
-MQ%[\)H@!1SL^,@5R`BO_BUX$B;^D`(M>!(!/?@)>7\G#D,@$``!6BW8$:(P`
-M5NC_`(/$!"4X`"T(`'00+1``=!TM$`!U`^F1`%[)PVB$`%;H-0&#Q`0(A)H`
-M7LG#D&B&`%;H(P&#Q`2(1O[V1OY`=!Z`3'Z`Q%QP)H-'1`$F@U=&`,1<<":#
-M1P@!)H-7"@#V1OZ`=&W$7'`F@T=``2:#5T(`Q%QP)H-'"`$F@U<*`(!D?G_V
-M1'X@=$F`9'[?@$Q^"(",G@`!BH2>`"KD4&B"`%;HA`"#Q`9>R<-J+&B!`%;H
-M=0"#Q`9H@0!6Z)L`@\0$J(!T"E;H).>#Q`)>R<.`9'_O7LG#D%6+[%=6BW8$
-MBWX&5XN$B@!`0%#H&:2#Q`3_=@C_M(H`Z`RD@\0$7E_)PU6+[%=6BW8$BWX&
-M5XN$B@!`0%#H[Z.#Q`3_M(H`Z.^C@\0"7E_)PY!5B^Q75HMV!(M^!HN$C``+
-MQU"+A(H`0$!0Z,&C@\0$_W8(_[2*`.BTHX/$!%Y?R<-5B^Q75HMV!(M^!HN$
-MC``+QU"+A(H`0$!0Z)&C@\0$_[2*`.B1HX/$`EY?R<.058OL5U:+=@2+?@:+
-MA(P`"\=0BX2*`$!`4.ACHX/$!/^TB@#H8Z.#Q`([1@AT%/]V"/^TB@#H1Z.#
-MQ`2X`0!>7\G#*\!>7\G#R`(``%=6BW8$@SZ:"`!U!BO`7E_)P^B=IHE&_BO_
-MZP%'@?\0)WT.:($`5NA<_X/$!*@(=.O_=@9H@P!6Z!O_@\0&@WX&"G4,:@UH
-M@P!6Z`G_@\0&_W;^Z&"F@\0"Z[&058OLBUX$_W8(_W8&_W<"_S?H+@"+7@2)
-M5P*)!XOE7<(&`%6+[(M>!(L'BU<"BTX&Z&$"BUX$B0>)5P*+Y5W"!```58OL
-M5U93,_^+1@8+P'T2]]>+5@3WV/?:'0``B48&B58$BT8*"\!]$O?7BU8(]]CW
-MVAT``(E&"HE6"`O`=1:+3@B+1@8STO?QB]B+1@3W\8O3ZSR0B]B+3@B+5@:+
-M1@31Z]'9T>K1V`O;=?3W\8OP,])24/]V"O]V".@T`3M6!G<'<@@[1@1V`X/N
-M`3/2B\8+_W0']]KWV(/:`%M>7XOE7<((``!5B^Q35S/_BT8&"\!]$O?7BU8$
-M]]CWVAT``(E&!HE6!(M&"@O`?1"+5@CWV/?:'0``B48*B58("\!U&HM."(M&
-M!C/2]_&+1@3W\8O",](+_W5%ZTJ0B]B+3@B+5@:+1@31Z]'9T>K1V`O;=?3W
-M\3/24E#_=@K_=@CHD0`[5@9W!W(+.T8$=@8K1@@;5@HK1@0;5@8+_W4']]KW
-MV(/:`%];B^5=P@@`58OL4U:+1@H+P'46BTX(BT8&,]+W\8O8BT8$]_&+T^L\
-MD(O(BUX(BU8&BT8$T>G1V]'JT=@+R77T]_.+\#/24E#_=@K_=@CH'``[5@9W
-M!W((.T8$=@.#[@$STHO&7EN+Y5W""```58OLBT8&BUX*"]B+7@AU"XM&!/?C
-MB^5=P@@`]^.+R(M&!/=F"@/(BT8$]^,#T8OE7<((`%6+[%.+1@H+P'46BTX(
-MBT8&,]+W\8M&!/?QB\(STNM&D(O(BUX(BU8&BT8$T>G1V]'JT=@+R77T]_,S
-MTE)0_W8*_W8(Z(7_.U8&=P=R"SM&!'8&*T8(&U8**T8$&U8&]]KWV(/:`%N+
-MY5W""```,NWC!M'@T=+B^L,`@P;J!P&#%NP'`/\&/`Z#/CP.9',#Z8$`@P:4
-M.@&#%I8Z`,<&/`X``*&2.@L&D#IT*/\VDCK_-I`Z:@!J9*&0.HL6DCHK!IXZ
-M&Q:@.E)0Z`'_4E#HEOZC9#N#/F0[`'P'@SYD.V1^!L<&9#L``(,^:CL#?`W_
-M-F0[:,0'Z/Z9@\0$@SYJ.P)\"6C'!^CNF8/$`BO`HZ`ZHYXZZ?1_````````
-`
-end
diff --git a/usr.sbin/stallion/stlload/Makefile b/usr.sbin/stallion/stlload/Makefile
deleted file mode 100644 (file)
index 5c242bb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# $FreeBSD: src/usr.sbin/stallion/stlload/Makefile,v 1.5.2.2 2001/04/25 12:10:59 ru Exp $
-# $DragonFly: src/usr.sbin/stallion/stlload/Makefile,v 1.2 2003/06/17 04:30:03 dillon Exp $
-
-PROG=  stlload
-MAN=   stlload.8
-MANSUBDIR=/i386
-WARNS?= 2
-
-CFLAGS+=-DBOOTDIR=\"${BOOTDIR}\"
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/stallion/stlload/stlload.8 b/usr.sbin/stallion/stlload/stlload.8
deleted file mode 100644 (file)
index 2afa69e..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-.\" Copyright (c) 1996-1998 Greg Ungerer (gerg@stallion.oz.au).
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"    This product includes software developed by Greg Ungerer.
-.\" 4. Neither the name of the author nor the names of any co-contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" $FreeBSD: src/usr.sbin/stallion/stlload/stlload.8,v 1.5.2.6 2003/03/11 22:31:33 trhodes Exp $
-.\"
-.Dd January 8, 1998
-.Dt STLLOAD 8 i386
-.Os
-.Sh NAME
-.Nm stlload
-.Nd "Stallion Technologies multiport serial board down loader"
-.Sh SYNOPSIS
-.Nm
-.Op Fl vhVR
-.Op Fl i Ar image-file
-.Op Fl c Ar control-device
-.Op Fl r Ar rx-buf-size
-.Op Fl t Ar tx-buf-size
-.Op Fl B Ar boot-banner
-.Op Fl b Ar unit-number
-.Sh DESCRIPTION
-The
-.Nm
-utility
-is used to download the firmware code to Stallion Technologies intelligent
-multiport serial boards.
-A firmware download is only required for those boards that use the Stallion
-.Nm stli
-driver.
-This includes the EasyConnection 8/64, ONboard and Brumby families of boards.
-.Pp
-Different board types require different firmware images.
-If the wrong firmware is loaded into a board it will fail to operate.
-.Pp
-The Stallion EasyConnection 8/64 Host Adapter PCI cards DO NOT require
-firmware to be loaded.
-.Pp
-The download process is achieved through the Stallion
-.Nm stli
-driver control device,
-.Pa /dev/staliomem? .
-This device implements a file type device that can read and write into the
-boards shared memory region.
-It also implements a number of special
-.Em ioctls
-that reset and restart the board.
-.Pp
-The options are:
-.Bl -tag -width indent
-.It Fl v
-Verbose output generation.
-Trace is generated at each phase of the download and startup process.
-.It Fl h
-Output usage information.
-.It Fl V
-Output version information.
-.It Fl R
-Reset the board only.
-Does not proceed to download firmware to the board.
-.It Fl i Ar image-file
-Specify the firmware image file to download.
-The default firmware image is
-.Pa /usr/libdata/stallion/cdk.sys .
-.It Fl c Ar control-device
-Specify the board control device through which to download the firmware
-and start up the board.
-The default is
-.Pa /dev/staliomem0 .
-.It Fl r Ar rx-buf-size
-Specify the size of the boards shared memory Receive Data buffer.
-By default the buffer is dynamically sized to use the maximum
-available shared memory.
-.It Fl t Ar tx-buf-size
-Specify the size of the boards shared memory Transmit Data buffer.
-By default the buffer is dynamically sized to use the maximum
-available shared memory.
-.It Fl B Ar boot-banner
-Enable the slave debug trace flag during download.
-This enables debug trace output from the firmware code.
-This trace is output on port 0 of the board,
-and the port is set to 9600 baud, 8 data bits, no parity and 1 stop bit.
-.It Fl b Ar unit-number
-Specify the unit (board) number to be downloaded.  The default is to
-download board 0.
-.El
-.Pp
-The
-.Nm
-utility would typically be run from
-.Pa /etc/rc.d/serial .
-.Sh FILES
-.Bl -tag -width /usr/libdata/stallion/2681.sys
-.It Pa /usr/libdata/stallion/cdk.sys
-firmware code to EasyConnection 8/64 class boards
-.It Pa /usr/libdata/stallion/2681.sys
-firmware code to ONboard and Brumby class boards
-.It Pa /dev/staliomem?
-driver board control device
-.El
-.Sh SEE ALSO
-.Xr stl 4 ,
-.Xr stli 4 ,
-.Xr stlstats 8
-.Sh HISTORY
-This program was originally developed by
-.An Greg Ungerer Aq gerg@stallion.com .
diff --git a/usr.sbin/stallion/stlload/stlload.c b/usr.sbin/stallion/stlload/stlload.c
deleted file mode 100644 (file)
index 2ff4910..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-/*****************************************************************************/
-
-/*
- * stlload.c  -- stallion intelligent multiport down loader.
- *
- * Copyright (c) 1994-1998 Greg Ungerer (gerg@stallion.oz.au).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by Greg Ungerer.
- * 4. Neither the name of the author nor the names of any co-contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/usr.sbin/stallion/stlload/stlload.c,v 1.10.2.2 2002/02/13 22:55:45 dbaker Exp $
- * $DragonFly: src/usr.sbin/stallion/stlload/stlload.c,v 1.4 2007/02/03 23:13:19 swildner Exp $
- */
-
-/*****************************************************************************/
-
-#include <err.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-
-#include <machine/cdk.h>
-
-/*****************************************************************************/
-
-char   *version = "2.0.0";
-char   *defdevice = "/dev/staliomem%d";
-char   *image = BOOTDIR "/cdk.sys";
-char   *oldimage = BOOTDIR "/2681.sys";
-
-char   *memdevice;
-char   devstr[128];
-int    brdnr = 0;
-int    verbose = 0;
-int    reset = 0;
-
-/*
- *     Define a local buffer for copying the image into the shared memory.
- */
-#define        BUFSIZE         4096
-
-char   buf[BUFSIZE];
-
-/*
- *     Define the timeout length when waiting for slave to start up.
- *     The quantity is measured in seconds.
- */
-#define        TIMEOUT         5
-
-/*
- *     Set up a default feature area structure.
- */
-cdkfeature_t   feature = { 0, 0, ETYP_CDK, 0, 0, 0, 0, 0 };
-
-/*
- *     Have local copies of the board signatures ready.
- */
-cdkecpsig_t    ecpsig;
-cdkonbsig_t    onbsig;
-
-/*****************************************************************************/
-
-/*
- *     Declare internal function prototypes here.
- */
-static void    usage(void);
-int    ecpfindports(cdkecpsig_t *sigp);
-int    onbfindports(cdkonbsig_t *sigp);
-int    download(void);
-
-/*****************************************************************************/
-
-static void
-usage(void)
-{
-       fprintf(stderr, "%s\n%s\n",
-"usage: stlload [-vhVR] [-i image-file] [-c control-device] [-r rx-buf-size]",
-"               [-t tx-buf-size] [-B boot-banner] [-b unit-number]");
-       exit(0);
-}
-
-/*****************************************************************************/
-
-/*
- *     Given a boards signature determine how many ports it has. We need to
- *     know this to setup the slave feature arguments. This function is for
- *     ECP boards only.
- */
-
-int
-ecpfindports(cdkecpsig_t *sigp)
-{
-       unsigned int    id;
-       int             bank, nrports;
-
-       nrports = 0;
-       for (bank = 0; (bank < 8); bank++) {
-               id = (unsigned int) sigp->panelid[bank];
-               if (id == 0xff)
-                       break;
-               if ((id & 0x07) != bank)
-                       break;
-               if (id & 0x20) {
-                       nrports += 16;
-                       bank++;
-               } else {
-                       nrports += 8;
-               }
-       }
-
-       return(nrports);
-}
-
-/*****************************************************************************/
-
-/*
- *     Given a boards signature determine how many ports it has. We need to
- *     know this to setup the slave feature arguments. This function is for
- *     ONboards and Brumbys.
- */
-
-int
-onbfindports(cdkonbsig_t *sigp)
-{
-       int     i, nrports;
-
-       if (sigp->amask1) {
-               nrports = 32;
-       } else {
-               for (i = 0; (i < 16); i++) {
-                       if (((sigp->amask0 << i) & 0x8000) == 0)
-                               break;
-               }
-               nrports = i;
-       }
-
-       return(nrports);
-}
-
-/*****************************************************************************/
-
-/*
- *     Download an image to the slave board. There is a long sequence of
- *     things to do to get the slave running, but it is basically a simple
- *     process. Main things to do are: copy slave image into shared memory,
- *     start slave running and then read shared memory map.
- */
-
-int
-download(void)
-{
-       unsigned char   alivemarker;
-       time_t          strttime;
-       int             memfd, ifd;
-       int             nrdevs, sigok, n;
-
-       if (verbose)
-               printf("Opening shared memory device %s\n", memdevice);
-       if ((memfd = open(memdevice, O_RDWR)) < 0) {
-               warn("failed to open memory device %s", memdevice);
-               return(-1);
-       }
-
-/*
- *     Before starting the download must tell driver that we are about to
- *     stop its slave. This is only important if it is already running.
- *     Once we have told the driver its stopped then do a hardware reset
- *     on it, to get it into a known state.
- */
-       if (verbose)
-               printf("Stoping any current slave\n");
-       if (ioctl(memfd, STL_BSTOP, 0) < 0) {
-               warn("ioctl(STL_BSTOP)");
-               printf(" (Perhaps you're trying to download firmware to a PCI card that\n doesn't require this?)\n");
-               return(-1);
-       }
-
-       if (verbose)
-               printf("Reseting the board\n");
-       if (ioctl(memfd, STL_BRESET, 0) < 0) {
-               warn("ioctl(STL_BRESET)");
-               return(-1);
-       }
-       if (reset)
-               return(0);
-
-/*
- *     After reseting the board we need to send an interrupt to the older
- *     board types to get them to become active. Do that now.
- */
-       if (verbose)
-               printf("Interrupting board to activate shared memory\n");
-       if (ioctl(memfd, STL_BINTR, 0) < 0) {
-               warn("ioctl(STL_BINTR)");
-               return(-1);
-       }
-       /*sleep(1);*/
-
-       if (verbose)
-               printf("Opening slave image file %s\n", image);
-       if ((ifd = open(image, O_RDONLY)) < 0) {
-               warn("failed to open image file %s", image);
-               return(-1);
-       }
-
-/*
- *     At this point get the signature of the board from the shared memory.
- *     Do a double check that it is a board we know about. We will also need
- *     to calculate the number of ports on this board (to use later).
- */
-       sigok = 0;
-       if (verbose)
-               printf("Reading ROM signature from board\n");
-
-       if (lseek(memfd, CDK_SIGADDR, SEEK_SET) != CDK_SIGADDR) {
-               warn("lseek(%x) failed on memory file", CDK_FEATADDR);
-               return(-1);
-       }
-       if (read(memfd, &ecpsig, sizeof(cdkecpsig_t)) < 0) {
-               warn("read of ROM signature failed");
-               return(-1);
-       }
-       if (ecpsig.magic == ECP_MAGIC) {
-               nrdevs = ecpfindports(&ecpsig);
-               if (nrdevs < 0)
-                       return(-1);
-               sigok++;
-       }
-
-       if (lseek(memfd, CDK_SIGADDR, SEEK_SET) != CDK_SIGADDR) {
-               warn("lseek(%x) failed on memory file", CDK_FEATADDR);
-               return(-1);
-       }
-       if (read(memfd, &onbsig, sizeof(cdkonbsig_t)) < 0) {
-               warn("read of ROM signature failed");
-               return(-1);
-       }
-       if ((onbsig.magic0 == ONB_MAGIC0) && (onbsig.magic1 == ONB_MAGIC1) &&
-                       (onbsig.magic2 == ONB_MAGIC2) &&
-                       (onbsig.magic3 == ONB_MAGIC3)) {
-               nrdevs = onbfindports(&onbsig);
-               if (nrdevs < 0)
-                       return(-1);
-               sigok++;
-       }
-
-       if (! sigok) {
-               warnx("unknown signature from board");
-               return(-1);
-       }
-
-       if (verbose)
-               printf("Board signature reports %d ports\n", nrdevs);
-
-/*
- *     Start to copy the image file into shared memory. The first thing to
- *     do is copy the vector region in from shared memory address 0. We will
- *     then skip over the signature and feature area and start copying the
- *     actual image data and code from 4k upwards.
- */
-       if (verbose)
-               printf("Copying vector table into shared memory\n");
-       if ((n = read(ifd, buf, CDK_SIGADDR)) < 0) {
-               warn("read of image file failed");
-               return(-1);
-       }
-       if (lseek(memfd, 0, SEEK_SET) != 0) {
-               warn("lseek(%x) failed on memory file", CDK_FEATADDR);
-               return(-1);
-       }
-       if (write(memfd, buf, n) < 0) {
-               warn("write to memory device failed");
-               return(-1);
-       }
-
-       if (lseek(ifd, 0x1000, SEEK_SET) != 0x1000) {
-               warn("lseek(%x) failed on image file", CDK_FEATADDR);
-               return(-1);
-       }
-       if (lseek(memfd, 0x1000, SEEK_SET) != 0x1000) {
-               warn("lseek(%x) failed on memory device", CDK_FEATADDR);
-               return(-1);
-       }
-
-/*
- *     Copy buffer size chunks of data from the image file into shared memory.
- */
-       do {
-               if ((n = read(ifd, buf, BUFSIZE)) < 0) {
-                       warn("read of image file failed");
-                       return(-1);
-               }
-               if (write(memfd, buf, n) < 0) {
-                       warn("write to memory device failed");
-                       return(-1);
-               }
-       } while (n == BUFSIZE);
-
-       close(ifd);
-
-/*
- *     We need to down load the start up parameters for the slave. This is
- *     done via the feature area of shared memory. Think of the feature area
- *     as a way of passing "command line" arguments to the slave.
- *     FIX: should do something here to load "brdspec" as well...
- */
-       feature.nrdevs = nrdevs;
-       if (verbose)
-               printf("Loading features into shared memory\n");
-       if (lseek(memfd, CDK_FEATADDR, SEEK_SET) != CDK_FEATADDR) {
-               warn("lseek(%x) failed on memory device", CDK_FEATADDR);
-               return(-1);
-       }
-       if (write(memfd, &feature, sizeof(cdkfeature_t)) < 0) {
-               warn("write to memory device failed");
-               return(-1);
-       }
-
-/*
- *     Wait for board alive marker to be set. The slave image will set the
- *     byte at address CDK_RDYADDR to 0x13 after it has successfully started.
- *     If this doesn't happen we timeout and fail.
- */
-       if (verbose)
-               printf("Setting alive marker to 0\n");
-       if (lseek(memfd, CDK_RDYADDR, SEEK_SET) != CDK_RDYADDR) {
-               warn("lseek(%x) failed on memory device", CDK_RDYADDR);
-               return(-1);
-       }
-       alivemarker = 0;
-       if (write(memfd, &alivemarker, 1) < 0) {
-               warn("write to memory device failed");
-               return(-1);
-       }
-
-/*
- *     At this point the entire image is loaded into shared memory. To start
- *     it executiong we poke the board with an interrupt.
- */
-       if (verbose)
-               printf("Interrupting board to start slave image\n");
-       if (ioctl(memfd, STL_BINTR, 0) < 0) {
-               warn("ioctl(STL_BINTR) failed");
-               return(-1);
-       }
-
-       strttime = time(NULL);
-       if (verbose)
-               printf("Waiting for slave alive marker, time=%lx timeout=%d\n",
-                       strttime, TIMEOUT);
-       while (time(NULL) < (strttime + TIMEOUT)) {
-               if (lseek(memfd, CDK_RDYADDR, SEEK_SET) != CDK_RDYADDR) {
-                       warn("lseek(%x) failed on memory device", CDK_RDYADDR);
-                       return(-1);
-               }
-               if (read(memfd, &alivemarker, 1) < 0){
-                       warn("read of image file failed");
-                       return(-1);
-               }
-               if (alivemarker == CDK_ALIVEMARKER)
-                       break;
-       }
-
-       if (alivemarker != CDK_ALIVEMARKER) {
-               warnx("slave image failed to start");
-               return(-1);
-       }
-
-       if (lseek(memfd, CDK_RDYADDR, SEEK_SET) != CDK_RDYADDR) {
-               warn("lseek(%x) failed on memory device", CDK_RDYADDR);
-               return(-1);
-       }
-       alivemarker = 0;
-       if (write(memfd, &alivemarker, 1) < 0) {
-               warn("write to memory device failed");
-               return(-1);
-       }
-
-       if (verbose)
-               printf("Slave image started successfully\n");
-
-/*
- *     The last thing to do now is to get the driver started. Now that the
- *     slave is operational it must read in the memory map and gets its
- *     internal tables initialized.
- */
-       if (verbose)
-               printf("Driver initializing host shared memory interface\n");
-       if (ioctl(memfd, STL_BSTART, 0) < 0) {
-               warn("ioctl(STL_BSTART) failed");
-               return(-1);
-       }
-
-       close(memfd);
-       return(0);
-}
-
-/*****************************************************************************/
-
-int
-main(int argc, char *argv[])
-{
-       struct stat     statinfo;
-       int             c;
-
-       while ((c = getopt(argc, argv, "hvVRB:i:b:c:t:r:")) != -1) {
-               switch (c) {
-               case 'V':
-                       printf("stlload version %s\n", version);
-                       exit(0);
-                       break;
-               case 'B':
-                       feature.banner = atol(optarg);
-                       break;
-               case 'h':
-                       usage();
-                       break;
-               case 'v':
-                       verbose++;
-                       break;
-               case 'i':
-                       image = optarg;
-                       break;
-               case 'R':
-                       reset++;
-                       break;
-               case 'b':
-                       brdnr = atoi(optarg);
-                       break;
-               case 'c':
-                       memdevice = optarg;
-                       break;
-               case 't':
-                       feature.txrqsize = atol(optarg);
-                       break;
-               case 'r':
-                       feature.rxrqsize = atol(optarg);
-                       break;
-               case '?':
-               default:
-                       usage();
-                       break;
-               }
-       }
-
-       if (memdevice == NULL) {
-               if ((brdnr < 0) || (brdnr >= 8))
-                       errx(1, "invalid board number %d specified", brdnr);
-               sprintf(devstr, defdevice, brdnr);
-               memdevice = &devstr[0];
-               if (verbose)
-                       printf("Using shared memory device %s\n", memdevice);
-       }
-
-       if (verbose)
-               printf("Downloading image %s to board %d\n", image, brdnr);
-
-/*
- *     Check that the shared memory device exits and is a character device.
- */
-       if (stat(memdevice, &statinfo) < 0)
-               errx(1, "memory device %s does not exist", memdevice);
-       if ((statinfo.st_mode & S_IFMT) != S_IFCHR)
-               errx(1, "memory device %s is not a char device", memdevice);
-
-       if (stat(image, &statinfo) < 0)
-               errx(1, "image file %s does not exist", image);
-
-/*
- *     All argument checking is now done. So lets get this show on the road.
- */
-       if (download() < 0)
-               exit(1);
-       exit(0);
-}
-
-/*****************************************************************************/
index 2b67a82..10e3aa5 100644 (file)
@@ -136,9 +136,7 @@ immediately on start up.
 driver control device used for statistics collection
 .El
 .Sh SEE ALSO
-.Xr stl 4 ,
-.Xr stli 4 ,
-.Xr stlload 8
+.Xr stl 4
 .Sh HISTORY
 This program was originally developed by
 .An Greg Ungerer Aq gerg@stallion.com .
diff --git a/usr.sbin/stallion/stlstty/Makefile b/usr.sbin/stallion/stlstty/Makefile
deleted file mode 100644 (file)
index 990a146..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# $FreeBSD: src/usr.sbin/stallion/stlstty/Makefile,v 1.1.2.1 2001/08/30 12:29:56 murray Exp $
-
-PROG=  stlstty
-MAN=   stlstty.8
-MANSUBDIR=/i386
-WARNS?= 3
-
-DPADD= ${LIBNCURSES}
-LDADD= -lncurses
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/stallion/stlstty/stlstty.8 b/usr.sbin/stallion/stlstty/stlstty.8
deleted file mode 100644 (file)
index 9996c5e..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-.\" Copyright (c) 1996-1998 Greg Ungerer (gerg@stallion.oz.au).
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"    This product includes software developed by Greg Ungerer.
-.\" 4. Neither the name of the author nor the names of any co-contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" $FreeBSD: src/usr.sbin/stallion/stlstty/stlstty.8,v 1.1.2.3 2001/12/21 09:51:30 ru Exp $
-.\"
-.Dd January 14, 1998
-.Dt STLSTTY 8 i386
-.Os
-.Sh NAME
-.Nm stlstty
-.Nd "Stallion Technologies multiport serial port enhanced switches"
-.Sh SYNOPSIS
-.Nm
-.Op Fl hV
-.Op Ar switches
-.Sh DESCRIPTION
-.Nm
-is used to view and set the advanced driver switches available on
-Stallion Technologies multiport serial ports.
-.Pp
-The advanced switches configurable through
-.Nm
-are only available on the intelligent boards of the Stallion
-Technologies multiport serial board range.
-This includes the EasyConnection 8/64 (ISA),
-ONboard and Brumby boards.
-The switches are not available on the EasyIO, EasyConnection 8/32
-and EasyConnection 8/64-PCI boards.
-.Pp
-If no switch settings are listed on the
-.Nm
-command line then it will display the current setting of all switches
-for the port that is
-standard input.
-If one or more switches is listed on the
-.Nm
-command line then those switches will be set accordingly.
-.Pp
-The options are:
-.Bl -tag -width indent
-.It Fl h
-Output usage information.
-.It Fl V
-Output version information.
-.El
-.Sh SWITCHES
-All switches are enabled by using the switch name as a parameter
-to
-.Nm .
-To disable a setting use a
-.Fl
-character in front of the switch name.
-.Pp
-All switches configurable by
-.Nm
-are persistent through opens and closes of the port.
-Once a switch is set it will remain set until changed using
-.Nm
-or by a reboot of the board or system.
-.Pp
-The following switches are configurable through
-.Nm :
-.Bl -tag -width indent
-.It Cm maprts Pq Fl maprts
-Maps the functionality normally associated with the DTR pin to
-action on the RTS pin instead.
-So in other words the RTS pin will now act as if it were the DTR pin.
-This is useful for boards that have ports that do not have full
-modem signaling on their connector (e.g. ONboard 16).
-.It Cm mapcts Pq Fl mapcts
-Maps the functionality normally associated with the DCD pin to
-be actioned on the CTS pin.
-So in other words the CTS pin will now act as if it were the DCD pin.
-This is useful for boards that have ports that do not have full
-modem signaling on their connector (e.g. ONboard 16).
-.It Cm rtslock Pq Fl rtslock
-Locks RTS based flow control on this port on.
-No matter what the port flow control is configured to be via
-the usual
-.Xr stty 1
-program, RTS based (hardware) flow control will be active on
-this port.
-.It Cm ctslock Pq Fl ctslock
-Locks CTS based flow control on this port on.
-No matter what the port flow control is configured to be via
-the usual
-.Xr stty 1
-program, CTS based (hardware) flow control will be active on
-this port.
-.It Cm loopback Pq Fl loopback
-Enables the internal loopback mode of the port UART.
-All data transmitted on this port will be received,
-and none will physically be transmitted by the port.
-.It Cm fakedcd Pq Fl fakedcd
-The DCD pin will always be reported as being asserted,
-regardless of the physical state of the hardware pin.
-.It Cm dtrfollow Pq Fl dtrfollow
-The DTR signal will only be asserted when data is being
-transmitted from the port.
-This is useful in conjunction with the EasyConnection
-Dual Interface module when fitted with RS-485 line drivers.
-.It Cm rximin Pq Fl rximin
-Disables (or enables) the slave processor's received character
-.Dq bunching
-algorithms.
-By default the slave processor will bunch up received data,
-so that it can be sent to the host in large chunks.
-This increases the time it takes for any individual character
-to be seen by an application.
-This may be undesirable for latency sensitive applications or
-protocols.
-To reduce received character latency the
-.Cm rximin
-switch should be turned on.
-.It Cm rxitime Pq Fl rxitime
-Disables (or enables) the slave processor's received character
-wait timer.
-This timer is used as part of the slave processor's data
-.Dq bunching
-algorithm.
-By turning this switch on the timer is reduced to a minimum,
-so that received data will immediately be sent to the host system.
-.It Cm rxthold Pq Fl rxthold
-Disables the UART received FIFO for this port.
-By default the UART received FIFO is programmed to a reasonably
-high level, to minimize CPU overhead.
-Some third party serial devices do not respond quickly to flow
-control signals (hardware or software) and this may cause the
-UART's received FIFO to over-run - thus losing data.
-Turning this switch on disables use of the received FIFO.
-.El
-.Sh SEE ALSO
-.Xr stl 4 ,
-.Xr stli 4 ,
-.Xr stlstats 8
-.Sh HISTORY
-This program was originally developed by
-.An Greg Ungerer Aq gerg@stallion.com .
diff --git a/usr.sbin/stallion/stlstty/stlstty.c b/usr.sbin/stallion/stlstty/stlstty.c
deleted file mode 100644 (file)
index 07fc8ce..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*****************************************************************************/
-
-/*
- * stlstty.c  -- stallion intelligent multiport special options.
- *
- * Copyright (c) 1996-1998 Greg Ungerer (gerg@stallion.oz.au).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by Greg Ungerer.
- * 4. Neither the name of the author nor the names of any co-contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/usr.sbin/stallion/stlstty/stlstty.c,v 1.1.2.1 2001/08/30 12:29:56 murray Exp $
- * $DragonFly: src/usr.sbin/stallion/stlstty/stlstty.c,v 1.4 2007/11/25 01:28:24 swildner Exp $
- */
-
-/*****************************************************************************/
-
-#include <err.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-
-#include <machine/cdk.h>
-
-/*****************************************************************************/
-
-char   *version = "2.0.0";
-
-/*
- *     Define some marker flags (to append to pflag values).
- */
-#define        PFLAG_ON        0x40000000
-#define        PFLAG_OFF       0x80000000
-
-/*
- *     List of all options used. Use the option structure even though we
- *     don't use getopt!
- */
-struct stloption {
-       char    *name;
-       int     val;
-};
-
-
-/*
- *     List of all options used. Use the option structure even though we
- *     don't use getopt!
- */
-struct stloption longops[] = {
-       { "-V", 'V' },
-       { "--version", 'V' },
-       { "-?", 'h' },
-       { "-h", 'h' },
-       { "--help", 'h' },
-       { "maprts", (PFLAG_ON | P_MAPRTS) },
-       { "-maprts", (PFLAG_OFF | P_MAPRTS) },
-       { "mapcts", (PFLAG_ON | P_MAPCTS) },
-       { "-mapcts", (PFLAG_OFF | P_MAPCTS) },
-       { "rtslock", (PFLAG_ON | P_RTSLOCK) },
-       { "-rtslock", (PFLAG_OFF | P_RTSLOCK) },
-       { "ctslock", (PFLAG_ON | P_CTSLOCK) },
-       { "-ctslock", (PFLAG_OFF | P_CTSLOCK) },
-       { "loopback", (PFLAG_ON | P_LOOPBACK) },
-       { "-loopback", (PFLAG_OFF | P_LOOPBACK) },
-       { "fakedcd", (PFLAG_ON | P_FAKEDCD) },
-       { "-fakedcd", (PFLAG_OFF | P_FAKEDCD) },
-       { "dtrfollow", (PFLAG_ON | P_DTRFOLLOW) },
-       { "-dtrfollow", (PFLAG_OFF | P_DTRFOLLOW) },
-       { "rximin", (PFLAG_ON | P_RXIMIN) },
-       { "-rximin", (PFLAG_OFF | P_RXIMIN) },
-       { "rxitime", (PFLAG_ON | P_RXITIME) },
-       { "-rxitime", (PFLAG_OFF | P_RXITIME) },
-       { "rxthold", (PFLAG_ON | P_RXTHOLD) },
-       { "-rxthold", (PFLAG_OFF | P_RXTHOLD) },
-       { 0, 0 }
-};
-
-/* Function prototypes */
-void getpflags(void);
-void setpflags(unsigned long , unsigned long );
-
-/*****************************************************************************/
-
-/*
- *     Declare internal function prototypes here.
- */
-static void    usage(void);
-
-/*****************************************************************************/
-
-static void
-usage(void)
-{
-       fprintf(stderr, "Usage: stlstty [OPTION] [ARGS]\n\n");
-       fprintf(stderr, "  -h, --help            print this information\n");
-       fprintf(stderr, "  -V, --version         show version information "
-               "and exit\n");
-       fprintf(stderr, "  maprts, -maprts       set RTS mapping to DTR "
-               "on or off\n");
-       fprintf(stderr, "  mapcts, -mapcts       set CTS mapping to DCD "
-               "on or off\n");
-       fprintf(stderr, "  rtslock, -rtslock     set RTS hardware flow "
-               "on or off\n");
-       fprintf(stderr, "  ctslock, -ctslock     set CTS hardware flow "
-               "on or off\n");
-       fprintf(stderr, "  fakedcd, -fakedcd     set fake DCD on or off\n");
-       fprintf(stderr, "  dtrfollow, -dtrfollow set DTR data follow "
-               "on or off\n");
-       fprintf(stderr, "  loopback, -loopback   set port internal loop back "
-               "on or off\n");
-       fprintf(stderr, "  rximin, -rximin       set RX buffer minimum "
-               "count on or off\n");
-       fprintf(stderr, "  rxitime, -rxitime     set RX buffer minimum "
-               "time on or off\n");
-       fprintf(stderr, "  rxthold, -rxthold     set RX FIFO minimum "
-               "count on or off\n");
-       exit(0);
-}
-
-/*****************************************************************************/
-
-void
-getpflags(void)
-{
-       unsigned long   pflags;
-
-       if (ioctl(0, STL_GETPFLAG, &pflags) < 0)
-               errx(1, "stdin not a Stallion serial port\n");
-
-       if (pflags & P_MAPRTS)
-               printf("maprts ");
-       else
-               printf("-maprts ");
-       if (pflags & P_MAPCTS)
-               printf("mapcts ");
-       else
-               printf("-mapcts ");
-
-       if (pflags & P_RTSLOCK)
-               printf("rtslock ");
-       else
-               printf("-rtslock ");
-       if (pflags & P_CTSLOCK)
-               printf("ctslock ");
-       else
-               printf("-ctslock ");
-
-       if (pflags & P_FAKEDCD)
-               printf("fakedcd ");
-       else
-               printf("-fakedcd ");
-       if (pflags & P_DTRFOLLOW)
-               printf("dtrfollow ");
-       else
-               printf("-dtrfollow ");
-       if (pflags & P_LOOPBACK)
-               printf("loopback ");
-       else
-               printf("-loopback ");
-       printf("\n");
-
-       if (pflags & P_RXIMIN)
-               printf("rximin ");
-       else
-               printf("-rximin ");
-       if (pflags & P_RXITIME)
-               printf("rxitime ");
-       else
-               printf("-rxitime ");
-       if (pflags & P_RXTHOLD)
-               printf("rxthold ");
-       else
-               printf("-rxthold ");
-       printf("\n");
-}
-
-/*****************************************************************************/
-
-void
-setpflags(unsigned long pflagin, unsigned long pflagout)
-{
-       unsigned long   pflags;
-
-       if (ioctl(0, STL_GETPFLAG, &pflags) < 0)
-               errx(1, "stdin not a Stallion serial port\n");
-       
-
-       pflags &= ~(pflagout & ~PFLAG_OFF);
-       pflags |= (pflagin & ~PFLAG_ON);
-
-       if (ioctl(0, STL_SETPFLAG, &pflags) < 0)
-               err(1, "ioctl(SET_SETPFLAGS) failed");
-}
-
-/*****************************************************************************/
-
-int
-main(int argc, char *argv[])
-{
-       unsigned long   pflagin, pflagout;
-       int             optind, optfound;
-       int             i, val;
-
-       pflagin = 0;
-       pflagout = 0;
-
-       for (optind = 1; (optind < argc); optind++) {
-               optfound = 0;
-               for (i = 0; (longops[i].name[0] != 0) ; i++) {
-                       if (strcmp(argv[optind], &(longops[i].name[0])) == 0) {
-                               val = longops[i].val;
-                               optfound++;
-                               break;
-                       }
-               }
-               if (optfound == 0)
-                       errx(1, "invalid option '%s'\n", argv[optind]);
-
-               switch (val) {
-               case 'V':
-                       printf("stlstats version %s\n", version);
-                       exit(0);
-                       break;
-               case 'h':
-                       usage();
-                       break;
-               default:
-                       if (val & PFLAG_ON) {
-                               pflagin |= val;
-                       } else if (val & PFLAG_OFF) {
-                               pflagout |= val;
-                       } else {
-                               errx(1, "unknown option found, val=%x!\n", val);
-                       }
-               }
-       }
-
-       if (pflagin | pflagout)
-               setpflags(pflagin, pflagout);
-       else
-               getpflags();
-
-       exit(0);
-}
-
-/*****************************************************************************/