summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1999-08-06 15:59:07 +0000
committerphk <phk@FreeBSD.org>1999-08-06 15:59:07 +0000
commit5b101ade5218f2e4decb192fd0999c707483e88a (patch)
tree442495cc24149a9130c9f3c1aaaba32237b524fd
parent1c5ee06e718e5580904e2b08240b6abe386928ac (diff)
downloadFreeBSD-src-5b101ade5218f2e4decb192fd0999c707483e88a.zip
FreeBSD-src-5b101ade5218f2e4decb192fd0999c707483e88a.tar.gz
Add driver support for M-systems DiskOnChip Products.
Sponsored by: M-systems Inc. http://www.m-sys.com
-rw-r--r--sys/conf/NOTES5
-rw-r--r--sys/contrib/dev/fla/COPYRIGHT102
-rw-r--r--sys/contrib/dev/fla/README73
-rw-r--r--sys/contrib/dev/fla/fla.c451
-rw-r--r--sys/contrib/dev/fla/i386/msysosak.o.uu724
-rw-r--r--sys/contrib/dev/fla/msysosak.h135
-rw-r--r--sys/contrib/dev/fla/patch.0023
-rw-r--r--sys/contrib/dev/fla/patch.0116
-rw-r--r--sys/contrib/dev/fla/prep.fla.sh44
-rw-r--r--sys/i386/conf/LINT5
-rw-r--r--sys/i386/conf/NOTES5
11 files changed, 1580 insertions, 3 deletions
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index d934efd..bb57bfd 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -2,7 +2,7 @@
# LINT -- config file for checking all the sources, tries to pull in
# as much of the source tree as it can.
#
-# $Id: LINT,v 1.621 1999/08/04 17:29:33 green Exp $
+# $Id: LINT,v 1.622 1999/08/06 14:01:54 hm Exp $
#
# NB: You probably don't want to try running a kernel built from this
# file. Instead, you should start from GENERIC, and add options from
@@ -1129,6 +1129,9 @@ options FDC_YE #XXX newbus broken
disk fd0 at fdc0 drive 0
disk fd1 at fdc0 drive 1
+# M-systems DiskOnchip products see src/sys/contrib/dev/fla/README
+device fla0 at isa?
+
#
# Other standard PC hardware: `mse', `sio', etc.
#
diff --git a/sys/contrib/dev/fla/COPYRIGHT b/sys/contrib/dev/fla/COPYRIGHT
new file mode 100644
index 0000000..9618a67
--- /dev/null
+++ b/sys/contrib/dev/fla/COPYRIGHT
@@ -0,0 +1,102 @@
+
+SOFTWARE LICENSE AGREEMENT
+
+IMPORTANT! READ CAREFULLY:
+THIS SOFTWARE LICENSE AGREEMENT (the ``Agreement'') is a legal
+agreement between you (either an individual or a single entity) and
+M-Systems Flash Disk Pioneers Ltd. ("M-Systems").
+This Agreement relates to the M-Systems' software accompanying this
+Agreement, which includes computer software and may include associated
+media, printed materials, and ``online'' or electronic documentation
+(the ``Licensed Software'').
+By downloading, installing, copying, or otherwise using the Licensed
+Software, you agree to be bound by the terms of this Agreement.
+If you do not agree to the terms of this Agreement, do not install,
+copy or use the Licensed Software.
+
+The Licensed Software is protected by copyright laws and international
+copyright treaties, as well as other intellectual property laws and
+treaties. The Licensed Software is licensed, not sold.
+The Licensed Software is being provided solely for use with M-Systems'
+DiskOnChip® product lines.
+1. License Grant.
+(a) Grant of License. Subject to the terms and conditions of this
+ Agreement, M-Systems hereby grants you a nonexclusive,
+ royalty-free, worldwide license (including the right to
+ sublicense) to use, copy and distribute the Licensed Software
+ with M-Systems DiskOnChip® products.
+(b) Restrictions on Use. The Licensed Software is licensed solely
+ for use with and to support M-Systems' DiskOnChip® products.
+ Use of this Licensed Software with, or to support, any other
+ flash disk, flash card, resident flash array or solid state
+ disk of any kind is expressly prohibited, and constitutes an
+ illegal infringement of M-Systems' patent, copyright and other
+ rights in and to the Licensed Software.
+2. Limitations on Reverse Engineering, Decompilation, and
+ Disassembly. You may not reverse engineer, decompile, or
+ disassemble the Licensed Software, except and only to the
+ extent that such activity is expressly permitted by applicable
+ law notwithstanding this limitation.
+3. Termination. Without prejudice to any other rights, M-Systems
+ may terminate this Agreement if you fail to comply with the
+ terms and conditions of this Agreement. In such event, you must
+ destroy all copies of the Licensed Software and all of its
+ component parts.
+4. Intellectual Property Rights. Title to the Licensed Software,
+ and all rights with respect to the Software not specifically
+ granted under this Agreement, including without limitation
+ all rights of modification, disassembly and decompilation and
+ all copyright, patent, trademark, trade secret and other
+ proprietary rights and interests are reserved to M-Systems.
+ You may not remove or alter the "README" or "COPYRIGHT" files
+ or copyright notices in the Licensed Software.
+5. DISCLAIMER OF WARRANTIES. To the maximum extent permitted by
+ applicable law, M-Systems and its suppliers provide the Product
+ and any (if any) support services related to the Product
+ ("Support Services") AS IS AND WITH ALL FAULTS, and hereby
+ disclaim all warranties and conditions, either express,
+ implied or statutory, including, but not limited to, any
+ (if any) implied warranties or conditions of merchantability,
+ of fitness for a particular purpose, of lack of viruses, of
+ accuracy or completeness of responses, of results, and of lack
+ of negligence or lack of workmanlike effort, all with regard
+ to the Product, and the provision of or failure to provide
+ Support Services. ALSO, THERE IS NO WARRANTY OR CONDITION OF
+ TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO
+ DESCRIPTION OR NON-INFRINGEMENT, WITH REGARD TO THE PRODUCT.
+ THE ENTIRE RISK AS TO THE QUALITY OF OR ARISING OUT OF USE OR
+ PERFORMANCE OF THE PRODUCT AND SUPPORT SERVICES, IF ANY,
+ REMAINS WITH YOU.
+6. EXCLUSION OF INCIDENTAL, CONSEQUENTIAL AND CERTAIN OTHER
+ DAMAGES. To the maximum extent permitted by applicable law,
+ in no event shall M-Systems or its suppliers be liable for
+ any special, incidental, indirect, or consequential damages
+ whatsoever (including, but not limited to, damages for loss
+ of profits or confidential or other information, for business
+ interruption, for personal injury, for loss of privacy, for
+ failure to meet any duty including of good faith or of
+ reasonable care, for negligence, and for any other pecuniary
+ or other loss whatsoever) arising out of or in any way related
+ to the use of or inability to use the Product, the provision
+ of or failure to provide Support Services, or otherwise under
+ or in connection with any provision of Agreement, even in the
+ event of the fault, tort (including negligence), strict
+ liability, breach of contract or breach of warranty of
+ M-Systems or any supplier, and even if M-Systems or any
+ supplier has been advised of the possibility of such damages.
+7. LIMITATION OF LIABILITY AND REMEDIES. Notwithstanding any
+ damages that you might incur for any reason whatsoever
+ (including, without limitation, all damages referenced above
+ and all direct or general damages), the entire liability of
+ M-Systems and any of its suppliers under any provision of this
+ Agreement and your exclusive remedy for all of the foregoing
+ shall be limited to the greater of the amount actually paid by
+ you for the Product or U.S.$5.00. The foregoing limitations,
+ exclusions and disclaimers shall apply to the maximum extent
+ permitted by applicable law, even if any remedy fails its
+ essential purpose.
+8. Miscellaneous
+ The laws of the State of California, United States of America,
+ exclusive of conflict-of-laws provisions, shall govern this
+ Agreement in all respects.
+
diff --git a/sys/contrib/dev/fla/README b/sys/contrib/dev/fla/README
new file mode 100644
index 0000000..e11f553
--- /dev/null
+++ b/sys/contrib/dev/fla/README
@@ -0,0 +1,73 @@
+README and FAQ for the fla driver.
+
+$Id: README,v 1.3 1999/08/01 14:30:46 phk Exp $
+
+[0] COPYRIGHT & LICENSE
+
+ Please read the COPYRIGHT file carefully. If you cannot
+ agree to be bound by the terms of this license, please
+ contact M-systems and make arrangements with them.
+
+[1] Which devices are supported ?
+
+ The driver has been tested with the following devices:
+
+ DiskOnChip2000 (8, 12, 24, 32, 40, 72, 144 MB)
+ DiskOnChipMillenium (8 MB)
+
+[2] Which firmware version ?
+
+ The driver has only been tested with version 1.21, but should
+ also work with earlier versions.
+
+[3] How many devices ?
+
+ The driver supports up to 8 devices but have been tested only
+ with 5 due to hardware limitations in my test setup.
+
+[4] Which FreeBSD versions ?
+
+ The driver is tested for 4.0-CURRENT and 3.2-STABLE. Porting
+ to earlier versions of FreeBSD should be a simple matter of
+ modifying the fla.c file. [patches are welcome]
+
+ For 3.2-STABLE sources earlier than 1999-08-01 you
+ will need to apply the patch in file patch.00
+
+[5] Can I install FreeBSD with sysinstall ?
+
+ Yes, from medio july FreeBSD-4.X snapshots have recognized the
+ fla devices in sysinstall. You need to build a custom kernel
+ with the driver though. See below about booting from a fla
+ device.
+
+[6] How to boot from a fla device ?
+
+ The FreeBSD kernel recognizes the root device using various
+ hacks. These hacks doesn't recognize the fla device so some
+ "real" hacks are needed to boot from your fla device.
+
+ In 4.0 current the easiest way is to configure your kernel with
+ the
+ options ROOTDEVNAME=\"fla0\"
+
+ In older versions you may need the patch in file patch.01.
+ Be aware that with this patch the kernel will probably not
+ boot on normal disks.
+
+[7] How to disklabel a fla device ?
+
+ Look at the script in prep.fla.sh, it will do the job for you.
+
+[8] Who to contact ?
+
+ doc2k@phk.freebsd.dk will offer limited best-effort help
+ to the extent time permits.
+
+[9] Will more documentation be forthcoming ?
+
+ YES.
+
+Good Luck,
+
+Poul-Henning
diff --git a/sys/contrib/dev/fla/fla.c b/sys/contrib/dev/fla/fla.c
new file mode 100644
index 0000000..052a994
--- /dev/null
+++ b/sys/contrib/dev/fla/fla.c
@@ -0,0 +1,451 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
+ * ----------------------------------------------------------------------------
+ *
+ * $Id: fla.c,v 1.3 1999/08/06 15:22:09 phk Exp $
+ *
+ */
+
+#include "fla.h"
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sysctl.h>
+#include <sys/kernel.h>
+#include <sys/buf.h>
+#include <sys/malloc.h>
+#include <sys/disklabel.h>
+#include <sys/diskslice.h>
+#include <sys/module.h>
+#include <sys/conf.h>
+#include <machine/bus.h>
+#include <machine/clock.h>
+#include <machine/resource.h>
+
+#include <vm/vm.h>
+#include <vm/pmap.h>
+#include <vm/vm_param.h>
+
+#if __FreeBSD_version > 400000 /* XXX ? */
+#include <sys/bus.h>
+#include <isa/isareg.h>
+#include <isa/isavar.h>
+
+#define dev2ul(foo) ((unsigned long)dev2udev(foo))
+#endif
+
+#if __FreeBSD_version < 400000 /* XXX ? */
+#include <i386/isa/isa_device.h>
+
+#define dev2ul(foo) ((unsigned long)foo)
+
+static int
+physread(dev_t dev, struct uio *uio, int ioflag)
+{
+ return(physio(cdevsw[major(dev)]->d_strategy,
+ NULL, dev, 1, minphys, uio));
+}
+
+static int
+physwrite(dev_t dev, struct uio *uio, int ioflag)
+{
+ return(physio(cdevsw[major(dev)]->d_strategy,
+ NULL, dev, 0, minphys, uio));
+}
+
+#define nopoll seltrue
+#define noparms NULL
+#endif
+
+#include <../../contrib/dev/fla/msysosak.h>
+
+MALLOC_DEFINE(M_FLA, "fla driver", "fla driver storage");
+
+static int fla_debug = 0;
+SYSCTL_INT(_debug, OID_AUTO, fladebug, CTLFLAG_RW, &fla_debug, 0, "");
+
+#define CDEV_MAJOR 102
+#define BDEV_MAJOR 28
+
+static d_strategy_t flastrategy;
+static d_open_t flaopen;
+static d_close_t flaclose;
+static d_ioctl_t flaioctl;
+static d_psize_t flapsize;
+
+static struct cdevsw fla_cdevsw = {
+ /* open */ flaopen,
+ /* close */ flaclose,
+ /* read */ physread,
+ /* write */ physwrite,
+ /* ioctl */ flaioctl,
+ /* stop */ nostop,
+ /* reset */ noreset,
+ /* devtotty */ nodevtotty,
+ /* poll */ nopoll,
+ /* mmap */ nommap,
+ /* strategy */ flastrategy,
+ /* name */ "fla",
+ /* parms */ noparms,
+ /* maj */ CDEV_MAJOR,
+ /* dump */ nodump,
+ /* psize */ flapsize,
+ /* flags */ D_DISK | D_CANFREE,
+ /* maxio */ 0,
+ /* bmaj */ BDEV_MAJOR
+};
+
+
+
+void *
+doc2k_malloc(int bytes)
+{
+ return malloc(bytes, M_FLA, M_WAITOK);
+}
+
+void
+doc2k_free(void *ptr)
+{
+ free(ptr, M_FLA);
+}
+
+void
+doc2k_delay(unsigned msec)
+{
+ DELAY(1000 * msec);
+}
+
+void
+doc2k_memcpy(void *dst, const void *src, unsigned len)
+{
+ bcopy(src, dst, len);
+}
+
+int
+doc2k_memcmp(const void *dst, const void *src, unsigned len)
+{
+ return (bcmp(src, dst, len));
+}
+
+void
+doc2k_memset(void *dst, int c, unsigned len)
+{
+ u_char *p = dst;
+ while (len--)
+ *p++ = c;
+}
+
+static struct fla_s {
+ unsigned nsect;
+ struct doc2k_stat ds;
+ struct diskslices *dk_slices;
+ struct buf_queue_head buf_queue;
+} softc[NFLA];
+
+static int
+flaopen(dev_t dev, int flag, int fmt, struct proc *p)
+{
+ int unit;
+ struct fla_s *sc;
+ int error;
+ struct disklabel dk_dd;
+
+ if (fla_debug)
+ printf("flaopen(%lx %x %x %p)\n",
+ dev2ul(dev), flag, fmt, p);
+ unit = dkunit(dev);
+ if (unit >= NFLA)
+ return (ENXIO);
+ sc = &softc[unit];
+ if (!sc->nsect)
+ return (ENXIO);
+ bzero(&dk_dd, sizeof(dk_dd));
+ error = doc2k_size(unit, &dk_dd.d_secperunit,
+ &dk_dd.d_ncylinders, &dk_dd.d_ntracks, &dk_dd.d_nsectors);
+ dk_dd.d_secsize = DEV_BSIZE;
+ dk_dd.d_secpercyl = dk_dd.d_ntracks * dk_dd.d_nsectors;
+
+ error = dsopen("fla", dev, fmt, 0, &sc->dk_slices, &dk_dd,
+ flastrategy, NULL, &fla_cdevsw);
+ return (error);
+}
+
+static int
+flaclose(dev_t dev, int flags, int fmt, struct proc *p)
+{
+ int unit;
+ struct fla_s *sc;
+
+ if (fla_debug)
+ printf("flaclose(%lx %x %x %p)\n",
+ dev2ul(dev), flags, fmt, p);
+ unit = dkunit(dev);
+ sc = &softc[unit];
+ dsclose(dev, fmt, sc->dk_slices);
+ return (0);
+}
+
+static int
+flaioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p)
+{
+ int unit, error;
+ struct fla_s *sc;
+
+ if (fla_debug)
+ printf("flaioctl(%lx %lx %p %x %p)\n",
+ dev2ul(dev), cmd, addr, flags, p);
+ unit = dkunit(dev);
+ sc = &softc[unit];
+ error = dsioctl("fla", dev, cmd, addr, flags, &sc->dk_slices,
+ flastrategy, NULL);
+ if (error == ENOIOCTL)
+ error = ENOTTY;
+ return (error);
+}
+
+static void
+flastrategy(struct buf *bp)
+{
+ int unit, error;
+ u_long ef;
+ struct fla_s *sc;
+ static int busy;
+ enum doc2k_work what;
+
+ if (fla_debug)
+ printf("flastrategy(%p) %lx %lx, %d, %ld, %p)\n",
+ bp, dev2ul(bp->b_dev), bp->b_flags, bp->b_blkno,
+ bp->b_bcount / DEV_BSIZE, bp->b_data);
+ unit = dkunit(bp->b_dev);
+ sc = &softc[unit];
+
+ if (dscheck(bp, sc->dk_slices) <= 0) {
+ biodone(bp);
+ return;
+ }
+
+ ef = read_eflags();
+ disable_intr();
+
+ bufqdisksort(&sc->buf_queue, bp);
+
+ if (busy) {
+ write_eflags(ef);
+ return;
+ }
+
+ busy++;
+
+ while (1) {
+ bp = bufq_first(&sc->buf_queue);
+ if (bp)
+ bufq_remove(&sc->buf_queue, bp);
+
+ write_eflags(ef);
+ if (!bp)
+ break;
+
+ bp->b_resid = bp->b_bcount;
+ unit = dkunit(bp->b_dev);
+
+ if (bp->b_flags & B_FREEBUF)
+ what = DOC2K_ERASE;
+ else if (bp->b_flags & B_READ)
+ what = DOC2K_READ;
+ else
+ what = DOC2K_WRITE;
+
+ error = doc2k_rwe( unit, what, bp->b_pblkno,
+ bp->b_bcount / DEV_BSIZE, bp->b_data);
+
+ if (fla_debug || error) {
+ printf("fla%d: %d = rwe(%p, %d, %d, %d, %ld, %p)\n",
+ unit, error, bp, unit, what, bp->b_pblkno,
+ bp->b_bcount / DEV_BSIZE, bp->b_data);
+ }
+ if (error) {
+ bp->b_error = EIO;
+ bp->b_flags |= B_ERROR;
+ } else {
+ bp->b_resid = 0;
+ }
+ biodone(bp);
+
+ ef = read_eflags();
+ disable_intr();
+ }
+ busy = 0;
+ return;
+}
+
+static int
+flapsize(dev_t dev)
+{
+ int unit;
+ struct fla_s *sc;
+
+ if (fla_debug)
+ printf("flapsize(%lx)\n", dev2ul(dev));
+ unit = dkunit(dev);
+ sc = &softc[unit];
+ if (!sc->nsect)
+ return 0;
+
+ return (dssize(dev, &sc->dk_slices, flaopen, flaclose));
+}
+
+static int
+flarealprobe(int unit)
+{
+ struct fla_s *sc;
+ int i;
+
+ sc = &softc[unit];
+
+ /* This is slightly ugly */
+ i = doc2k_probe(unit, KERNBASE + 0xc0000, KERNBASE + 0xe0000);
+ if (i)
+ return (ENXIO);
+
+ i = doc2k_info(unit, &sc->ds);
+ if (i)
+ return (ENXIO);
+
+ return (0);
+}
+
+
+static int
+flarealattach(int unit)
+{
+ int i, j, k, l, m, error;
+ struct fla_s *sc;
+
+ sc = &softc[unit];
+
+ error = doc2k_open(unit);
+ if (error) {
+ printf("doc2k_open(%d) -> err %d\n", unit, error);
+ return (EIO);
+ }
+
+ error = doc2k_size(unit, &sc->nsect, &i, &j, &k );
+ if (error) {
+ printf("doc2k_size(%d) -> err %d\n", unit, error);
+ return (EIO);
+ }
+
+ printf("fla%d: <%s %s>\n", unit, sc->ds.product, sc->ds.model);
+
+ m = 1024L * 1024L / DEV_BSIZE;
+ l = (sc->nsect * 10 + m/2) / m;
+ printf("fla%d: %d.%01dMB (%u sectors),"
+ " %d cyls, %d heads, %d S/T, 512 B/S\n",
+ unit, l / 10, l % 10, sc->nsect, i, j, k);
+
+ if (bootverbose)
+ printf("fla%d: JEDEC=0x%x unitsize=%ld mediasize=%ld"
+ " chipsize=%ld interleave=%d window=%lx\n",
+ unit, sc->ds.type, sc->ds.unitSize, sc->ds.mediaSize,
+ sc->ds.chipSize, sc->ds.interleaving, sc->ds.window);
+
+ bufq_init(&sc->buf_queue);
+
+ return (0);
+}
+
+
+#if __FreeBSD_version > 400000 /* XXX ? */
+
+static int
+flaprobe (device_t dev)
+{
+ int unit;
+ struct fla_s *sc;
+ device_t bus;
+ int i;
+
+ unit = device_get_unit(dev);
+ sc = &softc[unit];
+ i = flarealprobe(unit);
+ if (i)
+ return (i);
+
+ bus = device_get_parent(dev);
+ ISA_SET_RESOURCE(bus, dev, SYS_RES_MEMORY, 0,
+ sc->ds.window - KERNBASE, 8192);
+
+ return (0);
+}
+
+
+static int
+flaattach (device_t dev)
+{
+ int unit, i;
+
+ unit = device_get_unit(dev);
+ i = flarealattach(unit);
+ return (i);
+}
+
+static device_method_t fla_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, flaprobe),
+ DEVMETHOD(device_attach, flaattach),
+ {0, 0}
+};
+
+static driver_t fladriver = {
+ "fla",
+ fla_methods,
+ sizeof(struct fla_s),
+};
+
+static devclass_t fla_devclass;
+
+DEV_DRIVER_MODULE(fla, isa, fladriver, fla_devclass, fla_cdevsw, 0, 0);
+#endif
+
+
+#if __FreeBSD_version < 400000 /* XXX ? */
+
+static int
+flaprobe (struct isa_device *dvp)
+{
+ int unit;
+ struct fla_s *sc;
+ int i;
+
+ unit = dvp->id_unit;
+ sc = &softc[unit];
+ i = flarealprobe(unit);
+ if (i)
+ return (0);
+
+ dvp->id_maddr = (caddr_t)sc->ds.window;
+ dvp->id_msize = 8192;
+
+ cdevsw_add_generic(BDEV_MAJOR, CDEV_MAJOR, &fla_cdevsw);
+ return (-1);
+}
+
+
+static int
+flaattach (struct isa_device *dvp)
+{
+ int unit, i;
+
+ unit = dvp->id_unit;
+ i = flarealattach(unit);
+ return (i);
+}
+
+struct isa_driver fladriver = {
+ flaprobe, flaattach, "fla",
+};
+
+#endif
diff --git a/sys/contrib/dev/fla/i386/msysosak.o.uu b/sys/contrib/dev/fla/i386/msysosak.o.uu
new file mode 100644
index 0000000..4d1faaf
--- /dev/null
+++ b/sys/contrib/dev/fla/i386/msysosak.o.uu
@@ -0,0 +1,724 @@
+
+SOFTWARE LICENSE AGREEMENT
+
+IMPORTANT! READ CAREFULLY:
+THIS SOFTWARE LICENSE AGREEMENT (the ``Agreement'') is a legal
+agreement between you (either an individual or a single entity) and
+M-Systems Flash Disk Pioneers Ltd. ("M-Systems").
+This Agreement relates to the M-Systems' software accompanying this
+Agreement, which includes computer software and may include associated
+media, printed materials, and ``online'' or electronic documentation
+(the ``Licensed Software'').
+By downloading, installing, copying, or otherwise using the Licensed
+Software, you agree to be bound by the terms of this Agreement.
+If you do not agree to the terms of this Agreement, do not install,
+copy or use the Licensed Software.
+
+The Licensed Software is protected by copyright laws and international
+copyright treaties, as well as other intellectual property laws and
+treaties. The Licensed Software is licensed, not sold.
+The Licensed Software is being provided solely for use with M-Systems'
+DiskOnChip® product lines.
+1. License Grant.
+(a) Grant of License. Subject to the terms and conditions of this
+ Agreement, M-Systems hereby grants you a nonexclusive,
+ royalty-free, worldwide license (including the right to
+ sublicense) to use, copy and distribute the Licensed Software
+ with M-Systems DiskOnChip® products.
+(b) Restrictions on Use. The Licensed Software is licensed solely
+ for use with and to support M-Systems' DiskOnChip® products.
+ Use of this Licensed Software with, or to support, any other
+ flash disk, flash card, resident flash array or solid state
+ disk of any kind is expressly prohibited, and constitutes an
+ illegal infringement of M-Systems' patent, copyright and other
+ rights in and to the Licensed Software.
+2. Limitations on Reverse Engineering, Decompilation, and
+ Disassembly. You may not reverse engineer, decompile, or
+ disassemble the Licensed Software, except and only to the
+ extent that such activity is expressly permitted by applicable
+ law notwithstanding this limitation.
+3. Termination. Without prejudice to any other rights, M-Systems
+ may terminate this Agreement if you fail to comply with the
+ terms and conditions of this Agreement. In such event, you must
+ destroy all copies of the Licensed Software and all of its
+ component parts.
+4. Intellectual Property Rights. Title to the Licensed Software,
+ and all rights with respect to the Software not specifically
+ granted under this Agreement, including without limitation
+ all rights of modification, disassembly and decompilation and
+ all copyright, patent, trademark, trade secret and other
+ proprietary rights and interests are reserved to M-Systems.
+ You may not remove or alter the "README" or "COPYRIGHT" files
+ or copyright notices in the Licensed Software.
+5. DISCLAIMER OF WARRANTIES. To the maximum extent permitted by
+ applicable law, M-Systems and its suppliers provide the Product
+ and any (if any) support services related to the Product
+ ("Support Services") AS IS AND WITH ALL FAULTS, and hereby
+ disclaim all warranties and conditions, either express,
+ implied or statutory, including, but not limited to, any
+ (if any) implied warranties or conditions of merchantability,
+ of fitness for a particular purpose, of lack of viruses, of
+ accuracy or completeness of responses, of results, and of lack
+ of negligence or lack of workmanlike effort, all with regard
+ to the Product, and the provision of or failure to provide
+ Support Services. ALSO, THERE IS NO WARRANTY OR CONDITION OF
+ TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO
+ DESCRIPTION OR NON-INFRINGEMENT, WITH REGARD TO THE PRODUCT.
+ THE ENTIRE RISK AS TO THE QUALITY OF OR ARISING OUT OF USE OR
+ PERFORMANCE OF THE PRODUCT AND SUPPORT SERVICES, IF ANY,
+ REMAINS WITH YOU.
+6. EXCLUSION OF INCIDENTAL, CONSEQUENTIAL AND CERTAIN OTHER
+ DAMAGES. To the maximum extent permitted by applicable law,
+ in no event shall M-Systems or its suppliers be liable for
+ any special, incidental, indirect, or consequential damages
+ whatsoever (including, but not limited to, damages for loss
+ of profits or confidential or other information, for business
+ interruption, for personal injury, for loss of privacy, for
+ failure to meet any duty including of good faith or of
+ reasonable care, for negligence, and for any other pecuniary
+ or other loss whatsoever) arising out of or in any way related
+ to the use of or inability to use the Product, the provision
+ of or failure to provide Support Services, or otherwise under
+ or in connection with any provision of Agreement, even in the
+ event of the fault, tort (including negligence), strict
+ liability, breach of contract or breach of warranty of
+ M-Systems or any supplier, and even if M-Systems or any
+ supplier has been advised of the possibility of such damages.
+7. LIMITATION OF LIABILITY AND REMEDIES. Notwithstanding any
+ damages that you might incur for any reason whatsoever
+ (including, without limitation, all damages referenced above
+ and all direct or general damages), the entire liability of
+ M-Systems and any of its suppliers under any provision of this
+ Agreement and your exclusive remedy for all of the foregoing
+ shall be limited to the greater of the amount actually paid by
+ you for the Product or U.S.$5.00. The foregoing limitations,
+ exclusions and disclaimers shall apply to the maximum extent
+ permitted by applicable law, even if any remedy fails its
+ essential purpose.
+8. Miscellaneous
+ The laws of the State of California, United States of America,
+ exclusive of conflict-of-laws provisions, shall govern this
+ Agreement in all respects.
+
+begin 664 msysosak.o
+M?T5,1@$!`0!&<F5E0E-$``$``P`!``````````````"H60```````#0`````
+M`"@`#``)`%6)Y>C\____A<!U(.C\____A<!U%_\U`````/\U`````.C\____
+MA<!U`C'`R<.0D%6)Y8M%#(M5$*,`````B14`````_P4`````@ST``````74)
+MZ/S___^%P'45BT4(.P4`````<P4QP.L&D+@``0``R<.058GE@^PH5U93BUT(
+MBWT,:D1J`%?H_/___XE=Z(E]](U%Z%!J"^C\____B47DBT\(A<E]!H'!__\/
+M`(G.P?X4C5\<QT<8`````(/^8WXCN!^%ZU'W[HG3P?L%B5W8P?D?B4W<BD78
+M*D7<!#"(1QR-7QV#_@E^.KAG9F9F]^Z)T<'Y`HGPP?@?*<&X9V9F9O?IB=?!
+M_P*)R,'X'RG'B7W<C12_`=*)5=PJ3=R`P3"("T.X9V9F9O?NB='!^0*)\,'X
+M'RG!B4W<C12)`=*)5=R)\"I%W`0PB`-#Q@--0\8#0L9#`0"+1>2-9<Q;7E_)
+MPXGV58GE@^PH5U93BT4(B47HBUT,BWT4BW48C57H4FH0Z/S___^)P8M%^(D#
+MBU40QP(`!```QP<0````BP+!X`2)1=R+$XE5V(G0,=+W==R)!HL#B478,=+W
+M==R%TG1`_P:+11"+$`^O%HE5W(L#B478,=+W==R)!XL#B478,=+W==R%TG09
+M_P>+/P^O/HE]W(L;B=@QTO?WB<.+11")&(G(C67,6UY?R<.058GE@^P8BT4(
+MB47HC47H4&H%Z/S____)PXUV`%6)Y8/L&(M%"(E%Z(U%Z%!J`>C\____R<.-
+M=@!5B>6#[!A64XM="(MU#(M%$(M5%(M-&(E=Z(E%^(E5_(E-](/^`70<<@J#
+M_@)T)>LSC78`C47H4&H&Z/S____K*(UV`(U%Z%!J!^C\____ZQB-=@"-1>A0
+M:@GH_/___^L(C78`N!`G``"-9>!;7LG#58GER<.-=@!5B>6X`0```,G#B?95
+MB>7)PXUV`%6)Y8M%",<``````#'`R<-5B>7)PY"0D%6)Y5.+70CV`PAT"_]S
+M;(N#B````/_0Q@,`,<"+7?S)PXUV`%6)Y593BUT(,?:#?0P!=4R-0S10Z/S_
+M__^#Q`2%P'4(N`D```#K;Y!J`?^SE````.C\_____[.4````Z/S___^#Q`SV
+M`PAT3&H!_W-LBX.$````_]")QNL[C78`]@,(=!)J`/]S;(N#A````/_0B<:#
+MQ`C_LY0```#H_/___VH`_[.4````Z/S___^-0S10Z/S___^)\(UE^%M>R<.-
+M=@!5B>6+10AJ`/]U#/]P;(M`</_0R<.-=@!5B>53BUT(4^@7____@\0$A<!U
+M2FH!C4-L4(G8+0````"-!$"-!,")PL'B"2G"B=#!X!(!PO?:P?H#4NC\____
+MA<!U&L=#$`````#'0Q@`````QT,4`````(`+"#'`BUW\R<.058GE5U93BW4(
+M5NBQ_O__@\0$A<`/A;\!``!J`8U&;%")\"T`````C01`C03`B<+!X@DIPHG0
+MP>`2`<+WVL'Z`U+H_/___X/$#(7`#X6(`0``:@!6Z"O___^#Q`B%P'48_W9L
+MBX:(````_]"X&P```.ED`0``C78`/0````!U%?]V;(N&B````/_0N!D```#I
+M10$``&:!N/X!``!5JG4=@+C"`0```'04!<8!``!0Z/S___^)1A"#Q`3K")#'
+M1A``````QT88`````,=&%`````"`#@C_=A!6Z*?^__^)PX/$"(7;=0JX&P``
+M`.GI````@?L`````=0RX&0```.G7````B?:`.^ET&XL#)?\`_P`]ZP"0`'0-
+MN`H```#IN````(UV`(U#"U#H_/___X/$!&8]``(/A9H````/MD,-B48$#[9#
+M$(E&'`^W0Q:)1B`/MTL.`TX0B4X4#[=#%@'(B488#[9#$`^W4Q8/K\(!R(E&
+M)(U#$5#H_/___R7__P``P>`%2,'H"4")1B@#1B2)1BR-0Q-0Z/S___\E__\`
+M`(7`=0.+0R`#1A`K1BPQTO=V!$")1@@]]`\``'88BWX$P><)B7X,QT8P`@``
+M`(`.`C'`ZP:0N`L```"-9?1;7E_)PXUV`%6)Y5.+10B+70S_<&R+@(P```#_
+MT(E#$#'`BUW\R<.058GE@^P$5U93BW4,BUX,BT80BU4(BWH0`<>+5A2)5?S'
+M1A0`````.584<U)7BU4(4NA*_?__@\0(A<!T'ST`````=0BX&0```.LUD&@`
+M`@``4%/H_/___^L/B?9H``(``&H`4^C\____@\0,_T841X'#``(``(M5_#E6
+M%'*N,<"-9?!;7E_)PU6)Y5=64XM]"(M-#%%7Z.7\__^)PH/$"(72=&:!^@``
+M``!T7HM%#"M'%,'@"(UP_@^O=P0#=RPQVXUV`(M-$&:+!`MF@SP3`'0;9H7`
+M=1;_=P16_W=LBX>`````_]"#Q`R%P'4?BTT,45?HB?S__XG"@\0(`W<$@\,"
+M@?O_`0``=KHQP(UE]%M>7\G#58GE@^P$5U93BUT,BWL,BT,0BU4(BW(0`<:+
+M4Q2)5?S'0Q0`````.5,4<R975HM5"/]R;(M"=/_0@\0,A<!U%/]#%$:!QP`"
+M``"+5?PY4Q1RVC'`C67P6UY?R<-5B>6#[`13BT4(BUT,C57\4O]S$/]P;(M`
+M</_0A<!T'#T`````=0FX&0```.L3B?:+1?R)0Q0QP.L'B?:X&P```(M=^,G#
+MB?95B>6+50B+30R+01`#0A#_<110_W)LBX*`````_]#)PU6)Y8/L!%=64XM=
+M"(M%#(M`#(E%_/]S$%/HBOO__X/$"(7`=",]`````'0KBWW\B<;\N0D```#S
+MI6H`4^AG^___@\0(A<!U"+@;````ZSB0/0````!U";@9````ZRF)]F:!N/X!
+M``!5JG4:@+C"`0```'01!<8!``!0Z/S___^+3?R)01PQP(UE\%M>7\G#D%6)
+MY593BUT(C7,X5O^SE````.C\____@\0(A<!U"U:+0VC_T(`+`3'`C67X6U[)
+MPU6)Y8M%"(`@_LG#D%6)Y8M5"(M%#(M(#&:+0CAFB0&+0CR)002+0D`/KT)$
+MB4$(BT)`B4$,BT)(B4$0BX*4````BT`HP>`,B4$4,<#)PXGV58GE5E.+=0B+
+M30R+010#01"+5D`/KU9$.=!_+(M9$(G8F?=^/(M&/"G0.4$4?QG_<03_<13_
+M<0Q3C48X4(M&7/_0,<#K!XGVN#,```"-9?A;7LG#58GE4XM="(M-#(M!%`-!
+M$(M30`^O4T0YT'\1BT$0F?=[/(M#/"G0.4$4?@BX,P```.L<D/]Q!/]Q%/]Q
+M#/]Q$(U#.%"+0V#_T(7`=0(QP(M=_,G#58GE@^P$5U93BUT(BTT,BT$4`T$0
+MB47\BW-`#Z]S1(GPF?=[/(G'.7W\?@BX,P```.L?D/]Q%/]Q$(U#.%"+0V3_
+MT(G!A<EU!S'`ZP6-=@")R(UE\%M>7\G#B?95B>575E.+?0R#/0``````=0WH
+MM0$``(7`#X6C`0``BP<[!0````!R"[@4````Z8\!``"0BP>-%,"-%%"---4`
+M````:@%6Z*GX__^#Q`B%P`^%;`$``(-]"`]W5(M-"/\DC1@```")]O8&`71K
+M5N@Y_O__@\0$ZV#V!@AT"[L?````Z3$!``"0]@8!=0]6Z.G]__^)PX/$!.L$
+MB?8QVX7;=#96Z`3^__^#Q`3I]0```/8&"'08=!:+10A(@_@/=PC_)(58````
+MD/8&`G4+NS<```#IX0```)"#?0@0#X>^````BTT(_R2-F````%;H'OG__^LR
+M5NC6]___ZRK_=PS_-^C\____@\0$4.C\____Z8,```!75NC9^O__ZWJ-=@!6
+MZ(;X__^)PX/$!.MXC78`5U;HW?K__^M>C78`5U;HY?O__^M2C78`5U;H-?S_
+M_^M&C78`5U;H<?S__^LZC78`5U;HA?S__^LNC78`5U;H1?W__^LBC78`5U;H
+M??W__^L6C78`5U;HQ?W__^L*C78`5U;H#?[__XG#@\0(ZP>)]KL!````A=MU
+M#VH`5NA#]___B</K"XUV`&H`5N@T]___B=B-9?1;7E_)PXGV58GE5E.#/0``
+M````#X61````O@`````QVXUV`%/H_/___XF&E````(D8Q@8`@\0$0X'&F```
+M`(/[!W;@QP4``````0```.C\____QP4``````````.C\____A<!U1^C\____
+MA<!T#>L\C78`N!\```#K,I`QV[X`````.QT`````<R"0C48T4.C\____@\0$
+MA<!UV$.!QI@````['0````!RX3'`C67X6U[)PU6)Y5=64[X`````,?\[/0``
+M``!S2HUV`&H!5NA<]O__@\0(A<!U*5;H*_;__U;H`?S___^VE````.C\____
+MC5XT4^C\____4^C\____@\041X'&F````#L]`````'*YQP4``````````(UE
+M]%M>7\G#D)"058GEBT4(#[=5#(M((-/BB=#)PY!5B>6#[`Q75E.+=0B+30QF
+MB4WV@WXT`'1[#[?9BT8T9H$\F*W>=4QF@7R8`JW>=4-J!&H(C47X4%-6Z*W_
+M__^#Q`B#P`A0C49<4(N&@````/_0BU8TC47XBWWX9@MX!&:)/)J+5C1FBT@"
+M9@M(!F:)3)H"#[=5]HM&-&:+!)"+?1!FB0>+1C1FBT20`HM-%&:)`>M$:@1J
+M"(U%^%`/MT7V4%;H1?___X/$"(/`"%"-1EQ0BX:`````_]"-1?B+3?AF"T@$
+MBWT09HD/9HM(`F8+2`:+?11FB0^-9>A;7E_)PU6)Y8/L%%=64XM="(M%$(MU
+M#&:)1?*+?11FB7WL9HE%^(U5^&:)0@2)^<'A$(M%^"7__P``B47X"4WXBT($
+M)?__``")0@0)2@1J!&H(4@^WQE!3Z+3^__^#Q`B#P`A0C4-<4(N#A````/_0
+M@\04A<!U3(-[-`!T%@^WQHM3-&;'!(*MWHM3-&;'1(("K=Z-1?90C47T4`^W
+MQE!3Z(#^__]FBWWR9CM]]'4)BWWL9CM]]G0)N!T```#K!(GV,<"-9>!;7E_)
+MPXGV58GE@^P$BTT(#[=5#(M!+(`\`@!]%HU%_E"-1?Q04E'H,_[__P^W1?[K
+M!I"X__\``,G#D%6)Y8M%"(M5#(G1P>D+BT`X#[8$`<'J"(G1@^$'T_B#X`,/
+MMH`(````R<.058GE5U93BWT(BW4,BET0@W\X``^$C````(GRP>H+BT<XB@P"
+M#[;#@_A5=!1_!H7`=!;K&#W_````=`GK#XUV`+("ZPJR`^L&,=+K`K(!B?#!
+MZ`B#X`>#^`)T'7<'A<!T#^LWD(/X!'0;@_@&="+K*H#A_`C1ZR.0@.'SB-#`
+MX`+K%HGV@.'/B-#`X`3K"HGV@.$_B-#`X`8(P8GRP>H+BT<XB`P"C67T6UY?
+MR<.-=@!5B>6#[`175E.+=0B+?0R#?C@`=!=75N@(____B$7^@\0(/!%T!@^V
+M1?[K.6H$:@*-1?Y0C4<&4(U&7%"+AH````#_T(U=_HI%_@I#`27_````4%=6
+MZ/;^__^*1?X*0P$E_P```(UE\%M>7\G#C78`58GE@^P(5U93BWT(BT4,,=+W
+M=QC!X@F)5?S'1?C_____#[?0BT<P9HL<4&:!^___=$B)]@^WPU!7Z(;\__^+
+M3?R--`%65^A%____@\00//]T*#P1=`['1?C_____A,!T`XEU^`^WPU!7Z!+^
+M__^)PX/$"&:!^___=;J+1?B-9>Q;7E_)PXUV`%6)Y8/L!%.+70AJ!&H$C47\
+M4`^W10Q04^@?_/__@\0(!0@$``!0C4-<4(N#@````/_0BT7\9@M%_B7__P``
+MBUWXR<.058GE@^P(5U93BUT(BW40BWT4:@1J"(U%^%`/MT4,4%/HT_O__X/$
+M"`4(`@``4(U#7%"+@X````#_T(M5_&8+5?YFB1:+1?B)!XUE[%M>7\G#C78`
+M58GE@^P(5U93BW4(BTT0BWT4BUT,C57X9HE*!,'A$(M"!"7__P``B4($"4H$
+MB7WX:@1J"%(/M]M35NAE^___@\0(!0@"``!0C49<4(N&A````/_0C67L6UY?
+MR<-5B>575E.+70B+50RX`0```(72=`;V0A0"=0VX&@```.FI````C78`C7M<
+MB=;\N0T```#SI<=#+`````#'0S``````QT,,`````#M#8'T+D/]##`'`.T-@
+M?/:+2PR)2R"+0V@/KT-DT_AFB4,<#[?0@<(``@``N`$```#3X#G"=B2^`0``
+M`(GV_T,@9L%K'`$/MU,<@<(``@``BTL@B?#3X#G"=^/'`P$```#'0SS_____
+M_W-XZ/S___]0Z/S___^)@Y````!FQT,J```QP(UE]%M>7\G#B?95B>53BUT(
+M#[=#'%#H_/___XE#+`^W0Q`!P%#H_/___XE#,(-[+`!T!(7`=0>X/P```.L"
+M,<"+7?S)PY!5B>6#[`A64XMU"`^W70R+1BS&!`-KC47\4(U%^E!35N@7_O__
+M_W7\:@!35NA?_O__C67P6U[)PU6)Y8/L$%=64XMU"(M]#`^WSXM&+(`\`?]T
+M(8H$`21_/$!V#+@=````Z?D```")]@^WUXM&+(`\`O]U!&;_3@@/M]^+1BR`
+M)`.`BT8L@`P#:HU%_%"-1?I04U;HI/W__X/$$(-^-`!T$XM&-&;'!)BMWHM&
+M-&;'1)@"K=X/M]^+3B#3XP^WQT#3X#G#<RL/M\=`B47TC78`:/\```!35NAT
+M^___@\0,@<,``@``BTX@BT7TT^`YPW+?BT8,BTX@*<&X`0```-/@4`^WUXE5
+M\(G0T^!0C49<4(N&B````/_0B<.#Q`R%VW0/BU7P4E;HU?[__XG8ZS"0_T7\
+M=0?'1?P!````_W7\:&D\```/M]]35NA"_?__A<!U#8M&+,8$`_]F_T8(,<"-
+M9>1;7E_)PY!5B>6#[`A75E.+70B+=0S_=11H``(``/]U$%:->UQ7BX.$````
+M_]")1?B#Q!2#^!UU,F:+1?ZT`&:)1?Z`3?\1QD7^$6H15E/HF_K__VH$:@*-
+M1?Y0C48&4%>+@X0```#_T.L):E564^A[^O__BT7XC67L6UY?R<-5B>6#[`A7
+M5E.+=0B_`@```(M&>,=`'`$```!J`F@``@``_[:0````BU4,4HU>7%.+AH``
+M``#_T(/$%(/X&75-:@1J"(U%^%"+50Q24XN&@````/_0:@1J"(U%^%"+51!2
+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
+M5U;HY/W__X/$#$.#^P-^VXUE]%M>7\G#C78`58GE@^P05U93BUT(BWT,@SL`
+M=`RX%P```.D6`0``B?:+=1"-!#X[0R1V&;@;````Z?\```"-=@"X'P```.GR
+M````B?;'1?@`````Z=8```!74^@Q\/__B47P@\0(@_C_#X2Y````B?@QTO=S
+M&&:)1?8/M\B+0S`/MQ1(BT,L@#P"_W0HB@0")'\\0'8?45/H6/?__X/$"(7`
+M#X65````5U/HXN___XE%\(/$"&:+1?ZT`&:)1?[&1?X`:@"+=?!64^BB[O__
+M:@1J`HU%_E"+1?"#P`90C4-<4(N#A````/_0BTL@T^Z)\0^WT8M#+(/$((`\
+M`@!]"P^W5?:+0S!FBPQ09HMU]F8Y<RIV$P^WT8M#+/8$`G\/A!S____^#`+_
+M1?A'_T-0BW40.77X#X(>____,<"-9>1;7E_)PU6)Y3'`R<.058GEBT4(BT`D
+MR<.058GE4XM="(-[+`!T"_]S+.C\____@\0$@WLP`'0+_W,PZ/S___^#Q`2#
+M>S0`=`O_<S3H_/___X/$!(-[.`!T"/]S..C\____BUW\R<.-=@!5B>6#["A7
+M5E.+50B+71"-!-*-!(*--(4@````:@YJ`(U%\%#H_/___\=&-`````#'1C@`
+M````4U;H)O#__X/$%(7`#X62`P``BT44C4Y<B0AFQT8$``!F@WX<`'12C5WP
+MC78`:@!J#E,/MT8$4%;H..O__X/$"%"-1EQ0BX:`````_]!J!FC<````4^C\
+M____@\0@A<!T#F;_1@1FBT8$9CM&''*^9HM&!&8[1AQR#+@:````Z2$#``")
+M]F:+1@1`9HE&!F8[1AQS48U=X(GV:@!J#E,/MT8&4%;HS.K__X/$"%"-1EQ0
+MBX:`````_]!J!FC<````4^C\____@\0@A<!T#F;_1@9FBT8&9CM&''*^9HM&
+M!F8[1AQR!F;'1@;__V:+1?9FB48<BT7X9HE&'HU%^E#H_/___\'H"8E%W(E&
+M)&:+1AYF`48<N@$```"+7B")T(G9T^!(B484@\/WB=G3XHE6&(M]W(U$.O\Q
+MTO=V&&:)1A"+?B33[XE]W`^W3=P/MT8<#[=6'BG0@\0$.<%^#+@7````Z3T"
+M``")]E;HEN___X/$!(7`#X4J`@``QP8`````:@(/MT8<4/]V+`^W1@105NC@
+MZ?__@\0(!0`"``!0C49<4(N&@````/_0B478@\04A<!T$5;HO_W__XM%V.GB
+M`0``C78`,=MF.UX0<Q0/M].+1C!FQP10__]F0V8[7A!R[#';9CM>''-"9CM>
+M'G(89CM>!'029CM>!G0,#[?3BT8L@#P"_W0<#[?3BT8L@#P"_W0&Q@0":^L*
+M#[?3BT8LQ@0":F9#9CM>''*^,=MF.UX<<RZ)]@^WTXM&+(H$`@26/`%V%5)6
+MZ%[X__^)1=B#Q`B%P`^%6____V9#9CM>''+49L=&"```9HM>'F8[7AQS,`^W
+MPP-&+(`X$'0%@#B0=1`/M\-05N@^\___@\0(ZPF0@#CO=0/&`/]F0V8[7AQR
+MT&;'1@@``&:+7AYF.UX<<QF+5BR0#[?#@#P0_W4$9O]&"&9#9CM>''+K9HM&
+M'F:)1BC'1E``````QT9,`````,=&2`````#'1E@`````QT94`````(M]#(DW
+MQT<$L!L``,='"%0?``#'1Q2X'P``QT<@_"```,='&/0@``#'1QP((0``QT<,
+M`````,='$``````/MT8<P>`"4.C\____B48T@\0$A<!T)C';9CM>'',>#[?#
+MBU8T9L<$@JW>BU8T9L=$@@*MWF9#9CM>''+B#[=&'(M.((/!]=/@4.C\____
+MB<*)5CB#Q`2%TG05#[=&'(M.((/!]=/@4&I54NC\____,<"-9<Q;7E_)PY!5
+MB>564X,]``````!^"KAF````ZU:-=@"+-0````"-%/4`````N`````#'!`)8
+M(0``QT0"!`````#_!0`````QTKM,````N5````"0C032C02"P>`"QP08````
+M`,<$"`````!"@_H'=N,QP(UE^%M>R<.0D%6)Y8M-"(M5#(G0P>@(B$$!B!')
+MPXUV`%6)Y8M%"&8/ME`!9L'B"&8/M@`!P@^WPLG#B?95B>564XMU"(M=#`^W
+MPU!6Z+?____!ZQ!3@\8"5NBJ____C67X6U[)PXUV`%6)Y593BUT(4^BJ____
+MB<:#PP)3Z)____\/M];!X!`!PHG0C67X6U[)PY"058GEN`$```#)PXGV58GE
+MR<.-=@!5B>7)PXUV`%6)Y3'`R<.058GER<.-=@!5B>7)PXUV`%6)Y3'`R<.0
+M58GE,<#)PY!5B>7)PXUV`%6)Y5=64XM]#(,]``````=V"KAF````Z:T````Q
+M]H,]``````</AY$```"0_S4`````Z/S___^)PXDS:@)3Z/S___]7BU4(4O\S
+MZ/S___^)0RB#Q!B%P'1CQT4(`````#'_QT-`/"8``,=#1$@F``#'0TA0)@``
+MQT-,6"8``,=#4&`F``#'0U1H)@``QT-8<"8``,=#7'@F``#'0V``````QT-D
+M@"8``$;_!0````"#/0`````'#X9P____A?9T!#'`ZP6X/````(UE]%M>7\G#
+MD)"058GEBU4(BT(8BT`HQH`&$````(M"&(M`*,:`!A````K)PXGV58GEBU4(
+MBT(8BT`HQH`&$````(M"&(M`*,:`!A```"K)PXGV58GEBT4(BT`8BT`HQH`&
+M$````LG#C78`58GE@^P$5E.+=0C&1?\`BT88]D`<"'0L,<F)PXM#*(I5_XJ`
+M!A````#"B%7_08/Y`7[IBT88BT`HBH`&$```ZRZ-=@`QR8M>&(UV`(M#*(I5
+M_XJ`!Q````#"B%7_08/Y`7[IBT88BT`HBH`'$```)(`E_P```(UE]%M>R<.-
+M=@!5B>575E.+70B+=0R+31#V0Q4!=3>+?13WQP0```!T)(L1@>+_`0``QP90
+M````@_H'=PF!`0`!``#K;Y"#`?CK:8UV`,<&`````.M>BT,89HLY9B-X"(GX
+M#[?0*1&+?13WQP0```!T!H'"``(``(M#&`^W0`HYPG,+QP8`````ZQV-=@"+
+M0Q@/MT`&.<)S"<<&`0```.L'D,<&4````(M#&`^W0`I((<(!$8UE]%M>7\G#
+MB?95B>6#[`164XMU",9%_P`QR8M>&(M#*(I5_XJ`(!````#"B%7_08/Y`W[I
+MBT88BT`HBH`$$```B$7^,<F+7AB0BT,HBE7_BH`@$````,*(5?]!@_D!?NF*
+M1?[`Z`<T`27_````C67T6U[)PY!5B>564XMU"#';B?96Z(+___^#Q`2%P'4'
+MN`$```#K"T.!^R]U``!^XS'`C67X6U[)PXGV58GE@^P$4XM-"(M5#,9%_P"+
+M01B+0"B(D`00```QVXM)&(GVBT$HBE7_BH`@$````,*(5?]#@_L#?NF+7?C)
+MPU6)Y8/L!%93BW4(BUT,QD7_`&H(5NBF____BT88BT`HB)@%$```,<F#Q`B+
+M7AB)]HM#*(I5_XJ`(!````#"B%7_08/Y`W[I:AE6Z''___^-9?1;7LG#B?95
+MB>6+30B+01B+4"B*@@$0``"$P'4;QH("$```A8M!&(M`*,:``A```(6+01C&
+M0!4`R<.058GE4XM%"(M=#&H`_W`<Z/S___^(F`(0``"(F`(0``"+7?S)PXUV
+M`%6)Y8/L!(M5#(J"`!```#PP=16*@@80``"(1?^*1?^*D@80``#K$Y"*@@<0
+M``"(1?^*1?^*D@<0```PT(A%_HI%_J@$=`8QP.L'B?:X`0```,G#D%6)Y8M5
+M#,:"`A```(3&@@(0``"$QH("$```A<:"`A```(6*@@`0```\('0*BH(`$```
+M/#!U%E+_=0CH;?___X7`=0FX`0```.L$B?8QP,G#58GE@^Q(4XM=##'2C4VX
+MD(H$&H@$"D*#^D=^](!]N%5U1H!]N:IU0(!]NA!U.FH,:.(```"-1;]0Z/S_
+M__^%P'4*N#````#K(8UV`(!]^%5U%H!]^:IU$(!]^A!U"K@@````ZP6-=@`Q
+MP(M=M,G#D%6)Y8/L!%=64XM]#(7_=3"#?1``=2J+/0P```"+#1````")31#K
+M,I")WXV/`"```(D-%````(GXP>@,Z5L!``")/0P```"+31")#1````#'!10`
+M````````@ST4``````^%*`$``(M-$(D-%````)"A%`````4`X/__HQ0````Y
+M^'(I4(M-"%'H`____X/$"(7`=-R+'10```#&@P(0``"$QH,"$```A.O&B?:+
+M31")#10```"-=@"A%`````4`X/__HQ0````Y^')54(M-"%'HN_[__XG&@\0(
+MA?9TVHL=%````,:#`A```(7&@P(0``"%4XM-"%'H\/W__X/$"(7`=;6Z!1``
+M`(/^,'4%NAL0``"A%````,'H#8@$&NN9D(D]%````.MF_S44````BTT(4>A9
+M_O__B<:#Q`B%]G1$BQT4````4XM-"%'HG/W__X/$"(7`=2VZ!1```(/^,'4%
+MNAL0``"*!!H/MM"+'10```")V,'H#27_````.<(/A*3^__^!!10`````(```
+MBTT0.0T4````<H\QP(UE\%M>7\G#D%6)Y593BW4(BT8(#Z]&$$B+70PAP_9&
+M%0%T#XG8P>@)P>`(#[;3B<,)TVH55N@B_/__BT88BU`HBT`DB!P0BT88BT@H
+MBU`DB=C!Z`B(!`J+1AB+2"B+4"2)V,'H$(@$"HM&&(/$"/9`'`AT"HM`*,:`
+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
+M&0```%;HY?+__X/$!&H85NC&]/__BT7DC6786UY?R<.-=@!5B>6#[`A75E.+
+M=12+?1B+31")3?S'1?@``@``]\<$````=`?'1?@(````BTT(4>@<]?__#[=%
+M#(M5^$HAT(M=^"G#@\0$A?9^/HGV.?-^`HGS@?L``@``=`.#Y_V)^%!3BTW\
+M48M-#%&+30A1Z`K^__^#Q!2%P'41*=X!70P!7?R+7?B%]G_$,<"-9>Q;7E_)
+MPXGV58GE@^P05U93BW4(QT7X`````(M=#`^O7@2)7?S_=ASH_/___XG'@\0$
+MA?]T"K@3````Z60!``"+50P#51"+1A@/MT`.#Z]&##G"?@NX'0```.E%`0``
+MD%;H7O3__XG8BTX8,=+W<1B)PXA=\P^V7?-##Z]9&(G8F?=^!(G#BTT,`TT0
+M@\0$.=E^1RM%#(M5$"G"4E-6Z&7___^)QX/$#(7_="CI\P```(UV`,=%^!T`
+M``!H_P```%;HFO?__U;H+//__X/$#.FV````*UT,B5T0C47\4%;H'/C__S'_
+M@\0(.WT0#XV8````B?:+1AAFBU@29@^O70QH_P```%;H5??__U;HY_+__VI@
+M5NA']___:A56Z`OS__^+1AB+4"B+0"2('!"+1AB+4"B+0"1FP>L(B!P0BUX8
+M@\0<]D,<"'0*BT,HQH`>$````&H15NC1\O__:-````!6Z/KV__]6Z(SR__]6
+MZ.+X__^#Q!BH`0^%-____T?_10P[?1`/C&K___^#??@`=1%6Z+[X__^H`70'
+MQT7X'0```(M%^(UEY%M>7\G#58GEBT4(C12`C110C025P`0``,G#C78`58GE
+M4XM="&H`_W40BT,8_W`@_W4,4^B5_?__BT,<QT`<`0```(M#&(M`((M=_,G#
+M58GE@^P$5E.+30B*70R)WHI=$(A=_XM1&(!Z%0`/A<D!``"#?10`#X6_`0``
+MB?`E_P```&:)`HM1&&8/ML-FB4("BT$89L=`$A``B?`E_P```#V8````#X33
+M````/>P````/A:@!```/ML,]XP```'16?Q2#^&1T,H/X<P^$A@```.F)`0``
+MD#WF````=%E_#SWE````=##I<P$``(UV`#WJ````#X5E`0``9L<!9.R+01AF
+MQT`$``''00@``"``Z4$!``"-=@!FQP'E[(M!&&;'0`0``L=!"```0`"`214!
+MZ2`!``")]F;'`>;LBT$89L=`!``"QT$(``"``(!)%0'I``$``(GV9L<!<^R+
+M01AFQT`$``+'00@````!@$D5`8M!&&;!8!(!Z=@```")]@^V1?^#^',/A(<`
+M``!_$8/X9'0O@_AK=$/IP@```(GV/>8```!T47\//>4```!T+.FK````C78`
+M/>H````/A9T```!FQP%DF(M!&&;'0`0``<=!"```(`#K6XGV9L<!Y9B`214!
+MBT$89L=`!``"QT$(``!``.L^D&;'`>:8@$D5`8M!&&;'0`0``L=!"```@`#K
+M(I!FQP%SF(M!&&;'0`0``L=!"`````&`214!BT$89L%@$@&`214"ZQN0B?`E
+M_P```(M1&&8[`G459@^V1?]F.T("=0JX`0```.L%C78`,<"-9?1;7LG#C78`
+M58GE@^P$5U93BUT(QD7_`&B0````4^@U]/__:AU3Z/GO__^+0QB+4"B+0"3&
+M!!``BT,8@\00]D`<"'0*BT`HQH`>$````&H94^C.[___:@KH_/___XM#&(M0
+M*(I%_XJ2#1````#0B$7_,<F#Q`R+<QB-=@"+1BB*5?^*@"`0````PHA5_T&#
+M^0%^Z8M#&(M0*(M`)(H4$(A5_FH*Z/S___^+0QB+4"B*1?^*D@T0````T(A%
+M_S')@\0$BW,8C78`BT8HBE7_BH`@$````,*(5?]!@_D!?NF+0QB+4"B+0"2*
+M!!"+?0Q7)?\```!0#[9%_E!3Z.S\__^#Q!"#^`%T"#'`Z8(```"0_T,,:A!3
+MZ`GO__^+0QB`>!4`=6B#?0P`=6)FQT`*``&+4QAFBT($9HE"!O9#%0%T"XM#
+M&&;'0`P0`.L)BT,89L=`#`@`BT,89HMX!D]FB7@(BTL8#[=!$@^W408/K\*)
+M0P2+0PB9]WL$9HE!#HM#&&:+4`QF`U`&9HE0$+@!````C67P6UY?R<.-=@!5
+MB>6#[!!75E.+=0C'1?@`````QD7S`/]V'.C\____B<*-!)*-!$*-!(7`!```
+MB488_W8<Z/S___]0Z/S___^)PHM&&(E0(&B%````5N@"[___:A#_=ASH_/__
+M_VIX_W8<Z/S___^+1AC'0!@!````BT88QD`4!(M&&,9`%03'1@P`````QT8(
+M```@`,=&$`$```"#Q"1J`/]V'.C\____B<*+1AB)4"B+5AB+0BB#Q`B*@``0
+M```\,'41@$H<"(M&&,=`)``(``#K"Y"+1AC'0"0`&```C47X4%;H?/+__XM6
+M&(/$"/9"'`AT'(M"*(J`!A```(A%_XM2*(I%_XJ2!A```.L=B?:+5AB+0BB*
+M@`<0``"(1?^+4BB*1?^*D@<0```PT(A%_HI%_J@$#X1U`0``BT88BT`HBH``
+M$```OQ`````\,'4%OP(```"+1AC&0!4`BT88B<*`>!4#=T&0B="+4"B*0!6(
+M@@,0```QVSG[?1T/ML-05NA*[?__:/\```!6Z#/Q__^#Q!!#.?M\XXM&&/Y`
+M%8M6&(!Z%0-VP(M&&,9`%0"+1AB+4"B*0!6(@@,0``!J&%;HRNS__\9%\@"#
+MQ`B-=@`QVSG[?7&)]HM%^(E%](U%]%!6Z'SQ__]35NB%_/__@\00@_@!=2F*
+M3?+^P8A-\X!]\@!U#8M&&(M6"`^O5A`!4!B+1@@/KT80`47XZR2)]H!]\@!U
+M%HG?BU88B=@/KT8(#Z]&$(E"&.L(B?:)^\9%\@1#.?M\D?Y%\H!]\@-V@(M&
+M&,9`%0"+1AB+4"B*0!6(@@,0``"#?@P`=$3'1?@`````C47X4%;HY_#__XM&
+M&(I-\XA(%%;H&.K__\=&*,`R``#'1BQL-0``QT8DV#0``,=&("@W``"`3A0"
+M,<#K!;@:````C67D6UY?R<.-=@!5B>6#/0``````?R2+%0````"-!)4`````
+MQX``````"#L``/\%`````#'`ZPB-=@"X9@```,G#D%6)Y8/L.%=64\=%R```
+M``"+30A1Z/S___^)PK\:````C47,4%+H_/___XG&@\0,A?9T"8/^&@^%M0``
+M`(M-#,=!)``````QVSL=`````'U"A?]T0K@`````@WS8!`!T*8T4W0````")
+MQXU%R%`QP(7V=0.-1<Q0BTT,48M-"%&+!#K_T(G'@\000SL=`````'R^A?]U
+M68-]R`!T#(M%R%"+0##_T(/$!(-]$`!T03';.QT`````?3>^`````(UV`(T$
+MW0````"#?#`$`'48:@!J`(M-#%&+30A1BP0P_]"#Q!"%P'0)0SL=`````'S1
+MB?B-9;Q;7E_)PXUV`%6)Y3'`R<.058GE4XM-"(M=#&8/MA&*00$D`V;!X`@)
+MPF:)$P^^40&!XOP```#!^@**00(D#V:89L'@!@G09HE#`@^^40*!XO````#!
+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
+M`'085FB0````BT40`=A05XM-#/_1@\00ZP60Q@0SD(7;=0B*#HA-_.LMD(H$
+M,SI%_'4'B@8X1?MT'8I%_&;!X`B*%#-F#[;2"=!FB0>*3?J(##/K#HGVBDWZ
+MB`PS0X/[#GZ(C4/_A=AT"6;'!P``ZP6)]HE?$(UE[%M>7\G#D%6)Y8/L!%=6
+M4XM]",9%__^#?0P`=`3&1?_P:@"+31!15XM'(/_0B<:#Q`R#?0P`=!-6:)``
+M``!J`%>+30S_T8/$$.L#Q@:0QT<,`````(GV:@"+1PP/KT<(`T404%>+1R#_
+MT(G&@\0,@W\,`'X:B@:)PF;!X@B+1Q"*!#`E_P````G"9CL7='2#?PP`#Y3`
+M#[;8.U\0?5*0@WT,`'0>5FB0````BT<,#Z]'"`-%$`'84%>+30S_T8/$$.L$
+MQ@0SD(H$,XG"9L'B"(G8`T<0B@0P)?\````)PF8[%W4?BDW_B`PS0SM?$'RO
+MBT<0`4<,@7\,SP<```^.5/___VH`BTT045>+1R#_T(G&BDW_B`XQP(-_#`!U
+M!;@:````C67P6UY?R<-5B>6#[`A3BT4(:@#_<!SH_/___XG#BA.(5?LQR832
+M=0*Q_\=%_`````"+1?R(#!B+1?R*!!@/MM`/OL$YPG0$,<#K#HM%_(I5^X@4
+M&+@!````BUWTR<.058GE5U93BT4(BW4,OQH```")1AQ6Z([___^#Q`2%P'5[
+M9L<&``#'1A0`````QT8@'$D``,=&)#!)``#'1BA<20``QT8L:$D``,=&,'1)
+M```QVSL=`````'T>B?:%_W0<5HL$G0````#_T(G'@\0$0SL=`````'SDA?]U
+M!#'`ZR''1@@``!``QT8$`!```,=&#`$```#'1A`!````N!H```"-9?1;7E_)
+MPY"0D%6)Y8M%"(L`R<.)]E6)Y8M%"(T40(T4D(T$U2`&``#)PXUV`%6)Y8M5
+M"(T$E0````"+@&`)``#)PXUV`%6)Y8M%"%"+0%S_T,G#B?95B>564[L@!@``
+M,?8[-0````!S=&CZ````4^CM````:A!3Z,T```!J`E/H]0```,=#"`````!H
+M$`(``.C\____B02U8`D``(/$'(7`=0JX/P```.LUC78`4XM#3/_0@\0$A<!U
+M)5.+0TC_T,=#%`````#'0PP`````@\0$1H/#:#LU`````'*,,<"-9?A;7LG#
+MC78`58GEBT4(BT`LR<.058GE5U93BW4(BWT,@7XL_W\``'4)5HM&4/_0@\0$
+MBT8T]]B)^R'#P>L,.5XL=!%35HM&5/_0B5XLQT8<`0```(M&-$@A^`-&,(UE
+M]%M>7\G#C78`58GEBU4(BT4,B4(\QT(L_W\``,G#C78`58GEBU4(BT4,B4(X
+MQT(L_W\``,G#C78`58GEBT4(BU4,P>(,B5`TBU`HP>(,B5`PQT`L_W\``,G#
+MC78`58GEBT4(@WT,`'4(4.AN````ZP['0"S_?P``QT`<`0```,G#58GE4XM=
+M"/]##(-[%`!U%U.+0T3_T(/$!(-[(`!T"/]S)(M#(/_0QT,4`@```(M=_,G#
+MD%6)Y8M%"(-X#`!^`_](#,G#C78`58GEBT4(BU4,BTT0B5`@B4@DR<-5B>6+
+M10B#>!``=4>#>!@"=0K'0!@!````ZPZ0@W@8`74'QT`8`````(-X#`!U)(-X
+M%`)U"\=`%`$```#K%8GV@W@4`74-QT`4`````%"+0$C_T,G#C78`58GEBT4(
+M@WA@`'0)_W4,4(M`8/_0,<#)PXUV`%6)Y5.+70AJ`%/H5?[__U/H3____VH`
+M4^CO_O__4XM#9/_0BQN-!)T`````_[!@"0``Z/S___^+7?S)PTTM4WES=&5M
+M<R!$:7-K3VY#:&EP`````(`*``#("@``R`H``,@*``"`"@``@`H``,@*``#(
+M"@``R`H``,@*``#("@``D`H``)`*``"0"@``D`H``/`*``#P"@``\`H``/`*
+M``#@"@``X`H``/`*``#P"@``X`H``/`*``#P"@``X`H``.`*``#@"@``X`H`
+M`.`*``#P"@``!`L```P+``#!"P``N`L``+@+```X"P``2`L``%0+``!@"P``
+M;`L``'@+``"$"P``D`L``)P+``"H"P``%`L``"P+``!!3D%.1``H0RE-+5-Y
+M<W1E;7,````````````````````15?\`@`P````/``````!550`````!``,`
+M!P`/`!\`/P!_`/\`````````````````````````````````````````````
+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`````````````````````````$=#0SH@*$=.52D@96=C<RTR+CDQ+C8V(#$Y
+M.3DP,S$T("AE9V-S+3$N,2XR(')E;&5A<V4I``!'0T,Z("A'3E4I(&5G8W,M
+M,BXY,2XV-B`Q.3DY,#,Q-"`H96=C<RTQ+C$N,B!R96QE87-E*0``1T-#.B`H
+M1TY5*2!E9V-S+3(N.3$N-C8@,3DY.3`S,30@*&5G8W,M,2XQ+C(@<F5L96%S
+M92D``$=#0SH@*$=.52D@96=C<RTR+CDQ+C8V(#$Y.3DP,S$T("AE9V-S+3$N
+M,2XR(')E;&5A<V4I``!'0T,Z("A'3E4I(&5G8W,M,BXY,2XV-B`Q.3DY,#,Q
+M-"`H96=C<RTQ+C$N,B!R96QE87-E*0``1T-#.B`H1TY5*2!E9V-S+3(N.3$N
+M-C8@,3DY.3`S,30@*&5G8W,M,2XQ+C(@<F5L96%S92D``$=#0SH@*$=.52D@
+M96=C<RTR+CDQ+C8V(#$Y.3DP,S$T("AE9V-S+3$N,2XR(')E;&5A<V4I``!'
+M0T,Z("A'3E4I(&5G8W,M,BXY,2XV-B`Q.3DY,#,Q-"`H96=C<RTQ+C$N,B!R
+M96QE87-E*0``1T-#.B`H1TY5*2!E9V-S+3(N.3$N-C8@,3DY.3`S,30@*&5G
+M8W,M,2XQ+C(@<F5L96%S92D``$=#0SH@*$=.52D@96=C<RTR+CDQ+C8V(#$Y
+M.3DP,S$T("AE9V-S+3$N,2XR(')E;&5A<V4I``!'0T,Z("A'3E4I(&5G8W,M
+M,BXY,2XV-B`Q.3DY,#,Q-"`H96=C<RTQ+C$N,B!R96QE87-E*0``1T-#.B`H
+M1TY5*2!E9V-S+3(N.3$N-C8@,3DY.3`S,30@*&5G8W,M,2XQ+C(@<F5L96%S
+M92D``$=#0SH@*$=.52D@96=C<RTR+CDQ+C8V(#$Y.3DP,S$T("AE9V-S+3$N
+M,2XR(')E;&5A<V4I``@``````````0```#`Q+C`Q````"``````````!````
+M,#$N,#$````(``````````$````P,2XP,0````@``````````0```#`Q+C`Q
+M````"``````````!````,#$N,#$````(``````````$````P,2XP,0````@`
+M`````````0```#`Q+C`Q````"``````````!````,#$N,#$````(````````
+M``$````P,2XP,0````@``````````0```#`Q+C`Q````"``````````!````
+M,#$N,#$````(``````````$````P,2XP,0````@``````````0```#`Q+C`Q
+M`````"YS>6UT86(`+G-T<G1A8@`N<VAS=')T86(`+G1E>'0`+G)E;"YT97AT
+M`"YR;V1A=&$`+G)E;"YR;V1A=&$`+F1A=&$`+F)S<P`N8V]M;65N=``N;F]T
+M90``````````````````````````````````````````````````````&P``
+M``$````&`````````#0````X3P`````````````$`````````"$````)````
+M``````````"D9```D`8```H````!````!`````@````K`````0````(`````
+M````;$\``.\```````````````0`````````,P````D``````````````#1K
+M``"(`0``"@````,````$````"````#\````!`````P````````!@4```(`4`
+M````````````(`````````!%````"`````,`````````@%4``(`)````````
+M`````"``````````2@````$``````````````(!5``#+`@`````````````!
+M`````````%,````'`````````,L"``!+6```!`$``````````````0``````
+M```1`````P``````````````3UD``%D```````````````$``````````0``
+M``(``````````````(A;``!@!0``"P```$H````$````$`````D````#````
+M``````````#H8```NP,``````````````0``````````````````````````
+M`````````````````````P`!``````````````````,``@``````````````
+M```#``,``````````````````P`$``````````````````,`!0``````````
+M```````#``8``````````````````P`'``````#+`@````````,`"```````
+M```````````#``D``````````````````P`*``````````````````,`"P`!
+M````X$X``!D````"``$`&````+!,```.`````@`!`"D```!@30``40````(`
+M`0`O````K`,``!4````"``$`.@```!`F```J`````@`!`$<```#D)0``*0``
+M``(``0!2````1`````0````!``4`6P```$P````$`````0`%`&D```"83```
+M%0````(``0!T````!`````0````!``4`?0````A.```D`````@`!`(T```"T
+M!@``C`````(``0">````=$P```H````"``$`JP```,0(```+`````@`!`+P`
+M``#X/0``^0````(``0#$````M$T``!4````"``$`V````(A)``##`````@`!
+M`.@```!T3@``%`````(``0#]````P$P``)$````"``$`"P$``+P"```*````
+M`@`!`!<!``!0````!`````$`!0`?`0``/"4``'(````"``$`+@$``/Q.```\
+M`````@`!`#L!``!(````!`````$`!0!*`0``+$X``#,````"``$`5`$``&!.
+M```1`````@`!`&(!``"\2```7P````(``0!S`0``@$P``!4````"``$`?@$`
+M`.0+``"L`````@`!`(4!``"8*P``HP$```(``0"<`0``-`````0````!``4`
+MIP$``.@"```A`````@`!`+8!``#,30``%0````(``0#'`0``D`P``'$````"
+M``$`S@$``(A.``!5`````@`!`.`!``#()0``&@````(``0#I`0````````0`
+M```!``4`]P$``'0Y``"1`0```@`!``,"``"()@``T0````(``0`4`@``Y$T`
+M`"$````"``$`)`(``!@*``#*`0```@`!`"L"``"T`@``!0````(``0`W`@``
+ML"4``!4````"``$`/@(``,A+``"I`````@`!`$X"``!4````"`````$`!0!6
+M`@``#`,``)T````"``$`7@(``$`````$`````0`%`&X"``!@````P`0```$`
+M!0!S`@``Y$<``-4````"``$`?P(``"@K``!O`````@`!`(X"``#0`@``$```
+M``(``0"<`@``X`(```4````"``$`J0(``,`]```W`````@`!`+L"``!,2@``
+M)`$```(``0#'`@```````"X````"``$`W`(``%1-```+`````@`!`/`"```0
+M-P``%0````(``0#^`@``R`(```4````"``$`#`,``-@J``!0`````@`!`!L#
+M```P````!`````$`!0`D`P``]#X```<````"``$``````,L"`````````P`(
+M`"T#`````````````!`````Z`P`````````````0````10,`````````````
+M$````%(#``!$`@``<````!(``0!<`P`````````````0````:0,```P"```9
+M````$@`!`'0#``!D`0``IP```!(``0!_`P``*`(``!D````2``$`BP,`````
+M````````$````)@#`````````````!````"D`P``=````.X````2``$`KP,`
+M`#````!#````$@`!``!U<&1A=&53;V-K971087)A;65T97)S`&9L5W)I=&50
+M<F]T96-T960`9FQ-87``9FEN9%-E8W1O<@!F<F]M54Y!3$Q/3D<`=&]53D%,
+M3$].1P!M=&1486)L90!M>5]L;W=A9&1R97-S`&9L0G5F9F5R3V8`:6YI=$1O
+M;F4`9FQ3;V-K9713971"=7-Y`')E<&QA8V5&051S96-T;W(`9FQ3;V-K971.
+M;T]F`&1I<VUO=6YT3&]W3&5V96P`9FQ-;W5N=`!F;%-E=%=I;F1O=T)U<U=I
+M9'1H`&9L26YT96Q)9&5N=&EF>0!F;%-E=%!O=V5R3VY#86QL8F%C:P!F;$EN
+M:713;V-K971S`&9L5&%K94UU=&5X`&YO3V943',`9FQ296=I<W1E<DY&5$P`
+M9FQ%>&ET4V]C:V5T`&UY7VAI9VAA9&1R97-S`&9L3F5E9%9C8P!F;$1O;G1.
+M965D5F-C`&9L0VAE8VM!;F1&:7A%1$,`9FQ3;V-K971/9@!F;$EN:70`9FQ$
+M;V-7:6YD;W="87-E061D<F5S<P!N;T]F1')I=F5S`&1I<VUO=6YT5F]L=6UE
+M`&9L4V5T5VEN9&]W4W!E960`9FQ%>&ET`&9L26YT97)V86Q2;W5T:6YE`&9R
+M;VU53D%,`&9L37-E8T-O=6YT97(`<F5A9$9L87-H240`9FQ296=I<W1E<D1/
+M0U-/0P!F;%-E=%=I;F1O=U-I>F4`8F1#86QL`&9L1G)E94UU=&5X`'1O54Y!
+M3`!F;$ED96YT:69Y1FQA<V@`=&Q486)L90!S971"=7-Y`&1A=&%%<G)O<D]B
+M:F5C=`!V;VQS`&9L1&5C;V1E141#`&9L4&5E:T%T5VEN9&]W`&9L0W)E871E
+M375T97@`9FQ3>7-F=6Y);FET`&9L4F5G:7-T97)$3T,R,#`P`&9L26YT96Q3
+M:7IE`&9L4F5G:7-T97)#;VUP;VYE;G1S`&9L1V5T36%P<&EN9T-O;G1E>'0`
+M9V5T3D9$0S(Q5F%R<P!F;$1E;&5T94UU=&5X`&-H96-K5VEN1F]R1$]#`&YO
+M3V9-5$1S`&YO1F]R;6%T`&1O8S)K7VUE;7-E=`!D;V,R:U]F<F5E`&1O8S)K
+M7VUE;6-P>0!D;V,R:U]R=V4`9&]C,FM?;6%L;&]C`&1O8S)K7V]P96X`9&]C
+M,FM?<VEZ90!D;V,R:U]C;&]S90!D;V,R:U]M96UC;7``9&]C,FM?9&5L87D`
+M9&]C,FM?:6YF;P!D;V,R:U]P<F]B90``!`````)````-`````B$``!<````!
+M(P``'0````$3```B`````C(``#H````!$P``0`````$C``!&`````08``$P`
+M```!!@``5`````(H``!A`````2H``(D````"2@``F@````(T``"Y`````0,`
+M`(,!```"-```'P(```(T```[`@```C0``'\"```"-```CP(```(T``"?`@``
+M`C0``"$#```"'P``/0,```(6``!(`P```B0``(8#```")0``DP,```(6``"<
+M`P```C4``.$#```!.P````0```(:``!+!````3L``&H$```"&@``H00```$Z
+M``#7!````A```!H%```!.@``404```(O``"?!0```B\``+X%```"+P``:@8`
+M``$Z``"`!@```DP``)$&```"2@``T@8```$Z``"]!P```3H``"H(```!.@``
+M50@```$Z``!_"````A```*<(```"-P``(PH```$5```["@```2H``%<*```!
+M.P``>@H```$#``#;"@```0,````+```!`P``&@L```(G```C"P```@P``.L+
+M```!%0``]PL```$[```"#````B<``"(,```!%0``*PP```(_```Q#````2``
+M`#H,```"0@``0PP```(>``!;#````3L``&$,```!*@``;0P```(^``"!#```
+M`2H``)<,```!.P``GPP```$J``#*#````B(``-,,```"-0``V0P```)%``#I
+M#````2H``/$,```!%0``&0\```$%``!R$@```A@``'@2```"%```H1(```).
+M``"P$@```DX```D<```!.@``&2$```)+```J(0```DL``#LA```"2P``3"$`
+M``)+``!P(0```08``'TA```"2@``WR$```$#``#E(0```E(``$LB```!`P``
+M42(```)2``".(@```A```(PD```!`0``DR0```$!``":)````0$``*$D```!
+M`0``J"0```$!``"O)````0$``,HD```"3@``#"4```).```M)0```DH``$,E
+M```!(```5B4```$@``!B)0```3@``&DE```!`0``<24```%(``!W)0```2``
+M`'XE```!!@``@R4```$&``"3)@```2H``*@F```!*@``MB8```$J``"[)@``
+M`B<``,<F```",P``TR8```(I``#M)@```0$``/0F```!`0``^R8```$!```"
+M)P```0$```DG```!`0``$"<```$!```7)P```0$``!XG```!`0``+"<```$!
+M```S)P```2H``#DG```!*@``;"H```(.``!9*P```0,``&(K```"4@``L"L`
+M``$%``"V*P```04``,HK```!!0``VBL```$%``#C*P```04``.DK```!!0``
+M\RL```$%```#+````04```DL```!!0``$RP```$%```N+````04``$DL```!
+M!0``42P```$%``!;+````04``'@L```!!0``JRP```$%``"Z+````04``,(L
+M```!!0``VBP```$%```&+0```04``!XM```!!0``*RT```$%``!X+@```@X`
+M``$O```"3```*"\```),``!D+P```DP``)HO```"2@``\S````(-``!X,@``
+M`DP``)$R```!!0``@S0```),``"G-````B8``(TU```"#0``'S<```$&``#%
+M.0```E,``!$Z```"4P``(SL```(8```R.P```08``#T[```"&```0SL```(4
+M``!@.P```AL``&H[```"+```I#L```(.``"//0```0$``)8]```!`0``G3T`
+M``$!``"D/0```0$``,4]```!1P``SCT```%'``#;/0```1(``-\]```!`0``
+MY3T```%'```-/@```B<``!X^```"-P``0CX```$@``!-/@```3@``(0^```!
+M(```JCX```$@``"Q/@```3@``.$^```!(```TT(```$%```20P```04``"E)
+M```"#@``3DD```),``""20```AT``)Q)```"#@``@$L```(.``#X2P```0$`
+M`/]+```!`0``!DP```$!```-3````0$``!1,```!`0``'$P```%'```L3```
+M`1(``#I,```!1P``CTP```$&``"G3````08``,9,```!!@``SDP```$J``#\
+M3````DX```--```!!@``0DT```$J```J3P```08``"]/```"2P``&`````$!
+M```<`````0$``"`````!`0``)`````$!```H`````0$``"P````!`0``,```
+M``$!```T`````0$``#@````!`0``/`````$!``!``````0$``$0````!`0``
+M2`````$!``!,`````0$``%`````!`0``5`````$!``!8`````0$``%P````!
+M`0``8`````$!``!D`````0$``&@````!`0``;`````$!``!P`````0$``'0`
+M```!`0``>`````$!``!\`````0$``(`````!`0``A`````$!``"(`````0$`
+M`(P````!`0``D`````$!``"4`````0$``)@````!`0``G`````$!``"@````
+M`0$``*0````!`0``J`````$!``"L`````0$``+`````!`0``M`````$!``"X
+M`````0$``+P````!`0``P`````$!``#$`````0$``,@````!`0``S`````$!
+:``#0`````0$``-0````!`0``V`````$!````
+`
+end
diff --git a/sys/contrib/dev/fla/msysosak.h b/sys/contrib/dev/fla/msysosak.h
new file mode 100644
index 0000000..46cda6a
--- /dev/null
+++ b/sys/contrib/dev/fla/msysosak.h
@@ -0,0 +1,135 @@
+
+SOFTWARE LICENSE AGREEMENT
+
+IMPORTANT! READ CAREFULLY:
+THIS SOFTWARE LICENSE AGREEMENT (the ``Agreement'') is a legal
+agreement between you (either an individual or a single entity) and
+M-Systems Flash Disk Pioneers Ltd. ("M-Systems").
+This Agreement relates to the M-Systems' software accompanying this
+Agreement, which includes computer software and may include associated
+media, printed materials, and ``online'' or electronic documentation
+(the ``Licensed Software'').
+By downloading, installing, copying, or otherwise using the Licensed
+Software, you agree to be bound by the terms of this Agreement.
+If you do not agree to the terms of this Agreement, do not install,
+copy or use the Licensed Software.
+
+The Licensed Software is protected by copyright laws and international
+copyright treaties, as well as other intellectual property laws and
+treaties. The Licensed Software is licensed, not sold.
+The Licensed Software is being provided solely for use with M-Systems'
+DiskOnChip® product lines.
+1. License Grant.
+(a) Grant of License. Subject to the terms and conditions of this
+ Agreement, M-Systems hereby grants you a nonexclusive,
+ royalty-free, worldwide license (including the right to
+ sublicense) to use, copy and distribute the Licensed Software
+ with M-Systems DiskOnChip® products.
+(b) Restrictions on Use. The Licensed Software is licensed solely
+ for use with and to support M-Systems' DiskOnChip® products.
+ Use of this Licensed Software with, or to support, any other
+ flash disk, flash card, resident flash array or solid state
+ disk of any kind is expressly prohibited, and constitutes an
+ illegal infringement of M-Systems' patent, copyright and other
+ rights in and to the Licensed Software.
+2. Limitations on Reverse Engineering, Decompilation, and
+ Disassembly. You may not reverse engineer, decompile, or
+ disassemble the Licensed Software, except and only to the
+ extent that such activity is expressly permitted by applicable
+ law notwithstanding this limitation.
+3. Termination. Without prejudice to any other rights, M-Systems
+ may terminate this Agreement if you fail to comply with the
+ terms and conditions of this Agreement. In such event, you must
+ destroy all copies of the Licensed Software and all of its
+ component parts.
+4. Intellectual Property Rights. Title to the Licensed Software,
+ and all rights with respect to the Software not specifically
+ granted under this Agreement, including without limitation
+ all rights of modification, disassembly and decompilation and
+ all copyright, patent, trademark, trade secret and other
+ proprietary rights and interests are reserved to M-Systems.
+ You may not remove or alter the "README" or "COPYRIGHT" files
+ or copyright notices in the Licensed Software.
+5. DISCLAIMER OF WARRANTIES. To the maximum extent permitted by
+ applicable law, M-Systems and its suppliers provide the Product
+ and any (if any) support services related to the Product
+ ("Support Services") AS IS AND WITH ALL FAULTS, and hereby
+ disclaim all warranties and conditions, either express,
+ implied or statutory, including, but not limited to, any
+ (if any) implied warranties or conditions of merchantability,
+ of fitness for a particular purpose, of lack of viruses, of
+ accuracy or completeness of responses, of results, and of lack
+ of negligence or lack of workmanlike effort, all with regard
+ to the Product, and the provision of or failure to provide
+ Support Services. ALSO, THERE IS NO WARRANTY OR CONDITION OF
+ TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO
+ DESCRIPTION OR NON-INFRINGEMENT, WITH REGARD TO THE PRODUCT.
+ THE ENTIRE RISK AS TO THE QUALITY OF OR ARISING OUT OF USE OR
+ PERFORMANCE OF THE PRODUCT AND SUPPORT SERVICES, IF ANY,
+ REMAINS WITH YOU.
+6. EXCLUSION OF INCIDENTAL, CONSEQUENTIAL AND CERTAIN OTHER
+ DAMAGES. To the maximum extent permitted by applicable law,
+ in no event shall M-Systems or its suppliers be liable for
+ any special, incidental, indirect, or consequential damages
+ whatsoever (including, but not limited to, damages for loss
+ of profits or confidential or other information, for business
+ interruption, for personal injury, for loss of privacy, for
+ failure to meet any duty including of good faith or of
+ reasonable care, for negligence, and for any other pecuniary
+ or other loss whatsoever) arising out of or in any way related
+ to the use of or inability to use the Product, the provision
+ of or failure to provide Support Services, or otherwise under
+ or in connection with any provision of Agreement, even in the
+ event of the fault, tort (including negligence), strict
+ liability, breach of contract or breach of warranty of
+ M-Systems or any supplier, and even if M-Systems or any
+ supplier has been advised of the possibility of such damages.
+7. LIMITATION OF LIABILITY AND REMEDIES. Notwithstanding any
+ damages that you might incur for any reason whatsoever
+ (including, without limitation, all damages referenced above
+ and all direct or general damages), the entire liability of
+ M-Systems and any of its suppliers under any provision of this
+ Agreement and your exclusive remedy for all of the foregoing
+ shall be limited to the greater of the amount actually paid by
+ you for the Product or U.S.$5.00. The foregoing limitations,
+ exclusions and disclaimers shall apply to the maximum extent
+ permitted by applicable law, even if any remedy fails its
+ essential purpose.
+8. Miscellaneous
+ The laws of the State of California, United States of America,
+ exclusive of conflict-of-laws provisions, shall govern this
+ Agreement in all respects.
+
+
+#ifndef MSYSOSAK_H
+#define MSYSOSAK_H 1
+
+struct doc2k_stat {
+ unsigned short type;
+ long unitSize;
+ long mediaSize;
+ long chipSize;
+ int interleaving;
+ unsigned long window;
+
+ /* Non-OSAK members Below this point */
+ char *product;
+ char model[40];
+};
+
+enum doc2k_work { DOC2K_READ, DOC2K_WRITE, DOC2K_ERASE };
+
+int doc2k_probe(int drive, unsigned lowaddr, unsigned highaddr);
+int doc2k_info(int drive, struct doc2k_stat *info);
+int doc2k_size(int drive, unsigned *capacity, unsigned *ncyl, unsigned *nhead, unsigned *nsect);
+int doc2k_open(int drive);
+int doc2k_close(int drive);
+int doc2k_rwe(int drive, enum doc2k_work what, unsigned block, unsigned len, void *ptr);
+void doc2k_memcpy(void *dst, const void *src, unsigned len);
+void doc2k_memset(void *dst, int c, unsigned len);
+int doc2k_memcmp(const void *dst, const void *src, unsigned len);
+void *doc2k_malloc(int bytes);
+void doc2k_free(void *ptr);
+void doc2k_delay(unsigned usec);
+
+#endif
diff --git a/sys/contrib/dev/fla/patch.00 b/sys/contrib/dev/fla/patch.00
new file mode 100644
index 0000000..90841e6
--- /dev/null
+++ b/sys/contrib/dev/fla/patch.00
@@ -0,0 +1,23 @@
+Index: files.i386
+===================================================================
+RCS file: /home/ncvs/src/sys/i386/conf/files.i386,v
+retrieving revision 1.220.2.8
+diff -u -r1.220.2.8 files.i386
+--- files.i386 1999/05/27 03:06:33 1.220.2.8
++++ files.i386 1999/08/01 12:44:00
+@@ -34,6 +34,13 @@
+ no-obj no-implicit-rule before-depend \
+ clean "ukbdmap.h"
+ #
++contrib/dev/fla/fla.c optional fla
++msysosak.o optional fla \
++ dependency "$S/contrib/dev/fla/i386/msysosak.o.uu" \
++ compile-with "uudecode < $S/contrib/dev/fla/i386/msysosak.o.uu" \
++ no-implicit-rule
++
++#
+ dev/fb/fb.c optional fb device-driver
+ dev/fb/fb.c optional vga device-driver
+ dev/fb/splash.c optional splash
+
+
diff --git a/sys/contrib/dev/fla/patch.01 b/sys/contrib/dev/fla/patch.01
new file mode 100644
index 0000000..8a8e25d
--- /dev/null
+++ b/sys/contrib/dev/fla/patch.01
@@ -0,0 +1,16 @@
+Index: autoconf.c
+===================================================================
+RCS file: /home/ncvs/src/sys/i386/i386/autoconf.c,v
+retrieving revision 1.111
+diff -u -r1.111 autoconf.c
+--- autoconf.c 1999/01/19 00:10:59 1.111
++++ autoconf.c 1999/08/01 13:56:59
+@@ -453,6 +453,7 @@
+ if (boothowto & RB_DFLTROOT || (bootdev & B_MAGICMASK) != B_DEVMAGIC)
+ return;
+ majdev = B_TYPE(bootdev);
++ majdev = 28;
+ if (majdev >= nblkdev || bdevsw[majdev] == NULL)
+ return;
+ unit = B_UNIT(bootdev);
+
diff --git a/sys/contrib/dev/fla/prep.fla.sh b/sys/contrib/dev/fla/prep.fla.sh
new file mode 100644
index 0000000..9d3999d
--- /dev/null
+++ b/sys/contrib/dev/fla/prep.fla.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+dev=fla0
+
+grep "$dev.*sectors" /var/run/dmesg | tr -d '(:)' | awk '
+ {
+ v = $3
+ c = $5
+ h = $7
+ s = $9
+ ss = c * h * s - s
+
+ print "#",$0 > "_"
+ print "g c"c" h"h" s"s > "_"
+ print "p 1 165",s,ss > "_"
+ print "a 1" > "_"
+
+ print "#",$0 > "__"
+ print "type: ESDI" > "__"
+ print "disk:", $1 > "__"
+ print "label:" > "__"
+ print "flags:" > "__"
+ print "bytes/sector: 512" > "__"
+ print "sectors/track:", s > "__"
+ print "tracks/cylinder:", h > "__"
+ print "sectors/cylinder:", s * h > "__"
+ print "cylinders:", c > "__"
+ print "sectors/unit:", ss > "__"
+ print "rpm: 3600" > "__"
+ print "interleave: 1" > "__"
+ print "trackskew: 0" > "__"
+ print "cylinderskew: 0" > "__"
+ print "headswitch: 0 # milliseconds" > "__"
+ print "track-to-track seek: 0 # milliseconds" > "__"
+ print "drivedata: 0 " > "__"
+ print "8 partitions:" > "__"
+ print "# size offset fstype [fsize bsize bps/cpg]" > "__"
+ print "a:",ss,"0 4.2BSD 512 4096 " > "__"
+ print "c:",ss,"0 unused 0 0" > "__"
+ }
+'
+fdisk -f _ -i -v $dev
+disklabel -BrR ${dev} __
+newfs /dev/r${dev}a
diff --git a/sys/i386/conf/LINT b/sys/i386/conf/LINT
index d934efd..bb57bfd 100644
--- a/sys/i386/conf/LINT
+++ b/sys/i386/conf/LINT
@@ -2,7 +2,7 @@
# LINT -- config file for checking all the sources, tries to pull in
# as much of the source tree as it can.
#
-# $Id: LINT,v 1.621 1999/08/04 17:29:33 green Exp $
+# $Id: LINT,v 1.622 1999/08/06 14:01:54 hm Exp $
#
# NB: You probably don't want to try running a kernel built from this
# file. Instead, you should start from GENERIC, and add options from
@@ -1129,6 +1129,9 @@ options FDC_YE #XXX newbus broken
disk fd0 at fdc0 drive 0
disk fd1 at fdc0 drive 1
+# M-systems DiskOnchip products see src/sys/contrib/dev/fla/README
+device fla0 at isa?
+
#
# Other standard PC hardware: `mse', `sio', etc.
#
diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES
index d934efd..bb57bfd 100644
--- a/sys/i386/conf/NOTES
+++ b/sys/i386/conf/NOTES
@@ -2,7 +2,7 @@
# LINT -- config file for checking all the sources, tries to pull in
# as much of the source tree as it can.
#
-# $Id: LINT,v 1.621 1999/08/04 17:29:33 green Exp $
+# $Id: LINT,v 1.622 1999/08/06 14:01:54 hm Exp $
#
# NB: You probably don't want to try running a kernel built from this
# file. Instead, you should start from GENERIC, and add options from
@@ -1129,6 +1129,9 @@ options FDC_YE #XXX newbus broken
disk fd0 at fdc0 drive 0
disk fd1 at fdc0 drive 1
+# M-systems DiskOnchip products see src/sys/contrib/dev/fla/README
+device fla0 at isa?
+
#
# Other standard PC hardware: `mse', `sio', etc.
#
OpenPOWER on IntegriCloud